Merge "Update strace to 4.23."
am: 22c82c4a01

Change-Id: Ic66999f4a45179a6b8548ad8a72610d6b2de60d8
diff --git a/Android.bp b/Android.bp
index 149757c..f3ac00e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -78,6 +78,7 @@
         "hdio.c",
         "hostname.c",
         "inotify.c",
+        "inotify_ioctl.c",
         "io.c",
         "ioctl.c",
         "ioperm.c",
@@ -104,6 +105,7 @@
         "memfd_create.c",
         "mknod.c",
         "mmap_cache.c",
+        "mmap_notify.c",
         "mmsghdr.c",
         "mount.c",
         "mq.c",
@@ -113,6 +115,7 @@
         "netlink.c",
         "netlink_crypto.c",
         "netlink_inet_diag.c",
+        "netlink_kobject_uevent.c",
         "netlink_netfilter.c",
         "netlink_netlink_diag.c",
         "netlink_packet_diag.c",
@@ -129,13 +132,16 @@
         "open.c",
         "pathtrace.c",
         "perf.c",
+        "perf_ioctl.c",
         "personality.c",
         "pkeys.c",
         "poll.c",
         "prctl.c",
+        "print_aio_sigset.c",
         "print_dev_t.c",
         "print_group_req.c",
         "print_ifindex.c",
+        "print_mac.c",
         "print_mq_attr.c",
         "print_msgbuf.c",
         "print_sigevent.c",
@@ -239,6 +245,7 @@
     ] + [
         "-Wall",
         "-Werror",
+        "-Wno-initializer-overrides",
         "-Wno-missing-field-initializers",
         "-Wno-pointer-arith",
         "-Wno-unused-parameter",
diff --git a/CREDITS b/CREDITS
index 94cecfe..9ef85d1 100644
--- a/CREDITS
+++ b/CREDITS
@@ -43,6 +43,7 @@
 	Chen Jingpiao <chenjingpiao@gmail.com>
 	Cheolung Lee <chpie@grayhash.com>
 	Chris Dearman <chris.dearman@imgtec.com>
+	Chris Lamb <lamby@debian.org>
 	Chris Metcalf <cmetcalf@tilera.com>
 	Chris Zankel <chris@zankel.net>
 	Christian Neukirchen <chneukirchen@gmail.com>
@@ -232,5 +233,6 @@
 	Zach Brown <zach.brown@oracle.com>
 	Zev Weiss <zev@bewilderbeest.net>
 	Zhang Le <robert.zhangle@gmail.com>
+	Zhibin Li <08826794brmt@gmail.com>
 	Zubin Mithra <zubin.mithra@gmail.com>
 	Марк Коренберг <socketpair@gmail.com>
diff --git a/ChangeLog b/ChangeLog
index 6efa3a2..2787131 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,4031 @@
+2018-06-14  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Prepare for 4.23 release.
+	* NEWS: Update for 4.23 release.
+
+	Update copyright headers.
+	Headers updated automatically using maint/update_copyright_years.sh
+	script.
+
+	tests: add missing copyright headers.
+	* tests/prctl-spec-inject.test: Add copyright header.
+	* tests/qualify_personality.sh: Likewise.
+
+	maint: document release procedure.
+	* maint/README-release: New file.
+	* maint/gen-release-notes.sh: Likewise.
+	* maint/gen-release-github.sh: Likewise.
+	* maint/gen-release-gitlab.sh: Likewise.
+
+	maint: prepend contributor names in tag messages with an asterisk.
+	* maint/gen-tag-message.sh: Prepend every line of
+	gen-contributors-list.sh output with an asterisk.
+
+2018-06-14  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Update NEWS.
+
+2018-06-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Wire up rseq syscall.
+	This new syscall was introduced by Linux commit v4.17-1308-gd7822b1.
+
+	* linux/dummy.h (sys_rseq): New macro.
+	* linux/arm/syscallent.h (398): Add rseq entry.
+	* linux/i386/syscallent.h (386): Likewise.
+	* linux/powerpc/syscallent.h (387): Likewise.
+	* linux/powerpc64/syscallent.h (387): Likewise.
+	* linux/x32/syscallent.h (334): Likewise.
+	* linux/x86_64/syscallent.h (334): Likewise.
+
+2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: check decoding of io_pgetevents syscall.
+	* configure.ac (AC_CHECK_TYPES): Check for struct __aio_sigset
+	in <linux/aio_abi.h>.
+	* tests/aio_pgetevents.c: New file.
+	* tests/.gitignore: Add aio_pgetevents.
+	* tests/pure_executables.list: Likewise.
+	* tests/gen_tests.in (aio_pgetevents): New test.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Implement io_pgetevents syscall decoding.
+	Introduced by Linux commit v4.17-rc3-7-g7a074e9.
+
+	* print_aio_sigset.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* aio.c (print_io_getevents): Rename from SYS_FUNC(io_getevents), add
+	has_usig flag, print user sigset on exiting if has_usig is set to true.
+	(SYS_FUNC(io_getevents), SYS_FUNC(io_pgetevents)): New functions,
+	wrappers for print_io_getevents.
+	* linux/32/syscallent.h ([292]): Wire up io_pgetevents.
+	* linux/64/syscallent.h ([292]): Likewise.
+	* linux/i386/syscallent.h ([385]): Likewise.
+	* linux/x32/syscallent.h ([333]): Likewise.
+	* linux/x86_64/syscallent.h ([333]): Likewise.
+	* NEWS: Mention this improvement.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	travis: re-enable testing with the latest mainline kernel headers.
+	As <linux/signal.h> is out of the game now, the Linux commit
+	v4.17-rc3-7-g7a074e9 should not cause harm anymore, so let's enable
+	testing with the latest mainline kernel headers again.
+
+	* .travis.yml (matrix): Do not specify KBRANCH for KHEADERS=torvalds/linux.
+
+2018-06-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Workaround incompatibility between <linux/signal.h> and libc headers.
+	Override <linux/signal.h> with <signal.h> so that those few linux
+	headers that include <linux/signal.h> could be included along with libc
+	headers.
+
+	* linux/linux/signal.h: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+
+2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add personality specification syntax checks.
+	* tests/options-syntax.test: Add personality specification syntax
+	checks.
+
+	tests: add basic checks for personality designation support.
+	* tests/qualify_personality.sh: New file.
+	* tests/qualify_personality_empty.in: Likewise.
+	* tests/trace_personality_32.in: Likewise.
+	* tests/trace_personality_64.in: Likewise.
+	* tests/trace_personality_regex_32.in: Likewise.
+	* tests/trace_personality_regex_64.in: Likewise.
+	* tests/trace_personality_regex_x32.in: Likewise.
+	* tests/trace_personality_x32.in: Likewise.
+	* tests/Makefile.am (EXTRA_DIST): Add them.
+	* tests/gen_tests.in (trace_personality_32, trace_personality_64,
+	trace_personality_x32, trace_personality_regex_32,
+	trace_personality_regex_64, trace_personality_regex_x32): New tests.
+
+2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Add support for personality designation in regex qualifications.
+	* basic_filters.c (qualify_syscall_regex): Copy syscall name
+	to a temporary buffer, append the personality designation to it,
+	and check it against regular expression if the syscall name
+	hasn't been matched already.
+
+	References: https://github.com/strace/strace/issues/35
+
+2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Add support for personality designation in syscall qualifications.
+	* syscall.c (personality_designators): New array.
+	* defs.h (personality_designators): New declaration.
+	* basic_filters.c (qualify_syscall_separate_personality,
+	qualify_syscall_number_personality): New functions.
+	(qualify_syscall_number): Use qualify_syscall_separate_personality for
+	checking for a personality specification, call
+	qualify_syscall_number_personality for setting number set for specific
+	personality.
+	(qualify_syscall_name_personality): New function.
+	(qualify_syscall_name): Use qualify_syscall_separate_personality for
+	checking for a personality specification, call
+	qualify_syscall_name_personality for setting number set for specific
+	personality.
+	* strace.1.in (.SS Filtering): Document it.
+	* NEWS: Mention it.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+	Closes: https://github.com/strace/strace/issues/35
+
+2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add basic checks for inject=SET:syscall= expression syntax.
+	* tests/qual_fault-syscall.test: New test.
+	* tests/qual_inject-error-signal-syscall.test: Likewise.
+	* tests/qual_inject-retval-syscall.test: Likewise.
+	* tests/qual_inject-signal-syscall.test: Likewise.
+	* tests/Makefile.am (MISC_TESTS): Add them.
+	* tests/qual_fault-syntax.test: Add checks for inject=SET:syscall=
+	expression syntax.
+	* tests/qual_inject-syntax.test: Likewise.
+	* tests/qual_fault.test: Append $suffix to -e fault arguments, override
+	$NAME with $name_override if the latter is set.
+	* tests/qual_inject-error-signal.test: Append $suffix to -e inject
+	arguments, override $NAME with $name_override if the latter is set.
+	* tests/qual_inject-retval.test: Likewise.
+	* tests/qual_inject-signal.test: Likewise.
+
+2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Implement injection of syscalls with no side effects as an alternative to -1
+	* defs.h (INJECT_F_SYSCALL, INJECT_ACTION_FLAGS, TCB_TAMPERED_NO_FAIL,
+	syscall_tampered_nofail): New macros.
+	(inject_data): Add scno field.
+	* filter_qualify.c (struct inject_personality_data): New type.
+	(parse_inject_token): Add "pdata" argument, parse "syscall=" option.
+	(parse_inject_expression): Add "pdata" argument, forward it to
+	parse_inject_token.
+	(qualify_inject_common) <pdata>: New variable array, pass it to
+	parse_inject_expression, copy it into inject_vec.
+	* syscall.c (tamper_with_syscall_entering): Inject the specified syscall
+	if INJECT_F_SYSCALL is set.
+	(tamper_with_syscall_exiting): Update the check for a failed syscall
+	injection.
+	(get_syscall_result): Update get_error invocation.
+	* strace.1.in: Document new syscall injection expression.
+	* NEWS: Mention it.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+	Closes: https://github.com/strace/strace/issues/26
+
+2018-06-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	ia64: remove legacy i386 entries from the syscall entry table.
+	Remove the last piece of IA-32 mode support.  Besides being obsolete,
+	these bogus syscall entries cause problems with syscall name resolution.
+
+	* linux/ia64/syscallent.h [CST > 0]: Remove.
+
+	Complements: v4.21~17 "linux/ia64: remove IA-32 mode support"
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	linux: set error flags in arch_set_error on POWER and Alpha.
+	* alpha/set_error.c (arch_set_error): Set alpha_r3 to 1, update tracee's
+	REG_A3.
+	* powerpc/set_error.c (arch_set_error): Set bit 28 in CCR register,
+	update tracee's PT_CCR.
+
+	Fixes: v4.15~126 "Implement arch specific methods of changing syscall number and error code"
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: check decoding of IFLA_LINKINFO netlink attribute.
+	* tests/nlattr_ifla_linkinfo.c: New file.
+	* tests/pure_executables.list: Add nlattr_ifla_linkinfo.
+	* tests/.gitignore: Likewise.
+	* tests/gen_tests.in (nlattr_ifla_linkinfo): New test.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add print_quoted_stringn to print string with a size limit.
+	This is similar to print_quoted_cstring, but not quite the same.
+
+	* tests/print_quoted_string.c (print_quoted_stringn): New function.
+	* tests/tests.h (print_quoted_stringn): New declaration.
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add fallback_func argument to TEST_NESTED_NLATTR_OBJECT_EX_
+	* tests/test_nlattr.h (TEST_NESTED_NLATTR_OBJECT_EX_): Add fallback_func
+	argument, call it instead of print_quoted_hex.
+	(TEST_NESTED_NLATTR_OBJECT_EX, TEST_NESTED_NLATTR_OBJECT): Specify
+	print_quoted_hex as a fallback_func.
+	* tests/nlattr_ifla_af_spec.c: Specify print_quoted_hex as
+	a fallback_func in TEST_NESTED_NLATTR_OBJECT_EX_ calls.
+
+	tests/test_nlattr.h: add ability to provide additional nlattr payload.
+	* tests/test_nlattr.h (print_nlattr): Add add_data argument, print
+	opening square bracket if add_data is set to true.
+	(TEST_NLATTR_EX_): Rename from TEST_NLATTR_, add nla_total_len_
+	argument, use it for msg_len calculation, print square brackets
+	if nla_total_len_ is greater than nla_data_len_.
+	(TEST_NLATTR_): New macro, a wrapper for TEST_NLATTR_EX_.
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	rtnl_link: decode struct ifla_bridge_id unconditionally.
+	Since it is relatively simple.
+
+	* rtnl_link.c (decode_ifla_bridge_id): Provide struct definition for
+	the id variable.
+	[!HAVE_STRUCT_IFLA_BRIDGE_ID] (decode_ifla_bridge_id): Decode struct
+	ifla_bridge_id.
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: specify size for ethernet protocol.
+	Otherwise it tries to decode payload of size 1, which makes little
+	sense.
+
+	* nlattr.c (decode_nla_ether_proto) <opts>: Specify size field.
+
+	Fixes: v4.22-321-gfd0cd65 "nlattr: add ethernet protocol decoder"
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	rtnl_link: use ARRSZ_PAIR where appropriate.
+	It reduces code duplication somewhat and allows avoiding errors like
+	the one fixed in the previous commit.
+
+	* rtnl_link.c (decode_ifla_protinfo, decode_nla_linkinfo_data_bridge,
+	decode_nla_linkinfo_data_tun, decode_ifla_linkinfo, decode_ifla_port,
+	decode_ifla_vf_ports, decode_ifla_xdp,
+	DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg)): Use ARRSZ_PAIR in
+	decode_nlattr call arguments.
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	rtnl_link: fix incorrect variable names in ARRAY_SIZE arguments.
+	* rtnl_link.c (decode_nla_linkinfo_data_bridge): Change
+	rtnl_ifla_info_data_bridge_attrs to ifla_info_data_bridge_nla_decoders
+	in ARRAY_SIZE call.
+	(decode_nla_linkinfo_data_tun): Change rtnl_ifla_info_data_tun_attrs
+	to ifla_info_data_tun_nla_decoders in ARRAY_SIZE call.
+
+	Fixes: v4.22-328-g1e6d5a8 "rtnl_link: implement IFLA_INFO_DATA for bridges"
+	Fixes: v4.22-329-g4eab3a4 "rtnl_link: implement IFLA_INFO_DATA for tun devices"
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	mips: add missing pure flag to syscall entries.
+	* linux/mips/syscallent-n32.h ([6038], [6100], [6102], [6105], [6106],
+	[6108], [6109], [6178]): Add pure flag to getpid, getuid, getgid, geteuid,
+	getegid, getpgid, getpgrp, and gttid syscall descriptors.
+	* linux/mips/syscallent-n64.h ([5038], [5100], [5102], [5105], [5106],
+	[5108], [5109], [5178]): Likewise.
+	* linux/mips/syscallent-o32.h ([4020], [4024], [4047], [4049], [4050],
+	[4064], [4065], [4222]): Likewise.
+
+	Complements: v4.21~29 "Add pure syscall flag"
+
+2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	mips: add missing "never fails" flag to getpgrp syscall entries.
+	* linux/mips/syscallent-n32.h ([6109]): Add NF flag.
+	* linux/mips/syscallent-n64.h ([5109]): Likewise.
+	* linux/mips/syscallent-o32.h ([4065]): Likewise.
+
+	Complements: v4.21~46 "Add SYSCALL_NEVER_FAILS flag to getpgrp"
+
+2018-06-07  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Update NEWS.
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+	xlat: describe IPV4_DEVCONF_* weirdness.
+	* xlat/inet_devconf_indices.in: Add a comment about fallback definitions.
+
+2018-06-07  Dmitry V. Levin  <ldv@altlinux.org>
+
+	configure.ac: fix the check for struct tc_sizespec on old kernel headers
+	* configure.ac (AC_CHECK_TYPES): Include <linux/types.h> before
+	<linux/pkt_sched.h> to check for struct tc_sizespec on linux kernel
+	headers without v2.6.29-rc4~77^2~26 fix.
+
+2018-06-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	travis: use kernel headers from v4.17.
+	There is too much noise when using unreleased kernel uapi.
+
+	* ci/install-dependencies.sh (clone_repo): Add optional "branch"
+	argument, pass it to "git clone".
+	($KHEADERS): Pass $KBRANCH as branch argument of clone_repo.
+	* .travis.yml (matrix): Specify KBRANCH=v4.17 for
+	KHEADERS=torvalds/linux.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: check decoding of IFLA_AF_SPEC netlink attribute.
+	* configure.ac (AC_CHECK_TYPES): Check for struct ifla_cacheinfo in
+	<linux/rtnetlink.h>
+	(AC_CHECK_DECLS): Check for IFLA_AF_SPEC in <linux/rtnetlink.h>.
+	* tests/nlattr_ifla_af_spec.c: New file.
+	* tests/pure_executables.list: Add nlattr_ifla_af_spec.
+	* tests/.gitignore: Likewise.
+	* tests/gen_tests.in (nlattr_ifla_af_spec): New test.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add TEST_NESTED_NLATTR_ARRAY_EX to test_nlattr.h.
+	An ability to specify custom depth is going to be needed later to check
+	IFLA_AF_SPEC decoding.
+
+	* configure.ac (AC_CHECK_DECLS): Check for TCA_STAB_DATA in
+	<linux/pkt_sched.h>.
+	* tests/test_nlattr.h (TEST_NESTED_NLATTR_ARRAY_EX): Rename from
+	TEST_NESTED_NLATTR_ARRAY, add depth_ argument, perform padding and
+	output accordingly.
+	(TEST_NESTED_NLATTR_ARRAY): New macro, a thin wrapper around
+	TEST_NESTED_NLATTR_ARRAY_EX.
+	* tests/nlattr_tca_stab.c [!HAVE_DECL_TCA_STAB_DATA] (TCA_STAB_DATA):
+	New enumeration declaration.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: pass index to print_elem_ callback in TEST_NLATTR_NESTED_ARRAY.
+	* tests/test_nlattr.h (TEST_NLATTR_NESTED_ARRAY): Pass array index
+	to the print_elem_ callback.
+	* tests/nlattr_tca_stab.c (print_uint16): Add index argument.
+
+	tests: move common ifinfomsg boilerplate into a separate header.
+	* configure.ac (AC_CHECK_DECLS): Check for IFLA_PORT_SELF, IFLA_PROTINFO, and
+	IFLA_XDP in <linux/rtnetlink.h>.
+	* tests/nlattr_ifla.h: New file.
+	* tests/Makefile.am (EXTRA_DIST): Add it.
+	* tests/nlattr_ifla_brport.c [!HAVE_DECL_IFLA_PROTINFO] (IFLA_PROTINFO):
+	New declaration.
+	(hdrlen, init_ifinfomsg, print_ifinfomsg): Remove.
+	(IFLA_ATTR): Define to IFLA_PROTINFO.
+	Include nlattr_ifla.h.
+	* tests/nlattr_ifla_port.c [!HAVE_DECL_IFLA_PORT_SELF] (IFLA_PORT_SELF):
+	New declaration.
+	(hdrlen, init_ifinfomsg, print_ifinfomsg): Remove.
+	(IFLA_ATTR): Define to IFLA_PORT_SELF.
+	Include nlattr_ifla.h.
+	* tests/nlattr_ifla_xdp.c
+	* tests/nlattr_ifla_xdp.c [!HAVE_DECL_IFLA_XDP] (IFLA_XDP): New
+	declaration.
+	(hdrlen, init_ifinfomsg, print_ifinfomsg): Remove.
+	(IFLA_ATTR): Define to IFLA_XDP.
+	Include nlattr_ifla.h.
+
+	rtnl_link: implement IFLA_INFO_DATA for tun devices.
+	* xlat/rtnl_ifla_info_data_tun_attrs.in: New file.
+	* xlat/tun_device_types.in: Likewise.
+	* rtnl_link.c: Include xlat/rtnl_ifla_info_data_tun_attrs.h and
+	xlat/tun_device_types.h.
+	(decode_nla_tun_type, decode_nla_linkinfo_data_tun): New functions.
+	(ifla_info_data_tun_nla_decoders): New decoder dispatcher table.
+	(decode_nla_linkinfo_data): Use decode_nla_linkinfo_data_tun if kind
+	is
+	"tun".
+
+	rtnl_link: implement IFLA_INFO_DATA for bridges.
+	* xlat/rtnl_ifla_info_data_bridge_attrs.in: New file.
+	* rtnl_link.c: Include xlat/rtnl_ifla_info_data_bridge_attrs.h.
+	(ifla_info_data_bridge_nla_decoders): New decoder dispatcher table.
+	(decode_nla_linkinfo_data_bridge, decode_nla_linkinfo_data): New
+	functions.
+	(ifla_linkinfo_nla_decoders) <IFLA_INFO_DATA>: Use
+	decode_nla_linkinfo_data as a decoder.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	rtnl_link: implement IFLA_INFO_XSTATS decoding.
+	So far, only CAN provides it.
+
+	* rtnl_link.c (decode_nla_linkinfo_xstats_can,
+	decode_nla_linkinfo_xstats): New function.
+	(ifla_linkinfo_nla_decoders) <IFLA_INFO_XSTATS>: Use
+	decode_nla_linkinfo_xstats as a decoder.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	rtnl_link: add basic IFLA_INFO_* handling.
+	Dispatch for IFLA_INFO_* attributes should be performed based on the
+	string provided in a IFLA_INFO_KIND attribute.
+
+	* nlattr.h (struct ifla_linkinfo_ctx): New type definition.
+	* rtnl_link.c (decode_nla_linkinfo_kind): New function.
+	(ifla_linkinfo_nla_decoders) <IFLA_INFO_KIND>: Use
+	decode_nla_linkinfo_kind as decoder.
+	(decode_ifla_linkinfo): Add struct ifla_linkinfo_ctx context, pass it to
+	the decode_nlattr call as opaque data.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	rtnl_link: decode IFLA_AF_SPEC.
+	* xlat/in6_addr_gen_mode.in: New file.
+	* xlat/inet6_devconf_indices.in: Likewise.
+	* xlat/inet6_if_flags.in: Likewise.
+	* xlat/inet_devconf_indices.in: Likewise.
+	* xlat/rtnl_ifla_af_spec_inet6_attrs.in: Likewise.
+	* xlat/rtnl_ifla_af_spec_inet_attrs.in: Likewise.
+	* xlat/snmp_icmp6_stats.in: Likewise.
+	* xlat/snmp_ip_stats.in: Likewise.
+	* rtnl_link.c: Include netinet/in.h, xlat/in6_addr_gen_mode.h,
+	xlat/inet_devconf_indices.h, xlat/inet6_devconf_indices.h,
+	xlat/inet6_if_flags.h, xlat/rtnl_ifla_af_spec_inet_attrs.h,
+	xlat/rtnl_ifla_af_spec_inet6_attrs.h, xlat/snmp_icmp6_stats.h,
+	and xlat/snmp_ip_stats.h.
+	(decode_ifla_inet_conf, decode_ifla_inet6_flags,
+	decode_ifla_inet6_conf, decode_ifla_inet6_stats,
+	decode_ifla_inet6_cacheinfo, decode_ifla_inet6_icmp6_stats,
+	decode_ifla_inet6_token, decode_ifla_inet6_agm, decode_ifla_af,
+	decode_ifla_af_spec): New functions.
+	(ifla_inet_nla_decoders, ifla_inet6_nla_decoders,
+	nla_decoder_table_desc): New static constant variables.
+	(ifinfomsg_nla_decoders) <[IFLA_AF_SPEC]>: Change value from NULL to
+	decode_ifla_af_spec.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: add size check to decode_nla_xval and decode_nla_flags.
+	If the field size is known, do not print as valid numbers those
+	attributes that are too short, and ignore extra data.
+
+	This change puts xval/flags printing in line with the reset of attribute
+	decoders.
+
+	* nlattr.h (struct decode_nla_xlat_opts): Add size field.
+	* nlattr.c (decode_nla_xval, decode_nla_flags): Check that len is at
+	least opts->size, limit len to opts->size.
+	(decode_nla_ip_proto): Specify size of 1.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: add UID/GID netlink attribute decoders.
+	* nlattr.h (DECL_NLA(uid), DECL_NLA(gid)): New declarations.
+	* nlattr.c (decode_nla_uid, decode_nla_gid): New functions.
+
+	nlattr: add unsigned int decoders that print in hex form.
+	* nlattr.h (DECL_NLA(x8), DECL_NLA(x16), DECL_NLA(x32), DECL_NLA(x64)):
+	New declarations.
+	* nlattr.c (DECODE_NLA_INTEGER(x8, uint8_t, "%#" PRIx8),
+	DECODE_NLA_INTEGER(x16, uint16_t, "%#" PRIx16),
+	DECODE_NLA_INTEGER(x32, uint32_t, "%#" PRIx32),
+	DECODE_NLA_INTEGER(x64, uint64_t, "%#" PRIx64)): New decoders.
+
+	nlattr: add ethernet protocol decoder.
+	* nlattr.h (DECL_NLA(ether_proto)): New declaration.
+	* nlattr.c (process_host_order, decode_nla_ether_proto): New functions.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: add value processing support for xlat/flags nlattr decoders.
+	Needed for upcoming decoder of ethernet proto which is stored in the
+	host order and has to be converted to the network order before printing
+	as an xval constant.  This change also adds ability to provide
+	prefix/suffix in order to enclose the printed value in something that
+	describes the performed conversion.
+
+	* nlattr.h (struct decode_nla_xlat_opts): Add prefix, suffix, and
+	process_fn fields.
+	* nlattr.c (decode_nla_xval, decode_nla_flags): Handle process_fn,
+	prefix, snd uffix parameters.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: introduce decode_nla_flags.
+	Similar to decode_nla_xval.
+
+	* nlattr.c (decode_nla_flags): New function.
+	* nlattr.h: (DECL_NLA(flags)): New declaration.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: add ability to pass nla_type to decoder in decode_nlattr.
+	As of now, it's impossible to introduce a dispatching nlattr decoder
+	that performs actions based on the type of the message, so let's use
+	a combination of zero decoder list size and non-zero decoder pointer
+	for this.
+
+	This is going to be used later in IFLA_AF_SPEC decoding.
+
+	* nlattr.c (decode_nlattr_with_data): Handle zero size and non-NULL
+	decoders in a special way.
+	(decode_nlattr): Add an error message about ignoring of opaque_data
+	argument when zero size and non-NULL decoders are provided.
+	* nlattr.h (decode_nlattr): Add a comment about the new special case.
+
+2018-06-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: use STRINGIFY instead of _STR.
+	Remove _STR which is essentially the same as STRINGIFY but from
+	the namespace where we should not introduce new identifiers.
+
+	* tests/tests.h (_STR): Remove.
+	* tests/add_key.c (main): Replace _STR with STRINGIFY.
+	* tests/keyctl.c (XARG_STR): Likewise.
+	* tests/request_key.c (main): Likewise.
+
+2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: check decoding of IFLA_EVENT netlink attribute.
+	* tests/nlattr_ifinfomsg.c (main): Add a check for IFLA_EVENT attribute
+	decoding.
+
+2018-06-05  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: handle xlat constants that are not identifiers.
+	Extend xlat generator to support such input lines as
+		IPV4_DEVCONF_FORWARDING-1	0
+
+	This is going to be used later in IFLA_AF_SPEC decoding.
+
+	* xlat/gen.sh (cond_def): If the xlat value is not an identifier name,
+	extract an identifier name from the beginning of xlat value.
+
+2018-06-05  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat.c: handle NULL xlat in lookup routines as incremental search.
+	This is going to be used later in IFLA_AF_SPEC decoding.
+
+	* xlat.c (xlookup): Add static variable pos, store xlat there when it is
+	non-NULL, use pos for lookup.
+	(xlat_search, xlat_idx): Add static variables pos and memb_left, store
+	xlat and nmemb there when xlat is non-NULL, use them for lookup.
+	(printxvals_ex): Store the last non-NULL xlat in static variable "last".
+	If the first xlat argument is NULL, use "last" instead.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-05  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat.c: cleanup printxvals_ex a bit.
+	* xlat.c (printxvals_ex): Change "str" variable visibility to the whole
+	function, jump to va_end instead of duplicating call and return, return
+	!!str.
+
+	Leverage the fact that inet_protocols xlat is sorted.
+	* defs.h (inet_protocols): Move up, add description.
+	(inet_protocols_size): New declaration.
+	* net.c (inet_protocols_size): New constant variable.
+	* nlattr.c (decode_nla_ip_proto): Specify xlat_size, set xt to XT_SORTED.
+
+2018-06-04  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Print arp_hardware_types as a sorted xlat.
+	* rtnl_link.c (DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg)): Use
+	PRINT_FIELD_XVAL_SORTED_SIZED instead of PRINT_FIELD_XVAL for
+	arp_hardware_types.
+	* sock.c (print_ifreq): Likewise.
+
+	Provide a value for arp_hardware_types_size array.
+	* defs.h (arp_hardware_types_size): New declaration.
+	* sockaddr.c (arp_hardware_types_size): New variable.
+
+2018-06-04  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	print_fields.h: introduce PRINT_FIELD_XVAL_SORTED_SIZED.
+	For those cases when array definition is not readily available
+	and should be provided separately.
+
+	* print_fields.h (PRINT_FIELD_XVAL_SORTED_SIZED): New macro.
+
+2018-06-04  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/opipe.test: remove unneeded run_prog call.
+	There is no need to invoke grep using run_prog.
+
+	* tests/opipe.test: Remove run_prog decoration for the grep invocation.
+
+2018-06-04  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: check BPF_OBJ_GET_INFO_BY_FD decoding.
+	* tests/bpf-obj_get_info_by_fd-prog-v.c: New file.
+	* tests/bpf-obj_get_info_by_fd-prog.c: Likewise.
+	* tests/bpf-obj_get_info_by_fd-v.c: Likewise.
+	* tests/bpf-obj_get_info_by_fd.c: Likewise.
+	* configure.ac (AC_CHECK_HEADERS): Check for struct bpf_insn,
+	struct bpf_map_info, and struct bpf_prog_info.
+	* tests/pure_executables.list: Add bpf-obj_get_info_by_fd,
+	bpf-obj_get_info_by_fd-v, bpf-obj_get_info_by_fd-prog, and
+	bpf-obj_get_info_by_fd-prog-v.
+	* tests/.gitignore: Likewise.
+	* tests/gen_tests.in (bpf-obj_get_info_by_fd,
+	bpf-obj_get_info_by_fd-v, bpf-obj_get_info_by_fd-prog,
+	bpf-obj_get_info_by_fd-prog-v): New tests.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-04  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: enhance BPF_OBJ_GET_INFO_BY_FD decoder further.
+	* bpf.c (print_ebpf_prog): Remove "decode" argument, all users updated.
+	(print_bpf_prog_info): Use the minimum of xlated_prog_len values on
+	entering and exiting syscall as the size of xlated_prog_insns array
+	to be decoded.  Likewise, use the minimum of nr_map_ids values on entering
+	and exiting syscall as the size of map_ids array to be decoded.
+
+2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: enhance BPF_OBJ_GET_INFO_BY_FD decoder.
+	* bpf.c (print_bpf_map_info): Print only those fields that are
+	present in the structure, as it has been growing over time.
+	(print_bpf_prog_info): Likewise.  Print map_ids field as an array
+	of uint32_t instead of uint64_t; print "name" field.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: move handling of the saved state to BPF_OBJ_GET_INFO_BY_FD decoder.
+	As it is needed for proper info_len printing on exiting.
+
+	* bpf.c (print_bpf_obj_info_fn): Change return type to void, add "saved"
+	argument.
+	(struct obj_get_info_saved): New type definition.
+	(print_bpf_map_info, print_bpf_prog_info): Change return type to void,
+	add "saved" argument, do not handle private tcb data allocation and
+	obtainment.
+	(print_bpf_obj_info_addr): Change return type to void, add tcb argument,
+	print the address only on exiting.
+	(print_bpf_obj_info): Change return type to void, add "saved" argument.
+	(BEGIN_BPF_CMD_DECODER(BPF_OBJ_GET_INFO_BY_FD)): Handle private data
+	allocation/saving/restoring, use it for storing/printing info_len field.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: print log_buf field as a string.
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)): Print log_buf field
+	as a string.
+	* tests/bpf.c: Update expected output.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: print xlated_prog_insns only when xlated_prog_len had not been 0.
+	If xlated_prog_len is zero on entering syscall and non-zero on exiting,
+	the program itself is not written into xlated_prog_insns.
+
+	* bpf.c (print_ebpf_prog): Add decode argument, print the address only
+	if decode is false.
+	(BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)): Specify decode == true argument
+	to print_ebpf_prog.
+	(print_bpf_prog_info): Specify saved xlated_prog_len as decode argument
+	to print_ebpf_prog.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: move print_big_u64_addr inside print_ebpf_prog.
+	* bpf.c (print_ebpf_prog): Add static qualifier.  Change the type
+	of "addr" argument from kernel_ulong_t to uint64_t, print it using
+	print_big_u64_addr.
+	(BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD), print_bpf_prog_info): Do not call
+	print_big_u64_addr before print_ebpf_prog.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-06-02  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf_attr.h: add ATTRIBUTE_ALIGNED(8) to all fields of type uint64_t.
+	Our policy is that all fields of type uint64_t in this header file
+	must have this attribute.
+
+	This shouldn't cause any contradictions with <linux/bpf.h>
+	unless the latter is buggy.
+
+	By word "buggy" I mean containing such changes as Linux kernel commit
+	v4.16-rc1~123^2~109^2~5^2~4.
+
+	* bpf_attr.h (struct BPF_MAP_UPDATE_ELEM_struct): Add
+	ATTRIBUTE_ALIGNED(8) to "flags" field.
+	(struct bpf_prog_info_struct): Add ATTRIBUTE_ALIGNED(8) to "load_time"
+	field.
+
+2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: cast printf arguments to short when %h format qualifier is used.
+	Reported by clang.
+
+	* tests/mknod.c (main): Cast printf argument for %#03ho format to short.
+	* tests/mknodat.c (main): Likewise.
+	* tests/net-sockaddr.c (main): Cast printf argument for %hu format
+	to short.
+	* tests/semop.c (main): Likewise.
+
+2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat/evdev_keycode.in: remove constants with duplicating values.
+	Those are used for describing input device category and not specific
+	button.
+
+	Reported by clang.
+
+	* xlat/evdev_keycode.in (BTN_MOUSE, BTN_JOYSTICK, BTN_GAMEPAD, BTN_DIGI,
+	BTN_WHEEL, BTN_TRIGGER_HAPPY): Remove.
+
+2018-06-01  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	configure.ac: include <sys/socket.h> before <linux/rtnetlink.h>
+	This is needed for old Linux UAPI headers that do no contain commit
+	v3.1-rc2~19^2~29.
+
+	* configure.ac: Include <sys/socket.h> before <linux/rtnetlink.h>
+	in AC_CHECK_* invocations.
+
+2018-06-01  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	configure.ac: check for linux/rtnetlink.h instead of linux/if_link.h for declarations
+	Historically, type definitions and declarations related to netlink route
+	interface attributes were in linux/rtnetlink.h, later they were moved
+	elsewhere (first linux/if.h, then linux/if_link.h) with the inclusion
+	of the corresponding header file in linux/rtnetlink.h.
+
+	* configure.ac: Use <linux/rtnetlink.h> instead of <linux/if_link.h>
+	in checks for interface netlink attributes-related declarations
+	and definitions.
+
+2018-06-01  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	m4: move the gawk script from m4/gen_bpf_attr_m4.sh into a separate file
+	As it turns out, old versions of gawk do not support -e option.
+
+	* m4/gen_bpf_attr_m4.sh: Move the gawk script ...
+	* m4/gen_bpf_attr_m4.awk: ... here.
+
+2018-06-01  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	s390: wire up kexec_file_load syscall.
+	* linux/s390/syscallent.h ([381]): Add kexec_file_load syscall.
+	* linux/s390/syscallent.h ([381]): Likewise.
+
+2018-06-01  Zhibin Li  <08826794brmt@gmail.com>
+
+	tests: check short read of struct flock/flock64.
+	* tests/fcntl-common.c (test_flock_einval): Check short read
+	of struct flock.
+	(test_flock64_einval): Check short read of struct flock64.
+
+2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: extend struct flock/flock64 decoding checks.
+	* tests/fcntl-common.c (test_flock_einval, test_flock): Create
+	struct_kernel_flock object using tail_alloc.
+	(test_flock64_einval): Create struct_kernel_flock64 object using
+	tail_alloc.
+	* tests/fcntl64.c (test_flock64_lk64): Likewise.
+
+2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: extend F_OFD_* decoding checks.
+	Check that non-faulty F_OFD_* fcntl operations are decoded properly.
+
+	* tests/fcntl-common.c: Include <string.h>.
+	(test_flock64_ofd): New function.
+	(test_flock64): Invoke it, remove [F_OFD_SETLK].
+
+2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests/fcntl-common.c: define and initialize errstr.
+	Initialize errstr inside invoke_test_syscall so that its users
+	won't have to go into trouble of caring about clobbering errno.
+
+	* tests/fcntl-common.c (errstr): New variable.
+	(invoke_test_syscall): Initialize it.
+	(test_flock_einval, test_flock64_einval, test_flock,
+	test_f_owner_ex_type_pid): Use it.
+	* tests/fcntl.c (test_flock64_undecoded): Likewise.
+	* tests/fcntl64.c (test_flock64_lk64): Likewise.
+
+2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests/fcntl-common.c: add fd argument to invoke_test_syscall.
+	Extend invoke_test_syscall for later use with different file
+	descriptors.
+
+	* tests/fcntl-common.c (invoke_test_syscall): Add fd argument, pass it
+	to TEST_SYSCALL_NR syscall.  All users updated.
+
+2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: move F_OFD_SETLK* checks from fcntl64.c to fcntl-common.c.
+	This change enables F_OFD_SETLK* tests for fcntl as well.
+
+	* tests/fcntl64.c (test_flock64): Rename to test_flock64_lk64.
+	[F_OFD_SETLK]: Remove.
+	(test_flock64_einval): Move ...
+	* tests/fcntl-common.c: ... here.
+	(test_flock64_lk64): New protype.
+	(test_flock64_einval, test_flock64): New functions.
+	* tests/fcntl.c (test_flock64_einval): Rename to test_flock64_undecoded.
+	(TEST_FLOCK64_UNDECODED): New macro.
+	(test_flock64): Rename to test_flock64_lk64, replace TEST_FLOCK64_EINVAL
+	with TEST_FLOCK64_UNDECODED.
+
+2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: move F_OWNER_* tests to fcntl-common.c.
+	This change enables F_OWNER_* tests for fcntl64 as well.
+
+	* tests/fcntl.c: Move main, [TEST_FLOCK64_EINVAL],
+	and [TEST_F_OWNER_EX] ...
+	* tests/fcntl-common.c: ... here.
+	(test_flock64): New prototype.
+	* tests/fcntl64.c (main): Remove.
+
+2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: rename struct_flock.c to fcntl-common.c.
+	It is not limited to struct flock, more fcntl tests are going to land
+	in this file.
+
+	* tests/struct_flock.c: Rename to fcntl-common.c.
+	* tests/Makefile.am (EXTRA_DIST): Rename struct_flock.c
+	to fcntl-common.c.
+	* tests/fcntl.c: Likewise.
+	* tests/fcntl64.c: Likewise.
+
+2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: check decoding of new FRA_* netlink attributes.
+	* configure.ac (AC_CHECK_TYPES): Check for struct fib_rule_port_range
+	in <linux/fib_rules.h>.
+	* tests/nlattr_fib_rule_hdr.c: Include <linux/in.h>.
+	(FRA_PROTOCOL, FRA_IP_PROTO, FRA_SPORT_RANGE, FRA_DPORT_RANGE): New
+	macro constants.
+	[!HAVE_STRUCT_FIB_RULE_PORT_RANGE] (struct fib_rule_port_range): New
+	type.
+	(main): Check decoding of new FRA_* netlink attributes.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	rtnl_rule: decode new FRA_* attributes.
+	* nlattr.h (DECL_NLA(ip_proto), DECL_NLA(rt_proto)): New declarations.
+	* nlattr.c (decode_nla_ip_proto): New function.
+	* rtnl_route.c (decode_nla_rt_proto): Likewise.
+	* rtnl_rule.c (decode_rule_port_rang): Likewise.
+	(fib_rule_hdr_nla_decoders) <[FRA_PROTOCOL]>: New attribute, introduced
+	by Linux commit v4.17-rc1~148^2~371.
+	(fib_rule_hdr_nla_decoders) <[FRA_IP_PROTO], [FRA_SPORT_RANGE],
+	[FRA_DPORT_RANGE]>: New attributes, introduced by Linux commit
+	v4.17-rc1~148^2~328^2~4.
+	* xlat/rtnl_rule_attrs.in (FRA_PROTOCOL, FRA_IP_PROTO, FRA_SPORT_RANGE,
+	FRA_DPORT_RANGE): New constants.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: introduce decode_nla_xval helper.
+	* nlattr.c (decode_nla_xval): New function.
+	* nlattr.h: Include "xlat.h".
+	(struct decode_nla_xlat_opts): New type.
+	(DECL_NLA(xval)): New declaration.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-30  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Move definitions of xlat_type and xlat_style from defs.h to xlat.h.
+	* defs.h (enum xlat_type, enum xlat_style, XLAT_STYLE_FORMAT_SHIFT,
+	XLAT_STYLE_VERBOSITY_MASK, XLAT_STYLE_FORMAT_MASK, XLAT_STYLE_SPEC_BITS,
+	XLAT_STYLE_MASK): Move ...
+	* xlat.h: ... here.
+
+	travis: switch from gcc-7 to gcc-8.
+	* .travis.yml (matrix): Change gcc-7 to gcc-8.
+
+2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: use syscall() for ioctl() calls with oversized arguments.
+	* tests/ioctl_inotify.c (sys_ioctl): New function.
+	(main): Use sys_ioctl for ioctl calls with oversized arguments.
+	* tests/ioctl_loop.c: Likewise.
+	* tests/ioctl_perf.c: Likewise.
+
+2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	print_ifindex: respect xlat style settings.
+	Print interface indices according to the preferred xlat style settings.
+
+	* print_ifindex.c (INI_PFX, INI_SFX): New helper macros.
+	[HAVE_IF_INDEXTONAME] (get_ifname): New function.
+	[HAVE_IF_INDEXTONAME] (print_ifindex): Implement as a wrapper around
+	get_ifname and print_xlat_ex.
+
+2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/test_nlattr.h: fix pointer calculation in TEST_NLATTR_ARRAY, take 2
+	The old code works only when an array contains exactly two items.
+
+	* tests/test_nlattr.h (TEST_NLATTR_ARRAY): Fix pointer address
+	for the case of incomplete read.
+
+2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: print index names in netlink meminfo array.
+	* xlat/netlink_sk_meminfo_indices.in: New file.
+	* nlattr.c: Include xlat/netlink_sk_meminfo_indices.h.
+	(decode_nla_meminfo): Use print_array_ex, pass
+	netlink_sk_meminfo_indices as index xlat table.
+	* tests/nlattr_inet_diag_msg.c: Update expected output.
+
+2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Introduce ARRSZ_PAIR macro.
+	A shorthand similar to ARG_STR in its purpose: it provides and ability
+	to pass an array an its size without variable name duplication.
+
+	* macros.h (ARRSZ_PAIR): New macro.
+
+2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	print_array: add support for printing array indices.
+	* defs.h (XLAT_STYLE_SPEC_BITS, XLAT_STYLE_MASK): New macro constants.
+	(tfetch_mem_fn, print_fn): New typedefs.
+	(enum print_array_flag_bits, enum print_array_flags): New enumerations.
+	(print_array_ex): Rename from print_array, add flags, index_xlat,
+	index_xlat_size, and index_dflt arguments.
+	(print_array): New static inline function, a thin wrapper around
+	print_array_ex.
+	util.c: Include "xlat.h".
+	(print_array): Rename to print_array_ex, add flags, index_xlat,
+	index_xlat_size, and index_dflt arguments.  Print array indices
+	according to the style settings specified by flags if PAF_PRINT_INDICES
+	is set.
+
+2018-05-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Enhance printing of unfetchable object addresses in sequences and arrays
+	* btrfs.c (btrfs_print_tree_search): Print the address of unfetchable
+	object inside the sequence using printaddr_comment.
+	* msghdr.c (decode_msg_control): Likewise.
+	* execve.c (printargv): Print the address of unfetchable object inside
+	the array using printaddr_comment.
+	* netlink.c (fetch_nlmsghdr): Add in_array argument.  When in_array
+	is true, print the address of unfetchable object using
+	printaddr_comment.
+	* nlattr.c (fetch_nlattr): Likewise.
+	* tests/execve.c (main): Update expected output.
+	* tests/execveat.c (main): Likewise.
+	* tests/msg_control.c (test_scm_rights1, test_scm_rights2,
+	test_scm_security): Likewise.
+	* tests/netlink_protocol.c (send_query): Likewise.
+	* tests/nlattr.c (test_nlattr): Likewise.
+
+2018-05-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	print_array: enhance printing of unfetchable object addresses.
+	When umoven_func invocation fails to fetch data, it prints the faulty
+	address.  If this happens to a subsequent umoven_func invocation,
+	the printed address may be undistinguishable from a valid data printed
+	by print_func, e.g. when the data is printed in a numeric form like
+	[0x1, 0x2, 0x3, 0xdefaced].
+
+	Fix this source of confusion by moving the printing of the faulty
+	address from umoven_func to print_array itself.  This change renames
+	umoven_func to tfetch_mem_func and changes its semantics, so that
+	 - tfetch_mem_func never prints anything;
+	 - tfetch_mem_func returns true if the fetch succeeded,
+	   and false otherwise.
+
+	* defs.h (print_array): Replace umoven_func argument with
+	tfetch_mem_func.
+	* util.c (print_array): Replace umoven_func argument with
+	tfetch_mem_func, document expected tfetch_mem_func return value
+	semantics.  When tfetch_mem_func returns false, print either addr
+	or "... /* addr */" depending on the context (inside the array or not).
+	* bpf.c (print_ebpf_prog, print_bpf_prog_info,
+	BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)): Replace umoven_or_printaddr
+	argument of print_array with tfetch_mem.
+	* bpf_filter.c (print_bpf_fprog): Likewise.
+	* btrfs.c (btrfs_print_logical_ino_container,
+	btrfs_print_ino_path_container, btrfs_print_qgroup_inherit,
+	btrfs_ioctl): Likewise.
+	* dm.c (dm_decode_dm_target_deps): Likewise.
+	* epoll.c (epoll_wait_common): Likewise.
+	* file_ioctl.c (file_ioctl): Likewise.
+	* ipc_sem.c (tprint_sembuf_array): Likewise.
+	* kexec.c (print_kexec_segments): Likewise.
+	* mem.c (SYS_FUNC(subpage_prot)): Likewise.
+	* net.c (print_getsockopt): Likewise.
+	* netlink.c (decode_nlmsgerr_attr_cookie): Likewise.
+	* netlink_netlink_diag.c (decode_netlink_diag_groups): Likewise.
+	* netlink_packet_diag.c (decode_packet_diag_mclist): Likewise.
+	* netlink_unix_diag.c (decode_unix_diag_inode): Likewise.
+	* nlattr.c (decode_nla_meminfo): Likewise.
+	* numa.c (print_nodemask, SYS_FUNC(move_pages),
+	* perf_ioctl.c (perf_ioctl_query_bpf): Likewise.
+	* poll.c (decode_poll_entering): Likewise.
+	* printsiginfo.c (print_siginfo_array): Likewise.
+	* rtnl_tc.c (decode_tca_stab_data): Likewise.
+	* sock.c (decode_ifconf): Likewise.
+	* uid.c (print_groups): Likewise.
+	* io.c (SYS_FUNC(io_submit), SYS_FUNC(io_getevents)): Replace
+	umoven_or_printaddr argument of print_array with tfetch_mem.
+	(tprint_iov_upto): Replace umoven_or_printaddr_ignore_syserror
+	with tfetch_mem_ignore_syserror.
+	* v4l2.c (print_v4l2_format_fmt): Replace umoven_or_printaddr argument
+	of print_array with tfetch_mem.
+	(print_v4l2_ext_controls): Replace umoven_or_printaddr_ignore_syserror
+	with tfetch_mem_ignore_syserror.
+	* mmsghdr.c (fetch_struct_mmsghdr_or_printaddr): Rename
+	to fetch_struct_mmsghdr_for_print, do not print address, return bool.
+	(decode_mmsgvec): Replace fetch_struct_mmsghdr_or_printaddr
+	with fetch_struct_mmsghdr_for_print.
+	* tests/aio.c (main): Update expected output.
+	* tests/bpf.c (print_BPF_PROG_QUERY_attr5): Likewise.
+	* tests/ioctl_perf-success.c (main): Likewise.
+	* tests/ioctl_v4l2.c (main): Update expected output.
+	* tests/kexec_load.c (main): Likewise.
+	* tests/mmsg_name.c (test_mmsg_name): Update expected output.
+	* tests/move_pages.c (print_page_array, print_node_array): Likewise.
+	* tests/poll.c (print_pollfd_array_entering): Likewise.
+	* tests/preadv-pwritev.c (main): Likewise.
+	* tests/preadv2-pwritev2.c (dumpio): Likewise.
+	* tests/process_vm_readv_writev.c (print_iov): Likewise.
+	* tests/pwritev.c (print_iovec): Likewise.
+	* tests/readv.c (main): Likewise.
+	* tests/seccomp-filter-v.c
+	* tests/semop.c (main): Likewise.
+	* tests/set_mempolicy.c (print_nodes): Likewise.
+	* tests/setgroups.c (main): Likewise.
+	* tests/test_nlattr.h (print_nlattr) Likewise.
+
+	Co-Authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
+
+2018-05-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Introduce tfetch_* family of functions and macros.
+	These new functions are going to be used instead of umove_or_printaddr*
+	as umoven_func argument of print_array.
+
+	* defs.h (tfetch_mem64, tfetch_mem64_ignore_syserror): New
+	function prototypes.
+	(tfetch_mem, tfetch_mem_ignore_syserror): New static inline
+	wrappers.
+	(tfetch_obj): New macro wrapper around tfetch_mem.
+	* util.c (tfetch_mem64, tfetch_mem64_ignore_syserror): New
+	functions.
+	(umoven_or_printaddr64, umoven_or_printaddr64_ignore_syserror): Use
+	them.
+
+2018-05-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Introduce printaddr_comment.
+	* defs.h (printaddr_comment): New static inline wrapper around
+	tprintf_comment.
+
+	Turn printaddr into a thin wrapper around printaddr64.
+	* util.c (printaddr): Move ...
+	* defs.h: ... here, add "static inline" qualifiers.
+
+2018-05-29  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	defs.h: add comments about umove* return values.
+	* defs.h (umoven, umoven_or_printaddr64,
+	umoven_or_printaddr64_ignore_syserror, umovestr): Add comments about
+	return values.
+
+2018-05-28  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: use TAIL_ALLOC_OBJECT_CONST_PTR where appropriate.
+	* tests/kcmp.c (main): Use TAIL_ALLOC_OBJECT_CONST_PTR.
+	* tests/modify_ldt.c (main): Likewise.
+	* tests/netlink_protocol.c (send_query): Likewise.
+	* tests/ptrace.c (test_peeksiginfo, main): Likewise.
+	* tests/s390_guarded_storage.c (main): Likewise.
+	* tests/s390_sthyi.c (main): Likewise.
+	* tests/xet_thread_area_x86.c (main): Likewise.
+
+2018-05-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: decode bpf_attr.info field used by BPF_OBJ_GET_INFO_BY_FD command.
+	* bpf_attr.h [!BPF_TAG_SIZE] (BPF_TAG_SIZE): Define.
+	[BPF_TAG_SIZE]: Check that BPF_TAG_SIZE is 8.
+	(struct bpf_map_info_struct, struct bpf_prog_info_struct): New
+	structures.
+	(bpf_map_info_struct_size, expected_bpf_map_info_struct_size,
+	bpf_prog_info_struct_size, expected_bpf_prog_info_struct_size): New
+	macro constants.
+	* bpf.c (print_bpf_obj_info_fn): New type.
+	(print_bpf_map_info, print_bpf_prog_info, fetch_bpf_obj_info,
+	print_bpf_obj_info_addr, print_bpf_obj_info): New functions.
+	(BEGIN_BPF_CMD_DECODER(BPF_OBJ_GET_INFO_BY_FD)): Print bpf_fd and info_len
+	fields only on entering, call print_bpf_obj_info for printing info field.
+	* tests/bpf.c (BPF_OBJ_GET_INFO_BY_FD_checks): Print info field
+	as a pointer.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: add support for checking structures outside union bpf_attr.
+	struct bpf_prog_info and bpf_map_info need essentially the same handling
+	as union bpf_attr.
+
+	* gen_bpf_attr_check.sh: Derive type_name from $struct if it doesn't
+	start with "BPF_", derive TYPE_NAME from type_name, use them in code
+	generation.
+	* m4/gen_bpf_attr_m4.sh: Rewrite parsing/generation code into awk,
+	add support for structures outside union bpf_attr.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-28  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: remove bpf_priv_data.
+	As various bpf commands need different data to save between entering
+	and exiting of the syscall, do not emulate union bpf_attr approach.
+
+	* bpf.c (struct bpf_priv_data): Remove.
+	(DECL_BPF_CMD_DECODER): Remove "struct bpf_priv_data *" argument.
+	(BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)): Use set_tcb_priv_ulong
+	and get_tcb_priv_ulong to keep bpf_attr.query.prog_cnt field.
+	(SYS_FUNC(bpf)): Remove priv variable, do not initialize it,
+	and do not pass it to bpf_cmd_decoders.
+
+2018-05-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add union bpf_attr.query.prog_ids field decoding checks.
+	* tests/bpf-success-v.c: New file.
+	* tests/bpf-success.c: Likewise.
+	* tests/bpf-success-v.test: New test.
+	* tests/bpf-success.test: Likewise.
+	* tests/.gitignore: Add bpf-success and bpf-success-v.
+	* tests/Makefile.am (check_PROGRAMS): Likewise.
+	(DECODER_TESTS): Add bpf-success.test and bpf-success-v.test.
+	* tests/bpf.c [INJECT_RETVAL] (sys_bpf): Check that retuned value
+	is equivalent to the injected one; append "(INJECTED)" string to errstr.
+	(prog_load_ids, prog_load_ids_ptr): New variables.
+	(init_BPF_PROG_QUERY_attr4, print_BPF_PROG_QUERY_attr4,
+	init_BPF_PROG_QUERY_attr5, print_BPF_PROG_QUERY_attr5): New functions.
+	(BPF_PROG_QUERY_checks): Drop "const" qualifier, add new checks.
+
+	bpf: BPF_PROG_QUERY bpf_attr.query.prog_ids printing fixes.
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)): Use
+	print_uint32_array_member instead of print_uint64_array_member for
+	printing prog_ids elements (and change the type of prog_id_buf from
+	uint64_t to uint32_t), as they are 32-bit; use common trick with
+	print_big_u64_addr for handling possible ambiguity with prog_ids
+	address.
+	* tests/bpf.c (BIG_ADDR_MAYBE): New macro.
+	(BPF_PROG_QUERY_checks): Update expected output.
+
+	bpf: add support for instruction decoding.
+	* xlat/ebpf_regs.in: New file.
+	* bpf.c (struct ebpf_insn, struct ebpf_insns_data): New type definitions.
+	(print_ebpf_insn, print_ebpf_prog): New functions.
+	(DEF_BPF_CMD_DECODER(BPF_PROG_LOAD)): Use them.
+
+2018-05-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: check decoding of successful PERF_EVENT_IOC_{ID,QUERY_BPF} ioctls
+	As these have some argument output on the exit path.
+
+	* tests/ioctl_perf-success.c: New file.
+	* tests/ioctl_perf-success.test: New test.
+	* tests/Makefile.am (DECODER_TESTS): Add it.
+	(check_PROGRAMS): Add ioctl_perf-success.
+	* tests/.gitignore: Likewise.
+	* tests/ioctl_perf.c: Remove TODO.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Implement PERF_EVENT_IOC_* decoding.
+	* perf.c (fetch_perf_event_attr, print_perf_event_attr): Remove "static"
+	qualifier.
+	* defs.h (fetch_perf_event_attr, print_perf_event_attr): New
+	declarations.
+	* perf_event_struct.h (struct perf_event_query_bpf): New type
+	definition.
+	* perf_ioctl.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* xlat/perf_ioctl_cmds.in: New file.
+	* xlat/perf_ioctl_flags.in: Likewise.
+	* ioctl.c (ioctl_decode) <case '$'>: Call perf_ioctl.
+	* tests/gen_tests.in (ioctl_perf): New test.
+	* tests/ioctl_perf.c: New file.
+	* tests/pure_executables.list: ioctl_perf.
+	* tests/.gitignore: Likewise.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-28  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: fix ipc_msgbuf.test.
+	* tests/ipc_msgbuf.test: Fix -a argument.
+
+2018-05-25  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: update IPPROTO_* constants.
+	* xlat/inet_protocols.in (IPPROTO_GGP, IPPROTO_HELLO, IPPROTO_ND):
+	Remove, not defined in Linux.
+	(IPPROTO_BEETPH): New constant, introduced by Linux commit
+	v2.6.19-rc1~33^2.
+	(IPPROTO_L2TP): New constant, introduced by Linux commit
+	v2.6.35-rc1~473^2~594.
+	(IPPROTO_MH): New constant, introduced by Linux commit
+	v2.6.19-rc1~1272^2~157.
+	Add default values to constants, sort the file.
+
+	xlat: add fallback definitions to RTPROT_* constants.
+	* xlat/routing_protocols.in: Add default values to constants.
+
+	xlat: add SECCOMP_FILTER_FLAG_SPEC_ALLOW.
+	* xlat/seccomp_filter_flags.in (SECCOMP_FILTER_FLAG_SPEC_ALLOW): New
+	constant, introduced by Linux commit v4.17-rc3-24-g00a02d0.
+	* tests/seccomp-filter.c: Update expected output.
+	* tests/seccomp-filter-v.c: Likewise.
+
+	prctl: add PR_GET_SPECULATION_CTRL/PR_SET_SPECULATION_CTRL decoding.
+	* xlat/pr_spec_cmds.in: New fille.
+	* xlat/pr_spec_get_store_bypass_flags.in: Likewise.
+	* xlat/pr_spec_set_store_bypass_flags.in: Likewise.
+	* xlat/prctl_options.in (PR_GET_SPECULATION_CTRL,
+	PR_SET_SPECULATION_CTRL): New constants, introduced by Linux commit
+	v4.17-rc3-15-gb617cfc.
+	* prctl.c (SYS_FUNC(prctl)) <case PR_GET_SPECULATION_CTRL,
+	case PR_SET_SPECULATION_CTRL>: Implement decoding of new prctl options.
+	* tests/Makefile.am (check_PROGRAMS): Add prctl-spec-inject.
+	(DECODER_TESTS): Add prctl-spec-inject.test.
+	* tests/prctl-spec-inject.c: New file.
+	* tests/prctl-spec-inject.test: New test.
+	* tests/.gitignore: Add prctl-spec-inject.
+
+	tests: add keyctl variants with different xlat verbosity levels.
+	* tests/keyctl-Xabbrev.c: New file.
+	* tests/keyctl-Xraw.c: Likewise.
+	* tests/keyctl-Xverbose.c: Likewise.
+	* tests/keyctl.c (XARG_STR): New macro.
+	(do_keyctl): Print command in accordance with XLAT_RAW/XLAT_VERBOSE settings.
+	(main): Update expected output.
+	* tests/pure_executables.list: Add keyctl-Xabbrev, keyctl-Xraw,
+	and keyctl-Xverbose.
+	* tests/.gitignore: Likewise.
+	* tests/gen_tests.in (keyctl-Xabbrev, keyctl-Xraw, keyctl-Xverbose): New
+	tests.
+
+	keyctl: print KEYCTL_SET_REQKEY_KEYRING argument as an integer.
+	* xlat/key_reqkeys.in: Add #val_type int.
+	* keyctl.c (SYS_FUNC(keyctl)) <case KEYCTL_SET_REQKEY_KEYRING>: Print
+	arg2 as an integer.
+	* tests/keyctl.c: Update expected output.
+
+	keyctl: respect xlat style when printing errno.
+	* keyctl.c (keyctl_reject_key): Use print_xlat_ex for printing error
+	argument.
+
+2018-05-25  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	syscall.c: unify error value printing.
+	There's little reason not to decode error code for syscalls printed in
+	raw; moreover, it creates inconsistencies for unknown syscall printing.
+
+	Another issue was with error numbers unknown to strace: previously, they
+	were printed as "... = -1 1234 (Unknown error 1234)" which looked kinda
+	weird.
+
+	* syscall.c (print_err_ret): New function.
+	(syscall_exiting_trace): Remove u_error variable, use tcp->u_error
+	instead. Remove u_error_str variable.
+	(syscall_exiting_trace) <if (raw(tcp))>: Call print_err_ret if u_error
+	is non-zero.
+	(syscall_exiting_trace) <if (!(sys_res & RVAL_NONE) && tcp->u_error)>:
+	Use print_err_ret for default error printing.
+	* tests/nsyscalls.c [!LINUX_MIPSO32] (test_syscall): Update expected
+	output.
+	* tests/qual_fault.c (invoke) <if (is_raw)>: Likewise.
+	* strace.1.in (.SH DESCIPTION): Update unknown syscall example.
+
+2018-05-25  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	ioctl: implement INOTIFY_IOC_SETNEXTWD decoding.
+	* inotify_ioctl.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* defs.h (DECL_IOCTL(inotify)): New declaration.
+	* ioctl.c (ioctl_decode) <case 'I'>: Call inotify_ioctl.
+	* tests/ioctl_inotify.c: New file.
+	* tests/.gitignore: Add ioctl_inotify.
+	* tests/pure_executables.list: Likewise.
+	* tests/gen_tests.in (ioctl_inotify): New test.
+
+	tests/test_nlattr.h: avoid testing cropped objects of size 1.
+	* tests/test_nlattr.h (TEST_NLATTR_OBJECT_EX_): Check
+	"len < sizeof(obj_)" case only if "sizeof(obj_) > 1".
+
+	tests: pass index to print_elem_ callback in TEST_NLATTR_ARRAY.
+	* tests/test_nlattr.h (TEST_NLATTR_ARRAY): Pass array index to the
+	print_elem_ callback.
+	* tests/nlattr_inet_diag_msg.c (print_uint): Add index argument.
+	* tests/nlattr_netlink_diag_msg.c (print_xlong): Likewise.
+	* tests/nlattr_packet_diag_msg.c (print_packet_diag_mclist,
+	print_sock_filter): Likewise.
+	* tests/nlattr_unix_diag_msg.c (print_uint): Likewise.
+
+2018-05-24  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: further cleanup bpf big address checks.
+	Replace BIG_ADDR_IS_64BIT and BIG_ADDR_IS_32BIT with BIG_ADDR().
+
+	* tests/bpf.c (BIG_ADDR): New macro.
+	(BIG_ADDR_IS_64BIT, BIG_ADDR_IS_32BIT): Remove.
+	(BPF_PROG_LOAD_checks, BPF_OBJ_PIN_checks,
+	BPF_RAW_TRACEPOINT_OPEN_checks): Use BIG_ADDR() instead of
+	BIG_ADDR_IS_64BIT and BIG_ADDR_IS_32BIT.
+
+2018-05-23  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: cleanup bpf big address checks.
+	Introduce BIG_ADDR_IS_64BIT and BIG_ADDR_IS_32BIT to reduce redundancy.
+
+	* tests/bpf.c (BIG_ADDR_IS_64BIT, BIG_ADDR_IS_32BIT): New macros.
+	(BPF_PROG_LOAD_checks, BPF_OBJ_PIN_checks,
+	BPF_RAW_TRACEPOINT_OPEN_checks): Use them.
+
+2018-05-23  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: add support for BPF_RAW_TRACEPOINT_OPEN command decoding.
+	* bpf_attr.h (struct BPF_RAW_TRACEPOINT_OPEN_struct): New type
+	definition.
+	(BPF_RAW_TRACEPOINT_OPEN_struct_size,
+	expected_BPF_RAW_TRACEPOINT_OPEN_struct_size): New macros.
+	* xlat/bpf_commands.in (BPF_RAW_TRACEPOINT_OPEN): New constant,
+	introduced by Linux commit v4.17-rc1~148^2~19^2~4^2~3.
+	* xlat/bpf_prog_types.in (BPF_PROG_TYPE_RAW_TRACEPOINT): Likewise.
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_RAW_TRACEPOINT_OPEN)): New bpf
+	command decoder.
+	(SYS_FUNC(bpf)) <bpf_cmd_decoders[]>: Add
+	BPF_CMD_ENTRY(BPF_RAW_TRACEPOINT_OPEN).
+	* tests/bpf.c (union bpf_attr_data): Add
+	BPF_ATTR_DATA_FIELD(BPF_RAW_TRACEPOINT_OPEN).
+	(BPF_PROG_LOAD_checks): Update.
+	(init_BPF_RAW_TRACEPOINT_attr2): New function.
+	(BPF_RAW_TRACEPOINT_OPEN_checks): New checks array.
+	(main) <checks>: Add CHK(BPF_RAW_TRACEPOINT_OPEN).
+
+	bpf: add support for decoding struct bpf_attr.expected_attach_type field
+	* bpf_attr.h (struct BPF_PROG_LOAD_struct): Add expected_attach_type
+	field.
+	(BPF_PROG_LOAD_struct_size): Update to offsetofend of
+	expected_attach_type field.
+	(expected_BPF_PROG_LOAD_struct_size): Update to 72.
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)): Decode
+	expected_attach_type field.
+	* tests/bpf.c: Update expected output.
+
+2018-05-23  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: do not assume that SK_MEMINFO_VARS is constant.
+	SK_MEMINFO_VARS changes over time (as it was in Linux commit
+	v4.7-rc1~154^2~354^2~4, for example), so we cannot use it
+	for sanity checks.
+
+	* nlattr.c (print_meminfo): Remove.
+	(decode_nla_meminfo): Use generic print_uint32_array_member element
+	printer callback.
+	* tests/nlattr_inet_diag_msg.c (main): Update expected output.
+
+2018-05-23  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Introduce print_uint32_array_member helper function.
+	Analogous to print_int32_array_member, this helper is going to be used
+	in various decoders, including BPF_PROG_QUERY, PERF_EVENT_IOC_*,
+	and netlink meminfo.
+
+	* defs.h (print_uint32_array_member): New declaration.
+	* util.c (print_uint32_array_member): New function.
+
+2018-05-23  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Introduce print_int32_array_member helper function.
+	Analogous to print_uint64_array_member, this helper is going to be used
+	for IFLA_AF_SPEC decoding.
+
+	* defs.h (print_int32_array_member): New declaration.
+	* util.c (print_int32_array_member): New function.
+
+2018-05-23  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	defs.h: move print_uint64_array_member and print_array declarations down
+	In preparation for the forthcoming changes.
+
+2018-05-23  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/test_nlattr.h: fix pointer calculation in TEST_NLATTR_ARRAY.
+	The old code works only when an array contains exactly two items.
+
+	* tests/test_nlattr.h (TEST_NLATTR_ARRAY): Fix pointer address
+	for the case of incomplete read.
+
+2018-05-23  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	sockaddr: add support for sockaddr_l2 without l2_bdaddr_type.
+	Apparently, struct sockaddr_l2 changed over time: the l2_bdaddr_type
+	field was added only by commit v3.5-rc1~35^2~3^2~18^2^2~39.
+
+	* configure.ac (AC_CHECK_HEADERS): Move bluetooth/bluetooth.h check into
+	a separate check.
+	(AC_CHECK_HEADERS([bluetooth/bluetooth.h])): New check, also checks for
+	struct sockaddr_l2.l2_bdaddr_type member in case of success.
+	* sockaddr.c (print_sockaddr_data_bt) <case offsetof(struct sockaddr_l2,
+	l2_bdaddr_type)>: Add to sizeof(struct sockaddr_l2) case. Print
+	l2_bdaddr_type field only if the provided sockaddr is big enough.
+	* tests/net-sockaddr.c (check_l2): Put l2_bdaddr_type usage/printing
+	under HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE ifdef, add a check for the
+	sockaddr_l2 structure without the l2_bdaddr_type field.
+
+2018-05-23  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	sock: guess ifr_hwaddr size in SIOCSIFHWADDR/SIOCGIFHWADDR.
+	And make the output more structured.
+
+	* sock.c: Include xlat/arp_hardware_types.h in XLAT_MACROS_ONLY mode.
+	(print_ifreq) <case SIOCSIFHWADDR, case SIOCGIFHWADDR>: Introduce
+	hwaddr_sizes array, print ifr_hwaddr.sa_family, print ifr_hwaddr.sa_data
+	using hwaddr_sizes and PRINT_FIELD_MAC_SZ.
+
+2018-05-22  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Simplify errnoent and signalent.
+	Remove personality support for errnoent and signalent as
+	there is nothing personality-specific in these files.
+
+	* linux/aarch64/errnoent1.h: Remove.
+	* linux/aarch64/signalent1.h: Likewise.
+	* linux/powerpc64/errnoent1.h: Likewise.
+	* linux/powerpc64/signalent1.h: Likewise.
+	* linux/riscv/errnoent1.h: Likewise.
+	* linux/riscv/signalent1.h: Likewise.
+	* linux/s390x/errnoent1.h: Likewise.
+	* linux/s390x/signalent1.h: Likewise.
+	* linux/sparc64/errnoent1.h: Likewise.
+	* linux/sparc64/signalent1.h: Likewise.
+	* linux/tile/errnoent1.h: Likewise.
+	* linux/tile/signalent1.h: Likewise.
+	* linux/x32/errnoent1.h: Likewise.
+	* linux/x32/signalent1.h: Likewise.
+	* linux/x86_64/errnoent1.h: Likewise.
+	* linux/x86_64/errnoent2.h: Likewise.
+	* linux/x86_64/signalent1.h: Likewise.
+	* linux/x86_64/signalent2.h: Likewise.
+	* Makefile.am (EXTRA_DIST): Remove them.
+	* defs.h (errnoent0): Rename to errnoent.
+	(signalent0): Rename signalent.
+	(nerrnos, nsignals): Change to const variables unconditionally.
+	* syscall.c (errnoent0): Rename to errnoent.
+	(signalent0): Rename signalent.
+	(nerrnos, nsignals): Change to const variables unconditionally.
+	(nerrnos0, nsignals0): Remove.
+	[SUPPORTED_PERSONALITIES > 1] (errnoent1, signalent1, nerrnos1,
+	nsignals1): Remove.
+	[SUPPORTED_PERSONALITIES > 2] (errnoent2, signalent2, nerrnos2,
+	nsignals2): Likewise.
+	(set_personality): Do not assign errnoent, signalent, nerrnos,
+	and nsignals.
+
+2018-05-21  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1.in: mention -Xraw in -eraw description.
+	* strace.1.in (\fB\-e\ raw\fR=\,\fIset\fR): Mention -X raw.
+
+2018-05-21  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1.in: display -k option description only if it is enabled.
+	Leverage the fact that manpage is generated and add condition statements
+	around mentions of -k option.
+
+	* strace.1.in (.SH SYNOPSIS): Put option list inside an
+	".if '@ENABLE_STACKTRACE_TRUE@'#' .ig end_unwind_opt ... .end_unwind_opt"
+	condition; add a second list of options without -k and put it inside
+	".if '@ENABLE_STACKTRACE_FALSE@'#' .ig end_no_unwind_opt ... .end_no_unwind_opt"
+	condition.
+	(.SS Output format) <-k>: Put it inside
+	".if '@ENABLE_STACKTRACE_TRUE@'#' .ig end_unwind ... .end_unwind"
+	condition, remove the mention of --enable-stacktrace configuration
+	option requirement.
+
+2018-05-21  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1.in: format a reference to "open" syscall using bold font.
+	* strace.1.in (.SH DESCRIPTION): Format a reference to "open" syscall
+	using bold font.
+
+	tests/qual_fault.test: add -efu arguments to the interpreter.
+	* tests/qual_fault.test (#!/bin/sh): Add -efu arguments.
+
+2018-05-21  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/qual_fault.test: swap expected/output files in match_diff calls.
+	match_diff expects the first argument as strace output and the second
+	argument as expected output.
+
+	* tests/qual_fault.test (check_fault_injection): Swap arguments
+	in match_diff calls.
+
+2018-05-21  Dmitry V. Levin  <ldv@altlinux.org>
+
+	defs.h: convert some macro wrappers into static inline functions.
+	* defs.h (pathtrace_select, pathtrace_match, printxval_searchn,
+	printxval_indexn, sprintxval, sprintflags, printnum_slong,
+	printnum_ulong, printnum_ptr, printnum_kptr): Convert macro wrappers
+	into static inline functions.
+
+2018-05-21  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add support for xlat_styles in printxval_dispatch.
+	* defs.h (printxval_dispatch_ex): Rename from printxval_dispatch, add
+	style argument.
+	(printxval_dispatch): New static inline function, a thin wrapper around
+	printxval_dispatch_ex.
+	* xlat.c (printxval_dispatch): Rename to printxval_dispatch_ex, add
+	style argument, handle it.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-21  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Make printxval_dispatch publicly available.
+	* evdev.c (enum xlat_type, printxval_dispatch): Move elsewhere.
+	* defs.h (enum_xlat_type): Move from evdev.c.
+	(printxval_dispatch): New declaration.
+	* xlat.c (printxval_dispatch): Move from evdev.c, drop static qualifier.
+
+2018-05-21  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Revert "evdev: remove XT_NORMAL"
+	This reverts commit cc52da10c6f13feba577a83088f34916c6350165
+	in preparation for printxval_dispatch generalisation.
+
+	* evdev.c (enum xlat_type): Add XT_NORMAL back.
+	(printxval_dispatch): Handle XT_NORMAL again.
+
+2018-05-21  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	defs.h: introduce is_bigendian macro.
+	This macro is going to be used in inline checks.
+
+	* defs.h (is_bigendian): New macro constant.
+
+2018-05-21  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	util.c: make memory allocation error messages more informative.
+	As those are pretty unusual, let's add some additional information
+	that can be reported by users.
+
+	* util.c (print_quoted_string_ex, dumpstr): Add reasons for memory
+	allocation errors.
+	(sizeof_iov): Change type from size_t to unsigned int.
+	(dumpiov_upto): Rewrite size initialisation similarly to the way it's
+	done in print_quoted_string_ex, add reasons for memory allocation errors.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-19  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1.in: fix -A description.
+	* strace.1.in (.SS Output format) <-A>: Add missing .B.
+
+	strace.1.in: document x32 64-bit syscall peculiarity.
+	* strace.1.in (.SH NOTES): Document "#64" suffix for 64-bit syscalls on
+	x32.
+
+2018-05-19  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	linux/x32/syscallent.h: change 64-bit syscall designation.
+	The current way of designation of 64-bit specific syscalls in x32
+	personality not only conflicts with fault injection specification
+	syntax, but also makes it impossible to specify such syscalls at all
+	(since everything that starts from a digit is considered a syscall
+	number specification).  So, let's change prefix to suffix and use
+	octothorpe instead of colon as a separator.
+
+	* linux/x32/syscallent.h (13, 15, 16, 19, 20, 45, 46, 47, 54, 55, 59,
+	101, 127, 128. 129, 131, 134, 156, 174, 177, 178, 180, 205, 206, 209,
+	211, 214, 215, 222, 236, 244, 246, 247, 273, 274, 278, 279, 295, 296,
+	297, 299, 307, 310, 311, 32, 327, 328): Change "64:" prefix to "#64"
+	suffix in syscall name.
+
+	Closes: https://github.com/strace/strace/issues/36
+
+2018-05-19  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add BPF_PROG_TYPE_SK_MSG.
+	* xlat/bpf_prog_types.in (BPF_PROG_TYPE_SK_MSG): New constant,
+	introduced by Linux commit v4.17-rc1~148^2~156^2~1^2~13.
+	* tests/bpf.c (BPF_PROG_LOAD_checks): Update expected output.
+
+	xlat: update bpf_attach_type constants.
+	* xlat/bpf_attach_type.in (BPF_SK_MSG_VERDICT): New constant,
+	introduced by Linux commit v4.17-rc1~148^2~156^2~1^2~13.
+	(BPF_CGROUP_INET4_BIND, BPF_CGROUP_INET6_BIND): New constants,
+	introduced by Linux commit v4.17-rc1~148^2~19^2^2~6.
+	(BPF_CGROUP_INET4_CONNECT, BPF_CGROUP_INET6_CONNECT): New constants,
+	introduced by Linux commit v4.17-rc1~148^2~19^2^2~3.
+	(BPF_CGROUP_INET4_POST_BIND, BPF_CGROUP_INET6_POST_BIND): New constants,
+	introduced by Linux commit v4.17-rc1~148^2~19^2^2~1.
+	* tests/bpf.c (BPF_PROG_QUERY_checks): Update expected output.
+
+2018-05-19  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat/sock_rds_options.in: make it sorted.
+	Define SO_TIMESTAMP twice, for PA-RISC and all the other architectures.
+
+	* xlat/sock_rds_options.in [!__hppa__] (SO_TIMESTAMP): Define to 29.
+	[__hppa__] (SO_TIMESTAMP): Define to 0x4012.
+	* net.c (print_sockopt_fd_level_name) <case SOL_RDS>: Use
+	printxval_search instead of printxval.
+
+2018-05-17  Gleb Fotengauer-Malinovskiy  <glebfm@altlinux.org>
+
+	Update ioctl entries from linux v4.17.
+	* linux/32/ioctls_inc_align16.h: Update from linux v4.17-rc5
+	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/i386/ioctls_arch0.h: Likewise.
+	* linux/x86_64/ioctls_arch0.h: Likewise.
+	* NEWS: Mention this.
+
+	maint: update for linux 4.17-rc5.
+	* maint/ioctls_sym.sh: (x86_list): Add KVM_HYPERV_EVENTFD.
+
+2018-05-16  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: use indexed lookups where appropriate.
+	* xlat/bpf_attach_type.in: Add "#value_indexed" directive.
+	* xlat/bpf_class.in: Likewise.
+	* xlat/bpf_map_types.in: Likewise.
+	* xlat/bpf_map_update_elem_flags.in: Likewise.
+	* xlat/bpf_prog_types.in: Likewise.
+	* xlat/ebpf_class.in: Likewise.
+	* bpf_filter.c (print_bpf_filter_code): Use printxval_index
+	instead of printxval for decoding bpf_class and ebpf_class.
+	* print_fields.h (PRINT_FIELD_XVAL_INDEX): New macro.
+	* bpf.c: Use it instead of PRINT_FIELD_XVAL for decoding bpf_attach_type,
+	bpf_map_types, bpf_map_update_elem_flags, and bpf_prog_types.
+
+2018-05-15  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: use printxval_index lookup instead of printxval.
+	* xlat/bpf_commands.in: Add "#value_indexed" directive.
+	* bpf.c (SYS_FUNC(bpf)): Use printxval_index instead of printxval.
+
+	time: use indexed lookups.
+	* defs.h (xlat_idx): New prototype.
+	* xlat.c (xlat_idx): Remove static qualifier.
+	* time.c (do_adjtimex): Use xlat_idx instead of xlookup.
+	(SYS_FUNC(getitimer), SYS_FUNC(setitimer)): Use printxval_index
+	instead of printxval.
+	[ALPHA] (SYS_FUNC(osf_getitimer), SYS_FUNC(osf_setitimer)): Likewise.
+	(printclockname) [CLOCKID_TO_FD]: Likewise.
+	* xlat/adjtimex_state.in: Add "#value_indexed" directive.
+	* xlat/clocknames.in: Likewise.
+	* xlat/cpuclocknames.in: Add "#value_indexed" directive, add default
+	values to constants.
+	* xlat/itimer_which.in: Likewise.
+
+2018-05-15  Andre McCurdy  <armccurdy@gmail.com>
+
+	linux/arm/raw_syscall.h: avoid r7 specified register variables with Thumb
+	If Thumb code is being generated and frame pointers are enabled, the
+	Thumb frame pointer in r7 clashes with any local variable which may
+	need to be assigned to r7 (e.g. the syscall NR when making a raw
+	syscall).
+
+	With gcc, the double use of r7 results in a build error, e.g.
+
+	  strace-4.22/tests/inject-nf.c:86:1: error: r7 cannot be used in asm here
+
+	With clang, the double use of r7 can result in the compiler silently
+	generating broken code which crashes at run time due to frame pointer
+	corruption:
+
+	  https://bugs.llvm.org/show_bug.cgi?id=34165
+
+	In most cases the problem isn't visible as frame pointers will be
+	disabled automatically due to optimisation level. However to handle
+	cases where frame pointers are enabled (e.g. when CFLAGS etc are set
+	to support a debug build, etc) provide a version of raw_syscall_0
+	which manually saves and restores the frame pointer value in r7
+	to a temporary register before setting up the syscall NR in r7
+	and invoking the syscall.
+
+	* linux/arm/raw_syscall.h (raw_syscall_0) [__thumb__]: Provide
+	an alternative version.
+
+2018-05-15  Dmitry V. Levin  <ldv@altlinux.org>
+
+	sockaddr: use printxval_index lookup instead of printxval.
+	* xlat/addrfams.in: Add "#value_indexed" directive.
+	* xlat/af_packet_types.in: Likewise.
+	* xlat/hci_channels.in: Likewise.
+	* sockaddr.c (print_sockaddr_data_bt, print_sockaddr,
+	* print_sockaddr_data_ll): Use printxval_index instead of printxval.
+
+2018-05-15  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	sockaddr: use printxval_search for ARPHRD_* constants.
+	This xlat table is quite big.
+
+	* sockaddr.c (print_sockaddr_data_ll): Replace printxval call with
+	printxval_search for printing of struct sockaddr_ll.sll_hatype field.
+
+2018-05-15  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Add a common MAC address printing routine.
+	* print_mac.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* defs.h (sprint_mac_addr): New declaration.
+	(print_mac_addr): New function, a thin wrapper around sprint_mac_addr.
+	* print_fields.h (PRINT_FIELD_MAC, PRINT_FIELD_MAC_SZ): New macros.
+	* rtnl_link.c (decode_ifla_bridge_id): Use PRINT_FIELD_MAC for bridge
+	address printing.
+	* sock.c (print_ifreq) <case SIOCGIFHWADDR>: Use print_mac_addr for
+	ifr_hwaddr printing.
+	* sockaddr.c (print_sockaddr_data_bt): Use print_mac_addr for
+	{sco,rc,l2}_bdaddr field printing.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-15  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	sockaddr: decode Bluetooth L2 CID values.
+	* xlat/bluetooth_l2_cid.in: New file.
+	* sockaddr.c: Include xlat/bluetooth_l2_cid.h.
+	(print_bluetooth_l2_cid): New function.
+	(print_sockaddr_data_bt): Use it to decode struct sockaddr_l2.l2_cid
+	field.
+	* tests/net-sockaddr.c (check_l2): Update expected output.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-15  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	sockaddr: decode Bluetooth L2 PSM values.
+	* xlat/bluetooth_l2_psm.in: New file.
+	* sockaddr.c: Include xlat/bluetooth_l2_psm.h.
+	(print_bluetooth_l2_psm): New function.
+	(print_sockaddr_data_bt): Use it to decode struct sockaddr_l2.l2_psm
+	field.
+	* tests/net-sockaddr.c (check_l2): Update expected output.
+
+	sockaddr: decode bluetooth address type names.
+	* xlat/bdaddr_types.in: New file.
+	* sockaddr.c: Include xlat/bdaddr_types.h.
+	(print_sockaddr_data_bt): Decode struct sockaddr_l2.l2_bdaddr_type field
+	using constants from bdaddr_types xlat.
+	* tests/net-sockaddr.c (check_l2): Check decoding
+	of struct sockaddr_l2.l2_bdaddr_type field.
+
+2018-05-15  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	sockaddr: decode Bluetooth socket address unconditionally.
+	* sockaddr.c [HAVE_BLUETOOTH_BLUETOOTH_H]: Do not include
+	bluetooth/bluetooth.h, bluetooth/hci.h, bluetooth/l2cap.h,
+	bluetooth/rfcomm.h, and bluetooth/sco.h.
+	[!HAVE_BLUETOOTH_BLUETOOTH_H]: Include xlat/hci_channels.h.
+	(btohs): New function.
+	(print_sockaddr_data_bt): Define unconditionally, add definitions
+	of struct sockaddr_hci, struct bdaddr, struct sockaddr_sco,
+	struct sockaddr_rc, and struct sockaddr_l2.
+	(sa_printers) <AF_BLUETOOTH>: Define unconditionally.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-15  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Avoid using print_array as a local variable name.
+	We have a function with the same name.
+
+	* netlink.c (decode_netlink) <print_array>: Rename to is_array, all
+	users updated.
+	* nlattr.c (decode_nlattr) <print_array>: Likewise.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-15  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: update MSG_* constants.
+	Sync them with kernel's include/linux/socket.h, since syscalls perform
+	almost no checks for incorrect flags.
+
+	* xlat/msg_flags.in (MSG_OOB, MSG_PEEK, MSG_DONTROUTE, MSG_CTRUNC,
+	MSG_PROBE, MSG_TRUNC, MSG_DONTWAIT, MSG_EOR, MSG_WAITALL, MSG_FIN,
+	MSG_SYN, MSG_CONFIRM, MSG_RST, MSG_ERRQUEUE, MSG_NOSIGNAL, MSG_MORE,
+	MSG_WAITFORONE, MSG_FASTOPEN, MSG_CMSG_CLOEXEC): Add default values
+	to all constants.
+	(MSG_SENDPAGE_NOTLAST, MSG_NO_SHARED_FRAGS): New constants.  It is
+	an internal one, but, apparently, nothing prohibits passing it
+	to the kernel.
+	(MSG_CMSG_COMPAT): New constant.  Override the value provided
+	by system headers.
+	(MSG_EOF): Commented out, as it is a synonym for MSG_FIN.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-14  Dmitry V. Levin  <ldv@altlinux.org>
+
+	socketutils: use exact match of unix domain sockets on fresh kernels.
+	* socketutils.c (unix_send_query): Do not add NLM_F_DUMP to nlmsg_flags
+	when kernel version is 4.4.4 or later, initialize udiag_cookie
+	unconditionally.
+
+	Complements: v4.12~536 ("Change unix_diag requests back to use full dump instead of exact match")
+
+2018-05-14  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	socketutils: do not request NDIAG_SHOW_MEMINFO.
+	This information is not used and it looks like it negatively affects
+	ability to find the socket under high load.
+
+	* socketutils.c (netlink_send_query) <req>: Remove NDIAG_SHOW_MEMINFO
+	flag from netlink_diag_req.ndiag_show field.
+	* tests/netlink_netlink_diag.c (send_query) <req>: Likewise.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-09  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: introduce midtail_alloc and use it in netlink tests.
+	netlink tests happen to access memory located before the tail_malloc'ed
+	pointers, a practice that doesn't go well with the latest compilers
+	because tail_malloc is marked with ATTRIBUTE_MALLOC.
+	For example, glibc in -D_FORTIFY_SOURCE=2 mode and gcc 8 with
+	-Warray-bounds enabled complain about negative offsets out of bounds.
+	Fix this issue by introducing midtail_alloc.
+
+	* tests/tests.h (midtail_alloc): New macro.
+	* tests/netlink_crypto.c: Use it instead of tail_malloc for nlh0 allocation.
+	* tests/netlink_netfilter.c: Likewise.
+	* tests/netlink_protocol.c: Likewise.
+	* tests/netlink_route.c: Likewise.
+	* tests/netlink_selinux.c: Likewise.
+	* tests/netlink_sock_diag.c: Likewise.
+	* tests/nlattr_br_port_msg.c: Likewise.
+	* tests/nlattr_crypto_user_alg.c: Likewise.
+	* tests/nlattr_dcbmsg.c: Likewise.
+	* tests/nlattr_fib_rule_hdr.c: Likewise.
+	* tests/nlattr_ifaddrlblmsg.c: Likewise.
+	* tests/nlattr_ifaddrmsg.c: Likewise.
+	* tests/nlattr_ifinfomsg.c: Likewise.
+	* tests/nlattr_ifla_brport.c: Likewise.
+	* tests/nlattr_ifla_port.c: Likewise.
+	* tests/nlattr_ifla_xdp.c: Likewise.
+	* tests/nlattr_inet_diag_msg.c: Likewise.
+	* tests/nlattr_inet_diag_req_compat.c: Likewise.
+	* tests/nlattr_inet_diag_req_v2.c: Likewise.
+	* tests/nlattr_mdba_mdb_entry.c: Likewise.
+	* tests/nlattr_mdba_router_port.c: Likewise.
+	* tests/nlattr_ndmsg.c: Likewise.
+	* tests/nlattr_ndtmsg.c: Likewise.
+	* tests/nlattr_netconfmsg.c: Likewise.
+	* tests/nlattr_netlink_diag_msg.c: Likewise.
+	* tests/nlattr_nlmsgerr.c: Likewise.
+	* tests/nlattr_packet_diag_msg.c: Likewise.
+	* tests/nlattr_rtgenmsg.c: Likewise.
+	* tests/nlattr_rtmsg.c: Likewise.
+	* tests/nlattr_smc_diag_msg.c: Likewise.
+	* tests/nlattr_tc_stats.c: Likewise.
+	* tests/nlattr_tca_stab.c: Likewise.
+	* tests/nlattr_tcamsg.c: Likewise.
+	* tests/nlattr_tcmsg.c: Likewise.
+	* tests/nlattr_unix_diag_msg.c: Likewise.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-09  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Use MIN where appropriate.
+	* netlink.c (decode_nlmsghdr_with_payload): Use MIN.
+	* netlink_packet_diag.c (print_packet_diag_mclist): Likewise.
+	* nlattr.c (decode_nlattr_with_data): Likewise.
+	* rtnl_route.c (decode_rta_multipath): Likewise.
+
+2018-05-09  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add fallback definitions to {msg,sem,shm}ctl command constants.
+	* xlat/msgctl_flags.in: Add default values to all constants, reorder
+	to make them sorted by value.
+	* xlat/semctl_flags.in: Likewise.
+	* xlat/shmctl_flags.in: Likewise.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-09  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add MSG_STAT_ANY.
+	* xlat/msgctl_flags.in (MSG_STAT_ANY): New constant, introduced
+	by Linux commit v4.17-rc1~52^2~21.
+	* tests/ipc_msg.c: Check it.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-09  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add SEM_STAT_ANY.
+	* xlat/semctl_flags.in (SEM_STAT_ANY): New constant, introduced
+	by Linux commit v4.17-rc1~52^2~22.
+	* tests/ipc_sem.c: Check it.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-09  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add SHM_STAT_ANY.
+	* xlat/shmctl_flags.in (SHM_STAT_ANY): New constant, introduced
+	by Linux commit v4.17-rc1~52^2~23.
+	* tests/ipc_shm.c: Check it.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-09  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	net: print SO_GET_FILTER in getsockopt.
+	SO_ATTACH_FILTER and SO_GET_FILTER have the same value; the former
+	constant is intended for use in setsockopt, and the latter is for
+	getsockopt.  Handle that the same way as similar SOL_IP/SOL_IPV6 socket
+	options are handled.
+
+	* xlat/getsock_options.in: New file.
+	* xlat/setsock_options.in: Likewise.
+	* xlat/sockoptions.in (SO_ATTACH_FILTER): Move to
+	xlat/setsock_options.in.
+	* net.c: Include "xlat/setsock_options.h" and "xlat/getsock_options.h".
+	(print_sockopt_fd_level_name) <case SOL_SOCKET>: Use
+	getsock_options or setsock_options as auxiliary xlats based on the value
+	of is_getsockopt flag.
+	* tests/sock_filter-v.c: Update expected output.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-09  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add sock_filtrer-v variants with different xlat verbosity levels.
+	* tests/sock_filter-v-Xabbrev.c: New file.
+	* tests/sock_filter-v-Xraw.c: Likewise.
+	* tests/sock_filter-v-Xverbose.c: Likewise.
+	* tests/sock_filter-v.c (PRINT_STMT_SYM, PRINT_STMT_SYM_,
+	PRINT_STMT_VAL, PRINT_STMT_VAL_, PRINT_JUMP_): Remove.
+	(HEX_FMT, XLAT_FMT, XLAT_ARGS, PRINT_STMT): New macros.
+	(PRINT_JUMP): Rewrite.
+	(print_filter): Rewrite using PRINT_STMT and new PRINT_JUMP.
+	(main): Print SOL_SOCKET, SO_ATTACH_FILTER, and SO_ATTACH_REUSEPORT_CBPF
+	using XLAT_FMT/XLAT_ARGS macros.
+	* tests/pure_executables.list: Add sock_filter-v-Xabbrev,
+	sock_filter-v-Xraw, and sock_filter-v-Xverbose.
+	* tests/.gitignore: Likewise.
+	* tests/gen_tests.in (sock_filter-v-Xabbrev, sock_filter-v-Xraw,
+	sock_filter-v-Xverbose): New tests.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	defs.h: fix ethernet_protocols comment.
+	Starting with commit v4.22~109, sorted xlat tables are terminated
+	with XLAT_END.
+
+	* defs.h (ethernet_protocols): Remove the "unterminated" part from
+	description.
+
+2018-05-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: rename *sock*options xlat tables.
+	Such names as sockrxrpcoptions are incomprehensible.
+
+	* xlat/getsockipoptions.in: Rename to xlat/getsock_ip_options.in.
+	* xlat/getsockipv6options.in: Rename to xlat/getsock_ipv6_options.in.
+	* xlat/setsockipoptions.in: Rename to xlat/setsock_ip_options.in.
+	* xlat/setsockipv6options.in: Rename to xlat/setsock_ipv6_options.in.
+	* xlat/sockalgoptions.in: Rename to xlat/sock_alg_options.in.
+	* xlat/sockbluetoothoptions.in: Rename to xlat/sock_bluetooth_options.in.
+	* xlat/sockcaifoptions.in: Rename to xlat/sock_caif_options.in.
+	* xlat/sockdccpoptions.in: Rename to xlat/sock_dccp_options.in.
+	* xlat/sockipoptions.in: Rename to xlat/sock_ip_options.in.
+	* xlat/sockipv6options.in: Rename to xlat/sock_ipv6_options.in.
+	* xlat/sockipxoptions.in: Rename to xlat/sock_ipx_options.in.
+	* xlat/sockirdaoptions.in: Rename to xlat/sock_irda_options.in.
+	* xlat/sockiucvoptions.in: Rename to xlat/sock_iucv_options.in.
+	* xlat/sockkcmoptions.in: Rename to xlat/sock_kcm_options.in.
+	* xlat/sockllcoptions.in: Rename to xlat/sock_llc_options.in.
+	* xlat/socknetlinkoptions.in: Rename to xlat/sock_netlink_options.in.
+	* xlat/socknfcllcpoptions.in: Rename to xlat/sock_nfcllcp_options.in.
+	* xlat/sockoptions.in: Rename to xlat/sock_options.in.
+	* xlat/sockpacketoptions.in: Rename to xlat/sock_packet_options.in.
+	* xlat/sockpnpoptions.in: Rename to xlat/sock_pnp_options.in.
+	* xlat/sockpppol2tpoptions.in: Rename to xlat/sock_pppol2tp_options.in.
+	* xlat/sockrawoptions.in: Rename to xlat/sock_raw_options.in.
+	* xlat/sockrdsoptions.in: Rename to xlat/sock_rds_options.in.
+	* xlat/sockrxrpcoptions.in: Rename to xlat/sock_rxrpc_options.in.
+	* xlat/socksctpoptions.in: Rename to xlat/sock_sctp_options.in.
+	* xlat/socktcpoptions.in: Rename to xlat/sock_tcp_options.in.
+	* xlat/socktipcoptions.in: Rename to xlat/sock_tipc_options.in.
+	* xlat/socktlsoptions.in: Rename to xlat/sock_tls_options.in.
+	* xlat/sockudpoptions.in: Rename to xlat/sock_udp_options.in.
+	* net.c: Update.
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	net: decode more SOL_* socket options.
+	* xlat/sockalgoptions.in: New file.
+	* xlat/sockbluetoothoptions.in: Likewise.
+	* xlat/sockcaifoptions.in: Likewise.
+	* xlat/sockdccpoptions.in: Likewise.
+	* xlat/sockiucvoptions.in: Likewise.
+	* xlat/sockkcmoptions.in: Likewise.
+	* xlat/sockllcoptions.in: Likewise.
+	* xlat/socknfcllcpoptions.in: Likewise.
+	* xlat/sockpnpoptions.in: Likewise.
+	* xlat/sockpppol2tpoptions.in: Likewise.
+	* xlat/sockrdsoptions.in: Likewises.
+	* xlat/sockrxrpcoptions.in: Likewise.
+	* xlat/socktipcoptions.in: Likewise.
+	* xlat/socktlsoptions.in: Likewise.
+	* xlat/sockudpoptions.in: Likewise.
+	* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
+	"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
+	"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
+	"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
+	"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
+	"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
+	"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
+	and "xlat/sockudpoptions.h".
+	(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
+	SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
+	SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
+	socket option names.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	net: decode more AF_* protocol names.
+	* xlat/caif_protocols.in: New file.
+	* xlat/can_protocols.in: Likewise.
+	* xlat/irda_protocols.in: Likewise.
+	* xlat/isdn_protocols.in: Likewise.
+	* xlat/kcm_protocols.in: Likewise.
+	* xlat/nfc_protocols.in: Likewise.
+	* xlat/phonet_protocols.in: Likewise.
+	* xlat/smc_protocols.in: Likewise.
+	* net.c: Include "xlat/irda_protocols.h", "xlat/can_protocols.h",
+	"xlat/isdn_protocols.h", "xlat/phonet_protocols.h",
+	"xlat/caif_protocols.h", "xlat/nfc_protocols.h",
+	"xlat/kcm_protocols.h", and "xlat/smc_protocols.h".
+	(SYS_FUNC(socket)): Decode AF_IRDA, AF_CAN, AF_RXRPC, AF_ISDN,
+	AF_PHONET, AF_CAIF, AF_NFC, AF_KCM, and AF_SMC protocol names.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Remove some duplicate fallback definitions.
+	There is no need to provide duplicate fallback definitions anymore,
+	inclusion of the appropriate xlat header in XLAT_MACROS_ONLY mode
+	does the right thing.
+
+	* btrfs.c [!BTRFS_FIRST_FREE_OBJECTID] (BTRFS_FIRST_FREE_OBJECTID):
+	Remove, a fallback definition is already provided by included
+	"xlat/btrfs_tree_objectids.h".
+	* net.c: Include "xlat/addrfams.h" in XLAT_MACROS_ONLY mode.
+	[!AF_BLUETOOTH] (AF_BLUETOOTH): Remove.
+	* syscall.c: Include "xlat/nt_descriptor_types.h" in XLAT_MACROS_ONLY
+	mode.
+	[!NT_PRSTATUS] (NT_PRSTATUS): Remove.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat/gen.sh: introduce XLAT_MACROS_ONLY macro.
+	Sometimes we need just fallback definitions and nothing else.
+	This change adds an interface of skipping xlat table prototypes
+	and definitions.
+
+	* xlat/gen.sh (gen_header): Place xlat table prototype or definition
+	under "#ifndef XLAT_MACROS_ONLY" guard.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	rtnl_link: print IFLA_NEW_IFINDEX using decode_nla_ifindex.
+	As it is an interface index.
+
+	* rtnl_link.c (ifinfomsg_nla_decoders) <[IFLA_NEW_IFINDEX]>: Change
+	the value from decode_nla_s32 to decode_nla_ifindex.
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	ci: install libbluetooth-dev.
+	* ci/install-dependencies.sh (common_packages): Add libbluetooth-dev.
+
+	xlat: provide fallback definitions for HCI_CHANNEL_* constants.
+	* xlat/hci_channels.in: Provide fallback definitions.
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	s390: simplify s390_runtime_instr command printing.
+	As the header with command definitions is now a part of UAPI (since
+	Linux commit v4.16-rc1~21^2~11), there's no need for a very special
+	printing routine for command names.
+
+	* s390.c (SYS_FUNC(s390_runtime_instr)): Use printxval_d to print
+	the command argument.
+	* tests/s390_runtime_instr.c: Update expected output.
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/init.sh: add run_prog_match_grep.
+	* tests/init.sh (run_prog_match_grep): New function, similar
+	to run_prog_match_diff.
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add so_peercred variants with different xlat verbosity levels.
+	* tests/so_peercred-Xabbrev.c: New file.
+	* tests/so_peercred-Xraw.c: Likewise.
+	* tests/so_peercred-Xverbose.c: Likewise.
+	* tests/pure_executables.list: Add so_peercred-Xabbrev,
+	so_peercred-Xraw, and so_peercred-Xverbose.
+	* tests/.gitignore: Likewise.
+	* tests/so_peercred.c: Add handling of XLAT_RAW and XLAT_VERBOSE flags.
+	* tests/gen_tests.in (so_peercred-Xabbrev, so_peercred-Xraw,
+	so_peercred-Xverbose): New tests.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add personality variants with different xlat verbosity levels.
+	* tests/personality-Xabbrev.c: New file.
+	* tests/personality-Xraw.c: Likewise.
+	* tests/personality-Xverbose.c: Likewise.
+	* tests/pure_executables.list: Add personality-Xabbrev,
+	personality-Xraw, and personality-Xverbose.
+	* tests/.gitignore: Likewise.
+	* tests/personality.c: Add handling of XLAT_RAW and XLAT_VERBOSE flags.
+	* tests/personality.test: Add support for accepting test arguments.
+	* tests/gen_tests.in (personality-Xabbrev, personality-Xraw,
+	personality-Xverbose): New tests.
+
+	tests: add fanotify_mark variants with different xlat verbosity levels.
+	* tests/fanotify_mark-Xabbrev.c: New file.
+	* tests/fanotify_mark-Xraw.c: Likewise.
+	* tests/fanotify_mark-Xverbose.c: Likewise.
+	* tests/pure_executables.list: Add fanotify_mark-Xabbev,
+	fanotify_mark-Xraw, and fanotify_mark-Xverbose.
+	* tests/.gitignore: Likewise.
+	* tests/fanotify_mark.c: Add handling of XLAT_RAW and XLAT_VERBOSE
+	flags.
+	* tests/gen_tests.in (fanotify_mark-Xabbev, fanotify_mark-Xraw,
+	fanotify_mark-Xverbose): New tests.
+
+2018-05-07  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: provide fallback definitions for IFF_* constants.
+	* xlat/iffflags.in: Provide fallback definitions.  Mention that
+	the array is sorted.
+
+	xlat: update IFF_* constants.
+	* xlat/iffflags.in (IFF_DYNAMIC): New constant, had been introduced
+	before the current git repository was conceived.
+	(IFF_LOWER_UP, IFF_DORMANT): New constants, introduced by Linux commit
+	v2.6.17-rc1~1175^2~206.
+	(IFF_ECHO): New constant, introduced by Linux commit
+	v2.6.25-rc1~1162^2~1415.
+
+	xlat: provide fallback definitions for ARPHRD_* constants.
+	* xlat/arp_hardware_types.in: Provide fallback definitions, sort.
+
+	tests: add more v4l2 checks.
+	* tests/ioctl_v4l2.c (main): Add more VIDIOC_S_EXT_CTRLS checks.
+
+	tests: add variants of IPC tests with different xlat verbosity levels.
+	* tests/.gitignore: Add ipc_msg-Xabbrev, ipc_msg-Xraw, ipc_msg-Xverbose,
+	ipc_msgbuf-Xabbrev, ipc_msgbuf-Xraw, ipc_msgbuf-Xverbose,
+	ipc_sem-Xabbrev, ipc_sem-Xraw, ipc_sem-Xverbose, ipc_shm-Xabbrev,
+	ipc_shm-Xraw, and ipc_shm-Xverbose.
+	* tests/pure_executables.list: Likewise.
+	* tests/gen_tests.in (ipc_msg-Xabbrev, ipc_msg-Xraw, ipc_msg-Xverbose,
+	ipc_msgbuf-Xabbrev, ipc_msgbuf-Xraw, ipc_msgbuf-Xverbose,
+	ipc_sem-Xabbrev, ipc_sem-Xraw, ipc_sem-Xverbose, ipc_shm-Xabbrev,
+	ipc_shm-Xraw, ipc_shm-Xverbose): New tests.
+	* tests/ipc_msg-Xabbrev.c: New file.
+	* tests/ipc_msg-Xraw.c: Likewise.
+	* tests/ipc_msg-Xverbose.c: Likewise.
+	* tests/ipc_msgbuf-Xabbrev.c: Likewise.
+	* tests/ipc_msgbuf-Xraw.c: Likewise.
+	* tests/ipc_msgbuf-Xverbose.c: Likewise.
+	* tests/ipc_sem-Xabbrev.c: Likewise.
+	* tests/ipc_sem-Xraw.c: Likewise.
+	* tests/ipc_sem-Xverbose.c: Likewise.
+	* tests/ipc_shm-Xabbrev.c: Likewise.
+	* tests/ipc_shm-Xraw.c: Likewise.
+	* tests/ipc_shm-Xverbose.c: Likewise.
+	* tests/ipc.sh: Add support for accepting test arguments.
+	* tests/ipc_msgbuf.test: Likewise.
+	* tests/ipc_msg.c: Add handling of XLAT_RAW and XLAT_VERBOSE flags.
+	* tests/ipc_msgbuf.c: Likewise.
+	* tests/ipc_sem.c: Likewise.
+	* tests/ipc_shm.c: Likewise.
+
+	tests: make ipc tests a bit more strict.
+	* tests/gen_tests.in (ipc_msg, ipc_sem, ipc_shm): Add -a option.
+	* tests/ipc_msg.c: Replace " +" with " " in expected output.
+	* tests/ipc_sem.c: Likewise.
+	* tests/ipc_shm.c: Likewise.
+
+	ipc_shm: print SHM_HUGE_SHIFT using print_xlat_u.
+	* ipc_shm.c (SYS_FUNC(shmget)): Print SHM_HUGE_SHIFT using print_xlat_u.
+
+	tests: check all bits of mtype in ipc_msgbuf test.
+	* tests/ipc_msgbuf.c: Include <unistd.h> and <asm/unistd.h>.
+	(sys_msgrcv): New function.
+	(msgrcv): Use it instead of msgrcv.  Add bits to mtype,
+	check for -mtype in msgrcv.
+
+	tests: print expected output by ipc_msgbuf test itself.
+	* tests/ipc_msgbuf.expected: Remove.
+	* tests/Makefile.am (EXTRA_DIST): Remove tests/ipc_msgbuf.expected.
+	* tests/ipc_msgbuf.c: Add expected output.
+	* tests/ipc_msgbuf.test: Add -a31.  Redirect output to $EXP.  Call
+	match_grep with $LOG and $EXP arguments.
+
+2018-05-07  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: provide fallback definitions for SKF_*_OFF constants.
+	* xlat/skf_off.in: New file.
+	* bpf_sock_filter.c: Include "xlat/skf_off.h".
+
+	xlat: provide fallback definitions for BPF_* constants.
+	* xlat/bpf_class.in: Add default values for constants.
+	* xlat/bpf_miscop.in: Likewise.
+	* xlat/bpf_mode.in: Likewise.
+	* xlat/bpf_op_alu.in: Likewise.
+	* xlat/bpf_op_jmp.in: Likewise.
+	* xlat/bpf_rval.in: Likewise.
+	* xlat/bpf_size.in: Likewise.
+	* xlat/bpf_src.in: Likewise.
+
+2018-05-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: fix F_* fallback definitions on mips64.
+	* xlat/fcntlcmds.in (F_GETLK64, F_SETLK64, F_SETLKW64) [__mips64]: Fix
+	default values.
+
+	Fixes: v4.22-122-gfa8f486 ("xlat: fix F_* fallback definitions on alpha, hppa, mips, and sparc")
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add fallback definitions to SO_* constants.
+	Regenerate xlat/sockoptions.in using the following script:
+
+	  sed -n 's/^\(SO_[^[:space:]]*\).*/\1/p' xlat/sockoptions.in |
+	  uniq |
+	  while read name; do
+	    sed -rn 's/#define[[:space:]]+('"$name"')[[:space:]]+([[:digit:]]+)$/\2\t\1/p' \
+	      /path/to/linux/include/uapi/asm-generic/socket.h
+	  done |
+	  sort -n |
+	  while read def name; do
+	    grep -EH '#define[[:space:]]+'"$name"'[[:space:]]+(0x[[:xdigit:]]+|[[:digit:]]+)' \
+	      /path/to/linux/arch/*/include/uapi/asm/socket.h |
+	    sed -rn 's|^[^#]*/arch/([^/]+)/include/uapi/asm/socket\.h:#define[[:space:]]+'"$name"'[[:space:]]+([^[:space:]]+)([[:space:]].*)?$|\1\t\2|p' |
+	    sed s/parisc/hppa/ |sort |
+	    awk -vname="$name" -vdef="$def" '
+	      {
+	        i=strtonum($2)
+	        if (i == def) next
+	        if (a[i])
+	          a[i]=a[i] " || defined __" $1 "__"
+	        else
+	          a[i]="defined __" $1 "__"
+	      }
+	      END {
+	        iftext="#if"
+	        for (i in a) {
+	          printf("%s %s\n%s %u\n",iftext,a[i],name,i)
+	          iftext="#elif"
+	        }
+	        if (iftext != "#if")
+	          print "#else"
+	        printf("%s %s\n", name, def)
+	        if (iftext == "#if")
+	          print ""
+	        else
+	          print "#endif\n"
+	      }'
+	  done
+
+	* xlat/sockoptions.in: Add fallback definitions.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: remove socket options with duplicate names.
+	* xlat/sockoptions.in (SO_GET_FILTER): Remove as it is defined
+	to SO_ATTACH_FILTER.
+	(SO_DETACH_BPF): Remove as it is defined to SO_DETACH_FILTER.
+
+	xlat: remove socket options that do not exist in Linux.
+	* xlat/sockoptions.in (SO_ALLRAW, SO_ICS, SO_IMASOCKET, SO_LISTENING,
+	SO_MGMT, SO_ORDREL, SO_PARALLELSVR, SO_PROTOTYPE, SO_RDWRSO_SEMA,
+	SO_USELOOPBACK): Remove.
+
+	xlat: treat socketlayers as a sorted array.
+	* xlat/socketlayers.in: Add a comment that the xlat is sorted.
+	* net.c (print_sockopt_fd_level_name): Use printxval_search
+	instead of printxval for decoding socket layer name.
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	net: decode Bluetooth protocol names unconditionally.
+	As we have all BTPROTO_* constant definitions now, there is no need
+	to rely on bluetooth.h header anymore.
+
+	* net.c (AF_BLUETOOTH): Provide a fallback definition.
+	[HAVE_BLUETOOTH_BLUETOOTH_H]: Do not include <bluetooth/bluetooth.h>.
+	[!HAVE_BLUETOOTH_BLUETOOTH_H]: Include "xlat/bt_protocols.h".
+	[!HAVE_BLUETOOTH_BLUETOOTH_H] (decode_sockbuf): Decode AF_BLUETOOTH.
+	(decode_sockbuf) <case AF_BLUETOOTH>: Use printxval_index.
+	* xlat/bt_protocols.in: Add "#value_indexed" directive.
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat/gen.sh: invoke the shell interpreter with -e -u options.
+	* xlat/gen.sh: Change interpreter from "/bin/sh" to "/bin/sh -eu".
+
+	xlat: update FPE_* constants.
+	* xlat/sigfpe_codes.in (FPE_FLTUNK): New constant, introduced by Linux
+	commit v4.17-rc1~107^2~2.
+	(FPE_CONDTRAP): New constant, introduced by Linux commit
+	v4.17-rc1~31^2~3.
+
+	xlat: add MAP_FIXED_NOREPLACE.
+	* xlat/mmap_flags.in (MAP_FIXED_NOREPLACE): New constant, introduced
+	by Linux commit v4.17-rc1~52^2~14.
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: provide fallback definitions for BTPROTO_* constants.
+	As they are architecture-independent.
+
+	* xlat/bt_protocols.in: Add values to constants.
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add NETLINK_SMC.
+	* xlat/netlink_protocols.in (NETLINK_SMC): New constant, introduced
+	by Linux commit v4.11-rc1~94^2~43^2.
+
+	xlat: provide fallback definitions for V4L2_CID_* constants.
+	* xlat/v4l2_control_id_bases.in: New file with fallback definitions.
+	* xlat/v4l2_control_ids.in: Add fallback definitions.
+	* v4l2.c: Reorder includes, include "xlat/v4l2_control_id_bases.h",
+	remove legacy V4L2_CID_* constant definitions.
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: update V4L2_CID_* constants.
+	Synchronise v4l2_control_ids list with the one provided by kernel's
+	include/uapi/linux/v4l2-controls.h.  A few notes:
+	 - V4L2_CID_CHROMA_GAIN and V4L2_CID_COLORFX_CBCR moved in accordance
+	   with their position/values.
+	 - V4L2_CID_WHITENESS is removed as it has the same value as
+	   V4L2_CID_GAMMA.
+	 - V4L2_CID_PRIVATE_BASE is removed.
+	 - V4L2_CID_HCENTER and V4L2_CID_VCENTER that were removed by Linux
+	   commit v3.9-rc1~93^2~237, are retained for historical reasons.
+
+	* xlat/v4l2_control_ids.in: Update.
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: provide fallback definitions for V4L2_CTRL_CLASS_* constants.
+	As those are architecture-independant.  Also note that the xlat
+	is sorted.
+
+	* xlat/v4l2_control_classes.in: Add values.
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: update V4L2_CTRL_CLASS_* constants.
+	* xlat/v4l2_control_classes.in (V4L2_CTRL_CLASS_DV): New constant,
+	introduced by Linux commit v3.7-rc1~101^2^2~322.
+	(V4L2_CTRL_CLASS_RF_TUNER): New constant, introduced by Linux commit
+	v3.15-rc1~85^2~192.
+	(V4L2_CTRL_CLASS_DETECT): New constant, introduced by Linux commit
+	v3.17-rc1~112^2~340.
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: update BPF_F_* constants.
+	Apparently, BPF_F_RDONLY and BPF_F_WRONLY are also used in map_flags.
+	Moreover, set of flags depends on the type of map, but let's leave that
+	for another day.
+
+	* xlat/bpf_map_flags.in (BPF_F_RDONLY, BPF_F_WRONLY): New constants.
+	(BPF_F_STACK_BUILD_ID): New constant, introduced by Linux commit
+	v4.17-rc1~148^2~156^2~3^2~1.
+	* xlat/bpf_map_flags.in: Update expected output.
+
+2018-05-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add V4L2_PIX_FMT_HEVC.
+	* xlat/v4l2_pix_fmts.in (V4L2_PIX_FMT_HEVC): New constant, introduced
+	by Linux commit v4.17-rc1~143^2~60.
+
+	xlat: add ETH_P_PREAUTH.
+	* xlat/ethernet_protocols.in (ETH_P_PREAUTH): New constant, introduced
+	by Linux commit v4.17-rc1~148^2~379^2~3.
+
+	xlat: update SCTP_* constants.
+	* xlat/socksctpoptions.in (SCTP_AUTH_DEACTIVATE_KEY): New constant,
+	introduced by Linux commit v4.17-rc1~148^2~191^2~2.
+	(SCTP_SENDMSG_CONNECT): New constant, introduced by Linux commit
+	v4.17-rc1~96^2~9.
+
+	xlat: add SPARC ADI-related SIGSEGV codes.
+	* xlat/sigsegv_codes.in (SEGV_ACCADI, SEGV_ADIDERR, SEGV_ADIPERR): New
+	constants, introduced by Linux commit v4.17-rc1~147^2~4^2~10.
+
+	xlat: add PROT_ADI.
+	* xlat/mmap_prot.in (PROT_ADI): New constant, introduced by Linux commit
+	v4.17-rc1~147^2~4^2~1.
+
+2018-05-05  Dmitry V. Levin  <ldv@altlinux.org>
+
+	build: rewrite libdw detection without pkg-config.
+	pkg-config expected to be more convenient way to configure libdw,
+	but in practice it appeared to be less portable than good old
+	AC_CHECK_HEADERS and AC_CHECK_LIB.
+
+	* ci/install-dependencies.sh (common_packages): Remove pkg-config.
+	(STACKTRACE == "libdw"): Do not install libz-dev and liblzma-dev.
+	* debian/control (Build-Depends): Remove pkg-config.
+	* m4/st_libdw.m4 (st_ARG_LIBDW, st_LIBDW): Rewrite without pkg-config.
+
+2018-05-04  Dmitry V. Levin  <ldv@altlinux.org>
+
+	ci: add more variants of unwinder to test matrices.
+	Check x86_64 builds with libdw, with libunwind, and without stacktrace.
+	As Travis CI doesn't provide a suitable libdw, do not test libdw there.
+
+	* ci/install-dependencies.sh (common_packages): Remove libdw-dev.
+	Install libdw-dev or libunwind8-dev depending on $STACKTRACE.
+	* ci/run-build-and-tests.sh: Specify --with-libdw=yes,
+	--with-libunwind=yes, or --without-stacktrace depending on $STACKTRACE.
+	* .gitlab-ci.yml (gcc-x86_64): Rename to gcc-x86_64-libdw,
+	add STACKTRACE=libdw.
+	(gcc-x86): Rename to gcc-x86-nounwind, add STACKTRACE=no.
+	(clang-x86_64): Rename to clang-x86_64-libdw, add STACKTRACE=libdw.
+	(clang-x86): Rename to clang-x86-nounwind, add STACKTRACE=no.
+	(gcc-x86_64-libunwind, gcc-x86_64-nounwind, gcc-x86-nounwind,
+	clang-x86_64-libunwind, clang-x86_64-nounwind, clang-x86-nounwind):
+	New test matrix entries.
+	* .travis.yml: Add STACKTRACE=libunwind to all x86_64 test matrix
+	entries except musl-gcc, add STACKTRACE=no to other matrix entries,
+	add test matrix entries with STACKTRACE=no variants on x86_64.
+
+2018-05-04  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: update af_packet_types.
+	* xlat/af_packet_types.in: Add values.
+	(PACKET_USER, PACKET_KERNEL): New constants, introduced by Linux commit
+	v3.14-rc1~94^2~349.
+
+	xlat: add values to adjtimex_state, adjtimex_status, advise xlats.
+	* xlat/adjtimex_state.in: Add values.
+	* xlat/adjtimex_status.in: Likewise.
+	* xlat/advise.in: Likewise.
+
+	xlat: update adjtimex_modes.
+	* xlat/adjtimex_modes.in: Add values to constants.
+	(0): Remove.
+	(ADJ_OFFSET_SS_READ): Move to the first place.
+	(ADJ_OFFSET_SINGLESHOT): Move to the second place.
+
+2018-05-04  Dmitry V. Levin  <ldv@altlinux.org>
+
+	mmap_cache: do not activate unless requested.
+	Do not call mmap_cache functions until mmap_cache_enable is invoked.
+	Change struct mmap_cache_t into a proxy structure, move all mmap_cache
+	data from struct tcb inside this new structure.
+
+	* Makefile.am (strace_SOURCES): Move mmap_cache.c and mmap_cache.h
+	to libstrace_a_SOURCES.
+	* defs.h (struct tcb): Remove mmap_cache_size and mmap_cache_generation
+	* fields.
+	* mmap_cache.h (struct mmap_cache_t): Rename
+	to struct mmap_cache_entry_t, create a new struct mmap_cache_t,
+	all users updated.
+	(mmap_cache_delete): Remove.
+	* mmap_cache.c (mmap_cache_delete): Rename to delete_mmap_cache,
+	add static qualifier.
+	(build_mmap_cache): Merge into mmap_cache_rebuild_if_invalid.
+	* strace.c (droptcb): Replace mmap_cache_delete invocation
+	with tcp->mmap_cache->free_fn.
+
+2018-05-03  Dmitry V. Levin  <ldv@altlinux.org>
+
+	mmap_cache: remove mmap_cache_is_enabled.
+	This function is no longer used and could be removed.
+
+	* mmap_cache.c (mmap_cache_is_enabled): Remove.
+	* mmap_cache.h: Likewise.
+
+2018-05-03  Masatake YAMATO  <yamato@redhat.com>
+
+	unwind-libdw: use the mmap_notify subsystem.
+	The unwind subsystem uses the mmap_cache subsystem even it uses
+	unwind-libdw as backend. unwind-libdw doesn't need the full set of the
+	mmap_cache subsystem; libdw has a feature for caching a memory
+	mapping.
+
+	This commit does three things.
+
+	(1) Make the unwind subsystem not use the mmap_cache subsystem.
+	The unwind subsystem never concern the memory mapping of the target.
+	It becomes a thin layer.
+
+	(2) Make unwind-libunwind use the mmap_cache subsystem directly.
+
+	(3) Make unwind-libdw use the mmap_notify subsystem to know when it
+	should call dwfl_linux_proc_report/dwfl_report_end for updating the
+	cache.
+
+	Here is a subsystem structure that this patch
+	introduces:
+
+		+-------------------------------------+
+		|            unwind subsys            |
+		+------------------+------------------+
+		| unwind-libunwind |   unwind-libdw   |
+		+------------------+------------------+
+		|    mmap_cache    |                  |
+		+------------------+                  |
+		|               mmap_notify           |
+		+-------------------------------------+
+		|                syscall              |
+		+-------------------------------------+
+	               mmap/munmap/mprotect/brk...
+
+	* unwind.c: Don't include "mmap_cache.h".
+	(unwind_init): Don't call mmap_cache_enable.
+	(unwind_tcb_print, unwind_tcb_capture): Don't call mmap_cache related
+	functions, just invoke unwinder.tcb_walk.
+	* unwind.h (struct unwind_unwinder_t): Remove tcb_flush_cache field.
+
+	* unwind-libdw.c: Include "mmap_notify.h" instead of "mmap_cache.h".
+	(struct ctx): Add last_proc_updating field to record the generation
+	of memory mapping that is cached by dwfl_linux_proc_report
+	and dwfl_report_end.
+	(mapping_generation): A variable counting how many times the memory
+	mapping of targets has been changed.
+	(updating_mapping_generation): New utility function for updating
+	mapping_generation.
+	(init): New function for registering updating_mapping_generation
+	in the mmap_notify subsystem as a callback function.
+	(tcb_init): Initialize ctx::last_proc_updating.
+	(tcb_flush_cache): Rename to flush_cache_maybe.  Rebuild the cache data
+	only if the data is stale.
+	(tcb_walk): Call flush_cache_maybe for avoiding referring staled cache data.
+	(unwinder): Set init function, remove tcb_flush_cache field.
+	* unwind-libunwind.c (init): Enable the mmap_cache subsystem.
+	(tcb_walk): Call mmap_cache_rebuild_if_invalid and unw_flush_cache for
+	updating the cache of the memory mapping before walking the stack.
+	(tcb_walk): Rename to walk.
+	(unwinder): Remove tcb_flush_cache field.
+
+2018-05-03  Masatake YAMATO  <yamato@redhat.com>
+
+	unwind-libdw: introduce indirect data structure for storing unwinding context
+	unwind-libdw uses Dwfl as the data structure for storing unwinding
+	context.  It is raw data that come from libdw.
+
+	This commit introduces "struct ctx" file local data type for allowing
+	unwind-libdw to attach strace side data to the unwinding context.
+
+	* unwind-libdw.c (struct ctx): New struct definition.
+	(tcb_init, tcb_fin, tcb_walk, tcb_flush_cache): Use struct ctx instead
+	of Dwfl directly.
+
+2018-05-03  Masatake YAMATO  <yamato@redhat.com>
+
+	mmap_notify: rename the macro for tracking memory mapping.
+	* sysent.h (STACKTRACE_INVALIDATE_CACHE): Rename to
+	MEMORY_MAPPING_CHANGE.  All users updated.
+
+	mmap_cache: use the mmap_notify subsystem.
+	* mmap_cache.c: Include mmap_notify.h.
+	(mmap_cache_enable): Call mmap_notify_register_client to use
+	the mmap_notify subsystem, mmap_cache_invalidate is specified
+	to handle the change of memory mapping.
+	(mmap_cache_invalidate): Add static qualifier.
+	* mmap_cache.h (mmap_cache_invalidate): Remove.
+	* syscall.c: Include mmap_notify.h instead of mmap_cache.h.
+	(syscall_exiting_decode): Call mmap_notify_report instead
+	of mmap_cache_invalidate.
+
+2018-05-03  Masatake YAMATO  <yamato@redhat.com>
+
+	mmap_notify: new subsystem for tracking the changes of memory mappings.
+	This subsystem is a spin-off of the mmap_cache subsystem.
+
+	The mmap_cache subsystem had two features: (1) tracking the change
+	of memory mapping, and (2) maintaining the cache of memory mapping.
+
+	mmap_notify is a subsystem specialized to provide feature (2).
+	unwind-libdw itself has the feature (1).  It needs only (2).
+
+	* mmap_notify.h: New file.
+	* mmap_notify.c: Likewise.
+	* Makefile.am (strace_SOURCES): Add them.
+
+2018-05-03  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	btrfs: add missing braces.
+	Reported by Coverity.
+
+	* btrfs.c (MPERS_PRINTER_DECL(btrfs_ioctl)) <case
+	BTRFS_IOC_TREE_SEARCH_V2>: Add missing braces.
+
+	Fixes: v4.22-76-gf766447 "btrfs: use PRINT_FIELD_*"
+
+2018-05-03  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.c: check return code of never failing fcntl call.
+	Because the kernel cannot be trusted.
+
+	* strace.c (set_cloexec_flag): Call perror_msg_and_die if fcntl(F_SETFD)
+	has failed.
+
+2018-05-03  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	sock: use error_func_msg for printing function name.
+	* sock.c (decode_ifconf): Use error_func_msg instead of error_msg with
+	manual function name printing.
+
+2018-05-03  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	util.c: add len sanity checks to dumpstr.
+	Reported by clang.
+
+	* util.c (dumpstr): Check that len is sane.
+
+2018-05-03  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	mmap_cache: fool-proofing build_mmap_cache.
+	Let's try to handle better the situation when build_mmap_cache is called
+	without mmap_cache/mmap_cache_size being reset prior to the call.
+
+	Reported by Coverity scan.
+
+	* mmap_cache.c (build_mmap_cache): Set cache_head to tcp->mmap_cache.
+	Reset tcp->mmap_cache_size to 0.
+
+2018-05-03  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	error_prints: add missing va_end() calls.
+	These missing va_end() calls are followed by die() calls that never
+	return, so the only practical effect of this change is appeasement
+	of code checking tools.
+
+	Reported by cppcheck.
+
+	* error_prints.c (error_msg_and_die, error_msg_and_help,
+	perror_msg_and_die): Add va_end().
+
+2018-05-03  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	mem: handle potential error from sysconf(_SC_PAGESIZE)
+	Reported by Coverity scan.
+
+	* mem.c (get_pagesize): Handle the case when sysconf(_SC_PAGESIZE)
+	returns an error.
+
+2018-05-03  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: merge fcntl64cmds into fcntlcmds.
+	Since we don't have to workaround old F_[GS]ETOWN_EX == F_[SG]ETLK64
+	kernel bug any longer, there is a room for cleanup.
+
+	* xlat/fcntlcmds.in (F_GETLK64, F_SETLK64, F_SETLKW64): Add from
+	xlat/fcntl64cmds.in.
+	* xlat/fcntl64cmds.in: Remove.
+	* fcntl.c: Do not include "xlat/fcntl64cmds.h".
+	(SYS_FUNC(fcntl), SYS_FUNC(fcntl64)): Do not use fcntl64cmds, call
+	printxval instead of printxvals.
+
+2018-05-03  Zhibin Li  <08826794brmt@gmail.com>
+
+	tests: check decoding of F_GETOWN_EX and F_SETOWN_EX fcntl commands.
+	* tests/fcntl.c (TEST_F_OWNER_EX): New macro.
+	[TEST_F_OWNER_EX]: Include "f_owner_ex.h".
+	[TEST_F_OWNER_EX] (test_f_owner_ex_type_pid,
+	test_f_owner_ex_umove_or_printaddr, test_f_owner_ex): New functions.
+	(main) [TEST_F_OWNER_EX]: Use test_f_owner_ex.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-05-03  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Introduce f_owner_ex.h.
+	Some headers define struct f_owner_ex, some struct __kernel_f_owner_ex,
+	we have to support both variants.
+
+	* configure.ac (AC_CHECK_TYPES): Check for "struct f_owner_ex"
+	and "struct __kernel_f_owner_ex" in <linux/fcntl.h>.
+	* f_owner_ex.h: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+
+2018-05-02  Masatake YAMATO  <yamato@redhat.com>
+
+	tests/ioctl_kvm_run.c: handle cpuid at the end of vcpu dentry.
+	Since Linux 4.16, kernel appends the cpuid as suffix to the entry
+	for a kvm vcpu in /proc/$pid/fd like:
+
+	    anon_inode:kvm-vcpu:0
+
+	That was
+
+	    anon_inode:kvm-vcpu
+
+	This kernel change causes the test case failure on newer kernels.
+	Update the test to deal with the new name as well as the old one.
+
+	* tests/ioctl_kvm_run.c: Include unistd.h for using readlink(2).
+	(vcpu_dev_should_have_cpuid): New function for detecting whether
+	a proc entry for given fd has the cpuid suffix or not.
+	(main): Trim vcpu_dev to remove the cpuid suffix if needed.
+	(vcpu_dev): Remove const modifier.
+
+2018-04-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: check that system definitions match fallback definitions.
+	For each constant that is accompanied by a fallback definition,
+	generate a sanity check that the definition provided by system headers
+	matches the fallback definition.
+
+	* gcc_compat.h (DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE,
+	DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE): New macros.
+	* xlat/gen.sh (cond_def): Generate a code that checks the system
+	definition against the default.
+	(gen_header): Generate a code that includes "gcc_compat.h" and
+	"static_assert.h".
+
+	Co-Authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
+
+2018-04-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: override values of F_SETOWN_EX and F_GETOWN_EX constants.
+	Linux kernel commit v2.6.32-rc7~23 has changed values of F_SETOWN_EX
+	and F_GETOWN_EX constants introduced by commit v2.6.32-rc1~96 to fix
+	the conflict with F_GETLK64 and F_SETLK64 constants.
+
+	Looks like the best way to handle this situation is to pretend that
+	old values of F_SETOWN_EX and F_GETOWN_EX didn't exist.
+
+	* xlat/fcntlcmds.in (F_SETOWN_EX, F_GETOWN_EX): Undefine.
+
+2018-04-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: fix F_* fallback definitions on alpha, hppa, mips, and sparc.
+	* xlat/fcntlcmds.in (F_GETLK, F_SETLK, F_SETLKW, F_SETOWN, F_GETOWN,
+	F_SETSIG, F_GETSIG) [alpha || hppa || mips || sparc]: Fix definitions.
+	* xlat/fcntl64cmds.in (F_GETLK64, F_SETLK64, F_SETLKW64) [hppa || mips]:
+	Likewise.
+
+	xlat: fix SI_* fallback definitions on mips.
+	* xlat/siginfo_codes.in [mips] (SI_ASYNCIO, SI_TIMER, SI_MESGQ): Define
+	to -2, -3, and -4, respectively.
+
+2018-04-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: override values of KEY_RFKILL and KEY_BRIGHTNESS_MIN constants.
+	KEY_RFKILL and KEY_NUMERIC_A constants were introduced by Linux kernel
+	commits v2.6.33~17^2~2 and v4.1-rc1~150^2~1^10~6, respectively.
+	Apparently, RHEL6 introduced an alternative KEY_RFKILL constant
+	with the same value as upstream KEY_NUMERIC_A.
+
+	KEY_BRIGHTNESS_MIN and KEY_BRIGHTNESS_MAX constants were introduced
+	by Linux kernel commit v3.16-rc1~30^2~6^2~1^2~7.
+	Apparently, RHEL7 introduced an alternative KEY_BRIGHTNESS_MIN constant
+	with the same value as upstream KEY_BRIGHTNESS_MAX.
+
+	Downstream vendors are *not* allowed to do this.
+	Ignore the system value of KEY_RFKILL and KEY_BRIGHTNESS_MIN.
+
+	* xlat/evdev_keycode.in (KEY_RFKILL, KEY_BRIGHTNESS_MIN): Undefine.
+
+2018-04-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: override the value of KEY_DATA constant.
+	Linux kernel commit v4.9-rc8~12^2 has changed the value of KEY_DATA
+	constant introduced by commit v4.7-rc6~32^2~6^2 because the old value
+	was already used by KEY_FASTREVERSE.
+
+	Looks like the best way to handle this situation is to pretend that
+	the old value of KEY_DATA didn't exist.
+
+	* xlat/evdev_keycode.in (KEY_DATA): Undefine.
+
+2018-04-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: override the value of AUDIT_FEATURE_CHANGE constant.
+	Linux kernel commit v3.15-rc1~18^2~1 has changed the value
+	of AUDIT_FEATURE_CHANGE constant introduced by commit v3.13-rc1~19^2~20
+	which is of course an ABI breakage that affected 3.13 and 3.14 kernel
+	releases as well as their LTS derivatives.
+
+	Linux kernel commit v3.15-rc1~18^2~1 also claims that the old value
+	of AUDIT_FEATURE_CHANGE was ignored by userspace because of the
+	established convention how netlink messages for the audit system
+	are divided into blocks.
+
+	Looks like the best way to handle this situation is to pretend that
+	the old value of AUDIT_FEATURE_CHANGE didn't exist.
+
+	* xlat/nl_audit_types.in (AUDIT_FEATURE_CHANGE): Undefine.
+
+	Co-Authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
+
+2018-04-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	xlat: fix MCL_* fallback definitions on alpha, ppc, ppc64, and sparc.
+	On these architectures, MCL_* constants are different.
+
+	* xlat/socketlayers.in [__alpha__ || __powerpc__ || __powerpc64__
+	|| __sparc__] (MCL_CURRENT, MCL_FUTURE, MCL_ONFAULT): Define to 0x2000,
+	0x4000, and 0x8000, respectively.
+
+2018-04-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: fix SOL_SOCKET fallback definition on alpha, hppa, mips, and sparc
+	On these architectures, SOL_SOCKET is 0xffff and not 1.
+
+	* xlat/socketlayers.in [__alpha__ || __hppa__ || __mips__ || __sparc__]
+	(SOL_SOCKET): Define to 0xffff.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add more mount checks.
+	* tests/gen_tests.in (mount, mount-Xabbrev, mount-Xraw, mount-Xverbose):
+	Add -a33 option.
+	* tests/mount.c: Check printing of flags and pointers.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-28  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: use sprintrc in mount test.
+	* tests/mount.c (main): Use sprintrc.
+
+2018-04-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add mount variants with different xlat verbosity levels.
+	* tests/mount-Xabbrev.c: New file.
+	* tests/mount-Xraw.c: Likewise.
+	* tests/mount-Xverbose.c: Likewise.
+	* tests/mount.c: Add handling of XLAT_RAW and XLAT_VERBOSE macros.
+	* tests/pure_executables.list: Add mount-Xabbrev, mount-Xraw,
+	and mount-Xverbose.
+	* tests/.gitignore: Likewise.
+	* tests/gen_tests.in (mount-Xabbrev, mount-Xraw, mount-Xverbose): New
+	tests.
+
+	tests: add old_mmap variants with different xlat verbosity levels.
+	* tests/old_mmap-Xabbrev.c: New file.
+	* tests/old_mmap-Xraw.c: Likewise.
+	* tests/old_mmap-Xverbose.c: Likewise.
+	* tests/old_mmap.c (main): Add handling of XLAT_RAW and XLAT_VERBOSE
+	macros.
+	* tests/pure_executables.list: Add old_mmap-Xabbrev, old_mmap-Xraw,
+	and old_mmap-Xverbose.
+	* tests/.gitignore: Likewise.
+	* tests/gen_tests.in (old_mmap-Xabbrev, old_mmap-Xraw,
+	old_mmap-Xverbose): New tests.
+
+2018-04-28  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add mmap/mmap64 variants different xlat verbosity levels.
+	* tests/tests.h [!XLAT_RAW] (XLAT_RAW): Define.
+	[!XLAT_VERBOSE] (XLAT_VERBOSE): Likewise.
+	* tests/mmap-Xabbrev.c: New file.
+	* tests/mmap-Xraw.c: Likewise.
+	* tests/mmap-Xverbose.c: Likewise.
+	* tests/mmap64-Xabbrev.c: Likewise.
+	* tests/mmap64-Xraw.c: Likewise.
+	* tests/mmap64-Xverbose.c: Likewise.
+	* tests/mmap.c (main): Add handling of XLAT_RAW and XLAT_VERBOSE macros.
+	* tests/mmap.test: Add handling of optional test arguments that set
+	alignment and xlat verbosity options.
+	* tests/Makefile.am (mmap64_Xabbrev_CPPFLAGS, mmap64_Xraw_CPPFLAGS,
+	mmap64_Xverbose_CPPFLAGS): New variables, analogous to mmap64_CPPFLAGS.
+	* tests/pure_executables.list: Add mmap-Xabbrev, mmap-Xraw,
+	mmap-Xverbose, mmap64-Xabbrev, mmap64-Xraw, and mmap64-Xverbose.
+	* tests/.gitignore: Likewise.
+	* tests/gen_tests.in (mmap-Xabbrev, mmap-Xraw, mmap-Xverbose,
+	mmap64-Xabbrev, mmap64-Xraw, mmap64-Xverbose): New tests.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-27  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Fix fallback definition of MSG_ZEROCOPY.
+	* xlat/msg_flags.in (MSG_ZEROCOPY): Set fallback definition to 0x4000000.
+
+	Fixes: v4.21~316 ("Update MSG_* constants")
+
+2018-04-27  Dmitry V. Levin  <ldv@altlinux.org>
+
+	build: try to use _Static_assert if static_assert is not available.
+	* configure.ac: Check for _Static_assert if static_assert
+	is not available.
+	* static_assert.h [!HAVE_STATIC_ASSERT && HAVE__STATIC_ASSERT]
+	(static_assert): Define to _Static_assert.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	printmode: add xlat style support to print_symbolic_mode_t.
+	* printmode.c (print_symbolic_mode_t): Set ifmt to an empty string,
+	print raw and decoded values based on current xlat_verbosity setting.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	evdev: remove XT_NORMAL.
+	It is no longer used.
+
+	* evdev.c (enum xlat_type) <XT_NORMAL>: Remove.
+	(printxval_dispatch) <case XT_NORMAL>: Remove.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Switch to use of value-indexed xlats for evdev constants.
+	* xlat/evdev_abs.in: Add "#value_indexed" directive.
+	* xlat/evdev_autorepeat.in: Likewise.
+	* xlat/evdev_ff_status.in: Likewise.
+	* xlat/evdev_keycode.in: Likewise.
+	* xlat/evdev_leds.in: Likewise.
+	* xlat/evdev_misc.in: Likewise.
+	* xlat/evdev_prop.in: Likewise.
+	* xlat/evdev_relative_axes.in: Likewise.
+	* xlat/evdev_snd.in: Likewise.
+	* xlat/evdev_switch.in: Likewise.
+	* xlat/evdev_sync.in: Likewise.
+	* xlat/evdev_ff_types.in: Add a comment about sorting.
+	* evdev.c (keycode_ioctl, keycode_V2_ioctl): Use printxval_index
+	instead of printxval.
+	(bit_ioctl): Use XT_SORTED for evdev_ff_types, use XT_INDEXED
+	for other xlats.
+	(evdev_read_ioctl): Use XT_INDEXED for all xlats.
+	* ioctl.c (evdev_decode_number): Use printxval_indexn instead of
+	printxval for evdev_abs.
+
+	evdev: support various types of xlats in decode_bitset.
+	* evdev.c (enum xlat_type): New enumeration.
+	(printxval_dispatch): New function.
+	(decode_bitset_): Rename from decode_bitset, add decode_nr_size
+	and xt arguments, call printxval_dispatch instead of printxval.
+	(decode_bitset): Add a decode_bitset_ wrapper that derives
+	decode_nr_size from the ARRAY_SIZE of decode_nr.
+	(bit_ioctl, evdev_read_ioctl): Update decode_bitset calls.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Move xlat/evdev_abs.h inclusion from ioctl.c to evdev.c.
+	Also introduce evdev_abs_size constant, which will be needed later.
+
+	* defs.h (evdev_abs_size): New declaration.
+	* ioctl.c: Move xlat/evdev_abs.h inclusion ...
+	* evdev.c: ... here.
+	(evdev_abs_size): New constant variable.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Add support for value-indexed xlats.
+	There are quite a few xlats that start from 0 and not too sparse,
+	we can push the search time for them down to O(1).
+
+	* defs.h (printxval_indexn_ex): New declaration.
+	(printxval_indexn, printxval_index, printxval_index_ex): New macros.
+	* xlat.c (printxval_sized): Rename from printxval_searchn_ex,
+	add fn argument, call it instead of xlat_search.
+	(printxval_searchn_ex): Implement as a thin wrapper around
+	printxval_sized using xlat_search as a search function.
+	(xlat_idx): New function.
+	(printxval_indexn_ex): New function, a thin wrapper around
+	printxval_sized using xlat_idx as a search function.
+	* xlat/gen.sh: Add support for "#value_indexed" directive.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	socketcall: use printxval_d for printing call argument.
+	* socketcall.c (SYS_FUNC(socketcall)): Use printxval_d instead of manual
+	call argument decoding.
+
+	signal: use print_xlat_ex in print_sa_handler.
+	* signal.c (print_sa_handler): Call print_xlat_ex instead of tprints
+	in order to respect current xlat style setting.
+
+	s390: use printxvals_ex for command printing in s390_runtime_instr.
+	* s390.c (SYS_FUNC(s390_runtime_instr)): Replace manual command argument
+	decoding with a printxvals_ex call.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	printsiginfo: use print_xlat_ex in print_si_code.
+	In order to respect current xlat style setting.
+
+	* printsiginfo.c (print_si_code): Use print_xlat_ex instead of manual
+	string/value printing.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	open: use print_xlat_ex for printing open modes.
+	In order to respect xlat style setting.
+
+	* open.c (tprint_open_modes): Use print_xlat_ex instead of
+	tprint_open_modes.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	netlink: use print_xlat_ex in decode_nlmsg_type_netfilter.
+	In order to respect current xlat style setting.
+
+	* netlink.c (decode_nlmsg_type_netfilter): Use print_xlat_ex
+	instead of tprints.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	net: use print_xlat_ex in tprint_sock_type.
+	In order to respect current xlat style setting.
+
+	* next.c (tprint_sock_type): Use print_xlat_ex instead of tprints
+	for socket type printing.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	keyctl: use printxval_d for printing keyring serial number.
+	* keyctl.c (print_keyring_serial_number): Use printxval_d instead of
+	looking up and printing xlat value manually.
+	* xlat/key_spec.in: Add "#val_type int" so the xlat values have sign
+	bit propagated.
+
+	ipc: use printxval_u instead of manual xlat value printing.
+	* ipc.c (SYS_FUNC(ipc)): Decode call argument using printxval_u.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	ioprio: use sprintxval instead of xlookup and string/value printing.
+	In order to respect current xlat style.
+
+	* ioprio.c (sprint_ioprio): Use sprintxval for producing string
+	representation of ioprio class, use the produced string representation
+	in resulting xsprintf.
+
+2018-04-27  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: handle NULL str in print_xlat_ex.
+	It allows to use the following code pattern:
+
+		print_xlat_ex(val, xlookup(xlat, val), XLAT_STYLE_FMT_D);
+
+	* xlat.c (print_xlat_ex): Handle str being NULL: print val instead.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-26  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	strace.1.in: fix typo (Ronald -> Roland)
+	A very unfortunate one, though.
+
+	NEWS: mention that -X option addresses Debian bug #692915.
+
+2018-04-25  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	ioctl: do not include linux/input.h.
+	All the ABS_* and EV_* values are now available internally,
+	there's no need to include the header.
+
+	* ioctl.c [HAVE_LINUX_INPUT_H]: Do not include linux/input.h.
+
+2018-04-25  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add more evdev ioctl checks.
+	tests/ioctl_evdev.c (TEST_NULL_ARG_EX): Rename from TEST_NULL_ARG, add
+	str argument, print it instead of #cmd.
+	(TEST_NULL_ARG): Implement as a TEST_NULL_ARG_EX wrapper.
+	(main): Add checks for EVIOCSABS and EVIOCGBIT ioctls.
+
+	evdev: decode EV_SW unconditionally.
+	* evdev.c (bit_ioctl): Remove [EV_SW] check.
+	* tests/ioctl_evdev.c [!EV_SW] (EV_SW): Define.
+	(main): Remove [EV_SW] check.
+
+2018-04-25  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: provide fallback definitions for arch-independent evdev constants.
+	* xlat/evdev_abs.in: Add constant values.
+	* xlat/evdev_autorepeat.in: Likewise.
+	* xlat/evdev_ev.in: Likewise.
+	* xlat/evdev_ff_status.in: Likewise.
+	* xlat/evdev_ff_types.in: Likewise.
+	* xlat/evdev_leds.in: Likewise.
+	* xlat/evdev_misc.in: Likewise.
+	* xlat/evdev_prop.in: Likewise.
+	* xlat/evdev_relative_axes.in: Likewise.
+	* xlat/evdev_snd.in: Likewise.
+	* xlat/evdev_switch.in: Likewise.
+	* xlat/evdev_sync.in: Likewise.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-25  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat/evdev_switch.in: update.
+	* xlat/evdev_switch.in (SW_RADIO): Remove, as it was renamed to
+	SW_RFKILL_ALL and marked as deprecated by Linux commit v2.6.26-rc5~32^2.
+	(SW_PEN_INSERTED): New constant, was added by Linux commit v4.7~11^2~7.
+
+2018-04-24  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	util.c: make "Out of memory" messages a bit more informative.
+	Since these are emitted in multiple places and are not expected during
+	any normal operation, it makes sense to report the caller name.
+
+	* util.c (print_quoted_string_ex, print_quoted_string_ex, dumpiov_upto,
+	dumpstr): Replace error_msg with error_func_msg.
+
+2018-04-24  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	ci: reorder travis jobs.
+	Run coverage check first as it is the longest one.
+
+	* .travis.yml (matrix): Reorder.
+
+2018-04-24  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: add MS_SUBMOUNT constant.
+	* xlat/mount_flags.in (MS_SUBMOUNT): New constant, introduced
+	by Linux commit v4.11-rc1~82^2~7.
+
+2018-04-24  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	fcntl: replace combinations of xlookup and printxval with printxvals.
+	After all, that's what printxvals for.
+
+	* fcntl.c (SYS_FUNC(fcntl), SYS_FUNC(fcntl64)): Use printxvals for
+	printing value with multiple xlat tables as constant sources.
+
+2018-04-24  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Move xlat_verbose and xlat_format from xlat.c to defs.h.
+	As it will be used elsewhere.
+
+	* xlat.c (xlat_verbose, xlat_format): Move...
+	* defs.h: ...here.
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	btrfs: use printxval_u for error types printing.
+	* btrfs.c (MPERS_PRINTER_DECL(btrfs_ioctl)) <case
+	BTRFS_IOC_GET_DEV_STATS>: Use printxval_u for error type printing.
+	* tests/btrfs.c (btrfs_test_get_dev_stats_ioctl): Update expected output.
+
+	btrfs: print device IDs using PRINT_FIELD_DEV.
+	* btrfs.c (btrfs_print_balance_args): Print devid field using
+	PRINT_FIELD_DEV.
+	(MPERS_PRINTER_DECL(btrfs_ioctl)) <case BTRFS_IOC_DEV_INFO,
+	case BTRFS_IOC_GET_DEV_STATS, case BTRFS_IOC_SCRUB,
+	case BTRFS_IOC_SCRUB_PROGRESS>: Likewise.
+	(MPERS_PRINTER_DECL(btrfs_ioctl)) <case BTRFS_IOC_DEV_REPLACE>: Print
+	start.srcdevid field using PRINT_FIELD_DEV.
+	* tests/btrfs.c: Update expected output.
+
+	btrfs: print cont_reading_from_srcdev_mode as xlat.
+	* xlat/btrfs_cont_reading_from_srcdev_mode.in: New file.
+	* btrfs.c: Include "xlat/btrfs_cont_reading_from_srcdev_mode.h".
+	(MPERS_PRINTER_DECL(btrfs_ioctl)) <case BTRFS_IOC_DEV_REPLACE>: Print
+	named values for the
+	struct btrfs_ioctl_dev_replace_args.start.cont_reading_from_srcdev_mode
+	field.
+	* tests/btrfs.c: Include "xlat/btrfs_cont_reading_from_srcdev_mode.h".
+	(btrfs_test_dev_replace_ioctl): Update expected output.
+
+	btrfs: use PRINT_FIELD_*
+	* btrfs.c (btrfs_print_balance_args, btrfs_print_balance,
+	btrfs_print_features, btrfs_print_qgroup_limit,
+	btrfs_print_data_container_header,
+	print_btrfs_data_container_logical_ino, btrfs_print_qgroup_inherit,
+	btrfs_print_tree_search, print_btrfs_ioctl_space_info, btrfs_ioctl):
+	Use PRINT_FIELD_* macros for printing structure fields.
+
+	btrfs: make BTRFS_IOC_GET_DEV_STATS error statistics output more structured
+	* btrfs.c (MPERS_PRINTER_DECL(btrfs_ioctl)) <case
+	BTRFS_IOC_GET_DEV_STATS>: Print array index in square brackets before
+	the value in order to avoid confusion.
+	* tests/btrfs.c (btrfs_test_get_dev_stats_ioctl): Update expected output.
+
+	ioctl: print ioctl number in accordance with xlat verbosity setting.
+	* ioctl.c (SYS_FUNC(ioctl)): Print ioctl command name in accordance
+	with the current xlat_verbosity setting.
+	* tests/btrfs.c (sprint_xlat_): New function.
+	(ioc): New macro, a wrapper for sprint_xlat_.
+	Update expected output.
+
+	file_ioctl: make abbreviated output more structured.
+	* file_ioctl.c (file_ioctl): Print fm_extents field name only in case
+	of non-abbreviated output.
+	* tests/btrfs.c (btrfs_test_ino_path_ioctls): Update expected output.
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	btrfs: fix printing of struct btrfs_ioctl_quota_ctl_args.
+	For some reason, he decoder of BTRFS_IOC_QUOTA_CTL command didn't print
+	opening curly brace and field name, only the closing curly brace.
+
+	* btrfs.c (MPERS_PRINTER_DECL(btrfs_ioctl)) <case BTRFS_IOC_QUOTA_CTL>:
+	Print "{cmd=".
+	* tests/btrfs.c (btrfs_test_quota_ctl_ioctl): Update expected output.
+
+	Fixes: v4.12~100 "ioctl: add decoding support for btrfs ioctls"
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	btrfs: consistently use PRINT_FIELD_U64.
+	* btrfs.c (print_u64, print_member_u64, print_key_value_internal,
+	print_key_value): Remove.
+	(btrfs_print_balance_args): Use PRINT_FIELD_U64 instead of
+	print_member_u64.
+	(btrfs_print_tree_search): Use PRINT_FIELD_U64 instead of
+	print_key_value.
+	(MPERS_PRINTER_DECL(btrfs_ioctl)): Use PRINT_FIELD_U64 instead of manual
+	UINT64_MAX printing.
+	* tests/btrfs.c: Update expected output in order to account fields that
+	are now affected by xlat_verbosity setting.
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	btrfs: print {min,max}_{offset,transid} unconditionally.
+	As it looks like there's no reason to skip their printing.
+
+	* btrfs.c (print_key_value_internal): Do not check value argument
+	for holding non-zero value.
+	* tests/btrfs.c (btrfs_print_search_key): Update expected output.
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/btrfs.c: accept possible failure of BTRFS_IOC_BALANCE_V2.
+	BTRFS_IOC_BALANCE_V2 ioctl might fail sometimes (for example, if it
+	decides that it doesn't have enough free space).
+
+	* tests/btrfs.c (btrfs_test_balance_ioctls): Print expected output for
+	the BTRFS_IOC_BALANCE_V2 call based on its return code.
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/btrfs.c: support volumes with mixed data/metadata in BTRFS_IOC_BALANCE_V2
+	For these volumes, pend/vend should be the same for data and meta.
+
+	* tests/btrfs.c (btrfs_test_balance_ioctls): Set args.meta.pend and
+	args.meta.vend to the same values as args.data.pend and args.data.vend,
+	respectively.
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/btrfs.c: check BTRFS_IOC_SUBVOL_CREATE_V2 result.
+	Otherwise the subsequent openat call fails with a cryptic message.
+
+	* tests/btrfs.c (btrfs_test_subvol_ioctls): Check return code of the
+	BTRFS_IOC_SUBVOL_CREATE_V2 ioctl call that is supposed to be successful.
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/btrfs.c: add pid suffix to the created directory, remove it on exit
+	If multiple tests are running simultaneously in the same directory,
+	conflicts (and test failures) may happen.
+
+	* tests/btrfs.c (path, dir_name_fmt, dir_name): New variables.
+	(btrfs_test_ino_path_ioctls): Use dir_name for printing directory name.
+	(rm_test_dir): New function.
+	(main): Generate dir_name, use it instead of fixed name, add rm_test_dir
+	as an atexit handler.
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	btrfs: duplicate printing of opening braces on entering/exiting.
+	* btrfs.c (MPERS_PRINTER_DECL(btrfs_ioctl)): Print opening bracket
+	on entering and exiting separately.
+
+	btrfs: refactor timespec printing into print_btrfs_timespec.
+	* btrfs.c (print_btrfs_timespec): New function.
+	(MPERS_PRINTER_DECL(btrfs_ioctl)) <case BTRFS_IOC_SET_RECEIVED_SUBVOL>:
+	Use print_btrfs_timespec for printing stime and rtime fields.
+	* tests/btrfs.c (btrfs_test_set_received_subvol_ioctl): Update expected
+	output.
+
+	btrfs: print abbreviations and field names more consistently.
+	* btrfs.c (btrfs_print_data_container_header): Do not print ", val=".
+	(btrfs_print_ino_path_container): Print val field name only in case
+	of non-abbreviated output.
+	(btrfs_print_qgroup_inherit): Print qgroups field name only in case
+	of non-abbreviated output.
+	(btrfs_print_tree_search): Print buf field name only in case
+	of non-abbreviated output.
+	(MPERS_PRINTER_DECL(btrfs_ioctl)) <case BTRFS_IOC_SEND>: Print
+	clone_sources field name only in case of non-abbreviated output.
+	(MPERS_PRINTER_DECL(btrfs_ioctl)) <case BTRFS_IOC_SPACE_INFO>: Print
+	spaces field name only in case of non-abbreviated output.
+	* tests/btrfs.c: Update expected output.
+
+	btrfs: move printing of the field name inside btrfs_print_qgroup_limit.
+	* btrfs.c (btrfs_print_qgroup_limit): Print ", lim=".
+	(btrfs_print_qgroup_inherit, MPERS_PRINTER_DECL(btrfs_ioctl)): Do not
+	print ", lim=" before btrfs_print_qgroup_limit call.
+
+	btrfs: convert btrfs_print_{objectid,key_type} to PRINT_FIELD_XVAL_U.
+	* btrfs.c (btrfs_print_key_type, btrfs_print_objectid): Convert into
+	thin wrappers around PRINT_FIELD_XVAL_U.
+	(btrfs_print_data_container_header, btrfs_print_tree_search,
+	MPERS_PRINTER_DECL(btrfs_ioctl)): Update calls to btrfs_print_key_type
+	and btrfs_print_objectid in accordance with the new calling convention.
+	(print_objectid_callback): Use printxvals_ex directly instead of
+	btrfs_print_objectid call.
+	* tests/btrfs.c (btrfs_print_objectid, btrfs_print_key_type): Update
+	expected output.
+
+	tests: add btrfs tests with verbose xlat decoding.
+	* tests/btrfs-X.test: New test.
+	* tests/btrfs-vX.test: Likewise.
+	* tests/btrfs-vwX.test: Likewise.
+	* tests/btrfs-wX.test: Likewise.
+	* tests/Makefile.am (DECODER_TESTS): Add them.
+	* tests/btrfs.c (verbose_xlat): New static variable.
+	(prfl_btrfs, prxval_btrfs): New function.
+	(btrfs_print_qgroup_inherit, btrfs_print_vol_args_v2,
+	btrfs_print_balance_args, btrfs_test_balance_ioctls,
+	btrfs_test_clone_ioctls, btrfs_test_defrag_ioctls,
+	btrfs_test_space_info_ioctl, btrfs_print_defrag_range_args,
+	btrfs_test_scrub_ioctls, btrfs_test_ino_path_ioctls,
+	btrfs_test_send_ioctl, btrfs_test_send_ioctl,
+	btrfs_test_quota_ctl_ioctl, btrfs_test_get_dev_stats_ioctl,
+	btrfs_test_get_dev_stats_ioctl, btrfs_test_dev_replace_ioctl,
+	btrfs_test_dev_replace_ioctl, btrfs_print_features): Use prfl_btrfs and
+	prxval_btrfs instead of printflags and printxval, respectively.
+	(btrfs_test_balance_ioctls, btrfs_test_ino_path_ioctls,
+	btrfs_test_quota_ctl_ioctl, btrfs_test_dev_replace_ioctl,
+	btrfs_test_dev_replace_ioctl): Update expected output based on
+	verbose_xlat setting.
+	(btrfs_print_defrag_range_args): Add compress_type_known arg, pass it
+	to prxval_btrfs.
+	(main): Handle -X option.
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: check -X option syntax.
+	* tests/options-syntax.test: Add checks for -X option with invalid
+	arguments.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Add user interface for configuring xlat output style.
+	* strace.c (init): Handle -X option, set xlat_verbosity
+	according to -X argument.
+	* strace.1.in: Document -X option.
+	* NEWS: Mention it.
+
+	Closes: https://github.com/strace/strace/issues/27
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-20  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: print fields that interpreted as pointers using printaddr64.
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_MAP_LOOKUP_ELEM),
+	BEGIN_BPF_CMD_DECODER(BPF_MAP_UPDATE_ELEM)): Print key and value
+	fields using PRINT_FIELD_ADDR64.
+	(BEGIN_BPF_CMD_DECODER(BPF_MAP_DELETE_ELEM)): Print key field using
+	PRINT_FIELD_ADDR64.
+	(BEGIN_BPF_CMD_DECODER(BPF_MAP_GET_NEXT_KEY)): Print key and next_key
+	field using PRINT_FIELD_ADDR64.
+	(BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)): Print insns and log_buf fields
+	using PRINT_FIELD_ADDR64.
+	(BEGIN_BPF_CMD_DECODER(BPF_PROG_TEST_RUN)): Print data_in and data_out
+	fields using PRINT_FIELD_ADDR64.
+	* tests/bpf.c: Update expected output.
+
+2018-04-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+	build: make it even more reproducible.
+	* Makefile.am (today): Consistently print the UTC date in C locale.
+	* configure.ac (RPM_CHANGELOGTIME, DEB_CHANGELOGTIME): Likewise.
+	* maint/update_copyright_years.sh: Likewise.
+	* copyright-year-gen: Likewise.  When $SOURCE_DATE_EPOCH is non-empty,
+	use it as fallback date before the current system date.
+
+	References: https://github.com/strace/strace/pull/68
+
+2018-04-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	unwind: move unwind_tcb_init invocation to after_successful_attach.
+	There is no need to call unwind_tcb_init before the tracee is attached.
+
+	* strace.c (alloctcb) [ENABLE_STACKTRACE]: Move unwind_tcb_init
+	invocation ...
+	(after_successful_attach) [ENABLE_STACKTRACE]: ... here.
+	(init) [ENABLE_STACKTRACE]: Remove unwind_tcb_init invocation loop.
+	* unwind.c (unwind_tcb_fin): Skip if tcp->unwind_queue is NULL.
+
+2018-04-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	strace: move setting of post-attach flags inside after_successful_attach
+	* strace.c (after_successful_attach): Add "flags" argument.
+	Set TCB_ATTACHED, TCB_STARTUP, and "flags" in tcp->flags.
+	All users updated.
+
+2018-04-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	strace: rename newoutf to after_successful_attach.
+	This function is going to be used for other things that have to be done
+	right after a successful attach, hence the rename.
+
+	* strace.c (newoutf): Rename to after_successful_attach,
+	all users updated.
+
+2018-04-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	unwind: remove stray newline in error diagnostics.
+	* unwind-libdw.c (tcb_init): Do not pass trailing "\n" to error_msg
+	as the latter prints newline itself.
+
+2018-04-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	build: make it more reproducible.
+	* file-date-gen: Consistently print the UTC date in C locale.
+	When $SOURCE_DATE_EPOCH is non-empty, use it as fallback date
+	before the current system date.
+
+	Reported-by: Chris Lamb <lamby@debian.org>
+	Closes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=896016
+	Closes: https://github.com/strace/strace/pull/68
+
+2018-04-19  Masatake YAMATO  <yamato@redhat.com>
+
+	unwind: initialize unwind context only if given tcb is initialized.
+	With libdw based unwinder, following warnings are reported
+	when -p is passed before -k:
+
+	   $ ./strace -p 1 -k
+	   ...
+	   ./strace: dwfl_linux_proc_attach returned an error for process 0: No such file or directory
+	   ...
+
+	It seems that commit 54c7792b, "Fix libunwind segfault when -p is
+	passed before -k" doesn't fix the original issue.
+
+	* strace.c (init) [ENABLE_STACKTRACE]: Initialize unwind context only
+	if given tcb is initialized.
+
+2018-04-12  Dmitry V. Levin  <ldv@altlinux.org>
+
+	bpf: harmonize length checks.
+	The rest of the decoder uses offsetof to check the length.
+
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_OBJ_PIN),
+	BEGIN_BPF_CMD_DECODER(BPF_PROG_GET_NEXT_ID),
+	BEGIN_BPF_CMD_DECODER(BPF_PROG_GET_FD_BY_ID),
+	BEGIN_BPF_CMD_DECODER(BPF_MAP_GET_FD_BY_ID)): Use offsetof instead
+	of offsetofend.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: add support for map_name and map_ifindex fields in BPF_MAP_CREATE.
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_MAP_CREATE)): Decode map_name
+	and map_ifindex fields that were added in Linux commits
+	v4.15-rc1~84^2~605^2~3 and v4.16-rc1~123^2~145^2~5^2~8, respectively.
+	* bpf_attr.h (struct BPF_MAP_CREATE_struct): Add map_name
+	and map_ifindex fields.
+	* tests/bpf.c (init_BPF_MAP_CREATE_attr7): New function.
+	(BPF_MAP_CREATE_checks): Remove const qualifier, add two more checks.
+
+	bpf: improve handling of various sizes of BPF_MAP_CREATE attributes.
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_MAP_CREATE)): Skip printing
+	the rest of the structure if len is less than the offset of the end
+	of max_entries, map_flags, or inner_map_fd field.
+	* tests/bpf.c (BPF_MAP_CREATE_checks): Add two more checks.
+
+	tests: add checks for bpf BPF_MAP_CREATE arguments.
+	* tests/bpf.c (BPF_MAP_CREATE_checks): Add two more checks.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: print numa_node using xlat.
+	As the value of -1 has a special meaning.  The issue is complicated
+	by the fact that this constant is not exported by UAPI.
+
+	* xlat/numa_node.in: New file.
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_MAP_CREATE)): Print numa_node field
+	using printxvals_ex with a special xlat style.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	btrfs: use umove_or_printaddr_ignore_syserror instead of u_error mangling
+	* btrfs.c (MPERS_PRINTER_DECL(btrfs_ioctl)) <case
+	BTRFS_IOC_TREE_SEARCH_V2>: Use umove_or_printaddr_ignore_syserror
+	instead of tcp->u_error mangling around umove_or_printaddr call.
+
+	defs.h: introduce umove_or_printaddr{,64}_ignore_syserror wrappers.
+	* defs.h (umove_or_printaddr64_ignore_syserror): New macro, a thin
+	wrapper around umoven_or_printaddr64_ignore_syserror.
+	(umove_or_printaddr_ignore_syserror): New macro, a thin wrapper around
+	umoven_or_printaddr_ignore_syserror.
+
+	print_fields.h: add PRINT_FIELD_XVAL_U for printing xlat in %u format.
+	* print_fields.h (PRINT_FIELD_XVAL_U): New macro.
+
+	print_fields.h: add PRINT_FIELD_U64 for printing u64 with UINT64_MAX handling
+	* print_fields.h (PRINT_FIELD_U64): New macro.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf_sock_filter: use print_xlat32.
+	We can't simply use print_xlat here due to the way those SKF_*_OFF
+	constants are defined.
+
+	* bpf_sock_filter.c (print_sock_filter_k): Use print_xlat32 for printing
+	SKF_AD_OFF, SKF_NET_OFF, and SKF_LL_OFF named constants.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	defs.h: add print_xlat32 macro.
+	For those cases where inadvertent sign extension is possible.
+
+	* defs.h (print_xlat32): New macro, a wrapper for print_xlat_ex.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	open: use print_xlat_d in print_dirfd.
+	* open.c (print_dirfd): Use print_xlat_d for printing AT_FDCWD named
+	constant.
+
+	fanotify: use print_xlat_d.
+	* fanotify.c (SYS_FUNC(fanotify_mark)): Use print_xlat_d for printing
+	FAN_NOFD named constant.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Add print_xlat_u and print_xlat_d shorthands.
+	Add variants of print_xlat with various value printing formats.
+
+	* defs.h (print_xlat_u, print_xlat_d): New macro, a wrapper for
+	print_xlat_ex.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat: introduce XLAT_STYLE_FMT_D.
+	As there are some possible users for it, apparently.
+
+	* defs.h (XLAT_STYLE_FORMAT_MASK): Update the value in order to
+	accommodate XLAT_STYLE_FMT_D.
+	(enum xlat_style) <XLAT_STYLE_FMT_D>: New enumeration entity.
+	(printxval64_d, printxval_d): New function, a shorthand for
+	printxvals_ex with a single xlat and XLAT_STYLE_FMT_D xlat style.
+	* xlat.c (sprint_xlat_val): Handle XLAT_STYLE_FMT_D.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	defs.h: add shorthands for printing xval with XLAT_STYLE_FMT_U.
+	* defs.h (printxval_u, printxval64_u): New function, a shorthand for
+	printxvals_ex with a single xlat and XLAT_STYLE_FMT_U as a style.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Add support for various xlat formats.
+	Since xlat printing routines now have a notion of "style" that should be
+	used for printing xlat values, we can also employ this argument for
+	passing information about number printing format (unsigned decimal
+	or hexadecimal, so far).
+
+	* defs.h (XLAT_STYLE_FORMAT_SHIFT, XLAT_STYLE_FORMAT_MASK): New macro
+	constant.
+	(enum xlat_style) <XLAT_STYLE_FMT_X, XLAT_STYLE_FMT_U>: New enumeration
+	entities.
+	* xlat.c (xlat_verbose, xlat_format): New macro for checking specific
+	aspect of style argument.
+	(get_xlat_style): Use xlat_verbose for checking xlat verbosity style.
+	(sprint_xlat_val, print_xlat_val): New function, for easing printing
+	raw constant number with respect to printing format style.
+	(printxvals_ex, sprintxval_ex, printxval_searchn_ex,
+	printxval_searchn_ex, sprintflags_ex, printflags_ex, print_xlat_ex):
+	Use xlat_verbose macro for xlat verbosity style checks. Use
+	print_xlat_val instead of direct raw xlat value printing.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	v4l2: use print_xlat in print_v4l2_queryctrl.
+	* v4la.c (print_v4l2_queryctrl): Use print_xlat for printing
+	V4L2_CTRL_FLAG_NEXT_CTRL named constant.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	prctl: use print_xlat_ex to print PR_SET_PTRACER_ANY.
+	We cannot simply use print_xlat as PR_SET_PTRACER_ANY is defined
+	differently in kernel headers.
+
+	* prctl.c (SYS_FUNC(prctl)) <case PR_SET_PTRACER>: Use print_xlat_ex
+	for printing PR_SET_PTRACER_ANY named constant.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	nlattr: use print_xlat.
+	* nlattr.c (print_nlattr): Use print_xlat for printing NLA_F_NESTED and
+	NLA_F_NET_BYTEORDER named constants.
+
+	ipc_defs.h: use print_xlat.
+	* ipc_defs.h (PRINTCTL): Use print_xlat for printing IPC_64 named
+	constant.
+
+	futex: use print_xlat.
+	* futex.c [!FUTEX_OP_OPARG_SHIFT] (FUTEX_OP_OPARG_SHIFT): New macro
+	constant.
+	(SYS_FUNC(futex)): Use print_xlat for printing FUTEX_OP_OPARG_SHIFT
+	named constant.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	ipc: use printxval for printing key.
+	Convert explicit constant printing logic into a printxval call in order
+	to account for xlat style setting.
+
+	* defs.h (ipc_private): New xlat array declaration.
+	* ipc_msg.c (SYS_FUNC(msgget)): Use printxval for printing IPC_PRIVATE.
+	* ipc_sem.c (SYS_FUNC(semtimedop)): Likewise.
+	* ipc_shm.c (SYS_FUNC(shmget)): Likewise.
+	* xlat/ipc_private.in: New file.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	mount: use print_xlat for printing MS_MGC_VAL.
+	* mount.c (SYS_FUNC(mount)): Use print_xlat for printing MS_MGC_VAL
+	named constant.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Introduce print_xlat and print_xlat_ex.
+	print_xlat_ex prints a named constant in accordance with xlat style
+	provided, print_xlat is a thin wrapper around print_xlat_ex that passes
+	stringified constant name as a string and XLAT_STYLE_DEFAULT as a style.
+
+	* defs.h (print_xlat_ex): New function prototype.
+	(print_xlat): New macro, a thin wrapper around print_xlat_ex.
+	* xlat.c (print_xlat_ex): New function.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Introduce XLAT_STYLE_DEFAULT.
+	This will be needed later, with the introduction of user-configurable
+	xlat style setting (stored in xlat_verbosity variable).
+
+	* defs.h (XLAT_STYLE_VERBOSITY_MASK): New macro constant.
+	(enum xlat_style) <XLAT_STYLE_DEFAULT>: New enumeration entity.
+	(xlat_verbosity): New external declaration.
+	(printxvals, printxval_searchn, printxval_search_ex, sprintxval,
+	sprintflags, printflags64): Use XLAT_STYLE_DEFAULT instead of
+	XLAT_STYLE_ABBREV.
+	* strace.c (xlat_verbosity): New variable.
+	* xlat.c (get_xlat_style): New function.
+	(printxvals_ex, sprintxval_ex, printxval_searchn_ex, sprintflags_ex,
+	printflags_ex): Use it.
+
+2018-04-12  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Introduce xlat verbosity styles.
+	* defs.h (printxvals_ex): Rename from printxvals, add style argument.
+	(enum xlat_style): New enumeration.
+	(printxvals): New macro, a wrapper for printxvals_ex.
+	(printxval_searchn_ex): Rename from printxval_searchn, add style
+	argument.
+	(printxval_searchn): New macro, a wrapper for printxval_searchn_ex.
+	(printxval_search_ex): New macro, a wrapper for printxval_searchn_ex.
+	(sprintxval_ex): Rename from sprintxval, add style argument.
+	(sprintxval): New macro, a wrapper for sprintxval_ex.
+	(printflags_ex): Add style argument.
+	(sprintflags_ex): Rename from sprintflags, add style argument.
+	(sprintflags): New macro, a wrapper for sprintflags_ex.
+	(printflags64): Pass XLAT_STYLE_ABBREV as a style in printflags_ex call.
+	* netlink.c (decode_nlmsg_flags): Pass XLAT_STYLE_ABBREV as a style in
+	printflags_ex call.
+	* xlat.c (printxvals_ex): Rename from printxvals, add style argument,
+	handle it.
+	(sprintxval_ex): Rename from sprintxval, add style argument, handle it.
+	(printxval_searchn_ex): Rename from printxval_searchn, add style
+	argument, handle it.
+	(sprintflags_ex): Rename from sprintflags, add style argument,
+	handle it.
+	(printflags_ex): Add style argument, handle it.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+	References: https://github.com/strace/strace/issues/27
+
+2018-04-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: robustify signal delivery test against kernel bugs.
+	Recent kernel siginfo changes, namely, v4.14-rc1~60^2^2~1,
+	v4.16-rc1~159^2~37, and v4.16-rc1~159^2~39, introduced ABI regressions
+	that render the whole siginfo interface unreliable.
+
+	Looks like the kernel side is not eager to fix the breakage,
+	so here is a workaround.
+
+	* tests/signal_receive.c (s_sig, s_code, s_pid, s_uid): New volatile
+	variables.
+	(handler): Add siginfo_t parameter, save siginfo_t fields.
+	(sig_print): Remove.
+	(main): Rewrite.  Use variables saved by handler to print expected
+	siginfo output. Print diagnostics in case of siginfo mismatch.
+	* strace.spec.in (%check): Extract the diagnostics.
+
+	Closes: https://github.com/strace/strace/issues/21
+
+2018-04-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Lift experimental status from stack tracing feature.
+	* strace.1.in (.SH OPTIONS) <.B \-k>: Remove " (experimental)".
+	* strace.c (usage) [ENABLE_STACKTRACE]: Likewise.
+
+2018-04-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Enable stack tracing in packages on all architectures.
+	The stack tracing feature used to be enabled in packages on x86_64 only.
+	This change enables -k option on all architectures.
+
+	* debian/control (Build-Depends) [!amd64]: Add pkg-config, libdw-dev,
+	and libiberty-dev.
+	* strace.spec.in (BuildRequires) [!x86_64]: Add
+	%buildrequires_stacktrace.
+
+2018-04-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Use libdw-based unwinder in ci and packages.
+	* ci/install-dependencies.sh (common_packages): Add pkg-config,
+	replace libunwind8-dev with libdw-dev.
+	* debian/control (Build-Depends) [amd64]: Add pkg-config,
+	replace libunwind-dev with libdw-dev.
+	* debian/rules (build-udeb/Makefile): Replace --without-libunwind
+	with --without-stacktrace.
+	* strace.spec.in (buildrequires_libunwind_devel): Rename
+	to buildrequires_stacktrace, replace libunwind-devel with
+	either elfutils-devel or libdw-devel.
+
+	tests: skip -k tests on unsupported architectures.
+	* tests/strace-k.test: When actual strace -k output doesn't match the
+	expected output because of limited architecture support, skip the test
+	on architectures that are not currently supported by libdw.
+
+2018-04-11  Masatake YAMATO  <yamato@redhat.com>
+
+	unwind: add libdw as an unwinder.
+	Implement alternative libdw-based unwinder for stack tracing.
+	Add --with-libdw configure option to control whether libdw can be used
+	as an unwinder.
+
+	* m4/st_libdw.m4: New file.
+	* m4/st_stacktrace.m4 (st_STACKTRACE): Invoke st_ARG_LIBDW and st_LIBDW,
+	check for mutually exclusive configure options,
+	(AM_CONDITIONAL): Add USE_LIBDW.
+	* unwind-libdw.c: New file.
+	* Makefile.am [USE_LIBDW] (strace_SOURCES): Append unwind-libdw.c.
+	[USE_LIBDW] (strace_CPPFLAGS): Append $(libdw_CPPFLAGS).
+	[USE_LIBDW] (strace_CFLAGS): Append $(libdw_CFLAGS).
+	[USE_LIBDW] (strace_LDFLAGS): Append $(libdw_LDFLAGS).
+	[USE_LIBDW] (strace_LDADD): Append $(libdw_LIBS).
+	* NEWS: Mention this improvement.
+
+	Closes: https://github.com/strace/strace/issues/12
+	Closes: https://github.com/strace/strace/issues/13
+	Co-Authored-by: Mark Wielaard <mjw@redhat.com>
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: check corner cases of udev_monitor_netlink_header decoding.
+	* tests/netlink_kobject_uevent.c (test_nlmsg_type_kernel): Create
+	a tail-allocated udev_monitor_netlink_header object and pass it
+	to sys_send.
+	(test_nlmsg_type_udev): Likewise.  Check decoding of
+	udev_monitor_netlink_header object that ends in unmapped memory region.
+
+2018-04-11  Harsha Sharma  <harshasharmaiitr@gmail.com>
+
+	tests: check decoding of udev_monitor_netlink_header.
+	* tests/netlink_kobject_uevent.c: Include <string.h>, <arpa/inet.h>,
+	and "netlink_kobject_uevent.h".
+	(test_nlmsg_type_udev, test_nlmsg_type_kernel): New functions.
+	(main): Use them.
+
+2018-04-11  Harsha Sharma  <harshasharmaiitr@gmail.com>
+
+	netlink: decode libudev netlink header.
+	* defs.h (decode_netlink_kobject_uevent): New prototype.
+	* netlink.c (decode_netlink): Decode family kobject_uevent.
+	* netlink_kobject_uevent.h: New file.
+	* netlink_kobject_uevent.c: Likewise.
+	* Makefile.am (strace_SOURCES): Add them.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-11  Harsha Sharma  <harshasharmaiitr@gmail.com>
+
+	tests: check basic decoding of PTP_* ioctl commands.
+	* tests/ioctl_ptp.c: New file.
+	* tests/gen_tests.in (ioctl_ptp): New entry.
+	* tests/pure_executables.list: Add ioctl_ptp.
+	* tests/.gitignore: Likewise.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-10  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: decode BPF_PROG_QUERY command.
+	BPF_PROG_QUERY was introduced in Linux commit v4.15-rc1~84^2~558^2~6.
+
+	* xlat/bpf_commands.in (BPF_PROG_QUERY): New constant.
+	* xlat/bpf_query_flags.in: New file.
+	* bpf.c: Include it.
+	(DECL_BPF_CMD_DECODER): Add priv argument for passing tcb private data.
+	(BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)): New function.
+	(SYS_FUNC(bpf)) <bpf_cmd_decoders>: Add BPF_PROG_QUERY entry.
+	(SYS_FUNC(bpf)): Fetch buf on entering and exiting, pass buf on exiting,
+	retrieve private data on exiting, pass it to decoder as well, explicitly
+	rework rc handling logic for size argument printing.
+	* bpf_attr.h (struct BPF_PROG_QUERY_struct): New structure declaration.
+	(BPF_PROG_QUERY_struct_size, expected_BPF_PROG_QUERY_struct_size): New
+	macro.
+	* tests/bpf.c: Add checks for BPF_PROG_QUERY command.
+
+2018-04-10  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Make print_uint64 from btrfs.c globally available.
+	And rename it to print_uint64_array_member to make the name sensible
+	without additional context.
+
+	* defs.h (print_uint64_array_member): New function prototype.
+	* btrfs.c (print_uint64): Move...
+	* util.c (print_uint64_array_member): ...here, drop "static" qualifier.
+
+2018-04-10  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Introduce umoven_or_printaddr64* functions.
+	Counterparts for umoven_or_printaddr/umoven_or_printaddr_ignore_syserror
+	that always print 64 bits of addr (as this is needed in bpf and btrfs
+	decoders).
+
+	* util.c (umoven_or_printaddr64): Rename from umoven_or_printaddr,
+	change addr argument type to uint64_t, call printaddr64 instead of
+	printaddr.
+	(umoven_or_printaddr64_ignore_syserror): Rename from
+	umoven_or_printaddr_ignore_syserror, change addr argument type to
+	uint64_t, call printaddr64 instead of printaddr.
+	* defs.h (umoven_or_printaddr64): Rename from umoven_or_printaddr,
+	change addr argument type to uint64_t.
+	(umoven_or_printaddr64_ignore_syserror): Rename from
+	umoven_or_printaddr_ignore_syserror, change addr argument type to
+	uint64_t.
+	(umove_or_printaddr64): New macro, a wrapper for umoven_or_printaddr64.
+	(umoven_or_printaddr): New function, a wrapper for
+	umoven_or_printaddr64.
+	(umoven_or_printaddr_ignore_syserror): New function, a wrapper for
+	umoven_or_printaddr64_ignore_syserror.
+
+2018-04-10  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf_filter.c: add support for decoding eBPF instruction codes.
+	* bpf_filter.c (print_bpf_filter_code): Add extended argument, remove
+	static qualifier.  Add support for decoding eBPF instruction code.
+	* defs.h (print_bpf_filter_code): New declaration.
+	* xlat/ebpf_class.in: New file.
+	* xlat/ebpf_mode.in: Likewise.
+	* xlat/ebpf_op_alu.in: Likewise.
+	* xlat/ebpf_op_jmp.in: Likewise.
+	* xlat/ebpf_size.in: Likewise.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	unwind: prepare configure subsystem for alternative unwinders.
+	Introduce --enable-stacktrace configure option to control whether
+	-k option support is compiled in, --with-libunwind option remains
+	available to control whether libunwind can be used as an unwinder.
+
+	* m4/st_demangle.m4: New file.
+	* m4/st_libunwind.m4: Likewise.
+	* m4/st_stacktrace.m4: Likewise.
+	* configure.ac: Replace all libunwind and libiberty checks
+	with a single st_STACKTRACE invocation.
+	* Makefile.am: Conditionalize checks for USE_LIBUNWIND and USE_DEMANGLE
+	on ENABLE_STACKTRACE.
+	[ENABLE_STACKTRACE] (strace_SOURCES): Append unwind.c and unwind.h.
+	* strace.1.in: Replace libunwind with an unwinder-agnostic wording.
+	* defs.h: Replace USE_LIBUNWIND with ENABLE_STACKTRACE.
+	* strace.c: Likewise.
+	(print_version): Print stack-trace instead of stack-unwind.
+	* syscall.c: Replace USE_LIBUNWIND with ENABLE_STACKTRACE.
+	* tests/Makefile.am: Likewise.  Replace LIBUNWIND_TESTS
+	with STACKTRACE_TESTS.
+	* tests/strace-V.test: Update expected output.
+
+2018-04-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: implement decoding of prog_name and prog_ifindex fields.
+	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)): Add support for decoding
+	of prog_name (introduced in Linux commit v4.15-rc1~84^2~605^2~4) and
+	prog_ifindex (introduced as prog_target_ifindex in v4.15-rc1~84^2~127^2~13,
+	renamed in v4.15-rc1~15^2~5^2~3^2~7).
+	* bpf_attr.h [!BPF_OBJ_NAME_LEN] (BPF_OBJ_NAME_LEN): New macro constant.
+	[BPF_OBJ_NAME_LEN]: Check that BPF_OBJ_NAME_LEN is equal to 16.
+	(struct BPF_PROG_LOAD_struct): Add prog_name and prog_ifindex fields.
+	(BPF_PROG_LOAD_struct_size, expected_BPF_PROG_LOAD_struct_size): Update.
+	* tests/bpf.c (init_BPF_PROG_LOAD_attr): Rename
+	to init_BPF_PROG_LOAD_attr3.
+	(print_BPF_PROG_LOAD_attr): Rename to print_BPF_PROG_LOAD_attr3.
+	(init_BPF_PROG_LOAD_attr4, print_BPF_PROG_LOAD_attr4): New functions.
+	(BPF_PROG_LOAD_checks): Check new decoding features.
+
+2018-04-08  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	bpf: add support for array fields.
+	* gen_bpf_attr_check.sh: Ignore field array size definition.
+	* m4/gen_bpf_attr_m4.sh (filter_entries): Likewise.
+
+	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
+
+2018-04-07  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: robustify strace -k tests.
+	Allow __getpid as an alternative name for getpid,
+	allow __kernel_vsyscall after getpid.
+
+	* tests/strace-k.expected: New file.
+	* tests/strace-k-demangle.expected: Likewise.
+	* tests/Makefile.am (EXTRA_DIST): Add them.
+	* tests/strace-k-demangle.test (expected): Remove.
+	* tests/strace-k.test: Likewise.  Use grep to check the output.
+
+2018-04-07  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	ipc_msg: sign extend msgtyp in m32 personality.
+	msgtyp has to be treated as a signed type all the way from fetching
+	to printing.
+
+	* ipc_msg.c (fetch_msgrcv_args): Sign extend msgtyp when fetching.
+
 2018-04-05  Dmitry V. Levin  <ldv@altlinux.org>
 
+	strace.spec.in: update Source URL.
+	* strace.spec.in (Source): Change to https://strace.io/files/.
+
+	debian: enable mpers support for ppc64el and s390x.
+	* debian/control (Build-Depends) [ppc64el, s390x]: Add gcc-multilib.
+
+	Post-release administrivia.
+	* NEWS: Add a header line for the next release.
+	* debian/changelog.in: Add a changelog entry for 4.22-1.
+	* strace.spec.in: Likewise.
+
 	Prepare for 4.22 release.
 	* NEWS: Update for 4.22 release.
 
diff --git a/Makefile b/Makefile
index f6dbb59..c148798 100644
--- a/Makefile
+++ b/Makefile
@@ -147,28 +147,37 @@
 	$(top_srcdir)/debian/changelog.in depcomp AUTHORS COPYING \
 	INSTALL NEWS README compile config.guess config.sub install-sh \
 	missing
-#am__append_1 = unwind.c unwind.h unwind-libunwind.c
-#am__append_2 = $(libunwind_CPPFLAGS)
-#am__append_3 = $(libunwind_LDFLAGS)
-#am__append_4 = $(libunwind_LIBS)
-##am__append_5 = $(libiberty_CPPFLAGS)
-##am__append_6 = $(libiberty_LDFLAGS)
-##am__append_7 = $(libiberty_LIBS)
-am__append_8 = libmpers-m32.a
-am__append_9 = libmpers-m32.a
-am__append_10 = $(mpers_m32_targets)
-am__append_11 = $(mpers_m32_targets)
-#am__append_12 = libmpers-mx32.a
-#am__append_13 = libmpers-mx32.a
-#am__append_14 = $(mpers_mx32_targets)
-#am__append_15 = $(mpers_mx32_targets)
+#am__append_1 = unwind.c unwind.h
+##am__append_2 = unwind-libdw.c
+##am__append_3 = $(libdw_CPPFLAGS)
+##am__append_4 = $(libdw_CFLAGS)
+##am__append_5 = $(libdw_LDFLAGS)
+##am__append_6 = $(libdw_LIBS)
+##am__append_7 = unwind-libunwind.c
+##am__append_8 = $(libunwind_CPPFLAGS)
+##am__append_9 = $(libunwind_LDFLAGS)
+##am__append_10 = $(libunwind_LIBS)
+##am__append_11 = $(libiberty_CPPFLAGS)
+##am__append_12 = $(libiberty_LDFLAGS)
+##am__append_13 = $(libiberty_LIBS)
+am__append_14 = libmpers-m32.a
+am__append_15 = libmpers-m32.a
+am__append_16 = $(mpers_m32_targets)
+am__append_17 = $(mpers_m32_targets)
+#am__append_18 = libmpers-mx32.a
+#am__append_19 = libmpers-mx32.a
+#am__append_20 = $(mpers_mx32_targets)
+#am__append_21 = $(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/bpf_attr.m4 $(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/st_demangle.m4 $(top_srcdir)/m4/st_libdw.m4 \
+	$(top_srcdir)/m4/st_libunwind.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
+	$(top_srcdir)/m4/st_stacktrace.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) \
@@ -194,12 +203,12 @@
 	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
+	ipc_msgctl.c ipc_shmctl.c loop.c mtd.c perf_ioctl.c \
+	print_aio_sigset.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
 am__objects_1 = libmpers_m32_a-block.$(OBJEXT) \
 	libmpers_m32_a-btrfs.$(OBJEXT) libmpers_m32_a-dirent.$(OBJEXT) \
 	libmpers_m32_a-evdev_mpers.$(OBJEXT) \
@@ -215,6 +224,8 @@
 	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-perf_ioctl.$(OBJEXT) \
+	libmpers_m32_a-print_aio_sigset.$(OBJEXT) \
 	libmpers_m32_a-print_group_req.$(OBJEXT) \
 	libmpers_m32_a-print_mq_attr.$(OBJEXT) \
 	libmpers_m32_a-print_msgbuf.$(OBJEXT) \
@@ -241,12 +252,12 @@
 	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
+	ipc_msgctl.c ipc_shmctl.c loop.c mtd.c perf_ioctl.c \
+	print_aio_sigset.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
 am__objects_2 = libmpers_mx32_a-block.$(OBJEXT) \
 	libmpers_mx32_a-btrfs.$(OBJEXT) \
 	libmpers_mx32_a-dirent.$(OBJEXT) \
@@ -263,6 +274,8 @@
 	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-perf_ioctl.$(OBJEXT) \
+	libmpers_mx32_a-print_aio_sigset.$(OBJEXT) \
 	libmpers_mx32_a-print_group_req.$(OBJEXT) \
 	libmpers_mx32_a-print_mq_attr.$(OBJEXT) \
 	libmpers_mx32_a-print_msgbuf.$(OBJEXT) \
@@ -291,6 +304,7 @@
 	libstrace_a-fetch_indirect_syscall_args.$(OBJEXT) \
 	libstrace_a-fstatfs.$(OBJEXT) libstrace_a-fstatfs64.$(OBJEXT) \
 	libstrace_a-getpagesize.$(OBJEXT) libstrace_a-ipc.$(OBJEXT) \
+	libstrace_a-mmap_cache.$(OBJEXT) \
 	libstrace_a-sigreturn.$(OBJEXT) \
 	libstrace_a-socketcall.$(OBJEXT) libstrace_a-statfs.$(OBJEXT) \
 	libstrace_a-statfs64.$(OBJEXT) \
@@ -309,39 +323,42 @@
 	copy_file_range.c count.c defs.h delay.c delay.h desc.c \
 	dirent.c dirent64.c dm.c dyxlat.c empty.h epoll.c \
 	error_prints.c error_prints.h evdev.c evdev_mpers.c eventfd.c \
-	execve.c fadvise.c fallocate.c fanotify.c fchownat.c fcntl.c \
-	fetch_bpf_fprog.c fetch_struct_flock.c \
+	execve.c f_owner_ex.h 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 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 kvm.c largefile_wrappers.h ldt.c \
-	link.c linux/asm_stat.h linux/x32/asm_stat.h \
+	getcwd.c getrandom.c hdio.c hostname.c inotify.c \
+	inotify_ioctl.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 kvm.c largefile_wrappers.h ldt.c link.c \
+	linux/asm_stat.h linux/linux/signal.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 \
-	mmap_cache.c mmap_cache.h 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_netfilter.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 retval.c \
-	retval.h riscv.c rt_sigframe.c rt_sigreturn.c rtc.c \
-	rtnl_addr.c rtnl_addrlabel.c rtnl_dcb.c rtnl_link.c rtnl_mdb.c \
+	mmap_notify.c mmap_notify.h 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_kobject_uevent.c netlink_kobject_uevent.h \
+	netlink_sock_diag.h netlink_inet_diag.c netlink_netfilter.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 perf_ioctl.c personality.c pkeys.c poll.c \
+	prctl.c print_aio_sigset.c print_dev_t.c print_group_req.c \
+	print_fields.h print_ifindex.c print_mac.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 retval.c retval.h \
+	riscv.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 s390.c \
 	sched.c sched_attr.h scsi.c seccomp.c sendfile.c sg_io_v3.c \
@@ -355,10 +372,12 @@
 	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 xmalloc.h xstring.h \
-	bpf_attr_check.c unwind.c unwind.h unwind-libunwind.c
+	bpf_attr_check.c unwind.c unwind.h unwind-libdw.c \
+	unwind-libunwind.c
 am__objects_3 = strace-bpf_attr_check.$(OBJEXT)
-#am__objects_4 = strace-unwind.$(OBJEXT) \
-#	strace-unwind-libunwind.$(OBJEXT)
+#am__objects_4 = strace-unwind.$(OBJEXT)
+##am__objects_5 = strace-unwind-libdw.$(OBJEXT)
+##am__objects_6 = strace-unwind-libunwind.$(OBJEXT)
 am_strace_OBJECTS = strace-access.$(OBJEXT) strace-affinity.$(OBJEXT) \
 	strace-aio.$(OBJEXT) strace-alpha.$(OBJEXT) \
 	strace-basic_filters.$(OBJEXT) strace-bind.$(OBJEXT) \
@@ -392,23 +411,25 @@
 	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-kvm.$(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-mmap_cache.$(OBJEXT) \
-	strace-mmsghdr.$(OBJEXT) strace-mount.$(OBJEXT) \
-	strace-mq.$(OBJEXT) strace-msghdr.$(OBJEXT) \
-	strace-mtd.$(OBJEXT) strace-net.$(OBJEXT) \
-	strace-netlink.$(OBJEXT) strace-netlink_crypto.$(OBJEXT) \
+	strace-inotify.$(OBJEXT) strace-inotify_ioctl.$(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-kvm.$(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-mmap_notify.$(OBJEXT) strace-mmsghdr.$(OBJEXT) \
+	strace-mount.$(OBJEXT) strace-mq.$(OBJEXT) \
+	strace-msghdr.$(OBJEXT) strace-mtd.$(OBJEXT) \
+	strace-net.$(OBJEXT) strace-netlink.$(OBJEXT) \
+	strace-netlink_crypto.$(OBJEXT) \
+	strace-netlink_kobject_uevent.$(OBJEXT) \
 	strace-netlink_inet_diag.$(OBJEXT) \
 	strace-netlink_netfilter.$(OBJEXT) \
 	strace-netlink_netlink_diag.$(OBJEXT) \
@@ -422,11 +443,12 @@
 	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-perf_ioctl.$(OBJEXT) strace-personality.$(OBJEXT) \
+	strace-pkeys.$(OBJEXT) strace-poll.$(OBJEXT) \
+	strace-prctl.$(OBJEXT) strace-print_aio_sigset.$(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_ifindex.$(OBJEXT) strace-print_mac.$(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) \
@@ -471,16 +493,18 @@
 	strace-utimes.$(OBJEXT) strace-v4l2.$(OBJEXT) \
 	strace-wait.$(OBJEXT) strace-xattr.$(OBJEXT) \
 	strace-xlat.$(OBJEXT) strace-xmalloc.$(OBJEXT) \
-	$(am__objects_3) $(am__objects_4)
+	$(am__objects_3) $(am__objects_4) $(am__objects_5) \
+	$(am__objects_6)
 strace_OBJECTS = $(am_strace_OBJECTS)
 am__DEPENDENCIES_1 =
-#am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
-##am__DEPENDENCIES_3 =  \
+##am__DEPENDENCIES_2 =  \
 ##	$(am__DEPENDENCIES_1)
+##am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
+##am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
 strace_DEPENDENCIES = libstrace.a $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
-	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) $(am__append_8) \
-	$(am__append_12)
+	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
+	$(am__DEPENDENCIES_1) $(am__append_14) $(am__append_18)
 strace_LINK = $(CCLD) $(strace_CFLAGS) $(CFLAGS) $(strace_LDFLAGS) \
 	$(LDFLAGS) -o $@
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
@@ -640,12 +664,12 @@
 am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
   | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
-ACLOCAL = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing aclocal-1.14
+ACLOCAL = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing aclocal-1.14
 AMTAR = $${TAR-tar}
 AM_DEFAULT_VERBOSITY = 1
-AUTOCONF = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing autoheader
-AUTOMAKE = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing automake-1.14
+AUTOCONF = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing autoconf
+AUTOHEADER = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing autoheader
+AUTOMAKE = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing automake-1.14
 AWK = gawk
 BUILD_EXEEXT = 
 BUILD_OBJEXT = 
@@ -666,7 +690,7 @@
 CPPFLAGS_FOR_BUILD = 
 CPP_FOR_BUILD = gcc -E
 CYGPATH_W = echo
-DEB_CHANGELOGTIME = Thu, 14 Jun 2018 16:29:09 -0700
+DEB_CHANGELOGTIME = Fri, 15 Jun 2018 17:54:18 +0000
 DEFS = -DHAVE_CONFIG_H
 DEPDIR = .deps
 ECHO_C = 
@@ -693,23 +717,23 @@
 LIBS = 
 LTLIBOBJS = 
 MAINT = #
-MAKEINFO = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing makeinfo
-MANPAGE_DATE = 2018-04-04
+MAKEINFO = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing makeinfo
+MANPAGE_DATE = 2018-06-13
 MIPS_ABI = 
 MKDIR_P = /bin/mkdir -p
 OBJEXT = o
 PACKAGE = strace
 PACKAGE_BUGREPORT = strace-devel@lists.strace.io
 PACKAGE_NAME = strace
-PACKAGE_STRING = strace 4.22
+PACKAGE_STRING = strace 4.23
 PACKAGE_TARNAME = strace
 PACKAGE_URL = https://strace.io
-PACKAGE_VERSION = 4.22
+PACKAGE_VERSION = 4.23
 PATH_SEPARATOR = :
 PERL = /usr/bin/perl
 RANLIB = aarch64-linux-android-ranlib
 READELF = aarch64-linux-android-readelf
-RPM_CHANGELOGTIME = Thu Jun 14 2018
+RPM_CHANGELOGTIME = Fri Jun 15 2018
 SED = /bin/sed
 SET_MAKE = 
 SHELL = /bin/sh
@@ -718,13 +742,13 @@
 STRIP = aarch64-linux-android-strip
 VALGRIND = valgrind
 VALGRIND_ENABLED = yes
-VERSION = 4.22
+VERSION = 4.23
 WARN_CFLAGS =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wnested-externs -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
 WARN_CFLAGS_FOR_BUILD =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Wimplicit-fallthrough=5 -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
-abs_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
-abs_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
-abs_top_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
-abs_top_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
+abs_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
+abs_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
+abs_top_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
+abs_top_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
 ac_ct_CC = 
 ac_ct_CC_FOR_BUILD = gcc
 am__include = include
@@ -760,8 +784,12 @@
 htmldir = ${docdir}
 includedir = ${prefix}/include
 infodir = ${datarootdir}/info
-install_sh = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/install-sh
+install_sh = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/install-sh
 libdir = ${exec_prefix}/lib
+libdw_CFLAGS = 
+libdw_CPPFLAGS = 
+libdw_LDFLAGS = 
+libdw_LIBS = 
 libexecdir = ${exec_prefix}/libexec
 libiberty_CPPFLAGS = 
 libiberty_LDFLAGS = 
@@ -814,21 +842,23 @@
 	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/audit_arch.in xlat/baud_options.in xlat/bdaddr_types.in \
+	xlat/blkpg_ops.in xlat/bluetooth_l2_cid.in \
+	xlat/bluetooth_l2_psm.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_file_mode_flags.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/bpf_prog_types.in xlat/bpf_query_flags.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_cont_reading_from_srcdev_mode.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 \
@@ -841,12 +871,15 @@
 	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/cacheflush_scope.in xlat/caif_protocols.in \
+	xlat/can_protocols.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/dm_flags.in xlat/ebpf_class.in xlat/ebpf_mode.in \
+	xlat/ebpf_op_alu.in xlat/ebpf_op_jmp.in xlat/ebpf_regs.in \
+	xlat/ebpf_size.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 \
@@ -857,27 +890,31 @@
 	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/kvm_mem_flags.in \
+	xlat/fan_mark_flags.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/getsock_ip_options.in \
+	xlat/getsock_ipv6_options.in xlat/getsock_options.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/in6_addr_gen_mode.in xlat/inet6_devconf_indices.in \
+	xlat/inet6_if_flags.in xlat/inet_devconf_indices.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/ipc_private.in xlat/ipccalls.in xlat/irda_protocols.in \
+	xlat/isdn_protocols.in xlat/itimer_which.in \
+	xlat/kcm_protocols.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/kvm_mem_flags.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 \
@@ -899,6 +936,7 @@
 	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_sk_meminfo_indices.in \
 	xlat/netlink_socket_flags.in xlat/netlink_states.in \
 	xlat/netlink_types.in xlat/nf_acct_msg_types.in \
 	xlat/nf_cthelper_msg_types.in \
@@ -907,12 +945,13 @@
 	xlat/nf_ipset_msg_types.in xlat/nf_nft_compat_msg_types.in \
 	xlat/nf_nftables_msg_types.in xlat/nf_osf_msg_types.in \
 	xlat/nf_queue_msg_types.in xlat/nf_ulog_msg_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/nfc_protocols.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/numa_node.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 \
@@ -920,13 +959,17 @@
 	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/perf_hw_id.in xlat/perf_ioctl_cmds.in \
+	xlat/perf_ioctl_flags.in xlat/perf_sw_ids.in \
+	xlat/perf_type_id.in xlat/personality_flags.in \
+	xlat/personality_types.in xlat/phonet_protocols.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_sve_vl_flags.in xlat/pr_tsc.in \
-	xlat/pr_unalign_flags.in xlat/prctl_options.in \
+	xlat/pr_set_mm.in xlat/pr_spec_cmds.in \
+	xlat/pr_spec_get_store_bypass_flags.in \
+	xlat/pr_spec_set_store_bypass_flags.in xlat/pr_sve_vl_flags.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 \
@@ -938,11 +981,16 @@
 	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_af_spec_inet6_attrs.in \
+	xlat/rtnl_ifla_af_spec_inet_attrs.in \
 	xlat/rtnl_ifla_brport_attrs.in xlat/rtnl_ifla_events.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_mdba_mdb_attrs.in xlat/rtnl_mdba_mdb_eattr_attrs.in \
+	xlat/rtnl_ifla_info_attrs.in \
+	xlat/rtnl_ifla_info_data_bridge_attrs.in \
+	xlat/rtnl_ifla_info_data_tun_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_mdba_mdb_attrs.in \
+	xlat/rtnl_mdba_mdb_eattr_attrs.in \
 	xlat/rtnl_mdba_mdb_entry_attrs.in \
 	xlat/rtnl_mdba_router_attrs.in \
 	xlat/rtnl_mdba_router_pattr_attrs.in xlat/rtnl_neigh_attrs.in \
@@ -960,31 +1008,42 @@
 	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/setsock_ip_options.in xlat/setsock_ipv6_options.in \
+	xlat/setsock_options.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/skf_off.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/socknetlinkoptions.in xlat/sockoptions.in \
-	xlat/sockpacketoptions.in xlat/sockrawoptions.in \
-	xlat/socksctpoptions.in xlat/socktcpoptions.in \
-	xlat/socktypes.in xlat/sparc_kern_features.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/smc_link_group_roles.in xlat/smc_protocols.in \
+	xlat/smc_states.in xlat/snmp_icmp6_stats.in \
+	xlat/snmp_ip_stats.in xlat/sock_alg_options.in \
+	xlat/sock_bluetooth_options.in xlat/sock_caif_options.in \
+	xlat/sock_dccp_options.in xlat/sock_ip_options.in \
+	xlat/sock_ipv6_options.in xlat/sock_ipx_options.in \
+	xlat/sock_irda_options.in xlat/sock_iucv_options.in \
+	xlat/sock_kcm_options.in xlat/sock_llc_options.in \
+	xlat/sock_netlink_options.in xlat/sock_nfcllcp_options.in \
+	xlat/sock_options.in xlat/sock_packet_options.in \
+	xlat/sock_pnp_options.in xlat/sock_pppol2tp_options.in \
+	xlat/sock_raw_options.in xlat/sock_rds_options.in \
+	xlat/sock_rxrpc_options.in xlat/sock_sctp_options.in \
+	xlat/sock_tcp_options.in xlat/sock_tipc_options.in \
+	xlat/sock_tls_options.in xlat/sock_type_flags.in \
+	xlat/sock_udp_options.in xlat/socketcalls.in \
+	xlat/socketlayers.in xlat/socktypes.in \
+	xlat/sparc_kern_features.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 \
@@ -992,17 +1051,18 @@
 	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/tun_device_types.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_control_id_bases.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 \
@@ -1020,18 +1080,22 @@
 	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/baud_options.h xlat/bdaddr_types.h xlat/blkpg_ops.h \
+	xlat/bluetooth_l2_cid.h xlat/bluetooth_l2_psm.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_file_mode_flags.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/bpf_query_flags.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_cont_reading_from_srcdev_mode.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 \
@@ -1043,11 +1107,14 @@
 	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/cacheflush_scope.h xlat/caif_protocols.h \
+	xlat/can_protocols.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/ebpf_class.h xlat/ebpf_mode.h xlat/ebpf_op_alu.h \
+	xlat/ebpf_op_jmp.h xlat/ebpf_regs.h xlat/ebpf_size.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 \
@@ -1057,23 +1124,27 @@
 	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/fan_mark_flags.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/getrandom_flags.h xlat/getsock_ip_options.h \
+	xlat/getsock_ipv6_options.h xlat/getsock_options.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/in6_addr_gen_mode.h xlat/inet6_devconf_indices.h \
+	xlat/inet6_if_flags.h xlat/inet_devconf_indices.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/ipc_private.h xlat/ipccalls.h xlat/irda_protocols.h \
+	xlat/isdn_protocols.h xlat/itimer_which.h xlat/kcm_protocols.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 \
@@ -1098,34 +1169,38 @@
 	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/nf_acct_msg_types.h \
-	xlat/nf_cthelper_msg_types.h xlat/nf_ctnetlink_exp_msg_types.h \
+	xlat/netlink_sk_meminfo_indices.h xlat/netlink_socket_flags.h \
+	xlat/netlink_states.h xlat/netlink_types.h \
+	xlat/nf_acct_msg_types.h xlat/nf_cthelper_msg_types.h \
+	xlat/nf_ctnetlink_exp_msg_types.h \
 	xlat/nf_ctnetlink_msg_types.h xlat/nf_cttimeout_msg_types.h \
 	xlat/nf_ipset_msg_types.h xlat/nf_nft_compat_msg_types.h \
 	xlat/nf_nftables_msg_types.h xlat/nf_osf_msg_types.h \
 	xlat/nf_queue_msg_types.h xlat/nf_ulog_msg_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/nfc_protocols.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/numa_node.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_ioctl_cmds.h \
+	xlat/perf_ioctl_flags.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_sve_vl_flags.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/phonet_protocols.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_spec_cmds.h \
+	xlat/pr_spec_get_store_bypass_flags.h \
+	xlat/pr_spec_set_store_bypass_flags.h xlat/pr_sve_vl_flags.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 \
@@ -1135,11 +1210,16 @@
 	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_af_spec_inet6_attrs.h \
+	xlat/rtnl_ifla_af_spec_inet_attrs.h \
 	xlat/rtnl_ifla_brport_attrs.h xlat/rtnl_ifla_events.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_mdba_mdb_attrs.h xlat/rtnl_mdba_mdb_eattr_attrs.h \
+	xlat/rtnl_ifla_info_attrs.h \
+	xlat/rtnl_ifla_info_data_bridge_attrs.h \
+	xlat/rtnl_ifla_info_data_tun_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_mdba_mdb_attrs.h \
+	xlat/rtnl_mdba_mdb_eattr_attrs.h \
 	xlat/rtnl_mdba_mdb_entry_attrs.h xlat/rtnl_mdba_router_attrs.h \
 	xlat/rtnl_mdba_router_pattr_attrs.h xlat/rtnl_neigh_attrs.h \
 	xlat/rtnl_neightbl_attrs.h xlat/rtnl_neightbl_parms_attrs.h \
@@ -1156,24 +1236,35 @@
 	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/setsock_ip_options.h xlat/setsock_ipv6_options.h \
+	xlat/setsock_options.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/socknetlinkoptions.h xlat/sockoptions.h \
-	xlat/sockpacketoptions.h xlat/sockrawoptions.h \
-	xlat/socksctpoptions.h xlat/socktcpoptions.h xlat/socktypes.h \
+	xlat/sigtrap_codes.h xlat/skf_ad.h xlat/skf_off.h \
+	xlat/smc_diag_attrs.h xlat/smc_diag_extended_flags.h \
+	xlat/smc_link_group_roles.h xlat/smc_protocols.h \
+	xlat/smc_states.h xlat/snmp_icmp6_stats.h xlat/snmp_ip_stats.h \
+	xlat/sock_alg_options.h xlat/sock_bluetooth_options.h \
+	xlat/sock_caif_options.h xlat/sock_dccp_options.h \
+	xlat/sock_ip_options.h xlat/sock_ipv6_options.h \
+	xlat/sock_ipx_options.h xlat/sock_irda_options.h \
+	xlat/sock_iucv_options.h xlat/sock_kcm_options.h \
+	xlat/sock_llc_options.h xlat/sock_netlink_options.h \
+	xlat/sock_nfcllcp_options.h xlat/sock_options.h \
+	xlat/sock_packet_options.h xlat/sock_pnp_options.h \
+	xlat/sock_pppol2tp_options.h xlat/sock_raw_options.h \
+	xlat/sock_rds_options.h xlat/sock_rxrpc_options.h \
+	xlat/sock_sctp_options.h xlat/sock_tcp_options.h \
+	xlat/sock_tipc_options.h xlat/sock_tls_options.h \
+	xlat/sock_type_flags.h xlat/sock_udp_options.h \
+	xlat/socketcalls.h xlat/socketlayers.h xlat/socktypes.h \
 	xlat/sparc_kern_features.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 \
@@ -1185,9 +1276,10 @@
 	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/timerfdflags.h xlat/tun_device_types.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 \
@@ -1195,7 +1287,8 @@
 	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_control_id_bases.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 \
@@ -1207,14 +1300,14 @@
 	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
-strace_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_2) $(am__append_5) \
-	$(CODE_COVERAGE_CPPFLAGS)
-strace_CFLAGS = $(AM_CFLAGS) $(CODE_COVERAGE_CFLAGS)
-strace_LDFLAGS = $(am__append_3) $(am__append_6)
-strace_LDADD = libstrace.a $(clock_LIBS) $(timer_LIBS) $(am__append_4) \
-	$(am__append_7) $(CODE_COVERAGE_LIBS) $(am__append_8) \
-	$(am__append_12)
-noinst_LIBRARIES = libstrace.a $(am__append_9) $(am__append_13)
+strace_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_3) $(am__append_8) \
+	$(am__append_11) $(CODE_COVERAGE_CPPFLAGS)
+strace_CFLAGS = $(AM_CFLAGS) $(am__append_4) $(CODE_COVERAGE_CFLAGS)
+strace_LDFLAGS = $(am__append_5) $(am__append_9) $(am__append_12)
+strace_LDADD = libstrace.a $(clock_LIBS) $(timer_LIBS) $(am__append_6) \
+	$(am__append_10) $(am__append_13) $(CODE_COVERAGE_LIBS) \
+	$(am__append_14) $(am__append_18)
+noinst_LIBRARIES = libstrace.a $(am__append_15) $(am__append_19)
 libstrace_a_CPPFLAGS = $(strace_CPPFLAGS)
 libstrace_a_CFLAGS = $(strace_CFLAGS)
 libstrace_a_SOURCES = \
@@ -1223,6 +1316,8 @@
 	fstatfs64.c \
 	getpagesize.c \
 	ipc.c \
+	mmap_cache.c	\
+	mmap_cache.h	\
 	sigreturn.c	\
 	socketcall.c \
 	statfs.c \
@@ -1240,40 +1335,43 @@
 	caps1.h chdir.c chmod.c clone.c copy_file_range.c count.c \
 	defs.h delay.c delay.h desc.c dirent.c dirent64.c dm.c \
 	dyxlat.c empty.h epoll.c error_prints.c error_prints.h evdev.c \
-	evdev_mpers.c eventfd.c execve.c fadvise.c fallocate.c \
-	fanotify.c fchownat.c fcntl.c fetch_bpf_fprog.c \
+	evdev_mpers.c eventfd.c execve.c f_owner_ex.h 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 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 kvm.c largefile_wrappers.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 mmap_cache.c mmap_cache.h \
-	mmsghdr.c mount.c mpers_type.h mq.c msghdr.c msghdr.h mtd.c \
+	hdio.c hostname.c inotify.c inotify_ioctl.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 kvm.c largefile_wrappers.h ldt.c \
+	link.c linux/asm_stat.h linux/linux/signal.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 mmap_notify.c mmap_notify.h 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_netfilter.c netlink_netlink_diag.c \
+	netlink_crypto.c netlink_kobject_uevent.c \
+	netlink_kobject_uevent.h netlink_sock_diag.h \
+	netlink_inet_diag.c netlink_netfilter.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 retval.c \
-	retval.h riscv.c rt_sigframe.c rt_sigreturn.c rtc.c \
-	rtnl_addr.c rtnl_addrlabel.c rtnl_dcb.c rtnl_link.c rtnl_mdb.c \
+	perf_ioctl.c personality.c pkeys.c poll.c prctl.c \
+	print_aio_sigset.c print_dev_t.c print_group_req.c \
+	print_fields.h print_ifindex.c print_mac.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 retval.c retval.h \
+	riscv.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 s390.c \
 	sched.c sched_attr.h scsi.c seccomp.c sendfile.c sg_io_v3.c \
@@ -1287,7 +1385,8 @@
 	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 xmalloc.h xstring.h \
-	$(strace_SOURCES_check) $(am__append_1)
+	$(strace_SOURCES_check) $(am__append_1) $(am__append_2) \
+	$(am__append_7)
 strace_SOURCES_check = bpf_attr_check.c
 CODE_COVERAGE_BRANCH_COVERAGE = 1
 CODE_COVERAGE_GENHTML_OPTIONS = $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) \
@@ -1335,7 +1434,6 @@
 	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	\
@@ -1348,7 +1446,6 @@
 	linux/aarch64/set_error.c	\
 	linux/aarch64/set_scno.c	\
 	linux/aarch64/shuffle_scno.c	\
-	linux/aarch64/signalent1.h	\
 	linux/aarch64/syscallent.h	\
 	linux/aarch64/syscallent1.h	\
 	linux/alpha/arch_defs_.h	\
@@ -1606,7 +1703,6 @@
 	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	\
@@ -1620,7 +1716,6 @@
 	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	\
@@ -1629,7 +1724,6 @@
 	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	\
@@ -1640,7 +1734,6 @@
 	linux/riscv/raw_syscall.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		\
@@ -1667,7 +1760,6 @@
 	linux/s390x/arch_regs.h		\
 	linux/s390x/arch_rt_sigframe.c	\
 	linux/s390x/arch_sigreturn.c	\
-	linux/s390x/errnoent1.h		\
 	linux/s390x/get_error.c		\
 	linux/s390x/get_scno.c		\
 	linux/s390x/get_syscall_args.c	\
@@ -1679,7 +1771,6 @@
 	linux/s390x/rt_sigframe.h	\
 	linux/s390x/set_error.c		\
 	linux/s390x/set_scno.c		\
-	linux/s390x/signalent1.h	\
 	linux/s390x/syscallent.h	\
 	linux/s390x/syscallent1.h	\
 	linux/s390x/userent.h		\
@@ -1745,7 +1836,6 @@
 	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	\
@@ -1758,7 +1848,6 @@
 	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		\
@@ -1769,7 +1858,6 @@
 	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	\
@@ -1781,7 +1869,6 @@
 	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		\
@@ -1794,7 +1881,6 @@
 	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	\
@@ -1807,7 +1893,6 @@
 	linux/x32/set_error.c		\
 	linux/x32/set_scno.c		\
 	linux/x32/shuffle_scno.c	\
-	linux/x32/signalent1.h		\
 	linux/x32/syscallent.h		\
 	linux/x32/syscallent1.h		\
 	linux/x32/userent.h		\
@@ -1817,8 +1902,6 @@
 	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/get_error.c	\
 	linux/x86_64/get_scno.c		\
 	linux/x86_64/get_syscall_args.c	\
@@ -1835,8 +1918,6 @@
 	linux/x86_64/set_error.c	\
 	linux/x86_64/set_scno.c		\
 	linux/x86_64/shuffle_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	\
@@ -1876,7 +1957,7 @@
 
 syscallent_patterns = $(patsubst %,\%/%,$(syscallent_names))
 syscallent_files = $(filter $(syscallent_patterns),$(EXTRA_DIST))
-today = $(shell date +%Y-%m-%d)
+today = $(shell LC_TIME=C date -u +%Y-%m-%d)
 version_regexp = $(subst .,\.,$(VERSION))
 news_check_regexp = 'Noteworthy changes in release $(version_regexp) ($(today))'
 ioctlsort_CC = $(CC_FOR_BUILD)
@@ -1890,12 +1971,12 @@
 ioctl_redefs_h = $(filter-out ioctl_redefs0.h,$(subst ioctlent,ioctl_redefs,$(ioctlent_h)))
 BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) bpf_attr_check.c \
 	native_printer_decls.h native_printer_defs.h printers.h sen.h \
-	sys_func.h .version scno.h $(am__append_10) $(am__append_14)
+	sys_func.h .version scno.h $(am__append_16) $(am__append_20)
 CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \
 	ioctl_iocdef.h ioctl_iocdef.i bpf_attr_check.c \
 	native_printer_decls.h native_printer_defs.h printers.h sen.h \
-	sys_func.h syscallent.i scno.h $(am__append_11) \
-	$(am__append_15)
+	sys_func.h syscallent.i scno.h $(am__append_17) \
+	$(am__append_21)
 DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h
 SCNO_CPPFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 		$(ARCH_MFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS)
@@ -1905,7 +1986,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_mpers.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 
+mpers_source_files = block.c btrfs.c dirent.c evdev_mpers.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 perf_ioctl.c print_aio_sigset.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))
@@ -2114,6 +2195,8 @@
 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-perf_ioctl.Po
+include ./$(DEPDIR)/libmpers_m32_a-print_aio_sigset.Po
 include ./$(DEPDIR)/libmpers_m32_a-print_group_req.Po
 include ./$(DEPDIR)/libmpers_m32_a-print_mq_attr.Po
 include ./$(DEPDIR)/libmpers_m32_a-print_msgbuf.Po
@@ -2152,6 +2235,8 @@
 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-perf_ioctl.Po
+include ./$(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Po
 include ./$(DEPDIR)/libmpers_mx32_a-print_group_req.Po
 include ./$(DEPDIR)/libmpers_mx32_a-print_mq_attr.Po
 include ./$(DEPDIR)/libmpers_mx32_a-print_msgbuf.Po
@@ -2178,6 +2263,7 @@
 include ./$(DEPDIR)/libstrace_a-fstatfs64.Po
 include ./$(DEPDIR)/libstrace_a-getpagesize.Po
 include ./$(DEPDIR)/libstrace_a-ipc.Po
+include ./$(DEPDIR)/libstrace_a-mmap_cache.Po
 include ./$(DEPDIR)/libstrace_a-sigreturn.Po
 include ./$(DEPDIR)/libstrace_a-socketcall.Po
 include ./$(DEPDIR)/libstrace_a-statfs.Po
@@ -2245,6 +2331,7 @@
 include ./$(DEPDIR)/strace-hdio.Po
 include ./$(DEPDIR)/strace-hostname.Po
 include ./$(DEPDIR)/strace-inotify.Po
+include ./$(DEPDIR)/strace-inotify_ioctl.Po
 include ./$(DEPDIR)/strace-io.Po
 include ./$(DEPDIR)/strace-ioctl.Po
 include ./$(DEPDIR)/strace-ioperm.Po
@@ -2269,7 +2356,7 @@
 include ./$(DEPDIR)/strace-membarrier.Po
 include ./$(DEPDIR)/strace-memfd_create.Po
 include ./$(DEPDIR)/strace-mknod.Po
-include ./$(DEPDIR)/strace-mmap_cache.Po
+include ./$(DEPDIR)/strace-mmap_notify.Po
 include ./$(DEPDIR)/strace-mmsghdr.Po
 include ./$(DEPDIR)/strace-mount.Po
 include ./$(DEPDIR)/strace-mq.Po
@@ -2279,6 +2366,7 @@
 include ./$(DEPDIR)/strace-netlink.Po
 include ./$(DEPDIR)/strace-netlink_crypto.Po
 include ./$(DEPDIR)/strace-netlink_inet_diag.Po
+include ./$(DEPDIR)/strace-netlink_kobject_uevent.Po
 include ./$(DEPDIR)/strace-netlink_netfilter.Po
 include ./$(DEPDIR)/strace-netlink_netlink_diag.Po
 include ./$(DEPDIR)/strace-netlink_packet_diag.Po
@@ -2296,13 +2384,16 @@
 include ./$(DEPDIR)/strace-or1k_atomic.Po
 include ./$(DEPDIR)/strace-pathtrace.Po
 include ./$(DEPDIR)/strace-perf.Po
+include ./$(DEPDIR)/strace-perf_ioctl.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_aio_sigset.Po
 include ./$(DEPDIR)/strace-print_dev_t.Po
 include ./$(DEPDIR)/strace-print_group_req.Po
 include ./$(DEPDIR)/strace-print_ifindex.Po
+include ./$(DEPDIR)/strace-print_mac.Po
 include ./$(DEPDIR)/strace-print_mq_attr.Po
 include ./$(DEPDIR)/strace-print_msgbuf.Po
 include ./$(DEPDIR)/strace-print_sg_req_info.Po
@@ -2382,6 +2473,7 @@
 include ./$(DEPDIR)/strace-umask.Po
 include ./$(DEPDIR)/strace-umount.Po
 include ./$(DEPDIR)/strace-uname.Po
+include ./$(DEPDIR)/strace-unwind-libdw.Po
 include ./$(DEPDIR)/strace-unwind-libunwind.Po
 include ./$(DEPDIR)/strace-unwind.Po
 include ./$(DEPDIR)/strace-userfaultfd.Po
@@ -2647,6 +2739,34 @@
 #	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-perf_ioctl.o: perf_ioctl.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-perf_ioctl.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-perf_ioctl.Tpo -c -o libmpers_m32_a-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-perf_ioctl.Tpo $(DEPDIR)/libmpers_m32_a-perf_ioctl.Po
+#	$(AM_V_CC)source='perf_ioctl.c' object='libmpers_m32_a-perf_ioctl.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-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+
+libmpers_m32_a-perf_ioctl.obj: perf_ioctl.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-perf_ioctl.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-perf_ioctl.Tpo -c -o libmpers_m32_a-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-perf_ioctl.Tpo $(DEPDIR)/libmpers_m32_a-perf_ioctl.Po
+#	$(AM_V_CC)source='perf_ioctl.c' object='libmpers_m32_a-perf_ioctl.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-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+
+libmpers_m32_a-print_aio_sigset.o: print_aio_sigset.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_aio_sigset.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Tpo -c -o libmpers_m32_a-print_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Tpo $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Po
+#	$(AM_V_CC)source='print_aio_sigset.c' object='libmpers_m32_a-print_aio_sigset.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_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+
+libmpers_m32_a-print_aio_sigset.obj: print_aio_sigset.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -MT libmpers_m32_a-print_aio_sigset.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Tpo -c -o libmpers_m32_a-print_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Tpo $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Po
+#	$(AM_V_CC)source='print_aio_sigset.c' object='libmpers_m32_a-print_aio_sigset.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_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.c'; fi`
+
 libmpers_m32_a-print_group_req.o: print_group_req.c
 	$(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_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_group_req.Tpo $(DEPDIR)/libmpers_m32_a-print_group_req.Po
@@ -3179,6 +3299,34 @@
 #	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-perf_ioctl.o: perf_ioctl.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-perf_ioctl.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Tpo -c -o libmpers_mx32_a-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Tpo $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Po
+#	$(AM_V_CC)source='perf_ioctl.c' object='libmpers_mx32_a-perf_ioctl.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-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+
+libmpers_mx32_a-perf_ioctl.obj: perf_ioctl.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-perf_ioctl.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Tpo -c -o libmpers_mx32_a-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Tpo $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Po
+#	$(AM_V_CC)source='perf_ioctl.c' object='libmpers_mx32_a-perf_ioctl.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-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+
+libmpers_mx32_a-print_aio_sigset.o: print_aio_sigset.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_aio_sigset.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Tpo -c -o libmpers_mx32_a-print_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Tpo $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Po
+#	$(AM_V_CC)source='print_aio_sigset.c' object='libmpers_mx32_a-print_aio_sigset.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_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+
+libmpers_mx32_a-print_aio_sigset.obj: print_aio_sigset.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -MT libmpers_mx32_a-print_aio_sigset.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Tpo -c -o libmpers_mx32_a-print_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Tpo $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Po
+#	$(AM_V_CC)source='print_aio_sigset.c' object='libmpers_mx32_a-print_aio_sigset.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_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.c'; fi`
+
 libmpers_mx32_a-print_group_req.o: print_group_req.c
 	$(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_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_group_req.Tpo $(DEPDIR)/libmpers_mx32_a-print_group_req.Po
@@ -3543,6 +3691,20 @@
 #	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-mmap_cache.o: mmap_cache.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-mmap_cache.o -MD -MP -MF $(DEPDIR)/libstrace_a-mmap_cache.Tpo -c -o libstrace_a-mmap_cache.o `test -f 'mmap_cache.c' || echo '$(srcdir)/'`mmap_cache.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-mmap_cache.Tpo $(DEPDIR)/libstrace_a-mmap_cache.Po
+#	$(AM_V_CC)source='mmap_cache.c' object='libstrace_a-mmap_cache.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-mmap_cache.o `test -f 'mmap_cache.c' || echo '$(srcdir)/'`mmap_cache.c
+
+libstrace_a-mmap_cache.obj: mmap_cache.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-mmap_cache.obj -MD -MP -MF $(DEPDIR)/libstrace_a-mmap_cache.Tpo -c -o libstrace_a-mmap_cache.obj `if test -f 'mmap_cache.c'; then $(CYGPATH_W) 'mmap_cache.c'; else $(CYGPATH_W) '$(srcdir)/mmap_cache.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-mmap_cache.Tpo $(DEPDIR)/libstrace_a-mmap_cache.Po
+#	$(AM_V_CC)source='mmap_cache.c' object='libstrace_a-mmap_cache.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-mmap_cache.obj `if test -f 'mmap_cache.c'; then $(CYGPATH_W) 'mmap_cache.c'; else $(CYGPATH_W) '$(srcdir)/mmap_cache.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
@@ -4467,6 +4629,20 @@
 #	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-inotify_ioctl.o: inotify_ioctl.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-inotify_ioctl.o -MD -MP -MF $(DEPDIR)/strace-inotify_ioctl.Tpo -c -o strace-inotify_ioctl.o `test -f 'inotify_ioctl.c' || echo '$(srcdir)/'`inotify_ioctl.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-inotify_ioctl.Tpo $(DEPDIR)/strace-inotify_ioctl.Po
+#	$(AM_V_CC)source='inotify_ioctl.c' object='strace-inotify_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-inotify_ioctl.o `test -f 'inotify_ioctl.c' || echo '$(srcdir)/'`inotify_ioctl.c
+
+strace-inotify_ioctl.obj: inotify_ioctl.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-inotify_ioctl.obj -MD -MP -MF $(DEPDIR)/strace-inotify_ioctl.Tpo -c -o strace-inotify_ioctl.obj `if test -f 'inotify_ioctl.c'; then $(CYGPATH_W) 'inotify_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/inotify_ioctl.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-inotify_ioctl.Tpo $(DEPDIR)/strace-inotify_ioctl.Po
+#	$(AM_V_CC)source='inotify_ioctl.c' object='strace-inotify_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-inotify_ioctl.obj `if test -f 'inotify_ioctl.c'; then $(CYGPATH_W) 'inotify_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/inotify_ioctl.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
@@ -4803,19 +4979,19 @@
 #	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-mmap_cache.o: mmap_cache.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmap_cache.o -MD -MP -MF $(DEPDIR)/strace-mmap_cache.Tpo -c -o strace-mmap_cache.o `test -f 'mmap_cache.c' || echo '$(srcdir)/'`mmap_cache.c
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmap_cache.Tpo $(DEPDIR)/strace-mmap_cache.Po
-#	$(AM_V_CC)source='mmap_cache.c' object='strace-mmap_cache.o' libtool=no \
+strace-mmap_notify.o: mmap_notify.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmap_notify.o -MD -MP -MF $(DEPDIR)/strace-mmap_notify.Tpo -c -o strace-mmap_notify.o `test -f 'mmap_notify.c' || echo '$(srcdir)/'`mmap_notify.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmap_notify.Tpo $(DEPDIR)/strace-mmap_notify.Po
+#	$(AM_V_CC)source='mmap_notify.c' object='strace-mmap_notify.o' libtool=no \
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mmap_cache.o `test -f 'mmap_cache.c' || echo '$(srcdir)/'`mmap_cache.c
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mmap_notify.o `test -f 'mmap_notify.c' || echo '$(srcdir)/'`mmap_notify.c
 
-strace-mmap_cache.obj: mmap_cache.c
-	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmap_cache.obj -MD -MP -MF $(DEPDIR)/strace-mmap_cache.Tpo -c -o strace-mmap_cache.obj `if test -f 'mmap_cache.c'; then $(CYGPATH_W) 'mmap_cache.c'; else $(CYGPATH_W) '$(srcdir)/mmap_cache.c'; fi`
-	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmap_cache.Tpo $(DEPDIR)/strace-mmap_cache.Po
-#	$(AM_V_CC)source='mmap_cache.c' object='strace-mmap_cache.obj' libtool=no \
+strace-mmap_notify.obj: mmap_notify.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmap_notify.obj -MD -MP -MF $(DEPDIR)/strace-mmap_notify.Tpo -c -o strace-mmap_notify.obj `if test -f 'mmap_notify.c'; then $(CYGPATH_W) 'mmap_notify.c'; else $(CYGPATH_W) '$(srcdir)/mmap_notify.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmap_notify.Tpo $(DEPDIR)/strace-mmap_notify.Po
+#	$(AM_V_CC)source='mmap_notify.c' object='strace-mmap_notify.obj' libtool=no \
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mmap_cache.obj `if test -f 'mmap_cache.c'; then $(CYGPATH_W) 'mmap_cache.c'; else $(CYGPATH_W) '$(srcdir)/mmap_cache.c'; fi`
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mmap_notify.obj `if test -f 'mmap_notify.c'; then $(CYGPATH_W) 'mmap_notify.c'; else $(CYGPATH_W) '$(srcdir)/mmap_notify.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
@@ -4929,6 +5105,20 @@
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
 #	$(AM_V_CC_no)$(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_kobject_uevent.o: netlink_kobject_uevent.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_kobject_uevent.o -MD -MP -MF $(DEPDIR)/strace-netlink_kobject_uevent.Tpo -c -o strace-netlink_kobject_uevent.o `test -f 'netlink_kobject_uevent.c' || echo '$(srcdir)/'`netlink_kobject_uevent.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_kobject_uevent.Tpo $(DEPDIR)/strace-netlink_kobject_uevent.Po
+#	$(AM_V_CC)source='netlink_kobject_uevent.c' object='strace-netlink_kobject_uevent.o' 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_kobject_uevent.o `test -f 'netlink_kobject_uevent.c' || echo '$(srcdir)/'`netlink_kobject_uevent.c
+
+strace-netlink_kobject_uevent.obj: netlink_kobject_uevent.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_kobject_uevent.obj -MD -MP -MF $(DEPDIR)/strace-netlink_kobject_uevent.Tpo -c -o strace-netlink_kobject_uevent.obj `if test -f 'netlink_kobject_uevent.c'; then $(CYGPATH_W) 'netlink_kobject_uevent.c'; else $(CYGPATH_W) '$(srcdir)/netlink_kobject_uevent.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_kobject_uevent.Tpo $(DEPDIR)/strace-netlink_kobject_uevent.Po
+#	$(AM_V_CC)source='netlink_kobject_uevent.c' object='strace-netlink_kobject_uevent.obj' 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_kobject_uevent.obj `if test -f 'netlink_kobject_uevent.c'; then $(CYGPATH_W) 'netlink_kobject_uevent.c'; else $(CYGPATH_W) '$(srcdir)/netlink_kobject_uevent.c'; fi`
+
 strace-netlink_inet_diag.o: netlink_inet_diag.c
 	$(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_V_at)$(am__mv) $(DEPDIR)/strace-netlink_inet_diag.Tpo $(DEPDIR)/strace-netlink_inet_diag.Po
@@ -5181,6 +5371,20 @@
 #	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-perf_ioctl.o: perf_ioctl.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-perf_ioctl.o -MD -MP -MF $(DEPDIR)/strace-perf_ioctl.Tpo -c -o strace-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-perf_ioctl.Tpo $(DEPDIR)/strace-perf_ioctl.Po
+#	$(AM_V_CC)source='perf_ioctl.c' object='strace-perf_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-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+
+strace-perf_ioctl.obj: perf_ioctl.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-perf_ioctl.obj -MD -MP -MF $(DEPDIR)/strace-perf_ioctl.Tpo -c -o strace-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-perf_ioctl.Tpo $(DEPDIR)/strace-perf_ioctl.Po
+#	$(AM_V_CC)source='perf_ioctl.c' object='strace-perf_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-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.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
@@ -5237,6 +5441,20 @@
 #	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_aio_sigset.o: print_aio_sigset.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_aio_sigset.o -MD -MP -MF $(DEPDIR)/strace-print_aio_sigset.Tpo -c -o strace-print_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_aio_sigset.Tpo $(DEPDIR)/strace-print_aio_sigset.Po
+#	$(AM_V_CC)source='print_aio_sigset.c' object='strace-print_aio_sigset.o' 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_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+
+strace-print_aio_sigset.obj: print_aio_sigset.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_aio_sigset.obj -MD -MP -MF $(DEPDIR)/strace-print_aio_sigset.Tpo -c -o strace-print_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_aio_sigset.Tpo $(DEPDIR)/strace-print_aio_sigset.Po
+#	$(AM_V_CC)source='print_aio_sigset.c' object='strace-print_aio_sigset.obj' 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_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.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
@@ -5279,6 +5497,20 @@
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
 #	$(AM_V_CC_no)$(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_mac.o: print_mac.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_mac.o -MD -MP -MF $(DEPDIR)/strace-print_mac.Tpo -c -o strace-print_mac.o `test -f 'print_mac.c' || echo '$(srcdir)/'`print_mac.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_mac.Tpo $(DEPDIR)/strace-print_mac.Po
+#	$(AM_V_CC)source='print_mac.c' object='strace-print_mac.o' 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_mac.o `test -f 'print_mac.c' || echo '$(srcdir)/'`print_mac.c
+
+strace-print_mac.obj: print_mac.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_mac.obj -MD -MP -MF $(DEPDIR)/strace-print_mac.Tpo -c -o strace-print_mac.obj `if test -f 'print_mac.c'; then $(CYGPATH_W) 'print_mac.c'; else $(CYGPATH_W) '$(srcdir)/print_mac.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_mac.Tpo $(DEPDIR)/strace-print_mac.Po
+#	$(AM_V_CC)source='print_mac.c' object='strace-print_mac.obj' 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_mac.obj `if test -f 'print_mac.c'; then $(CYGPATH_W) 'print_mac.c'; else $(CYGPATH_W) '$(srcdir)/print_mac.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
@@ -6553,6 +6785,20 @@
 #	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`
 
+strace-unwind-libdw.o: unwind-libdw.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-unwind-libdw.o -MD -MP -MF $(DEPDIR)/strace-unwind-libdw.Tpo -c -o strace-unwind-libdw.o `test -f 'unwind-libdw.c' || echo '$(srcdir)/'`unwind-libdw.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-unwind-libdw.Tpo $(DEPDIR)/strace-unwind-libdw.Po
+#	$(AM_V_CC)source='unwind-libdw.c' object='strace-unwind-libdw.o' 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-libdw.o `test -f 'unwind-libdw.c' || echo '$(srcdir)/'`unwind-libdw.c
+
+strace-unwind-libdw.obj: unwind-libdw.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-unwind-libdw.obj -MD -MP -MF $(DEPDIR)/strace-unwind-libdw.Tpo -c -o strace-unwind-libdw.obj `if test -f 'unwind-libdw.c'; then $(CYGPATH_W) 'unwind-libdw.c'; else $(CYGPATH_W) '$(srcdir)/unwind-libdw.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-unwind-libdw.Tpo $(DEPDIR)/strace-unwind-libdw.Po
+#	$(AM_V_CC)source='unwind-libdw.c' object='strace-unwind-libdw.obj' 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-libdw.obj `if test -f 'unwind-libdw.c'; then $(CYGPATH_W) 'unwind-libdw.c'; else $(CYGPATH_W) '$(srcdir)/unwind-libdw.c'; fi`
+
 strace-unwind-libunwind.o: unwind-libunwind.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-unwind-libunwind.o -MD -MP -MF $(DEPDIR)/strace-unwind-libunwind.Tpo -c -o strace-unwind-libunwind.o `test -f 'unwind-libunwind.c' || echo '$(srcdir)/'`unwind-libunwind.c
 	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-unwind-libunwind.Tpo $(DEPDIR)/strace-unwind-libunwind.Po
@@ -7105,8 +7351,14 @@
 	$(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/bdaddr_types.h: $(top_srcdir)/xlat/bdaddr_types.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/bluetooth_l2_cid.h: $(top_srcdir)/xlat/bluetooth_l2_cid.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/bluetooth_l2_psm.h: $(top_srcdir)/xlat/bluetooth_l2_psm.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
@@ -7141,6 +7393,8 @@
 	$(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_query_flags.h: $(top_srcdir)/xlat/bpf_query_flags.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
@@ -7165,6 +7419,8 @@
 	$(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_cont_reading_from_srcdev_mode.h: $(top_srcdir)/xlat/btrfs_cont_reading_from_srcdev_mode.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
@@ -7207,6 +7463,10 @@
 	$(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/caif_protocols.h: $(top_srcdir)/xlat/caif_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/can_protocols.h: $(top_srcdir)/xlat/can_protocols.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
@@ -7233,6 +7493,18 @@
 	$(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/ebpf_class.h: $(top_srcdir)/xlat/ebpf_class.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_mode.h: $(top_srcdir)/xlat/ebpf_mode.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_op_alu.h: $(top_srcdir)/xlat/ebpf_op_alu.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_op_jmp.h: $(top_srcdir)/xlat/ebpf_op_jmp.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_regs.h: $(top_srcdir)/xlat/ebpf_regs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_size.h: $(top_srcdir)/xlat/ebpf_size.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
@@ -7285,8 +7557,6 @@
 	$(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
@@ -7311,9 +7581,11 @@
 	$(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
+$(top_srcdir)/xlat/getsock_ip_options.h: $(top_srcdir)/xlat/getsock_ip_options.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
+$(top_srcdir)/xlat/getsock_ipv6_options.h: $(top_srcdir)/xlat/getsock_ipv6_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/getsock_options.h: $(top_srcdir)/xlat/getsock_options.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 $< $@
@@ -7333,6 +7605,14 @@
 	$(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/in6_addr_gen_mode.h: $(top_srcdir)/xlat/in6_addr_gen_mode.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet6_devconf_indices.h: $(top_srcdir)/xlat/inet6_devconf_indices.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet6_if_flags.h: $(top_srcdir)/xlat/inet6_if_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet_devconf_indices.h: $(top_srcdir)/xlat/inet_devconf_indices.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
@@ -7359,10 +7639,18 @@
 	$(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/ipc_private.h: $(top_srcdir)/xlat/ipc_private.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/irda_protocols.h: $(top_srcdir)/xlat/irda_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/isdn_protocols.h: $(top_srcdir)/xlat/isdn_protocols.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/kcm_protocols.h: $(top_srcdir)/xlat/kcm_protocols.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
@@ -7471,6 +7759,8 @@
 	$(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_sk_meminfo_indices.h: $(top_srcdir)/xlat/netlink_sk_meminfo_indices.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_socket_flags.h: $(top_srcdir)/xlat/netlink_socket_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_states.h: $(top_srcdir)/xlat/netlink_states.in $(top_srcdir)/xlat/gen.sh
@@ -7499,6 +7789,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nf_ulog_msg_types.h: $(top_srcdir)/xlat/nf_ulog_msg_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nfc_protocols.h: $(top_srcdir)/xlat/nfc_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(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
@@ -7521,6 +7813,8 @@
 	$(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/numa_node.h: $(top_srcdir)/xlat/numa_node.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
@@ -7551,6 +7845,10 @@
 	$(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_ioctl_cmds.h: $(top_srcdir)/xlat/perf_ioctl_cmds.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/perf_ioctl_flags.h: $(top_srcdir)/xlat/perf_ioctl_flags.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
@@ -7559,6 +7857,8 @@
 	$(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/phonet_protocols.h: $(top_srcdir)/xlat/phonet_protocols.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
@@ -7577,6 +7877,12 @@
 	$(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_spec_cmds.h: $(top_srcdir)/xlat/pr_spec_cmds.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/pr_spec_get_store_bypass_flags.h: $(top_srcdir)/xlat/pr_spec_get_store_bypass_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/pr_spec_set_store_bypass_flags.h: $(top_srcdir)/xlat/pr_spec_set_store_bypass_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/pr_sve_vl_flags.h: $(top_srcdir)/xlat/pr_sve_vl_flags.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
@@ -7629,12 +7935,20 @@
 	$(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_af_spec_inet6_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_af_spec_inet6_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_af_spec_inet_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_af_spec_inet_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_events.h: $(top_srcdir)/xlat/rtnl_ifla_events.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_info_data_bridge_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_info_data_bridge_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_info_data_tun_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_info_data_tun_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
@@ -7713,9 +8027,11 @@
 	$(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
+$(top_srcdir)/xlat/setsock_ip_options.h: $(top_srcdir)/xlat/setsock_ip_options.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
+$(top_srcdir)/xlat/setsock_ipv6_options.h: $(top_srcdir)/xlat/setsock_ipv6_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/setsock_options.h: $(top_srcdir)/xlat/setsock_options.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 $< $@
@@ -7767,38 +8083,78 @@
 	$(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/skf_off.h: $(top_srcdir)/xlat/skf_off.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_protocols.h: $(top_srcdir)/xlat/smc_protocols.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/snmp_icmp6_stats.h: $(top_srcdir)/xlat/snmp_icmp6_stats.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/snmp_ip_stats.h: $(top_srcdir)/xlat/snmp_ip_stats.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_alg_options.h: $(top_srcdir)/xlat/sock_alg_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_bluetooth_options.h: $(top_srcdir)/xlat/sock_bluetooth_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_caif_options.h: $(top_srcdir)/xlat/sock_caif_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_dccp_options.h: $(top_srcdir)/xlat/sock_dccp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_ip_options.h: $(top_srcdir)/xlat/sock_ip_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_ipv6_options.h: $(top_srcdir)/xlat/sock_ipv6_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_ipx_options.h: $(top_srcdir)/xlat/sock_ipx_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_irda_options.h: $(top_srcdir)/xlat/sock_irda_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_iucv_options.h: $(top_srcdir)/xlat/sock_iucv_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_kcm_options.h: $(top_srcdir)/xlat/sock_kcm_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_llc_options.h: $(top_srcdir)/xlat/sock_llc_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_netlink_options.h: $(top_srcdir)/xlat/sock_netlink_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_nfcllcp_options.h: $(top_srcdir)/xlat/sock_nfcllcp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_options.h: $(top_srcdir)/xlat/sock_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_packet_options.h: $(top_srcdir)/xlat/sock_packet_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_pnp_options.h: $(top_srcdir)/xlat/sock_pnp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_pppol2tp_options.h: $(top_srcdir)/xlat/sock_pppol2tp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_raw_options.h: $(top_srcdir)/xlat/sock_raw_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_rds_options.h: $(top_srcdir)/xlat/sock_rds_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_rxrpc_options.h: $(top_srcdir)/xlat/sock_rxrpc_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_sctp_options.h: $(top_srcdir)/xlat/sock_sctp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_tcp_options.h: $(top_srcdir)/xlat/sock_tcp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_tipc_options.h: $(top_srcdir)/xlat/sock_tipc_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_tls_options.h: $(top_srcdir)/xlat/sock_tls_options.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/sock_udp_options.h: $(top_srcdir)/xlat/sock_udp_options.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/socknetlinkoptions.h: $(top_srcdir)/xlat/socknetlinkoptions.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/sparc_kern_features.h: $(top_srcdir)/xlat/sparc_kern_features.in $(top_srcdir)/xlat/gen.sh
@@ -7853,6 +8209,8 @@
 	$(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/tun_device_types.h: $(top_srcdir)/xlat/tun_device_types.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
@@ -7893,6 +8251,8 @@
 	$(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_id_bases.h: $(top_srcdir)/xlat/v4l2_control_id_bases.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
diff --git a/Makefile.am b/Makefile.am
index 6985d28..3259344 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -75,6 +75,8 @@
 	fstatfs64.c \
 	getpagesize.c \
 	ipc.c \
+	mmap_cache.c	\
+	mmap_cache.h	\
 	sigreturn.c	\
 	socketcall.c \
 	statfs.c \
@@ -128,6 +130,7 @@
 	evdev_mpers.c	\
 	eventfd.c	\
 	execve.c	\
+	f_owner_ex.h	\
 	fadvise.c	\
 	fallocate.c	\
 	fanotify.c	\
@@ -157,6 +160,7 @@
 	hdio.c		\
 	hostname.c	\
 	inotify.c	\
+	inotify_ioctl.c	\
 	io.c		\
 	ioctl.c		\
 	ioperm.c	\
@@ -178,6 +182,7 @@
 	ldt.c		\
 	link.c		\
 	linux/asm_stat.h \
+	linux/linux/signal.h \
 	linux/x32/asm_stat.h \
 	linux/x86_64/asm_stat.h \
 	listen.c	\
@@ -189,8 +194,8 @@
 	membarrier.c	\
 	memfd_create.c	\
 	mknod.c		\
-	mmap_cache.c	\
-	mmap_cache.h	\
+	mmap_notify.c	\
+	mmap_notify.h	\
 	mmsghdr.c	\
 	mount.c		\
 	mpers_type.h	\
@@ -204,6 +209,8 @@
 	netlink.c       \
 	netlink.h	\
 	netlink_crypto.c \
+	netlink_kobject_uevent.c \
+	netlink_kobject_uevent.h \
 	netlink_sock_diag.h \
 	netlink_inet_diag.c \
 	netlink_netfilter.c \
@@ -229,14 +236,17 @@
 	pathtrace.c	\
 	perf.c		\
 	perf_event_struct.h \
+	perf_ioctl.c	\
 	personality.c	\
 	pkeys.c		\
 	poll.c		\
 	prctl.c		\
+	print_aio_sigset.c \
 	print_dev_t.c	\
 	print_group_req.c \
 	print_fields.h	\
 	print_ifindex.c	\
+	print_mac.c	\
 	print_mq_attr.c	\
 	print_msgbuf.c	\
 	print_sg_req_info.c \
@@ -349,11 +359,21 @@
 
 strace_SOURCES_check = bpf_attr_check.c
 
+if ENABLE_STACKTRACE
+strace_SOURCES += unwind.c unwind.h
+if USE_LIBDW
+strace_SOURCES += unwind-libdw.c
+strace_CPPFLAGS += $(libdw_CPPFLAGS)
+strace_CFLAGS += $(libdw_CFLAGS)
+strace_LDFLAGS += $(libdw_LDFLAGS)
+strace_LDADD += $(libdw_LIBS)
+endif
 if USE_LIBUNWIND
-strace_SOURCES += unwind.c unwind.h unwind-libunwind.c
+strace_SOURCES += unwind-libunwind.c
 strace_CPPFLAGS += $(libunwind_CPPFLAGS)
 strace_LDFLAGS += $(libunwind_LDFLAGS)
 strace_LDADD += $(libunwind_LIBS)
+endif
 if USE_DEMANGLE
 strace_CPPFLAGS += $(libiberty_CPPFLAGS)
 strace_LDFLAGS += $(libiberty_LDFLAGS)
@@ -411,7 +431,6 @@
 	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	\
@@ -424,7 +443,6 @@
 	linux/aarch64/set_error.c	\
 	linux/aarch64/set_scno.c	\
 	linux/aarch64/shuffle_scno.c	\
-	linux/aarch64/signalent1.h	\
 	linux/aarch64/syscallent.h	\
 	linux/aarch64/syscallent1.h	\
 	linux/alpha/arch_defs_.h	\
@@ -682,7 +700,6 @@
 	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	\
@@ -696,7 +713,6 @@
 	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	\
@@ -705,7 +721,6 @@
 	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	\
@@ -716,7 +731,6 @@
 	linux/riscv/raw_syscall.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		\
@@ -743,7 +757,6 @@
 	linux/s390x/arch_regs.h		\
 	linux/s390x/arch_rt_sigframe.c	\
 	linux/s390x/arch_sigreturn.c	\
-	linux/s390x/errnoent1.h		\
 	linux/s390x/get_error.c		\
 	linux/s390x/get_scno.c		\
 	linux/s390x/get_syscall_args.c	\
@@ -755,7 +768,6 @@
 	linux/s390x/rt_sigframe.h	\
 	linux/s390x/set_error.c		\
 	linux/s390x/set_scno.c		\
-	linux/s390x/signalent1.h	\
 	linux/s390x/syscallent.h	\
 	linux/s390x/syscallent1.h	\
 	linux/s390x/userent.h		\
@@ -821,7 +833,6 @@
 	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	\
@@ -834,7 +845,6 @@
 	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		\
@@ -845,7 +855,6 @@
 	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	\
@@ -857,7 +866,6 @@
 	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		\
@@ -870,7 +878,6 @@
 	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	\
@@ -883,7 +890,6 @@
 	linux/x32/set_error.c		\
 	linux/x32/set_scno.c		\
 	linux/x32/shuffle_scno.c	\
-	linux/x32/signalent1.h		\
 	linux/x32/syscallent.h		\
 	linux/x32/syscallent1.h		\
 	linux/x32/userent.h		\
@@ -893,8 +899,6 @@
 	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/get_error.c	\
 	linux/x86_64/get_scno.c		\
 	linux/x86_64/get_syscall_args.c	\
@@ -911,8 +915,6 @@
 	linux/x86_64/set_error.c	\
 	linux/x86_64/set_scno.c		\
 	linux/x86_64/shuffle_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	\
@@ -980,7 +982,7 @@
 	${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)
+today = $(shell LC_TIME=C date -u +%Y-%m-%d)
 version_regexp = $(subst .,\.,$(VERSION))
 news_check_regexp = 'Noteworthy changes in release $(version_regexp) ($(today))'
 
diff --git a/Makefile.in b/Makefile.in
index f02c2be..9cfc55a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -147,28 +147,37 @@
 	$(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 unwind.h unwind-libunwind.c
-@USE_LIBUNWIND_TRUE@am__append_2 = $(libunwind_CPPFLAGS)
-@USE_LIBUNWIND_TRUE@am__append_3 = $(libunwind_LDFLAGS)
-@USE_LIBUNWIND_TRUE@am__append_4 = $(libunwind_LIBS)
-@USE_DEMANGLE_TRUE@@USE_LIBUNWIND_TRUE@am__append_5 = $(libiberty_CPPFLAGS)
-@USE_DEMANGLE_TRUE@@USE_LIBUNWIND_TRUE@am__append_6 = $(libiberty_LDFLAGS)
-@USE_DEMANGLE_TRUE@@USE_LIBUNWIND_TRUE@am__append_7 = $(libiberty_LIBS)
-@HAVE_M32_MPERS_TRUE@am__append_8 = libmpers-m32.a
-@HAVE_M32_MPERS_TRUE@am__append_9 = libmpers-m32.a
-@HAVE_M32_MPERS_TRUE@am__append_10 = $(mpers_m32_targets)
-@HAVE_M32_MPERS_TRUE@am__append_11 = $(mpers_m32_targets)
-@HAVE_MX32_MPERS_TRUE@am__append_12 = libmpers-mx32.a
-@HAVE_MX32_MPERS_TRUE@am__append_13 = libmpers-mx32.a
-@HAVE_MX32_MPERS_TRUE@am__append_14 = $(mpers_mx32_targets)
-@HAVE_MX32_MPERS_TRUE@am__append_15 = $(mpers_mx32_targets)
+@ENABLE_STACKTRACE_TRUE@am__append_1 = unwind.c unwind.h
+@ENABLE_STACKTRACE_TRUE@@USE_LIBDW_TRUE@am__append_2 = unwind-libdw.c
+@ENABLE_STACKTRACE_TRUE@@USE_LIBDW_TRUE@am__append_3 = $(libdw_CPPFLAGS)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBDW_TRUE@am__append_4 = $(libdw_CFLAGS)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBDW_TRUE@am__append_5 = $(libdw_LDFLAGS)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBDW_TRUE@am__append_6 = $(libdw_LIBS)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBUNWIND_TRUE@am__append_7 = unwind-libunwind.c
+@ENABLE_STACKTRACE_TRUE@@USE_LIBUNWIND_TRUE@am__append_8 = $(libunwind_CPPFLAGS)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBUNWIND_TRUE@am__append_9 = $(libunwind_LDFLAGS)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBUNWIND_TRUE@am__append_10 = $(libunwind_LIBS)
+@ENABLE_STACKTRACE_TRUE@@USE_DEMANGLE_TRUE@am__append_11 = $(libiberty_CPPFLAGS)
+@ENABLE_STACKTRACE_TRUE@@USE_DEMANGLE_TRUE@am__append_12 = $(libiberty_LDFLAGS)
+@ENABLE_STACKTRACE_TRUE@@USE_DEMANGLE_TRUE@am__append_13 = $(libiberty_LIBS)
+@HAVE_M32_MPERS_TRUE@am__append_14 = libmpers-m32.a
+@HAVE_M32_MPERS_TRUE@am__append_15 = libmpers-m32.a
+@HAVE_M32_MPERS_TRUE@am__append_16 = $(mpers_m32_targets)
+@HAVE_M32_MPERS_TRUE@am__append_17 = $(mpers_m32_targets)
+@HAVE_MX32_MPERS_TRUE@am__append_18 = libmpers-mx32.a
+@HAVE_MX32_MPERS_TRUE@am__append_19 = libmpers-mx32.a
+@HAVE_MX32_MPERS_TRUE@am__append_20 = $(mpers_mx32_targets)
+@HAVE_MX32_MPERS_TRUE@am__append_21 = $(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/bpf_attr.m4 $(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/st_demangle.m4 $(top_srcdir)/m4/st_libdw.m4 \
+	$(top_srcdir)/m4/st_libunwind.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
+	$(top_srcdir)/m4/st_stacktrace.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) \
@@ -194,12 +203,12 @@
 	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
+	ipc_msgctl.c ipc_shmctl.c loop.c mtd.c perf_ioctl.c \
+	print_aio_sigset.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
 am__objects_1 = libmpers_m32_a-block.$(OBJEXT) \
 	libmpers_m32_a-btrfs.$(OBJEXT) libmpers_m32_a-dirent.$(OBJEXT) \
 	libmpers_m32_a-evdev_mpers.$(OBJEXT) \
@@ -215,6 +224,8 @@
 	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-perf_ioctl.$(OBJEXT) \
+	libmpers_m32_a-print_aio_sigset.$(OBJEXT) \
 	libmpers_m32_a-print_group_req.$(OBJEXT) \
 	libmpers_m32_a-print_mq_attr.$(OBJEXT) \
 	libmpers_m32_a-print_msgbuf.$(OBJEXT) \
@@ -241,12 +252,12 @@
 	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
+	ipc_msgctl.c ipc_shmctl.c loop.c mtd.c perf_ioctl.c \
+	print_aio_sigset.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
 am__objects_2 = libmpers_mx32_a-block.$(OBJEXT) \
 	libmpers_mx32_a-btrfs.$(OBJEXT) \
 	libmpers_mx32_a-dirent.$(OBJEXT) \
@@ -263,6 +274,8 @@
 	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-perf_ioctl.$(OBJEXT) \
+	libmpers_mx32_a-print_aio_sigset.$(OBJEXT) \
 	libmpers_mx32_a-print_group_req.$(OBJEXT) \
 	libmpers_mx32_a-print_mq_attr.$(OBJEXT) \
 	libmpers_mx32_a-print_msgbuf.$(OBJEXT) \
@@ -291,6 +304,7 @@
 	libstrace_a-fetch_indirect_syscall_args.$(OBJEXT) \
 	libstrace_a-fstatfs.$(OBJEXT) libstrace_a-fstatfs64.$(OBJEXT) \
 	libstrace_a-getpagesize.$(OBJEXT) libstrace_a-ipc.$(OBJEXT) \
+	libstrace_a-mmap_cache.$(OBJEXT) \
 	libstrace_a-sigreturn.$(OBJEXT) \
 	libstrace_a-socketcall.$(OBJEXT) libstrace_a-statfs.$(OBJEXT) \
 	libstrace_a-statfs64.$(OBJEXT) \
@@ -309,39 +323,42 @@
 	copy_file_range.c count.c defs.h delay.c delay.h desc.c \
 	dirent.c dirent64.c dm.c dyxlat.c empty.h epoll.c \
 	error_prints.c error_prints.h evdev.c evdev_mpers.c eventfd.c \
-	execve.c fadvise.c fallocate.c fanotify.c fchownat.c fcntl.c \
-	fetch_bpf_fprog.c fetch_struct_flock.c \
+	execve.c f_owner_ex.h 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 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 kvm.c largefile_wrappers.h ldt.c \
-	link.c linux/asm_stat.h linux/x32/asm_stat.h \
+	getcwd.c getrandom.c hdio.c hostname.c inotify.c \
+	inotify_ioctl.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 kvm.c largefile_wrappers.h ldt.c link.c \
+	linux/asm_stat.h linux/linux/signal.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 \
-	mmap_cache.c mmap_cache.h 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_netfilter.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 retval.c \
-	retval.h riscv.c rt_sigframe.c rt_sigreturn.c rtc.c \
-	rtnl_addr.c rtnl_addrlabel.c rtnl_dcb.c rtnl_link.c rtnl_mdb.c \
+	mmap_notify.c mmap_notify.h 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_kobject_uevent.c netlink_kobject_uevent.h \
+	netlink_sock_diag.h netlink_inet_diag.c netlink_netfilter.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 perf_ioctl.c personality.c pkeys.c poll.c \
+	prctl.c print_aio_sigset.c print_dev_t.c print_group_req.c \
+	print_fields.h print_ifindex.c print_mac.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 retval.c retval.h \
+	riscv.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 s390.c \
 	sched.c sched_attr.h scsi.c seccomp.c sendfile.c sg_io_v3.c \
@@ -355,10 +372,12 @@
 	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 xmalloc.h xstring.h \
-	bpf_attr_check.c unwind.c unwind.h unwind-libunwind.c
+	bpf_attr_check.c unwind.c unwind.h unwind-libdw.c \
+	unwind-libunwind.c
 am__objects_3 = strace-bpf_attr_check.$(OBJEXT)
-@USE_LIBUNWIND_TRUE@am__objects_4 = strace-unwind.$(OBJEXT) \
-@USE_LIBUNWIND_TRUE@	strace-unwind-libunwind.$(OBJEXT)
+@ENABLE_STACKTRACE_TRUE@am__objects_4 = strace-unwind.$(OBJEXT)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBDW_TRUE@am__objects_5 = strace-unwind-libdw.$(OBJEXT)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBUNWIND_TRUE@am__objects_6 = strace-unwind-libunwind.$(OBJEXT)
 am_strace_OBJECTS = strace-access.$(OBJEXT) strace-affinity.$(OBJEXT) \
 	strace-aio.$(OBJEXT) strace-alpha.$(OBJEXT) \
 	strace-basic_filters.$(OBJEXT) strace-bind.$(OBJEXT) \
@@ -392,23 +411,25 @@
 	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-kvm.$(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-mmap_cache.$(OBJEXT) \
-	strace-mmsghdr.$(OBJEXT) strace-mount.$(OBJEXT) \
-	strace-mq.$(OBJEXT) strace-msghdr.$(OBJEXT) \
-	strace-mtd.$(OBJEXT) strace-net.$(OBJEXT) \
-	strace-netlink.$(OBJEXT) strace-netlink_crypto.$(OBJEXT) \
+	strace-inotify.$(OBJEXT) strace-inotify_ioctl.$(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-kvm.$(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-mmap_notify.$(OBJEXT) strace-mmsghdr.$(OBJEXT) \
+	strace-mount.$(OBJEXT) strace-mq.$(OBJEXT) \
+	strace-msghdr.$(OBJEXT) strace-mtd.$(OBJEXT) \
+	strace-net.$(OBJEXT) strace-netlink.$(OBJEXT) \
+	strace-netlink_crypto.$(OBJEXT) \
+	strace-netlink_kobject_uevent.$(OBJEXT) \
 	strace-netlink_inet_diag.$(OBJEXT) \
 	strace-netlink_netfilter.$(OBJEXT) \
 	strace-netlink_netlink_diag.$(OBJEXT) \
@@ -422,11 +443,12 @@
 	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-perf_ioctl.$(OBJEXT) strace-personality.$(OBJEXT) \
+	strace-pkeys.$(OBJEXT) strace-poll.$(OBJEXT) \
+	strace-prctl.$(OBJEXT) strace-print_aio_sigset.$(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_ifindex.$(OBJEXT) strace-print_mac.$(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) \
@@ -471,16 +493,18 @@
 	strace-utimes.$(OBJEXT) strace-v4l2.$(OBJEXT) \
 	strace-wait.$(OBJEXT) strace-xattr.$(OBJEXT) \
 	strace-xlat.$(OBJEXT) strace-xmalloc.$(OBJEXT) \
-	$(am__objects_3) $(am__objects_4)
+	$(am__objects_3) $(am__objects_4) $(am__objects_5) \
+	$(am__objects_6)
 strace_OBJECTS = $(am_strace_OBJECTS)
 am__DEPENDENCIES_1 =
-@USE_LIBUNWIND_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
-@USE_DEMANGLE_TRUE@@USE_LIBUNWIND_TRUE@am__DEPENDENCIES_3 =  \
-@USE_DEMANGLE_TRUE@@USE_LIBUNWIND_TRUE@	$(am__DEPENDENCIES_1)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBDW_TRUE@am__DEPENDENCIES_2 =  \
+@ENABLE_STACKTRACE_TRUE@@USE_LIBDW_TRUE@	$(am__DEPENDENCIES_1)
+@ENABLE_STACKTRACE_TRUE@@USE_LIBUNWIND_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
+@ENABLE_STACKTRACE_TRUE@@USE_DEMANGLE_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
 strace_DEPENDENCIES = libstrace.a $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
-	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) $(am__append_8) \
-	$(am__append_12)
+	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
+	$(am__DEPENDENCIES_1) $(am__append_14) $(am__append_18)
 strace_LINK = $(CCLD) $(strace_CFLAGS) $(CFLAGS) $(strace_LDFLAGS) \
 	$(LDFLAGS) -o $@
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
@@ -762,6 +786,10 @@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
+libdw_CFLAGS = @libdw_CFLAGS@
+libdw_CPPFLAGS = @libdw_CPPFLAGS@
+libdw_LDFLAGS = @libdw_LDFLAGS@
+libdw_LIBS = @libdw_LIBS@
 libexecdir = @libexecdir@
 libiberty_CPPFLAGS = @libiberty_CPPFLAGS@
 libiberty_LDFLAGS = @libiberty_LDFLAGS@
@@ -814,21 +842,23 @@
 	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/audit_arch.in xlat/baud_options.in xlat/bdaddr_types.in \
+	xlat/blkpg_ops.in xlat/bluetooth_l2_cid.in \
+	xlat/bluetooth_l2_psm.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_file_mode_flags.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/bpf_prog_types.in xlat/bpf_query_flags.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_cont_reading_from_srcdev_mode.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 \
@@ -841,12 +871,15 @@
 	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/cacheflush_scope.in xlat/caif_protocols.in \
+	xlat/can_protocols.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/dm_flags.in xlat/ebpf_class.in xlat/ebpf_mode.in \
+	xlat/ebpf_op_alu.in xlat/ebpf_op_jmp.in xlat/ebpf_regs.in \
+	xlat/ebpf_size.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 \
@@ -857,27 +890,31 @@
 	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/kvm_mem_flags.in \
+	xlat/fan_mark_flags.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/getsock_ip_options.in \
+	xlat/getsock_ipv6_options.in xlat/getsock_options.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/in6_addr_gen_mode.in xlat/inet6_devconf_indices.in \
+	xlat/inet6_if_flags.in xlat/inet_devconf_indices.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/ipc_private.in xlat/ipccalls.in xlat/irda_protocols.in \
+	xlat/isdn_protocols.in xlat/itimer_which.in \
+	xlat/kcm_protocols.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/kvm_mem_flags.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 \
@@ -899,6 +936,7 @@
 	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_sk_meminfo_indices.in \
 	xlat/netlink_socket_flags.in xlat/netlink_states.in \
 	xlat/netlink_types.in xlat/nf_acct_msg_types.in \
 	xlat/nf_cthelper_msg_types.in \
@@ -907,12 +945,13 @@
 	xlat/nf_ipset_msg_types.in xlat/nf_nft_compat_msg_types.in \
 	xlat/nf_nftables_msg_types.in xlat/nf_osf_msg_types.in \
 	xlat/nf_queue_msg_types.in xlat/nf_ulog_msg_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/nfc_protocols.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/numa_node.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 \
@@ -920,13 +959,17 @@
 	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/perf_hw_id.in xlat/perf_ioctl_cmds.in \
+	xlat/perf_ioctl_flags.in xlat/perf_sw_ids.in \
+	xlat/perf_type_id.in xlat/personality_flags.in \
+	xlat/personality_types.in xlat/phonet_protocols.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_sve_vl_flags.in xlat/pr_tsc.in \
-	xlat/pr_unalign_flags.in xlat/prctl_options.in \
+	xlat/pr_set_mm.in xlat/pr_spec_cmds.in \
+	xlat/pr_spec_get_store_bypass_flags.in \
+	xlat/pr_spec_set_store_bypass_flags.in xlat/pr_sve_vl_flags.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 \
@@ -938,11 +981,16 @@
 	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_af_spec_inet6_attrs.in \
+	xlat/rtnl_ifla_af_spec_inet_attrs.in \
 	xlat/rtnl_ifla_brport_attrs.in xlat/rtnl_ifla_events.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_mdba_mdb_attrs.in xlat/rtnl_mdba_mdb_eattr_attrs.in \
+	xlat/rtnl_ifla_info_attrs.in \
+	xlat/rtnl_ifla_info_data_bridge_attrs.in \
+	xlat/rtnl_ifla_info_data_tun_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_mdba_mdb_attrs.in \
+	xlat/rtnl_mdba_mdb_eattr_attrs.in \
 	xlat/rtnl_mdba_mdb_entry_attrs.in \
 	xlat/rtnl_mdba_router_attrs.in \
 	xlat/rtnl_mdba_router_pattr_attrs.in xlat/rtnl_neigh_attrs.in \
@@ -960,31 +1008,42 @@
 	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/setsock_ip_options.in xlat/setsock_ipv6_options.in \
+	xlat/setsock_options.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/skf_off.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/socknetlinkoptions.in xlat/sockoptions.in \
-	xlat/sockpacketoptions.in xlat/sockrawoptions.in \
-	xlat/socksctpoptions.in xlat/socktcpoptions.in \
-	xlat/socktypes.in xlat/sparc_kern_features.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/smc_link_group_roles.in xlat/smc_protocols.in \
+	xlat/smc_states.in xlat/snmp_icmp6_stats.in \
+	xlat/snmp_ip_stats.in xlat/sock_alg_options.in \
+	xlat/sock_bluetooth_options.in xlat/sock_caif_options.in \
+	xlat/sock_dccp_options.in xlat/sock_ip_options.in \
+	xlat/sock_ipv6_options.in xlat/sock_ipx_options.in \
+	xlat/sock_irda_options.in xlat/sock_iucv_options.in \
+	xlat/sock_kcm_options.in xlat/sock_llc_options.in \
+	xlat/sock_netlink_options.in xlat/sock_nfcllcp_options.in \
+	xlat/sock_options.in xlat/sock_packet_options.in \
+	xlat/sock_pnp_options.in xlat/sock_pppol2tp_options.in \
+	xlat/sock_raw_options.in xlat/sock_rds_options.in \
+	xlat/sock_rxrpc_options.in xlat/sock_sctp_options.in \
+	xlat/sock_tcp_options.in xlat/sock_tipc_options.in \
+	xlat/sock_tls_options.in xlat/sock_type_flags.in \
+	xlat/sock_udp_options.in xlat/socketcalls.in \
+	xlat/socketlayers.in xlat/socktypes.in \
+	xlat/sparc_kern_features.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 \
@@ -992,17 +1051,18 @@
 	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/tun_device_types.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_control_id_bases.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 \
@@ -1020,18 +1080,22 @@
 	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/baud_options.h xlat/bdaddr_types.h xlat/blkpg_ops.h \
+	xlat/bluetooth_l2_cid.h xlat/bluetooth_l2_psm.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_file_mode_flags.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/bpf_query_flags.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_cont_reading_from_srcdev_mode.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 \
@@ -1043,11 +1107,14 @@
 	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/cacheflush_scope.h xlat/caif_protocols.h \
+	xlat/can_protocols.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/ebpf_class.h xlat/ebpf_mode.h xlat/ebpf_op_alu.h \
+	xlat/ebpf_op_jmp.h xlat/ebpf_regs.h xlat/ebpf_size.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 \
@@ -1057,23 +1124,27 @@
 	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/fan_mark_flags.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/getrandom_flags.h xlat/getsock_ip_options.h \
+	xlat/getsock_ipv6_options.h xlat/getsock_options.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/in6_addr_gen_mode.h xlat/inet6_devconf_indices.h \
+	xlat/inet6_if_flags.h xlat/inet_devconf_indices.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/ipc_private.h xlat/ipccalls.h xlat/irda_protocols.h \
+	xlat/isdn_protocols.h xlat/itimer_which.h xlat/kcm_protocols.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 \
@@ -1098,34 +1169,38 @@
 	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/nf_acct_msg_types.h \
-	xlat/nf_cthelper_msg_types.h xlat/nf_ctnetlink_exp_msg_types.h \
+	xlat/netlink_sk_meminfo_indices.h xlat/netlink_socket_flags.h \
+	xlat/netlink_states.h xlat/netlink_types.h \
+	xlat/nf_acct_msg_types.h xlat/nf_cthelper_msg_types.h \
+	xlat/nf_ctnetlink_exp_msg_types.h \
 	xlat/nf_ctnetlink_msg_types.h xlat/nf_cttimeout_msg_types.h \
 	xlat/nf_ipset_msg_types.h xlat/nf_nft_compat_msg_types.h \
 	xlat/nf_nftables_msg_types.h xlat/nf_osf_msg_types.h \
 	xlat/nf_queue_msg_types.h xlat/nf_ulog_msg_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/nfc_protocols.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/numa_node.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_ioctl_cmds.h \
+	xlat/perf_ioctl_flags.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_sve_vl_flags.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/phonet_protocols.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_spec_cmds.h \
+	xlat/pr_spec_get_store_bypass_flags.h \
+	xlat/pr_spec_set_store_bypass_flags.h xlat/pr_sve_vl_flags.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 \
@@ -1135,11 +1210,16 @@
 	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_af_spec_inet6_attrs.h \
+	xlat/rtnl_ifla_af_spec_inet_attrs.h \
 	xlat/rtnl_ifla_brport_attrs.h xlat/rtnl_ifla_events.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_mdba_mdb_attrs.h xlat/rtnl_mdba_mdb_eattr_attrs.h \
+	xlat/rtnl_ifla_info_attrs.h \
+	xlat/rtnl_ifla_info_data_bridge_attrs.h \
+	xlat/rtnl_ifla_info_data_tun_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_mdba_mdb_attrs.h \
+	xlat/rtnl_mdba_mdb_eattr_attrs.h \
 	xlat/rtnl_mdba_mdb_entry_attrs.h xlat/rtnl_mdba_router_attrs.h \
 	xlat/rtnl_mdba_router_pattr_attrs.h xlat/rtnl_neigh_attrs.h \
 	xlat/rtnl_neightbl_attrs.h xlat/rtnl_neightbl_parms_attrs.h \
@@ -1156,24 +1236,35 @@
 	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/setsock_ip_options.h xlat/setsock_ipv6_options.h \
+	xlat/setsock_options.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/socknetlinkoptions.h xlat/sockoptions.h \
-	xlat/sockpacketoptions.h xlat/sockrawoptions.h \
-	xlat/socksctpoptions.h xlat/socktcpoptions.h xlat/socktypes.h \
+	xlat/sigtrap_codes.h xlat/skf_ad.h xlat/skf_off.h \
+	xlat/smc_diag_attrs.h xlat/smc_diag_extended_flags.h \
+	xlat/smc_link_group_roles.h xlat/smc_protocols.h \
+	xlat/smc_states.h xlat/snmp_icmp6_stats.h xlat/snmp_ip_stats.h \
+	xlat/sock_alg_options.h xlat/sock_bluetooth_options.h \
+	xlat/sock_caif_options.h xlat/sock_dccp_options.h \
+	xlat/sock_ip_options.h xlat/sock_ipv6_options.h \
+	xlat/sock_ipx_options.h xlat/sock_irda_options.h \
+	xlat/sock_iucv_options.h xlat/sock_kcm_options.h \
+	xlat/sock_llc_options.h xlat/sock_netlink_options.h \
+	xlat/sock_nfcllcp_options.h xlat/sock_options.h \
+	xlat/sock_packet_options.h xlat/sock_pnp_options.h \
+	xlat/sock_pppol2tp_options.h xlat/sock_raw_options.h \
+	xlat/sock_rds_options.h xlat/sock_rxrpc_options.h \
+	xlat/sock_sctp_options.h xlat/sock_tcp_options.h \
+	xlat/sock_tipc_options.h xlat/sock_tls_options.h \
+	xlat/sock_type_flags.h xlat/sock_udp_options.h \
+	xlat/socketcalls.h xlat/socketlayers.h xlat/socktypes.h \
 	xlat/sparc_kern_features.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 \
@@ -1185,9 +1276,10 @@
 	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/timerfdflags.h xlat/tun_device_types.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 \
@@ -1195,7 +1287,8 @@
 	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_control_id_bases.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 \
@@ -1207,14 +1300,14 @@
 	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
-strace_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_2) $(am__append_5) \
-	$(CODE_COVERAGE_CPPFLAGS)
-strace_CFLAGS = $(AM_CFLAGS) $(CODE_COVERAGE_CFLAGS)
-strace_LDFLAGS = $(am__append_3) $(am__append_6)
-strace_LDADD = libstrace.a $(clock_LIBS) $(timer_LIBS) $(am__append_4) \
-	$(am__append_7) $(CODE_COVERAGE_LIBS) $(am__append_8) \
-	$(am__append_12)
-noinst_LIBRARIES = libstrace.a $(am__append_9) $(am__append_13)
+strace_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_3) $(am__append_8) \
+	$(am__append_11) $(CODE_COVERAGE_CPPFLAGS)
+strace_CFLAGS = $(AM_CFLAGS) $(am__append_4) $(CODE_COVERAGE_CFLAGS)
+strace_LDFLAGS = $(am__append_5) $(am__append_9) $(am__append_12)
+strace_LDADD = libstrace.a $(clock_LIBS) $(timer_LIBS) $(am__append_6) \
+	$(am__append_10) $(am__append_13) $(CODE_COVERAGE_LIBS) \
+	$(am__append_14) $(am__append_18)
+noinst_LIBRARIES = libstrace.a $(am__append_15) $(am__append_19)
 libstrace_a_CPPFLAGS = $(strace_CPPFLAGS)
 libstrace_a_CFLAGS = $(strace_CFLAGS)
 libstrace_a_SOURCES = \
@@ -1223,6 +1316,8 @@
 	fstatfs64.c \
 	getpagesize.c \
 	ipc.c \
+	mmap_cache.c	\
+	mmap_cache.h	\
 	sigreturn.c	\
 	socketcall.c \
 	statfs.c \
@@ -1240,40 +1335,43 @@
 	caps1.h chdir.c chmod.c clone.c copy_file_range.c count.c \
 	defs.h delay.c delay.h desc.c dirent.c dirent64.c dm.c \
 	dyxlat.c empty.h epoll.c error_prints.c error_prints.h evdev.c \
-	evdev_mpers.c eventfd.c execve.c fadvise.c fallocate.c \
-	fanotify.c fchownat.c fcntl.c fetch_bpf_fprog.c \
+	evdev_mpers.c eventfd.c execve.c f_owner_ex.h 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 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 kvm.c largefile_wrappers.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 mmap_cache.c mmap_cache.h \
-	mmsghdr.c mount.c mpers_type.h mq.c msghdr.c msghdr.h mtd.c \
+	hdio.c hostname.c inotify.c inotify_ioctl.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 kvm.c largefile_wrappers.h ldt.c \
+	link.c linux/asm_stat.h linux/linux/signal.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 mmap_notify.c mmap_notify.h 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_netfilter.c netlink_netlink_diag.c \
+	netlink_crypto.c netlink_kobject_uevent.c \
+	netlink_kobject_uevent.h netlink_sock_diag.h \
+	netlink_inet_diag.c netlink_netfilter.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 retval.c \
-	retval.h riscv.c rt_sigframe.c rt_sigreturn.c rtc.c \
-	rtnl_addr.c rtnl_addrlabel.c rtnl_dcb.c rtnl_link.c rtnl_mdb.c \
+	perf_ioctl.c personality.c pkeys.c poll.c prctl.c \
+	print_aio_sigset.c print_dev_t.c print_group_req.c \
+	print_fields.h print_ifindex.c print_mac.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 retval.c retval.h \
+	riscv.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 s390.c \
 	sched.c sched_attr.h scsi.c seccomp.c sendfile.c sg_io_v3.c \
@@ -1287,7 +1385,8 @@
 	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 xmalloc.h xstring.h \
-	$(strace_SOURCES_check) $(am__append_1)
+	$(strace_SOURCES_check) $(am__append_1) $(am__append_2) \
+	$(am__append_7)
 strace_SOURCES_check = bpf_attr_check.c
 CODE_COVERAGE_BRANCH_COVERAGE = 1
 CODE_COVERAGE_GENHTML_OPTIONS = $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) \
@@ -1335,7 +1434,6 @@
 	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	\
@@ -1348,7 +1446,6 @@
 	linux/aarch64/set_error.c	\
 	linux/aarch64/set_scno.c	\
 	linux/aarch64/shuffle_scno.c	\
-	linux/aarch64/signalent1.h	\
 	linux/aarch64/syscallent.h	\
 	linux/aarch64/syscallent1.h	\
 	linux/alpha/arch_defs_.h	\
@@ -1606,7 +1703,6 @@
 	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	\
@@ -1620,7 +1716,6 @@
 	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	\
@@ -1629,7 +1724,6 @@
 	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	\
@@ -1640,7 +1734,6 @@
 	linux/riscv/raw_syscall.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		\
@@ -1667,7 +1760,6 @@
 	linux/s390x/arch_regs.h		\
 	linux/s390x/arch_rt_sigframe.c	\
 	linux/s390x/arch_sigreturn.c	\
-	linux/s390x/errnoent1.h		\
 	linux/s390x/get_error.c		\
 	linux/s390x/get_scno.c		\
 	linux/s390x/get_syscall_args.c	\
@@ -1679,7 +1771,6 @@
 	linux/s390x/rt_sigframe.h	\
 	linux/s390x/set_error.c		\
 	linux/s390x/set_scno.c		\
-	linux/s390x/signalent1.h	\
 	linux/s390x/syscallent.h	\
 	linux/s390x/syscallent1.h	\
 	linux/s390x/userent.h		\
@@ -1745,7 +1836,6 @@
 	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	\
@@ -1758,7 +1848,6 @@
 	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		\
@@ -1769,7 +1858,6 @@
 	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	\
@@ -1781,7 +1869,6 @@
 	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		\
@@ -1794,7 +1881,6 @@
 	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	\
@@ -1807,7 +1893,6 @@
 	linux/x32/set_error.c		\
 	linux/x32/set_scno.c		\
 	linux/x32/shuffle_scno.c	\
-	linux/x32/signalent1.h		\
 	linux/x32/syscallent.h		\
 	linux/x32/syscallent1.h		\
 	linux/x32/userent.h		\
@@ -1817,8 +1902,6 @@
 	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/get_error.c	\
 	linux/x86_64/get_scno.c		\
 	linux/x86_64/get_syscall_args.c	\
@@ -1835,8 +1918,6 @@
 	linux/x86_64/set_error.c	\
 	linux/x86_64/set_scno.c		\
 	linux/x86_64/shuffle_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	\
@@ -1876,7 +1957,7 @@
 
 syscallent_patterns = $(patsubst %,\%/%,$(syscallent_names))
 syscallent_files = $(filter $(syscallent_patterns),$(EXTRA_DIST))
-today = $(shell date +%Y-%m-%d)
+today = $(shell LC_TIME=C date -u +%Y-%m-%d)
 version_regexp = $(subst .,\.,$(VERSION))
 news_check_regexp = 'Noteworthy changes in release $(version_regexp) ($(today))'
 ioctlsort_CC = $(CC_FOR_BUILD)
@@ -1890,12 +1971,12 @@
 ioctl_redefs_h = $(filter-out ioctl_redefs0.h,$(subst ioctlent,ioctl_redefs,$(ioctlent_h)))
 BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) bpf_attr_check.c \
 	native_printer_decls.h native_printer_defs.h printers.h sen.h \
-	sys_func.h .version scno.h $(am__append_10) $(am__append_14)
+	sys_func.h .version scno.h $(am__append_16) $(am__append_20)
 CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \
 	ioctl_iocdef.h ioctl_iocdef.i bpf_attr_check.c \
 	native_printer_decls.h native_printer_defs.h printers.h sen.h \
-	sys_func.h syscallent.i scno.h $(am__append_11) \
-	$(am__append_15)
+	sys_func.h syscallent.i scno.h $(am__append_17) \
+	$(am__append_21)
 DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h
 SCNO_CPPFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 		$(ARCH_MFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS)
@@ -1905,7 +1986,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_mpers.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 
+mpers_source_files = block.c btrfs.c dirent.c evdev_mpers.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 perf_ioctl.c print_aio_sigset.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))
@@ -2114,6 +2195,8 @@
 @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-perf_ioctl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_m32_a-print_aio_sigset.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@
@@ -2152,6 +2235,8 @@
 @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-perf_ioctl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpers_mx32_a-print_aio_sigset.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@
@@ -2178,6 +2263,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstrace_a-fstatfs64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstrace_a-getpagesize.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstrace_a-ipc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstrace_a-mmap_cache.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstrace_a-sigreturn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstrace_a-socketcall.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstrace_a-statfs.Po@am__quote@
@@ -2245,6 +2331,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-hdio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-hostname.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-inotify.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-inotify_ioctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-io.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-ioctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-ioperm.Po@am__quote@
@@ -2269,7 +2356,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-membarrier.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-memfd_create.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-mknod.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-mmap_cache.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-mmap_notify.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-mmsghdr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-mount.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-mq.Po@am__quote@
@@ -2279,6 +2366,7 @@
 @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_kobject_uevent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-netlink_netfilter.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@
@@ -2296,13 +2384,16 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-or1k_atomic.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-pathtrace.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-perf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-perf_ioctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-personality.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-pkeys.Po@am__quote@
 @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_aio_sigset.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_mac.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@
@@ -2382,6 +2473,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-umask.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-umount.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-uname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-unwind-libdw.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-unwind-libunwind.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-unwind.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strace-userfaultfd.Po@am__quote@
@@ -2647,6 +2739,34 @@
 @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-perf_ioctl.o: perf_ioctl.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-perf_ioctl.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-perf_ioctl.Tpo -c -o libmpers_m32_a-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-perf_ioctl.Tpo $(DEPDIR)/libmpers_m32_a-perf_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='perf_ioctl.c' object='libmpers_m32_a-perf_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) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+
+libmpers_m32_a-perf_ioctl.obj: perf_ioctl.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-perf_ioctl.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-perf_ioctl.Tpo -c -o libmpers_m32_a-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-perf_ioctl.Tpo $(DEPDIR)/libmpers_m32_a-perf_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='perf_ioctl.c' object='libmpers_m32_a-perf_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) $(libmpers_m32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_m32_a_CFLAGS) $(CFLAGS) -c -o libmpers_m32_a-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+
+libmpers_m32_a-print_aio_sigset.o: print_aio_sigset.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_aio_sigset.o -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Tpo -c -o libmpers_m32_a-print_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Tpo $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_aio_sigset.c' object='libmpers_m32_a-print_aio_sigset.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_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+
+libmpers_m32_a-print_aio_sigset.obj: print_aio_sigset.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_aio_sigset.obj -MD -MP -MF $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Tpo -c -o libmpers_m32_a-print_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Tpo $(DEPDIR)/libmpers_m32_a-print_aio_sigset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_aio_sigset.c' object='libmpers_m32_a-print_aio_sigset.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_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.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
@@ -3179,6 +3299,34 @@
 @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-perf_ioctl.o: perf_ioctl.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-perf_ioctl.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Tpo -c -o libmpers_mx32_a-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Tpo $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='perf_ioctl.c' object='libmpers_mx32_a-perf_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) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+
+libmpers_mx32_a-perf_ioctl.obj: perf_ioctl.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-perf_ioctl.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Tpo -c -o libmpers_mx32_a-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Tpo $(DEPDIR)/libmpers_mx32_a-perf_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='perf_ioctl.c' object='libmpers_mx32_a-perf_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) $(libmpers_mx32_a_CPPFLAGS) $(CPPFLAGS) $(libmpers_mx32_a_CFLAGS) $(CFLAGS) -c -o libmpers_mx32_a-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+
+libmpers_mx32_a-print_aio_sigset.o: print_aio_sigset.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_aio_sigset.o -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Tpo -c -o libmpers_mx32_a-print_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Tpo $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_aio_sigset.c' object='libmpers_mx32_a-print_aio_sigset.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_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+
+libmpers_mx32_a-print_aio_sigset.obj: print_aio_sigset.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_aio_sigset.obj -MD -MP -MF $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Tpo -c -o libmpers_mx32_a-print_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Tpo $(DEPDIR)/libmpers_mx32_a-print_aio_sigset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_aio_sigset.c' object='libmpers_mx32_a-print_aio_sigset.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_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.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
@@ -3543,6 +3691,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(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-mmap_cache.o: mmap_cache.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-mmap_cache.o -MD -MP -MF $(DEPDIR)/libstrace_a-mmap_cache.Tpo -c -o libstrace_a-mmap_cache.o `test -f 'mmap_cache.c' || echo '$(srcdir)/'`mmap_cache.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-mmap_cache.Tpo $(DEPDIR)/libstrace_a-mmap_cache.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap_cache.c' object='libstrace_a-mmap_cache.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) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-mmap_cache.o `test -f 'mmap_cache.c' || echo '$(srcdir)/'`mmap_cache.c
+
+libstrace_a-mmap_cache.obj: mmap_cache.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -MT libstrace_a-mmap_cache.obj -MD -MP -MF $(DEPDIR)/libstrace_a-mmap_cache.Tpo -c -o libstrace_a-mmap_cache.obj `if test -f 'mmap_cache.c'; then $(CYGPATH_W) 'mmap_cache.c'; else $(CYGPATH_W) '$(srcdir)/mmap_cache.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-mmap_cache.Tpo $(DEPDIR)/libstrace_a-mmap_cache.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap_cache.c' object='libstrace_a-mmap_cache.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) $(libstrace_a_CPPFLAGS) $(CPPFLAGS) $(libstrace_a_CFLAGS) $(CFLAGS) -c -o libstrace_a-mmap_cache.obj `if test -f 'mmap_cache.c'; then $(CYGPATH_W) 'mmap_cache.c'; else $(CYGPATH_W) '$(srcdir)/mmap_cache.c'; fi`
+
 libstrace_a-sigreturn.o: sigreturn.c
 @am__fastdepCC_TRUE@	$(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__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libstrace_a-sigreturn.Tpo $(DEPDIR)/libstrace_a-sigreturn.Po
@@ -4467,6 +4629,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-inotify.obj `if test -f 'inotify.c'; then $(CYGPATH_W) 'inotify.c'; else $(CYGPATH_W) '$(srcdir)/inotify.c'; fi`
 
+strace-inotify_ioctl.o: inotify_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-inotify_ioctl.o -MD -MP -MF $(DEPDIR)/strace-inotify_ioctl.Tpo -c -o strace-inotify_ioctl.o `test -f 'inotify_ioctl.c' || echo '$(srcdir)/'`inotify_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-inotify_ioctl.Tpo $(DEPDIR)/strace-inotify_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='inotify_ioctl.c' object='strace-inotify_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-inotify_ioctl.o `test -f 'inotify_ioctl.c' || echo '$(srcdir)/'`inotify_ioctl.c
+
+strace-inotify_ioctl.obj: inotify_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-inotify_ioctl.obj -MD -MP -MF $(DEPDIR)/strace-inotify_ioctl.Tpo -c -o strace-inotify_ioctl.obj `if test -f 'inotify_ioctl.c'; then $(CYGPATH_W) 'inotify_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/inotify_ioctl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-inotify_ioctl.Tpo $(DEPDIR)/strace-inotify_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='inotify_ioctl.c' object='strace-inotify_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-inotify_ioctl.obj `if test -f 'inotify_ioctl.c'; then $(CYGPATH_W) 'inotify_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/inotify_ioctl.c'; fi`
+
 strace-io.o: io.c
 @am__fastdepCC_TRUE@	$(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__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-io.Tpo $(DEPDIR)/strace-io.Po
@@ -4803,19 +4979,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-mknod.obj `if test -f 'mknod.c'; then $(CYGPATH_W) 'mknod.c'; else $(CYGPATH_W) '$(srcdir)/mknod.c'; fi`
 
-strace-mmap_cache.o: mmap_cache.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmap_cache.o -MD -MP -MF $(DEPDIR)/strace-mmap_cache.Tpo -c -o strace-mmap_cache.o `test -f 'mmap_cache.c' || echo '$(srcdir)/'`mmap_cache.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmap_cache.Tpo $(DEPDIR)/strace-mmap_cache.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap_cache.c' object='strace-mmap_cache.o' libtool=no @AMDEPBACKSLASH@
+strace-mmap_notify.o: mmap_notify.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmap_notify.o -MD -MP -MF $(DEPDIR)/strace-mmap_notify.Tpo -c -o strace-mmap_notify.o `test -f 'mmap_notify.c' || echo '$(srcdir)/'`mmap_notify.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmap_notify.Tpo $(DEPDIR)/strace-mmap_notify.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap_notify.c' object='strace-mmap_notify.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-mmap_cache.o `test -f 'mmap_cache.c' || echo '$(srcdir)/'`mmap_cache.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mmap_notify.o `test -f 'mmap_notify.c' || echo '$(srcdir)/'`mmap_notify.c
 
-strace-mmap_cache.obj: mmap_cache.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmap_cache.obj -MD -MP -MF $(DEPDIR)/strace-mmap_cache.Tpo -c -o strace-mmap_cache.obj `if test -f 'mmap_cache.c'; then $(CYGPATH_W) 'mmap_cache.c'; else $(CYGPATH_W) '$(srcdir)/mmap_cache.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmap_cache.Tpo $(DEPDIR)/strace-mmap_cache.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap_cache.c' object='strace-mmap_cache.obj' libtool=no @AMDEPBACKSLASH@
+strace-mmap_notify.obj: mmap_notify.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-mmap_notify.obj -MD -MP -MF $(DEPDIR)/strace-mmap_notify.Tpo -c -o strace-mmap_notify.obj `if test -f 'mmap_notify.c'; then $(CYGPATH_W) 'mmap_notify.c'; else $(CYGPATH_W) '$(srcdir)/mmap_notify.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-mmap_notify.Tpo $(DEPDIR)/strace-mmap_notify.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap_notify.c' object='strace-mmap_notify.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-mmap_cache.obj `if test -f 'mmap_cache.c'; then $(CYGPATH_W) 'mmap_cache.c'; else $(CYGPATH_W) '$(srcdir)/mmap_cache.c'; fi`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -c -o strace-mmap_notify.obj `if test -f 'mmap_notify.c'; then $(CYGPATH_W) 'mmap_notify.c'; else $(CYGPATH_W) '$(srcdir)/mmap_notify.c'; fi`
 
 strace-mmsghdr.o: mmsghdr.c
 @am__fastdepCC_TRUE@	$(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
@@ -4929,6 +5105,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_crypto.obj `if test -f 'netlink_crypto.c'; then $(CYGPATH_W) 'netlink_crypto.c'; else $(CYGPATH_W) '$(srcdir)/netlink_crypto.c'; fi`
 
+strace-netlink_kobject_uevent.o: netlink_kobject_uevent.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_kobject_uevent.o -MD -MP -MF $(DEPDIR)/strace-netlink_kobject_uevent.Tpo -c -o strace-netlink_kobject_uevent.o `test -f 'netlink_kobject_uevent.c' || echo '$(srcdir)/'`netlink_kobject_uevent.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_kobject_uevent.Tpo $(DEPDIR)/strace-netlink_kobject_uevent.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_kobject_uevent.c' object='strace-netlink_kobject_uevent.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_kobject_uevent.o `test -f 'netlink_kobject_uevent.c' || echo '$(srcdir)/'`netlink_kobject_uevent.c
+
+strace-netlink_kobject_uevent.obj: netlink_kobject_uevent.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-netlink_kobject_uevent.obj -MD -MP -MF $(DEPDIR)/strace-netlink_kobject_uevent.Tpo -c -o strace-netlink_kobject_uevent.obj `if test -f 'netlink_kobject_uevent.c'; then $(CYGPATH_W) 'netlink_kobject_uevent.c'; else $(CYGPATH_W) '$(srcdir)/netlink_kobject_uevent.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-netlink_kobject_uevent.Tpo $(DEPDIR)/strace-netlink_kobject_uevent.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netlink_kobject_uevent.c' object='strace-netlink_kobject_uevent.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_kobject_uevent.obj `if test -f 'netlink_kobject_uevent.c'; then $(CYGPATH_W) 'netlink_kobject_uevent.c'; else $(CYGPATH_W) '$(srcdir)/netlink_kobject_uevent.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
@@ -5181,6 +5371,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-perf.obj `if test -f 'perf.c'; then $(CYGPATH_W) 'perf.c'; else $(CYGPATH_W) '$(srcdir)/perf.c'; fi`
 
+strace-perf_ioctl.o: perf_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-perf_ioctl.o -MD -MP -MF $(DEPDIR)/strace-perf_ioctl.Tpo -c -o strace-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-perf_ioctl.Tpo $(DEPDIR)/strace-perf_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='perf_ioctl.c' object='strace-perf_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-perf_ioctl.o `test -f 'perf_ioctl.c' || echo '$(srcdir)/'`perf_ioctl.c
+
+strace-perf_ioctl.obj: perf_ioctl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-perf_ioctl.obj -MD -MP -MF $(DEPDIR)/strace-perf_ioctl.Tpo -c -o strace-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-perf_ioctl.Tpo $(DEPDIR)/strace-perf_ioctl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='perf_ioctl.c' object='strace-perf_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-perf_ioctl.obj `if test -f 'perf_ioctl.c'; then $(CYGPATH_W) 'perf_ioctl.c'; else $(CYGPATH_W) '$(srcdir)/perf_ioctl.c'; fi`
+
 strace-personality.o: personality.c
 @am__fastdepCC_TRUE@	$(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__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-personality.Tpo $(DEPDIR)/strace-personality.Po
@@ -5237,6 +5441,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-prctl.obj `if test -f 'prctl.c'; then $(CYGPATH_W) 'prctl.c'; else $(CYGPATH_W) '$(srcdir)/prctl.c'; fi`
 
+strace-print_aio_sigset.o: print_aio_sigset.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_aio_sigset.o -MD -MP -MF $(DEPDIR)/strace-print_aio_sigset.Tpo -c -o strace-print_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_aio_sigset.Tpo $(DEPDIR)/strace-print_aio_sigset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_aio_sigset.c' object='strace-print_aio_sigset.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_aio_sigset.o `test -f 'print_aio_sigset.c' || echo '$(srcdir)/'`print_aio_sigset.c
+
+strace-print_aio_sigset.obj: print_aio_sigset.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_aio_sigset.obj -MD -MP -MF $(DEPDIR)/strace-print_aio_sigset.Tpo -c -o strace-print_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_aio_sigset.Tpo $(DEPDIR)/strace-print_aio_sigset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_aio_sigset.c' object='strace-print_aio_sigset.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_aio_sigset.obj `if test -f 'print_aio_sigset.c'; then $(CYGPATH_W) 'print_aio_sigset.c'; else $(CYGPATH_W) '$(srcdir)/print_aio_sigset.c'; fi`
+
 strace-print_dev_t.o: print_dev_t.c
 @am__fastdepCC_TRUE@	$(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__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_dev_t.Tpo $(DEPDIR)/strace-print_dev_t.Po
@@ -5279,6 +5497,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-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_mac.o: print_mac.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_mac.o -MD -MP -MF $(DEPDIR)/strace-print_mac.Tpo -c -o strace-print_mac.o `test -f 'print_mac.c' || echo '$(srcdir)/'`print_mac.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_mac.Tpo $(DEPDIR)/strace-print_mac.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_mac.c' object='strace-print_mac.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_mac.o `test -f 'print_mac.c' || echo '$(srcdir)/'`print_mac.c
+
+strace-print_mac.obj: print_mac.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-print_mac.obj -MD -MP -MF $(DEPDIR)/strace-print_mac.Tpo -c -o strace-print_mac.obj `if test -f 'print_mac.c'; then $(CYGPATH_W) 'print_mac.c'; else $(CYGPATH_W) '$(srcdir)/print_mac.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-print_mac.Tpo $(DEPDIR)/strace-print_mac.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='print_mac.c' object='strace-print_mac.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_mac.obj `if test -f 'print_mac.c'; then $(CYGPATH_W) 'print_mac.c'; else $(CYGPATH_W) '$(srcdir)/print_mac.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
@@ -6553,6 +6785,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-unwind.obj `if test -f 'unwind.c'; then $(CYGPATH_W) 'unwind.c'; else $(CYGPATH_W) '$(srcdir)/unwind.c'; fi`
 
+strace-unwind-libdw.o: unwind-libdw.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-unwind-libdw.o -MD -MP -MF $(DEPDIR)/strace-unwind-libdw.Tpo -c -o strace-unwind-libdw.o `test -f 'unwind-libdw.c' || echo '$(srcdir)/'`unwind-libdw.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-unwind-libdw.Tpo $(DEPDIR)/strace-unwind-libdw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unwind-libdw.c' object='strace-unwind-libdw.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-unwind-libdw.o `test -f 'unwind-libdw.c' || echo '$(srcdir)/'`unwind-libdw.c
+
+strace-unwind-libdw.obj: unwind-libdw.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-unwind-libdw.obj -MD -MP -MF $(DEPDIR)/strace-unwind-libdw.Tpo -c -o strace-unwind-libdw.obj `if test -f 'unwind-libdw.c'; then $(CYGPATH_W) 'unwind-libdw.c'; else $(CYGPATH_W) '$(srcdir)/unwind-libdw.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-unwind-libdw.Tpo $(DEPDIR)/strace-unwind-libdw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unwind-libdw.c' object='strace-unwind-libdw.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-unwind-libdw.obj `if test -f 'unwind-libdw.c'; then $(CYGPATH_W) 'unwind-libdw.c'; else $(CYGPATH_W) '$(srcdir)/unwind-libdw.c'; fi`
+
 strace-unwind-libunwind.o: unwind-libunwind.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(strace_CPPFLAGS) $(CPPFLAGS) $(strace_CFLAGS) $(CFLAGS) -MT strace-unwind-libunwind.o -MD -MP -MF $(DEPDIR)/strace-unwind-libunwind.Tpo -c -o strace-unwind-libunwind.o `test -f 'unwind-libunwind.c' || echo '$(srcdir)/'`unwind-libunwind.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/strace-unwind-libunwind.Tpo $(DEPDIR)/strace-unwind-libunwind.Po
@@ -7105,8 +7351,14 @@
 	$(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/bdaddr_types.h: $(top_srcdir)/xlat/bdaddr_types.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/bluetooth_l2_cid.h: $(top_srcdir)/xlat/bluetooth_l2_cid.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/bluetooth_l2_psm.h: $(top_srcdir)/xlat/bluetooth_l2_psm.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
@@ -7141,6 +7393,8 @@
 	$(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_query_flags.h: $(top_srcdir)/xlat/bpf_query_flags.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
@@ -7165,6 +7419,8 @@
 	$(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_cont_reading_from_srcdev_mode.h: $(top_srcdir)/xlat/btrfs_cont_reading_from_srcdev_mode.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
@@ -7207,6 +7463,10 @@
 	$(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/caif_protocols.h: $(top_srcdir)/xlat/caif_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/can_protocols.h: $(top_srcdir)/xlat/can_protocols.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
@@ -7233,6 +7493,18 @@
 	$(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/ebpf_class.h: $(top_srcdir)/xlat/ebpf_class.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_mode.h: $(top_srcdir)/xlat/ebpf_mode.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_op_alu.h: $(top_srcdir)/xlat/ebpf_op_alu.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_op_jmp.h: $(top_srcdir)/xlat/ebpf_op_jmp.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_regs.h: $(top_srcdir)/xlat/ebpf_regs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_size.h: $(top_srcdir)/xlat/ebpf_size.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
@@ -7285,8 +7557,6 @@
 	$(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
@@ -7311,9 +7581,11 @@
 	$(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
+$(top_srcdir)/xlat/getsock_ip_options.h: $(top_srcdir)/xlat/getsock_ip_options.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
+$(top_srcdir)/xlat/getsock_ipv6_options.h: $(top_srcdir)/xlat/getsock_ipv6_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/getsock_options.h: $(top_srcdir)/xlat/getsock_options.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 $< $@
@@ -7333,6 +7605,14 @@
 	$(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/in6_addr_gen_mode.h: $(top_srcdir)/xlat/in6_addr_gen_mode.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet6_devconf_indices.h: $(top_srcdir)/xlat/inet6_devconf_indices.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet6_if_flags.h: $(top_srcdir)/xlat/inet6_if_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet_devconf_indices.h: $(top_srcdir)/xlat/inet_devconf_indices.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
@@ -7359,10 +7639,18 @@
 	$(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/ipc_private.h: $(top_srcdir)/xlat/ipc_private.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/irda_protocols.h: $(top_srcdir)/xlat/irda_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/isdn_protocols.h: $(top_srcdir)/xlat/isdn_protocols.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/kcm_protocols.h: $(top_srcdir)/xlat/kcm_protocols.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
@@ -7471,6 +7759,8 @@
 	$(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_sk_meminfo_indices.h: $(top_srcdir)/xlat/netlink_sk_meminfo_indices.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_socket_flags.h: $(top_srcdir)/xlat/netlink_socket_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_states.h: $(top_srcdir)/xlat/netlink_states.in $(top_srcdir)/xlat/gen.sh
@@ -7499,6 +7789,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nf_ulog_msg_types.h: $(top_srcdir)/xlat/nf_ulog_msg_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nfc_protocols.h: $(top_srcdir)/xlat/nfc_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(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
@@ -7521,6 +7813,8 @@
 	$(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/numa_node.h: $(top_srcdir)/xlat/numa_node.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
@@ -7551,6 +7845,10 @@
 	$(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_ioctl_cmds.h: $(top_srcdir)/xlat/perf_ioctl_cmds.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/perf_ioctl_flags.h: $(top_srcdir)/xlat/perf_ioctl_flags.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
@@ -7559,6 +7857,8 @@
 	$(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/phonet_protocols.h: $(top_srcdir)/xlat/phonet_protocols.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
@@ -7577,6 +7877,12 @@
 	$(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_spec_cmds.h: $(top_srcdir)/xlat/pr_spec_cmds.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/pr_spec_get_store_bypass_flags.h: $(top_srcdir)/xlat/pr_spec_get_store_bypass_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/pr_spec_set_store_bypass_flags.h: $(top_srcdir)/xlat/pr_spec_set_store_bypass_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/pr_sve_vl_flags.h: $(top_srcdir)/xlat/pr_sve_vl_flags.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
@@ -7629,12 +7935,20 @@
 	$(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_af_spec_inet6_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_af_spec_inet6_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_af_spec_inet_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_af_spec_inet_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_events.h: $(top_srcdir)/xlat/rtnl_ifla_events.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_info_data_bridge_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_info_data_bridge_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_info_data_tun_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_info_data_tun_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
@@ -7713,9 +8027,11 @@
 	$(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
+$(top_srcdir)/xlat/setsock_ip_options.h: $(top_srcdir)/xlat/setsock_ip_options.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
+$(top_srcdir)/xlat/setsock_ipv6_options.h: $(top_srcdir)/xlat/setsock_ipv6_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/setsock_options.h: $(top_srcdir)/xlat/setsock_options.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 $< $@
@@ -7767,38 +8083,78 @@
 	$(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/skf_off.h: $(top_srcdir)/xlat/skf_off.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_protocols.h: $(top_srcdir)/xlat/smc_protocols.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/snmp_icmp6_stats.h: $(top_srcdir)/xlat/snmp_icmp6_stats.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/snmp_ip_stats.h: $(top_srcdir)/xlat/snmp_ip_stats.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_alg_options.h: $(top_srcdir)/xlat/sock_alg_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_bluetooth_options.h: $(top_srcdir)/xlat/sock_bluetooth_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_caif_options.h: $(top_srcdir)/xlat/sock_caif_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_dccp_options.h: $(top_srcdir)/xlat/sock_dccp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_ip_options.h: $(top_srcdir)/xlat/sock_ip_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_ipv6_options.h: $(top_srcdir)/xlat/sock_ipv6_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_ipx_options.h: $(top_srcdir)/xlat/sock_ipx_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_irda_options.h: $(top_srcdir)/xlat/sock_irda_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_iucv_options.h: $(top_srcdir)/xlat/sock_iucv_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_kcm_options.h: $(top_srcdir)/xlat/sock_kcm_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_llc_options.h: $(top_srcdir)/xlat/sock_llc_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_netlink_options.h: $(top_srcdir)/xlat/sock_netlink_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_nfcllcp_options.h: $(top_srcdir)/xlat/sock_nfcllcp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_options.h: $(top_srcdir)/xlat/sock_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_packet_options.h: $(top_srcdir)/xlat/sock_packet_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_pnp_options.h: $(top_srcdir)/xlat/sock_pnp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_pppol2tp_options.h: $(top_srcdir)/xlat/sock_pppol2tp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_raw_options.h: $(top_srcdir)/xlat/sock_raw_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_rds_options.h: $(top_srcdir)/xlat/sock_rds_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_rxrpc_options.h: $(top_srcdir)/xlat/sock_rxrpc_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_sctp_options.h: $(top_srcdir)/xlat/sock_sctp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_tcp_options.h: $(top_srcdir)/xlat/sock_tcp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_tipc_options.h: $(top_srcdir)/xlat/sock_tipc_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_tls_options.h: $(top_srcdir)/xlat/sock_tls_options.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/sock_udp_options.h: $(top_srcdir)/xlat/sock_udp_options.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/socknetlinkoptions.h: $(top_srcdir)/xlat/socknetlinkoptions.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/sparc_kern_features.h: $(top_srcdir)/xlat/sparc_kern_features.in $(top_srcdir)/xlat/gen.sh
@@ -7853,6 +8209,8 @@
 	$(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/tun_device_types.h: $(top_srcdir)/xlat/tun_device_types.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
@@ -7893,6 +8251,8 @@
 	$(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_id_bases.h: $(top_srcdir)/xlat/v4l2_control_id_bases.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
diff --git a/NEWS b/NEWS
index f1035c7..29602be 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,56 @@
+Noteworthy changes in release 4.23 (2018-06-14)
+===============================================
+
+* Changes in behaviour
+  * On x32 personality, 64-bit syscalls (such as readv) are now shown with "#64"
+    suffix instead of "64:" prefix.  Unlike the old names, these new names
+    can be used in syscall qualification expressions.
+  * Changed error number output format: error numbers are consistently
+    printed as "-1 ECONST (Error description)"
+    for known errors and as "-1 (errno 123)" for unknown errors,
+    regardless of -e raw qualification settings.  One can specify
+    -X raw for displaying raw error numbers unconditionally.
+  * Unfetchable addresses inside arrays are now printed as comments.
+  * Obsolete IA-32 mode syscall names are no longer printed on ia64.
+
+* Improvements
+  * Implemented libdw backend for -k option, configured at build time
+    using --with-libdw option.
+    Whether -k option is compiled is now configured at build time
+    using --enable-stacktrace option.
+  * Added -X option for configuring xlat output formatting (addresses
+    Debian bug #692915).
+  * Added support for personality designation ("64", "32", or "x32") to syscall
+    qualifications in -e trace expressions.
+  * Implemented injection of syscalls with no side effects as an alternative
+    to injection of an invalid syscall (-e inject=SET:syscall= expression).
+  * Improved support for reproducible builds (addresses Debian bug #896016).
+  * Implemented decoding of BPF_PROG_QUERY and BPF_RAW_TRACEPOINT_OPEN bpf
+    syscall commands.
+  * Implemented decoding of INOTIFY_IOC_SETNEXTWD and PERF_EVENT_IOC_* ioctl
+    commands.
+  * Implemented decoding of PR_GET_SPECULATION_CTRL and PR_SET_SPECULATION_CTRL
+    prctl syscall options.
+  * Enhanced decoding of bpf, getsockopt, setsockopt, and socket syscalls.
+  * Enhanced decoding of NETLINK_KOBJECT_UEVENT and NETLINK_ROUTE protocols.
+  * Enhanced decoding of *_DIAG_MEMINFO netlink attributes.
+  * Enhanced decoding of BTRFS_*, FS_IOC_*, SIOCGIFHWADDR, and SIOCSIFHWADDR
+    ioctl commands.
+  * Enhanced decoding of AF_BLUETOOTH socket addresses.
+  * Implemented decoding of io_pgetevent syscall.
+  * Wired up rseq syscall.
+  * Updated lists of ADJ_*, BPF_*, BPF_F_*, BPF_PROG_TYPE_*, ETH_P_*, FPE_*,
+    IFF_*, IPPROTO_*, MAP_*, MS_*, MSG_*, NETLINK_*, PACKET_*, PROT_*, SCTP_*,
+    SECCOMP_FILTER_FLAG_*, SEGV_*, SEM_*, SHM_*, SW_*, V4L2_CID_*,
+    V4L2_CTRL_CLASS_*, and V4L2_PIX_FMT_* constants.
+  * Updated lists of ioctl commands from Linux 4.17.
+
+* Bug fixes
+  * Fixed decoding of msgtyp argument of msgrcv syscall.
+  * Fixed fallback definitions for F_*, MCL_*, MSG_ZEROCOPY, SI_*,
+    and SOL_SOCKET constants.
+  * Fixed -e trace=%pure expression on mips.
+
 Noteworthy changes in release 4.22 (2018-04-05)
 ===============================================
 
diff --git a/aclocal.m4 b/aclocal.m4
index 1d2ff00..6cc46ab 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1205,6 +1205,10 @@
 m4_include([m4/ax_valgrind_check.m4])
 m4_include([m4/bpf_attr.m4])
 m4_include([m4/mpers.m4])
+m4_include([m4/st_demangle.m4])
+m4_include([m4/st_libdw.m4])
+m4_include([m4/st_libunwind.m4])
 m4_include([m4/st_save_restore_var.m4])
+m4_include([m4/st_stacktrace.m4])
 m4_include([m4/st_warn_cflags.m4])
 m4_include([m4/warnings.m4])
diff --git a/aio.c b/aio.c
index 600f88e..8a6741b 100644
--- a/aio.c
+++ b/aio.c
@@ -3,7 +3,7 @@
  * 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.
+ * Copyright (c) 1999-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -196,7 +196,7 @@
 		printaddr(addr);
 	else
 		print_array(tcp, addr, nr, &iocbp, current_wordsize,
-			    umoven_or_printaddr, print_iocbp, 0);
+			    tfetch_mem, print_iocbp, 0);
 
 	return RVAL_DECODED;
 }
@@ -238,7 +238,8 @@
 	return 0;
 }
 
-SYS_FUNC(io_getevents)
+static int
+print_io_getevents(struct tcb *tcp, bool has_usig)
 {
 	if (entering(tcp)) {
 		printaddr(tcp->u_arg[0]);
@@ -248,16 +249,30 @@
 	} else {
 		struct io_event buf;
 		print_array(tcp, tcp->u_arg[3], tcp->u_rval, &buf, sizeof(buf),
-			    umoven_or_printaddr, print_io_event, 0);
+			    tfetch_mem, print_io_event, 0);
 		tprints(", ");
 		/*
-		 * Since the timeout parameter is read by the kernel
+		 * Since the timeout and usig parameters are read by the kernel
 		 * on entering syscall, it has to be decoded the same way
 		 * whether the syscall has failed or not.
 		 */
 		temporarily_clear_syserror(tcp);
 		print_timespec(tcp, tcp->u_arg[4]);
+		if (has_usig) {
+			tprints(", ");
+			print_aio_sigset(tcp, tcp->u_arg[5]);
+		}
 		restore_cleared_syserror(tcp);
 	}
 	return 0;
 }
+
+SYS_FUNC(io_getevents)
+{
+	return print_io_getevents(tcp, false);
+}
+
+SYS_FUNC(io_pgetevents)
+{
+	return print_io_getevents(tcp, true);
+}
diff --git a/basic_filters.c b/basic_filters.c
index 4ea23b5..6071a67 100644
--- a/basic_filters.c
+++ b/basic_filters.c
@@ -27,25 +27,82 @@
  */
 
 #include "defs.h"
-#include "number_set.h"
-#include "filter.h"
+
 #include <regex.h>
 
+#include "filter.h"
+#include "number_set.h"
+#include "xstring.h"
+
+
+/**
+ * Checks whether a @-separated personality specification suffix is present.
+ * Personality suffix is a one of strings stored in personality_designators
+ * array.
+ *
+ * @param[in]  s Specification string to check.
+ * @param[out] p Where to store personality number if it is found.
+ * @return       If personality is found, the provided string is copied without
+ *               suffix and returned as a result (callee should de-alllocate it
+ *               with free() after use), and personality number is written to p.
+ *               Otherwise, NULL is returned and p is untouched.
+ */
+static char *
+qualify_syscall_separate_personality(const char *s, unsigned int *p)
+{
+	char *pos = strchr(s, '@');
+
+	if (!pos)
+		return NULL;
+
+	for (unsigned int i = 0; i < SUPPORTED_PERSONALITIES; i++) {
+		if (!strcmp(pos + 1, personality_designators[i])) {
+			*p = i;
+			return xstrndup(s, pos - s);
+		}
+	}
+
+	error_msg_and_help("incorrect personality designator '%s'"
+			   " in qualification '%s'", pos + 1, s);
+}
+
+static bool
+qualify_syscall_number_personality(int n, unsigned int p,
+				   struct number_set *set)
+{
+	if ((unsigned int) n >= nsyscall_vec[p])
+		return false;
+
+	add_number_to_set_array(n, set, p);
+
+	return true;
+}
+
 static bool
 qualify_syscall_number(const char *s, struct number_set *set)
 {
-	int n = string_to_uint(s);
+	unsigned int p;
+	char *num_str = qualify_syscall_separate_personality(s, &p);
+	int n;
+
+	if (num_str) {
+		n = string_to_uint(num_str);
+		free(num_str);
+
+		if (n < 0)
+			return false;
+
+		return qualify_syscall_number_personality(n, p, set);
+	}
+
+	n = string_to_uint(s);
 	if (n < 0)
 		return false;
 
 	bool done = false;
 
-	for (unsigned int p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
-		if ((unsigned) n >= nsyscall_vec[p])
-			continue;
-		add_number_to_set_array(n, set, p);
-		done = true;
-	}
+	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p)
+		done |= qualify_syscall_number_personality(n, p, set);
 
 	return done;
 }
@@ -75,12 +132,26 @@
 		for (unsigned int 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) {
+				char name_buf[128];
+				char *pos = stpcpy(name_buf,
+						   sysent_vec[p][i].sys_name);
+
+				(void) xappendstr(name_buf, pos, "@%s",
+						  personality_designators[p]);
+
+				rc = regexec(&preg, name_buf, 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;
 		}
@@ -164,23 +235,41 @@
 }
 
 static bool
-qualify_syscall_name(const char *s, struct number_set *set)
+qualify_syscall_name_personality(const char *s, unsigned int p,
+				 struct number_set *set)
 {
 	bool found = false;
 
-	for (unsigned int p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
-		for (kernel_long_t scno = 0;
-		     (scno = scno_by_name(s, p, scno)) >= 0;
-		     ++scno) {
-			add_number_to_set_array(scno, set, p);
-			found = true;
-		}
+	for (kernel_long_t scno = 0; (scno = scno_by_name(s, p, scno)) >= 0;
+	     ++scno) {
+		add_number_to_set_array(scno, set, p);
+		found = true;
 	}
 
 	return found;
 }
 
 static bool
+qualify_syscall_name(const char *s, struct number_set *set)
+{
+	unsigned int p;
+	char *name_str = qualify_syscall_separate_personality(s, &p);
+	bool found = false;
+
+	if (name_str) {
+		found = qualify_syscall_name_personality(name_str, p, set);
+		free(name_str);
+
+		return found;
+	}
+
+	for (p = 0; p < SUPPORTED_PERSONALITIES; ++p)
+		found |= qualify_syscall_name_personality(s, p, set);
+
+	return found;
+}
+
+static bool
 qualify_syscall(const char *token, struct number_set *set)
 {
 	bool ignore_fail = false;
diff --git a/bpf.c b/bpf.c
index 5b9071e..e5dc4ee 100644
--- a/bpf.c
+++ b/bpf.c
@@ -33,6 +33,7 @@
 #ifdef HAVE_LINUX_BPF_H
 # include <linux/bpf.h>
 #endif
+#include <linux/filter.h>
 
 #include "bpf_attr.h"
 
@@ -45,6 +46,9 @@
 #include "xlat/bpf_map_update_elem_flags.h"
 #include "xlat/bpf_attach_type.h"
 #include "xlat/bpf_attach_flags.h"
+#include "xlat/bpf_query_flags.h"
+#include "xlat/ebpf_regs.h"
+#include "xlat/numa_node.h"
 
 #define DECL_BPF_CMD_DECODER(bpf_cmd_decoder)				\
 int									\
@@ -117,59 +121,160 @@
 	return 0;
 }
 
+struct ebpf_insn {
+	uint8_t code;
+	uint8_t dst_reg:4;
+	uint8_t src_reg:4;
+	int16_t off;
+	int32_t imm;
+};
+
+struct ebpf_insns_data {
+	unsigned int count;
+};
+
+static bool
+print_ebpf_insn(struct tcb * const tcp, void * const elem_buf,
+		const size_t elem_size, void * const data)
+{
+	struct ebpf_insns_data *eid = data;
+	struct ebpf_insn *insn = elem_buf;
+
+	if (eid->count++ >= BPF_MAXINSNS) {
+		tprints("...");
+		return false;
+	}
+
+	tprints("{code=");
+	print_bpf_filter_code(insn->code, true);
+
+	/* We can't use PRINT_FIELD_XVAL on bit fields */
+	tprints(", dst_reg=");
+	printxval_index(ebpf_regs, insn->dst_reg, "BPF_REG_???");
+	tprints(", src_reg=");
+	printxval_index(ebpf_regs, insn->src_reg, "BPF_REG_???");
+
+	PRINT_FIELD_D(", ", *insn, off);
+	PRINT_FIELD_X(", ", *insn, imm);
+	tprints("}");
+
+	return true;
+}
+
+static void
+print_ebpf_prog(struct tcb *const tcp, const uint64_t addr, const uint32_t len)
+{
+	print_big_u64_addr(addr);
+	if (abbrev(tcp)) {
+		printaddr(addr);
+	} else {
+		struct ebpf_insns_data eid = {};
+		struct ebpf_insn insn;
+
+		print_array(tcp, addr, len, &insn, sizeof(insn),
+			    tfetch_mem, print_ebpf_insn, &eid);
+	}
+}
+
 BEGIN_BPF_CMD_DECODER(BPF_MAP_CREATE)
 {
-	PRINT_FIELD_XVAL("{", attr, map_type, bpf_map_types,
-			 "BPF_MAP_TYPE_???");
+	PRINT_FIELD_XVAL_INDEX("{", 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);
+
+	/* map_flags field was added in Linux commit v4.6-rc1~91^2~108^2~6. */
+	if (len <= offsetof(struct BPF_MAP_CREATE_struct, map_flags))
+		break;
 	PRINT_FIELD_FLAGS(", ", attr, map_flags, bpf_map_flags, "BPF_F_???");
+
+	/*
+	 * inner_map_fd field was added in Linux commit
+	 * v4.12-rc1~64^3~373^2~2.
+	 */
+	if (len <= offsetof(struct BPF_MAP_CREATE_struct, inner_map_fd))
+		break;
 	PRINT_FIELD_FD(", ", attr, inner_map_fd, tcp);
-	if (attr.map_flags & BPF_F_NUMA_NODE)
-		PRINT_FIELD_U(", ", attr, numa_node);
+
+	/* numa_node field was added in Linux commit v4.14-rc1~130^2~196^2~1. */
+	if (len <= offsetof(struct BPF_MAP_CREATE_struct, numa_node))
+		break;
+	if (attr.map_flags & BPF_F_NUMA_NODE) {
+		/*
+		 * Kernel uses the value of -1 as a designation for "no NUMA
+		 * node specified", and even uses NUMA_NO_NODE constant;
+		 * however, the constant definition is not a part of UAPI
+		 * headers, thus we can't simply print this named constant
+		 * instead of the value. Let's force verbose xlat style instead
+		 * in order to provide the information for the user while
+		 * not hampering the availability to derive the actual value
+		 * without the access to the kernel headers.
+		 */
+		tprints(", numa_node=");
+		printxvals_ex(attr.numa_node, NULL,
+			      XLAT_STYLE_FMT_U | XLAT_STYLE_VERBOSE,
+			      numa_node, NULL);
+	}
+
+	/* map_name field was added in Linux commit v4.15-rc1~84^2~605^2~3. */
+	if (len <= offsetof(struct BPF_MAP_CREATE_struct, map_name))
+		break;
+	PRINT_FIELD_CSTRING_SZ(", ", attr, map_name,
+			       MIN(sizeof(attr.map_name),
+				   len - offsetof(struct BPF_MAP_CREATE_struct,
+						  map_name)));
+
+	/*
+	 * map_ifindex field was added in Linux commit
+	 * v4.16-rc1~123^2~145^2~5^2~8.
+	 */
+	if (len <= offsetof(struct BPF_MAP_CREATE_struct, map_ifindex))
+		break;
+	PRINT_FIELD_IFINDEX(", ", attr, map_ifindex);
 }
 END_BPF_CMD_DECODER(RVAL_DECODED | RVAL_FD)
 
 BEGIN_BPF_CMD_DECODER(BPF_MAP_LOOKUP_ELEM)
 {
 	PRINT_FIELD_FD("{", attr, map_fd, tcp);
-	PRINT_FIELD_X(", ", attr, key);
-	PRINT_FIELD_X(", ", attr, value);
+	PRINT_FIELD_ADDR64(", ", attr, key);
+	PRINT_FIELD_ADDR64(", ", attr, value);
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
 
 BEGIN_BPF_CMD_DECODER(BPF_MAP_UPDATE_ELEM)
 {
 	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_???");
+	PRINT_FIELD_ADDR64(", ", attr, key);
+	PRINT_FIELD_ADDR64(", ", attr, value);
+	PRINT_FIELD_XVAL_INDEX(", ", attr, flags, bpf_map_update_elem_flags,
+			       "BPF_???");
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
 
 BEGIN_BPF_CMD_DECODER(BPF_MAP_DELETE_ELEM)
 {
 	PRINT_FIELD_FD("{", attr, map_fd, tcp);
-	PRINT_FIELD_X(", ", attr, key);
+	PRINT_FIELD_ADDR64(", ", attr, key);
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
 
 BEGIN_BPF_CMD_DECODER(BPF_MAP_GET_NEXT_KEY)
 {
 	PRINT_FIELD_FD("{", attr, map_fd, tcp);
-	PRINT_FIELD_X(", ", attr, key);
-	PRINT_FIELD_X(", ", attr, next_key);
+	PRINT_FIELD_ADDR64(", ", attr, key);
+	PRINT_FIELD_ADDR64(", ", attr, next_key);
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
 
 BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)
 {
-	PRINT_FIELD_XVAL("{", attr, prog_type, bpf_prog_types,
-			 "BPF_PROG_TYPE_???");
+	PRINT_FIELD_XVAL_INDEX("{", attr, prog_type, bpf_prog_types,
+			       "BPF_PROG_TYPE_???");
 	PRINT_FIELD_U(", ", attr, insn_cnt);
-	PRINT_FIELD_X(", ", attr, insns);
+	tprints(", insns=");
+	print_ebpf_prog(tcp, attr.insns, attr.insn_cnt);
 
 	tprintf(", license=");
 	print_big_u64_addr(attr.license);
@@ -180,7 +285,9 @@
 		break;
 	PRINT_FIELD_U(", ", attr, log_level);
 	PRINT_FIELD_U(", ", attr, log_size);
-	PRINT_FIELD_X(", ", attr, log_buf);
+	tprintf(", log_buf=");
+	print_big_u64_addr(attr.log_buf);
+	printstr_ex(tcp, attr.log_buf, attr.log_size, QUOTE_0_TERMINATED);
 
 	/* kern_version field was added in Linux commit v4.1-rc1~84^2~50.  */
 	if (len <= offsetof(struct BPF_PROG_LOAD_struct, kern_version))
@@ -194,6 +301,32 @@
 	if (len <= offsetof(struct BPF_PROG_LOAD_struct, prog_flags))
 		break;
 	PRINT_FIELD_FLAGS(", ", attr, prog_flags, bpf_prog_flags, "BPF_F_???");
+
+	/* prog_name field was added in Linux commit v4.15-rc1~84^2~605^2~4. */
+	if (len <= offsetof(struct BPF_PROG_LOAD_struct, prog_name))
+		break;
+	PRINT_FIELD_CSTRING_SZ(", ", attr, prog_name,
+			       MIN(sizeof(attr.prog_name),
+				   len - offsetof(struct BPF_PROG_LOAD_struct,
+						   prog_name)));
+
+	/*
+	 * prog_ifindex field was added as prog_target_ifindex in Linux commit
+	 * v4.15-rc1~84^2~127^2~13 and renamed to its current name in
+	 * v4.15-rc1~15^2~5^2~3^2~7.
+	 */
+	if (len <= offsetof(struct BPF_PROG_LOAD_struct, prog_ifindex))
+		break;
+	PRINT_FIELD_IFINDEX(", ", attr, prog_ifindex);
+
+	/*
+	 * expected_attach_type was added in Linux commit
+	 * v4.17-rc1~148^2~19^2^2~8.
+	 */
+	if (len <= offsetof(struct BPF_PROG_LOAD_struct, expected_attach_type))
+		break;
+	PRINT_FIELD_XVAL(", ", attr, expected_attach_type, bpf_attach_type,
+			 "BPF_???");
 }
 END_BPF_CMD_DECODER(RVAL_DECODED | RVAL_FD)
 
@@ -204,10 +337,10 @@
 	printpath(tcp, attr.pathname);
 
 	PRINT_FIELD_FD(", ", attr, bpf_fd, tcp);
-	if (len <= offsetofend(struct BPF_OBJ_PIN_struct, bpf_fd))
-		break;
 
 	/* file_flags field was added in Linux v4.15-rc1~84^2~384^2~4 */
+	if (len <= offsetof(struct BPF_OBJ_PIN_struct, file_flags))
+		break;
 	PRINT_FIELD_FLAGS(", ", attr, file_flags, bpf_file_mode_flags,
 			  "BPF_F_???");
 }
@@ -219,7 +352,8 @@
 {
 	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_XVAL_INDEX(", ", attr, attach_type, bpf_attach_type,
+			       "BPF_???");
 	PRINT_FIELD_FLAGS(", ", attr, attach_flags, bpf_attach_flags,
 			  "BPF_F_???");
 }
@@ -228,7 +362,8 @@
 BEGIN_BPF_CMD_DECODER(BPF_PROG_DETACH)
 {
 	PRINT_FIELD_FD("{", attr, target_fd, tcp);
-	PRINT_FIELD_XVAL(", ", attr, attach_type, bpf_attach_type, "BPF_???");
+	PRINT_FIELD_XVAL_INDEX(", ", attr, attach_type, bpf_attach_type,
+			       "BPF_???");
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
 
@@ -238,8 +373,8 @@
 	PRINT_FIELD_U(", ", attr, retval);
 	PRINT_FIELD_U(", ", attr, data_size_in);
 	PRINT_FIELD_U(", ", attr, data_size_out);
-	PRINT_FIELD_X(", ", attr, data_in);
-	PRINT_FIELD_X(", ", attr, data_out);
+	PRINT_FIELD_ADDR64(", ", attr, data_in);
+	PRINT_FIELD_ADDR64(", ", attr, data_out);
 	PRINT_FIELD_U(", ", attr, repeat);
 	PRINT_FIELD_U(", ", attr, duration);
 	tprints("}");
@@ -250,10 +385,10 @@
 {
 	PRINT_FIELD_U("{", attr, start_id);
 	PRINT_FIELD_U(", ", attr, next_id);
-	if (len <= offsetofend(struct BPF_PROG_GET_NEXT_ID_struct, next_id))
-		break;
 
 	/* open_flags field has been added in Linux v4.15-rc1~84^2~384^2~4 */
+	if (len <= offsetof(struct BPF_PROG_GET_NEXT_ID_struct, open_flags))
+		break;
 	PRINT_FIELD_FLAGS(", ", attr, open_flags, bpf_file_mode_flags,
 			  "BPF_F_???");
 }
@@ -265,10 +400,10 @@
 {
 	PRINT_FIELD_U("{", attr, prog_id);
 	PRINT_FIELD_U(", ", attr, next_id);
-	if (len <= offsetofend(struct BPF_PROG_GET_FD_BY_ID_struct, next_id))
-		break;
 
 	/* open_flags field has been added in Linux v4.15-rc1~84^2~384^2~4 */
+	if (len <= offsetof(struct BPF_PROG_GET_FD_BY_ID_struct, open_flags))
+		break;
 	PRINT_FIELD_FLAGS(", ", attr, open_flags, bpf_file_mode_flags,
 			  "BPF_F_???");
 }
@@ -278,23 +413,299 @@
 {
 	PRINT_FIELD_U("{", attr, map_id);
 	PRINT_FIELD_U(", ", attr, next_id);
-	if (len <= offsetofend(struct BPF_MAP_GET_FD_BY_ID_struct, next_id))
-		break;
 
 	/* open_flags field has been added in Linux v4.15-rc1~84^2~384^2~4 */
+	if (len <= offsetof(struct BPF_MAP_GET_FD_BY_ID_struct, open_flags))
+		break;
 	PRINT_FIELD_FLAGS(", ", attr, open_flags, bpf_file_mode_flags,
 			  "BPF_F_???");
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
 
-BEGIN_BPF_CMD_DECODER(BPF_OBJ_GET_INFO_BY_FD)
+struct obj_get_info_saved;
+typedef void (*print_bpf_obj_info_fn)(struct tcb *,
+				      uint32_t bpf_fd,
+				      const char *info_buf,
+				      uint32_t size,
+				      struct obj_get_info_saved *saved);
+
+struct obj_get_info_saved {
+	print_bpf_obj_info_fn print_fn;
+
+	uint32_t info_len;
+
+	uint32_t jited_prog_len;
+	uint32_t xlated_prog_len;
+	uint32_t nr_map_ids;
+};
+
+static void
+print_bpf_map_info(struct tcb * const tcp, uint32_t bpf_fd,
+		   const char *info_buf, uint32_t size,
+		   struct obj_get_info_saved *saved)
 {
-	PRINT_FIELD_FD("{info={", attr, bpf_fd, tcp);
-	PRINT_FIELD_U(", ", attr, info_len);
-	PRINT_FIELD_X(", ", attr, info);
+	if (entering(tcp))
+		return;
+
+	struct bpf_map_info_struct info = { 0 };
+	const unsigned int len = MIN(size, bpf_map_info_struct_size);
+
+	memcpy(&info, info_buf, len);
+
+	PRINT_FIELD_XVAL("{", info, type, bpf_map_types, "BPF_MAP_TYPE_???");
+	PRINT_FIELD_U(", ", info, id);
+	PRINT_FIELD_U(", ", info, key_size);
+	PRINT_FIELD_U(", ", info, value_size);
+	PRINT_FIELD_U(", ", info, max_entries);
+	PRINT_FIELD_FLAGS(", ", info, map_flags, bpf_map_flags, "BPF_F_???");
+
+	/*
+	 * "name" field was introduced by Linux commit v4.15-rc1~84^2~605^2~3.
+	 */
+	if (len <= offsetof(struct bpf_map_info_struct, name))
+		goto print_bpf_map_info_end;
+	PRINT_FIELD_CSTRING(", ", info, name);
+
+	/*
+	 * ifindex, netns_dev, and netns_ino fields were introduced
+	 * by Linux commit v4.16-rc1~123^2~109^2~5^2~4.
+	 */
+	if (len <= offsetof(struct bpf_map_info_struct, ifindex))
+		goto print_bpf_map_info_end;
+	PRINT_FIELD_IFINDEX(", ", info, ifindex);
+	PRINT_FIELD_DEV(", ", info, netns_dev);
+	PRINT_FIELD_U(", ", info, netns_ino);
+
+	decode_attr_extra_data(tcp, info_buf, size, bpf_map_info_struct_size);
+
+print_bpf_map_info_end:
 	tprints("}");
 }
-END_BPF_CMD_DECODER(RVAL_DECODED | RVAL_FD)
+
+static void
+print_bpf_prog_info(struct tcb * const tcp, uint32_t bpf_fd,
+		    const char *info_buf, uint32_t size,
+		    struct obj_get_info_saved *saved)
+{
+	struct bpf_prog_info_struct info = { 0 };
+	const unsigned int len = MIN(size, bpf_prog_info_struct_size);
+	uint64_t map_id_buf;
+
+	memcpy(&info, info_buf, len);
+
+	if (entering(tcp)) {
+		saved->jited_prog_len = info.jited_prog_len;
+		saved->xlated_prog_len = info.xlated_prog_len;
+		saved->nr_map_ids = info.nr_map_ids;
+
+		return;
+	}
+
+	PRINT_FIELD_XVAL("{", info, type, bpf_prog_types, "BPF_PROG_TYPE_???");
+	PRINT_FIELD_U(", ", info, id);
+	PRINT_FIELD_HEX_ARRAY(", ", info, tag);
+
+	tprints(", jited_prog_len=");
+	if (saved->jited_prog_len != info.jited_prog_len)
+		tprintf("%" PRIu32 " => ", saved->jited_prog_len);
+	tprintf("%" PRIu32, info.jited_prog_len);
+
+	tprints(", jited_prog_insns=");
+	print_big_u64_addr(info.jited_prog_insns);
+	printstr_ex(tcp, info.jited_prog_insns, info.jited_prog_len,
+		    QUOTE_FORCE_HEX);
+
+	tprints(", xlated_prog_len=");
+	if (saved->xlated_prog_len != info.xlated_prog_len)
+		tprintf("%" PRIu32 " => ", saved->xlated_prog_len);
+	tprintf("%" PRIu32, info.xlated_prog_len);
+
+	tprints(", xlated_prog_insns=");
+	print_ebpf_prog(tcp, info.xlated_prog_insns,
+			MIN(saved->xlated_prog_len, info.xlated_prog_len) / 8);
+
+	/*
+	 * load_time, created_by_uid, nr_map_ids, map_ids, and name fields
+	 * were introduced by Linux commit v4.15-rc1~84^2~605^2~4.
+	 */
+	if (len <= offsetof(struct bpf_prog_info_struct, load_time))
+		goto print_bpf_prog_info_end;
+	PRINT_FIELD_U(", ", info, load_time);
+	PRINT_FIELD_UID(", ", info, created_by_uid);
+
+	tprints(", nr_map_ids=");
+	if (saved->nr_map_ids != info.nr_map_ids)
+		tprintf("%" PRIu32 " => ", saved->nr_map_ids);
+	tprintf("%" PRIu32, info.nr_map_ids);
+
+	tprints(", map_ids=");
+	print_big_u64_addr(info.map_ids);
+	print_array(tcp, info.map_ids, MIN(saved->nr_map_ids, info.nr_map_ids),
+		    &map_id_buf, sizeof(map_id_buf),
+		    tfetch_mem, print_uint32_array_member, 0);
+
+	PRINT_FIELD_CSTRING(", ", info, name);
+
+	/*
+	 * ifindex, netns_dev, and netns_ino fields were introduced
+	 * by Linux commit v4.16-rc1~123^2~227^2~5^2~2.
+	 */
+	if (len <= offsetof(struct bpf_prog_info_struct, ifindex))
+		goto print_bpf_prog_info_end;
+	PRINT_FIELD_IFINDEX(", ", info, ifindex);
+	PRINT_FIELD_DEV(", ", info, netns_dev);
+	PRINT_FIELD_U(", ", info, netns_ino);
+
+	decode_attr_extra_data(tcp, info_buf, size, bpf_prog_info_struct_size);
+
+print_bpf_prog_info_end:
+	tprints("}");
+}
+
+static const char *
+fetch_bpf_obj_info(struct tcb * const tcp, uint64_t info, uint32_t size)
+{
+	static char *info_buf;
+
+	if (!info_buf)
+		info_buf = xmalloc(get_pagesize());
+
+	memset(info_buf, 0, get_pagesize());
+
+	if (size > 0 && size <= get_pagesize()
+	    && !umoven(tcp, info, size, info_buf))
+		return info_buf;
+
+	return NULL;
+}
+
+static void
+print_bpf_obj_info_addr(struct tcb * const tcp, uint64_t addr)
+{
+	if (exiting(tcp))
+		printaddr64(addr);
+}
+
+static void
+print_bpf_obj_info(struct tcb * const tcp, uint32_t bpf_fd, uint64_t info,
+		   uint32_t size, struct obj_get_info_saved *saved)
+{
+	if (abbrev(tcp)) {
+		print_bpf_obj_info_addr(tcp, info);
+		return;
+	}
+
+	static struct {
+		const char *id;
+		print_bpf_obj_info_fn print_fn;
+	} obj_printers[] = {
+		{ "anon_inode:bpf-map", print_bpf_map_info },
+		{ "anon_inode:bpf-prog", print_bpf_prog_info }
+	};
+
+	if (entering(tcp)) {
+		char path[PATH_MAX + 1];
+
+		if (getfdpath(tcp, bpf_fd, path, sizeof(path)) > 0) {
+			for (size_t i = 0; i < ARRAY_SIZE(obj_printers); ++i) {
+				if (!strcmp(path, obj_printers[i].id)) {
+					saved->print_fn =
+						obj_printers[i].print_fn;
+					break;
+				}
+			}
+		}
+	}
+
+	if (!saved || !saved->print_fn) {
+		print_bpf_obj_info_addr(tcp, info);
+		return;
+	}
+
+	const char *info_buf = fetch_bpf_obj_info(tcp, info, size);
+
+	if (info_buf)
+		saved->print_fn(tcp, bpf_fd, info_buf, size, saved);
+	else
+		print_bpf_obj_info_addr(tcp, info);
+}
+
+BEGIN_BPF_CMD_DECODER(BPF_OBJ_GET_INFO_BY_FD)
+{
+	struct obj_get_info_saved *saved;
+
+	if (entering(tcp)) {
+		saved = xcalloc(1, sizeof(*saved));
+		saved->info_len = attr.info_len;
+		set_tcb_priv_data(tcp, saved, free);
+
+		PRINT_FIELD_FD("{info={", attr, bpf_fd, tcp);
+		PRINT_FIELD_U(", ", attr, info_len);
+	} else {
+		saved = get_tcb_priv_data(tcp);
+
+		if (saved && (saved->info_len != attr.info_len))
+			tprintf(" => %u", attr.info_len);
+
+		tprintf(", info=");
+	}
+
+	print_bpf_obj_info(tcp, attr.bpf_fd, attr.info, attr.info_len, saved);
+
+	if (entering(tcp))
+		return 0;
+
+	tprints("}");
+}
+END_BPF_CMD_DECODER(RVAL_DECODED)
+
+BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)
+{
+	uint32_t prog_id_buf;
+
+	if (entering(tcp)) {
+		PRINT_FIELD_FD("{query={", attr, target_fd, tcp);
+		PRINT_FIELD_XVAL_INDEX(", ", attr, attach_type, bpf_attach_type,
+				       "BPF_???");
+		PRINT_FIELD_FLAGS(", ", attr, query_flags, bpf_query_flags,
+				  "BPF_F_QUERY_???");
+		PRINT_FIELD_FLAGS(", ", attr, attach_flags, bpf_attach_flags,
+				  "BPF_F_???");
+
+		tprints(", prog_ids=");
+
+		set_tcb_priv_ulong(tcp, attr.prog_cnt);
+
+		return 0;
+	}
+
+	print_big_u64_addr(attr.prog_ids);
+	print_array(tcp, attr.prog_ids, attr.prog_cnt, &prog_id_buf,
+		    sizeof(prog_id_buf), tfetch_mem,
+		    print_uint32_array_member, 0);
+
+	tprints(", prog_cnt=");
+	const uint32_t prog_cnt_entering = get_tcb_priv_ulong(tcp);
+	if (prog_cnt_entering != attr.prog_cnt)
+		tprintf("%" PRIu32 " => ", prog_cnt_entering);
+	tprintf("%" PRIu32, attr.prog_cnt);
+	tprints("}");
+}
+END_BPF_CMD_DECODER(RVAL_DECODED)
+
+BEGIN_BPF_CMD_DECODER(BPF_RAW_TRACEPOINT_OPEN)
+{
+	enum { TP_NAME_SIZE = 128 };
+
+	tprintf("{raw_tracepoint={name=");
+	print_big_u64_addr(attr.name);
+	printstr_ex(tcp, attr.name, TP_NAME_SIZE, QUOTE_0_TERMINATED);
+
+	PRINT_FIELD_FD(", ", attr, prog_fd, tcp);
+
+	tprints("}");
+}
+END_BPF_CMD_DECODER(RVAL_DECODED)
 
 SYS_FUNC(bpf)
 {
@@ -315,38 +726,36 @@
 		BPF_CMD_ENTRY(BPF_PROG_GET_FD_BY_ID),
 		BPF_CMD_ENTRY(BPF_MAP_GET_FD_BY_ID),
 		BPF_CMD_ENTRY(BPF_OBJ_GET_INFO_BY_FD),
+		BPF_CMD_ENTRY(BPF_PROG_QUERY),
+		BPF_CMD_ENTRY(BPF_RAW_TRACEPOINT_OPEN),
 	};
 
 	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;
+	int rc = RVAL_DECODED;
 
 	if (entering(tcp)) {
+		printxval_index(bpf_commands, cmd, "BPF_???");
+		tprints(", ");
+	}
+
+	if (size > 0
+	    && size <= get_pagesize()
+	    && cmd < ARRAY_SIZE(bpf_cmd_decoders)
+	    && bpf_cmd_decoders[cmd]) {
 		static char *buf;
 
 		if (!buf)
 			buf = xmalloc(get_pagesize());
 
-		printxval(bpf_commands, cmd, "BPF_???");
-		tprints(", ");
-
-		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;
-		}
+		if (!umoven_or_printaddr_ignore_syserror(tcp, addr, size, buf))
+			rc = bpf_cmd_decoders[cmd](tcp, addr, size, buf);
 	} else {
-		rc = bpf_cmd_decoders[cmd](tcp, addr, size, NULL) | RVAL_DECODED;
+		printaddr(addr);
 	}
 
-	if (rc & RVAL_DECODED)
+	if (exiting(tcp) || (rc & RVAL_DECODED))
 		tprintf(", %u", size);
 
 	return rc;
diff --git a/bpf_attr.h b/bpf_attr.h
index 6649683..45bb30a 100644
--- a/bpf_attr.h
+++ b/bpf_attr.h
@@ -28,6 +28,33 @@
 #ifndef STRACE_BPF_ATTR_H
 #define STRACE_BPF_ATTR_H
 
+/*
+ * The policy is that all fields of type uint64_t in this header file
+ * must have ATTRIBUTE_ALIGNED(8).
+ *
+ * This should not cause any contradictions with <linux/bpf.h>
+ * unless the latter is buggy.
+ *
+ * By word "buggy" I mean containing such changes as Linux kernel commit
+ * v4.16-rc1~123^2~109^2~5^2~4.
+ */
+
+#ifndef BPF_OBJ_NAME_LEN
+# define BPF_OBJ_NAME_LEN 16U
+#else
+# if BPF_OBJ_NAME_LEN != 16U
+#  error "Unexpected value of BPF_OBJ_NAME_LEN"
+# endif
+#endif
+
+#ifndef BPF_TAG_SIZE
+# define BPF_TAG_SIZE 8
+#else
+# if BPF_TAG_SIZE != 8
+#  error "Unexpected value of BPF_TAG_SIZE"
+# endif
+#endif
+
 struct BPF_MAP_CREATE_struct {
 	uint32_t map_type;
 	uint32_t key_size;
@@ -36,11 +63,13 @@
 	uint32_t map_flags;
 	uint32_t inner_map_fd;
 	uint32_t numa_node;
+	char     map_name[BPF_OBJ_NAME_LEN];
+	uint32_t map_ifindex;
 };
 
 #define BPF_MAP_CREATE_struct_size \
 	sizeof(struct BPF_MAP_CREATE_struct)
-#define expected_BPF_MAP_CREATE_struct_size 28
+#define expected_BPF_MAP_CREATE_struct_size 48
 
 struct BPF_MAP_LOOKUP_ELEM_struct {
 	uint32_t map_fd;
@@ -56,7 +85,7 @@
 	uint32_t map_fd;
 	uint64_t ATTRIBUTE_ALIGNED(8) key;
 	uint64_t ATTRIBUTE_ALIGNED(8) value;
-	uint64_t flags;
+	uint64_t ATTRIBUTE_ALIGNED(8) flags;
 };
 
 #define BPF_MAP_UPDATE_ELEM_struct_size \
@@ -92,11 +121,14 @@
 	uint64_t ATTRIBUTE_ALIGNED(8) log_buf;
 	uint32_t kern_version;
 	uint32_t prog_flags;
+	char     prog_name[BPF_OBJ_NAME_LEN];
+	uint32_t prog_ifindex;
+	uint32_t expected_attach_type;
 };
 
 #define BPF_PROG_LOAD_struct_size \
-	sizeof(struct BPF_PROG_LOAD_struct)
-#define expected_BPF_PROG_LOAD_struct_size 48
+	offsetofend(struct BPF_PROG_LOAD_struct, expected_attach_type)
+#define expected_BPF_PROG_LOAD_struct_size 72
 
 struct BPF_OBJ_PIN_struct {
 	uint64_t ATTRIBUTE_ALIGNED(8) pathname;
@@ -190,4 +222,73 @@
 	sizeof(struct BPF_OBJ_GET_INFO_BY_FD_struct)
 #define expected_BPF_OBJ_GET_INFO_BY_FD_struct_size 16
 
+struct BPF_PROG_QUERY_struct /* query */ {
+	uint32_t target_fd;
+	uint32_t attach_type;
+	uint32_t query_flags;
+	uint32_t attach_flags;
+	uint64_t ATTRIBUTE_ALIGNED(8) prog_ids;
+	uint32_t prog_cnt;
+};
+
+#define BPF_PROG_QUERY_struct_size \
+	offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt)
+#define expected_BPF_PROG_QUERY_struct_size 28
+
+struct BPF_RAW_TRACEPOINT_OPEN_struct /* raw_tracepoint */ {
+	uint64_t ATTRIBUTE_ALIGNED(8) name;
+	uint32_t prog_fd;
+};
+
+#define BPF_RAW_TRACEPOINT_OPEN_struct_size \
+	offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct, prog_fd)
+#define expected_BPF_RAW_TRACEPOINT_OPEN_struct_size 12
+
+struct bpf_map_info_struct {
+	uint32_t type;
+	uint32_t id;
+	uint32_t key_size;
+	uint32_t value_size;
+	uint32_t max_entries;
+	uint32_t map_flags;
+	char     name[BPF_OBJ_NAME_LEN];
+	uint32_t ifindex;
+	/*
+	 * The kernel UAPI is broken by Linux commit
+	 * v4.16-rc1~123^2~109^2~5^2~4 .
+	 */
+	uint64_t ATTRIBUTE_ALIGNED(8) netns_dev; /* skip check */
+	uint64_t ATTRIBUTE_ALIGNED(8) netns_ino; /* skip check */
+};
+
+#define bpf_map_info_struct_size \
+	sizeof(struct bpf_map_info_struct)
+#define expected_bpf_map_info_struct_size 64
+
+struct bpf_prog_info_struct {
+	uint32_t type;
+	uint32_t id;
+	uint8_t  tag[BPF_TAG_SIZE];
+	uint32_t jited_prog_len;
+	uint32_t xlated_prog_len;
+	uint64_t ATTRIBUTE_ALIGNED(8) jited_prog_insns;
+	uint64_t ATTRIBUTE_ALIGNED(8) xlated_prog_insns;
+	uint64_t ATTRIBUTE_ALIGNED(8) load_time;
+	uint32_t created_by_uid;
+	uint32_t nr_map_ids;
+	uint64_t ATTRIBUTE_ALIGNED(8) map_ids;
+	char     name[BPF_OBJ_NAME_LEN];
+	uint32_t ifindex;
+	/*
+	 * The kernel UAPI is broken by Linux commit
+	 * v4.16-rc1~123^2~227^2~5^2~2 .
+	 */
+	uint64_t ATTRIBUTE_ALIGNED(8) netns_dev; /* skip check */
+	uint64_t ATTRIBUTE_ALIGNED(8) netns_ino; /* skip check */
+};
+
+#define bpf_prog_info_struct_size \
+	sizeof(struct bpf_prog_info_struct)
+#define expected_bpf_prog_info_struct_size 104
+
 #endif /* !STRACE_BPF_ATTR_H */
diff --git a/bpf_attr_check.c b/bpf_attr_check.c
index ea0d66d..cae1e71 100644
--- a/bpf_attr_check.c
+++ b/bpf_attr_check.c
@@ -56,6 +56,20 @@
 		      "BPF_MAP_CREATE_struct.numa_node offset mismatch");
 # endif /* HAVE_UNION_BPF_ATTR_NUMA_NODE */
 
+# ifdef HAVE_UNION_BPF_ATTR_MAP_NAME
+	static_assert(SoM(struct BPF_MAP_CREATE_struct, map_name) == SoM(union bpf_attr, map_name),
+		      "BPF_MAP_CREATE_struct.map_name size mismatch");
+	static_assert(offsetof(struct BPF_MAP_CREATE_struct, map_name) == offsetof(union bpf_attr, map_name),
+		      "BPF_MAP_CREATE_struct.map_name offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_MAP_NAME */
+
+# ifdef HAVE_UNION_BPF_ATTR_MAP_IFINDEX
+	static_assert(SoM(struct BPF_MAP_CREATE_struct, map_ifindex) == SoM(union bpf_attr, map_ifindex),
+		      "BPF_MAP_CREATE_struct.map_ifindex size mismatch");
+	static_assert(offsetof(struct BPF_MAP_CREATE_struct, map_ifindex) == offsetof(union bpf_attr, map_ifindex),
+		      "BPF_MAP_CREATE_struct.map_ifindex offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_MAP_IFINDEX */
+
 static_assert(BPF_MAP_CREATE_struct_size == expected_BPF_MAP_CREATE_struct_size,
 	      "BPF_MAP_CREATE_struct_size mismatch");
 
@@ -218,6 +232,27 @@
 		      "BPF_PROG_LOAD_struct.prog_flags offset mismatch");
 # endif /* HAVE_UNION_BPF_ATTR_PROG_FLAGS */
 
+# ifdef HAVE_UNION_BPF_ATTR_PROG_NAME
+	static_assert(SoM(struct BPF_PROG_LOAD_struct, prog_name) == SoM(union bpf_attr, prog_name),
+		      "BPF_PROG_LOAD_struct.prog_name size mismatch");
+	static_assert(offsetof(struct BPF_PROG_LOAD_struct, prog_name) == offsetof(union bpf_attr, prog_name),
+		      "BPF_PROG_LOAD_struct.prog_name offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_PROG_NAME */
+
+# ifdef HAVE_UNION_BPF_ATTR_PROG_IFINDEX
+	static_assert(SoM(struct BPF_PROG_LOAD_struct, prog_ifindex) == SoM(union bpf_attr, prog_ifindex),
+		      "BPF_PROG_LOAD_struct.prog_ifindex size mismatch");
+	static_assert(offsetof(struct BPF_PROG_LOAD_struct, prog_ifindex) == offsetof(union bpf_attr, prog_ifindex),
+		      "BPF_PROG_LOAD_struct.prog_ifindex offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_PROG_IFINDEX */
+
+# ifdef HAVE_UNION_BPF_ATTR_EXPECTED_ATTACH_TYPE
+	static_assert(SoM(struct BPF_PROG_LOAD_struct, expected_attach_type) == SoM(union bpf_attr, expected_attach_type),
+		      "BPF_PROG_LOAD_struct.expected_attach_type size mismatch");
+	static_assert(offsetof(struct BPF_PROG_LOAD_struct, expected_attach_type) == offsetof(union bpf_attr, expected_attach_type),
+		      "BPF_PROG_LOAD_struct.expected_attach_type offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_EXPECTED_ATTACH_TYPE */
+
 static_assert(BPF_PROG_LOAD_struct_size == expected_BPF_PROG_LOAD_struct_size,
 	      "BPF_PROG_LOAD_struct_size mismatch");
 
@@ -455,4 +490,219 @@
 static_assert(BPF_OBJ_GET_INFO_BY_FD_struct_size == expected_BPF_OBJ_GET_INFO_BY_FD_struct_size,
 	      "BPF_OBJ_GET_INFO_BY_FD_struct_size mismatch");
 
+# ifdef HAVE_UNION_BPF_ATTR_QUERY_TARGET_FD
+	static_assert(SoM(struct BPF_PROG_QUERY_struct, target_fd) == SoM(union bpf_attr, query.target_fd),
+		      "BPF_PROG_QUERY_struct.target_fd size mismatch");
+	static_assert(offsetof(struct BPF_PROG_QUERY_struct, target_fd) == offsetof(union bpf_attr, query.target_fd),
+		      "BPF_PROG_QUERY_struct.target_fd offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_QUERY_TARGET_FD */
+
+# ifdef HAVE_UNION_BPF_ATTR_QUERY_ATTACH_TYPE
+	static_assert(SoM(struct BPF_PROG_QUERY_struct, attach_type) == SoM(union bpf_attr, query.attach_type),
+		      "BPF_PROG_QUERY_struct.attach_type size mismatch");
+	static_assert(offsetof(struct BPF_PROG_QUERY_struct, attach_type) == offsetof(union bpf_attr, query.attach_type),
+		      "BPF_PROG_QUERY_struct.attach_type offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_QUERY_ATTACH_TYPE */
+
+# ifdef HAVE_UNION_BPF_ATTR_QUERY_QUERY_FLAGS
+	static_assert(SoM(struct BPF_PROG_QUERY_struct, query_flags) == SoM(union bpf_attr, query.query_flags),
+		      "BPF_PROG_QUERY_struct.query_flags size mismatch");
+	static_assert(offsetof(struct BPF_PROG_QUERY_struct, query_flags) == offsetof(union bpf_attr, query.query_flags),
+		      "BPF_PROG_QUERY_struct.query_flags offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_QUERY_QUERY_FLAGS */
+
+# ifdef HAVE_UNION_BPF_ATTR_QUERY_ATTACH_FLAGS
+	static_assert(SoM(struct BPF_PROG_QUERY_struct, attach_flags) == SoM(union bpf_attr, query.attach_flags),
+		      "BPF_PROG_QUERY_struct.attach_flags size mismatch");
+	static_assert(offsetof(struct BPF_PROG_QUERY_struct, attach_flags) == offsetof(union bpf_attr, query.attach_flags),
+		      "BPF_PROG_QUERY_struct.attach_flags offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_QUERY_ATTACH_FLAGS */
+
+# ifdef HAVE_UNION_BPF_ATTR_QUERY_PROG_IDS
+	static_assert(SoM(struct BPF_PROG_QUERY_struct, prog_ids) == SoM(union bpf_attr, query.prog_ids),
+		      "BPF_PROG_QUERY_struct.prog_ids size mismatch");
+	static_assert(offsetof(struct BPF_PROG_QUERY_struct, prog_ids) == offsetof(union bpf_attr, query.prog_ids),
+		      "BPF_PROG_QUERY_struct.prog_ids offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_QUERY_PROG_IDS */
+
+# ifdef HAVE_UNION_BPF_ATTR_QUERY_PROG_CNT
+	static_assert(SoM(struct BPF_PROG_QUERY_struct, prog_cnt) == SoM(union bpf_attr, query.prog_cnt),
+		      "BPF_PROG_QUERY_struct.prog_cnt size mismatch");
+	static_assert(offsetof(struct BPF_PROG_QUERY_struct, prog_cnt) == offsetof(union bpf_attr, query.prog_cnt),
+		      "BPF_PROG_QUERY_struct.prog_cnt offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_QUERY_PROG_CNT */
+
+static_assert(BPF_PROG_QUERY_struct_size == expected_BPF_PROG_QUERY_struct_size,
+	      "BPF_PROG_QUERY_struct_size mismatch");
+
+# ifdef HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_NAME
+	static_assert(SoM(struct BPF_RAW_TRACEPOINT_OPEN_struct, name) == SoM(union bpf_attr, raw_tracepoint.name),
+		      "BPF_RAW_TRACEPOINT_OPEN_struct.name size mismatch");
+	static_assert(offsetof(struct BPF_RAW_TRACEPOINT_OPEN_struct, name) == offsetof(union bpf_attr, raw_tracepoint.name),
+		      "BPF_RAW_TRACEPOINT_OPEN_struct.name offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_NAME */
+
+# ifdef HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_PROG_FD
+	static_assert(SoM(struct BPF_RAW_TRACEPOINT_OPEN_struct, prog_fd) == SoM(union bpf_attr, raw_tracepoint.prog_fd),
+		      "BPF_RAW_TRACEPOINT_OPEN_struct.prog_fd size mismatch");
+	static_assert(offsetof(struct BPF_RAW_TRACEPOINT_OPEN_struct, prog_fd) == offsetof(union bpf_attr, raw_tracepoint.prog_fd),
+		      "BPF_RAW_TRACEPOINT_OPEN_struct.prog_fd offset mismatch");
+# endif /* HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_PROG_FD */
+
+static_assert(BPF_RAW_TRACEPOINT_OPEN_struct_size == expected_BPF_RAW_TRACEPOINT_OPEN_struct_size,
+	      "BPF_RAW_TRACEPOINT_OPEN_struct_size mismatch");
+
+# ifdef HAVE_STRUCT_BPF_MAP_INFO_TYPE
+	static_assert(SoM(struct bpf_map_info_struct, type) == SoM(struct bpf_map_info, type),
+		      "bpf_map_info_struct.type size mismatch");
+	static_assert(offsetof(struct bpf_map_info_struct, type) == offsetof(struct bpf_map_info, type),
+		      "bpf_map_info_struct.type offset mismatch");
+# endif /* HAVE_STRUCT_BPF_MAP_INFO_TYPE */
+
+# ifdef HAVE_STRUCT_BPF_MAP_INFO_ID
+	static_assert(SoM(struct bpf_map_info_struct, id) == SoM(struct bpf_map_info, id),
+		      "bpf_map_info_struct.id size mismatch");
+	static_assert(offsetof(struct bpf_map_info_struct, id) == offsetof(struct bpf_map_info, id),
+		      "bpf_map_info_struct.id offset mismatch");
+# endif /* HAVE_STRUCT_BPF_MAP_INFO_ID */
+
+# ifdef HAVE_STRUCT_BPF_MAP_INFO_KEY_SIZE
+	static_assert(SoM(struct bpf_map_info_struct, key_size) == SoM(struct bpf_map_info, key_size),
+		      "bpf_map_info_struct.key_size size mismatch");
+	static_assert(offsetof(struct bpf_map_info_struct, key_size) == offsetof(struct bpf_map_info, key_size),
+		      "bpf_map_info_struct.key_size offset mismatch");
+# endif /* HAVE_STRUCT_BPF_MAP_INFO_KEY_SIZE */
+
+# ifdef HAVE_STRUCT_BPF_MAP_INFO_VALUE_SIZE
+	static_assert(SoM(struct bpf_map_info_struct, value_size) == SoM(struct bpf_map_info, value_size),
+		      "bpf_map_info_struct.value_size size mismatch");
+	static_assert(offsetof(struct bpf_map_info_struct, value_size) == offsetof(struct bpf_map_info, value_size),
+		      "bpf_map_info_struct.value_size offset mismatch");
+# endif /* HAVE_STRUCT_BPF_MAP_INFO_VALUE_SIZE */
+
+# ifdef HAVE_STRUCT_BPF_MAP_INFO_MAX_ENTRIES
+	static_assert(SoM(struct bpf_map_info_struct, max_entries) == SoM(struct bpf_map_info, max_entries),
+		      "bpf_map_info_struct.max_entries size mismatch");
+	static_assert(offsetof(struct bpf_map_info_struct, max_entries) == offsetof(struct bpf_map_info, max_entries),
+		      "bpf_map_info_struct.max_entries offset mismatch");
+# endif /* HAVE_STRUCT_BPF_MAP_INFO_MAX_ENTRIES */
+
+# ifdef HAVE_STRUCT_BPF_MAP_INFO_MAP_FLAGS
+	static_assert(SoM(struct bpf_map_info_struct, map_flags) == SoM(struct bpf_map_info, map_flags),
+		      "bpf_map_info_struct.map_flags size mismatch");
+	static_assert(offsetof(struct bpf_map_info_struct, map_flags) == offsetof(struct bpf_map_info, map_flags),
+		      "bpf_map_info_struct.map_flags offset mismatch");
+# endif /* HAVE_STRUCT_BPF_MAP_INFO_MAP_FLAGS */
+
+# ifdef HAVE_STRUCT_BPF_MAP_INFO_NAME
+	static_assert(SoM(struct bpf_map_info_struct, name) == SoM(struct bpf_map_info, name),
+		      "bpf_map_info_struct.name size mismatch");
+	static_assert(offsetof(struct bpf_map_info_struct, name) == offsetof(struct bpf_map_info, name),
+		      "bpf_map_info_struct.name offset mismatch");
+# endif /* HAVE_STRUCT_BPF_MAP_INFO_NAME */
+
+# ifdef HAVE_STRUCT_BPF_MAP_INFO_IFINDEX
+	static_assert(SoM(struct bpf_map_info_struct, ifindex) == SoM(struct bpf_map_info, ifindex),
+		      "bpf_map_info_struct.ifindex size mismatch");
+	static_assert(offsetof(struct bpf_map_info_struct, ifindex) == offsetof(struct bpf_map_info, ifindex),
+		      "bpf_map_info_struct.ifindex offset mismatch");
+# endif /* HAVE_STRUCT_BPF_MAP_INFO_IFINDEX */
+
+static_assert(bpf_map_info_struct_size == expected_bpf_map_info_struct_size,
+	      "bpf_map_info_struct_size mismatch");
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_TYPE
+	static_assert(SoM(struct bpf_prog_info_struct, type) == SoM(struct bpf_prog_info, type),
+		      "bpf_prog_info_struct.type size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, type) == offsetof(struct bpf_prog_info, type),
+		      "bpf_prog_info_struct.type offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_TYPE */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_ID
+	static_assert(SoM(struct bpf_prog_info_struct, id) == SoM(struct bpf_prog_info, id),
+		      "bpf_prog_info_struct.id size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, id) == offsetof(struct bpf_prog_info, id),
+		      "bpf_prog_info_struct.id offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_ID */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_TAG
+	static_assert(SoM(struct bpf_prog_info_struct, tag) == SoM(struct bpf_prog_info, tag),
+		      "bpf_prog_info_struct.tag size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, tag) == offsetof(struct bpf_prog_info, tag),
+		      "bpf_prog_info_struct.tag offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_TAG */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_LEN
+	static_assert(SoM(struct bpf_prog_info_struct, jited_prog_len) == SoM(struct bpf_prog_info, jited_prog_len),
+		      "bpf_prog_info_struct.jited_prog_len size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, jited_prog_len) == offsetof(struct bpf_prog_info, jited_prog_len),
+		      "bpf_prog_info_struct.jited_prog_len offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_LEN */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_LEN
+	static_assert(SoM(struct bpf_prog_info_struct, xlated_prog_len) == SoM(struct bpf_prog_info, xlated_prog_len),
+		      "bpf_prog_info_struct.xlated_prog_len size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, xlated_prog_len) == offsetof(struct bpf_prog_info, xlated_prog_len),
+		      "bpf_prog_info_struct.xlated_prog_len offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_LEN */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_INSNS
+	static_assert(SoM(struct bpf_prog_info_struct, jited_prog_insns) == SoM(struct bpf_prog_info, jited_prog_insns),
+		      "bpf_prog_info_struct.jited_prog_insns size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, jited_prog_insns) == offsetof(struct bpf_prog_info, jited_prog_insns),
+		      "bpf_prog_info_struct.jited_prog_insns offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_INSNS */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_INSNS
+	static_assert(SoM(struct bpf_prog_info_struct, xlated_prog_insns) == SoM(struct bpf_prog_info, xlated_prog_insns),
+		      "bpf_prog_info_struct.xlated_prog_insns size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, xlated_prog_insns) == offsetof(struct bpf_prog_info, xlated_prog_insns),
+		      "bpf_prog_info_struct.xlated_prog_insns offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_INSNS */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_LOAD_TIME
+	static_assert(SoM(struct bpf_prog_info_struct, load_time) == SoM(struct bpf_prog_info, load_time),
+		      "bpf_prog_info_struct.load_time size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, load_time) == offsetof(struct bpf_prog_info, load_time),
+		      "bpf_prog_info_struct.load_time offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_LOAD_TIME */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_CREATED_BY_UID
+	static_assert(SoM(struct bpf_prog_info_struct, created_by_uid) == SoM(struct bpf_prog_info, created_by_uid),
+		      "bpf_prog_info_struct.created_by_uid size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, created_by_uid) == offsetof(struct bpf_prog_info, created_by_uid),
+		      "bpf_prog_info_struct.created_by_uid offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_CREATED_BY_UID */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_NR_MAP_IDS
+	static_assert(SoM(struct bpf_prog_info_struct, nr_map_ids) == SoM(struct bpf_prog_info, nr_map_ids),
+		      "bpf_prog_info_struct.nr_map_ids size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, nr_map_ids) == offsetof(struct bpf_prog_info, nr_map_ids),
+		      "bpf_prog_info_struct.nr_map_ids offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_NR_MAP_IDS */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_MAP_IDS
+	static_assert(SoM(struct bpf_prog_info_struct, map_ids) == SoM(struct bpf_prog_info, map_ids),
+		      "bpf_prog_info_struct.map_ids size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, map_ids) == offsetof(struct bpf_prog_info, map_ids),
+		      "bpf_prog_info_struct.map_ids offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_MAP_IDS */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_NAME
+	static_assert(SoM(struct bpf_prog_info_struct, name) == SoM(struct bpf_prog_info, name),
+		      "bpf_prog_info_struct.name size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, name) == offsetof(struct bpf_prog_info, name),
+		      "bpf_prog_info_struct.name offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_NAME */
+
+# ifdef HAVE_STRUCT_BPF_PROG_INFO_IFINDEX
+	static_assert(SoM(struct bpf_prog_info_struct, ifindex) == SoM(struct bpf_prog_info, ifindex),
+		      "bpf_prog_info_struct.ifindex size mismatch");
+	static_assert(offsetof(struct bpf_prog_info_struct, ifindex) == offsetof(struct bpf_prog_info, ifindex),
+		      "bpf_prog_info_struct.ifindex offset mismatch");
+# endif /* HAVE_STRUCT_BPF_PROG_INFO_IFINDEX */
+
+static_assert(bpf_prog_info_struct_size == expected_bpf_prog_info_struct_size,
+	      "bpf_prog_info_struct_size mismatch");
+
 #endif /* HAVE_LINUX_BPF_H */
diff --git a/bpf_filter.c b/bpf_filter.c
index 32fd435..a102e14 100644
--- a/bpf_filter.c
+++ b/bpf_filter.c
@@ -34,6 +34,7 @@
 #include "bpf_fprog.h"
 
 #include <linux/filter.h>
+
 #include "xlat/bpf_class.h"
 #include "xlat/bpf_miscop.h"
 #include "xlat/bpf_mode.h"
@@ -43,56 +44,85 @@
 #include "xlat/bpf_size.h"
 #include "xlat/bpf_src.h"
 
-static void
-print_bpf_filter_code(const uint16_t code)
+#include "xlat/ebpf_class.h"
+#include "xlat/ebpf_mode.h"
+#include "xlat/ebpf_op_alu.h"
+#include "xlat/ebpf_op_jmp.h"
+#include "xlat/ebpf_size.h"
+
+void
+print_bpf_filter_code(const uint16_t code, bool extended)
 {
+	const struct xlat *mode = extended ? ebpf_mode : bpf_mode;
 	uint16_t i = code & ~BPF_CLASS(code);
 
-	printxval(bpf_class, BPF_CLASS(code), "BPF_???");
+	if (extended)
+		printxval_index(ebpf_class, BPF_CLASS(code), "BPF_???");
+	else
+		printxval_index(bpf_class, BPF_CLASS(code), "BPF_???");
 	switch (BPF_CLASS(code)) {
+	case BPF_ST:
+	case BPF_STX:
+		if (!extended) {
+			if (i) {
+				tprintf("|%#x", i);
+				tprints_comment("BPF_???");
+			}
+			break;
+		}
+		ATTRIBUTE_FALLTHROUGH; /* extended == true */
+
 	case BPF_LD:
 	case BPF_LDX:
 		tprints("|");
-		printxval(bpf_size, BPF_SIZE(code), "BPF_???");
+		printxvals(BPF_SIZE(code), "BPF_???",
+			   bpf_size, extended ? ebpf_size : NULL, NULL);
 		tprints("|");
-		printxval(bpf_mode, BPF_MODE(code), "BPF_???");
+		printxval(mode, BPF_MODE(code), "BPF_???");
 		break;
-	case BPF_ST:
-	case BPF_STX:
-		if (i) {
-			tprintf("|%#x", i);
-			tprints_comment("BPF_???");
+
+	case BPF_MISC: /* BPF_ALU64 in eBPF */
+		if (!extended) {
+			tprints("|");
+			printxval(bpf_miscop, BPF_MISCOP(code), "BPF_???");
+			i &= ~BPF_MISCOP(code);
+			if (i) {
+				tprintf("|%#x", i);
+				tprints_comment("BPF_???");
+			}
+			break;
 		}
-		break;
+		ATTRIBUTE_FALLTHROUGH; /* extended == true */
+
 	case BPF_ALU:
 		tprints("|");
 		printxval(bpf_src, BPF_SRC(code), "BPF_???");
 		tprints("|");
-		printxval(bpf_op_alu, BPF_OP(code), "BPF_???");
+		printxvals(BPF_OP(code), "BPF_???",
+			   bpf_op_alu,
+			   extended ? ebpf_op_alu : NULL, NULL);
 		break;
+
 	case BPF_JMP:
 		tprints("|");
 		printxval(bpf_src, BPF_SRC(code), "BPF_???");
 		tprints("|");
-		printxval(bpf_op_jmp, BPF_OP(code), "BPF_???");
+		printxvals(BPF_OP(code), "BPF_???",
+			   bpf_op_jmp, extended ? ebpf_op_jmp : NULL, NULL);
 		break;
-	case BPF_RET:
-		tprints("|");
-		printxval(bpf_rval, BPF_RVAL(code), "BPF_???");
-		i &= ~BPF_RVAL(code);
+
+	case BPF_RET: /* Reserved in eBPF */
+		if (!extended) {
+			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;
 	}
 }
@@ -102,7 +132,7 @@
 		      const print_bpf_filter_fn print_k)
 {
 	tprints("BPF_STMT(");
-	print_bpf_filter_code(filter->code);
+	print_bpf_filter_code(filter->code, false);
 	tprints(", ");
 	if (!print_k || !print_k(filter))
 		tprintf("%#x", filter->k);
@@ -113,7 +143,7 @@
 print_bpf_filter_jump(const struct bpf_filter_block *const filter)
 {
 	tprints("BPF_JUMP(");
-	print_bpf_filter_code(filter->code);
+	print_bpf_filter_code(filter->code, false);
 	tprintf(", %#x, %#x, %#x)", filter->k, filter->jt, filter->jf);
 }
 
@@ -153,7 +183,7 @@
 		struct bpf_filter_block filter;
 
 		print_array(tcp, addr, len, &filter, sizeof(filter),
-			    umoven_or_printaddr, print_bpf_filter_block, &fbd);
+			    tfetch_mem, print_bpf_filter_block, &fbd);
 	}
 }
 
diff --git a/bpf_sock_filter.c b/bpf_sock_filter.c
index 7f8e16a..f3d38a0 100644
--- a/bpf_sock_filter.c
+++ b/bpf_sock_filter.c
@@ -2,6 +2,7 @@
  * Decoder of socket filter programs.
  *
  * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,23 +34,25 @@
 
 #include <linux/filter.h>
 #include "xlat/skf_ad.h"
+#include "xlat/skf_off.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+");
+			print_xlat32(SKF_AD_OFF);
+			tprints("+");
 			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);
+			print_xlat32(SKF_NET_OFF);
+			tprintf("+%u", 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);
+			print_xlat32(SKF_LL_OFF);
+			tprintf("+%u", fp->k - (unsigned int) SKF_LL_OFF);
 			return true;
 		}
 	}
diff --git a/btrfs.c b/btrfs.c
index ff10d69..7ab0171 100644
--- a/btrfs.c
+++ b/btrfs.c
@@ -84,10 +84,6 @@
 # define BTRFS_LABEL_SIZE 256
 #endif
 
-#ifndef BTRFS_FIRST_FREE_OBJECTID
-# define BTRFS_FIRST_FREE_OBJECTID 256ULL
-#endif
-
 #ifndef BTRFS_IOC_QUOTA_RESCAN
 struct btrfs_ioctl_quota_rescan_args {
 	uint64_t flags, progress, reserved[6];
@@ -128,6 +124,7 @@
 #include "xlat/btrfs_balance_flags.h"
 #include "xlat/btrfs_balance_state.h"
 #include "xlat/btrfs_compress_types.h"
+#include "xlat/btrfs_cont_reading_from_srcdev_mode.h"
 #include "xlat/btrfs_defrag_flags.h"
 #include "xlat/btrfs_dev_replace_cmds.h"
 #include "xlat/btrfs_dev_replace_results.h"
@@ -179,30 +176,20 @@
 }
 
 static void
-print_u64(const char *name, uint64_t value)
-{
-	tprintf(", %s=%" PRIu64, name, value);
-	if (value == UINT64_MAX)
-		tprints_comment("UINT64_MAX");
-}
-
-#define print_member_u64(obj, name) print_u64(#name, obj->name)
-
-static void
 btrfs_print_balance_args(const char *name, const struct btrfs_balance_args *bba)
 {
-	tprintf(", %s={profiles=", name);
-	printflags64(btrfs_space_info_flags, bba->profiles,
-		     "BTRFS_BLOCK_GROUP_???");
-	print_member_u64(bba, usage);
-	print_member_u64(bba, devid);
-	print_member_u64(bba, pstart);
-	print_member_u64(bba, pend);
-	print_member_u64(bba, vstart);
-	print_member_u64(bba, vend);
-	print_member_u64(bba, target);
-	tprints(", flags=");
-	printflags64(btrfs_balance_args, bba->flags, "BTRFS_BALANCE_ARGS_???");
+	tprintf(", %s=", name);
+	PRINT_FIELD_FLAGS("{", *bba, profiles, btrfs_space_info_flags,
+			  "BTRFS_BLOCK_GROUP_???");
+	PRINT_FIELD_U64(", ", *bba, usage);
+	PRINT_FIELD_DEV(", ", *bba, devid);
+	PRINT_FIELD_U64(", ", *bba, pstart);
+	PRINT_FIELD_U64(", ", *bba, pend);
+	PRINT_FIELD_U64(", ", *bba, vstart);
+	PRINT_FIELD_U64(", ", *bba, vend);
+	PRINT_FIELD_U64(", ", *bba, target);
+	PRINT_FIELD_FLAGS(", ", *bba, flags, btrfs_balance_args,
+			  "BTRFS_BALANCE_ARGS_???");
 	tprints("}");
 }
 
@@ -214,14 +201,12 @@
 	if (umove_or_printaddr(tcp, arg, &balance_args))
 		return;
 
-	tprints("{flags=");
-	printflags64(btrfs_balance_flags, balance_args.flags,
-		     "BTRFS_BALANCE_???");
-	if (out) {
-		tprints(", state=");
-		printflags64(btrfs_balance_state, balance_args.state,
-			     "BTRFS_BALANCE_STATE_???");
-	}
+	PRINT_FIELD_FLAGS("{", balance_args, flags, btrfs_balance_flags,
+			  "BTRFS_BALANCE_???");
+	if (out)
+		PRINT_FIELD_FLAGS(", ", balance_args, state,
+				  btrfs_balance_state,
+				  "BTRFS_BALANCE_STATE_???");
 
 	if (balance_args.flags & BTRFS_BALANCE_DATA)
 		btrfs_print_balance_args("data", &balance_args.data);
@@ -235,53 +220,41 @@
 static void
 btrfs_print_features(const struct btrfs_ioctl_feature_flags *flags)
 {
-	tprints("{compat_flags=");
-	printflags64(btrfs_features_compat, flags->compat_flags,
-		     "BTRFS_FEATURE_COMPAT_???");
-
-	tprints(", compat_ro_flags=");
-	printflags64(btrfs_features_compat_ro, flags->compat_ro_flags,
-		     "BTRFS_FEATURE_COMPAT_RO_???");
-
-	tprints(", incompat_flags=");
-	printflags64(btrfs_features_incompat, flags->incompat_flags,
-		     "BTRFS_FEATURE_INCOMPAT_???");
+	PRINT_FIELD_FLAGS("{", *flags, compat_flags, btrfs_features_compat,
+			  "BTRFS_FEATURE_COMPAT_???");
+	PRINT_FIELD_FLAGS(", ", *flags, compat_ro_flags,
+			  btrfs_features_compat_ro,
+			  "BTRFS_FEATURE_COMPAT_RO_???");
+	PRINT_FIELD_FLAGS(", ", *flags, incompat_flags, btrfs_features_incompat,
+			  "BTRFS_FEATURE_INCOMPAT_???");
 	tprints("}");
 }
 
 static void
 btrfs_print_qgroup_limit(const struct btrfs_qgroup_limit *lim)
 {
-	tprints("{flags=");
-	printflags64(btrfs_qgroup_limit_flags, lim->flags,
-		     "BTRFS_QGROUP_LIMIT_???");
-	tprintf(", max_rfer=%" PRI__u64 ", max_excl=%" PRI__u64
-		", rsv_rfer=%" PRI__u64 ", rsv_excl=%" PRI__u64 "}",
-		lim->max_rfer, lim->max_excl,
-		lim->rsv_rfer, lim->rsv_excl);
+	PRINT_FIELD_FLAGS(", lim={", *lim, flags, btrfs_qgroup_limit_flags,
+			  "BTRFS_QGROUP_LIMIT_???");
+	PRINT_FIELD_U(", ", *lim, max_rfer);
+	PRINT_FIELD_U(", ", *lim, max_excl);
+	PRINT_FIELD_U(", ", *lim, rsv_rfer);
+	PRINT_FIELD_U(", ", *lim, rsv_excl);
+	tprints("}");
 }
 
-static void
-btrfs_print_key_type(uint32_t type)
-{
-	tprintf("%u", type);
-	tprints_comment(xlookup(btrfs_key_types, type));
-}
-
-static void
-btrfs_print_objectid(uint64_t objectid)
-{
-	tprintf("%" PRIu64, objectid);
-	tprints_comment(xlookup(btrfs_tree_objectids, objectid));
-}
+#define btrfs_print_key_type(prefix_, where_, field_) \
+	PRINT_FIELD_XVAL_U((prefix_), (where_), field_, btrfs_key_types, NULL)
+#define btrfs_print_objectid(prefix_, where_, field_) \
+	PRINT_FIELD_XVAL_U((prefix_), (where_), field_, btrfs_tree_objectids, \
+			   NULL)
 
 static void
 btrfs_print_data_container_header(const struct btrfs_data_container *container)
 {
-	tprintf("{bytes_left=%u, bytes_missing=%u"
-		", elem_cnt=%u, elem_missed=%u, val=",
-		container->bytes_left, container->bytes_missing,
-		container->elem_cnt, container->elem_missed);
+	PRINT_FIELD_U("{", *container, bytes_left);
+	PRINT_FIELD_U(", ", *container, bytes_missing);
+	PRINT_FIELD_U(", ", *container, elem_cnt);
+	PRINT_FIELD_U(", ", *container, elem_missed);
 }
 
 static void
@@ -294,10 +267,16 @@
 print_btrfs_data_container_logical_ino(struct tcb *tcp, void *elem_buf,
 				       size_t elem_size, void *data)
 {
-	const uint64_t *const record = elem_buf;
+	const struct {
+		uint64_t inum;
+		uint64_t offset;
+		uint64_t root;
+	} *const record = elem_buf;
 
-	tprintf("{inum=%" PRIu64 ", offset=%" PRIu64 ", root=%" PRIu64 "}",
-		record[0], record[1], record[2]);
+	PRINT_FIELD_U("{", *record, inum);
+	PRINT_FIELD_U(", ", *record, offset);
+	PRINT_FIELD_U(", ", *record, root);
+	tprints("}");
 
 	return true;
 }
@@ -314,14 +293,15 @@
 	btrfs_print_data_container_header(&container);
 
 	if (abbrev(tcp)) {
-		tprints("...");
+		tprints(", ...");
 	} else {
 		const uint64_t val_addr =
 			inodes_addr + offsetof(typeof(container), val);
 		uint64_t record[3];
+		tprints(", val=");
 		print_array(tcp, val_addr, container.elem_cnt / 3,
 			    record, sizeof(record),
-			    umoven_or_printaddr,
+			    tfetch_mem,
 			    print_btrfs_data_container_logical_ino, 0);
 	}
 
@@ -352,28 +332,21 @@
 	btrfs_print_data_container_header(&container);
 
 	if (abbrev(tcp)) {
-		tprints("...");
+		tprints(", ...");
 	} else {
 		uint64_t val_addr =
 			fspath_addr + offsetof(typeof(container), val);
 		uint64_t offset;
+		tprints(", val=");
 		print_array(tcp, val_addr, container.elem_cnt,
 			    &offset, sizeof(offset),
-			    umoven_or_printaddr,
+			    tfetch_mem,
 			    print_btrfs_data_container_ino_path, &val_addr);
 	}
 
 	btrfs_print_data_container_footer();
 }
 
-static bool
-print_uint64(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data)
-{
-	tprintf("%" PRIu64, *(uint64_t *) elem_buf);
-
-	return true;
-}
-
 static void
 btrfs_print_qgroup_inherit(struct tcb *const tcp, const kernel_ulong_t qgi_addr)
 {
@@ -382,101 +355,84 @@
 	if (umove_or_printaddr(tcp, qgi_addr, &inherit))
 		return;
 
-	tprints("{flags=");
-	printflags64(btrfs_qgroup_inherit_flags, inherit.flags,
-		     "BTRFS_QGROUP_INHERIT_???");
-	tprintf(", num_qgroups=%" PRI__u64 ", num_ref_copies=%" PRI__u64
-		", num_excl_copies=%" PRI__u64 ", lim=",
-		inherit.num_qgroups, inherit.num_ref_copies,
-		inherit.num_excl_copies);
+	PRINT_FIELD_FLAGS("{", inherit, flags, btrfs_qgroup_inherit_flags,
+			  "BTRFS_QGROUP_INHERIT_???");
+	PRINT_FIELD_U(", ", inherit, num_qgroups);
+	PRINT_FIELD_U(", ", inherit, num_ref_copies);
+	PRINT_FIELD_U(", ", inherit, num_excl_copies);
 
 	btrfs_print_qgroup_limit(&inherit.lim);
 
-	tprints(", qgroups=");
-
 	if (abbrev(tcp)) {
-		tprints("...");
+		tprints(", ...");
 	} else {
 		uint64_t record;
+		tprints(", qgroups=");
 		print_array(tcp, qgi_addr + offsetof(typeof(inherit), qgroups),
 			    inherit.num_qgroups, &record, sizeof(record),
-			    umoven_or_printaddr, print_uint64, 0);
+			    tfetch_mem, print_uint64_array_member, 0);
 	}
 	tprints("}");
 }
 
 static void
-print_key_value_internal(struct tcb *tcp, const char *name, uint64_t value)
-{
-	if (value) {
-		tprintf(", %s=%" PRIu64, name, value);
-		if (value == UINT64_MAX)
-			tprints_comment("UINT64_MAX");
-	}
-}
-#define print_key_value(tcp, key, name)					\
-	print_key_value_internal((tcp), #name, (key)->name)
-
-static void
 btrfs_print_tree_search(struct tcb *tcp, struct btrfs_ioctl_search_key *key,
 			uint64_t buf_addr, uint64_t buf_size, bool print_size)
 {
 	if (entering(tcp)) {
-		tprints("{key={tree_id=");
-		btrfs_print_objectid(key->tree_id);
+		btrfs_print_objectid("{key={", *key, tree_id);
 
 		if (key->min_objectid != BTRFS_FIRST_FREE_OBJECTID ||
-		    !abbrev(tcp)) {
-			tprints(", min_objectid=");
-			btrfs_print_objectid(key->min_objectid);
-		}
+		    !abbrev(tcp))
+			btrfs_print_objectid(", ", *key, min_objectid);
 
 		if (key->max_objectid != BTRFS_LAST_FREE_OBJECTID ||
-		    !abbrev(tcp)) {
-			tprints(", max_objectid=");
-			btrfs_print_objectid(key->max_objectid);
-		}
+		    !abbrev(tcp))
+			btrfs_print_objectid(", ", *key, max_objectid);
 
-		print_key_value(tcp, key, min_offset);
-		print_key_value(tcp, key, max_offset);
-		print_key_value(tcp, key, min_transid);
-		print_key_value(tcp, key, max_transid);
+		PRINT_FIELD_U64(", ", *key, min_offset);
+		PRINT_FIELD_U64(", ", *key, max_offset);
+		PRINT_FIELD_U64(", ", *key, min_transid);
+		PRINT_FIELD_U64(", ", *key, max_transid);
 
-		tprints(", min_type=");
-		btrfs_print_key_type(key->min_type);
-		tprints(", max_type=");
-		btrfs_print_key_type(key->max_type);
-		tprintf(", nr_items=%u}", key->nr_items);
+		btrfs_print_key_type(", ", *key, min_type);
+		btrfs_print_key_type(", ", *key, max_type);
+		PRINT_FIELD_U(", ", *key, nr_items);
+		tprints("}");
 		if (print_size)
 			tprintf(", buf_size=%" PRIu64, buf_size);
 		tprints("}");
 	} else {
-		tprintf("{key={nr_items=%u}", key->nr_items);
+		PRINT_FIELD_U("{key={", *key, nr_items);
+		tprints("}");
 		if (print_size)
 			tprintf(", buf_size=%" PRIu64, buf_size);
-		tprints(", buf=");
-		if (abbrev(tcp))
-			tprints("...");
-		else {
+		if (abbrev(tcp)) {
+			tprints(", ...");
+		} else {
 			uint64_t i;
 			uint64_t off = 0;
-			tprints("[");
+			tprints(", buf=[");
 			for (i = 0; i < key->nr_items; i++) {
 				struct btrfs_ioctl_search_header sh;
 				uint64_t addr = buf_addr + off;
 				if (i)
 					tprints(", ");
-				if (i > max_strlen ||
-				    umove(tcp, addr, &sh)) {
+				if (i > max_strlen) {
 					tprints("...");
 					break;
 				}
-				tprintf("{transid=%" PRI__u64 ", objectid=",
-					sh.transid);
-				btrfs_print_objectid(sh.objectid);
-				tprintf(", offset=%" PRI__u64 ", type=", sh.offset);
-				btrfs_print_key_type(sh.type);
-				tprintf(", len=%u}", sh.len);
+				if (umove(tcp, addr, &sh)) {
+					tprints("...");
+					printaddr_comment(addr);
+					break;
+				}
+				PRINT_FIELD_U("{", sh, transid);
+				btrfs_print_objectid(", ", sh, objectid);
+				PRINT_FIELD_U(", ", sh, offset);
+				btrfs_print_key_type(", ", sh, type);
+				PRINT_FIELD_U(", ", sh, len);
+				tprints("}");
 				off += sizeof(sh) + sh.len;
 
 			}
@@ -490,7 +446,8 @@
 print_objectid_callback(struct tcb *tcp, void *elem_buf,
 			size_t elem_size, void *data)
 {
-	btrfs_print_objectid(*(uint64_t *) elem_buf);
+	printxvals_ex(*(uint64_t *) elem_buf, NULL, XLAT_STYLE_FMT_U,
+		      btrfs_tree_objectids, NULL);
 
 	return true;
 }
@@ -501,15 +458,22 @@
 {
 	const struct btrfs_ioctl_space_info *info = elem_buf;
 
-	tprints("{flags=");
-	printflags64(btrfs_space_info_flags, info->flags,
-		     "BTRFS_SPACE_INFO_???");
-	tprintf(", total_bytes=%" PRI__u64 ", used_bytes=%" PRI__u64 "}",
-		info->total_bytes, info->used_bytes);
+	PRINT_FIELD_FLAGS("{", *info, flags, btrfs_space_info_flags,
+			  "BTRFS_SPACE_INFO_???");
+	PRINT_FIELD_U(", ", *info, total_bytes);
+	PRINT_FIELD_U(", ", *info, used_bytes);
+	tprints("}");
 
 	return true;
 }
 
+static void
+print_btrfs_timespec(const char *prefix, uint64_t sec, uint32_t nsec)
+{
+	tprintf("%s{sec=%" PRIu64 ", nsec=%u}", prefix, sec, nsec);
+	tprints_comment(sprinttime_nsec(sec, nsec));
+}
+
 MPERS_PRINTER_DECL(int, btrfs_ioctl,
 		   struct tcb *const tcp, const unsigned int code,
 		   const kernel_ulong_t arg)
@@ -605,19 +569,14 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprintf("{start=%" PRIu64 ", len=", (uint64_t)args.start);
+		PRINT_FIELD_U("{", args, start);
+		PRINT_FIELD_U64(", ", args, len);
 
-		tprintf("%" PRIu64, (uint64_t) args.len);
-		if (args.len == UINT64_MAX)
-			tprints_comment("UINT64_MAX");
-
-		tprints(", flags=");
-		printflags64(btrfs_defrag_flags, args.flags,
-			     "BTRFS_DEFRAG_RANGE_???");
-		tprintf(", extent_thresh=%u, compress_type=",
-			args.extent_thresh);
-		printxval(btrfs_compress_types, args.compress_type,
-			  "BTRFS_COMPRESS_???");
+		PRINT_FIELD_FLAGS(", ", args, flags, btrfs_defrag_flags,
+				  "BTRFS_DEFRAG_RANGE_???");
+		PRINT_FIELD_U(", ", args, extent_thresh);
+		PRINT_FIELD_XVAL(", ", args, compress_type,
+				 btrfs_compress_types, "BTRFS_COMPRESS_???");
 		tprints("}");
 		break;
 	}
@@ -635,23 +594,25 @@
 			tprints(" => ");
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
-		tprints("{");
 
 		valid = btrfs_unparse_uuid(args.uuid, uuid);
 		if (entering(tcp)) {
-			tprintf("devid=%" PRI__u64, args.devid);
+			PRINT_FIELD_DEV("{", args, devid);
 			if (valid)
 				tprintf(", uuid=%s", uuid);
 			tprints("}");
 			return 0;
 		}
+
+		tprints("{");
 		if (valid)
 			tprintf("uuid=%s, ", uuid);
-		tprintf("bytes_used=%" PRI__u64
-			", total_bytes=%" PRI__u64,
-			args.bytes_used, args.total_bytes);
+
+		PRINT_FIELD_U("", args, bytes_used);
+		PRINT_FIELD_U(", ", args, total_bytes);
 		PRINT_FIELD_CSTRING(", ", args, path);
 		tprints("}");
+
 		break;
 	}
 
@@ -669,24 +630,20 @@
 			break;
 
 		if (entering(tcp)) {
-			tprints("{cmd=");
-			printxval64(btrfs_dev_replace_cmds, args.cmd,
-				    "BTRFS_IOCTL_DEV_REPLACE_CMD_???");
+			PRINT_FIELD_XVAL("{", args, cmd, btrfs_dev_replace_cmds,
+					 "BTRFS_IOCTL_DEV_REPLACE_CMD_???");
 			if (args.cmd == BTRFS_IOCTL_DEV_REPLACE_CMD_START) {
-				const char *str;
-				tprintf(", start={srcdevid=%" PRIu64
-				   ", cont_reading_from_srcdev_mode=%" PRIu64
-				   ", srcdev_name=",
-				   (uint64_t) args.start.srcdevid,
-				   (uint64_t) args.start.cont_reading_from_srcdev_mode);
-
-				str = (const char *) args.start.srcdev_name;
-				print_quoted_cstring(str,
-						sizeof(args.start.srcdev_name));
-				tprints(", tgtdev_name=");
-				str = (const char *) args.start.tgtdev_name;
-				print_quoted_cstring(str,
-						sizeof(args.start.tgtdev_name));
+				PRINT_FIELD_DEV(", start={", args.start,
+					      srcdevid);
+				PRINT_FIELD_XVAL(", ", args.start,
+					cont_reading_from_srcdev_mode,
+					btrfs_cont_reading_from_srcdev_mode,
+					"BTRFS_IOCTL_DEV_REPLACE_CONT_READING"
+					"_FROM_SRCDEV_MODE_???");
+				PRINT_FIELD_CSTRING(", ", args.start,
+						    srcdev_name);
+				PRINT_FIELD_CSTRING(", ", args.start,
+						    tgtdev_name);
 				tprints("}");
 
 			}
@@ -694,34 +651,28 @@
 			return 0;
 		}
 
-		tprints("{result=");
-		printxval64(btrfs_dev_replace_results, args.result,
-			    "BTRFS_IOCTL_DEV_REPLACE_RESULT_???");
+		PRINT_FIELD_XVAL("{", args, result, btrfs_dev_replace_results,
+				 "BTRFS_IOCTL_DEV_REPLACE_RESULT_???");
 		if (args.cmd == BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS) {
-			tprints(", ");
-			printxval64(btrfs_dev_replace_state,
-				   args.status.replace_state,
-				   "BTRFS_IOCTL_DEV_REPLACE_STATE_???");
-			tprintf(", progress_1000=%" PRIu64,
-				(uint64_t) args.status.progress_1000);
+			PRINT_FIELD_XVAL(", status={", args.status,
+					 replace_state, btrfs_dev_replace_state,
+					 "BTRFS_IOCTL_DEV_REPLACE_STATE_???");
 
+			PRINT_FIELD_U(", ", args.status, progress_1000);
 			if (args.status.progress_1000 <= 1000)
 				tprintf_comment("%u.%u%%",
 					(unsigned) args.status.progress_1000 / 10,
 					(unsigned) args.status.progress_1000 % 10);
 
-			tprintf(", time_started=%" PRIu64,
-				(uint64_t) args.status.time_started);
+			PRINT_FIELD_U(", ", args.status, time_started);
 			tprints_comment(sprinttime(args.status.time_started));
 
-			tprintf(", time_stopped=%" PRIu64,
-				(uint64_t) args.status.time_stopped);
+			PRINT_FIELD_U(", ", args.status, time_stopped);
 			tprints_comment(sprinttime(args.status.time_stopped));
 
-			tprintf(", num_write_errors=%" PRIu64
-				", num_uncorrectable_read_errors=%" PRIu64,
-				(uint64_t) args.status.num_write_errors,
-				(uint64_t) args.status.num_uncorrectable_read_errors);
+			PRINT_FIELD_U(", ", args.status, num_write_errors);
+			PRINT_FIELD_U(", ", args.status,
+				      num_uncorrectable_read_errors);
 		}
 		tprints("}");
 		break;
@@ -810,12 +761,11 @@
 #endif
 		btrfs_unparse_uuid(args.fsid, uuid);
 
-		tprints("{");
-		tprintf("max_id=%" PRI__u64 ", num_devices=%" PRI__u64
-			", fsid=%s, nodesize=%u, sectorsize=%u"
+		PRINT_FIELD_U("{", args, max_id);
+		PRINT_FIELD_U(", ", args, num_devices);
+		tprintf(", fsid=%s, nodesize=%u, sectorsize=%u"
 			", clone_alignment=%u",
-			args.max_id, args.num_devices, uuid,
-			nodesize, sectorsize, clone_alignment);
+			uuid, nodesize, sectorsize, clone_alignment);
 		tprints("}");
 		break;
 	}
@@ -835,12 +785,14 @@
 
 		tprints("{");
 
-		if (entering(tcp))
-			tprintf("devid=%" PRI__u64 ", ", args.devid);
+		if (entering(tcp)) {
+			PRINT_FIELD_DEV("", args, devid);
+			tprints(", ");
+		}
 
-		tprintf("nr_items=%" PRI__u64 ", flags=", args.nr_items);
-		printflags64(btrfs_dev_stats_flags, args.flags,
-			     "BTRFS_DEV_STATS_???");
+		PRINT_FIELD_U("", args, nr_items);
+		PRINT_FIELD_FLAGS(", ", args, flags, btrfs_dev_stats_flags,
+				  "BTRFS_DEV_STATS_???");
 
 		if (entering(tcp)) {
 			tprints("}");
@@ -860,8 +812,10 @@
 				tprints("...");
 				break;
 			}
-			tprintf("%" PRI__u64, args.values[i]);
-			tprints_comment(xlookup(btrfs_dev_stats_values, i));
+
+			tprints("[");
+			printxval_u(btrfs_dev_stats_values, i, NULL);
+			tprintf("] = %" PRI__u64, args.values[i]);
 		}
 		tprints("]}");
 		break;
@@ -885,18 +839,15 @@
 			if (args.treeid == 0)
 				set_tcb_priv_ulong(tcp, 1);
 
-			tprints("{treeid=");
-			btrfs_print_objectid(args.treeid);
-			tprints(", objectid=");
-			btrfs_print_objectid(args.objectid);
+			btrfs_print_objectid("{", args, treeid);
+			btrfs_print_objectid(", ", args, objectid);
 			tprints("}");
 			return 0;
 		}
 
 		tprints("{");
 		if (get_tcb_priv_ulong(tcp)) {
-			tprints("treeid=");
-			btrfs_print_objectid(args.treeid);
+			btrfs_print_objectid("", args, treeid);
 			tprints(", ");
 		}
 
@@ -918,18 +869,15 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprints("{");
-
 		if (entering(tcp)) {
-			tprintf("inum=%" PRI__u64 ", size=%" PRI__u64,
-				args.inum, args.size);
-			tprints(", fspath=");
-			printaddr64(args.fspath);
+			PRINT_FIELD_U("{", args, inum);
+			PRINT_FIELD_U(", ", args, size);
+			PRINT_FIELD_ADDR64(", ", args, fspath);
 			tprints("}");
 			return 0;
 		}
 
-		tprints("fspath=");
+		tprints("{fspath=");
 		btrfs_print_ino_path_container(tcp, args.fspath);
 
 		tprints("}");
@@ -949,11 +897,9 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprints("{");
-
 		if (entering(tcp)) {
-			tprintf("logical=%" PRI__u64 ", size=%" PRI__u64,
-				args.logical, args.size);
+			PRINT_FIELD_U("{", args, logical);
+			PRINT_FIELD_U(", ", args, size);
 
 			if (!IS_ARRAY_ZERO(args.reserved)) {
 				tprints(", reserved=[");
@@ -972,13 +918,12 @@
 				     args.reserved[3]
 #endif
 				     , "BTRFS_LOGICAL_INO_ARGS_???");
-			tprints(", inodes=");
-			printaddr64(args.inodes);
+			PRINT_FIELD_ADDR64(", ", args, inodes);
 			tprints("}");
 			return 0;
 		}
 
-		tprints("inodes=");
+		tprints("{inodes=");
 		btrfs_print_logical_ino_container(tcp, args.inodes);
 
 		tprints("}");
@@ -992,9 +937,10 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprintf("{assign=%" PRI__u64 ", src=%" PRI__u64
-			", dst=%" PRI__u64 "}",
-			args.assign, args.src, args.dst);
+		PRINT_FIELD_U("{", args, assign);
+		PRINT_FIELD_U(", ", args, src);
+		PRINT_FIELD_U(", ", args, dst);
+		tprints("}");
 		break;
 	}
 
@@ -1005,8 +951,9 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprintf("{create=%" PRI__u64 ", qgroupid=%" PRI__u64 "}",
-			args.create, args.qgroupid);
+		PRINT_FIELD_U("{", args, create);
+		PRINT_FIELD_U(", ", args, qgroupid);
+		tprints("}");
 		break;
 	}
 
@@ -1020,7 +967,7 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprintf("{qgroupid=%" PRI__u64 ", lim=", args.qgroupid);
+		PRINT_FIELD_U("{", args, qgroupid);
 		btrfs_print_qgroup_limit(&args.lim);
 		tprints("}");
 		break;
@@ -1033,8 +980,8 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		printxval64(btrfs_qgroup_ctl_cmds, args.cmd,
-			    "BTRFS_QUOTA_CTL_???");
+		PRINT_FIELD_XVAL("{", args, cmd, btrfs_qgroup_ctl_cmds,
+				 "BTRFS_QUOTA_CTL_???");
 		tprints("}");
 
 		break;
@@ -1047,7 +994,8 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprintf("{flags=%" PRIu64 "}", (uint64_t) args.flags);
+		PRINT_FIELD_U("{", args, flags);
+		tprints("}");
 		break;
 	}
 
@@ -1061,8 +1009,8 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprintf("{flags=%" PRIu64 ", progress=", (uint64_t) args.flags);
-		btrfs_print_objectid(args.progress);
+		PRINT_FIELD_U("{", args, flags);
+		btrfs_print_objectid(", ", args, progress);
 		tprints("}");
 		break;
 	}
@@ -1083,16 +1031,18 @@
 
 		if (entering(tcp)) {
 			btrfs_unparse_uuid((unsigned char *)args.uuid, uuid);
-			tprintf("{uuid=%s, stransid=%" PRIu64
-				", stime=%" PRIu64 ".%u, flags=%" PRIu64
-				"}", uuid, (uint64_t) args.stransid,
-				(uint64_t) args.stime.sec, args.stime.nsec,
-				(uint64_t) args.flags);
+			tprintf("{uuid=%s", uuid);
+			PRINT_FIELD_U(", ", args, stransid);
+			print_btrfs_timespec(", stime=",
+					     args.stime.sec, args.stime.nsec);
+			PRINT_FIELD_U(", ", args, flags);
+			tprints("}");
 			return 0;
 		}
-		tprintf("{rtransid=%" PRIu64 ", rtime=%" PRIu64 ".%u}",
-			(uint64_t) args.rtransid, (uint64_t) args.rtime.sec,
-			args.rtime.nsec);
+		PRINT_FIELD_U("{", args, rtransid);
+		print_btrfs_timespec(", rtime=",
+				     args.rtime.sec, args.rtime.nsec);
+		tprints("}");
 		break;
 	}
 
@@ -1111,50 +1061,34 @@
 			break;
 
 		if (entering(tcp)) {
-			tprintf("{devid=%" PRI__u64, args.devid);
+			PRINT_FIELD_DEV("{", args, devid);
 			if (code == BTRFS_IOC_SCRUB) {
-				tprintf(", start=%" PRI__u64 ", end=",
-					args.start);
-				tprintf("%" PRI__u64, args.end);
-				if (args.end == UINT64_MAX)
-					tprints_comment("UINT64_MAX");
-				tprints(", flags=");
-				printflags64(btrfs_scrub_flags, args.flags,
-					     "BTRFS_SCRUB_???");
+				PRINT_FIELD_U(", ", args, start);
+				PRINT_FIELD_U64(", ", args, end);
+				PRINT_FIELD_FLAGS(", ", args, flags,
+						  btrfs_scrub_flags,
+						  "BTRFS_SCRUB_???");
 			}
 			tprints("}");
 			return 0;
 		}
-		tprintf("{data_extents_scrubbed=%" PRI__u64
-			", tree_extents_scrubbed=%" PRI__u64
-			", data_bytes_scrubbed=%" PRI__u64
-			", tree_bytes_scrubbed=%" PRI__u64
-			", read_errors=%" PRI__u64
-			", csum_errors=%" PRI__u64
-			", verify_errors=%" PRI__u64
-			", no_csum=%" PRI__u64
-			", csum_discards=%" PRI__u64
-			", super_errors=%" PRI__u64
-			", malloc_errors=%" PRI__u64
-			", uncorrectable_errors=%" PRI__u64
-			", corrected_errors=%" PRI__u64
-			", last_physical=%" PRI__u64
-			", unverified_errors=%" PRI__u64 "}",
-			args.progress.data_extents_scrubbed,
-			args.progress.tree_extents_scrubbed,
-			args.progress.data_bytes_scrubbed,
-			args.progress.tree_bytes_scrubbed,
-			args.progress.read_errors,
-			args.progress.csum_errors,
-			args.progress.verify_errors,
-			args.progress.no_csum,
-			args.progress.csum_discards,
-			args.progress.super_errors,
-			args.progress.malloc_errors,
-			args.progress.uncorrectable_errors,
-			args.progress.corrected_errors,
-			args.progress.last_physical,
-			args.progress.unverified_errors);
+		PRINT_FIELD_U("{progress={", args.progress,
+			      data_extents_scrubbed);
+		PRINT_FIELD_U(", ", args.progress, tree_extents_scrubbed);
+		PRINT_FIELD_U(", ", args.progress, data_bytes_scrubbed);
+		PRINT_FIELD_U(", ", args.progress, tree_bytes_scrubbed);
+		PRINT_FIELD_U(", ", args.progress, read_errors);
+		PRINT_FIELD_U(", ", args.progress, csum_errors);
+		PRINT_FIELD_U(", ", args.progress, verify_errors);
+		PRINT_FIELD_U(", ", args.progress, no_csum);
+		PRINT_FIELD_U(", ", args.progress, csum_discards);
+		PRINT_FIELD_U(", ", args.progress, super_errors);
+		PRINT_FIELD_U(", ", args.progress, malloc_errors);
+		PRINT_FIELD_U(", ", args.progress, uncorrectable_errors);
+		PRINT_FIELD_U(", ", args.progress, corrected_errors);
+		PRINT_FIELD_U(", ", args.progress, last_physical);
+		PRINT_FIELD_U(", ", args.progress, unverified_errors);
+		tprints("}}");
 		break;
 	}
 
@@ -1189,11 +1123,11 @@
 		else if (syserror(tcp)) {
 			if (tcp->u_error == EOVERFLOW) {
 				tprints(" => ");
-				tcp->u_error = 0;
-				if (!umove_or_printaddr(tcp, arg, &args))
-					tprintf("{buf_size=%" PRIu64 "}",
-						(uint64_t)args.buf_size);
-				tcp->u_error = EOVERFLOW;
+				if (!umove_or_printaddr_ignore_syserror(tcp,
+				    arg, &args)) {
+					PRINT_FIELD_U("{", args, buf_size);
+					tprints("}");
+				}
 			}
 			break;
 		} else
@@ -1217,26 +1151,23 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprints("{send_fd=");
-		printfd(tcp, args.send_fd);
-		tprintf(", clone_sources_count=%" PRIu64 ", clone_sources=",
-			(uint64_t) args.clone_sources_count);
+		PRINT_FIELD_FD("{", args, send_fd, tcp);
+		PRINT_FIELD_U(", ", args, clone_sources_count);
 
+		tprints(", clone_sources=");
 		if (abbrev(tcp))
-			tprints("...");
+			printaddr((uintptr_t) args.clone_sources);
 		else {
 			uint64_t record;
 			print_array(tcp, ptr_to_kulong(args.clone_sources),
 				    args.clone_sources_count,
 				    &record, sizeof(record),
-				    umoven_or_printaddr,
+				    tfetch_mem,
 				    print_objectid_callback, 0);
 		}
-		tprints(", parent_root=");
-		btrfs_print_objectid(args.parent_root);
-		tprints(", flags=");
-		printflags64(btrfs_send_flags, args.flags,
-			     "BTRFS_SEND_FLAGS_???");
+		btrfs_print_objectid(", ", args, parent_root);
+		PRINT_FIELD_FLAGS(", ", args, flags, btrfs_send_flags,
+				  "BTRFS_SEND_FLAGS_???");
 		tprints("}");
 		break;
 	}
@@ -1254,28 +1185,27 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprints("{");
 		if (entering(tcp)) {
-			tprintf("space_slots=%" PRI__u64 "}", args.space_slots);
+			PRINT_FIELD_U("{", args, space_slots);
+			tprints("}");
 			return 0;
 		}
 
-		tprintf("total_spaces=%" PRI__u64, args.total_spaces);
+		PRINT_FIELD_U("{", args, total_spaces);
 
 		if (args.space_slots == 0 && args.total_spaces) {
 			tprints("}");
 			break;
 		}
 
-		tprints(", spaces=");
-
-		if (abbrev(tcp))
-			tprints("...");
-		else {
+		if (abbrev(tcp)) {
+			tprints(", ...");
+		} else {
 			struct btrfs_ioctl_space_info info;
+			tprints(", spaces=");
 			print_array(tcp, arg + offsetof(typeof(args), spaces),
 				    args.total_spaces,
-				    &info, sizeof(info), umoven_or_printaddr,
+				    &info, sizeof(info), tfetch_mem,
 				    print_btrfs_ioctl_space_info, 0);
 		}
 		tprints("}");
@@ -1296,8 +1226,7 @@
 		if (umove_or_printaddr(tcp, arg, &args))
 			break;
 
-		tprints("{fd=");
-		printfd(tcp, args.fd);
+		PRINT_FIELD_FD("{", args, fd, tcp);
 		PRINT_FIELD_CSTRING(", ", args, name);
 		tprints("}");
 		break;
@@ -1318,15 +1247,13 @@
 			break;
 
 		if (entering(tcp)) {
-			tprints("{fd=");
-			printfd(tcp, args.fd);
-			tprints(", flags=");
-			printflags64(btrfs_snap_flags_v2, args.flags,
-				     "BTRFS_SUBVOL_???");
+			PRINT_FIELD_FD("{", args, fd, tcp);
+			PRINT_FIELD_FLAGS(", ", args, flags,
+					  btrfs_snap_flags_v2,
+					  "BTRFS_SUBVOL_???");
 			if (args.flags & BTRFS_SUBVOL_QGROUP_INHERIT) {
-				tprintf(", size=%" PRIu64 ", qgroup_inherit=",
-					(uint64_t) args.size);
-
+				PRINT_FIELD_U(", ", args, size);
+				tprints(", qgroup_inherit=");
 				btrfs_print_qgroup_inherit(tcp,
 					ptr_to_kulong(args.qgroup_inherit));
 			}
@@ -1334,7 +1261,8 @@
 			tprints("}");
 			return 0;
 		}
-		tprintf("{transid=%" PRIu64 "}", (uint64_t) args.transid);
+		PRINT_FIELD_U("{", args, transid);
+		tprints("}");
 		break;
 	}
 
diff --git a/config.h b/config.h
index f23eaaf..168c34b 100644
--- a/config.h
+++ b/config.h
@@ -31,6 +31,9 @@
 /* Define to 1 if you want OABI support on ARM EABI. */
 #define ENABLE_ARM_OABI 0
 
+/* Define to enable stack tracing support */
+/* #undef ENABLE_STACKTRACE */
+
 /* Define to 1 if you have the `accept4' function. */
 #define HAVE_ACCEPT4 1
 
@@ -91,6 +94,22 @@
    don't. */
 #define HAVE_DECL_CTL_SUNRPC 1
 
+/* Define to 1 if you have the declaration of `IFLA_AF_SPEC', and to 0 if you
+   don't. */
+#define HAVE_DECL_IFLA_AF_SPEC 1
+
+/* Define to 1 if you have the declaration of `IFLA_PORT_SELF', and to 0 if
+   you don't. */
+#define HAVE_DECL_IFLA_PORT_SELF 1
+
+/* Define to 1 if you have the declaration of `IFLA_PROTINFO', and to 0 if you
+   don't. */
+#define HAVE_DECL_IFLA_PROTINFO 1
+
+/* Define to 1 if you have the declaration of `IFLA_XDP', and to 0 if you
+   don't. */
+#define HAVE_DECL_IFLA_XDP 1
+
 /* Define to 1 if you have the declaration of `KERN_ACPI_VIDEO_FLAGS', and to
    0 if you don't. */
 #define HAVE_DECL_KERN_ACPI_VIDEO_FLAGS 1
@@ -391,6 +410,10 @@
    don't. */
 #define HAVE_DECL_SYS_ERRLIST 0
 
+/* Define to 1 if you have the declaration of `TCA_STAB_DATA', and to 0 if you
+   don't. */
+#define HAVE_DECL_TCA_STAB_DATA 1
+
 /* 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 1
@@ -649,6 +672,9 @@
 /* Define to 1 if the system provides dladdr */
 #define HAVE_DLADDR 1
 
+/* Define to 1 if you have the <elfutils/libdwfl.h> header file. */
+/* #undef HAVE_ELFUTILS_LIBDWFL_H */
+
 /* Define to 1 if you have the <elf.h> header file. */
 #define HAVE_ELF_H 1
 
@@ -686,7 +712,7 @@
 /* #undef HAVE_GNU_STUBS_X32_H */
 
 /* Define to 1 if you have the <iconv.h> header file. */
-/* #undef HAVE_ICONV_H */
+#define HAVE_ICONV_H 1
 
 /* Define to 1 if you have the `iconv_open' function. */
 /* #undef HAVE_ICONV_OPEN */
@@ -947,7 +973,7 @@
 #define HAVE_SIG_ATOMIC_T 1
 
 /* Define to 1 if the system provides static_assert */
-/* #define HAVE_STATIC_ASSERT 1 */
+/* #undef HAVE_STATIC_ASSERT */
 
 /* Define to 1 if you have the <stdint.h> header file. */
 #define HAVE_STDINT_H 1
@@ -982,6 +1008,76 @@
 /* Define to 1 if the system has the type `struct bpf_insn'. */
 #define HAVE_STRUCT_BPF_INSN 1
 
+/* Define to 1 if the system has the type `struct bpf_map_info'. */
+#define HAVE_STRUCT_BPF_MAP_INFO 1
+
+/* Define to 1 if `id' is a member of `struct bpf_map_info'. */
+#define HAVE_STRUCT_BPF_MAP_INFO_ID 1
+
+/* Define to 1 if `ifindex' is a member of `struct bpf_map_info'. */
+/* #undef HAVE_STRUCT_BPF_MAP_INFO_IFINDEX */
+
+/* Define to 1 if `key_size' is a member of `struct bpf_map_info'. */
+#define HAVE_STRUCT_BPF_MAP_INFO_KEY_SIZE 1
+
+/* Define to 1 if `map_flags' is a member of `struct bpf_map_info'. */
+#define HAVE_STRUCT_BPF_MAP_INFO_MAP_FLAGS 1
+
+/* Define to 1 if `max_entries' is a member of `struct bpf_map_info'. */
+#define HAVE_STRUCT_BPF_MAP_INFO_MAX_ENTRIES 1
+
+/* Define to 1 if `name' is a member of `struct bpf_map_info'. */
+#define HAVE_STRUCT_BPF_MAP_INFO_NAME 1
+
+/* Define to 1 if `type' is a member of `struct bpf_map_info'. */
+#define HAVE_STRUCT_BPF_MAP_INFO_TYPE 1
+
+/* Define to 1 if `value_size' is a member of `struct bpf_map_info'. */
+#define HAVE_STRUCT_BPF_MAP_INFO_VALUE_SIZE 1
+
+/* Define to 1 if the system has the type `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO 1
+
+/* Define to 1 if `created_by_uid' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_CREATED_BY_UID 1
+
+/* Define to 1 if `id' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_ID 1
+
+/* Define to 1 if `ifindex' is a member of `struct bpf_prog_info'. */
+/* #undef HAVE_STRUCT_BPF_PROG_INFO_IFINDEX */
+
+/* Define to 1 if `jited_prog_insns' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_INSNS 1
+
+/* Define to 1 if `jited_prog_len' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_LEN 1
+
+/* Define to 1 if `load_time' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_LOAD_TIME 1
+
+/* Define to 1 if `map_ids' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_MAP_IDS 1
+
+/* Define to 1 if `name' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_NAME 1
+
+/* Define to 1 if `nr_map_ids' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_NR_MAP_IDS 1
+
+/* Define to 1 if `tag' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_TAG 1
+
+/* Define to 1 if `type' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_TYPE 1
+
+/* Define to 1 if `xlated_prog_insns' is a member of `struct bpf_prog_info'.
+   */
+#define HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_INSNS 1
+
+/* Define to 1 if `xlated_prog_len' is a member of `struct bpf_prog_info'. */
+#define HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_LEN 1
+
 /* Define to 1 if the system has the type `struct br_mdb_entry'. */
 #define HAVE_STRUCT_BR_MDB_ENTRY 1
 
@@ -1032,6 +1128,9 @@
 /* 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_port_range'. */
+/* #undef HAVE_STRUCT_FIB_RULE_PORT_RANGE */
+
 /* Define to 1 if the system has the type `struct fib_rule_uid_range'. */
 #define HAVE_STRUCT_FIB_RULE_UID_RANGE 1
 
@@ -1041,6 +1140,9 @@
 /* Define to 1 if the system has the type `struct flock64'. */
 #define HAVE_STRUCT_FLOCK64 1
 
+/* Define to 1 if the system has the type `struct f_owner_ex'. */
+#define HAVE_STRUCT_F_OWNER_EX 1
+
 /* Define to 1 if the system has the type `struct gnet_stats_basic'. */
 #define HAVE_STRUCT_GNET_STATS_BASIC 1
 
@@ -1062,6 +1164,9 @@
 /* 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_cacheinfo'. */
+#define HAVE_STRUCT_IFLA_CACHEINFO 1
+
 /* Define to 1 if the system has the type `struct ifla_port_vsi'. */
 #define HAVE_STRUCT_IFLA_PORT_VSI 1
 
@@ -1069,7 +1174,7 @@
 #define HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION 1
 
 /* Define to 1 if the system has the type `struct kcmp_epoll_slot'. */
-/* #undef HAVE_STRUCT_KCMP_EPOLL_SLOT */
+#define HAVE_STRUCT_KCMP_EPOLL_SLOT 1
 
 /* Define to 1 if the system has the type `struct keyctl_kdf_params'. */
 #define HAVE_STRUCT_KEYCTL_KDF_PARAMS 1
@@ -1202,6 +1307,9 @@
 /* Define to 1 if the system has the type `struct sigcontext'. */
 #define HAVE_STRUCT_SIGCONTEXT 1
 
+/* Define to 1 if `l2_bdaddr_type' is a member of `struct sockaddr_l2'. */
+/* #undef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE */
+
 /* Define to 1 if the system has the type `struct stat64'. */
 /* #undef HAVE_STRUCT_STAT64 */
 
@@ -1265,12 +1373,18 @@
 /* Define to 1 if `global_alpha' is a member of `struct v4l2_window'. */
 #define HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA 1
 
+/* Define to 1 if the system has the type `struct __aio_sigset'. */
+/* #undef HAVE_STRUCT___AIO_SIGSET */
+
 /* Define to 1 if the system has the type `struct __kernel_flock'. */
 /* #undef HAVE_STRUCT___KERNEL_FLOCK */
 
 /* Define to 1 if the system has the type `struct __kernel_flock64'. */
 /* #undef HAVE_STRUCT___KERNEL_FLOCK64 */
 
+/* Define to 1 if the system has the type `struct __kernel_f_owner_ex'. */
+/* #undef HAVE_STRUCT___KERNEL_F_OWNER_EX */
+
 /* Define to 1 if the system has the type `struct __old_kernel_stat'. */
 /* #undef HAVE_STRUCT___OLD_KERNEL_STAT */
 
@@ -1331,20 +1445,23 @@
 /* Define to 1 if `dummy' is a member of `union bpf_attr'. */
 /* #undef HAVE_UNION_BPF_ATTR_DUMMY */
 
+/* Define to 1 if `expected_attach_type' is a member of `union bpf_attr'. */
+/* #undef HAVE_UNION_BPF_ATTR_EXPECTED_ATTACH_TYPE */
+
 /* Define to 1 if `file_flags' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_FILE_FLAGS */
+#define HAVE_UNION_BPF_ATTR_FILE_FLAGS 1
 
 /* Define to 1 if `flags' is a member of `union bpf_attr'. */
 #define HAVE_UNION_BPF_ATTR_FLAGS 1
 
 /* Define to 1 if `info.bpf_fd' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_INFO_BPF_FD */
+#define HAVE_UNION_BPF_ATTR_INFO_BPF_FD 1
 
 /* Define to 1 if `info.info' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_INFO_INFO */
+#define HAVE_UNION_BPF_ATTR_INFO_INFO 1
 
 /* Define to 1 if `info.info_len' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_INFO_INFO_LEN */
+#define HAVE_UNION_BPF_ATTR_INFO_INFO_LEN 1
 
 /* Define to 1 if `inner_map_fd' is a member of `union bpf_attr'. */
 #define HAVE_UNION_BPF_ATTR_INNER_MAP_FD 1
@@ -1383,7 +1500,13 @@
 #define HAVE_UNION_BPF_ATTR_MAP_FLAGS 1
 
 /* Define to 1 if `map_id' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_MAP_ID */
+#define HAVE_UNION_BPF_ATTR_MAP_ID 1
+
+/* Define to 1 if `map_ifindex' is a member of `union bpf_attr'. */
+/* #undef HAVE_UNION_BPF_ATTR_MAP_IFINDEX */
+
+/* Define to 1 if `map_name' is a member of `union bpf_attr'. */
+#define HAVE_UNION_BPF_ATTR_MAP_NAME 1
 
 /* Define to 1 if `map_type' is a member of `union bpf_attr'. */
 #define HAVE_UNION_BPF_ATTR_MAP_TYPE 1
@@ -1392,16 +1515,16 @@
 #define HAVE_UNION_BPF_ATTR_MAX_ENTRIES 1
 
 /* Define to 1 if `next_id' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_NEXT_ID */
+#define HAVE_UNION_BPF_ATTR_NEXT_ID 1
 
 /* Define to 1 if `next_key' is a member of `union bpf_attr'. */
 #define HAVE_UNION_BPF_ATTR_NEXT_KEY 1
 
 /* Define to 1 if `numa_node' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_NUMA_NODE */
+#define HAVE_UNION_BPF_ATTR_NUMA_NODE 1
 
 /* Define to 1 if `open_flags' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_OPEN_FLAGS */
+#define HAVE_UNION_BPF_ATTR_OPEN_FLAGS 1
 
 /* Define to 1 if `pathname' is a member of `union bpf_attr'. */
 #define HAVE_UNION_BPF_ATTR_PATHNAME 1
@@ -1410,13 +1533,43 @@
 #define HAVE_UNION_BPF_ATTR_PROG_FLAGS 1
 
 /* Define to 1 if `prog_id' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_PROG_ID */
+#define HAVE_UNION_BPF_ATTR_PROG_ID 1
+
+/* Define to 1 if `prog_ifindex' is a member of `union bpf_attr'. */
+#define HAVE_UNION_BPF_ATTR_PROG_IFINDEX 1
+
+/* Define to 1 if `prog_name' is a member of `union bpf_attr'. */
+#define HAVE_UNION_BPF_ATTR_PROG_NAME 1
 
 /* Define to 1 if `prog_type' is a member of `union bpf_attr'. */
 #define HAVE_UNION_BPF_ATTR_PROG_TYPE 1
 
+/* Define to 1 if `query.attach_flags' is a member of `union bpf_attr'. */
+#define HAVE_UNION_BPF_ATTR_QUERY_ATTACH_FLAGS 1
+
+/* Define to 1 if `query.attach_type' is a member of `union bpf_attr'. */
+#define HAVE_UNION_BPF_ATTR_QUERY_ATTACH_TYPE 1
+
+/* Define to 1 if `query.prog_cnt' is a member of `union bpf_attr'. */
+#define HAVE_UNION_BPF_ATTR_QUERY_PROG_CNT 1
+
+/* Define to 1 if `query.prog_ids' is a member of `union bpf_attr'. */
+#define HAVE_UNION_BPF_ATTR_QUERY_PROG_IDS 1
+
+/* Define to 1 if `query.query_flags' is a member of `union bpf_attr'. */
+#define HAVE_UNION_BPF_ATTR_QUERY_QUERY_FLAGS 1
+
+/* Define to 1 if `query.target_fd' is a member of `union bpf_attr'. */
+#define HAVE_UNION_BPF_ATTR_QUERY_TARGET_FD 1
+
+/* Define to 1 if `raw_tracepoint.name' is a member of `union bpf_attr'. */
+/* #undef HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_NAME */
+
+/* Define to 1 if `raw_tracepoint.prog_fd' is a member of `union bpf_attr'. */
+/* #undef HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_PROG_FD */
+
 /* Define to 1 if `start_id' is a member of `union bpf_attr'. */
-/* #undef HAVE_UNION_BPF_ATTR_START_ID */
+#define HAVE_UNION_BPF_ATTR_START_ID 1
 
 /* Define to 1 if `target_fd' is a member of `union bpf_attr'. */
 #define HAVE_UNION_BPF_ATTR_TARGET_FD 1
@@ -1460,6 +1613,9 @@
 /* Define to 1 if you have the `utimensat' function. */
 #define HAVE_UTIMENSAT 1
 
+/* Define to 1 if the system provides _Static_assert */
+/* #undef HAVE__STATIC_ASSERT */
+
 /* Define to 1 if the system provides __builtin_popcount function */
 #define HAVE___BUILTIN_POPCOUNT 1
 
@@ -1497,7 +1653,7 @@
 /* #undef M68K */
 
 /* Date */
-#define MANPAGE_DATE "2018-04-04"
+#define MANPAGE_DATE "2018-06-13"
 
 /* Define for the Meta architecture. */
 /* #undef METAG */
@@ -1530,7 +1686,7 @@
 #define PACKAGE_NAME "strace"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "strace 4.22"
+#define PACKAGE_STRING "strace 4.23"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "strace"
@@ -1539,7 +1695,7 @@
 #define PACKAGE_URL "https://strace.io"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "4.22"
+#define PACKAGE_VERSION "4.23"
 
 /* Define for the PowerPC architecture. */
 /* #undef POWERPC */
@@ -1585,10 +1741,13 @@
 /* Define for the Tile architecture */
 /* #undef TILE */
 
-/* Do demangling symbols in stack trace */
+/* Do symbols demangling in stack trace */
 /* #undef USE_DEMANGLE */
 
-/* Compile stack tracing functionality */
+/* Whether to use libdw for stack tracing */
+/* #undef USE_LIBDW */
+
+/* Whether to use libunwind for stack tracing */
 /* #undef USE_LIBUNWIND */
 
 /* Enable extensions on AIX 3, Interix.  */
@@ -1613,8 +1772,11 @@
 #endif
 
 
+/* The unwinder to use for stack tracing support */
+/* #undef USE_UNWINDER */
+
 /* Version number of package */
-#define VERSION "4.22"
+#define VERSION "4.23"
 
 /* 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 610c5cb..24255b6 100644
--- a/config.h.in
+++ b/config.h.in
@@ -33,6 +33,9 @@
 /* Define to 1 if you want OABI support on ARM EABI. */
 #undef ENABLE_ARM_OABI
 
+/* Define to enable stack tracing support */
+#undef ENABLE_STACKTRACE
+
 /* Define to 1 if you have the `accept4' function. */
 #undef HAVE_ACCEPT4
 
@@ -93,6 +96,22 @@
    don't. */
 #undef HAVE_DECL_CTL_SUNRPC
 
+/* Define to 1 if you have the declaration of `IFLA_AF_SPEC', and to 0 if you
+   don't. */
+#undef HAVE_DECL_IFLA_AF_SPEC
+
+/* Define to 1 if you have the declaration of `IFLA_PORT_SELF', and to 0 if
+   you don't. */
+#undef HAVE_DECL_IFLA_PORT_SELF
+
+/* Define to 1 if you have the declaration of `IFLA_PROTINFO', and to 0 if you
+   don't. */
+#undef HAVE_DECL_IFLA_PROTINFO
+
+/* Define to 1 if you have the declaration of `IFLA_XDP', and to 0 if you
+   don't. */
+#undef HAVE_DECL_IFLA_XDP
+
 /* Define to 1 if you have the declaration of `KERN_ACPI_VIDEO_FLAGS', and to
    0 if you don't. */
 #undef HAVE_DECL_KERN_ACPI_VIDEO_FLAGS
@@ -393,6 +412,10 @@
    don't. */
 #undef HAVE_DECL_SYS_ERRLIST
 
+/* Define to 1 if you have the declaration of `TCA_STAB_DATA', and to 0 if you
+   don't. */
+#undef HAVE_DECL_TCA_STAB_DATA
+
 /* Define to 1 if you have the declaration of `V4L2_BUF_TYPE_SDR_CAPTURE', and
    to 0 if you don't. */
 #undef HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE
@@ -651,6 +674,9 @@
 /* Define to 1 if the system provides dladdr */
 #undef HAVE_DLADDR
 
+/* Define to 1 if you have the <elfutils/libdwfl.h> header file. */
+#undef HAVE_ELFUTILS_LIBDWFL_H
+
 /* Define to 1 if you have the <elf.h> header file. */
 #undef HAVE_ELF_H
 
@@ -984,6 +1010,76 @@
 /* Define to 1 if the system has the type `struct bpf_insn'. */
 #undef HAVE_STRUCT_BPF_INSN
 
+/* Define to 1 if the system has the type `struct bpf_map_info'. */
+#undef HAVE_STRUCT_BPF_MAP_INFO
+
+/* Define to 1 if `id' is a member of `struct bpf_map_info'. */
+#undef HAVE_STRUCT_BPF_MAP_INFO_ID
+
+/* Define to 1 if `ifindex' is a member of `struct bpf_map_info'. */
+#undef HAVE_STRUCT_BPF_MAP_INFO_IFINDEX
+
+/* Define to 1 if `key_size' is a member of `struct bpf_map_info'. */
+#undef HAVE_STRUCT_BPF_MAP_INFO_KEY_SIZE
+
+/* Define to 1 if `map_flags' is a member of `struct bpf_map_info'. */
+#undef HAVE_STRUCT_BPF_MAP_INFO_MAP_FLAGS
+
+/* Define to 1 if `max_entries' is a member of `struct bpf_map_info'. */
+#undef HAVE_STRUCT_BPF_MAP_INFO_MAX_ENTRIES
+
+/* Define to 1 if `name' is a member of `struct bpf_map_info'. */
+#undef HAVE_STRUCT_BPF_MAP_INFO_NAME
+
+/* Define to 1 if `type' is a member of `struct bpf_map_info'. */
+#undef HAVE_STRUCT_BPF_MAP_INFO_TYPE
+
+/* Define to 1 if `value_size' is a member of `struct bpf_map_info'. */
+#undef HAVE_STRUCT_BPF_MAP_INFO_VALUE_SIZE
+
+/* Define to 1 if the system has the type `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO
+
+/* Define to 1 if `created_by_uid' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_CREATED_BY_UID
+
+/* Define to 1 if `id' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_ID
+
+/* Define to 1 if `ifindex' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_IFINDEX
+
+/* Define to 1 if `jited_prog_insns' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_INSNS
+
+/* Define to 1 if `jited_prog_len' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_LEN
+
+/* Define to 1 if `load_time' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_LOAD_TIME
+
+/* Define to 1 if `map_ids' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_MAP_IDS
+
+/* Define to 1 if `name' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_NAME
+
+/* Define to 1 if `nr_map_ids' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_NR_MAP_IDS
+
+/* Define to 1 if `tag' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_TAG
+
+/* Define to 1 if `type' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_TYPE
+
+/* Define to 1 if `xlated_prog_insns' is a member of `struct bpf_prog_info'.
+   */
+#undef HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_INSNS
+
+/* Define to 1 if `xlated_prog_len' is a member of `struct bpf_prog_info'. */
+#undef HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_LEN
+
 /* Define to 1 if the system has the type `struct br_mdb_entry'. */
 #undef HAVE_STRUCT_BR_MDB_ENTRY
 
@@ -1034,6 +1130,9 @@
 /* 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_port_range'. */
+#undef HAVE_STRUCT_FIB_RULE_PORT_RANGE
+
 /* Define to 1 if the system has the type `struct fib_rule_uid_range'. */
 #undef HAVE_STRUCT_FIB_RULE_UID_RANGE
 
@@ -1043,6 +1142,9 @@
 /* Define to 1 if the system has the type `struct flock64'. */
 #undef HAVE_STRUCT_FLOCK64
 
+/* Define to 1 if the system has the type `struct f_owner_ex'. */
+#undef HAVE_STRUCT_F_OWNER_EX
+
 /* Define to 1 if the system has the type `struct gnet_stats_basic'. */
 #undef HAVE_STRUCT_GNET_STATS_BASIC
 
@@ -1064,6 +1166,9 @@
 /* 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_cacheinfo'. */
+#undef HAVE_STRUCT_IFLA_CACHEINFO
+
 /* Define to 1 if the system has the type `struct ifla_port_vsi'. */
 #undef HAVE_STRUCT_IFLA_PORT_VSI
 
@@ -1204,6 +1309,9 @@
 /* Define to 1 if the system has the type `struct sigcontext'. */
 #undef HAVE_STRUCT_SIGCONTEXT
 
+/* Define to 1 if `l2_bdaddr_type' is a member of `struct sockaddr_l2'. */
+#undef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+
 /* Define to 1 if the system has the type `struct stat64'. */
 #undef HAVE_STRUCT_STAT64
 
@@ -1267,12 +1375,18 @@
 /* Define to 1 if `global_alpha' is a member of `struct v4l2_window'. */
 #undef HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA
 
+/* Define to 1 if the system has the type `struct __aio_sigset'. */
+#undef HAVE_STRUCT___AIO_SIGSET
+
 /* Define to 1 if the system has the type `struct __kernel_flock'. */
 #undef HAVE_STRUCT___KERNEL_FLOCK
 
 /* Define to 1 if the system has the type `struct __kernel_flock64'. */
 #undef HAVE_STRUCT___KERNEL_FLOCK64
 
+/* Define to 1 if the system has the type `struct __kernel_f_owner_ex'. */
+#undef HAVE_STRUCT___KERNEL_F_OWNER_EX
+
 /* Define to 1 if the system has the type `struct __old_kernel_stat'. */
 #undef HAVE_STRUCT___OLD_KERNEL_STAT
 
@@ -1333,6 +1447,9 @@
 /* Define to 1 if `dummy' is a member of `union bpf_attr'. */
 #undef HAVE_UNION_BPF_ATTR_DUMMY
 
+/* Define to 1 if `expected_attach_type' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_EXPECTED_ATTACH_TYPE
+
 /* Define to 1 if `file_flags' is a member of `union bpf_attr'. */
 #undef HAVE_UNION_BPF_ATTR_FILE_FLAGS
 
@@ -1387,6 +1504,12 @@
 /* Define to 1 if `map_id' is a member of `union bpf_attr'. */
 #undef HAVE_UNION_BPF_ATTR_MAP_ID
 
+/* Define to 1 if `map_ifindex' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_MAP_IFINDEX
+
+/* Define to 1 if `map_name' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_MAP_NAME
+
 /* Define to 1 if `map_type' is a member of `union bpf_attr'. */
 #undef HAVE_UNION_BPF_ATTR_MAP_TYPE
 
@@ -1414,9 +1537,39 @@
 /* Define to 1 if `prog_id' is a member of `union bpf_attr'. */
 #undef HAVE_UNION_BPF_ATTR_PROG_ID
 
+/* Define to 1 if `prog_ifindex' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_PROG_IFINDEX
+
+/* Define to 1 if `prog_name' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_PROG_NAME
+
 /* Define to 1 if `prog_type' is a member of `union bpf_attr'. */
 #undef HAVE_UNION_BPF_ATTR_PROG_TYPE
 
+/* Define to 1 if `query.attach_flags' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_QUERY_ATTACH_FLAGS
+
+/* Define to 1 if `query.attach_type' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_QUERY_ATTACH_TYPE
+
+/* Define to 1 if `query.prog_cnt' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_QUERY_PROG_CNT
+
+/* Define to 1 if `query.prog_ids' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_QUERY_PROG_IDS
+
+/* Define to 1 if `query.query_flags' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_QUERY_QUERY_FLAGS
+
+/* Define to 1 if `query.target_fd' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_QUERY_TARGET_FD
+
+/* Define to 1 if `raw_tracepoint.name' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_NAME
+
+/* Define to 1 if `raw_tracepoint.prog_fd' is a member of `union bpf_attr'. */
+#undef HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_PROG_FD
+
 /* Define to 1 if `start_id' is a member of `union bpf_attr'. */
 #undef HAVE_UNION_BPF_ATTR_START_ID
 
@@ -1462,6 +1615,9 @@
 /* Define to 1 if you have the `utimensat' function. */
 #undef HAVE_UTIMENSAT
 
+/* Define to 1 if the system provides _Static_assert */
+#undef HAVE__STATIC_ASSERT
+
 /* Define to 1 if the system provides __builtin_popcount function */
 #undef HAVE___BUILTIN_POPCOUNT
 
@@ -1591,10 +1747,13 @@
 /* Define for the Tile architecture */
 #undef TILE
 
-/* Do demangling symbols in stack trace */
+/* Do symbols demangling in stack trace */
 #undef USE_DEMANGLE
 
-/* Compile stack tracing functionality */
+/* Whether to use libdw for stack tracing */
+#undef USE_LIBDW
+
+/* Whether to use libunwind for stack tracing */
 #undef USE_LIBUNWIND
 
 /* Enable extensions on AIX 3, Interix.  */
@@ -1619,6 +1778,9 @@
 #endif
 
 
+/* The unwinder to use for stack tracing support */
+#undef USE_UNWINDER
+
 /* Version number of package */
 #undef VERSION
 
diff --git a/configure b/configure
index 4dfded7..141ac3c 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.22.
+# Generated by GNU Autoconf 2.69 for strace 4.23.
 #
 # Report bugs to <strace-devel@lists.strace.io>.
 #
@@ -582,8 +582,8 @@
 # Identity of this package.
 PACKAGE_NAME='strace'
 PACKAGE_TARNAME='strace'
-PACKAGE_VERSION='4.22'
-PACKAGE_STRING='strace 4.22'
+PACKAGE_VERSION='4.23'
+PACKAGE_STRING='strace 4.23'
 PACKAGE_BUGREPORT='strace-devel@lists.strace.io'
 PACKAGE_URL='https://strace.io'
 
@@ -654,9 +654,17 @@
 libiberty_LIBS
 USE_LIBUNWIND_FALSE
 USE_LIBUNWIND_TRUE
+USE_LIBDW_FALSE
+USE_LIBDW_TRUE
+ENABLE_STACKTRACE_FALSE
+ENABLE_STACKTRACE_TRUE
 libunwind_CPPFLAGS
 libunwind_LDFLAGS
 libunwind_LIBS
+libdw_LIBS
+libdw_LDFLAGS
+libdw_CFLAGS
+libdw_CPPFLAGS
 READELF
 PERL
 mq_LIBS
@@ -806,6 +814,8 @@
 with_gcov
 enable_code_coverage
 enable_arm_oabi
+enable_stacktrace
+with_libdw
 with_libunwind
 with_libiberty
 enable_mpers
@@ -1364,7 +1374,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.22 to adapt to many kinds of systems.
+\`configure' configures strace 4.23 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1434,7 +1444,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of strace 4.22:";;
+     short | recursive ) echo "Configuration of strace 4.23:";;
    esac
   cat <<\_ACEOF
 
@@ -1454,6 +1464,9 @@
   --enable-gcc-Werror     turn on gcc's -Werror option
   --enable-code-coverage  Whether to enable code coverage support
   --enable-arm-oabi       enable OABI support on ARM EABI
+  --enable-stacktrace=yes|no|check
+                          whether to enable stack tracing support, default is
+                          check
   --enable-mpers=yes|no|check|m32|mx32
                           whether to enable multiple personalities support
                           required for proper decoding of structures used by
@@ -1472,6 +1485,8 @@
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-gcov=GCOV        use given GCOV for coverage (GCOV=gcov).
+  --with-libdw            use libdw to implement stack tracing support
+
   --with-libunwind        use libunwind to implement stack tracing support
   --with-libiberty        use libiberty to demangle symbols in stack trace
 
@@ -1552,7 +1567,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-strace configure 4.22
+strace configure 4.23
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2292,7 +2307,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.22, which was
+It was created by strace $as_me 4.23, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3163,7 +3178,7 @@
 
 # Define the identity of the package.
  PACKAGE='strace'
- VERSION='4.22'
+ VERSION='4.23'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3350,9 +3365,9 @@
 
 
 
-RPM_CHANGELOGTIME="$(LC_TIME=C date '+%a %b %d %Y')"
+RPM_CHANGELOGTIME="$(LC_TIME=C date -u '+%a %b %d %Y')"
 
-DEB_CHANGELOGTIME="$(LC_TIME=C date -R)"
+DEB_CHANGELOGTIME="$(LC_TIME=C date -u -R)"
 
 
 ac_ext=c
@@ -8984,9 +8999,9 @@
 
 
 
-$as_echo "#define MANPAGE_DATE \"2018-04-04\"" >>confdefs.h
+$as_echo "#define MANPAGE_DATE \"2018-06-13\"" >>confdefs.h
 
-MANPAGE_DATE=2018-04-04
+MANPAGE_DATE=2018-06-13
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supported architecture" >&5
@@ -9866,6 +9881,28 @@
 
 
 fi
+ac_fn_c_check_type "$LINENO" "struct f_owner_ex" "ac_cv_type_struct_f_owner_ex" "#include <sys/types.h>
+#include <linux/fcntl.h>
+"
+if test "x$ac_cv_type_struct_f_owner_ex" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_F_OWNER_EX 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct __kernel_f_owner_ex" "ac_cv_type_struct___kernel_f_owner_ex" "#include <sys/types.h>
+#include <linux/fcntl.h>
+"
+if test "x$ac_cv_type_struct___kernel_f_owner_ex" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT___KERNEL_F_OWNER_EX 1
+_ACEOF
+
+
+fi
 
 
 ac_fn_c_check_type "$LINENO" "struct crypto_report_aead" "ac_cv_type_struct_crypto_report_aead" "#include <linux/cryptouser.h>
@@ -10222,7 +10259,7 @@
 fi
 
 
-for ac_header in asm/cachectl.h asm/guarded_storage.h asm/sysmips.h bluetooth/bluetooth.h elf.h iconv.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/kcmp.h linux/kvm.h linux/memfd.h linux/mmtimer.h linux/msg.h linux/neighbour.h linux/netfilter/ipset/ip_set.h linux/netfilter/nf_tables.h linux/netfilter/nf_tables_compat.h linux/netfilter/nfnetlink.h linux/netfilter/nfnetlink_acct.h linux/netfilter/nfnetlink_conntrack.h linux/netfilter/nfnetlink_cthelper.h linux/netfilter/nfnetlink_cttimeout.h linux/netfilter/nfnetlink_log.h linux/netfilter/nfnetlink_queue.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 paths.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/sem.h sys/shm.h sys/signalfd.h sys/xattr.h ustat.h
+for ac_header in asm/cachectl.h asm/guarded_storage.h asm/sysmips.h elf.h iconv.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/kcmp.h linux/kvm.h linux/memfd.h linux/mmtimer.h linux/msg.h linux/neighbour.h linux/netfilter/ipset/ip_set.h linux/netfilter/nf_tables.h linux/netfilter/nf_tables_compat.h linux/netfilter/nfnetlink.h linux/netfilter/nfnetlink_acct.h linux/netfilter/nfnetlink_conntrack.h linux/netfilter/nfnetlink_cthelper.h linux/netfilter/nfnetlink_cttimeout.h linux/netfilter/nfnetlink_log.h linux/netfilter/nfnetlink_queue.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 paths.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/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"
@@ -10353,8 +10390,238 @@
 
 
 fi
+ac_fn_c_check_type "$LINENO" "struct bpf_map_info" "ac_cv_type_struct_bpf_map_info" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_type_struct_bpf_map_info" = xyes; then :
 
-		ac_fn_c_check_member "$LINENO" "union bpf_attr" "attach_bpf_fd" "ac_cv_member_union_bpf_attr_attach_bpf_fd" "#include <linux/bpf.h>
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_MAP_INFO 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct bpf_prog_info" "ac_cv_type_struct_bpf_prog_info" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_type_struct_bpf_prog_info" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO 1
+_ACEOF
+
+
+fi
+
+		ac_fn_c_check_member "$LINENO" "struct bpf_map_info" "id" "ac_cv_member_struct_bpf_map_info_id" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_map_info_id" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_MAP_INFO_ID 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_map_info" "ifindex" "ac_cv_member_struct_bpf_map_info_ifindex" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_map_info_ifindex" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_MAP_INFO_IFINDEX 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_map_info" "key_size" "ac_cv_member_struct_bpf_map_info_key_size" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_map_info_key_size" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_MAP_INFO_KEY_SIZE 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_map_info" "map_flags" "ac_cv_member_struct_bpf_map_info_map_flags" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_map_info_map_flags" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_MAP_INFO_MAP_FLAGS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_map_info" "max_entries" "ac_cv_member_struct_bpf_map_info_max_entries" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_map_info_max_entries" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_MAP_INFO_MAX_ENTRIES 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_map_info" "name" "ac_cv_member_struct_bpf_map_info_name" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_map_info_name" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_MAP_INFO_NAME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_map_info" "type" "ac_cv_member_struct_bpf_map_info_type" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_map_info_type" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_MAP_INFO_TYPE 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_map_info" "value_size" "ac_cv_member_struct_bpf_map_info_value_size" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_map_info_value_size" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_MAP_INFO_VALUE_SIZE 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "created_by_uid" "ac_cv_member_struct_bpf_prog_info_created_by_uid" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_created_by_uid" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_CREATED_BY_UID 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "id" "ac_cv_member_struct_bpf_prog_info_id" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_id" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_ID 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "ifindex" "ac_cv_member_struct_bpf_prog_info_ifindex" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_ifindex" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_IFINDEX 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "jited_prog_insns" "ac_cv_member_struct_bpf_prog_info_jited_prog_insns" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_jited_prog_insns" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_INSNS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "jited_prog_len" "ac_cv_member_struct_bpf_prog_info_jited_prog_len" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_jited_prog_len" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_JITED_PROG_LEN 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "load_time" "ac_cv_member_struct_bpf_prog_info_load_time" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_load_time" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_LOAD_TIME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "map_ids" "ac_cv_member_struct_bpf_prog_info_map_ids" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_map_ids" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_MAP_IDS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "name" "ac_cv_member_struct_bpf_prog_info_name" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_name" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_NAME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "nr_map_ids" "ac_cv_member_struct_bpf_prog_info_nr_map_ids" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_nr_map_ids" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_NR_MAP_IDS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "tag" "ac_cv_member_struct_bpf_prog_info_tag" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_tag" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_TAG 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "type" "ac_cv_member_struct_bpf_prog_info_type" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_type" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_TYPE 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "xlated_prog_insns" "ac_cv_member_struct_bpf_prog_info_xlated_prog_insns" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_xlated_prog_insns" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_INSNS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct bpf_prog_info" "xlated_prog_len" "ac_cv_member_struct_bpf_prog_info_xlated_prog_len" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_struct_bpf_prog_info_xlated_prog_len" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BPF_PROG_INFO_XLATED_PROG_LEN 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "attach_bpf_fd" "ac_cv_member_union_bpf_attr_attach_bpf_fd" "#include <linux/bpf.h>
 "
 if test "x$ac_cv_member_union_bpf_attr_attach_bpf_fd" = xyes; then :
 
@@ -10404,6 +10671,16 @@
 
 
 fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "expected_attach_type" "ac_cv_member_union_bpf_attr_expected_attach_type" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_expected_attach_type" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_EXPECTED_ATTACH_TYPE 1
+_ACEOF
+
+
+fi
 ac_fn_c_check_member "$LINENO" "union bpf_attr" "file_flags" "ac_cv_member_union_bpf_attr_file_flags" "#include <linux/bpf.h>
 "
 if test "x$ac_cv_member_union_bpf_attr_file_flags" = xyes; then :
@@ -10424,6 +10701,36 @@
 
 
 fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "info.bpf_fd" "ac_cv_member_union_bpf_attr_info_bpf_fd" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_info_bpf_fd" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_INFO_BPF_FD 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "info.info" "ac_cv_member_union_bpf_attr_info_info" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_info_info" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_INFO_INFO 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "info.info_len" "ac_cv_member_union_bpf_attr_info_info_len" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_info_info_len" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_INFO_INFO_LEN 1
+_ACEOF
+
+
+fi
 ac_fn_c_check_member "$LINENO" "union bpf_attr" "inner_map_fd" "ac_cv_member_union_bpf_attr_inner_map_fd" "#include <linux/bpf.h>
 "
 if test "x$ac_cv_member_union_bpf_attr_inner_map_fd" = xyes; then :
@@ -10554,6 +10861,26 @@
 
 
 fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "map_ifindex" "ac_cv_member_union_bpf_attr_map_ifindex" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_map_ifindex" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_MAP_IFINDEX 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "map_name" "ac_cv_member_union_bpf_attr_map_name" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_map_name" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_MAP_NAME 1
+_ACEOF
+
+
+fi
 ac_fn_c_check_member "$LINENO" "union bpf_attr" "map_type" "ac_cv_member_union_bpf_attr_map_type" "#include <linux/bpf.h>
 "
 if test "x$ac_cv_member_union_bpf_attr_map_type" = xyes; then :
@@ -10644,6 +10971,26 @@
 
 
 fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "prog_ifindex" "ac_cv_member_union_bpf_attr_prog_ifindex" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_prog_ifindex" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_PROG_IFINDEX 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "prog_name" "ac_cv_member_union_bpf_attr_prog_name" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_prog_name" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_PROG_NAME 1
+_ACEOF
+
+
+fi
 ac_fn_c_check_member "$LINENO" "union bpf_attr" "prog_type" "ac_cv_member_union_bpf_attr_prog_type" "#include <linux/bpf.h>
 "
 if test "x$ac_cv_member_union_bpf_attr_prog_type" = xyes; then :
@@ -10654,6 +11001,86 @@
 
 
 fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "query.attach_flags" "ac_cv_member_union_bpf_attr_query_attach_flags" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_query_attach_flags" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_QUERY_ATTACH_FLAGS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "query.attach_type" "ac_cv_member_union_bpf_attr_query_attach_type" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_query_attach_type" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_QUERY_ATTACH_TYPE 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "query.prog_cnt" "ac_cv_member_union_bpf_attr_query_prog_cnt" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_query_prog_cnt" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_QUERY_PROG_CNT 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "query.prog_ids" "ac_cv_member_union_bpf_attr_query_prog_ids" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_query_prog_ids" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_QUERY_PROG_IDS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "query.query_flags" "ac_cv_member_union_bpf_attr_query_query_flags" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_query_query_flags" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_QUERY_QUERY_FLAGS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "query.target_fd" "ac_cv_member_union_bpf_attr_query_target_fd" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_query_target_fd" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_QUERY_TARGET_FD 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "raw_tracepoint.name" "ac_cv_member_union_bpf_attr_raw_tracepoint_name" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_raw_tracepoint_name" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_NAME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "raw_tracepoint.prog_fd" "ac_cv_member_union_bpf_attr_raw_tracepoint_prog_fd" "#include <linux/bpf.h>
+"
+if test "x$ac_cv_member_union_bpf_attr_raw_tracepoint_prog_fd" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UNION_BPF_ATTR_RAW_TRACEPOINT_PROG_FD 1
+_ACEOF
+
+
+fi
 ac_fn_c_check_member "$LINENO" "union bpf_attr" "start_id" "ac_cv_member_union_bpf_attr_start_id" "#include <linux/bpf.h>
 "
 if test "x$ac_cv_member_union_bpf_attr_start_id" = xyes; then :
@@ -10674,26 +11101,6 @@
 
 
 fi
-ac_fn_c_check_member "$LINENO" "union bpf_attr" "value" "ac_cv_member_union_bpf_attr_value" "#include <linux/bpf.h>
-"
-if test "x$ac_cv_member_union_bpf_attr_value" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UNION_BPF_ATTR_VALUE 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_member "$LINENO" "union bpf_attr" "value_size" "ac_cv_member_union_bpf_attr_value_size" "#include <linux/bpf.h>
-"
-if test "x$ac_cv_member_union_bpf_attr_value_size" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UNION_BPF_ATTR_VALUE_SIZE 1
-_ACEOF
-
-
-fi
 ac_fn_c_check_member "$LINENO" "union bpf_attr" "test.data_in" "ac_cv_member_union_bpf_attr_test_data_in" "#include <linux/bpf.h>
 "
 if test "x$ac_cv_member_union_bpf_attr_test_data_in" = xyes; then :
@@ -10774,32 +11181,22 @@
 
 
 fi
-ac_fn_c_check_member "$LINENO" "union bpf_attr" "info.bpf_fd" "ac_cv_member_union_bpf_attr_info_bpf_fd" "#include <linux/bpf.h>
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "value" "ac_cv_member_union_bpf_attr_value" "#include <linux/bpf.h>
 "
-if test "x$ac_cv_member_union_bpf_attr_info_bpf_fd" = xyes; then :
+if test "x$ac_cv_member_union_bpf_attr_value" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_UNION_BPF_ATTR_INFO_BPF_FD 1
+#define HAVE_UNION_BPF_ATTR_VALUE 1
 _ACEOF
 
 
 fi
-ac_fn_c_check_member "$LINENO" "union bpf_attr" "info.info" "ac_cv_member_union_bpf_attr_info_info" "#include <linux/bpf.h>
+ac_fn_c_check_member "$LINENO" "union bpf_attr" "value_size" "ac_cv_member_union_bpf_attr_value_size" "#include <linux/bpf.h>
 "
-if test "x$ac_cv_member_union_bpf_attr_info_info" = xyes; then :
+if test "x$ac_cv_member_union_bpf_attr_value_size" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_UNION_BPF_ATTR_INFO_INFO 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_member "$LINENO" "union bpf_attr" "info.info_len" "ac_cv_member_union_bpf_attr_info_info_len" "#include <linux/bpf.h>
-"
-if test "x$ac_cv_member_union_bpf_attr_info_info_len" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UNION_BPF_ATTR_INFO_INFO_LEN 1
+#define HAVE_UNION_BPF_ATTR_VALUE_SIZE 1
 _ACEOF
 
 
@@ -10822,6 +11219,32 @@
 done
 
 
+for ac_header in bluetooth/bluetooth.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "bluetooth/bluetooth.h" "ac_cv_header_bluetooth_bluetooth_h" "$ac_includes_default"
+if test "x$ac_cv_header_bluetooth_bluetooth_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_BLUETOOTH_BLUETOOTH_H 1
+_ACEOF
+
+	ac_fn_c_check_member "$LINENO" "struct sockaddr_l2" "l2_bdaddr_type" "ac_cv_member_struct_sockaddr_l2_l2_bdaddr_type" "#include <bluetooth/bluetooth.h>
+			 #include <bluetooth/l2cap.h>
+"
+if test "x$ac_cv_member_struct_sockaddr_l2_l2_bdaddr_type" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE 1
+_ACEOF
+
+
+fi
+
+
+fi
+
+done
+
+
 ac_fn_c_check_type "$LINENO" "struct br_mdb_entry" "ac_cv_type_struct_br_mdb_entry" "#include <linux/if_bridge.h>
 "
 if test "x$ac_cv_type_struct_br_mdb_entry" = xyes; then :
@@ -10899,7 +11322,8 @@
 fi
 
 
-ac_fn_c_check_type "$LINENO" "struct rta_mfc_stats" "ac_cv_type_struct_rta_mfc_stats" "#include <linux/rtnetlink.h>
+ac_fn_c_check_type "$LINENO" "struct rta_mfc_stats" "ac_cv_type_struct_rta_mfc_stats" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
 "
 if test "x$ac_cv_type_struct_rta_mfc_stats" = xyes; then :
 
@@ -10909,7 +11333,8 @@
 
 
 fi
-ac_fn_c_check_type "$LINENO" "struct rtvia" "ac_cv_type_struct_rtvia" "#include <linux/rtnetlink.h>
+ac_fn_c_check_type "$LINENO" "struct rtvia" "ac_cv_type_struct_rtvia" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
 "
 if test "x$ac_cv_type_struct_rtvia" = xyes; then :
 
@@ -10954,7 +11379,8 @@
 fi
 
 
-ac_fn_c_check_type "$LINENO" "struct ifla_bridge_id" "ac_cv_type_struct_ifla_bridge_id" "#include <linux/if_link.h>
+ac_fn_c_check_type "$LINENO" "struct ifla_bridge_id" "ac_cv_type_struct_ifla_bridge_id" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
 "
 if test "x$ac_cv_type_struct_ifla_bridge_id" = xyes; then :
 
@@ -10964,7 +11390,19 @@
 
 
 fi
-ac_fn_c_check_type "$LINENO" "struct ifla_port_vsi" "ac_cv_type_struct_ifla_port_vsi" "#include <linux/if_link.h>
+ac_fn_c_check_type "$LINENO" "struct ifla_cacheinfo" "ac_cv_type_struct_ifla_cacheinfo" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
+"
+if test "x$ac_cv_type_struct_ifla_cacheinfo" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_IFLA_CACHEINFO 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct ifla_port_vsi" "ac_cv_type_struct_ifla_port_vsi" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
 "
 if test "x$ac_cv_type_struct_ifla_port_vsi" = xyes; then :
 
@@ -10974,7 +11412,8 @@
 
 
 fi
-ac_fn_c_check_type "$LINENO" "struct rtnl_link_stats64" "ac_cv_type_struct_rtnl_link_stats64" "#include <linux/if_link.h>
+ac_fn_c_check_type "$LINENO" "struct rtnl_link_stats64" "ac_cv_type_struct_rtnl_link_stats64" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
 "
 if test "x$ac_cv_type_struct_rtnl_link_stats64" = xyes; then :
 
@@ -10985,7 +11424,8 @@
 
 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>
+ac_fn_c_check_member "$LINENO" "struct rtnl_link_stats" "rx_nohandler" "ac_cv_member_struct_rtnl_link_stats_rx_nohandler" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
 "
 if test "x$ac_cv_member_struct_rtnl_link_stats_rx_nohandler" = xyes; then :
 
@@ -10995,7 +11435,8 @@
 
 
 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>
+ac_fn_c_check_member "$LINENO" "struct rtnl_link_stats64" "rx_nohandler" "ac_cv_member_struct_rtnl_link_stats64_rx_nohandler" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
 "
 if test "x$ac_cv_member_struct_rtnl_link_stats64_rx_nohandler" = xyes; then :
 
@@ -11006,6 +11447,55 @@
 
 fi
 
+ac_fn_c_check_decl "$LINENO" "IFLA_PORT_SELF" "ac_cv_have_decl_IFLA_PORT_SELF" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
+"
+if test "x$ac_cv_have_decl_IFLA_PORT_SELF" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_IFLA_PORT_SELF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "IFLA_PROTINFO" "ac_cv_have_decl_IFLA_PROTINFO" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
+"
+if test "x$ac_cv_have_decl_IFLA_PROTINFO" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_IFLA_PROTINFO $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "IFLA_AF_SPEC" "ac_cv_have_decl_IFLA_AF_SPEC" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
+"
+if test "x$ac_cv_have_decl_IFLA_AF_SPEC" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_IFLA_AF_SPEC $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "IFLA_XDP" "ac_cv_have_decl_IFLA_XDP" "#include <sys/socket.h>
+#include <linux/rtnetlink.h>
+"
+if test "x$ac_cv_have_decl_IFLA_XDP" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_IFLA_XDP $ac_have_decl
+_ACEOF
+
 
 ac_fn_c_check_type "$LINENO" "struct gnet_stats_basic" "ac_cv_type_struct_gnet_stats_basic" "#include <linux/gen_stats.h>
 "
@@ -11049,7 +11539,8 @@
 fi
 
 
-ac_fn_c_check_type "$LINENO" "struct tc_sizespec" "ac_cv_type_struct_tc_sizespec" "#include <linux/pkt_sched.h>
+ac_fn_c_check_type "$LINENO" "struct tc_sizespec" "ac_cv_type_struct_tc_sizespec" "#include <linux/types.h>
+#include <linux/pkt_sched.h>
 "
 if test "x$ac_cv_type_struct_tc_sizespec" = xyes; then :
 
@@ -11060,6 +11551,19 @@
 
 fi
 
+ac_fn_c_check_decl "$LINENO" "TCA_STAB_DATA" "ac_cv_have_decl_TCA_STAB_DATA" "#include <linux/types.h>
+#include <linux/pkt_sched.h>
+"
+if test "x$ac_cv_have_decl_TCA_STAB_DATA" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TCA_STAB_DATA $ac_have_decl
+_ACEOF
+
 
 ac_fn_c_check_type "$LINENO" "struct fib_rule_uid_range" "ac_cv_type_struct_fib_rule_uid_range" "#include <linux/fib_rules.h>
 "
@@ -11071,6 +11575,16 @@
 
 
 fi
+ac_fn_c_check_type "$LINENO" "struct fib_rule_port_range" "ac_cv_type_struct_fib_rule_port_range" "#include <linux/fib_rules.h>
+"
+if test "x$ac_cv_type_struct_fib_rule_port_range" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_FIB_RULE_PORT_RANGE 1
+_ACEOF
+
+
+fi
 
 
 ac_fn_c_check_type "$LINENO" "struct statfs" "ac_cv_type_struct_statfs" "#include <linux/types.h>
@@ -11271,6 +11785,21 @@
 fi
 
 
+saved_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS -I$srcdir/linux"
+ac_fn_c_check_type "$LINENO" "struct __aio_sigset" "ac_cv_type_struct___aio_sigset" "#include <linux/aio_abi.h>
+"
+if test "x$ac_cv_type_struct___aio_sigset" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT___AIO_SIGSET 1
+_ACEOF
+
+
+fi
+
+CPPFLAGS="$saved_CPPFLAGS"
+
 for ac_header in linux/btrfs.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "linux/btrfs.h" "ac_cv_header_linux_btrfs_h" "$ac_includes_default"
@@ -13560,25 +14089,58 @@
 main ()
 {
 static_assert(1,"")
+
   ;
   return 0;
 }
+
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   st_cv_have_static_assert=yes
 else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+_Static_assert(1,"")
+
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  st_cv_have_static_assert=_Static_assert
+else
   st_cv_have_static_assert=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_have_static_assert" >&5
 $as_echo "$st_cv_have_static_assert" >&6; }
-if test "x$st_cv_have_static_assert" = xyes; then
+case "x$st_cv_have_static_assert" in
+	xyes)
 
 $as_echo "#define HAVE_STATIC_ASSERT 1" >>confdefs.h
 
-fi
+		;;
+	x_Static_assert)
+
+$as_echo "#define HAVE__STATIC_ASSERT 1" >>confdefs.h
+
+		;;
+esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dladdr in -ldl" >&5
 $as_echo_n "checking for dladdr in -ldl... " >&6; }
@@ -13963,9 +14525,47 @@
 fi
 
 
-libunwind_CPPFLAGS=
-libunwind_LDFLAGS=
-libunwind_LIBS=
+
+# Check whether --enable-stacktrace was given.
+if test "${enable_stacktrace+set}" = set; then :
+  enableval=$enable_stacktrace; case "$enableval" in
+		yes|no|check) enable_stacktrace="$enableval" ;;
+		*) as_fn_error $? "bad value $enableval for enable-stacktrace option.
+				 Valid options are: yes, no, check." "$LINENO" 5
+		;;
+	 esac
+else
+  enable_stacktrace=check
+fi
+
+
+use_unwinder=
+
+if test x"$enable_stacktrace" != xno; then :
+
+: ${libdw_CPPFLAGS=}
+: ${libdw_CFLAGS=}
+: ${libdw_LDFLAGS=}
+: ${libdw_LIBS=}
+
+
+# Check whether --with-libdw was given.
+if test "${with_libdw+set}" = set; then :
+  withval=$with_libdw; case "${withval}" in
+	     yes|no|check) ;;
+	     *) libdw_CPPFLAGS="-I${withval}/include"
+		libdw_LDFLAGS="-L${withval}/lib"
+		with_libdw=yes ;;
+	     esac
+
+else
+  with_libdw=check
+
+fi
+
+
+
+
 
 # Check whether --with-libunwind was given.
 if test "${with_libunwind+set}" = set; then :
@@ -13981,8 +14581,154 @@
 fi
 
 
-use_libunwind=no
-if test "x$with_libunwind" != xno; then :
+
+       if test "x$with_libdw" = xyes && test "x$with_libunwind" = xyes; then :
+  as_fn_error $? "--with-libdw=yes and --with-libunwind=yes are mutually exclusive" "$LINENO" 5
+elif test "x$with_libdw" = xyes; then :
+  with_libunwind=no
+elif test "x$with_libunwind" = xyes; then :
+  with_libdw=no
+
+fi
+       if test "x$use_unwinder" = x; then :
+
+have_libdw=
+
+if test "x$with_libdw" != xno && test "x$use_unwinder" = x; then :
+  saved_CPPFLAGS="$CPPFLAGS"
+       saved_CFLAGS="$CFLAGS"
+       CPPFLAGS="$CPPFLAGS $libdw_CPPFLAGS"
+       CFLAGS="$CFLAGS $libdw_CFLAGS"
+
+       for ac_header in elfutils/libdwfl.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "elfutils/libdwfl.h" "ac_cv_header_elfutils_libdwfl_h" "$ac_includes_default"
+if test "x$ac_cv_header_elfutils_libdwfl_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_ELFUTILS_LIBDWFL_H 1
+_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dwfl_linux_proc_attach in -ldw" >&5
+$as_echo_n "checking for dwfl_linux_proc_attach in -ldw... " >&6; }
+if ${ac_cv_lib_dw_dwfl_linux_proc_attach+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldw $libdw_LDFLAGS $libdw_LIBS
+				      $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dwfl_linux_proc_attach ();
+int
+main ()
+{
+return dwfl_linux_proc_attach ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dw_dwfl_linux_proc_attach=yes
+else
+  ac_cv_lib_dw_dwfl_linux_proc_attach=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dw_dwfl_linux_proc_attach" >&5
+$as_echo "$ac_cv_lib_dw_dwfl_linux_proc_attach" >&6; }
+if test "x$ac_cv_lib_dw_dwfl_linux_proc_attach" = xyes; then :
+  libdw_LIBS="-ldw $libdw_LIBS"
+				       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elfutils version" >&5
+$as_echo_n "checking for elfutils version... " >&6; }
+if ${st_cv_ELFUTILS_VERSION+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  st_cv_ELFUTILS_VERSION="$(echo _ELFUTILS_VERSION |
+										  $CPP $CPPFLAGS -P -imacros elfutils/version.h - |
+										  grep '^[0-9]')"
+							test -n "$st_cv_ELFUTILS_VERSION" ||
+								st_cv_ELFUTILS_VERSION=0
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $st_cv_ELFUTILS_VERSION" >&5
+$as_echo "$st_cv_ELFUTILS_VERSION" >&6; }
+				       if test "$st_cv_ELFUTILS_VERSION" -ge 164; then :
+  have_libdw=yes
+else
+  if test "x$with_libdw" = xyes; then :
+  as_fn_error $? "elfutils version >= 164 is required for stack tracing support" "$LINENO" 5
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: elfutils version >= 164 is required for stack tracing support" >&5
+$as_echo "$as_me: WARNING: elfutils version >= 164 is required for stack tracing support" >&2;}
+
+fi
+
+
+fi
+
+else
+  if test "x$with_libdw" = xyes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to find dwfl_linux_proc_attach in libdw
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+fi
+
+
+else
+  if test "x$with_libdw" = xyes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to find elfutils/libdwfl.h
+See \`config.log' for more details" "$LINENO" 5; }
+
+fi
+
+
+fi
+
+done
+
+
+       CFLAGS="$saved_CFLAGS"
+       CPPFLAGS="$saved_CPPFLAGS"
+
+
+fi
+
+if test "x$have_libdw" = xyes; then :
+  use_unwinder=libdw
+
+$as_echo "#define USE_LIBDW 1" >>confdefs.h
+
+
+
+
+
+
+
+fi
+
+
+fi
+       if test "x$use_unwinder" = x; then :
+
+libunwind_CPPFLAGS=
+libunwind_LDFLAGS=
+libunwind_LIBS=
+
+if test "x$with_libunwind" != xno && test "x$use_unwinder" = x; then :
   saved_CPPFLAGS="$CPPFLAGS"
        CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS"
 
@@ -14097,7 +14843,7 @@
 $as_echo "$ac_cv_lib_unwind_ptrace__UPT_create" >&6; }
 if test "x$ac_cv_lib_unwind_ptrace__UPT_create" = xyes; then :
   libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"
-		   use_libunwind=yes
+		   use_unwinder=libunwind
 
 else
   if test "x$with_libunwind" != xcheck; then
@@ -14159,9 +14905,7 @@
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable stack tracing support using libunwind" >&5
-$as_echo_n "checking whether to enable stack tracing support using libunwind... " >&6; }
-if test "x$use_libunwind" = xyes; then
+if test "x$use_unwinder" = xlibunwind; then
 
 $as_echo "#define USE_LIBUNWIND 1" >>confdefs.h
 
@@ -14169,7 +14913,36 @@
 
 
 fi
- if test "x$use_libunwind" = xyes; then
+
+
+fi
+       if test x"$enable_stacktrace$use_unwinder" = xyes; then :
+  as_fn_error $? "stack tracing support requires an unwinder" "$LINENO" 5
+
+fi
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable stack tracing support" >&5
+$as_echo_n "checking whether to enable stack tracing support... " >&6; }
+ if test "x$use_unwinder" != x; then
+  ENABLE_STACKTRACE_TRUE=
+  ENABLE_STACKTRACE_FALSE='#'
+else
+  ENABLE_STACKTRACE_TRUE='#'
+  ENABLE_STACKTRACE_FALSE=
+fi
+
+ if test "x$use_unwinder" = xlibdw; then
+  USE_LIBDW_TRUE=
+  USE_LIBDW_FALSE='#'
+else
+  USE_LIBDW_TRUE='#'
+  USE_LIBDW_FALSE=
+fi
+
+ if test "x$use_unwinder" = xlibunwind; then
   USE_LIBUNWIND_TRUE=
   USE_LIBUNWIND_FALSE='#'
 else
@@ -14177,12 +14950,20 @@
   USE_LIBUNWIND_FALSE=
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_libunwind" >&5
-$as_echo "$use_libunwind" >&6; }
 
-libiberty_CPPFLAGS=
-libiberty_LDFLAGS=
-libiberty_LIBS=
+use_libiberty=
+if test "x$use_unwinder" != x; then :
+
+$as_echo "#define ENABLE_STACKTRACE 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define USE_UNWINDER "$use_unwinder"
+_ACEOF
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, using $use_unwinder" >&5
+$as_echo "yes, using $use_unwinder" >&6; }
+
 
 # Check whether --with-libiberty was given.
 if test "${with_libiberty+set}" = set; then :
@@ -14198,8 +14979,12 @@
 fi
 
 
+libiberty_CPPFLAGS=
+libiberty_LDFLAGS=
+libiberty_LIBS=
 use_libiberty=no
-if test "x$use_libunwind" = xyes && test "x$with_libiberty" != xno; then :
+
+if test "x$with_libiberty" != xno; then :
   saved_CPPFLAGS="$CPPFLAGS"
        CPPFLAGS="$CPPFLAGS $libiberty_CPPFLAGS"
        for ac_header in demangle.h libiberty/demangle.h
@@ -14283,8 +15068,8 @@
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable demangling symbols in stack trace" >&5
-$as_echo_n "checking whether to enable demangling symbols in stack trace... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable symbols demangling in stack trace" >&5
+$as_echo_n "checking whether to enable symbols demangling in stack trace... " >&6; }
 if test "x$use_libiberty" = xyes; then
 
 $as_echo "#define USE_DEMANGLE 1" >>confdefs.h
@@ -14293,6 +15078,15 @@
 
 
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_libiberty" >&5
+$as_echo "$use_libiberty" >&6; }
+
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
  if test "x$use_libiberty" = xyes; then
   USE_DEMANGLE_TRUE=
   USE_DEMANGLE_FALSE='#'
@@ -14301,8 +15095,8 @@
   USE_DEMANGLE_FALSE=
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_libiberty" >&5
-$as_echo "$use_libiberty" >&6; }
+
+
 
 if test "$arch" = mips && test "$no_create" != yes; then
 	mkdir -p linux/mips
@@ -15885,6 +16679,14 @@
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
+if test -z "${ENABLE_STACKTRACE_TRUE}" && test -z "${ENABLE_STACKTRACE_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_STACKTRACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_LIBDW_TRUE}" && test -z "${USE_LIBDW_FALSE}"; then
+  as_fn_error $? "conditional \"USE_LIBDW\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_LIBUNWIND_TRUE}" && test -z "${USE_LIBUNWIND_FALSE}"; then
   as_fn_error $? "conditional \"USE_LIBUNWIND\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -16310,7 +17112,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.22, which was
+This file was extended by strace $as_me 4.23, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16377,7 +17179,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.22
+strace config.status 4.23
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 6e53f98..9dec1b2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -46,9 +46,9 @@
 AM_MAINTAINER_MODE
 AC_CANONICAL_HOST
 
-RPM_CHANGELOGTIME="$(LC_TIME=C date '+%a %b %d %Y')"
+RPM_CHANGELOGTIME="$(LC_TIME=C date -u '+%a %b %d %Y')"
 AC_SUBST(RPM_CHANGELOGTIME)
-DEB_CHANGELOGTIME="$(LC_TIME=C date -R)"
+DEB_CHANGELOGTIME="$(LC_TIME=C date -u -R)"
 AC_SUBST(DEB_CHANGELOGTIME)
 
 AC_PROG_CC
@@ -322,7 +322,9 @@
 	struct flock,
 	struct flock64,
 	struct __kernel_flock,
-	struct __kernel_flock64
+	struct __kernel_flock64,
+	struct f_owner_ex,
+	struct __kernel_f_owner_ex
 ]),,,
 [#include <sys/types.h>
 #include <linux/fcntl.h>])
@@ -382,7 +384,6 @@
 	asm/cachectl.h
 	asm/guarded_storage.h
 	asm/sysmips.h
-	bluetooth/bluetooth.h
 	elf.h
 	iconv.h
 	inttypes.h
@@ -465,10 +466,20 @@
 ])
 
 AC_CHECK_HEADERS([linux/bpf.h], [
-	AC_CHECK_TYPES([struct bpf_insn],,, [#include <linux/bpf.h>])
+	AC_CHECK_TYPES(m4_normalize([
+		struct bpf_insn,
+		struct bpf_map_info,
+		struct bpf_prog_info
+	]),,, [#include <linux/bpf.h>])
 	st_BPF_ATTR
 ])
 
+AC_CHECK_HEADERS([bluetooth/bluetooth.h], [
+	AC_CHECK_MEMBERS([struct sockaddr_l2.l2_bdaddr_type],,,
+			 [#include <bluetooth/bluetooth.h>
+			 #include <bluetooth/l2cap.h>])
+])
+
 AC_CHECK_TYPES(m4_normalize([
 	struct br_mdb_entry,
 	struct br_port_msg
@@ -485,7 +496,8 @@
 AC_CHECK_TYPES(m4_normalize([
 	struct rta_mfc_stats,
 	struct rtvia
-]),,, [#include <linux/rtnetlink.h>])
+]),,, [#include <sys/socket.h>
+#include <linux/rtnetlink.h>])
 
 AC_CHECK_MEMBERS([struct ndt_stats.ndts_table_fulls],,, [#include <linux/neighbour.h>])
 AC_CHECK_TYPES(m4_normalize([
@@ -495,13 +507,23 @@
 
 AC_CHECK_TYPES(m4_normalize([
 	struct ifla_bridge_id,
+	struct ifla_cacheinfo,
 	struct ifla_port_vsi,
 	struct rtnl_link_stats64
-]),,, [#include <linux/if_link.h>])
+]),,, [#include <sys/socket.h>
+#include <linux/rtnetlink.h>])
 AC_CHECK_MEMBERS(m4_normalize([
 	struct rtnl_link_stats.rx_nohandler,
 	struct rtnl_link_stats64.rx_nohandler
-]),,, [#include <linux/if_link.h>])
+]),,, [#include <sys/socket.h>
+#include <linux/rtnetlink.h>])
+AC_CHECK_DECLS(m4_normalize([
+	IFLA_PORT_SELF,
+	IFLA_PROTINFO,
+	IFLA_AF_SPEC,
+	IFLA_XDP
+]),,, [#include <sys/socket.h>
+#include <linux/rtnetlink.h>])
 
 AC_CHECK_TYPES(m4_normalize([
 	struct gnet_stats_basic,
@@ -510,9 +532,15 @@
 	struct gnet_stats_rate_est64
 ]),,, [#include <linux/gen_stats.h>])
 
-AC_CHECK_TYPES([struct tc_sizespec],,, [#include <linux/pkt_sched.h>])
+AC_CHECK_TYPES([struct tc_sizespec],,, [#include <linux/types.h>
+#include <linux/pkt_sched.h>])
+AC_CHECK_DECLS([TCA_STAB_DATA],,, [#include <linux/types.h>
+#include <linux/pkt_sched.h>])
 
-AC_CHECK_TYPES([struct fib_rule_uid_range],,, [#include <linux/fib_rules.h>])
+AC_CHECK_TYPES(m4_normalize([
+	struct fib_rule_uid_range,
+	struct fib_rule_port_range
+]),,, [#include <linux/fib_rules.h>])
 
 AC_CHECK_TYPES([struct statfs], [
 	AC_CHECK_MEMBERS(m4_normalize([
@@ -552,6 +580,11 @@
 	struct kvm_userspace_memory_region
 ]),,, [#include <linux/kvm.h>])
 
+saved_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS -I$srcdir/linux"
+AC_CHECK_TYPES([struct __aio_sigset],,, [#include <linux/aio_abi.h>])
+CPPFLAGS="$saved_CPPFLAGS"
+
 AC_CHECK_HEADERS([linux/btrfs.h], [
 	AC_CHECK_MEMBERS(m4_normalize([
 		struct btrfs_ioctl_feature_flags.compat_flags,
@@ -797,13 +830,31 @@
 
 AC_CACHE_CHECK([for static_assert], [st_cv_have_static_assert],
 	       [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <assert.h>]],
-						[[static_assert(1,"")]])],
+						[[static_assert(1,"")]]
+					       )
+			       ],
 			       [st_cv_have_static_assert=yes],
-			       [st_cv_have_static_assert=no])])
-if test "x$st_cv_have_static_assert" = xyes; then
-	AC_DEFINE([HAVE_STATIC_ASSERT], [1],
-		  [Define to 1 if the system provides static_assert])
-fi
+			       [AC_LINK_IFELSE([AC_LANG_PROGRAM([],
+								[[_Static_assert(1,"")]]
+							       )
+					       ],
+					       [st_cv_have_static_assert=_Static_assert],
+					       [st_cv_have_static_assert=no]
+					      )
+			       ]
+			      )
+	       ]
+	      )
+case "x$st_cv_have_static_assert" in
+	xyes)
+		AC_DEFINE([HAVE_STATIC_ASSERT], [1],
+			  [Define to 1 if the system provides static_assert])
+		;;
+	x_Static_assert)
+		AC_DEFINE([HAVE__STATIC_ASSERT], [1],
+			  [Define to 1 if the system provides _Static_assert])
+		;;
+esac
 
 AC_CHECK_LIB([dl], [dladdr], [dl_LIBS='-ldl'], [dl_LIBS=])
 if test "x$ac_cv_lib_dl_dladdr" = xyes; then
@@ -844,148 +895,7 @@
 
 AC_CHECK_TOOL([READELF], [readelf])
 
-dnl stack trace with libunwind
-libunwind_CPPFLAGS=
-libunwind_LDFLAGS=
-libunwind_LIBS=
-AC_ARG_WITH([libunwind],
-	    [AS_HELP_STRING([--with-libunwind],
-			    [use libunwind to implement stack tracing support])],
-	    [case "${withval}" in
-	     yes|no|check) ;;
-	     *) with_libunwind=yes
-		libunwind_CPPFLAGS="-I${withval}/include"
-		libunwind_LDFLAGS="-L${withval}/lib" ;;
-	     esac],
-	    [with_libunwind=check]
-)
-
-use_libunwind=no
-AS_IF([test "x$with_libunwind" != xno],
-      [saved_CPPFLAGS="$CPPFLAGS"
-       CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS"
-
-       AC_CHECK_HEADERS([libunwind-ptrace.h],
-	 [saved_LDFLAGS="$LDFLAGS"
-	  LDFLAGS="$LDFLAGS $libunwind_LDFLAGS"
-
-	  AC_CHECK_LIB([unwind], [backtrace],
-	    [libunwind_LIBS="-lunwind $libunwind_LIBS"
-
-	     AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic])
-	     saved_LIBS="$LIBS"
-	     LIBS="-lunwind-generic $libunwind_LIBS $LIBS"
-
-	     AC_LINK_IFELSE(
-	       [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]],
-				[[return !unw_create_addr_space(0, 0)]])
-	       ],
-	       [AC_MSG_RESULT([yes])
-		libunwind_LIBS="-lunwind-generic $libunwind_LIBS"
-
-		AC_CHECK_LIB([unwind-ptrace], [_UPT_create],
-		  [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"
-		   use_libunwind=yes
-		  ],
-		  [if test "x$with_libunwind" != xcheck; then
-		     AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace])
-		   fi
-		  ],
-		  [$libunwind_LIBS]
-		)
-	       ],
-	       [AC_MSG_RESULT([no])
-		if test "x$with_libunwind" != xcheck; then
-		  AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic])
-		fi
-	       ]
-	     )
-
-	     LIBS="$saved_LIBS"
-	    ],
-	    [if test "x$with_libunwind" != xcheck; then
-	       AC_MSG_FAILURE([failed to find libunwind])
-	     fi
-	    ],
-	    [$libunwind_LIBS]
-	  )
-
-	  LDFLAGS="$saved_LDFLAGS"
-	 ],
-	 [if test "x$with_libunwind" != xcheck; then
-	    AC_MSG_FAILURE([failed to find libunwind-ptrace.h])
-	  fi
-	 ]
-       )
-
-       CPPFLAGS="$saved_CPPFLAGS"
-      ]
-)
-
-dnl enable libunwind
-AC_MSG_CHECKING([whether to enable stack tracing support using libunwind])
-if test "x$use_libunwind" = xyes; then
-	AC_DEFINE([USE_LIBUNWIND], 1, [Compile stack tracing functionality])
-	AC_SUBST(libunwind_LIBS)
-	AC_SUBST(libunwind_LDFLAGS)
-	AC_SUBST(libunwind_CPPFLAGS)
-fi
-AM_CONDITIONAL([USE_LIBUNWIND], [test "x$use_libunwind" = xyes])
-AC_MSG_RESULT([$use_libunwind])
-
-dnl demangling symbols in the stack trace
-libiberty_CPPFLAGS=
-libiberty_LDFLAGS=
-libiberty_LIBS=
-AC_ARG_WITH([libiberty],
-	    [AS_HELP_STRING([--with-libiberty],
-			    [use libiberty to demangle symbols in stack trace])],
-	    [case "${withval}" in
-	     yes|no|check) ;;
-	     *) with_libiberty=yes
-		libiberty_CPPFLAGS="-I${withval}/include"
-		libiberty_LDFLAGS="-L${withval}/lib" ;;
-	     esac],
-	    [with_libiberty=check]
-)
-
-use_libiberty=no
-AS_IF([test "x$use_libunwind" = xyes && test "x$with_libiberty" != xno],
-      [saved_CPPFLAGS="$CPPFLAGS"
-       CPPFLAGS="$CPPFLAGS $libiberty_CPPFLAGS"
-       AC_CHECK_HEADERS([demangle.h libiberty/demangle.h],
-	 [saved_LDFLAGS="$LDFLAGS"
-	  LDFLAGS="$LDFLAGS $libiberty_LDFLAGS"
-	  AC_CHECK_LIB([iberty],[cplus_demangle],
-	    [libiberty_LIBS="-liberty"
-	     use_libiberty=yes
-	    ],
-	    [if test "x$with_libiberty" != xcheck; then
-	       AC_MSG_FAILURE([failed to find cplus_demangle in libiberty])
-	     fi
-	    ]
-	  )
-	  LDFLAGS="$saved_LDFLAGS"
-	 ],
-	 [if test "x$with_libiberty" != xcheck; then
-	      AC_MSG_FAILURE([failed to find demangle.h])
-	  fi
-	 ]
-       )
-       CPPFLAGS="$saved_CPPFLAGS"
-      ]
-)
-
-dnl enable libiberty
-AC_MSG_CHECKING([whether to enable demangling symbols in stack trace])
-if test "x$use_libiberty" = xyes; then
-	AC_DEFINE([USE_DEMANGLE], 1, [Do demangling symbols in stack trace])
-	AC_SUBST(libiberty_LIBS)
-	AC_SUBST(libiberty_LDFLAGS)
-	AC_SUBST(libiberty_CPPFLAGS)
-fi
-AM_CONDITIONAL([USE_DEMANGLE], [test "x$use_libiberty" = xyes])
-AC_MSG_RESULT([$use_libiberty])
+st_STACKTRACE
 
 if test "$arch" = mips && test "$no_create" != yes; then
 	mkdir -p linux/mips
diff --git a/debian/changelog b/debian/changelog
index a93aed6..2b09968 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,14 @@
-strace (4.22-1) experimental; urgency=low
+strace (4.23-1) experimental; urgency=low
 
-  * strace 4.22 snapshot.
+  * strace 4.23 snapshot.
 
- -- Strace <strace-devel@lists.strace.io>  Thu, 14 Jun 2018 16:29:09 -0700
+ -- Strace <strace-devel@lists.strace.io>  Fri, 15 Jun 2018 17:54:18 +0000
+
+strace (4.22-1) unstable; urgency=medium
+
+  * New upstream version.
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Thu, 05 Apr 2018 04:05:06 +0000
 
 strace (4.21-1) unstable; urgency=medium
 
diff --git a/debian/changelog.in b/debian/changelog.in
index f9f7c20..833f2cf 100644
--- a/debian/changelog.in
+++ b/debian/changelog.in
@@ -4,6 +4,12 @@
 
  -- Strace <@PACKAGE_BUGREPORT@>  @DEB_CHANGELOGTIME@
 
+strace (4.22-1) unstable; urgency=medium
+
+  * New upstream version.
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Thu, 05 Apr 2018 04:05:06 +0000
+
 strace (4.21-1) unstable; urgency=medium
 
   * New upstream version.
diff --git a/debian/control b/debian/control
index 3caffd1..38e13a1 100644
--- a/debian/control
+++ b/debian/control
@@ -2,7 +2,7 @@
 Maintainer: Steve McIntyre <93sam@debian.org>
 Section: utils
 Priority: optional
-Build-Depends: libc6-dev (>= 2.2.2) [!alpha !ia64], libc6.1-dev (>= 2.2.2) [alpha ia64], gcc-multilib [amd64 i386 powerpc ppc64 s390 sparc sparc64 x32], debhelper (>= 7.0.0), gawk, libunwind-dev [amd64], libiberty-dev [amd64], libbluetooth-dev
+Build-Depends: libc6-dev (>= 2.2.2) [!alpha !ia64], libc6.1-dev (>= 2.2.2) [alpha ia64], gcc-multilib [amd64 i386 powerpc ppc64 ppc64el s390 s390x sparc sparc64 x32], debhelper (>= 7.0.0), gawk, libdw-dev, libiberty-dev, libbluetooth-dev
 Standards-Version: 4.1.3
 Homepage: https://strace.io
 Vcs-Git: https://salsa.debian.org/debian/strace.git
diff --git a/debian/rules b/debian/rules
index f335fed..b22767a 100755
--- a/debian/rules
+++ b/debian/rules
@@ -61,7 +61,7 @@
 build-udeb/Makefile: configure
 	mkdir -p $(@D)
 	cd $(@D); sh ../configure --enable-mpers=check --prefix=/usr \
-		--without-libunwind --without-libiberty $(CONFIG_OPTS)
+		--without-stacktrace --without-libiberty $(CONFIG_OPTS)
 
 build64/Makefile: configure
 	mkdir -p $(@D)
diff --git a/defs.h b/defs.h
index 62aa11c..4437d6f 100644
--- a/defs.h
+++ b/defs.h
@@ -166,6 +166,12 @@
 # define HAVE_PERSONALITY_2_MPERS 0
 #endif
 
+#ifdef WORDS_BIGENDIAN
+# define is_bigendian true
+#else
+# define is_bigendian false
+#endif
+
 typedef struct ioctlent {
 	const char *symbol;
 	unsigned int code;
@@ -176,12 +182,22 @@
 #define INJECT_F_RETVAL		0x04
 #define INJECT_F_DELAY_ENTER	0x08
 #define INJECT_F_DELAY_EXIT	0x10
+#define INJECT_F_SYSCALL	0x20
+
+#define INJECT_ACTION_FLAGS	\
+	(INJECT_F_SIGNAL	\
+	|INJECT_F_ERROR		\
+	|INJECT_F_RETVAL	\
+	|INJECT_F_DELAY_ENTER	\
+	|INJECT_F_DELAY_EXIT	\
+	)
 
 struct inject_data {
-	uint8_t flags;		/* 5 of 8 flags are used so far */
+	uint8_t flags;		/* 6 of 8 flags are used so far */
 	uint8_t signo;		/* NSIG <= 128 */
 	uint16_t rval_idx;	/* index in retval_vec */
 	uint16_t delay_idx;	/* index in delay_data_vec */
+	uint16_t scno;		/* syscall to be injected instead of -1 */
 };
 
 struct inject_opts {
@@ -219,10 +235,8 @@
 	struct timespec delay_expiration_time; /* When does the delay end */
 
 	struct mmap_cache_t *mmap_cache;
-	unsigned int mmap_cache_size;
-	unsigned int mmap_cache_generation;
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 	void *unwind_ctx;
 	struct unwind_queue_t *unwind_queue;
 #endif
@@ -257,6 +271,8 @@
 #define TCB_INJECT_DELAY_EXIT	0x800	/* Current syscall needs to be delayed
 					   on exit */
 #define TCB_DELAYED	0x1000	/* Current syscall has been delayed */
+#define TCB_TAMPERED_NO_FAIL 0x2000	/* We tamper tcb with syscall
+					   that should not fail. */
 
 /* qualifier flags */
 #define QUAL_TRACE	0x001	/* this system call should be traced */
@@ -281,24 +297,38 @@
 #define recovering(tcp)	((tcp)->flags & TCB_RECOVERING)
 #define inject_delay_exit(tcp)	((tcp)->flags & TCB_INJECT_DELAY_EXIT)
 #define syscall_delayed(tcp)	((tcp)->flags & TCB_DELAYED)
+#define syscall_tampered_nofail(tcp) ((tcp)->flags & TCB_TAMPERED_NO_FAIL)
 
 #include "xlat.h"
 
 extern const struct xlat addrfams[];
+
+/** Protocol hardware identifiers array, sorted, defined in sockaddr.c. */
 extern const struct xlat arp_hardware_types[];
+/** Protocol hardware identifiers array size without terminating record. */
+extern const size_t arp_hardware_types_size;
+
 extern const struct xlat at_flags[];
 extern const struct xlat clocknames[];
 extern const struct xlat dirent_types[];
 
-/** Ethernet protocols list, sorted and unterminated, defined in sockaddr.c. */
+/** Ethernet protocols list, sorted, defined in sockaddr.c. */
 extern const struct xlat ethernet_protocols[];
 /** Ethernet protocols array size without terminating record. */
 extern const size_t ethernet_protocols_size;
 
-extern const struct xlat evdev_abs[];
-extern const struct xlat iffflags[];
+/** IP protocols list, sorted, defined in net.c. */
 extern const struct xlat inet_protocols[];
+/** IP protocols array size without terminating record. */
+extern const size_t inet_protocols_size;
+
+extern const struct xlat evdev_abs[];
+/** Number of elements in evdev_abs array without the terminating record. */
+extern const size_t evdev_abs_size;
+
+extern const struct xlat iffflags[];
 extern const struct xlat ip_type_of_services[];
+extern const struct xlat ipc_private[];
 extern const struct xlat msg_flags[];
 extern const struct xlat netlink_protocols[];
 extern const struct xlat nl_netfilter_msg_types[];
@@ -377,7 +407,7 @@
 #define tracing_paths (global_path_set.num_selected != 0)
 extern unsigned xflag;
 extern unsigned followfork;
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 /* if this is true do the stack trace for every system call */
 extern bool stack_trace_enabled;
 #endif
@@ -456,43 +486,90 @@
 	return set_tcb_priv_data(tcp, (void *) val, 0);
 }
 
+/**
+ * @return 0 on success, -1 on error.
+ */
 extern int
 umoven(struct tcb *, kernel_ulong_t addr, unsigned int len, void *laddr);
 #define umove(pid, addr, objp)	\
 	umoven((pid), (addr), sizeof(*(objp)), (void *) (objp))
 
+/**
+ * @return true on success, false on error.
+ */
+extern bool
+tfetch_mem64(struct tcb *, uint64_t addr, unsigned int len, void *laddr);
+
+static inline bool
+tfetch_mem(struct tcb *tcp, const kernel_ulong_t addr,
+	   unsigned int len, void *laddr)
+{
+	return tfetch_mem64(tcp, addr, len, laddr);
+}
+#define tfetch_obj(pid, addr, objp)	\
+	tfetch_mem((pid), (addr), sizeof(*(objp)), (void *) (objp))
+
+/**
+ * @return true on success, false on error.
+ */
+extern bool
+tfetch_mem64_ignore_syserror(struct tcb *, uint64_t addr,
+			     unsigned int len, void *laddr);
+
+static inline bool
+tfetch_mem_ignore_syserror(struct tcb *tcp, const kernel_ulong_t addr,
+			   unsigned int len, void *laddr)
+{
+	return tfetch_mem64_ignore_syserror(tcp, addr, len, laddr);
+}
+
+/**
+ * @return 0 on success, -1 on error (and print addr).
+ */
 extern int
-umoven_or_printaddr(struct tcb *, kernel_ulong_t addr,
-		    unsigned int len, void *laddr);
+umoven_or_printaddr64(struct tcb *, uint64_t addr,
+		      unsigned int len, void *laddr);
+#define umove_or_printaddr64(pid, addr, objp)	\
+	umoven_or_printaddr64((pid), (addr), sizeof(*(objp)), (void *) (objp))
+
+static inline int
+umoven_or_printaddr(struct tcb *tcp, const kernel_ulong_t addr,
+		    unsigned int len, void *laddr)
+{
+	return umoven_or_printaddr64(tcp, addr, len, laddr);
+}
 #define umove_or_printaddr(pid, addr, objp)	\
 	umoven_or_printaddr((pid), (addr), sizeof(*(objp)), (void *) (objp))
 
+/**
+ * @return 0 on success, -1 on error (and print addr).
+ */
 extern int
-umoven_or_printaddr_ignore_syserror(struct tcb *, kernel_ulong_t addr,
-				    unsigned int len, void *laddr);
+umoven_or_printaddr64_ignore_syserror(struct tcb *, uint64_t addr,
+				      unsigned int len, void *laddr);
+#define umove_or_printaddr64_ignore_syserror(pid, addr, objp)	\
+	umoven_or_printaddr64_ignore_syserror((pid), (addr), sizeof(*(objp)), \
+					      (void *) (objp))
 
+static inline int
+umoven_or_printaddr_ignore_syserror(struct tcb *tcp, const kernel_ulong_t addr,
+				    unsigned int len, void *laddr)
+{
+	return umoven_or_printaddr64_ignore_syserror(tcp, addr, len, laddr);
+}
+#define umove_or_printaddr_ignore_syserror(pid, addr, objp)	\
+	umoven_or_printaddr_ignore_syserror((pid), (addr), sizeof(*(objp)), \
+					    (void *) (objp))
+
+/**
+ * @return strlen + 1 on success, 0 on success and no NUL seen, -1 on error.
+ */
 extern int
 umovestr(struct tcb *, kernel_ulong_t addr, unsigned int len, char *laddr);
 
 extern int upeek(struct tcb *tcp, unsigned long, kernel_ulong_t *);
 extern int upoke(struct tcb *tcp, unsigned long, kernel_ulong_t);
 
-extern bool
-print_array(struct tcb *,
-	    kernel_ulong_t start_addr,
-	    size_t nmemb,
-	    void *elem_buf,
-	    size_t elem_size,
-	    int (*umoven_func)(struct tcb *,
-				     kernel_ulong_t,
-				     unsigned int,
-				     void *),
-	    bool (*print_func)(struct tcb *,
-				     void *elem_buf,
-				     size_t elem_size,
-				     void *opaque_data),
-	    void *opaque_data);
-
 #if HAVE_ARCH_GETRVAL2
 extern long getrval2(struct tcb *);
 #endif
@@ -500,16 +577,26 @@
 extern const char *signame(const int);
 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)
+
+static inline void
+pathtrace_select(const char *path)
+{
+	return pathtrace_select_set(path, &global_path_set);
+}
+
+static inline bool
+pathtrace_match(struct tcb *tcp)
+{
+	return 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);
 
 extern const char *xlookup(const struct xlat *, const uint64_t);
 extern const char *xlat_search(const struct xlat *, const size_t, const uint64_t);
+extern const char *xlat_idx(const struct xlat *xlat, size_t nmemb, uint64_t val);
 
 struct dyxlat;
 struct dyxlat *dyxlat_alloc(size_t nmemb);
@@ -564,11 +651,36 @@
 	ATTRIBUTE_FORMAT((printf, 2, 0));
 
 extern void printaddr64(uint64_t addr);
-extern void printaddr(kernel_ulong_t addr);
-extern int printxvals(const uint64_t, const char *, const struct xlat *, ...)
+
+static inline void
+printaddr(const kernel_ulong_t addr)
+{
+	printaddr64(addr);
+}
+
+#define xlat_verbose(style_) ((style_) & XLAT_STYLE_VERBOSITY_MASK)
+#define xlat_format(style_)  ((style_) & XLAT_STYLE_FORMAT_MASK)
+
+extern enum xlat_style xlat_verbosity;
+
+extern int printxvals_ex(uint64_t val, const char *dflt,
+			 enum xlat_style, const struct xlat *, ...)
 	ATTRIBUTE_SENTINEL;
-extern int printxval_searchn(const struct xlat *xlat, size_t xlat_size,
-	uint64_t val, const char *dflt);
+#define printxvals(val_, dflt_, ...) \
+	printxvals_ex((val_), (dflt_), XLAT_STYLE_DEFAULT, __VA_ARGS__)
+
+extern int printxval_searchn_ex(const struct xlat *, size_t xlat_size,
+				uint64_t val, const char *dflt,
+				enum xlat_style);
+
+static inline int
+printxval_searchn(const struct xlat *xlat, size_t xlat_size, uint64_t val,
+		  const char *dflt)
+{
+	return printxval_searchn_ex(xlat, xlat_size, val, dflt,
+				    XLAT_STYLE_DEFAULT);
+}
+
 /**
  * Wrapper around printxval_searchn that passes ARRAY_SIZE - 1
  * as the array size, as all arrays are XLAT_END-terminated and
@@ -576,24 +688,148 @@
  */
 #define printxval_search(xlat__, val__, dflt__) \
 	printxval_searchn(xlat__, ARRAY_SIZE(xlat__) - 1, val__, dflt__)
-extern int sprintxval(char *buf, size_t size, const struct xlat *,
-	unsigned int val, const char *dflt);
+#define printxval_search_ex(xlat__, val__, dflt__) \
+	printxval_searchn_ex((xlat__), ARRAY_SIZE(xlat__) - 1, (val__), \
+			     (dflt__), XLAT_STYLE_DEFAULT)
+
+extern int printxval_indexn_ex(const struct xlat *, size_t xlat_size,
+			       uint64_t val, const char *dflt, enum xlat_style);
+
+static inline int
+printxval_indexn(const struct xlat *xlat, size_t xlat_size, uint64_t val,
+		 const char *dflt)
+{
+	return printxval_indexn_ex(xlat, xlat_size, val, dflt,
+				   XLAT_STYLE_DEFAULT);
+}
+
+#define printxval_index(xlat__, val__, dflt__) \
+	printxval_indexn(xlat__, ARRAY_SIZE(xlat__) - 1, val__, dflt__)
+#define printxval_index_ex(xlat__, val__, dflt__) \
+	printxval_indexn_ex((xlat__), ARRAY_SIZE(xlat__) - 1, (val__), \
+			    (dflt__), XLAT_STYLE_DEFAULT)
+
+extern int sprintxval_ex(char *buf, size_t size, const struct xlat *,
+			 unsigned int val, const char *dflt, enum xlat_style);
+
+static inline int
+sprintxval(char *buf, size_t size, const struct xlat *xlat, unsigned int val,
+	   const char *dflt)
+{
+	return sprintxval_ex(buf, size, xlat, val, dflt, XLAT_STYLE_DEFAULT);
+}
+
+extern void printxval_dispatch_ex(const struct xlat *, size_t xlat_size,
+				  uint64_t val, const char *dflt,
+				  enum xlat_type, enum xlat_style);
+static inline void
+printxval_dispatch(const struct xlat *xlat, size_t xlat_size, uint64_t val,
+		   const char *dflt, enum xlat_type xt)
+{
+	return printxval_dispatch_ex(xlat, xlat_size, val, dflt, xt,
+				     XLAT_STYLE_DEFAULT);
+}
+
+/** Print a value in accordance with xlat formatting settings. */
+extern void print_xlat_ex(uint64_t val, const char *str, enum xlat_style style);
+#define print_xlat(val_) \
+	print_xlat_ex((val_), #val_, XLAT_STYLE_DEFAULT)
+#define print_xlat32(val_) \
+	print_xlat_ex((uint32_t) (val_), #val_, XLAT_STYLE_DEFAULT)
+#define print_xlat_u(val_) \
+	print_xlat_ex((val_), #val_, XLAT_STYLE_FMT_U)
+#define print_xlat_d(val_) \
+	print_xlat_ex((val_), #val_, XLAT_STYLE_FMT_D)
+
 extern int printargs(struct tcb *);
 extern int printargs_u(struct tcb *);
 extern int printargs_d(struct tcb *);
 
-extern int printflags_ex(uint64_t, const char *, const struct xlat *, ...)
+extern int printflags_ex(uint64_t flags, const char *dflt,
+			 enum xlat_style, const struct xlat *, ...)
 	ATTRIBUTE_SENTINEL;
-extern const char *sprintflags(const char *, const struct xlat *, uint64_t);
+extern const char *sprintflags_ex(const char *prefix, const struct xlat *,
+				  uint64_t flags, enum xlat_style);
+
+static inline const char *
+sprintflags(const char *prefix, const struct xlat *xlat, uint64_t flags)
+{
+	return sprintflags_ex(prefix, xlat, flags, XLAT_STYLE_DEFAULT);
+}
+
 extern const char *sprinttime(long long sec);
 extern const char *sprinttime_nsec(long long sec, unsigned long long nsec);
 extern const char *sprinttime_usec(long long sec, unsigned long long usec);
+
+extern const char *sprint_mac_addr(const uint8_t addr[], size_t size);
+
 extern void print_symbolic_mode_t(unsigned int);
 extern void print_numeric_umode_t(unsigned short);
 extern void print_numeric_long_umask(unsigned long);
 extern void print_dev_t(unsigned long long dev);
 extern void print_abnormal_hi(kernel_ulong_t);
 
+extern bool print_int32_array_member(struct tcb *, void *elem_buf,
+				     size_t elem_size, void *data);
+extern bool print_uint32_array_member(struct tcb *, void *elem_buf,
+				      size_t elem_size, void *data);
+extern bool print_uint64_array_member(struct tcb *, void *elem_buf,
+				      size_t elem_size, void *data);
+
+typedef bool (*tfetch_mem_fn)(struct tcb *, kernel_ulong_t addr,
+			      unsigned int size, void *dest);
+typedef bool (*print_fn)(struct tcb *, void *elem_buf,
+			 size_t elem_size, void *opaque_data);
+
+enum print_array_flag_bits {
+	PAF_PRINT_INDICES_BIT = XLAT_STYLE_SPEC_BITS + 1,
+	PAF_INDEX_XLAT_SORTED_BIT,
+	PAF_INDEX_XLAT_VALUE_INDEXED_BIT,
+};
+
+#define FLAG_(name_) name_ = 1 << name_##_BIT
+
+enum print_array_flags {
+	FLAG_(PAF_PRINT_INDICES),
+	FLAG_(PAF_INDEX_XLAT_SORTED),
+	FLAG_(PAF_INDEX_XLAT_VALUE_INDEXED),
+};
+
+#undef FLAG_
+
+/**
+ * @param flags Combination of xlat style settings and additional flags from
+ *              enum print_array_flags.
+ */
+extern bool
+print_array_ex(struct tcb *,
+	       kernel_ulong_t start_addr,
+	       size_t nmemb,
+	       void *elem_buf,
+	       size_t elem_size,
+	       tfetch_mem_fn tfetch_mem_func,
+	       print_fn print_func,
+	       void *opaque_data,
+	       unsigned int flags,
+	       const struct xlat *index_xlat,
+	       size_t index_xlat_size,
+	       const char *index_dflt);
+
+static inline bool
+print_array(struct tcb *const tcp,
+	    const kernel_ulong_t start_addr,
+	    const size_t nmemb,
+	    void *const elem_buf,
+	    const size_t elem_size,
+	    tfetch_mem_fn tfetch_mem_func,
+	    print_fn print_func,
+	    void *const opaque_data)
+{
+	return print_array_ex(tcp, start_addr, nmemb, elem_buf, elem_size,
+			      tfetch_mem_func, print_func, opaque_data,
+			      0, NULL, 0, NULL);
+}
+
 extern kernel_ulong_t *
 fetch_indirect_syscall_args(struct tcb *, kernel_ulong_t addr, unsigned int n_args);
 
@@ -681,8 +917,15 @@
 extern void
 print_struct_statfs64(struct tcb *, kernel_ulong_t addr, kernel_ulong_t size);
 
+extern int
+fetch_perf_event_attr(struct tcb *const tcp, const kernel_ulong_t addr);
+extern void
+print_perf_event_attr(struct tcb *const tcp, const kernel_ulong_t addr);
+
 extern void print_ifindex(unsigned int);
 
+extern void print_bpf_filter_code(const uint16_t code, bool extended);
+
 extern void qualify(const char *);
 extern unsigned int qual_flags(const unsigned int);
 
@@ -695,6 +938,7 @@
 DECL_IOCTL(evdev);
 DECL_IOCTL(file);
 DECL_IOCTL(fs_x);
+DECL_IOCTL(inotify);
 DECL_IOCTL(kvm);
 DECL_IOCTL(nsfs);
 DECL_IOCTL(ptp);
@@ -724,6 +968,10 @@
 DECL_NETLINK(selinux);
 DECL_NETLINK(sock_diag);
 
+extern void
+decode_netlink_kobject_uevent(struct tcb *, kernel_ulong_t addr,
+			      kernel_ulong_t len);
+
 extern int ts_nz(const struct timespec *);
 extern int ts_cmp(const struct timespec *, const struct timespec *);
 extern double ts_float(const struct timespec *);
@@ -732,7 +980,7 @@
 extern void ts_mul(struct timespec *, const struct timespec *, int);
 extern void ts_div(struct timespec *, const struct timespec *, int);
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 extern void unwind_init(void);
 extern void unwind_tcb_init(struct tcb *);
 extern void unwind_tcb_fin(struct tcb *);
@@ -755,7 +1003,7 @@
 static inline int
 printflags64(const struct xlat *x, uint64_t flags, const char *dflt)
 {
-	return printflags_ex(flags, dflt, x, NULL);
+	return printflags_ex(flags, dflt, XLAT_STYLE_DEFAULT, x, NULL);
 }
 
 static inline int
@@ -776,6 +1024,30 @@
 	return printxvals(val, dflt, x, NULL);
 }
 
+static inline int
+printxval64_u(const struct xlat *x, const uint64_t val, const char *dflt)
+{
+	return printxvals_ex(val, dflt, XLAT_STYLE_FMT_U, x, NULL);
+}
+
+static inline int
+printxval_u(const struct xlat *x, const unsigned int val, const char *dflt)
+{
+	return printxvals_ex(val, dflt, XLAT_STYLE_FMT_U, x, NULL);
+}
+
+static inline int
+printxval64_d(const struct xlat *x, const int64_t val, const char *dflt)
+{
+	return printxvals_ex(val, dflt, XLAT_STYLE_FMT_D, x, NULL);
+}
+
+static inline int
+printxval_d(const struct xlat *x, const int val, const char *dflt)
+{
+	return printxvals_ex(val, dflt, XLAT_STYLE_FMT_D, x, NULL);
+}
+
 static inline void
 tprint_iov(struct tcb *tcp, kernel_ulong_t len, kernel_ulong_t addr,
 	   enum iov_decode decode_iov)
@@ -840,6 +1112,19 @@
 extern void tprintf_comment(const char *fmt, ...) ATTRIBUTE_FORMAT((printf, 1, 2));
 extern void tprints_comment(const char *str);
 
+static inline void
+printaddr_comment(const kernel_ulong_t addr)
+{
+	tprintf_comment("%#llx", (unsigned long long) addr);
+}
+
+static inline void
+print_mac_addr(const char *prefix, const uint8_t addr[], size_t size)
+{
+	tprints(prefix);
+	tprints(sprint_mac_addr(addr, size));
+}
+
 #if SUPPORTED_PERSONALITIES > 1
 extern void set_personality(unsigned int personality);
 extern unsigned current_personality;
@@ -925,39 +1210,94 @@
 		  const char *fmt_long, const char *fmt_int)
 	ATTRIBUTE_FORMAT((printf, 3, 0))
 	ATTRIBUTE_FORMAT((printf, 4, 0));
+
 extern bool printnum_addr_long_int(struct tcb *, kernel_ulong_t addr);
-# define printnum_slong(tcp, addr) \
-	printnum_long_int((tcp), (addr), "%" PRId64, "%d")
-# define printnum_ulong(tcp, addr) \
-	printnum_long_int((tcp), (addr), "%" PRIu64, "%u")
-# define printnum_ptr(tcp, addr) \
-	printnum_addr_long_int((tcp), (addr))
+
+static inline bool
+printnum_slong(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_long_int(tcp, addr, "%" PRId64, "%d");
+}
+
+static inline bool
+printnum_ulong(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_long_int(tcp, addr, "%" PRIu64, "%u");
+}
+
+static inline bool
+printnum_ptr(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_addr_long_int(tcp, addr);
+}
+
 #elif current_wordsize > 4
-# define printnum_slong(tcp, addr) \
-	printnum_int64((tcp), (addr), "%" PRId64)
-# define printnum_ulong(tcp, addr) \
-	printnum_int64((tcp), (addr), "%" PRIu64)
-# define printnum_ptr(tcp, addr) \
-	printnum_addr_int64((tcp), (addr))
+
+static inline bool
+printnum_slong(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_int64(tcp, addr, "%" PRId64);
+}
+
+static inline bool
+printnum_ulong(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_int64(tcp, addr, "%" PRIu64);
+}
+
+static inline bool
+printnum_ptr(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_addr_int64(tcp, addr);
+}
+
 #else /* current_wordsize == 4 */
-# define printnum_slong(tcp, addr) \
-	printnum_int((tcp), (addr), "%d")
-# define printnum_ulong(tcp, addr) \
-	printnum_int((tcp), (addr), "%u")
-# define printnum_ptr(tcp, addr) \
-	printnum_addr_int((tcp), (addr))
+
+static inline bool
+printnum_slong(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_int(tcp, addr, "%d");
+}
+
+static inline bool
+printnum_ulong(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_int(tcp, addr, "%u");
+}
+
+static inline bool
+printnum_ptr(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_addr_int(tcp, addr);
+}
+
 #endif
 
 #ifndef current_klongsize
 extern bool printnum_addr_klong_int(struct tcb *, kernel_ulong_t addr);
-# define printnum_kptr(tcp, addr) \
-	printnum_addr_klong_int((tcp), (addr))
+
+static inline bool
+printnum_kptr(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_addr_klong_int(tcp, addr);
+}
+
 #elif current_klongsize > 4
-# define printnum_kptr(tcp, addr) \
-	printnum_addr_int64((tcp), (addr))
+
+static inline bool
+printnum_kptr(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_addr_int64(tcp, addr);
+}
+
 #else /* current_klongsize == 4 */
-# define printnum_kptr(tcp, addr) \
-	printnum_addr_int((tcp), (addr))
+
+static inline bool
+printnum_kptr(struct tcb *tcp, kernel_ulong_t addr)
+{
+	return printnum_addr_int(tcp, addr);
+}
+
 #endif
 
 #define DECL_PRINTPAIR(name)						\
@@ -1021,28 +1361,27 @@
 	 sizeof(v) == sizeof(long) ? (long long) (long) (v) : \
 	 (long long) (v))
 
+extern const char *const errnoent[];
+extern const char *const signalent[];
+extern const unsigned int nerrnos;
+extern const unsigned int nsignals;
+
 extern const struct_sysent sysent0[];
-extern const char *const errnoent0[];
-extern const char *const signalent0[];
 extern const struct_ioctlent ioctlent0[];
 
 extern const char *const personality_names[];
+/* Personality designators to be used for specifying personality */
+extern const char *const personality_designators[];
 
 #if SUPPORTED_PERSONALITIES > 1
 extern const struct_sysent *sysent;
-extern const char *const *errnoent;
-extern const char *const *signalent;
 extern const struct_ioctlent *ioctlent;
 #else
 # define sysent     sysent0
-# define errnoent   errnoent0
-# define signalent  signalent0
 # define ioctlent   ioctlent0
 #endif
 
 extern unsigned nsyscalls;
-extern unsigned nerrnos;
-extern unsigned nsignals;
 extern unsigned nioctlents;
 
 extern const unsigned int nsyscall_vec[SUPPORTED_PERSONALITIES];
diff --git a/dm.c b/dm.c
index 77a286b..963852f 100644
--- a/dm.c
+++ b/dm.c
@@ -237,7 +237,7 @@
 
 	tprints(", deps=");
 	print_array(tcp, addr + offset_end, s.count, &dev_buf, sizeof(dev_buf),
-		    umoven_or_printaddr, dm_print_dev, NULL);
+		    tfetch_mem, dm_print_dev, NULL);
 
 	tprints("}");
 
diff --git a/epoll.c b/epoll.c
index d5f2f55..80883c9 100644
--- a/epoll.c
+++ b/epoll.c
@@ -2,7 +2,7 @@
  * Copyright (c) 2004-2007 Ulrich Drepper <drepper@redhat.com>
  * Copyright (c) 2004 Roland McGrath <roland@redhat.com>
  * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -94,7 +94,7 @@
 	} else {
 		struct epoll_event ev;
 		print_array(tcp, tcp->u_arg[1], tcp->u_rval, &ev, sizeof(ev),
-			    umoven_or_printaddr, print_epoll_event, 0);
+			    tfetch_mem, print_epoll_event, 0);
 		tprintf(", %d, %d", (int) tcp->u_arg[2], (int) tcp->u_arg[3]);
 	}
 }
diff --git a/error_prints.c b/error_prints.c
index 710e99b..6808318 100644
--- a/error_prints.c
+++ b/error_prints.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999-2017 The strace developers.
+ * Copyright (c) 1999-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -90,6 +90,7 @@
 	va_list p;
 	va_start(p, fmt);
 	verror_msg(0, fmt, p);
+	va_end(p);
 	die();
 }
 
@@ -100,6 +101,7 @@
 		va_list p;
 		va_start(p, fmt);
 		verror_msg(0, fmt, p);
+		va_end(p);
 	}
 	fprintf(stderr, "Try '%s -h' for more information.\n",
 		program_invocation_name);
@@ -121,5 +123,6 @@
 	va_list p;
 	va_start(p, fmt);
 	verror_msg(errno, fmt, p);
+	va_end(p);
 	die();
 }
diff --git a/evdev.c b/evdev.c
index 674c1c0..7ca15c9 100644
--- a/evdev.c
+++ b/evdev.c
@@ -29,6 +29,8 @@
 
 #include "defs.h"
 
+#include "xlat/evdev_abs.h"
+
 #ifdef HAVE_LINUX_INPUT_H
 
 # include <linux/ioctl.h>
@@ -51,6 +53,8 @@
 #  define SYN_MAX 0xf
 # endif
 
+const size_t evdev_abs_size = ARRAY_SIZE(evdev_abs) - 1;
+
 static int
 abs_ioctl(struct tcb *const tcp, const kernel_ulong_t arg)
 {
@@ -94,7 +98,7 @@
 
 	if (!umove_or_printaddr(tcp, arg, &keycode)) {
 		tprintf("[%u, ", keycode[0]);
-		printxval(evdev_keycode, keycode[1], "KEY_???");
+		printxval_index(evdev_keycode, keycode[1], "KEY_???");
 		tprints("]");
 	}
 
@@ -121,7 +125,7 @@
 		unsigned int i;
 
 		tprintf("index=%" PRIu16 ", keycode=", ike.index);
-		printxval(evdev_keycode, ike.keycode, "KEY_???");
+		printxval_index(evdev_keycode, ike.keycode, "KEY_???");
 		tprints(", scancode=[");
 		for (i = 0; i < ARRAY_SIZE(ike.scancode); i++) {
 			if (i > 0)
@@ -160,9 +164,9 @@
 }
 
 static int
-decode_bitset(struct tcb *const tcp, const kernel_ulong_t arg,
-	      const struct xlat decode_nr[], const unsigned int max_nr,
-	      const char *const dflt)
+decode_bitset_(struct tcb *const tcp, const kernel_ulong_t arg,
+	       const struct xlat decode_nr[], const unsigned int max_nr,
+	       const char *const dflt, size_t decode_nr_size, enum xlat_type xt)
 {
 	tprints(", ");
 
@@ -183,7 +187,7 @@
 	if (i < 0) {
 		tprints(" 0 ");
 	} else {
-		printxval(decode_nr, i, dflt);
+		printxval_dispatch(decode_nr, decode_nr_size, i, dflt, xt);
 
 		while ((i = next_set_bit(decoded_arg, i + 1, size)) > 0) {
 			if (abbrev(tcp) && bit_displayed >= 3) {
@@ -191,7 +195,8 @@
 				break;
 			}
 			tprints(", ");
-			printxval(decode_nr, i, dflt);
+			printxval_dispatch(decode_nr, decode_nr_size, i, dflt,
+					   xt);
 			bit_displayed++;
 		}
 	}
@@ -201,6 +206,10 @@
 	return RVAL_IOCTL_DECODED;
 }
 
+#define decode_bitset(tcp_, arg_, decode_nr_, max_nr_, dflt_, xt_) \
+	decode_bitset_((tcp_), (arg_), (decode_nr_), (max_nr_), \
+		       (dflt_), ARRAY_SIZE(decode_nr_), (xt_))
+
 # ifdef EVIOCGMTSLOTS
 static int
 mtslots_ioctl(struct tcb *const tcp, const unsigned int code,
@@ -251,43 +260,42 @@
 	switch (ev_nr) {
 		case EV_SYN:
 			return decode_bitset(tcp, arg, evdev_sync,
-					     SYN_MAX, "SYN_???");
+					     SYN_MAX, "SYN_???", XT_INDEXED);
 		case EV_KEY:
 			return decode_bitset(tcp, arg, evdev_keycode,
-					     KEY_MAX, "KEY_???");
+					     KEY_MAX, "KEY_???", XT_INDEXED);
 		case EV_REL:
 			return decode_bitset(tcp, arg, evdev_relative_axes,
-					     REL_MAX, "REL_???");
+					     REL_MAX, "REL_???", XT_INDEXED);
 		case EV_ABS:
 			return decode_bitset(tcp, arg, evdev_abs,
-					     ABS_MAX, "ABS_???");
+					     ABS_MAX, "ABS_???", XT_INDEXED);
 		case EV_MSC:
 			return decode_bitset(tcp, arg, evdev_misc,
-					     MSC_MAX, "MSC_???");
-# ifdef EV_SW
+					     MSC_MAX, "MSC_???", XT_INDEXED);
 		case EV_SW:
 			return decode_bitset(tcp, arg, evdev_switch,
-					     SW_MAX, "SW_???");
-# endif
+					     SW_MAX, "SW_???", XT_INDEXED);
 		case EV_LED:
 			return decode_bitset(tcp, arg, evdev_leds,
-					     LED_MAX, "LED_???");
+					     LED_MAX, "LED_???", XT_INDEXED);
 		case EV_SND:
 			return decode_bitset(tcp, arg, evdev_snd,
-					     SND_MAX, "SND_???");
+					     SND_MAX, "SND_???", XT_INDEXED);
 		case EV_REP:
 			return decode_bitset(tcp, arg, evdev_autorepeat,
-					     REP_MAX, "REP_???");
+					     REP_MAX, "REP_???", XT_INDEXED);
 		case EV_FF:
 			return decode_bitset(tcp, arg, evdev_ff_types,
-					     FF_MAX, "FF_???");
+					     FF_MAX, "FF_???", XT_SORTED);
 		case EV_PWR:
 			tprints(", ");
 			printnum_int(tcp, arg, "%d");
 			return RVAL_IOCTL_DECODED;
 		case EV_FF_STATUS:
 			return decode_bitset(tcp, arg, evdev_ff_status,
-					     FF_STATUS_MAX, "FF_STATUS_???");
+					     FF_STATUS_MAX, "FF_STATUS_???",
+					     XT_INDEXED);
 		default:
 			tprints(", ");
 			printaddr(arg);
@@ -341,22 +349,23 @@
 # ifdef EVIOCGPROP
 		case _IOC_NR(EVIOCGPROP(0)):
 			return decode_bitset(tcp, arg, evdev_prop,
-					     INPUT_PROP_MAX, "PROP_???");
+					     INPUT_PROP_MAX, "PROP_???",
+					     XT_INDEXED);
 # endif
 		case _IOC_NR(EVIOCGSND(0)):
 			return decode_bitset(tcp, arg, evdev_snd,
-					     SND_MAX, "SND_???");
+					     SND_MAX, "SND_???", XT_INDEXED);
 # ifdef EVIOCGSW
 		case _IOC_NR(EVIOCGSW(0)):
 			return decode_bitset(tcp, arg, evdev_switch,
-					     SW_MAX, "SW_???");
+					     SW_MAX, "SW_???", XT_INDEXED);
 # endif
 		case _IOC_NR(EVIOCGKEY(0)):
 			return decode_bitset(tcp, arg, evdev_keycode,
-					     KEY_MAX, "KEY_???");
+					     KEY_MAX, "KEY_???", XT_INDEXED);
 		case _IOC_NR(EVIOCGLED(0)):
 			return decode_bitset(tcp, arg, evdev_leds,
-					     LED_MAX, "LED_???");
+					     LED_MAX, "LED_???", XT_INDEXED);
 	}
 
 	/* multi-number fixed-length commands */
diff --git a/execve.c b/execve.c
index 5455b15..32c84d0 100644
--- a/execve.c
+++ b/execve.c
@@ -6,7 +6,7 @@
  * Copyright (c) 2007 Roland McGrath <roland@redhat.com>
  * Copyright (c) 2011-2012 Denys Vlasenko <vda.linux@googlemail.com>
  * Copyright (c) 2010-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2014-2017 The strace developers.
+ * Copyright (c) 2014-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -57,8 +57,11 @@
 		if (umoven(tcp, addr, wordsize, cp.data)) {
 			if (sep == start_sep)
 				printaddr(addr);
-			else
-				tprints(", ???]");
+			else {
+				tprints(", ...");
+				printaddr_comment(addr);
+				tprints("]");
+			}
 			return;
 		}
 		if (!(wordsize < sizeof(cp.p64) ? cp.p32 : cp.p64)) {
diff --git a/f_owner_ex.h b/f_owner_ex.h
new file mode 100644
index 0000000..ec76ac8
--- /dev/null
+++ b/f_owner_ex.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2018 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_F_OWNER_EX_H
+#define STRACE_F_OWNER_EX_H
+
+#include <linux/fcntl.h>
+
+#if defined HAVE_STRUCT_F_OWNER_EX
+typedef struct f_owner_ex struct_kernel_f_owner_ex;
+#elif defined HAVE_STRUCT___KERNEL_F_OWNER_EX
+typedef struct __kernel_f_owner_ex struct_kernel_f_owner_ex;
+#else
+# error struct f_owner_ex definition not found in <linux/fcntl.h>
+#endif
+
+#endif /* !STRACE_F_OWNER_EX_H */
diff --git a/fanotify.c b/fanotify.c
index a9ec0e9..d99f384 100644
--- a/fanotify.c
+++ b/fanotify.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2014-2017 The strace developers.
+ * Copyright (c) 2014-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -75,10 +75,12 @@
 #endif
 	printflags64(fan_event_flags, mask, "FAN_???");
 	tprints(", ");
-	if ((int) tcp->u_arg[argn] == FAN_NOFD)
-		tprints("FAN_NOFD, ");
-	else
+	if ((int) tcp->u_arg[argn] == FAN_NOFD) {
+		print_xlat_d(FAN_NOFD);
+		tprints(", ");
+	} else {
 		print_dirfd(tcp, tcp->u_arg[argn]);
+	}
 	printpath(tcp, tcp->u_arg[argn + 1]);
 
 	return RVAL_DECODED;
diff --git a/fcntl.c b/fcntl.c
index a42489b..973684e 100644
--- a/fcntl.c
+++ b/fcntl.c
@@ -3,7 +3,7 @@
  * 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.
+ * Copyright (c) 1999-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,7 +35,6 @@
 #include "xlat/f_owner_types.h"
 #include "xlat/f_seals.h"
 #include "xlat/fcntlcmds.h"
-#include "xlat/fcntl64cmds.h"
 #include "xlat/fdflags.h"
 #include "xlat/lockfcmds.h"
 #include "xlat/notifyflags.h"
@@ -197,18 +196,7 @@
 	if (entering(tcp)) {
 		printfd(tcp, tcp->u_arg[0]);
 		tprints(", ");
-		const unsigned int cmd = tcp->u_arg[1];
-		const char *str = xlookup(fcntlcmds, cmd);
-		if (str) {
-			tprints(str);
-		} else {
-			/*
-			 * fcntl syscall does not recognize these
-			 * constants, but we would like to show them
-			 * for better debugging experience.
-			 */
-			printxval(fcntl64cmds, cmd, "F_???");
-		}
+		printxval(fcntlcmds, tcp->u_arg[1], "F_???");
 	}
 	return print_fcntl(tcp);
 }
@@ -219,12 +207,7 @@
 	if (entering(tcp)) {
 		printfd(tcp, tcp->u_arg[0]);
 		tprints(", ");
-		const char *str = xlookup(fcntl64cmds, cmd);
-		if (str) {
-			tprints(str);
-		} else {
-			printxval(fcntlcmds, cmd, "F_???");
-		}
+		printxval(fcntlcmds, cmd, "F_???");
 	}
 	switch (cmd) {
 		case F_SETLK64:
diff --git a/file_ioctl.c b/file_ioctl.c
index 51b88f1..fc45aa6 100644
--- a/file_ioctl.c
+++ b/file_ioctl.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -185,7 +185,7 @@
 
 		rc = print_array(tcp, arg + offsetof(typeof(args), info),
 				 args.dest_count, &info, sizeof(info),
-				 umoven_or_printaddr,
+				 tfetch_mem,
 				 print_file_dedupe_range_info, limit);
 
 		tprints("}");
@@ -225,15 +225,15 @@
 			     "FIEMAP_FLAG_???");
 		tprintf(", fm_mapped_extents=%u",
 			args.fm_mapped_extents);
-		tprints(", fm_extents=");
 		if (abbrev(tcp)) {
-			tprints("...");
+			tprints(", ...");
 		} else {
 			struct fiemap_extent fe;
+			tprints(", fm_extents=");
 			print_array(tcp,
 				    arg + offsetof(typeof(args), fm_extents),
 				    args.fm_mapped_extents, &fe, sizeof(fe),
-				    umoven_or_printaddr,
+				    tfetch_mem,
 				    print_fiemap_extent, 0);
 		}
 		tprints("}");
diff --git a/filter_qualify.c b/filter_qualify.c
index c1283fb..9b5569c 100644
--- a/filter_qualify.c
+++ b/filter_qualify.c
@@ -43,6 +43,11 @@
 static struct number_set *trace_set;
 static struct number_set *verbose_set;
 
+/* Only syscall numbers are personality-specific so far.  */
+struct inject_personality_data {
+	uint16_t scno;
+};
+
 static int
 sigstr_to_uint(const char *s)
 {
@@ -102,6 +107,7 @@
 
 static bool
 parse_inject_token(const char *const token, struct inject_opts *const fopts,
+		   struct inject_personality_data *const pdata,
 		   const bool fault_tokens_only)
 {
 	const char *val;
@@ -137,6 +143,27 @@
 			/* F == F+0 */
 			fopts->step = 0;
 		}
+	} else if ((val = STR_STRIP_PREFIX(token, "syscall=")) != token) {
+		if (fopts->data.flags & INJECT_F_SYSCALL)
+			return false;
+
+		for (unsigned int p = 0; p < SUPPORTED_PERSONALITIES; ++p) {
+			kernel_long_t scno = scno_by_name(val, p, 0);
+
+			if (scno < 0)
+				return false;
+
+			/*
+			 * We want to inject only pure system calls with no side
+			 * effects.
+			 */
+			if (!(sysent_vec[p][scno].sys_flags & TRACE_PURE))
+				return false;
+
+			pdata[p].scno = scno;
+		}
+
+		fopts->data.flags |= INJECT_F_SYSCALL;
 	} else if ((val = STR_STRIP_PREFIX(token, "error=")) != token) {
 		if (fopts->data.flags & (INJECT_F_ERROR | INJECT_F_RETVAL))
 			return false;
@@ -223,6 +250,7 @@
 static const char *
 parse_inject_expression(char *const str,
 			struct inject_opts *const fopts,
+			struct inject_personality_data *const pdata,
 			const bool fault_tokens_only)
 {
 	if (str[0] == '\0' || str[0] == ':')
@@ -233,7 +261,7 @@
 
 	char *token;
 	while ((token = strtok_r(NULL, ":", &saveptr))) {
-		if (!parse_inject_token(token, fopts, fault_tokens_only))
+		if (!parse_inject_token(token, fopts, pdata, fault_tokens_only))
 			return NULL;
 	}
 
@@ -308,9 +336,10 @@
 			.delay_idx = -1
 		}
 	};
+	struct inject_personality_data pdata[SUPPORTED_PERSONALITIES] = { { 0 } };
 	char *copy = xstrdup(str);
 	const char *name =
-		parse_inject_expression(copy, &opts, fault_tokens_only);
+		parse_inject_expression(copy, &opts, pdata, fault_tokens_only);
 	if (!name)
 		error_msg_and_die("invalid %s '%s'", description, str);
 
@@ -321,7 +350,7 @@
 	free(copy);
 
 	/* If neither of retval, error, signal or delay is specified, then ... */
-	if (!opts.data.flags) {
+	if (!(opts.data.flags & INJECT_ACTION_FLAGS)) {
 		if (fault_tokens_only) {
 			/* in fault= syntax the default error code is ENOSYS. */
 			opts.data.rval_idx = retval_new(ENOSYS);
@@ -353,6 +382,10 @@
 			if (is_number_in_set_array(i, tmp_set, p)) {
 				add_number_to_set_array(i, inject_set, p);
 				inject_vec[p][i] = opts;
+
+				/* Copy per-personality data.  */
+				inject_vec[p][i].data.scno =
+					pdata[p].scno;
 			}
 		}
 	}
diff --git a/futex.c b/futex.c
index 16ccddb..9ce4ced 100644
--- a/futex.c
+++ b/futex.c
@@ -3,7 +3,7 @@
  * Copyright (c) 2007-2008 Ulrich Drepper <drepper@redhat.com>
  * Copyright (c) 2009 Andreas Schwab <schwab@redhat.com>
  * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2014-2017 The strace developers.
+ * Copyright (c) 2014-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,6 +37,9 @@
 #ifndef FUTEX_CLOCK_REALTIME
 # define FUTEX_CLOCK_REALTIME 256
 #endif
+#ifndef FUTEX_OP_OPARG_SHIFT
+# define FUTEX_OP_OPARG_SHIFT 8
+#endif
 
 #include "xlat/futexops.h"
 #include "xlat/futexwakeops.h"
@@ -94,8 +97,10 @@
 		tprintf(", %u, ", val2);
 		printaddr(uaddr2);
 		tprints(", ");
-		if ((val3 >> 28) & 8)
-			tprints("FUTEX_OP_OPARG_SHIFT<<28|");
+		if ((val3 >> 28) & FUTEX_OP_OPARG_SHIFT) {
+			print_xlat(FUTEX_OP_OPARG_SHIFT);
+			tprints("<<28|");
+		}
 		comment = printxval(futexwakeops, (val3 >> 28) & 0x7, NULL)
 			? NULL : "FUTEX_OP_???";
 		tprints("<<28");
diff --git a/gcc_compat.h b/gcc_compat.h
index 771286a..251080b 100644
--- a/gcc_compat.h
+++ b/gcc_compat.h
@@ -99,4 +99,15 @@
 # define ATTRIBUTE_FALLTHROUGH	((void) 0)
 #endif
 
+#if GNUC_PREREQ(6, 0)
+# define DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE				\
+	_Pragma("GCC diagnostic push");					\
+	_Pragma("GCC diagnostic ignored \"-Wtautological-compare\"");
+# define DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE				\
+	_Pragma("GCC diagnostic pop");
+#else
+# define DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE	/* empty */
+# define DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE	/* empty */
+#endif
+
 #endif /* !STRACE_GCC_COMPAT_H */
diff --git a/gen_bpf_attr_check.sh b/gen_bpf_attr_check.sh
index 9da75ad..517e621 100755
--- a/gen_bpf_attr_check.sh
+++ b/gen_bpf_attr_check.sh
@@ -38,23 +38,29 @@
 # define SoM(type_, member_) (sizeof(((type_ *)0)->member_))
 EOF
 
-for struct in $(sed -n 's/^struct \(BPF_[^[:space:]]\+_struct\) .*/\1/p' < "$input"); do
+for struct in $(sed -n 's/^struct \([^[:space:]]\+_struct\) .*/\1/p' < "$input"); do
+	case "$struct" in
+		BPF_*) type_name='union bpf_attr' ;;
+		*) type_name="struct ${struct%_struct}" ;;
+	esac
+	TYPE_NAME="$(printf %s "$type_name" |tr '[:lower:] ' '[:upper:]_')"
+
 	enum="$(sed -n 's/^struct '"$struct"' \/\* \([^[:space:]]\+\) \*\/ {.*/\1/p' < "$input")"
 	ENUM="$(printf %s "$enum" |tr '[:lower:]' '[:upper:]')"
 	enum="$enum${enum:+.}"
 	ENUM="$ENUM${ENUM:+_}"
 	sed -n '/^struct '"$struct"' [^{]*{/,/^};$/p' < "$input" |
-	sed -n 's/^[[:space:]]\+[^;]*[[:space:]]\([^[:space:];]\+\);$/\1/p' |
+	sed -n 's/^[[:space:]]\+[^][;]*[[:space:]]\([^][[:space:];]\+\)\(\[[^;]*\]\)\?;$/\1/p' |
 	while read field; do
 		FIELD="$(printf %s "$field" |tr '[:lower:]' '[:upper:]')"
 		cat <<EOF
 
-# ifdef HAVE_UNION_BPF_ATTR_$ENUM$FIELD
-	static_assert(SoM(struct $struct, $field) == SoM(union bpf_attr, $enum$field),
+# ifdef HAVE_${TYPE_NAME}_$ENUM$FIELD
+	static_assert(SoM(struct $struct, $field) == SoM($type_name, $enum$field),
 		      "$struct.$field size mismatch");
-	static_assert(offsetof(struct $struct, $field) == offsetof(union bpf_attr, $enum$field),
+	static_assert(offsetof(struct $struct, $field) == offsetof($type_name, $enum$field),
 		      "$struct.$field offset mismatch");
-# endif /* HAVE_UNION_BPF_ATTR_$ENUM$FIELD */
+# endif /* HAVE_${TYPE_NAME}_$ENUM$FIELD */
 EOF
 	done
 		cat <<EOF
diff --git a/inotify_ioctl.c b/inotify_ioctl.c
new file mode 100644
index 0000000..c286e57
--- /dev/null
+++ b/inotify_ioctl.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR 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>
+
+#ifndef INOTIFY_IOC_SETNEXTWD
+# define INOTIFY_IOC_SETNEXTWD  _IOW('I', 0, int32_t)
+#endif
+
+int
+inotify_ioctl(struct tcb *const tcp, const unsigned int code,
+	       const kernel_ulong_t arg)
+{
+	switch (code) {
+	case INOTIFY_IOC_SETNEXTWD:
+		tprintf(", %d", (int) arg);
+
+		return RVAL_IOCTL_DECODED;
+	}
+
+	return RVAL_DECODED;
+}
diff --git a/io.c b/io.c
index 9ce1cf5..cd80305 100644
--- a/io.c
+++ b/io.c
@@ -3,7 +3,7 @@
  * 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.
+ * Copyright (c) 1999-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -123,7 +123,7 @@
 	};
 
 	print_array(tcp, addr, len, iov, current_wordsize * 2,
-		    umoven_or_printaddr_ignore_syserror, print_iovec, &config);
+		    tfetch_mem_ignore_syserror, print_iovec, &config);
 }
 
 SYS_FUNC(readv)
diff --git a/ioctl.c b/ioctl.c
index 132925d..93fb526 100644
--- a/ioctl.c
+++ b/ioctl.c
@@ -33,11 +33,6 @@
 #include <linux/ioctl.h>
 #include "xlat/ioctl_dirs.h"
 
-#ifdef HAVE_LINUX_INPUT_H
-# include <linux/input.h>
-#endif
-
-#include "xlat/evdev_abs.h"
 #include "xlat/evdev_ev.h"
 
 static int
@@ -92,7 +87,8 @@
 	if (_IOC_DIR(code) == _IOC_WRITE) {
 		if (nr >= 0xc0 && nr <= 0xc0 + 0x3f) {
 			tprints("EVIOCSABS(");
-			printxval(evdev_abs, nr - 0xc0, "ABS_???");
+			printxval_indexn(evdev_abs, evdev_abs_size, nr - 0xc0,
+					 "ABS_???");
 			tprints(")");
 			return 1;
 		}
@@ -108,7 +104,8 @@
 		return 1;
 	} else if (nr >= 0x40 && nr <= 0x40 + 0x3f) {
 		tprints("EVIOCGABS(");
-		printxval(evdev_abs, nr - 0x40, "ABS_???");
+		printxval_indexn(evdev_abs, evdev_abs_size, nr - 0x40,
+				 "ABS_???");
 		tprints(")");
 		return 1;
 	}
@@ -258,6 +255,8 @@
 	const kernel_ulong_t arg = tcp->u_arg[2];
 
 	switch (_IOC_TYPE(code)) {
+	case '$':
+		return perf_ioctl(tcp, code, arg);
 #if defined(ALPHA) || defined(POWERPC)
 	case 'f': {
 		int ret = file_ioctl(tcp, code, arg);
@@ -325,6 +324,8 @@
 	case 0xae:
 		return kvm_ioctl(tcp, code, arg);
 #endif
+	case 'I':
+		return inotify_ioctl(tcp, code, arg);
 	default:
 		break;
 	}
@@ -339,19 +340,29 @@
 	if (entering(tcp)) {
 		printfd(tcp, tcp->u_arg[0]);
 		tprints(", ");
-		ret = ioctl_decode_command_number(tcp);
-		if (!(ret & IOCTL_NUMBER_STOP_LOOKUP)) {
-			iop = ioctl_lookup(tcp->u_arg[1]);
-			if (iop) {
-				if (ret)
-					tprints(" or ");
-				tprints(iop->symbol);
-				while ((iop = ioctl_next_match(iop)))
-					tprintf(" or %s", iop->symbol);
-			} else if (!ret) {
-				ioctl_print_code(tcp->u_arg[1]);
+
+		if (xlat_verbosity != XLAT_STYLE_ABBREV)
+			tprintf("%#x", (unsigned int) tcp->u_arg[1]);
+		if (xlat_verbosity == XLAT_STYLE_VERBOSE)
+			tprints(" /* ");
+		if (xlat_verbosity != XLAT_STYLE_RAW) {
+			ret = ioctl_decode_command_number(tcp);
+			if (!(ret & IOCTL_NUMBER_STOP_LOOKUP)) {
+				iop = ioctl_lookup(tcp->u_arg[1]);
+				if (iop) {
+					if (ret)
+						tprints(" or ");
+					tprints(iop->symbol);
+					while ((iop = ioctl_next_match(iop)))
+						tprintf(" or %s", iop->symbol);
+				} else if (!ret) {
+					ioctl_print_code(tcp->u_arg[1]);
+				}
 			}
 		}
+		if (xlat_verbosity == XLAT_STYLE_VERBOSE)
+			tprints(" */");
+
 		ret = ioctl_decode(tcp);
 	} else {
 		ret = ioctl_decode(tcp) | RVAL_DECODED;
diff --git a/ioctl_redefs1.h b/ioctl_redefs1.h
index 7021e38..77a7dc0 100644
--- a/ioctl_redefs1.h
+++ b/ioctl_redefs1.h
@@ -646,62 +646,6 @@
 # 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
@@ -866,6 +810,10 @@
 # undef PERF_EVENT_IOC_ID
 # define PERF_EVENT_IOC_ID 0x80042407
 #endif
+#ifdef PERF_EVENT_IOC_MODIFY_ATTRIBUTES
+# undef PERF_EVENT_IOC_MODIFY_ATTRIBUTES
+# define PERF_EVENT_IOC_MODIFY_ATTRIBUTES 0x4004240b
+#endif
 #ifdef PERF_EVENT_IOC_QUERY_BPF
 # undef PERF_EVENT_IOC_QUERY_BPF
 # define PERF_EVENT_IOC_QUERY_BPF 0xc004240a
@@ -890,22 +838,6 @@
 # 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
diff --git a/ioctlent0.h b/ioctlent0.h
index a4d4e28..a6f923e 100644
--- a/ioctlent0.h
+++ b/ioctlent0.h
@@ -173,6 +173,7 @@
 { "VFIO_IOMMU_UNMAP_DMA", 0x00003b72 },
 { "VFIO_DEVICE_GET_GFX_DMABUF", 0x00003b73 },
 { "VFIO_IOMMU_ENABLE", 0x00003b73 },
+{ "VFIO_DEVICE_IOEVENTFD", 0x00003b74 },
 { "VFIO_IOMMU_DISABLE", 0x00003b74 },
 { "VFIO_IOMMU_SPAPR_REGISTER_MEMORY", 0x00003b75 },
 { "VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY", 0x00003b76 },
@@ -354,6 +355,7 @@
 { "RFKILL_IOCTL_NOINPUT", 0x00005201 },
 { "RNDZAPENTCNT", 0x00005204 },
 { "RNDCLEARPOOL", 0x00005206 },
+{ "RNDRESEEDCRNG", 0x00005207 },
 { "CDROMPAUSE", 0x00005301 },
 { "CDROMRESUME", 0x00005302 },
 { "CDROMPLAYMSF", 0x00005303 },
@@ -666,34 +668,6 @@
 { "PPRELEASE", 0x0000708c },
 { "PPYIELD", 0x0000708d },
 { "PPEXCL", 0x0000708f },
-{ "PHONE_CAPABILITIES", 0x00007180 },
-{ "PHONE_RING", 0x00007183 },
-{ "PHONE_HOOKSTATE", 0x00007184 },
-{ "OLD_PHONE_RING_START", 0x00007187 },
-{ "PHONE_RING_STOP", 0x00007188 },
-{ "PHONE_REC_START", 0x0000718a },
-{ "PHONE_REC_STOP", 0x0000718b },
-{ "PHONE_REC_LEVEL", 0x0000718f },
-{ "PHONE_PLAY_START", 0x00007191 },
-{ "PHONE_PLAY_STOP", 0x00007192 },
-{ "PHONE_PLAY_LEVEL", 0x00007195 },
-{ "PHONE_GET_TONE_ON_TIME", 0x0000719e },
-{ "PHONE_GET_TONE_OFF_TIME", 0x0000719f },
-{ "PHONE_GET_TONE_STATE", 0x000071a0 },
-{ "PHONE_BUSY", 0x000071a1 },
-{ "PHONE_RINGBACK", 0x000071a2 },
-{ "PHONE_DIALTONE", 0x000071a3 },
-{ "PHONE_CPT_STOP", 0x000071a4 },
-{ "PHONE_PSTN_GET_STATE", 0x000071a5 },
-{ "PHONE_PSTN_LINETEST", 0x000071a8 },
-{ "IXJCTL_DSP_RESET", 0x000071c0 },
-{ "IXJCTL_DSP_IDLE", 0x000071c5 },
-{ "IXJCTL_TESTRAM", 0x000071c6 },
-{ "IXJCTL_AEC_STOP", 0x000071cc },
-{ "IXJCTL_AEC_GET_LEVEL", 0x000071cd },
-{ "IXJCTL_PSTN_LINETEST", 0x000071d3 },
-{ "IXJCTL_PLAY_CID", 0x000071d7 },
-{ "IXJCTL_DRYBUFFER_CLEAR", 0x000071e7 },
 { "BR_OK", 0x00007201 },
 { "BR_DEAD_REPLY", 0x00007205 },
 { "BR_TRANSACTION_COMPLETE", 0x00007206 },
@@ -885,7 +859,10 @@
 { "VHOST_SET_OWNER", 0x0000af01 },
 { "VHOST_RESET_OWNER", 0x0000af02 },
 { "BT_BMC_IOCTL_SMS_ATN", 0x0000b100 },
+{ "IPMI_BMC_IOCTL_SET_SMS_ATN", 0x0000b100 },
+{ "IPMI_BMC_IOCTL_CLEAR_SMS_ATN", 0x0000b101 },
 { "PPPOEIOCDFWD", 0x0000b101 },
+{ "IPMI_BMC_IOCTL_FORCE_ABORT", 0x0000b102 },
 { "RPMSG_DESTROY_EPT_IOCTL", 0x0000b502 },
 { "NS_GET_USERNS", 0x0000b701 },
 { "NS_GET_PARENT", 0x0000b702 },
@@ -915,8 +892,6 @@
 { "PPWCONTROL", 0x40017084 },
 { "PPWDATA", 0x40017086 },
 { "PPWCTLONIRQ", 0x40017092 },
-{ "PHONE_MAXRINGS", 0x40017185 },
-{ "PHONE_PLAY_TONE", 0x4001719b },
 { "SONYPI_IOCSBRT", 0x40017600 },
 { "SONYPI_IOCSBLUE", 0x40017609 },
 { "SONYPI_IOCSFAN", 0x4001760b },
@@ -932,7 +907,6 @@
 { "DMX_ADD_PID", 0x40026f33 },
 { "DMX_REMOVE_PID", 0x40026f34 },
 { "PPFCONTROL", 0x4002708e },
-{ "PHONE_RING_CADENCE", 0x40027186 },
 { "SET_BITMAP_FILE", 0x4004092b },
 { "IB_USER_MAD_UNREGISTER_AGENT", 0x40041b02 },
 { "HFI1_IOCTL_RECV_CTRL", 0x40041be8 },
@@ -988,6 +962,7 @@
 { "HCISETSCOMTU", 0x400448e4 },
 { "HCIBLOCKADDR", 0x400448e6 },
 { "HCIUNBLOCKADDR", 0x400448e7 },
+{ "INOTIFY_IOC_SETNEXTWD", 0x40044900 },
 { "MFB_SET_PIXFMT", 0x40044d08 },
 { "OTPGETREGIONCOUNT", 0x40044d0e },
 { "UBI_IOCEBER", 0x40044f01 },
@@ -1109,37 +1084,6 @@
 { "PPNEGOT", 0x40047091 },
 { "PPSETPHASE", 0x40047094 },
 { "PPSETFLAGS", 0x4004709b },
-{ "PHONE_REC_CODEC", 0x40047189 },
-{ "PHONE_REC_DEPTH", 0x4004718c },
-{ "PHONE_FRAME", 0x4004718d },
-{ "PHONE_REC_VOLUME", 0x4004718e },
-{ "PHONE_PLAY_CODEC", 0x40047190 },
-{ "PHONE_PLAY_DEPTH", 0x40047193 },
-{ "PHONE_PLAY_VOLUME", 0x40047194 },
-{ "PHONE_DTMF_OOB", 0x40047199 },
-{ "PHONE_SET_TONE_ON_TIME", 0x4004719c },
-{ "PHONE_SET_TONE_OFF_TIME", 0x4004719d },
-{ "PHONE_PSTN_SET_STATE", 0x400471a4 },
-{ "PHONE_WINK_DURATION", 0x400471a6 },
-{ "PHONE_VAD", 0x400471a9 },
-{ "PHONE_WINK", 0x400471aa },
-{ "IXJCTL_GET_FILTER_HIST", 0x400471c8 },
-{ "IXJCTL_AEC_START", 0x400471cb },
-{ "IXJCTL_SET_LED", 0x400471ce },
-{ "IXJCTL_MIXER", 0x400471cf },
-{ "IXJCTL_DAA_COEFF_SET", 0x400471d0 },
-{ "IXJCTL_PORT", 0x400471d1 },
-{ "IXJCTL_DAA_AGAIN", 0x400471d2 },
-{ "IXJCTL_POTS_PSTN", 0x400471d5 },
-{ "PHONE_REC_VOLUME_LINEAR", 0x400471db },
-{ "PHONE_PLAY_VOLUME_LINEAR", 0x400471dc },
-{ "IXJCTL_HZ", 0x400471e0 },
-{ "IXJCTL_RATE", 0x400471e1 },
-{ "IXJCTL_DTMF_PRESCALE", 0x400471e8 },
-{ "IXJCTL_SC_RXG", 0x400471ea },
-{ "IXJCTL_SC_TXG", 0x400471eb },
-{ "IXJCTL_INTERCOM_START", 0x400471fd },
-{ "IXJCTL_INTERCOM_STOP", 0x400471fe },
 { "FAT_IOCTL_SET_ATTRIBUTES", 0x40047211 },
 { "SCIF_LISTEN", 0x40047302 },
 { "PPPIOCATTCHAN", 0x40047438 },
@@ -1187,6 +1131,7 @@
 { "FW_CDEV_IOC_RECEIVE_PHY_PACKETS", 0x40082316 },
 { "PERF_EVENT_IOC_PERIOD", 0x40082404 },
 { "PERF_EVENT_IOC_SET_FILTER", 0x40082406 },
+{ "PERF_EVENT_IOC_MODIFY_ATTRIBUTES", 0x4008240b },
 { "STP_SET_OPTIONS", 0x40082502 },
 { "FBIO_RADEON_SET_MIRROR", 0x40084004 },
 { "AGPIOC_SETUP", 0x40084103 },
@@ -1208,6 +1153,8 @@
 { "AMDKFD_IOC_RESET_EVENT", 0x40084b0b },
 { "AMDKFD_IOC_DBG_REGISTER", 0x40084b0d },
 { "AMDKFD_IOC_DBG_UNREGISTER", 0x40084b0e },
+{ "AMDKFD_IOC_ACQUIRE_VM", 0x40084b15 },
+{ "AMDKFD_IOC_FREE_MEMORY_OF_GPU", 0x40084b17 },
 { "MEMERASE", 0x40084d02 },
 { "MFB_SET_AOID", 0x40084d04 },
 { "MEMLOCK", 0x40084d05 },
@@ -1294,15 +1241,6 @@
 { "PPS_SETPARAMS", 0x400870a2 },
 { "PPS_KC_BIND", 0x400870a5 },
 { "SPIOCSTYPE", 0x40087101 },
-{ "PHONE_CAPABILITIES_CHECK", 0x40087182 },
-{ "PHONE_RING_START", 0x40087187 },
-{ "IXJCTL_SET_FILTER", 0x400871c7 },
-{ "IXJCTL_INIT_TONE", 0x400871c9 },
-{ "IXJCTL_TONE_CADENCE", 0x400871ca },
-{ "IXJCTL_FILTER_CADENCE", 0x400871d6 },
-{ "IXJCTL_CIDCW", 0x400871d9 },
-{ "IXJCTL_SET_FILTER_RAW", 0x400871dd },
-{ "IXJCTL_SIGCTL", 0x400871e9 },
 { "PPPIOCSNPMODE", 0x4008744b },
 { "FS_IOC_SETVERSION", 0x40087602 },
 { "ASHMEM_SET_SIZE", 0x40087703 },
@@ -1898,15 +1836,6 @@
 { "PPGETMODE", 0x80047098 },
 { "PPGETPHASE", 0x80047099 },
 { "PPGETFLAGS", 0x8004709a },
-{ "PHONE_DTMF_READY", 0x80047196 },
-{ "PHONE_GET_DTMF", 0x80047197 },
-{ "PHONE_GET_DTMF_ASCII", 0x80047198 },
-{ "PHONE_EXCEPTION", 0x8004719a },
-{ "IXJCTL_CARDTYPE", 0x800471c1 },
-{ "IXJCTL_SERIAL", 0x800471c2 },
-{ "IXJCTL_DSP_TYPE", 0x800471c3 },
-{ "IXJCTL_DSP_VERSION", 0x800471c4 },
-{ "IXJCTL_VMWI", 0x800471d8 },
 { "BR_ERROR", 0x80047200 },
 { "BR_ACQUIRE_RESULT", 0x80047204 },
 { "FAT_IOCTL_GET_ATTRIBUTES", 0x80047210 },
@@ -1999,14 +1928,6 @@
 { "RTC_EPOCH_READ", 0x8008700d },
 { "PPS_GETPARAMS", 0x800870a1 },
 { "PPS_GETCAP", 0x800870a3 },
-{ "PHONE_CAPABILITIES_LIST", 0x80087181 },
-{ "IXJCTL_CID", 0x800871d4 },
-{ "IXJCTL_VERSION", 0x800871da },
-{ "IXJCTL_FRAMES_READ", 0x800871e2 },
-{ "IXJCTL_FRAMES_WRITTEN", 0x800871e3 },
-{ "IXJCTL_READ_WAIT", 0x800871e4 },
-{ "IXJCTL_WRITE_WAIT", 0x800871e5 },
-{ "IXJCTL_DRYBUFFER_READ", 0x800871e6 },
 { "BR_DEAD_BINDER", 0x8008720f },
 { "BR_CLEAR_DEATH_NOTIFICATION_DONE", 0x80087210 },
 { "FS_IOC_GETVERSION", 0x80087601 },
@@ -2262,6 +2183,7 @@
 { "DRM_IOCTL_ADD_DRAW", 0xc0046427 },
 { "DRM_IOCTL_RM_DRAW", 0xc0046428 },
 { "DRM_IOCTL_MGA_WAIT_FENCE", 0xc004644b },
+{ "DRM_IOCTL_VC4_PERFMON_DESTROY", 0xc004644d },
 { "DRM_IOCTL_MODE_RMFB", 0xc00464af },
 { "DRM_IOCTL_MODE_DESTROY_DUMB", 0xc00464b4 },
 { "DRM_IOCTL_MODE_DESTROYPROPBLOB", 0xc00464be },
@@ -2328,7 +2250,6 @@
 { "PHN_GET_REGS", 0xc0087002 },
 { "PHN_GETREG", 0xc0087005 },
 { "PPS_FETCH", 0xc00870a4 },
-{ "PHONE_QUERY_CODEC", 0xc00871a7 },
 { "MIC_VIRTIO_ADD_DEVICE", 0xc0087301 },
 { "SCIF_BIND", 0xc0087301 },
 { "MIC_VIRTIO_COPY_DESC", 0xc0087302 },
@@ -2368,7 +2289,6 @@
 { "FSL_HV_IOCTL_PARTITION_GET_STATUS", 0xc00caf02 },
 { "MBXFB_IOCX_REG", 0xc00cf405 },
 { "BLKREPORTZONE", 0xc0101282 },
-{ "RDMA_VERBS_IOCTL", 0xc0101b01 },
 { "STP_POLICY_ID_SET", 0xc0102500 },
 { "CAPI_GET_VERSION", 0xc0104307 },
 { "CAPI_MANUFACTURER_CMD", 0xc0104320 },
@@ -2379,6 +2299,7 @@
 { "SNDRV_EMUX_IOCTL_LOAD_PATCH", 0xc0104881 },
 { "SNDRV_EMUX_IOCTL_MISC_MODE", 0xc0104884 },
 { "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", 0xc0104b11 },
+{ "AMDKFD_IOC_GET_PROCESS_APERTURES_NEW", 0xc0104b14 },
 { "MEMWRITEOOB", 0xc0104d03 },
 { "MEMREADOOB", 0xc0104d04 },
 { "MEMGETREGIONINFO", 0xc0104d08 },
@@ -2440,6 +2361,7 @@
 { "DRM_IOCTL_TEGRA_GEM_GET_TILING", 0xc010644b },
 { "DRM_IOCTL_VC4_GEM_MADVISE", 0xc010644b },
 { "DRM_IOCTL_RADEON_INDIRECT", 0xc010644d },
+{ "DRM_IOCTL_VC4_PERFMON_GET_VALUES", 0xc010644e },
 { "DRM_IOCTL_R128_INDIRECT", 0xc010644f },
 { "DRM_IOCTL_AMDGPU_GEM_OP", 0xc0106450 },
 { "DRM_IOCTL_RADEON_GETPARAM", 0xc0106451 },
@@ -2453,6 +2375,7 @@
 { "DRM_IOCTL_I915_GEM_WAIT", 0xc010646c },
 { "DRM_IOCTL_RADEON_GEM_OP", 0xc010646c },
 { "DRM_IOCTL_I915_REG_READ", 0xc0106471 },
+{ "DRM_IOCTL_I915_QUERY", 0xc0106479 },
 { "DRM_IOCTL_MODE_SETPROPERTY", 0xc01064ab },
 { "DRM_IOCTL_MODE_GETPROPBLOB", 0xc01064ac },
 { "DRM_IOCTL_MODE_MAP_DUMB", 0xc01064b3 },
@@ -2487,6 +2410,7 @@
 { "DRM_IOCTL_I915_SET_SPRITE_COLORKEY", 0xc014646b },
 { "DRM_IOCTL_MODE_GETENCODER", 0xc01464a6 },
 { "VTPM_PROXY_IOC_NEW_DEV", 0xc014a100 },
+{ "RDMA_VERBS_IOCTL", 0xc0181b01 },
 { "HFI1_IOCTL_TID_UPDATE", 0xc0181be4 },
 { "HFI1_IOCTL_TID_FREE", 0xc0181be5 },
 { "HFI1_IOCTL_TID_INVAL_READ", 0xc0181bed },
@@ -2500,6 +2424,8 @@
 { "ION_IOC_ALLOC", 0xc0184900 },
 { "ION_IOC_HEAP_QUERY", 0xc0184908 },
 { "AMDKFD_IOC_WAIT_EVENTS", 0xc0184b0c },
+{ "AMDKFD_IOC_MAP_MEMORY_TO_GPU", 0xc0184b18 },
+{ "AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU", 0xc0184b19 },
 { "MEMWRITEOOB64", 0xc0184d15 },
 { "MEMREADOOB64", 0xc0184d16 },
 { "USBDEVFS_CONTROL", 0xc0185500 },
@@ -2521,6 +2447,7 @@
 { "DRM_IOCTL_ETNAVIV_GEM_USERPTR", 0xc0186448 },
 { "DRM_IOCTL_I915_ALLOC", 0xc0186448 },
 { "DRM_IOCTL_VIRTGPU_GET_CAPS", 0xc0186449 },
+{ "DRM_IOCTL_VC4_PERFMON_CREATE", 0xc018644c },
 { "DRM_IOCTL_VIA_WAIT_IRQ", 0xc018644d },
 { "DRM_IOCTL_AMDGPU_GEM_USERPTR", 0xc0186451 },
 { "DRM_IOCTL_AMDGPU_WAIT_FENCES", 0xc0186452 },
@@ -2629,6 +2556,7 @@
 { "FW_CDEV_IOC_GET_INFO", 0xc0282300 },
 { "AMDKFD_IOC_GET_CLOCK_COUNTERS", 0xc0284b05 },
 { "AMDKFD_IOC_GET_TILE_CONFIG", 0xc0284b12 },
+{ "AMDKFD_IOC_ALLOC_MEMORY_OF_GPU", 0xc0284b16 },
 { "VIDIOC_G_EDID", 0xc0285628 },
 { "VIDIOC_SUBDEV_G_EDID", 0xc0285628 },
 { "VIDIOC_SUBDEV_S_EDID", 0xc0285629 },
@@ -2825,7 +2753,6 @@
 { "VIDIOC_SUBDEV_ENUM_DV_TIMINGS", 0xc0945662 },
 { "SNDRV_PCM_IOCTL_STATUS_EXT", 0xc0984124 },
 { "VBG_IOCTL_HGCM_CONNECT", 0xc09c5604 },
-{ "DRM_IOCTL_VC4_SUBMIT_CL", 0xc0a06440 },
 { "DRM_IOCTL_VC4_GET_HANG_STATE", 0xc0a06446 },
 { "HT_CXLFLASH_LUN_PROVISION", 0xc0a0cabf },
 { "SOUND_MIXER_GETLEVELS", 0xc0a44d74 },
@@ -2833,6 +2760,7 @@
 { "SNDRV_SEQ_IOCTL_CREATE_PORT", 0xc0a85320 },
 { "SNDRV_SEQ_IOCTL_GET_PORT_INFO", 0xc0a85322 },
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT", 0xc0a85352 },
+{ "DRM_IOCTL_VC4_SUBMIT_CL", 0xc0a86440 },
 { "SNDRV_SEQ_IOCTL_GET_CLIENT_INFO", 0xc0bc5310 },
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT", 0xc0bc5351 },
 { "FS_IOC_GETFSMAP", 0xc0c0583b },
diff --git a/ioctlent1.h b/ioctlent1.h
index a28605e..d9a065e 100644
--- a/ioctlent1.h
+++ b/ioctlent1.h
@@ -173,6 +173,7 @@
 { "VFIO_IOMMU_UNMAP_DMA", 0x00003b72 },
 { "VFIO_DEVICE_GET_GFX_DMABUF", 0x00003b73 },
 { "VFIO_IOMMU_ENABLE", 0x00003b73 },
+{ "VFIO_DEVICE_IOEVENTFD", 0x00003b74 },
 { "VFIO_IOMMU_DISABLE", 0x00003b74 },
 { "VFIO_IOMMU_SPAPR_REGISTER_MEMORY", 0x00003b75 },
 { "VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY", 0x00003b76 },
@@ -354,6 +355,7 @@
 { "RFKILL_IOCTL_NOINPUT", 0x00005201 },
 { "RNDZAPENTCNT", 0x00005204 },
 { "RNDCLEARPOOL", 0x00005206 },
+{ "RNDRESEEDCRNG", 0x00005207 },
 { "CDROMPAUSE", 0x00005301 },
 { "CDROMRESUME", 0x00005302 },
 { "CDROMPLAYMSF", 0x00005303 },
@@ -666,34 +668,6 @@
 { "PPRELEASE", 0x0000708c },
 { "PPYIELD", 0x0000708d },
 { "PPEXCL", 0x0000708f },
-{ "PHONE_CAPABILITIES", 0x00007180 },
-{ "PHONE_RING", 0x00007183 },
-{ "PHONE_HOOKSTATE", 0x00007184 },
-{ "OLD_PHONE_RING_START", 0x00007187 },
-{ "PHONE_RING_STOP", 0x00007188 },
-{ "PHONE_REC_START", 0x0000718a },
-{ "PHONE_REC_STOP", 0x0000718b },
-{ "PHONE_REC_LEVEL", 0x0000718f },
-{ "PHONE_PLAY_START", 0x00007191 },
-{ "PHONE_PLAY_STOP", 0x00007192 },
-{ "PHONE_PLAY_LEVEL", 0x00007195 },
-{ "PHONE_GET_TONE_ON_TIME", 0x0000719e },
-{ "PHONE_GET_TONE_OFF_TIME", 0x0000719f },
-{ "PHONE_GET_TONE_STATE", 0x000071a0 },
-{ "PHONE_BUSY", 0x000071a1 },
-{ "PHONE_RINGBACK", 0x000071a2 },
-{ "PHONE_DIALTONE", 0x000071a3 },
-{ "PHONE_CPT_STOP", 0x000071a4 },
-{ "PHONE_PSTN_GET_STATE", 0x000071a5 },
-{ "PHONE_PSTN_LINETEST", 0x000071a8 },
-{ "IXJCTL_DSP_RESET", 0x000071c0 },
-{ "IXJCTL_DSP_IDLE", 0x000071c5 },
-{ "IXJCTL_TESTRAM", 0x000071c6 },
-{ "IXJCTL_AEC_STOP", 0x000071cc },
-{ "IXJCTL_AEC_GET_LEVEL", 0x000071cd },
-{ "IXJCTL_PSTN_LINETEST", 0x000071d3 },
-{ "IXJCTL_PLAY_CID", 0x000071d7 },
-{ "IXJCTL_DRYBUFFER_CLEAR", 0x000071e7 },
 { "BR_OK", 0x00007201 },
 { "BR_DEAD_REPLY", 0x00007205 },
 { "BR_TRANSACTION_COMPLETE", 0x00007206 },
@@ -885,7 +859,10 @@
 { "VHOST_SET_OWNER", 0x0000af01 },
 { "VHOST_RESET_OWNER", 0x0000af02 },
 { "BT_BMC_IOCTL_SMS_ATN", 0x0000b100 },
+{ "IPMI_BMC_IOCTL_SET_SMS_ATN", 0x0000b100 },
+{ "IPMI_BMC_IOCTL_CLEAR_SMS_ATN", 0x0000b101 },
 { "PPPOEIOCDFWD", 0x0000b101 },
+{ "IPMI_BMC_IOCTL_FORCE_ABORT", 0x0000b102 },
 { "RPMSG_DESTROY_EPT_IOCTL", 0x0000b502 },
 { "NS_GET_USERNS", 0x0000b701 },
 { "NS_GET_PARENT", 0x0000b702 },
@@ -915,8 +892,6 @@
 { "PPWCONTROL", 0x40017084 },
 { "PPWDATA", 0x40017086 },
 { "PPWCTLONIRQ", 0x40017092 },
-{ "PHONE_MAXRINGS", 0x40017185 },
-{ "PHONE_PLAY_TONE", 0x4001719b },
 { "SONYPI_IOCSBRT", 0x40017600 },
 { "SONYPI_IOCSBLUE", 0x40017609 },
 { "SONYPI_IOCSFAN", 0x4001760b },
@@ -932,7 +907,6 @@
 { "DMX_ADD_PID", 0x40026f33 },
 { "DMX_REMOVE_PID", 0x40026f34 },
 { "PPFCONTROL", 0x4002708e },
-{ "PHONE_RING_CADENCE", 0x40027186 },
 { "SET_BITMAP_FILE", 0x4004092b },
 { "BLKBSZSET", 0x40041271 },
 { "IB_USER_MAD_UNREGISTER_AGENT", 0x40041b02 },
@@ -948,6 +922,7 @@
 { "PERF_EVENT_IOC_SET_FILTER", 0x40042406 },
 { "PERF_EVENT_IOC_SET_BPF", 0x40042408 },
 { "PERF_EVENT_IOC_PAUSE_OUTPUT", 0x40042409 },
+{ "PERF_EVENT_IOC_MODIFY_ATTRIBUTES", 0x4004240b },
 { "SNAPSHOT_CREATE_IMAGE", 0x40043311 },
 { "PTP_ENABLE_PPS", 0x40043d04 },
 { "FBIO_RADEON_SET_MIRROR", 0x40044004 },
@@ -1001,6 +976,7 @@
 { "HCISETSCOMTU", 0x400448e4 },
 { "HCIBLOCKADDR", 0x400448e6 },
 { "HCIUNBLOCKADDR", 0x400448e7 },
+{ "INOTIFY_IOC_SETNEXTWD", 0x40044900 },
 { "MFB_SET_PIXFMT", 0x40044d08 },
 { "OTPGETREGIONCOUNT", 0x40044d0e },
 { "UBI_IOCEBER", 0x40044f01 },
@@ -1145,46 +1121,6 @@
 { "PPS_SETPARAMS", 0x400470a2 },
 { "PPS_KC_BIND", 0x400470a5 },
 { "SPIOCSTYPE", 0x40047101 },
-{ "PHONE_CAPABILITIES_CHECK", 0x40047182 },
-{ "PHONE_RING_START", 0x40047187 },
-{ "PHONE_REC_CODEC", 0x40047189 },
-{ "PHONE_REC_DEPTH", 0x4004718c },
-{ "PHONE_FRAME", 0x4004718d },
-{ "PHONE_REC_VOLUME", 0x4004718e },
-{ "PHONE_PLAY_CODEC", 0x40047190 },
-{ "PHONE_PLAY_DEPTH", 0x40047193 },
-{ "PHONE_PLAY_VOLUME", 0x40047194 },
-{ "PHONE_DTMF_OOB", 0x40047199 },
-{ "PHONE_SET_TONE_ON_TIME", 0x4004719c },
-{ "PHONE_SET_TONE_OFF_TIME", 0x4004719d },
-{ "PHONE_PSTN_SET_STATE", 0x400471a4 },
-{ "PHONE_WINK_DURATION", 0x400471a6 },
-{ "PHONE_VAD", 0x400471a9 },
-{ "PHONE_WINK", 0x400471aa },
-{ "IXJCTL_SET_FILTER", 0x400471c7 },
-{ "IXJCTL_GET_FILTER_HIST", 0x400471c8 },
-{ "IXJCTL_INIT_TONE", 0x400471c9 },
-{ "IXJCTL_TONE_CADENCE", 0x400471ca },
-{ "IXJCTL_AEC_START", 0x400471cb },
-{ "IXJCTL_SET_LED", 0x400471ce },
-{ "IXJCTL_MIXER", 0x400471cf },
-{ "IXJCTL_DAA_COEFF_SET", 0x400471d0 },
-{ "IXJCTL_PORT", 0x400471d1 },
-{ "IXJCTL_DAA_AGAIN", 0x400471d2 },
-{ "IXJCTL_POTS_PSTN", 0x400471d5 },
-{ "IXJCTL_FILTER_CADENCE", 0x400471d6 },
-{ "IXJCTL_CIDCW", 0x400471d9 },
-{ "PHONE_REC_VOLUME_LINEAR", 0x400471db },
-{ "PHONE_PLAY_VOLUME_LINEAR", 0x400471dc },
-{ "IXJCTL_SET_FILTER_RAW", 0x400471dd },
-{ "IXJCTL_HZ", 0x400471e0 },
-{ "IXJCTL_RATE", 0x400471e1 },
-{ "IXJCTL_DTMF_PRESCALE", 0x400471e8 },
-{ "IXJCTL_SIGCTL", 0x400471e9 },
-{ "IXJCTL_SC_RXG", 0x400471ea },
-{ "IXJCTL_SC_TXG", 0x400471eb },
-{ "IXJCTL_INTERCOM_START", 0x400471fd },
-{ "IXJCTL_INTERCOM_STOP", 0x400471fe },
 { "FAT_IOCTL_SET_ATTRIBUTES", 0x40047211 },
 { "SCIF_LISTEN", 0x40047302 },
 { "PPPIOCATTCHAN", 0x40047438 },
@@ -1247,6 +1183,8 @@
 { "AMDKFD_IOC_RESET_EVENT", 0x40084b0b },
 { "AMDKFD_IOC_DBG_REGISTER", 0x40084b0d },
 { "AMDKFD_IOC_DBG_UNREGISTER", 0x40084b0e },
+{ "AMDKFD_IOC_ACQUIRE_VM", 0x40084b15 },
+{ "AMDKFD_IOC_FREE_MEMORY_OF_GPU", 0x40084b17 },
 { "MEMERASE", 0x40084d02 },
 { "MFB_SET_AOID", 0x40084d04 },
 { "MEMLOCK", 0x40084d05 },
@@ -1928,23 +1866,6 @@
 { "PPGETFLAGS", 0x8004709a },
 { "PPS_GETPARAMS", 0x800470a1 },
 { "PPS_GETCAP", 0x800470a3 },
-{ "PHONE_CAPABILITIES_LIST", 0x80047181 },
-{ "PHONE_DTMF_READY", 0x80047196 },
-{ "PHONE_GET_DTMF", 0x80047197 },
-{ "PHONE_GET_DTMF_ASCII", 0x80047198 },
-{ "PHONE_EXCEPTION", 0x8004719a },
-{ "IXJCTL_CARDTYPE", 0x800471c1 },
-{ "IXJCTL_SERIAL", 0x800471c2 },
-{ "IXJCTL_DSP_TYPE", 0x800471c3 },
-{ "IXJCTL_DSP_VERSION", 0x800471c4 },
-{ "IXJCTL_CID", 0x800471d4 },
-{ "IXJCTL_VMWI", 0x800471d8 },
-{ "IXJCTL_VERSION", 0x800471da },
-{ "IXJCTL_FRAMES_READ", 0x800471e2 },
-{ "IXJCTL_FRAMES_WRITTEN", 0x800471e3 },
-{ "IXJCTL_READ_WAIT", 0x800471e4 },
-{ "IXJCTL_WRITE_WAIT", 0x800471e5 },
-{ "IXJCTL_DRYBUFFER_READ", 0x800471e6 },
 { "BR_ERROR", 0x80047200 },
 { "BR_ACQUIRE_RESULT", 0x80047204 },
 { "FAT_IOCTL_GET_ATTRIBUTES", 0x80047210 },
@@ -2264,6 +2185,7 @@
 { "DRM_IOCTL_RM_DRAW", 0xc0046428 },
 { "DRM_IOCTL_I915_IRQ_EMIT", 0xc0046444 },
 { "DRM_IOCTL_MGA_WAIT_FENCE", 0xc004644b },
+{ "DRM_IOCTL_VC4_PERFMON_DESTROY", 0xc004644d },
 { "DRM_IOCTL_RADEON_IRQ_EMIT", 0xc0046456 },
 { "DRM_IOCTL_MODE_RMFB", 0xc00464af },
 { "DRM_IOCTL_MODE_DESTROY_DUMB", 0xc00464b4 },
@@ -2280,7 +2202,6 @@
 { "PHN_GET_REG", 0xc0047000 },
 { "PHN_GET_REGS", 0xc0047002 },
 { "PPS_FETCH", 0xc00470a4 },
-{ "PHONE_QUERY_CODEC", 0xc00471a7 },
 { "MIC_VIRTIO_ADD_DEVICE", 0xc0047301 },
 { "MIC_VIRTIO_COPY_DESC", 0xc0047302 },
 { "MIC_VIRTIO_CONFIG_CHANGE", 0xc0047305 },
@@ -2384,7 +2305,6 @@
 { "FSL_HV_IOCTL_PARTITION_GET_STATUS", 0xc00caf02 },
 { "MBXFB_IOCX_REG", 0xc00cf405 },
 { "BLKREPORTZONE", 0xc0101282 },
-{ "RDMA_VERBS_IOCTL", 0xc0101b01 },
 { "STP_POLICY_ID_SET", 0xc0102500 },
 { "CAPI_GET_VERSION", 0xc0104307 },
 { "GIGASET_VERSION", 0xc0104703 },
@@ -2393,6 +2313,7 @@
 { "SNDRV_EMUX_IOCTL_LOAD_PATCH", 0xc0104881 },
 { "SNDRV_EMUX_IOCTL_MISC_MODE", 0xc0104884 },
 { "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", 0xc0104b11 },
+{ "AMDKFD_IOC_GET_PROCESS_APERTURES_NEW", 0xc0104b14 },
 { "MEMGETREGIONINFO", 0xc0104d08 },
 { "SEV_ISSUE_CMD", 0xc0105300 },
 { "SNDRV_SEQ_IOCTL_RUNNING_MODE", 0xc0105303 },
@@ -2450,6 +2371,7 @@
 { "DRM_IOCTL_VC4_GEM_MADVISE", 0xc010644b },
 { "DRM_IOCTL_RADEON_INDIRECT", 0xc010644d },
 { "DRM_IOCTL_VIA_WAIT_IRQ", 0xc010644d },
+{ "DRM_IOCTL_VC4_PERFMON_GET_VALUES", 0xc010644e },
 { "DRM_IOCTL_R128_INDIRECT", 0xc010644f },
 { "DRM_IOCTL_AMDGPU_GEM_OP", 0xc0106450 },
 { "DRM_IOCTL_RADEON_ALLOC", 0xc0106453 },
@@ -2462,6 +2384,7 @@
 { "DRM_IOCTL_I915_GEM_WAIT", 0xc010646c },
 { "DRM_IOCTL_RADEON_GEM_OP", 0xc010646c },
 { "DRM_IOCTL_I915_REG_READ", 0xc0106471 },
+{ "DRM_IOCTL_I915_QUERY", 0xc0106479 },
 { "DRM_IOCTL_MODE_SETPROPERTY", 0xc01064ab },
 { "DRM_IOCTL_MODE_GETPROPBLOB", 0xc01064ac },
 { "DRM_IOCTL_MODE_MAP_DUMB", 0xc01064b3 },
@@ -2496,6 +2419,7 @@
 { "DRM_IOCTL_I915_SET_SPRITE_COLORKEY", 0xc014646b },
 { "DRM_IOCTL_MODE_GETENCODER", 0xc01464a6 },
 { "VTPM_PROXY_IOC_NEW_DEV", 0xc014a100 },
+{ "RDMA_VERBS_IOCTL", 0xc0181b01 },
 { "HFI1_IOCTL_TID_UPDATE", 0xc0181be4 },
 { "HFI1_IOCTL_TID_FREE", 0xc0181be5 },
 { "HFI1_IOCTL_TID_INVAL_READ", 0xc0181bed },
@@ -2509,6 +2433,8 @@
 { "ION_IOC_ALLOC", 0xc0184900 },
 { "ION_IOC_HEAP_QUERY", 0xc0184908 },
 { "AMDKFD_IOC_WAIT_EVENTS", 0xc0184b0c },
+{ "AMDKFD_IOC_MAP_MEMORY_TO_GPU", 0xc0184b18 },
+{ "AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU", 0xc0184b19 },
 { "MEMWRITEOOB64", 0xc0184d15 },
 { "MEMREADOOB64", 0xc0184d16 },
 { "VBG_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS", 0xc018560b },
@@ -2532,6 +2458,7 @@
 { "DRM_IOCTL_QXL_ALLOC_SURF", 0xc0186446 },
 { "DRM_IOCTL_ETNAVIV_GEM_USERPTR", 0xc0186448 },
 { "DRM_IOCTL_VIRTGPU_GET_CAPS", 0xc0186449 },
+{ "DRM_IOCTL_VC4_PERFMON_CREATE", 0xc018644c },
 { "DRM_IOCTL_RADEON_TEXTURE", 0xc018644e },
 { "DRM_IOCTL_AMDGPU_GEM_USERPTR", 0xc0186451 },
 { "DRM_IOCTL_AMDGPU_WAIT_FENCES", 0xc0186452 },
@@ -2644,6 +2571,7 @@
 { "FW_CDEV_IOC_GET_INFO", 0xc0282300 },
 { "AMDKFD_IOC_GET_CLOCK_COUNTERS", 0xc0284b05 },
 { "AMDKFD_IOC_GET_TILE_CONFIG", 0xc0284b12 },
+{ "AMDKFD_IOC_ALLOC_MEMORY_OF_GPU", 0xc0284b16 },
 { "VIDIOC_ENCODER_CMD", 0xc028564d },
 { "VIDIOC_TRY_ENCODER_CMD", 0xc028564e },
 { "SWITCHTEC_IOCTL_EVENT_CTL", 0xc0285743 },
@@ -2817,7 +2745,6 @@
 { "VIDIOC_ENUM_DV_TIMINGS", 0xc0945662 },
 { "VIDIOC_SUBDEV_ENUM_DV_TIMINGS", 0xc0945662 },
 { "VBG_IOCTL_HGCM_CONNECT", 0xc09c5604 },
-{ "DRM_IOCTL_VC4_SUBMIT_CL", 0xc0a06440 },
 { "DRM_IOCTL_VC4_GET_HANG_STATE", 0xc0a06446 },
 { "HT_CXLFLASH_LUN_PROVISION", 0xc0a0cabf },
 { "SOUND_MIXER_GETLEVELS", 0xc0a44d74 },
@@ -2825,6 +2752,7 @@
 { "SNDRV_SEQ_IOCTL_CREATE_PORT", 0xc0a45320 },
 { "SNDRV_SEQ_IOCTL_GET_PORT_INFO", 0xc0a45322 },
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT", 0xc0a45352 },
+{ "DRM_IOCTL_VC4_SUBMIT_CL", 0xc0a86440 },
 { "SNDRV_SEQ_IOCTL_GET_CLIENT_INFO", 0xc0bc5310 },
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT", 0xc0bc5351 },
 { "FS_IOC_GETFSMAP", 0xc0c0583b },
diff --git a/ioctlent2.h b/ioctlent2.h
index 47d06a9..ccd20af 100644
--- a/ioctlent2.h
+++ b/ioctlent2.h
@@ -173,6 +173,7 @@
 { "VFIO_IOMMU_UNMAP_DMA", 0x00003b72 },
 { "VFIO_DEVICE_GET_GFX_DMABUF", 0x00003b73 },
 { "VFIO_IOMMU_ENABLE", 0x00003b73 },
+{ "VFIO_DEVICE_IOEVENTFD", 0x00003b74 },
 { "VFIO_IOMMU_DISABLE", 0x00003b74 },
 { "VFIO_IOMMU_SPAPR_REGISTER_MEMORY", 0x00003b75 },
 { "VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY", 0x00003b76 },
@@ -354,6 +355,7 @@
 { "RFKILL_IOCTL_NOINPUT", 0x00005201 },
 { "RNDZAPENTCNT", 0x00005204 },
 { "RNDCLEARPOOL", 0x00005206 },
+{ "RNDRESEEDCRNG", 0x00005207 },
 { "CDROMPAUSE", 0x00005301 },
 { "CDROMRESUME", 0x00005302 },
 { "CDROMPLAYMSF", 0x00005303 },
@@ -666,34 +668,6 @@
 { "PPRELEASE", 0x0000708c },
 { "PPYIELD", 0x0000708d },
 { "PPEXCL", 0x0000708f },
-{ "PHONE_CAPABILITIES", 0x00007180 },
-{ "PHONE_RING", 0x00007183 },
-{ "PHONE_HOOKSTATE", 0x00007184 },
-{ "OLD_PHONE_RING_START", 0x00007187 },
-{ "PHONE_RING_STOP", 0x00007188 },
-{ "PHONE_REC_START", 0x0000718a },
-{ "PHONE_REC_STOP", 0x0000718b },
-{ "PHONE_REC_LEVEL", 0x0000718f },
-{ "PHONE_PLAY_START", 0x00007191 },
-{ "PHONE_PLAY_STOP", 0x00007192 },
-{ "PHONE_PLAY_LEVEL", 0x00007195 },
-{ "PHONE_GET_TONE_ON_TIME", 0x0000719e },
-{ "PHONE_GET_TONE_OFF_TIME", 0x0000719f },
-{ "PHONE_GET_TONE_STATE", 0x000071a0 },
-{ "PHONE_BUSY", 0x000071a1 },
-{ "PHONE_RINGBACK", 0x000071a2 },
-{ "PHONE_DIALTONE", 0x000071a3 },
-{ "PHONE_CPT_STOP", 0x000071a4 },
-{ "PHONE_PSTN_GET_STATE", 0x000071a5 },
-{ "PHONE_PSTN_LINETEST", 0x000071a8 },
-{ "IXJCTL_DSP_RESET", 0x000071c0 },
-{ "IXJCTL_DSP_IDLE", 0x000071c5 },
-{ "IXJCTL_TESTRAM", 0x000071c6 },
-{ "IXJCTL_AEC_STOP", 0x000071cc },
-{ "IXJCTL_AEC_GET_LEVEL", 0x000071cd },
-{ "IXJCTL_PSTN_LINETEST", 0x000071d3 },
-{ "IXJCTL_PLAY_CID", 0x000071d7 },
-{ "IXJCTL_DRYBUFFER_CLEAR", 0x000071e7 },
 { "BR_OK", 0x00007201 },
 { "BR_DEAD_REPLY", 0x00007205 },
 { "BR_TRANSACTION_COMPLETE", 0x00007206 },
@@ -885,7 +859,10 @@
 { "VHOST_SET_OWNER", 0x0000af01 },
 { "VHOST_RESET_OWNER", 0x0000af02 },
 { "BT_BMC_IOCTL_SMS_ATN", 0x0000b100 },
+{ "IPMI_BMC_IOCTL_SET_SMS_ATN", 0x0000b100 },
+{ "IPMI_BMC_IOCTL_CLEAR_SMS_ATN", 0x0000b101 },
 { "PPPOEIOCDFWD", 0x0000b101 },
+{ "IPMI_BMC_IOCTL_FORCE_ABORT", 0x0000b102 },
 { "RPMSG_DESTROY_EPT_IOCTL", 0x0000b502 },
 { "NS_GET_USERNS", 0x0000b701 },
 { "NS_GET_PARENT", 0x0000b702 },
@@ -913,8 +890,6 @@
 { "PPWCONTROL", 0x40017084 },
 { "PPWDATA", 0x40017086 },
 { "PPWCTLONIRQ", 0x40017092 },
-{ "PHONE_MAXRINGS", 0x40017185 },
-{ "PHONE_PLAY_TONE", 0x4001719b },
 { "SONYPI_IOCSBRT", 0x40017600 },
 { "SONYPI_IOCSBLUE", 0x40017609 },
 { "SONYPI_IOCSFAN", 0x4001760b },
@@ -930,7 +905,6 @@
 { "DMX_ADD_PID", 0x40026f33 },
 { "DMX_REMOVE_PID", 0x40026f34 },
 { "PPFCONTROL", 0x4002708e },
-{ "PHONE_RING_CADENCE", 0x40027186 },
 { "SET_BITMAP_FILE", 0x4004092b },
 { "BLKBSZSET", 0x40041271 },
 { "IB_USER_MAD_UNREGISTER_AGENT", 0x40041b02 },
@@ -946,6 +920,7 @@
 { "PERF_EVENT_IOC_SET_FILTER", 0x40042406 },
 { "PERF_EVENT_IOC_SET_BPF", 0x40042408 },
 { "PERF_EVENT_IOC_PAUSE_OUTPUT", 0x40042409 },
+{ "PERF_EVENT_IOC_MODIFY_ATTRIBUTES", 0x4004240b },
 { "SNAPSHOT_CREATE_IMAGE", 0x40043311 },
 { "PTP_ENABLE_PPS", 0x40043d04 },
 { "FBIO_RADEON_SET_MIRROR", 0x40044004 },
@@ -999,6 +974,7 @@
 { "HCISETSCOMTU", 0x400448e4 },
 { "HCIBLOCKADDR", 0x400448e6 },
 { "HCIUNBLOCKADDR", 0x400448e7 },
+{ "INOTIFY_IOC_SETNEXTWD", 0x40044900 },
 { "MFB_SET_PIXFMT", 0x40044d08 },
 { "OTPGETREGIONCOUNT", 0x40044d0e },
 { "UBI_IOCEBER", 0x40044f01 },
@@ -1143,46 +1119,6 @@
 { "PPS_SETPARAMS", 0x400470a2 },
 { "PPS_KC_BIND", 0x400470a5 },
 { "SPIOCSTYPE", 0x40047101 },
-{ "PHONE_CAPABILITIES_CHECK", 0x40047182 },
-{ "PHONE_RING_START", 0x40047187 },
-{ "PHONE_REC_CODEC", 0x40047189 },
-{ "PHONE_REC_DEPTH", 0x4004718c },
-{ "PHONE_FRAME", 0x4004718d },
-{ "PHONE_REC_VOLUME", 0x4004718e },
-{ "PHONE_PLAY_CODEC", 0x40047190 },
-{ "PHONE_PLAY_DEPTH", 0x40047193 },
-{ "PHONE_PLAY_VOLUME", 0x40047194 },
-{ "PHONE_DTMF_OOB", 0x40047199 },
-{ "PHONE_SET_TONE_ON_TIME", 0x4004719c },
-{ "PHONE_SET_TONE_OFF_TIME", 0x4004719d },
-{ "PHONE_PSTN_SET_STATE", 0x400471a4 },
-{ "PHONE_WINK_DURATION", 0x400471a6 },
-{ "PHONE_VAD", 0x400471a9 },
-{ "PHONE_WINK", 0x400471aa },
-{ "IXJCTL_SET_FILTER", 0x400471c7 },
-{ "IXJCTL_GET_FILTER_HIST", 0x400471c8 },
-{ "IXJCTL_INIT_TONE", 0x400471c9 },
-{ "IXJCTL_TONE_CADENCE", 0x400471ca },
-{ "IXJCTL_AEC_START", 0x400471cb },
-{ "IXJCTL_SET_LED", 0x400471ce },
-{ "IXJCTL_MIXER", 0x400471cf },
-{ "IXJCTL_DAA_COEFF_SET", 0x400471d0 },
-{ "IXJCTL_PORT", 0x400471d1 },
-{ "IXJCTL_DAA_AGAIN", 0x400471d2 },
-{ "IXJCTL_POTS_PSTN", 0x400471d5 },
-{ "IXJCTL_FILTER_CADENCE", 0x400471d6 },
-{ "IXJCTL_CIDCW", 0x400471d9 },
-{ "PHONE_REC_VOLUME_LINEAR", 0x400471db },
-{ "PHONE_PLAY_VOLUME_LINEAR", 0x400471dc },
-{ "IXJCTL_SET_FILTER_RAW", 0x400471dd },
-{ "IXJCTL_HZ", 0x400471e0 },
-{ "IXJCTL_RATE", 0x400471e1 },
-{ "IXJCTL_DTMF_PRESCALE", 0x400471e8 },
-{ "IXJCTL_SIGCTL", 0x400471e9 },
-{ "IXJCTL_SC_RXG", 0x400471ea },
-{ "IXJCTL_SC_TXG", 0x400471eb },
-{ "IXJCTL_INTERCOM_START", 0x400471fd },
-{ "IXJCTL_INTERCOM_STOP", 0x400471fe },
 { "FAT_IOCTL_SET_ATTRIBUTES", 0x40047211 },
 { "SCIF_LISTEN", 0x40047302 },
 { "PPPIOCATTCHAN", 0x40047438 },
@@ -1245,6 +1181,8 @@
 { "AMDKFD_IOC_RESET_EVENT", 0x40084b0b },
 { "AMDKFD_IOC_DBG_REGISTER", 0x40084b0d },
 { "AMDKFD_IOC_DBG_UNREGISTER", 0x40084b0e },
+{ "AMDKFD_IOC_ACQUIRE_VM", 0x40084b15 },
+{ "AMDKFD_IOC_FREE_MEMORY_OF_GPU", 0x40084b17 },
 { "MEMERASE", 0x40084d02 },
 { "MFB_SET_AOID", 0x40084d04 },
 { "MEMLOCK", 0x40084d05 },
@@ -1532,6 +1470,7 @@
 { "IOC_PR_PREEMPT_ABORT", 0x401870cc },
 { "BTRFS_IOC_QGROUP_ASSIGN", 0x40189429 },
 { "KVM_SET_MEMORY_REGION", 0x4018ae40 },
+{ "KVM_HYPERV_EVENTFD", 0x4018aebd },
 { "KVM_SET_DEVICE_ATTR", 0x4018aee1 },
 { "KVM_GET_DEVICE_ATTR", 0x4018aee2 },
 { "KVM_HAS_DEVICE_ATTR", 0x4018aee3 },
@@ -1948,23 +1887,6 @@
 { "PPGETFLAGS", 0x8004709a },
 { "PPS_GETPARAMS", 0x800470a1 },
 { "PPS_GETCAP", 0x800470a3 },
-{ "PHONE_CAPABILITIES_LIST", 0x80047181 },
-{ "PHONE_DTMF_READY", 0x80047196 },
-{ "PHONE_GET_DTMF", 0x80047197 },
-{ "PHONE_GET_DTMF_ASCII", 0x80047198 },
-{ "PHONE_EXCEPTION", 0x8004719a },
-{ "IXJCTL_CARDTYPE", 0x800471c1 },
-{ "IXJCTL_SERIAL", 0x800471c2 },
-{ "IXJCTL_DSP_TYPE", 0x800471c3 },
-{ "IXJCTL_DSP_VERSION", 0x800471c4 },
-{ "IXJCTL_CID", 0x800471d4 },
-{ "IXJCTL_VMWI", 0x800471d8 },
-{ "IXJCTL_VERSION", 0x800471da },
-{ "IXJCTL_FRAMES_READ", 0x800471e2 },
-{ "IXJCTL_FRAMES_WRITTEN", 0x800471e3 },
-{ "IXJCTL_READ_WAIT", 0x800471e4 },
-{ "IXJCTL_WRITE_WAIT", 0x800471e5 },
-{ "IXJCTL_DRYBUFFER_READ", 0x800471e6 },
 { "BR_ERROR", 0x80047200 },
 { "BR_ACQUIRE_RESULT", 0x80047204 },
 { "FAT_IOCTL_GET_ATTRIBUTES", 0x80047210 },
@@ -2293,6 +2215,7 @@
 { "DRM_IOCTL_RM_DRAW", 0xc0046428 },
 { "DRM_IOCTL_I915_IRQ_EMIT", 0xc0046444 },
 { "DRM_IOCTL_MGA_WAIT_FENCE", 0xc004644b },
+{ "DRM_IOCTL_VC4_PERFMON_DESTROY", 0xc004644d },
 { "DRM_IOCTL_RADEON_IRQ_EMIT", 0xc0046456 },
 { "DRM_IOCTL_MODE_RMFB", 0xc00464af },
 { "DRM_IOCTL_MODE_DESTROY_DUMB", 0xc00464b4 },
@@ -2309,7 +2232,6 @@
 { "PHN_GET_REG", 0xc0047000 },
 { "PHN_GET_REGS", 0xc0047002 },
 { "PPS_FETCH", 0xc00470a4 },
-{ "PHONE_QUERY_CODEC", 0xc00471a7 },
 { "MIC_VIRTIO_ADD_DEVICE", 0xc0047301 },
 { "MIC_VIRTIO_COPY_DESC", 0xc0047302 },
 { "MIC_VIRTIO_CONFIG_CHANGE", 0xc0047305 },
@@ -2419,7 +2341,6 @@
 { "FSL_HV_IOCTL_PARTITION_GET_STATUS", 0xc00caf02 },
 { "MBXFB_IOCX_REG", 0xc00cf405 },
 { "BLKREPORTZONE", 0xc0101282 },
-{ "RDMA_VERBS_IOCTL", 0xc0101b01 },
 { "STP_POLICY_ID_SET", 0xc0102500 },
 { "CAPI_GET_VERSION", 0xc0104307 },
 { "GIGASET_VERSION", 0xc0104703 },
@@ -2428,6 +2349,7 @@
 { "SNDRV_EMUX_IOCTL_LOAD_PATCH", 0xc0104881 },
 { "SNDRV_EMUX_IOCTL_MISC_MODE", 0xc0104884 },
 { "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", 0xc0104b11 },
+{ "AMDKFD_IOC_GET_PROCESS_APERTURES_NEW", 0xc0104b14 },
 { "MEMGETREGIONINFO", 0xc0104d08 },
 { "SEV_ISSUE_CMD", 0xc0105300 },
 { "SNDRV_SEQ_IOCTL_RUNNING_MODE", 0xc0105303 },
@@ -2485,6 +2407,7 @@
 { "DRM_IOCTL_VC4_GEM_MADVISE", 0xc010644b },
 { "DRM_IOCTL_RADEON_INDIRECT", 0xc010644d },
 { "DRM_IOCTL_VIA_WAIT_IRQ", 0xc010644d },
+{ "DRM_IOCTL_VC4_PERFMON_GET_VALUES", 0xc010644e },
 { "DRM_IOCTL_R128_INDIRECT", 0xc010644f },
 { "DRM_IOCTL_AMDGPU_GEM_OP", 0xc0106450 },
 { "DRM_IOCTL_RADEON_ALLOC", 0xc0106453 },
@@ -2497,6 +2420,7 @@
 { "DRM_IOCTL_I915_GEM_WAIT", 0xc010646c },
 { "DRM_IOCTL_RADEON_GEM_OP", 0xc010646c },
 { "DRM_IOCTL_I915_REG_READ", 0xc0106471 },
+{ "DRM_IOCTL_I915_QUERY", 0xc0106479 },
 { "DRM_IOCTL_MODE_SETPROPERTY", 0xc01064ab },
 { "DRM_IOCTL_MODE_GETPROPBLOB", 0xc01064ac },
 { "DRM_IOCTL_MODE_MAP_DUMB", 0xc01064b3 },
@@ -2531,6 +2455,7 @@
 { "DRM_IOCTL_I915_SET_SPRITE_COLORKEY", 0xc014646b },
 { "DRM_IOCTL_MODE_GETENCODER", 0xc01464a6 },
 { "VTPM_PROXY_IOC_NEW_DEV", 0xc014a100 },
+{ "RDMA_VERBS_IOCTL", 0xc0181b01 },
 { "HFI1_IOCTL_TID_UPDATE", 0xc0181be4 },
 { "HFI1_IOCTL_TID_FREE", 0xc0181be5 },
 { "HFI1_IOCTL_TID_INVAL_READ", 0xc0181bed },
@@ -2544,6 +2469,8 @@
 { "ION_IOC_ALLOC", 0xc0184900 },
 { "ION_IOC_HEAP_QUERY", 0xc0184908 },
 { "AMDKFD_IOC_WAIT_EVENTS", 0xc0184b0c },
+{ "AMDKFD_IOC_MAP_MEMORY_TO_GPU", 0xc0184b18 },
+{ "AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU", 0xc0184b19 },
 { "MTRRIOC_GET_ENTRY", 0xc0184d03 },
 { "MTRRIOC_GET_PAGE_ENTRY", 0xc0184d08 },
 { "MEMWRITEOOB64", 0xc0184d15 },
@@ -2568,6 +2495,7 @@
 { "DRM_IOCTL_QXL_ALLOC_SURF", 0xc0186446 },
 { "DRM_IOCTL_ETNAVIV_GEM_USERPTR", 0xc0186448 },
 { "DRM_IOCTL_VIRTGPU_GET_CAPS", 0xc0186449 },
+{ "DRM_IOCTL_VC4_PERFMON_CREATE", 0xc018644c },
 { "DRM_IOCTL_RADEON_TEXTURE", 0xc018644e },
 { "DRM_IOCTL_AMDGPU_GEM_USERPTR", 0xc0186451 },
 { "DRM_IOCTL_AMDGPU_WAIT_FENCES", 0xc0186452 },
@@ -2682,6 +2610,7 @@
 { "FW_CDEV_IOC_GET_INFO", 0xc0282300 },
 { "AMDKFD_IOC_GET_CLOCK_COUNTERS", 0xc0284b05 },
 { "AMDKFD_IOC_GET_TILE_CONFIG", 0xc0284b12 },
+{ "AMDKFD_IOC_ALLOC_MEMORY_OF_GPU", 0xc0284b16 },
 { "VIDIOC_ENCODER_CMD", 0xc028564d },
 { "VIDIOC_TRY_ENCODER_CMD", 0xc028564e },
 { "SWITCHTEC_IOCTL_EVENT_CTL", 0xc0285743 },
@@ -2857,7 +2786,6 @@
 { "VIDIOC_ENUM_DV_TIMINGS", 0xc0945662 },
 { "VIDIOC_SUBDEV_ENUM_DV_TIMINGS", 0xc0945662 },
 { "VBG_IOCTL_HGCM_CONNECT", 0xc09c5604 },
-{ "DRM_IOCTL_VC4_SUBMIT_CL", 0xc0a06440 },
 { "DRM_IOCTL_VC4_GET_HANG_STATE", 0xc0a06446 },
 { "HT_CXLFLASH_LUN_PROVISION", 0xc0a0cabf },
 { "SOUND_MIXER_GETLEVELS", 0xc0a44d74 },
@@ -2865,6 +2793,7 @@
 { "SNDRV_SEQ_IOCTL_CREATE_PORT", 0xc0a45320 },
 { "SNDRV_SEQ_IOCTL_GET_PORT_INFO", 0xc0a45322 },
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT", 0xc0a45352 },
+{ "DRM_IOCTL_VC4_SUBMIT_CL", 0xc0a86440 },
 { "SNDRV_SEQ_IOCTL_GET_CLIENT_INFO", 0xc0bc5310 },
 { "SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT", 0xc0bc5351 },
 { "FS_IOC_GETFSMAP", 0xc0c0583b },
diff --git a/ioprio.c b/ioprio.c
index 9ef2a32..19ea74c 100644
--- a/ioprio.c
+++ b/ioprio.c
@@ -56,17 +56,14 @@
 sprint_ioprio(unsigned int ioprio)
 {
 	static char outstr[256];
-	const char *str;
+	char class_buf[64];
 	unsigned int class, data;
 
 	class = IOPRIO_PRIO_CLASS(ioprio);
 	data = IOPRIO_PRIO_DATA(ioprio);
-	str = xlookup(ioprio_class, class);
-	if (str)
-		xsprintf(outstr, "IOPRIO_PRIO_VALUE(%s, %d)", str, data);
-	else
-		xsprintf(outstr, "IOPRIO_PRIO_VALUE(%#x /* %s */, %d)",
-			 class, "IOPRIO_CLASS_???", data);
+	sprintxval(class_buf, sizeof(class_buf), ioprio_class, class,
+		   "IOPRIO_CLASS_???");
+	xsprintf(outstr, "IOPRIO_PRIO_VALUE(%s, %d)", class_buf, data);
 
 	return outstr;
 }
diff --git a/ipc.c b/ipc.c
index bd23a4e..dd5358e 100644
--- a/ipc.c
+++ b/ipc.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 1999-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,15 +34,11 @@
 	unsigned int call = tcp->u_arg[0];
 	unsigned int version = call >> 16;
 	call &= 0xffff;
-	const char *str = xlookup(ipccalls, call);
 
 	if (version)
 		tprintf("%u<<16|", version);
 
-	if (str)
-		tprints(str);
-	else
-		tprintf("%u", call);
+	printxval_u(ipccalls, call, NULL);
 
 	unsigned int i;
 	for (i = 1; i < tcp->s_ent->nargs; ++i)
diff --git a/ipc_defs.h b/ipc_defs.h
index 740fd9d..c6a1678 100644
--- a/ipc_defs.h
+++ b/ipc_defs.h
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2003 Roland McGrath <roland@redhat.com>
- * Copyright (c) 2003-2017 The strace developers.
+ * Copyright (c) 2003-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -43,8 +43,10 @@
 
 #define PRINTCTL(flagset, arg, dflt)				\
 	do {							\
-		if ((arg) & IPC_64)				\
-			tprints("IPC_64|");			\
+		if ((arg) & IPC_64) {				\
+			print_xlat(IPC_64);			\
+			tprints("|");				\
+		}						\
 		printxval((flagset), (arg) & ~IPC_64, dflt);	\
 	} while (0)
 
diff --git a/ipc_msg.c b/ipc_msg.c
index dc898a8..788066c 100644
--- a/ipc_msg.c
+++ b/ipc_msg.c
@@ -5,7 +5,7 @@
  * 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.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -41,15 +41,12 @@
 #endif
 
 #include "xlat/ipc_msg_flags.h"
+#include "xlat/ipc_private.h"
 #include "xlat/resource_flags.h"
 
 SYS_FUNC(msgget)
 {
-	const int key = (int) tcp->u_arg[0];
-	if (key)
-		tprintf("%#x", key);
-	else
-		tprints("IPC_PRIVATE");
+	printxval(ipc_private, (unsigned int) tcp->u_arg[0], NULL);
 	tprints(", ");
 	if (printflags(resource_flags, tcp->u_arg[1] & ~0777, NULL) != 0)
 		tprints("|");
@@ -99,7 +96,7 @@
 		if (umove_or_printaddr(tcp, addr, &tmp))
 			return -1;
 		pair[0] = tmp[0];
-		pair[1] = tmp[1];
+		pair[1] = (int) tmp[1];
 	}
 	return 0;
 }
diff --git a/ipc_sem.c b/ipc_sem.c
index d5f4190..0287bec 100644
--- a/ipc_sem.c
+++ b/ipc_sem.c
@@ -5,7 +5,7 @@
  * 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.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -64,7 +64,7 @@
 #if defined HAVE_SYS_SEM_H || defined HAVE_LINUX_SEM_H
 	struct sembuf sb;
 	print_array(tcp, addr, count, &sb, sizeof(sb),
-		    umoven_or_printaddr, print_sembuf, 0);
+		    tfetch_mem, print_sembuf, 0);
 #else
 	printaddr(addr);
 #endif
@@ -103,11 +103,7 @@
 
 SYS_FUNC(semget)
 {
-	const int key = (int) tcp->u_arg[0];
-	if (key)
-		tprintf("%#x", key);
-	else
-		tprints("IPC_PRIVATE");
+	printxval(ipc_private, (unsigned int) tcp->u_arg[0], NULL);
 	tprintf(", %d, ", (int) tcp->u_arg[1]);
 	if (printflags(resource_flags, tcp->u_arg[2] & ~0777, NULL) != 0)
 		tprints("|");
diff --git a/ipc_shm.c b/ipc_shm.c
index b358fc6..105962c 100644
--- a/ipc_shm.c
+++ b/ipc_shm.c
@@ -5,7 +5,7 @@
  * 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.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -52,11 +52,7 @@
 
 SYS_FUNC(shmget)
 {
-	const int key = (int) tcp->u_arg[0];
-	if (key)
-		tprintf("%#x", key);
-	else
-		tprints("IPC_PRIVATE");
+	printxval(ipc_private, (unsigned int) tcp->u_arg[0], NULL);
 	tprintf(", %" PRI_klu ", ", tcp->u_arg[1]);
 
 	unsigned int flags = tcp->u_arg[2] & ~0777;
@@ -67,10 +63,12 @@
 	if (flags || !hugetlb_value)
 		printflags(shm_resource_flags, flags, NULL);
 
-	if (hugetlb_value)
-		tprintf("%s%u<<SHM_HUGE_SHIFT",
+	if (hugetlb_value) {
+		tprintf("%s%u<<",
 			flags ? "|" : "",
 			hugetlb_value >> SHM_HUGE_SHIFT);
+		print_xlat_u(SHM_HUGE_SHIFT);
+	}
 
 	if (flags || hugetlb_value)
 		tprints("|");
diff --git a/kexec.c b/kexec.c
index 8157cc9..22acaa3 100644
--- a/kexec.c
+++ b/kexec.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2014-2017 The strace developers.
+ * Copyright (c) 2014-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -76,7 +76,7 @@
 	const size_t sizeof_seg = ARRAY_SIZE(seg) * current_wordsize;
 
 	print_array(tcp, addr, len, seg, sizeof_seg,
-		    umoven_or_printaddr, print_seg, 0);
+		    tfetch_mem, print_seg, 0);
 }
 
 SYS_FUNC(kexec_load)
diff --git a/keyctl.c b/keyctl.c
index 9ee0803..7416423 100644
--- a/keyctl.c
+++ b/keyctl.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2014-2017 The strace developers.
+ * Copyright (c) 2014-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,12 +44,7 @@
 static void
 print_keyring_serial_number(key_serial_t id)
 {
-	const char *str = xlookup(key_spec, (unsigned int) id);
-
-	if (str)
-		tprints(str);
-	else
-		tprintf("%d", id);
+	printxval_d(key_spec, id, NULL);
 }
 
 SYS_FUNC(add_key)
@@ -195,12 +190,8 @@
 
 	print_keyring_serial_number(id1);
 	tprintf(", %u, ", timeout);
-
-	if (err_str)
-		tprintf("%s, ", err_str);
-	else
-		tprintf("%u, ", error);
-
+	print_xlat_ex(error, err_str, XLAT_STYLE_FMT_U);
+	tprints(", ");
 	print_keyring_serial_number(id2);
 }
 
@@ -396,7 +387,8 @@
 		break;
 
 	case KEYCTL_SET_REQKEY_KEYRING:
-		printxval(key_reqkeys, arg2, "KEY_REQKEY_DEFL_???");
+		printxvals_ex((int) arg2, "KEY_REQKEY_DEFL_???",
+			      XLAT_STYLE_FMT_D, key_reqkeys, NULL);
 		break;
 
 	case KEYCTL_SET_TIMEOUT:
diff --git a/linux/32/ioctls_inc_align16.h b/linux/32/ioctls_inc_align16.h
index 77ea9c3..2dc2e73 100644
--- a/linux/32/ioctls_inc_align16.h
+++ b/linux/32/ioctls_inc_align16.h
@@ -283,6 +283,7 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_ADD_CONFIG", _IOC_WRITE, 0x6477, 0x48 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_OPEN", _IOC_WRITE, 0x6476, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_REMOVE_CONFIG", _IOC_WRITE, 0x6478, 0x08 },
+{ "drm/i915_drm.h", "DRM_IOCTL_I915_QUERY", _IOC_READ|_IOC_WRITE, 0x6479, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_REG_READ", _IOC_READ|_IOC_WRITE, 0x6471, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SETPARAM", _IOC_WRITE, 0x6447, 0x08 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SET_SPRITE_COLORKEY", _IOC_READ|_IOC_WRITE, 0x646b, 0x14 },
@@ -422,8 +423,11 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_LABEL_BO", _IOC_READ|_IOC_WRITE, 0x644a, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_CREATE", _IOC_READ|_IOC_WRITE, 0x644c, 0x18 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_DESTROY", _IOC_READ|_IOC_WRITE, 0x644d, 0x04 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_GET_VALUES", _IOC_READ|_IOC_WRITE, 0x644e, 0x0c },
 { "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_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa8 },
 { "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 },
 { "drm/vgem_drm.h", "DRM_IOCTL_VGEM_FENCE_ATTACH", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -1160,6 +1164,7 @@
 { "linux/if_tun.h", "TUNSETVNETHDRSZ", _IOC_WRITE, 0x54d8, 0x04 },
 { "linux/if_tun.h", "TUNSETVNETLE", _IOC_WRITE, 0x54dc, 0x04 },
 { "linux/iio/events.h", "IIO_GET_EVENT_FD_IOCTL", _IOC_READ, 0x6990, 0x04 },
+{ "linux/inotify.h", "INOTIFY_IOC_SETNEXTWD", _IOC_WRITE, 0x4900, 0x04 },
 { "linux/input.h", "EVIOCGEFFECTS", _IOC_READ, 0x4584, 0x04 },
 { "linux/input.h", "EVIOCGID", _IOC_READ, 0x4502, 0x08 },
 { "linux/input.h", "EVIOCGKEYCODE", _IOC_READ, 0x4504, 0x08 },
@@ -1197,6 +1202,9 @@
 { "linux/ipmi.h", "IPMICTL_SET_TIMING_PARMS_CMD", _IOC_READ, 0x6916, 0x08 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD", _IOC_READ, 0x690f, 0x02 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD_CHANS", _IOC_READ, 0x691d, 0x0c },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_CLEAR_SMS_ATN", _IOC_NONE, 0xb101, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_FORCE_ABORT", _IOC_NONE, 0xb102, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_SET_SMS_ATN", _IOC_NONE, 0xb100, 0x00 },
 { "linux/isdn.h", "IIOCDBGVAR", _IOC_NONE, 0x497f, 0x00 },
 { "linux/isdn.h", "IIOCDRVCTL", _IOC_NONE, 0x4980, 0x00 },
 { "linux/isdn.h", "IIOCGETCPS", _IOC_NONE, 0x4915, 0x00 },
@@ -1238,48 +1246,6 @@
 { "linux/ivtv.h", "IVTV_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x38 },
 { "linux/ivtv.h", "IVTV_IOC_PASSTHROUGH_MODE", _IOC_WRITE, 0x56c1, 0x04 },
 { "linux/ivtvfb.h", "IVTVFB_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x0c },
-{ "linux/ixjuser.h", "IXJCTL_AEC_GET_LEVEL", _IOC_NONE, 0x71cd, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_START", _IOC_WRITE, 0x71cb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_STOP", _IOC_NONE, 0x71cc, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_CARDTYPE", _IOC_READ, 0x71c1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_CID", _IOC_READ, 0x71d4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_CIDCW", _IOC_WRITE, 0x71d9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_AGAIN", _IOC_WRITE, 0x71d2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_COEFF_SET", _IOC_WRITE, 0x71d0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_CLEAR", _IOC_NONE, 0x71e7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_READ", _IOC_READ, 0x71e6, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_IDLE", _IOC_NONE, 0x71c5, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_RESET", _IOC_NONE, 0x71c0, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_TYPE", _IOC_READ, 0x71c3, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_VERSION", _IOC_READ, 0x71c4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DTMF_PRESCALE", _IOC_WRITE, 0x71e8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FILTER_CADENCE", _IOC_WRITE, 0x71d6, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_READ", _IOC_READ, 0x71e2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_WRITTEN", _IOC_READ, 0x71e3, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_GET_FILTER_HIST", _IOC_WRITE, 0x71c8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_HZ", _IOC_WRITE, 0x71e0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INIT_TONE", _IOC_WRITE, 0x71c9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_START", _IOC_WRITE, 0x71fd, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_STOP", _IOC_WRITE, 0x71fe, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_MIXER", _IOC_WRITE, 0x71cf, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PLAY_CID", _IOC_NONE, 0x71d7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_PORT", _IOC_WRITE, 0x71d1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_POTS_PSTN", _IOC_WRITE, 0x71d5, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PSTN_LINETEST", _IOC_NONE, 0x71d3, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_RATE", _IOC_WRITE, 0x71e1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_READ_WAIT", _IOC_READ, 0x71e4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SC_RXG", _IOC_WRITE, 0x71ea, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SC_TXG", _IOC_WRITE, 0x71eb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SERIAL", _IOC_READ, 0x71c2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER", _IOC_WRITE, 0x71c7, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER_RAW", _IOC_WRITE, 0x71dd, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_LED", _IOC_WRITE, 0x71ce, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SIGCTL", _IOC_WRITE, 0x71e9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_TESTRAM", _IOC_NONE, 0x71c6, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_TONE_CADENCE", _IOC_WRITE, 0x71ca, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_VERSION", _IOC_READ, 0x71da, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_VMWI", _IOC_READ, 0x71d8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_WRITE_WAIT", _IOC_READ, 0x71e5, 0x04 },
 { "linux/joystick.h", "JSIOCGAXES", _IOC_READ, 0x6a11, 0x01 },
 { "linux/joystick.h", "JSIOCGAXMAP", _IOC_READ, 0x6a32, 0x40 },
 { "linux/joystick.h", "JSIOCGBTNMAP", _IOC_READ, 0x6a34, 0x400 },
@@ -1338,6 +1304,8 @@
 { "linux/kd.h", "PIO_UNIMAP", 0, 0x4B67, 0 },
 { "linux/kd.h", "PIO_UNIMAPCLR", 0, 0x4B68, 0 },
 { "linux/kd.h", "PIO_UNISCRNMAP", 0, 0x4B6A, 0 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ACQUIRE_VM", _IOC_WRITE, 0x4b15, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ALLOC_MEMORY_OF_GPU", _IOC_READ|_IOC_WRITE, 0x4b16, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_EVENT", _IOC_READ|_IOC_WRITE, 0x4b08, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b02, 0x58 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_ADDRESS_WATCH", _IOC_WRITE, 0x4b0f, 0x10 },
@@ -1346,15 +1314,19 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_WAVE_CONTROL", _IOC_WRITE, 0x4b10, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_EVENT", _IOC_WRITE, 0x4b09, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_FREE_MEMORY_OF_GPU", _IOC_WRITE, 0x4b17, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_CLOCK_COUNTERS", _IOC_READ|_IOC_WRITE, 0x4b05, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES", _IOC_READ, 0x4b06, 0x190 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES_NEW", _IOC_READ|_IOC_WRITE, 0x4b14, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_TILE_CONFIG", _IOC_READ|_IOC_WRITE, 0x4b12, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_VERSION", _IOC_READ, 0x4b01, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_MAP_MEMORY_TO_GPU", _IOC_READ|_IOC_WRITE, 0x4b18, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_RESET_EVENT", _IOC_WRITE, 0x4b0b, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_EVENT", _IOC_WRITE, 0x4b0a, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_MEMORY_POLICY", _IOC_WRITE, 0x4b04, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", _IOC_READ|_IOC_WRITE, 0x4b11, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_TRAP_HANDLER", _IOC_WRITE, 0x4b13, 0x18 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU", _IOC_READ|_IOC_WRITE, 0x4b19, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_UPDATE_QUEUE", _IOC_WRITE, 0x4b07, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_WAIT_EVENTS", _IOC_READ|_IOC_WRITE, 0x4b0c, 0x18 },
 { "linux/lightnvm.h", "NVME_NVM_IOCTL_ADMIN_VIO", _IOC_READ|_IOC_WRITE, 0x4c41, 0x50 },
@@ -1552,6 +1524,7 @@
 { "linux/perf_event.h", "PERF_EVENT_IOC_DISABLE", _IOC_NONE, 0x2401, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ENABLE", _IOC_NONE, 0x2400, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ID", _IOC_READ, 0x2407, 0x04 },
+{ "linux/perf_event.h", "PERF_EVENT_IOC_MODIFY_ATTRIBUTES", _IOC_WRITE, 0x240b, 0x04 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PAUSE_OUTPUT", _IOC_WRITE, 0x2409, 0x04 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PERIOD", _IOC_WRITE, 0x2404, 0x08 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_QUERY_BPF", _IOC_READ|_IOC_WRITE, 0x240a, 0x04 },
@@ -1680,6 +1653,7 @@
 { "linux/random.h", "RNDCLEARPOOL", _IOC_NONE, 0x5206, 0x00 },
 { "linux/random.h", "RNDGETENTCNT", _IOC_READ, 0x5200, 0x04 },
 { "linux/random.h", "RNDGETPOOL", _IOC_READ, 0x5202, 0x08 },
+{ "linux/random.h", "RNDRESEEDCRNG", _IOC_NONE, 0x5207, 0x00 },
 { "linux/random.h", "RNDZAPENTCNT", _IOC_NONE, 0x5204, 0x00 },
 { "linux/raw.h", "RAW_GETBIND", _IOC_NONE, 0xac01, 0x00 },
 { "linux/raw.h", "RAW_SETBIND", _IOC_NONE, 0xac00, 0x00 },
@@ -2022,53 +1996,6 @@
 { "linux/tee.h", "TEE_IOC_SUPPL_RECV", _IOC_READ, 0xa406, 0x10 },
 { "linux/tee.h", "TEE_IOC_SUPPL_SEND", _IOC_READ, 0xa407, 0x10 },
 { "linux/tee.h", "TEE_IOC_VERSION", _IOC_READ, 0xa400, 0x0c },
-{ "linux/telephony.h", "OLD_PHONE_RING_START", _IOC_NONE, 0x7187, 0x00 },
-{ "linux/telephony.h", "PHONE_BUSY", _IOC_NONE, 0x71a1, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES", _IOC_NONE, 0x7180, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_CHECK", _IOC_WRITE, 0x7182, 0x04 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_LIST", _IOC_READ, 0x7181, 0x04 },
-{ "linux/telephony.h", "PHONE_CPT_STOP", _IOC_NONE, 0x71a4, 0x00 },
-{ "linux/telephony.h", "PHONE_DIALTONE", _IOC_NONE, 0x71a3, 0x00 },
-{ "linux/telephony.h", "PHONE_DTMF_OOB", _IOC_WRITE, 0x7199, 0x04 },
-{ "linux/telephony.h", "PHONE_DTMF_READY", _IOC_READ, 0x7196, 0x04 },
-{ "linux/telephony.h", "PHONE_EXCEPTION", _IOC_READ, 0x719a, 0x04 },
-{ "linux/telephony.h", "PHONE_FRAME", _IOC_WRITE, 0x718d, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF", _IOC_READ, 0x7197, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF_ASCII", _IOC_READ, 0x7198, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_TONE_OFF_TIME", _IOC_NONE, 0x719f, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_ON_TIME", _IOC_NONE, 0x719e, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_STATE", _IOC_NONE, 0x71a0, 0x00 },
-{ "linux/telephony.h", "PHONE_HOOKSTATE", _IOC_NONE, 0x7184, 0x00 },
-{ "linux/telephony.h", "PHONE_MAXRINGS", _IOC_WRITE, 0x7185, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_CODEC", _IOC_WRITE, 0x7190, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_DEPTH", _IOC_WRITE, 0x7193, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_LEVEL", _IOC_NONE, 0x7195, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_START", _IOC_NONE, 0x7191, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_STOP", _IOC_NONE, 0x7192, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_TONE", _IOC_WRITE, 0x719b, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME", _IOC_WRITE, 0x7194, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME_LINEAR", _IOC_WRITE, 0x71dc, 0x04 },
-{ "linux/telephony.h", "PHONE_PSTN_GET_STATE", _IOC_NONE, 0x71a5, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_LINETEST", _IOC_NONE, 0x71a8, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_SET_STATE", _IOC_WRITE, 0x71a4, 0x04 },
-{ "linux/telephony.h", "PHONE_QUERY_CODEC", _IOC_READ|_IOC_WRITE, 0x71a7, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_CODEC", _IOC_WRITE, 0x7189, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_DEPTH", _IOC_WRITE, 0x718c, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_LEVEL", _IOC_NONE, 0x718f, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_START", _IOC_NONE, 0x718a, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_STOP", _IOC_NONE, 0x718b, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME", _IOC_WRITE, 0x718e, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME_LINEAR", _IOC_WRITE, 0x71db, 0x04 },
-{ "linux/telephony.h", "PHONE_RING", _IOC_NONE, 0x7183, 0x00 },
-{ "linux/telephony.h", "PHONE_RINGBACK", _IOC_NONE, 0x71a2, 0x00 },
-{ "linux/telephony.h", "PHONE_RING_CADENCE", _IOC_WRITE, 0x7186, 0x02 },
-{ "linux/telephony.h", "PHONE_RING_START", _IOC_WRITE, 0x7187, 0x04 },
-{ "linux/telephony.h", "PHONE_RING_STOP", _IOC_NONE, 0x7188, 0x00 },
-{ "linux/telephony.h", "PHONE_SET_TONE_OFF_TIME", _IOC_WRITE, 0x719d, 0x04 },
-{ "linux/telephony.h", "PHONE_SET_TONE_ON_TIME", _IOC_WRITE, 0x719c, 0x04 },
-{ "linux/telephony.h", "PHONE_VAD", _IOC_WRITE, 0x71a9, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK", _IOC_WRITE, 0x71aa, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK_DURATION", _IOC_WRITE, 0x71a6, 0x04 },
 { "linux/timerfd.h", "TFD_IOC_SET_TICKS", _IOC_WRITE, 0x5400, 0x08 },
 { "linux/toshiba.h", "TOSHIBA_ACPI_SCI", _IOC_READ|_IOC_WRITE, 0x7491, 0x18 },
 { "linux/toshiba.h", "TOSH_SMM", _IOC_READ|_IOC_WRITE, 0x7490, 0x18 },
@@ -2199,6 +2126,7 @@
 { "linux/vfio.h", "VFIO_DEVICE_GET_IRQ_INFO", _IOC_NONE, 0x3b6d, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_PCI_HOT_RESET_INFO", _IOC_NONE, 0x3b70, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_REGION_INFO", _IOC_NONE, 0x3b6c, 0x00 },
+{ "linux/vfio.h", "VFIO_DEVICE_IOEVENTFD", _IOC_NONE, 0x3b74, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_PCI_HOT_RESET", _IOC_NONE, 0x3b71, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_QUERY_GFX_PLANE", _IOC_NONE, 0x3b72, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_RESET", _IOC_NONE, 0x3b6f, 0x00 },
@@ -2523,7 +2451,7 @@
 { "rdma/rdma_user_ioctl.h", "HFI1_IOCTL_ACK_EVENT", _IOC_WRITE, 0x1bea, 0x04 },
 { "rdma/rdma_user_ioctl.h", "HFI1_IOCTL_ASSIGN_CTXT", _IOC_READ|_IOC_WRITE, 0x1be1, 0x1c },
 { "rdma/rdma_user_ioctl.h", "HFI1_IOCTL_CREDIT_UPD", _IOC_NONE, 0x1be6, 0x00 },
-{ "rdma/rdma_user_ioctl.h", "HFI1_IOCTL_CTXT_INFO", _IOC_WRITE, 0x1be2, 0x26 },
+{ "rdma/rdma_user_ioctl.h", "HFI1_IOCTL_CTXT_INFO", _IOC_WRITE, 0x1be2, 0x28 },
 { "rdma/rdma_user_ioctl.h", "HFI1_IOCTL_CTXT_RESET", _IOC_NONE, 0x1bec, 0x00 },
 { "rdma/rdma_user_ioctl.h", "HFI1_IOCTL_GET_VERS", _IOC_READ, 0x1bee, 0x04 },
 { "rdma/rdma_user_ioctl.h", "HFI1_IOCTL_POLL_TYPE", _IOC_WRITE, 0x1be9, 0x04 },
@@ -2537,7 +2465,7 @@
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT", _IOC_READ|_IOC_WRITE, 0x1b01, 0x1c },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT2", _IOC_READ|_IOC_WRITE, 0x1b04, 0x28 },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_UNREGISTER_AGENT", _IOC_WRITE, 0x1b02, 0x04 },
-{ "rdma/rdma_user_ioctl.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x10 },
+{ "rdma/rdma_user_ioctl_cmds.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x18 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_ATTACH", _IOC_READ|_IOC_WRITE, 0xca80, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_DETACH", _IOC_READ|_IOC_WRITE, 0xca83, 0x60 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_MANAGE_LUN", _IOC_READ|_IOC_WRITE, 0xca86, 0x68 },
diff --git a/linux/32/ioctls_inc_align32.h b/linux/32/ioctls_inc_align32.h
index d2a3393..f9cc340 100644
--- a/linux/32/ioctls_inc_align32.h
+++ b/linux/32/ioctls_inc_align32.h
@@ -283,6 +283,7 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_ADD_CONFIG", _IOC_WRITE, 0x6477, 0x48 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_OPEN", _IOC_WRITE, 0x6476, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_REMOVE_CONFIG", _IOC_WRITE, 0x6478, 0x08 },
+{ "drm/i915_drm.h", "DRM_IOCTL_I915_QUERY", _IOC_READ|_IOC_WRITE, 0x6479, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_REG_READ", _IOC_READ|_IOC_WRITE, 0x6471, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SETPARAM", _IOC_WRITE, 0x6447, 0x08 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SET_SPRITE_COLORKEY", _IOC_READ|_IOC_WRITE, 0x646b, 0x14 },
@@ -422,8 +423,11 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_LABEL_BO", _IOC_READ|_IOC_WRITE, 0x644a, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_CREATE", _IOC_READ|_IOC_WRITE, 0x644c, 0x18 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_DESTROY", _IOC_READ|_IOC_WRITE, 0x644d, 0x04 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_GET_VALUES", _IOC_READ|_IOC_WRITE, 0x644e, 0x0c },
 { "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_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa8 },
 { "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 },
 { "drm/vgem_drm.h", "DRM_IOCTL_VGEM_FENCE_ATTACH", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -1160,6 +1164,7 @@
 { "linux/if_tun.h", "TUNSETVNETHDRSZ", _IOC_WRITE, 0x54d8, 0x04 },
 { "linux/if_tun.h", "TUNSETVNETLE", _IOC_WRITE, 0x54dc, 0x04 },
 { "linux/iio/events.h", "IIO_GET_EVENT_FD_IOCTL", _IOC_READ, 0x6990, 0x04 },
+{ "linux/inotify.h", "INOTIFY_IOC_SETNEXTWD", _IOC_WRITE, 0x4900, 0x04 },
 { "linux/input.h", "EVIOCGEFFECTS", _IOC_READ, 0x4584, 0x04 },
 { "linux/input.h", "EVIOCGID", _IOC_READ, 0x4502, 0x08 },
 { "linux/input.h", "EVIOCGKEYCODE", _IOC_READ, 0x4504, 0x08 },
@@ -1197,6 +1202,9 @@
 { "linux/ipmi.h", "IPMICTL_SET_TIMING_PARMS_CMD", _IOC_READ, 0x6916, 0x08 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD", _IOC_READ, 0x690f, 0x02 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD_CHANS", _IOC_READ, 0x691d, 0x0c },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_CLEAR_SMS_ATN", _IOC_NONE, 0xb101, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_FORCE_ABORT", _IOC_NONE, 0xb102, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_SET_SMS_ATN", _IOC_NONE, 0xb100, 0x00 },
 { "linux/isdn.h", "IIOCDBGVAR", _IOC_NONE, 0x497f, 0x00 },
 { "linux/isdn.h", "IIOCDRVCTL", _IOC_NONE, 0x4980, 0x00 },
 { "linux/isdn.h", "IIOCGETCPS", _IOC_NONE, 0x4915, 0x00 },
@@ -1238,48 +1246,6 @@
 { "linux/ivtv.h", "IVTV_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x38 },
 { "linux/ivtv.h", "IVTV_IOC_PASSTHROUGH_MODE", _IOC_WRITE, 0x56c1, 0x04 },
 { "linux/ivtvfb.h", "IVTVFB_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x0c },
-{ "linux/ixjuser.h", "IXJCTL_AEC_GET_LEVEL", _IOC_NONE, 0x71cd, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_START", _IOC_WRITE, 0x71cb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_STOP", _IOC_NONE, 0x71cc, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_CARDTYPE", _IOC_READ, 0x71c1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_CID", _IOC_READ, 0x71d4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_CIDCW", _IOC_WRITE, 0x71d9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_AGAIN", _IOC_WRITE, 0x71d2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_COEFF_SET", _IOC_WRITE, 0x71d0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_CLEAR", _IOC_NONE, 0x71e7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_READ", _IOC_READ, 0x71e6, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_IDLE", _IOC_NONE, 0x71c5, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_RESET", _IOC_NONE, 0x71c0, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_TYPE", _IOC_READ, 0x71c3, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_VERSION", _IOC_READ, 0x71c4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DTMF_PRESCALE", _IOC_WRITE, 0x71e8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FILTER_CADENCE", _IOC_WRITE, 0x71d6, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_READ", _IOC_READ, 0x71e2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_WRITTEN", _IOC_READ, 0x71e3, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_GET_FILTER_HIST", _IOC_WRITE, 0x71c8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_HZ", _IOC_WRITE, 0x71e0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INIT_TONE", _IOC_WRITE, 0x71c9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_START", _IOC_WRITE, 0x71fd, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_STOP", _IOC_WRITE, 0x71fe, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_MIXER", _IOC_WRITE, 0x71cf, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PLAY_CID", _IOC_NONE, 0x71d7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_PORT", _IOC_WRITE, 0x71d1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_POTS_PSTN", _IOC_WRITE, 0x71d5, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PSTN_LINETEST", _IOC_NONE, 0x71d3, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_RATE", _IOC_WRITE, 0x71e1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_READ_WAIT", _IOC_READ, 0x71e4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SC_RXG", _IOC_WRITE, 0x71ea, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SC_TXG", _IOC_WRITE, 0x71eb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SERIAL", _IOC_READ, 0x71c2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER", _IOC_WRITE, 0x71c7, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER_RAW", _IOC_WRITE, 0x71dd, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_LED", _IOC_WRITE, 0x71ce, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SIGCTL", _IOC_WRITE, 0x71e9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_TESTRAM", _IOC_NONE, 0x71c6, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_TONE_CADENCE", _IOC_WRITE, 0x71ca, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_VERSION", _IOC_READ, 0x71da, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_VMWI", _IOC_READ, 0x71d8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_WRITE_WAIT", _IOC_READ, 0x71e5, 0x04 },
 { "linux/joystick.h", "JSIOCGAXES", _IOC_READ, 0x6a11, 0x01 },
 { "linux/joystick.h", "JSIOCGAXMAP", _IOC_READ, 0x6a32, 0x40 },
 { "linux/joystick.h", "JSIOCGBTNMAP", _IOC_READ, 0x6a34, 0x400 },
@@ -1338,6 +1304,8 @@
 { "linux/kd.h", "PIO_UNIMAP", 0, 0x4B67, 0 },
 { "linux/kd.h", "PIO_UNIMAPCLR", 0, 0x4B68, 0 },
 { "linux/kd.h", "PIO_UNISCRNMAP", 0, 0x4B6A, 0 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ACQUIRE_VM", _IOC_WRITE, 0x4b15, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ALLOC_MEMORY_OF_GPU", _IOC_READ|_IOC_WRITE, 0x4b16, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_EVENT", _IOC_READ|_IOC_WRITE, 0x4b08, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b02, 0x58 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_ADDRESS_WATCH", _IOC_WRITE, 0x4b0f, 0x10 },
@@ -1346,15 +1314,19 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_WAVE_CONTROL", _IOC_WRITE, 0x4b10, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_EVENT", _IOC_WRITE, 0x4b09, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_FREE_MEMORY_OF_GPU", _IOC_WRITE, 0x4b17, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_CLOCK_COUNTERS", _IOC_READ|_IOC_WRITE, 0x4b05, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES", _IOC_READ, 0x4b06, 0x190 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES_NEW", _IOC_READ|_IOC_WRITE, 0x4b14, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_TILE_CONFIG", _IOC_READ|_IOC_WRITE, 0x4b12, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_VERSION", _IOC_READ, 0x4b01, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_MAP_MEMORY_TO_GPU", _IOC_READ|_IOC_WRITE, 0x4b18, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_RESET_EVENT", _IOC_WRITE, 0x4b0b, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_EVENT", _IOC_WRITE, 0x4b0a, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_MEMORY_POLICY", _IOC_WRITE, 0x4b04, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", _IOC_READ|_IOC_WRITE, 0x4b11, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_TRAP_HANDLER", _IOC_WRITE, 0x4b13, 0x18 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU", _IOC_READ|_IOC_WRITE, 0x4b19, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_UPDATE_QUEUE", _IOC_WRITE, 0x4b07, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_WAIT_EVENTS", _IOC_READ|_IOC_WRITE, 0x4b0c, 0x18 },
 { "linux/lightnvm.h", "NVME_NVM_IOCTL_ADMIN_VIO", _IOC_READ|_IOC_WRITE, 0x4c41, 0x50 },
@@ -1552,6 +1524,7 @@
 { "linux/perf_event.h", "PERF_EVENT_IOC_DISABLE", _IOC_NONE, 0x2401, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ENABLE", _IOC_NONE, 0x2400, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ID", _IOC_READ, 0x2407, 0x04 },
+{ "linux/perf_event.h", "PERF_EVENT_IOC_MODIFY_ATTRIBUTES", _IOC_WRITE, 0x240b, 0x04 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PAUSE_OUTPUT", _IOC_WRITE, 0x2409, 0x04 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PERIOD", _IOC_WRITE, 0x2404, 0x08 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_QUERY_BPF", _IOC_READ|_IOC_WRITE, 0x240a, 0x04 },
@@ -1680,6 +1653,7 @@
 { "linux/random.h", "RNDCLEARPOOL", _IOC_NONE, 0x5206, 0x00 },
 { "linux/random.h", "RNDGETENTCNT", _IOC_READ, 0x5200, 0x04 },
 { "linux/random.h", "RNDGETPOOL", _IOC_READ, 0x5202, 0x08 },
+{ "linux/random.h", "RNDRESEEDCRNG", _IOC_NONE, 0x5207, 0x00 },
 { "linux/random.h", "RNDZAPENTCNT", _IOC_NONE, 0x5204, 0x00 },
 { "linux/raw.h", "RAW_GETBIND", _IOC_NONE, 0xac01, 0x00 },
 { "linux/raw.h", "RAW_SETBIND", _IOC_NONE, 0xac00, 0x00 },
@@ -2022,53 +1996,6 @@
 { "linux/tee.h", "TEE_IOC_SUPPL_RECV", _IOC_READ, 0xa406, 0x10 },
 { "linux/tee.h", "TEE_IOC_SUPPL_SEND", _IOC_READ, 0xa407, 0x10 },
 { "linux/tee.h", "TEE_IOC_VERSION", _IOC_READ, 0xa400, 0x0c },
-{ "linux/telephony.h", "OLD_PHONE_RING_START", _IOC_NONE, 0x7187, 0x00 },
-{ "linux/telephony.h", "PHONE_BUSY", _IOC_NONE, 0x71a1, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES", _IOC_NONE, 0x7180, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_CHECK", _IOC_WRITE, 0x7182, 0x04 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_LIST", _IOC_READ, 0x7181, 0x04 },
-{ "linux/telephony.h", "PHONE_CPT_STOP", _IOC_NONE, 0x71a4, 0x00 },
-{ "linux/telephony.h", "PHONE_DIALTONE", _IOC_NONE, 0x71a3, 0x00 },
-{ "linux/telephony.h", "PHONE_DTMF_OOB", _IOC_WRITE, 0x7199, 0x04 },
-{ "linux/telephony.h", "PHONE_DTMF_READY", _IOC_READ, 0x7196, 0x04 },
-{ "linux/telephony.h", "PHONE_EXCEPTION", _IOC_READ, 0x719a, 0x04 },
-{ "linux/telephony.h", "PHONE_FRAME", _IOC_WRITE, 0x718d, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF", _IOC_READ, 0x7197, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF_ASCII", _IOC_READ, 0x7198, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_TONE_OFF_TIME", _IOC_NONE, 0x719f, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_ON_TIME", _IOC_NONE, 0x719e, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_STATE", _IOC_NONE, 0x71a0, 0x00 },
-{ "linux/telephony.h", "PHONE_HOOKSTATE", _IOC_NONE, 0x7184, 0x00 },
-{ "linux/telephony.h", "PHONE_MAXRINGS", _IOC_WRITE, 0x7185, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_CODEC", _IOC_WRITE, 0x7190, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_DEPTH", _IOC_WRITE, 0x7193, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_LEVEL", _IOC_NONE, 0x7195, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_START", _IOC_NONE, 0x7191, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_STOP", _IOC_NONE, 0x7192, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_TONE", _IOC_WRITE, 0x719b, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME", _IOC_WRITE, 0x7194, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME_LINEAR", _IOC_WRITE, 0x71dc, 0x04 },
-{ "linux/telephony.h", "PHONE_PSTN_GET_STATE", _IOC_NONE, 0x71a5, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_LINETEST", _IOC_NONE, 0x71a8, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_SET_STATE", _IOC_WRITE, 0x71a4, 0x04 },
-{ "linux/telephony.h", "PHONE_QUERY_CODEC", _IOC_READ|_IOC_WRITE, 0x71a7, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_CODEC", _IOC_WRITE, 0x7189, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_DEPTH", _IOC_WRITE, 0x718c, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_LEVEL", _IOC_NONE, 0x718f, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_START", _IOC_NONE, 0x718a, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_STOP", _IOC_NONE, 0x718b, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME", _IOC_WRITE, 0x718e, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME_LINEAR", _IOC_WRITE, 0x71db, 0x04 },
-{ "linux/telephony.h", "PHONE_RING", _IOC_NONE, 0x7183, 0x00 },
-{ "linux/telephony.h", "PHONE_RINGBACK", _IOC_NONE, 0x71a2, 0x00 },
-{ "linux/telephony.h", "PHONE_RING_CADENCE", _IOC_WRITE, 0x7186, 0x02 },
-{ "linux/telephony.h", "PHONE_RING_START", _IOC_WRITE, 0x7187, 0x04 },
-{ "linux/telephony.h", "PHONE_RING_STOP", _IOC_NONE, 0x7188, 0x00 },
-{ "linux/telephony.h", "PHONE_SET_TONE_OFF_TIME", _IOC_WRITE, 0x719d, 0x04 },
-{ "linux/telephony.h", "PHONE_SET_TONE_ON_TIME", _IOC_WRITE, 0x719c, 0x04 },
-{ "linux/telephony.h", "PHONE_VAD", _IOC_WRITE, 0x71a9, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK", _IOC_WRITE, 0x71aa, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK_DURATION", _IOC_WRITE, 0x71a6, 0x04 },
 { "linux/timerfd.h", "TFD_IOC_SET_TICKS", _IOC_WRITE, 0x5400, 0x08 },
 { "linux/toshiba.h", "TOSHIBA_ACPI_SCI", _IOC_READ|_IOC_WRITE, 0x7491, 0x18 },
 { "linux/toshiba.h", "TOSH_SMM", _IOC_READ|_IOC_WRITE, 0x7490, 0x18 },
@@ -2199,6 +2126,7 @@
 { "linux/vfio.h", "VFIO_DEVICE_GET_IRQ_INFO", _IOC_NONE, 0x3b6d, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_PCI_HOT_RESET_INFO", _IOC_NONE, 0x3b70, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_REGION_INFO", _IOC_NONE, 0x3b6c, 0x00 },
+{ "linux/vfio.h", "VFIO_DEVICE_IOEVENTFD", _IOC_NONE, 0x3b74, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_PCI_HOT_RESET", _IOC_NONE, 0x3b71, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_QUERY_GFX_PLANE", _IOC_NONE, 0x3b72, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_RESET", _IOC_NONE, 0x3b6f, 0x00 },
@@ -2537,7 +2465,7 @@
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT", _IOC_READ|_IOC_WRITE, 0x1b01, 0x1c },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT2", _IOC_READ|_IOC_WRITE, 0x1b04, 0x28 },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_UNREGISTER_AGENT", _IOC_WRITE, 0x1b02, 0x04 },
-{ "rdma/rdma_user_ioctl.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x10 },
+{ "rdma/rdma_user_ioctl_cmds.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x18 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_ATTACH", _IOC_READ|_IOC_WRITE, 0xca80, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_DETACH", _IOC_READ|_IOC_WRITE, 0xca83, 0x60 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_MANAGE_LUN", _IOC_READ|_IOC_WRITE, 0xca86, 0x68 },
diff --git a/linux/32/ioctls_inc_align64.h b/linux/32/ioctls_inc_align64.h
index 41c06d9..22a8ab5 100644
--- a/linux/32/ioctls_inc_align64.h
+++ b/linux/32/ioctls_inc_align64.h
@@ -283,6 +283,7 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_ADD_CONFIG", _IOC_WRITE, 0x6477, 0x48 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_OPEN", _IOC_WRITE, 0x6476, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_REMOVE_CONFIG", _IOC_WRITE, 0x6478, 0x08 },
+{ "drm/i915_drm.h", "DRM_IOCTL_I915_QUERY", _IOC_READ|_IOC_WRITE, 0x6479, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_REG_READ", _IOC_READ|_IOC_WRITE, 0x6471, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SETPARAM", _IOC_WRITE, 0x6447, 0x08 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SET_SPRITE_COLORKEY", _IOC_READ|_IOC_WRITE, 0x646b, 0x14 },
@@ -422,8 +423,11 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_LABEL_BO", _IOC_READ|_IOC_WRITE, 0x644a, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_CREATE", _IOC_READ|_IOC_WRITE, 0x644c, 0x18 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_DESTROY", _IOC_READ|_IOC_WRITE, 0x644d, 0x04 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_GET_VALUES", _IOC_READ|_IOC_WRITE, 0x644e, 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_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa8 },
 { "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 },
 { "drm/vgem_drm.h", "DRM_IOCTL_VGEM_FENCE_ATTACH", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -1160,6 +1164,7 @@
 { "linux/if_tun.h", "TUNSETVNETHDRSZ", _IOC_WRITE, 0x54d8, 0x04 },
 { "linux/if_tun.h", "TUNSETVNETLE", _IOC_WRITE, 0x54dc, 0x04 },
 { "linux/iio/events.h", "IIO_GET_EVENT_FD_IOCTL", _IOC_READ, 0x6990, 0x04 },
+{ "linux/inotify.h", "INOTIFY_IOC_SETNEXTWD", _IOC_WRITE, 0x4900, 0x04 },
 { "linux/input.h", "EVIOCGEFFECTS", _IOC_READ, 0x4584, 0x04 },
 { "linux/input.h", "EVIOCGID", _IOC_READ, 0x4502, 0x08 },
 { "linux/input.h", "EVIOCGKEYCODE", _IOC_READ, 0x4504, 0x08 },
@@ -1197,6 +1202,9 @@
 { "linux/ipmi.h", "IPMICTL_SET_TIMING_PARMS_CMD", _IOC_READ, 0x6916, 0x08 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD", _IOC_READ, 0x690f, 0x02 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD_CHANS", _IOC_READ, 0x691d, 0x0c },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_CLEAR_SMS_ATN", _IOC_NONE, 0xb101, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_FORCE_ABORT", _IOC_NONE, 0xb102, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_SET_SMS_ATN", _IOC_NONE, 0xb100, 0x00 },
 { "linux/isdn.h", "IIOCDBGVAR", _IOC_NONE, 0x497f, 0x00 },
 { "linux/isdn.h", "IIOCDRVCTL", _IOC_NONE, 0x4980, 0x00 },
 { "linux/isdn.h", "IIOCGETCPS", _IOC_NONE, 0x4915, 0x00 },
@@ -1238,48 +1246,6 @@
 { "linux/ivtv.h", "IVTV_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x38 },
 { "linux/ivtv.h", "IVTV_IOC_PASSTHROUGH_MODE", _IOC_WRITE, 0x56c1, 0x04 },
 { "linux/ivtvfb.h", "IVTVFB_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x0c },
-{ "linux/ixjuser.h", "IXJCTL_AEC_GET_LEVEL", _IOC_NONE, 0x71cd, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_START", _IOC_WRITE, 0x71cb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_STOP", _IOC_NONE, 0x71cc, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_CARDTYPE", _IOC_READ, 0x71c1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_CID", _IOC_READ, 0x71d4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_CIDCW", _IOC_WRITE, 0x71d9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_AGAIN", _IOC_WRITE, 0x71d2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_COEFF_SET", _IOC_WRITE, 0x71d0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_CLEAR", _IOC_NONE, 0x71e7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_READ", _IOC_READ, 0x71e6, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_IDLE", _IOC_NONE, 0x71c5, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_RESET", _IOC_NONE, 0x71c0, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_TYPE", _IOC_READ, 0x71c3, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_VERSION", _IOC_READ, 0x71c4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DTMF_PRESCALE", _IOC_WRITE, 0x71e8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FILTER_CADENCE", _IOC_WRITE, 0x71d6, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_READ", _IOC_READ, 0x71e2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_WRITTEN", _IOC_READ, 0x71e3, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_GET_FILTER_HIST", _IOC_WRITE, 0x71c8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_HZ", _IOC_WRITE, 0x71e0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INIT_TONE", _IOC_WRITE, 0x71c9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_START", _IOC_WRITE, 0x71fd, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_STOP", _IOC_WRITE, 0x71fe, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_MIXER", _IOC_WRITE, 0x71cf, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PLAY_CID", _IOC_NONE, 0x71d7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_PORT", _IOC_WRITE, 0x71d1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_POTS_PSTN", _IOC_WRITE, 0x71d5, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PSTN_LINETEST", _IOC_NONE, 0x71d3, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_RATE", _IOC_WRITE, 0x71e1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_READ_WAIT", _IOC_READ, 0x71e4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SC_RXG", _IOC_WRITE, 0x71ea, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SC_TXG", _IOC_WRITE, 0x71eb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SERIAL", _IOC_READ, 0x71c2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER", _IOC_WRITE, 0x71c7, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER_RAW", _IOC_WRITE, 0x71dd, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_LED", _IOC_WRITE, 0x71ce, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SIGCTL", _IOC_WRITE, 0x71e9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_TESTRAM", _IOC_NONE, 0x71c6, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_TONE_CADENCE", _IOC_WRITE, 0x71ca, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_VERSION", _IOC_READ, 0x71da, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_VMWI", _IOC_READ, 0x71d8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_WRITE_WAIT", _IOC_READ, 0x71e5, 0x04 },
 { "linux/joystick.h", "JSIOCGAXES", _IOC_READ, 0x6a11, 0x01 },
 { "linux/joystick.h", "JSIOCGAXMAP", _IOC_READ, 0x6a32, 0x40 },
 { "linux/joystick.h", "JSIOCGBTNMAP", _IOC_READ, 0x6a34, 0x400 },
@@ -1338,6 +1304,8 @@
 { "linux/kd.h", "PIO_UNIMAP", 0, 0x4B67, 0 },
 { "linux/kd.h", "PIO_UNIMAPCLR", 0, 0x4B68, 0 },
 { "linux/kd.h", "PIO_UNISCRNMAP", 0, 0x4B6A, 0 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ACQUIRE_VM", _IOC_WRITE, 0x4b15, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ALLOC_MEMORY_OF_GPU", _IOC_READ|_IOC_WRITE, 0x4b16, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_EVENT", _IOC_READ|_IOC_WRITE, 0x4b08, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b02, 0x58 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_ADDRESS_WATCH", _IOC_WRITE, 0x4b0f, 0x10 },
@@ -1346,15 +1314,19 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_WAVE_CONTROL", _IOC_WRITE, 0x4b10, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_EVENT", _IOC_WRITE, 0x4b09, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_FREE_MEMORY_OF_GPU", _IOC_WRITE, 0x4b17, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_CLOCK_COUNTERS", _IOC_READ|_IOC_WRITE, 0x4b05, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES", _IOC_READ, 0x4b06, 0x190 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES_NEW", _IOC_READ|_IOC_WRITE, 0x4b14, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_TILE_CONFIG", _IOC_READ|_IOC_WRITE, 0x4b12, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_VERSION", _IOC_READ, 0x4b01, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_MAP_MEMORY_TO_GPU", _IOC_READ|_IOC_WRITE, 0x4b18, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_RESET_EVENT", _IOC_WRITE, 0x4b0b, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_EVENT", _IOC_WRITE, 0x4b0a, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_MEMORY_POLICY", _IOC_WRITE, 0x4b04, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", _IOC_READ|_IOC_WRITE, 0x4b11, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_TRAP_HANDLER", _IOC_WRITE, 0x4b13, 0x18 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU", _IOC_READ|_IOC_WRITE, 0x4b19, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_UPDATE_QUEUE", _IOC_WRITE, 0x4b07, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_WAIT_EVENTS", _IOC_READ|_IOC_WRITE, 0x4b0c, 0x18 },
 { "linux/lightnvm.h", "NVME_NVM_IOCTL_ADMIN_VIO", _IOC_READ|_IOC_WRITE, 0x4c41, 0x50 },
@@ -1552,6 +1524,7 @@
 { "linux/perf_event.h", "PERF_EVENT_IOC_DISABLE", _IOC_NONE, 0x2401, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ENABLE", _IOC_NONE, 0x2400, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ID", _IOC_READ, 0x2407, 0x04 },
+{ "linux/perf_event.h", "PERF_EVENT_IOC_MODIFY_ATTRIBUTES", _IOC_WRITE, 0x240b, 0x04 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PAUSE_OUTPUT", _IOC_WRITE, 0x2409, 0x04 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PERIOD", _IOC_WRITE, 0x2404, 0x08 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_QUERY_BPF", _IOC_READ|_IOC_WRITE, 0x240a, 0x04 },
@@ -1680,6 +1653,7 @@
 { "linux/random.h", "RNDCLEARPOOL", _IOC_NONE, 0x5206, 0x00 },
 { "linux/random.h", "RNDGETENTCNT", _IOC_READ, 0x5200, 0x04 },
 { "linux/random.h", "RNDGETPOOL", _IOC_READ, 0x5202, 0x08 },
+{ "linux/random.h", "RNDRESEEDCRNG", _IOC_NONE, 0x5207, 0x00 },
 { "linux/random.h", "RNDZAPENTCNT", _IOC_NONE, 0x5204, 0x00 },
 { "linux/raw.h", "RAW_GETBIND", _IOC_NONE, 0xac01, 0x00 },
 { "linux/raw.h", "RAW_SETBIND", _IOC_NONE, 0xac00, 0x00 },
@@ -2022,53 +1996,6 @@
 { "linux/tee.h", "TEE_IOC_SUPPL_RECV", _IOC_READ, 0xa406, 0x10 },
 { "linux/tee.h", "TEE_IOC_SUPPL_SEND", _IOC_READ, 0xa407, 0x10 },
 { "linux/tee.h", "TEE_IOC_VERSION", _IOC_READ, 0xa400, 0x0c },
-{ "linux/telephony.h", "OLD_PHONE_RING_START", _IOC_NONE, 0x7187, 0x00 },
-{ "linux/telephony.h", "PHONE_BUSY", _IOC_NONE, 0x71a1, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES", _IOC_NONE, 0x7180, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_CHECK", _IOC_WRITE, 0x7182, 0x04 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_LIST", _IOC_READ, 0x7181, 0x04 },
-{ "linux/telephony.h", "PHONE_CPT_STOP", _IOC_NONE, 0x71a4, 0x00 },
-{ "linux/telephony.h", "PHONE_DIALTONE", _IOC_NONE, 0x71a3, 0x00 },
-{ "linux/telephony.h", "PHONE_DTMF_OOB", _IOC_WRITE, 0x7199, 0x04 },
-{ "linux/telephony.h", "PHONE_DTMF_READY", _IOC_READ, 0x7196, 0x04 },
-{ "linux/telephony.h", "PHONE_EXCEPTION", _IOC_READ, 0x719a, 0x04 },
-{ "linux/telephony.h", "PHONE_FRAME", _IOC_WRITE, 0x718d, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF", _IOC_READ, 0x7197, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF_ASCII", _IOC_READ, 0x7198, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_TONE_OFF_TIME", _IOC_NONE, 0x719f, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_ON_TIME", _IOC_NONE, 0x719e, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_STATE", _IOC_NONE, 0x71a0, 0x00 },
-{ "linux/telephony.h", "PHONE_HOOKSTATE", _IOC_NONE, 0x7184, 0x00 },
-{ "linux/telephony.h", "PHONE_MAXRINGS", _IOC_WRITE, 0x7185, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_CODEC", _IOC_WRITE, 0x7190, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_DEPTH", _IOC_WRITE, 0x7193, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_LEVEL", _IOC_NONE, 0x7195, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_START", _IOC_NONE, 0x7191, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_STOP", _IOC_NONE, 0x7192, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_TONE", _IOC_WRITE, 0x719b, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME", _IOC_WRITE, 0x7194, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME_LINEAR", _IOC_WRITE, 0x71dc, 0x04 },
-{ "linux/telephony.h", "PHONE_PSTN_GET_STATE", _IOC_NONE, 0x71a5, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_LINETEST", _IOC_NONE, 0x71a8, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_SET_STATE", _IOC_WRITE, 0x71a4, 0x04 },
-{ "linux/telephony.h", "PHONE_QUERY_CODEC", _IOC_READ|_IOC_WRITE, 0x71a7, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_CODEC", _IOC_WRITE, 0x7189, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_DEPTH", _IOC_WRITE, 0x718c, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_LEVEL", _IOC_NONE, 0x718f, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_START", _IOC_NONE, 0x718a, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_STOP", _IOC_NONE, 0x718b, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME", _IOC_WRITE, 0x718e, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME_LINEAR", _IOC_WRITE, 0x71db, 0x04 },
-{ "linux/telephony.h", "PHONE_RING", _IOC_NONE, 0x7183, 0x00 },
-{ "linux/telephony.h", "PHONE_RINGBACK", _IOC_NONE, 0x71a2, 0x00 },
-{ "linux/telephony.h", "PHONE_RING_CADENCE", _IOC_WRITE, 0x7186, 0x02 },
-{ "linux/telephony.h", "PHONE_RING_START", _IOC_WRITE, 0x7187, 0x04 },
-{ "linux/telephony.h", "PHONE_RING_STOP", _IOC_NONE, 0x7188, 0x00 },
-{ "linux/telephony.h", "PHONE_SET_TONE_OFF_TIME", _IOC_WRITE, 0x719d, 0x04 },
-{ "linux/telephony.h", "PHONE_SET_TONE_ON_TIME", _IOC_WRITE, 0x719c, 0x04 },
-{ "linux/telephony.h", "PHONE_VAD", _IOC_WRITE, 0x71a9, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK", _IOC_WRITE, 0x71aa, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK_DURATION", _IOC_WRITE, 0x71a6, 0x04 },
 { "linux/timerfd.h", "TFD_IOC_SET_TICKS", _IOC_WRITE, 0x5400, 0x08 },
 { "linux/toshiba.h", "TOSHIBA_ACPI_SCI", _IOC_READ|_IOC_WRITE, 0x7491, 0x18 },
 { "linux/toshiba.h", "TOSH_SMM", _IOC_READ|_IOC_WRITE, 0x7490, 0x18 },
@@ -2199,6 +2126,7 @@
 { "linux/vfio.h", "VFIO_DEVICE_GET_IRQ_INFO", _IOC_NONE, 0x3b6d, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_PCI_HOT_RESET_INFO", _IOC_NONE, 0x3b70, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_REGION_INFO", _IOC_NONE, 0x3b6c, 0x00 },
+{ "linux/vfio.h", "VFIO_DEVICE_IOEVENTFD", _IOC_NONE, 0x3b74, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_PCI_HOT_RESET", _IOC_NONE, 0x3b71, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_QUERY_GFX_PLANE", _IOC_NONE, 0x3b72, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_RESET", _IOC_NONE, 0x3b6f, 0x00 },
@@ -2537,7 +2465,7 @@
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT", _IOC_READ|_IOC_WRITE, 0x1b01, 0x1c },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT2", _IOC_READ|_IOC_WRITE, 0x1b04, 0x28 },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_UNREGISTER_AGENT", _IOC_WRITE, 0x1b02, 0x04 },
-{ "rdma/rdma_user_ioctl.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x10 },
+{ "rdma/rdma_user_ioctl_cmds.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x18 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_ATTACH", _IOC_READ|_IOC_WRITE, 0xca80, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_DETACH", _IOC_READ|_IOC_WRITE, 0xca83, 0x60 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_MANAGE_LUN", _IOC_READ|_IOC_WRITE, 0xca86, 0x68 },
diff --git a/linux/32/syscallent.h b/linux/32/syscallent.h
index b53bf88..8b05c75 100644
--- a/linux/32/syscallent.h
+++ b/linux/32/syscallent.h
@@ -282,6 +282,7 @@
 [289] = { 2,	0,		SEN(pkey_alloc),		"pkey_alloc"		},
 [290] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
 [291] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
+[292] = { 6,	0,		SEN(io_pgetevents),		"io_pgetevents"		},
 
 #undef sys_ARCH_mmap
 #undef ARCH_WANT_SYNC_FILE_RANGE2
diff --git a/linux/64/ioctls_inc.h b/linux/64/ioctls_inc.h
index b31b321..e4b4a66 100644
--- a/linux/64/ioctls_inc.h
+++ b/linux/64/ioctls_inc.h
@@ -283,6 +283,7 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_ADD_CONFIG", _IOC_WRITE, 0x6477, 0x48 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_OPEN", _IOC_WRITE, 0x6476, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_REMOVE_CONFIG", _IOC_WRITE, 0x6478, 0x08 },
+{ "drm/i915_drm.h", "DRM_IOCTL_I915_QUERY", _IOC_READ|_IOC_WRITE, 0x6479, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_REG_READ", _IOC_READ|_IOC_WRITE, 0x6471, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SETPARAM", _IOC_WRITE, 0x6447, 0x08 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SET_SPRITE_COLORKEY", _IOC_READ|_IOC_WRITE, 0x646b, 0x14 },
@@ -422,8 +423,11 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_LABEL_BO", _IOC_READ|_IOC_WRITE, 0x644a, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_CREATE", _IOC_READ|_IOC_WRITE, 0x644c, 0x18 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_DESTROY", _IOC_READ|_IOC_WRITE, 0x644d, 0x04 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_GET_VALUES", _IOC_READ|_IOC_WRITE, 0x644e, 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_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa8 },
 { "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 },
 { "drm/vgem_drm.h", "DRM_IOCTL_VGEM_FENCE_ATTACH", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -1160,6 +1164,7 @@
 { "linux/if_tun.h", "TUNSETVNETHDRSZ", _IOC_WRITE, 0x54d8, 0x04 },
 { "linux/if_tun.h", "TUNSETVNETLE", _IOC_WRITE, 0x54dc, 0x04 },
 { "linux/iio/events.h", "IIO_GET_EVENT_FD_IOCTL", _IOC_READ, 0x6990, 0x04 },
+{ "linux/inotify.h", "INOTIFY_IOC_SETNEXTWD", _IOC_WRITE, 0x4900, 0x04 },
 { "linux/input.h", "EVIOCGEFFECTS", _IOC_READ, 0x4584, 0x04 },
 { "linux/input.h", "EVIOCGID", _IOC_READ, 0x4502, 0x08 },
 { "linux/input.h", "EVIOCGKEYCODE", _IOC_READ, 0x4504, 0x08 },
@@ -1197,6 +1202,9 @@
 { "linux/ipmi.h", "IPMICTL_SET_TIMING_PARMS_CMD", _IOC_READ, 0x6916, 0x08 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD", _IOC_READ, 0x690f, 0x02 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD_CHANS", _IOC_READ, 0x691d, 0x0c },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_CLEAR_SMS_ATN", _IOC_NONE, 0xb101, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_FORCE_ABORT", _IOC_NONE, 0xb102, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_SET_SMS_ATN", _IOC_NONE, 0xb100, 0x00 },
 { "linux/isdn.h", "IIOCDBGVAR", _IOC_NONE, 0x497f, 0x00 },
 { "linux/isdn.h", "IIOCDRVCTL", _IOC_NONE, 0x4980, 0x00 },
 { "linux/isdn.h", "IIOCGETCPS", _IOC_NONE, 0x4915, 0x00 },
@@ -1238,48 +1246,6 @@
 { "linux/ivtv.h", "IVTV_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x40 },
 { "linux/ivtv.h", "IVTV_IOC_PASSTHROUGH_MODE", _IOC_WRITE, 0x56c1, 0x04 },
 { "linux/ivtvfb.h", "IVTVFB_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x18 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_GET_LEVEL", _IOC_NONE, 0x71cd, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_START", _IOC_WRITE, 0x71cb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_STOP", _IOC_NONE, 0x71cc, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_CARDTYPE", _IOC_READ, 0x71c1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_CID", _IOC_READ, 0x71d4, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_CIDCW", _IOC_WRITE, 0x71d9, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_AGAIN", _IOC_WRITE, 0x71d2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_COEFF_SET", _IOC_WRITE, 0x71d0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_CLEAR", _IOC_NONE, 0x71e7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_READ", _IOC_READ, 0x71e6, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_IDLE", _IOC_NONE, 0x71c5, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_RESET", _IOC_NONE, 0x71c0, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_TYPE", _IOC_READ, 0x71c3, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_VERSION", _IOC_READ, 0x71c4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DTMF_PRESCALE", _IOC_WRITE, 0x71e8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FILTER_CADENCE", _IOC_WRITE, 0x71d6, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_READ", _IOC_READ, 0x71e2, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_WRITTEN", _IOC_READ, 0x71e3, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_GET_FILTER_HIST", _IOC_WRITE, 0x71c8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_HZ", _IOC_WRITE, 0x71e0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INIT_TONE", _IOC_WRITE, 0x71c9, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_START", _IOC_WRITE, 0x71fd, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_STOP", _IOC_WRITE, 0x71fe, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_MIXER", _IOC_WRITE, 0x71cf, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PLAY_CID", _IOC_NONE, 0x71d7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_PORT", _IOC_WRITE, 0x71d1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_POTS_PSTN", _IOC_WRITE, 0x71d5, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PSTN_LINETEST", _IOC_NONE, 0x71d3, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_RATE", _IOC_WRITE, 0x71e1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_READ_WAIT", _IOC_READ, 0x71e4, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_SC_RXG", _IOC_WRITE, 0x71ea, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SC_TXG", _IOC_WRITE, 0x71eb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SERIAL", _IOC_READ, 0x71c2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER", _IOC_WRITE, 0x71c7, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER_RAW", _IOC_WRITE, 0x71dd, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_SET_LED", _IOC_WRITE, 0x71ce, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SIGCTL", _IOC_WRITE, 0x71e9, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_TESTRAM", _IOC_NONE, 0x71c6, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_TONE_CADENCE", _IOC_WRITE, 0x71ca, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_VERSION", _IOC_READ, 0x71da, 0x08 },
-{ "linux/ixjuser.h", "IXJCTL_VMWI", _IOC_READ, 0x71d8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_WRITE_WAIT", _IOC_READ, 0x71e5, 0x08 },
 { "linux/joystick.h", "JSIOCGAXES", _IOC_READ, 0x6a11, 0x01 },
 { "linux/joystick.h", "JSIOCGAXMAP", _IOC_READ, 0x6a32, 0x40 },
 { "linux/joystick.h", "JSIOCGBTNMAP", _IOC_READ, 0x6a34, 0x400 },
@@ -1338,6 +1304,8 @@
 { "linux/kd.h", "PIO_UNIMAP", 0, 0x4B67, 0 },
 { "linux/kd.h", "PIO_UNIMAPCLR", 0, 0x4B68, 0 },
 { "linux/kd.h", "PIO_UNISCRNMAP", 0, 0x4B6A, 0 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ACQUIRE_VM", _IOC_WRITE, 0x4b15, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ALLOC_MEMORY_OF_GPU", _IOC_READ|_IOC_WRITE, 0x4b16, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_EVENT", _IOC_READ|_IOC_WRITE, 0x4b08, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b02, 0x58 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_ADDRESS_WATCH", _IOC_WRITE, 0x4b0f, 0x10 },
@@ -1346,15 +1314,19 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_WAVE_CONTROL", _IOC_WRITE, 0x4b10, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_EVENT", _IOC_WRITE, 0x4b09, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_FREE_MEMORY_OF_GPU", _IOC_WRITE, 0x4b17, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_CLOCK_COUNTERS", _IOC_READ|_IOC_WRITE, 0x4b05, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES", _IOC_READ, 0x4b06, 0x190 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES_NEW", _IOC_READ|_IOC_WRITE, 0x4b14, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_TILE_CONFIG", _IOC_READ|_IOC_WRITE, 0x4b12, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_VERSION", _IOC_READ, 0x4b01, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_MAP_MEMORY_TO_GPU", _IOC_READ|_IOC_WRITE, 0x4b18, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_RESET_EVENT", _IOC_WRITE, 0x4b0b, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_EVENT", _IOC_WRITE, 0x4b0a, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_MEMORY_POLICY", _IOC_WRITE, 0x4b04, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", _IOC_READ|_IOC_WRITE, 0x4b11, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_TRAP_HANDLER", _IOC_WRITE, 0x4b13, 0x18 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU", _IOC_READ|_IOC_WRITE, 0x4b19, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_UPDATE_QUEUE", _IOC_WRITE, 0x4b07, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_WAIT_EVENTS", _IOC_READ|_IOC_WRITE, 0x4b0c, 0x18 },
 { "linux/lightnvm.h", "NVME_NVM_IOCTL_ADMIN_VIO", _IOC_READ|_IOC_WRITE, 0x4c41, 0x50 },
@@ -1552,6 +1524,7 @@
 { "linux/perf_event.h", "PERF_EVENT_IOC_DISABLE", _IOC_NONE, 0x2401, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ENABLE", _IOC_NONE, 0x2400, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ID", _IOC_READ, 0x2407, 0x08 },
+{ "linux/perf_event.h", "PERF_EVENT_IOC_MODIFY_ATTRIBUTES", _IOC_WRITE, 0x240b, 0x08 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PAUSE_OUTPUT", _IOC_WRITE, 0x2409, 0x04 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PERIOD", _IOC_WRITE, 0x2404, 0x08 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_QUERY_BPF", _IOC_READ|_IOC_WRITE, 0x240a, 0x08 },
@@ -1680,6 +1653,7 @@
 { "linux/random.h", "RNDCLEARPOOL", _IOC_NONE, 0x5206, 0x00 },
 { "linux/random.h", "RNDGETENTCNT", _IOC_READ, 0x5200, 0x04 },
 { "linux/random.h", "RNDGETPOOL", _IOC_READ, 0x5202, 0x08 },
+{ "linux/random.h", "RNDRESEEDCRNG", _IOC_NONE, 0x5207, 0x00 },
 { "linux/random.h", "RNDZAPENTCNT", _IOC_NONE, 0x5204, 0x00 },
 { "linux/raw.h", "RAW_GETBIND", _IOC_NONE, 0xac01, 0x00 },
 { "linux/raw.h", "RAW_SETBIND", _IOC_NONE, 0xac00, 0x00 },
@@ -2022,53 +1996,6 @@
 { "linux/tee.h", "TEE_IOC_SUPPL_RECV", _IOC_READ, 0xa406, 0x10 },
 { "linux/tee.h", "TEE_IOC_SUPPL_SEND", _IOC_READ, 0xa407, 0x10 },
 { "linux/tee.h", "TEE_IOC_VERSION", _IOC_READ, 0xa400, 0x0c },
-{ "linux/telephony.h", "OLD_PHONE_RING_START", _IOC_NONE, 0x7187, 0x00 },
-{ "linux/telephony.h", "PHONE_BUSY", _IOC_NONE, 0x71a1, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES", _IOC_NONE, 0x7180, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_CHECK", _IOC_WRITE, 0x7182, 0x08 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_LIST", _IOC_READ, 0x7181, 0x08 },
-{ "linux/telephony.h", "PHONE_CPT_STOP", _IOC_NONE, 0x71a4, 0x00 },
-{ "linux/telephony.h", "PHONE_DIALTONE", _IOC_NONE, 0x71a3, 0x00 },
-{ "linux/telephony.h", "PHONE_DTMF_OOB", _IOC_WRITE, 0x7199, 0x04 },
-{ "linux/telephony.h", "PHONE_DTMF_READY", _IOC_READ, 0x7196, 0x04 },
-{ "linux/telephony.h", "PHONE_EXCEPTION", _IOC_READ, 0x719a, 0x04 },
-{ "linux/telephony.h", "PHONE_FRAME", _IOC_WRITE, 0x718d, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF", _IOC_READ, 0x7197, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF_ASCII", _IOC_READ, 0x7198, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_TONE_OFF_TIME", _IOC_NONE, 0x719f, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_ON_TIME", _IOC_NONE, 0x719e, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_STATE", _IOC_NONE, 0x71a0, 0x00 },
-{ "linux/telephony.h", "PHONE_HOOKSTATE", _IOC_NONE, 0x7184, 0x00 },
-{ "linux/telephony.h", "PHONE_MAXRINGS", _IOC_WRITE, 0x7185, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_CODEC", _IOC_WRITE, 0x7190, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_DEPTH", _IOC_WRITE, 0x7193, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_LEVEL", _IOC_NONE, 0x7195, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_START", _IOC_NONE, 0x7191, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_STOP", _IOC_NONE, 0x7192, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_TONE", _IOC_WRITE, 0x719b, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME", _IOC_WRITE, 0x7194, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME_LINEAR", _IOC_WRITE, 0x71dc, 0x04 },
-{ "linux/telephony.h", "PHONE_PSTN_GET_STATE", _IOC_NONE, 0x71a5, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_LINETEST", _IOC_NONE, 0x71a8, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_SET_STATE", _IOC_WRITE, 0x71a4, 0x04 },
-{ "linux/telephony.h", "PHONE_QUERY_CODEC", _IOC_READ|_IOC_WRITE, 0x71a7, 0x08 },
-{ "linux/telephony.h", "PHONE_REC_CODEC", _IOC_WRITE, 0x7189, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_DEPTH", _IOC_WRITE, 0x718c, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_LEVEL", _IOC_NONE, 0x718f, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_START", _IOC_NONE, 0x718a, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_STOP", _IOC_NONE, 0x718b, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME", _IOC_WRITE, 0x718e, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME_LINEAR", _IOC_WRITE, 0x71db, 0x04 },
-{ "linux/telephony.h", "PHONE_RING", _IOC_NONE, 0x7183, 0x00 },
-{ "linux/telephony.h", "PHONE_RINGBACK", _IOC_NONE, 0x71a2, 0x00 },
-{ "linux/telephony.h", "PHONE_RING_CADENCE", _IOC_WRITE, 0x7186, 0x02 },
-{ "linux/telephony.h", "PHONE_RING_START", _IOC_WRITE, 0x7187, 0x08 },
-{ "linux/telephony.h", "PHONE_RING_STOP", _IOC_NONE, 0x7188, 0x00 },
-{ "linux/telephony.h", "PHONE_SET_TONE_OFF_TIME", _IOC_WRITE, 0x719d, 0x04 },
-{ "linux/telephony.h", "PHONE_SET_TONE_ON_TIME", _IOC_WRITE, 0x719c, 0x04 },
-{ "linux/telephony.h", "PHONE_VAD", _IOC_WRITE, 0x71a9, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK", _IOC_WRITE, 0x71aa, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK_DURATION", _IOC_WRITE, 0x71a6, 0x04 },
 { "linux/timerfd.h", "TFD_IOC_SET_TICKS", _IOC_WRITE, 0x5400, 0x08 },
 { "linux/toshiba.h", "TOSHIBA_ACPI_SCI", _IOC_READ|_IOC_WRITE, 0x7491, 0x18 },
 { "linux/toshiba.h", "TOSH_SMM", _IOC_READ|_IOC_WRITE, 0x7490, 0x18 },
@@ -2199,6 +2126,7 @@
 { "linux/vfio.h", "VFIO_DEVICE_GET_IRQ_INFO", _IOC_NONE, 0x3b6d, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_PCI_HOT_RESET_INFO", _IOC_NONE, 0x3b70, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_REGION_INFO", _IOC_NONE, 0x3b6c, 0x00 },
+{ "linux/vfio.h", "VFIO_DEVICE_IOEVENTFD", _IOC_NONE, 0x3b74, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_PCI_HOT_RESET", _IOC_NONE, 0x3b71, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_QUERY_GFX_PLANE", _IOC_NONE, 0x3b72, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_RESET", _IOC_NONE, 0x3b6f, 0x00 },
@@ -2537,7 +2465,7 @@
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT", _IOC_READ|_IOC_WRITE, 0x1b01, 0x1c },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT2", _IOC_READ|_IOC_WRITE, 0x1b04, 0x28 },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_UNREGISTER_AGENT", _IOC_WRITE, 0x1b02, 0x04 },
-{ "rdma/rdma_user_ioctl.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x10 },
+{ "rdma/rdma_user_ioctl_cmds.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x18 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_ATTACH", _IOC_READ|_IOC_WRITE, 0xca80, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_DETACH", _IOC_READ|_IOC_WRITE, 0xca83, 0x60 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_MANAGE_LUN", _IOC_READ|_IOC_WRITE, 0xca86, 0x68 },
diff --git a/linux/64/syscallent.h b/linux/64/syscallent.h
index 241d944..f25c62e 100644
--- a/linux/64/syscallent.h
+++ b/linux/64/syscallent.h
@@ -275,3 +275,4 @@
 [289] = { 2,	0,		SEN(pkey_alloc),		"pkey_alloc"		},
 [290] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
 [291] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
+[292] = { 6,	0,		SEN(io_pgetevents),		"io_pgetevents"		},
diff --git a/linux/aarch64/errnoent1.h b/linux/aarch64/errnoent1.h
deleted file mode 100644
index a0394d4..0000000
--- a/linux/aarch64/errnoent1.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* ARM personality */
-#include "errnoent.h"
diff --git a/linux/aarch64/signalent1.h b/linux/aarch64/signalent1.h
deleted file mode 100644
index 093cba7..0000000
--- a/linux/aarch64/signalent1.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "signalent.h"
diff --git a/linux/alpha/set_error.c b/linux/alpha/set_error.c
index 169277b..78a247e 100644
--- a/linux/alpha/set_error.c
+++ b/linux/alpha/set_error.c
@@ -1,8 +1,8 @@
 static int
 arch_set_error(struct tcb *tcp)
 {
-	alpha_r0 = tcp->u_error;
-	return upoke(tcp, REG_R0, alpha_r0);
+	return upoke(tcp, REG_A3, (alpha_a3 = 1))
+	       || upoke(tcp, REG_R0, (alpha_r0 = tcp->u_error));
 }
 
 static int
diff --git a/linux/arm/raw_syscall.h b/linux/arm/raw_syscall.h
index 69c7e23..ec534ec 100644
--- a/linux/arm/raw_syscall.h
+++ b/linux/arm/raw_syscall.h
@@ -36,12 +36,27 @@
 raw_syscall_0(const kernel_ulong_t nr, kernel_ulong_t *err)
 {
 	*err = 0;
+
+#ifdef __thumb__ /* && FRAME_POINTERS_ENABLED */
+
+	register kernel_ulong_t rt;
+	register kernel_ulong_t r0 __asm__("r0");
+	__asm__ __volatile__("mov %1,r7; mov r7,%2; swi 0x0; mov r7,%1"
+			     : "=r"(r0), "=&r"(rt)
+			     : "r"(nr)
+			     : "memory");
+
+#else
+
 	register kernel_ulong_t r7 __asm__("r7") = nr;
 	register kernel_ulong_t r0 __asm__("r0");
 	__asm__ __volatile__("swi 0x0"
 			     : "=r"(r0)
 			     : "r"(r7)
 			     : "memory");
+
+#endif
+
 	return r0;
 }
 # define raw_syscall_0 raw_syscall_0
diff --git a/linux/arm/syscallent.h b/linux/arm/syscallent.h
index 76edf99..568d946 100644
--- a/linux/arm/syscallent.h
+++ b/linux/arm/syscallent.h
@@ -423,6 +423,7 @@
 [395] = { 2,	0,		SEN(pkey_alloc),		"pkey_alloc"		},
 [396] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
 [397] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
+[398] = { 4,	0,		SEN(rseq),			"rseq"			},
 
 #ifdef __ARM_EABI__
 # define ARM_FIRST_SHUFFLED_SYSCALL 400
diff --git a/linux/dummy.h b/linux/dummy.h
index 40c0726..9f0b4d3 100644
--- a/linux/dummy.h
+++ b/linux/dummy.h
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
  * Copyright (c) 1993, 1994, 1995 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1995-2017 The strace developers.
+ * Copyright (c) 1995-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,6 +36,7 @@
 #endif
 
 /* still unfinished */
+#define	sys_rseq		printargs
 #define	sys_vm86		printargs
 #define	sys_vm86old		printargs
 
diff --git a/linux/i386/ioctls_arch0.h b/linux/i386/ioctls_arch0.h
index 28df19d..5b6d3f3 100644
--- a/linux/i386/ioctls_arch0.h
+++ b/linux/i386/ioctls_arch0.h
@@ -58,6 +58,7 @@
 { "linux/kvm.h", "KVM_GET_XCRS", _IOC_READ, 0xaea6, 0x188 },
 { "linux/kvm.h", "KVM_GET_XSAVE", _IOC_READ, 0xaea4, 0x1000 },
 { "linux/kvm.h", "KVM_HAS_DEVICE_ATTR", _IOC_WRITE, 0xaee3, 0x18 },
+{ "linux/kvm.h", "KVM_HYPERV_EVENTFD", _IOC_WRITE, 0xaebd, 0x18 },
 { "linux/kvm.h", "KVM_INTERRUPT", _IOC_WRITE, 0xae86, 0x04 },
 { "linux/kvm.h", "KVM_IOEVENTFD", _IOC_WRITE, 0xae79, 0x40 },
 { "linux/kvm.h", "KVM_IRQFD", _IOC_WRITE, 0xae76, 0x20 },
diff --git a/linux/i386/syscallent.h b/linux/i386/syscallent.h
index b00e1d8..fbe6cf8 100644
--- a/linux/i386/syscallent.h
+++ b/linux/i386/syscallent.h
@@ -411,6 +411,8 @@
 [382] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
 [383] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
 [384] = { 2,	TP,		SEN(arch_prctl),		"arch_prctl"		},
+[385] = { 6,	0,		SEN(io_pgetevents),		"io_pgetevents"		},
+[386] = { 4,	0,		SEN(rseq),			"rseq"			},
 
 #define SYS_socket_subcall	400
 #include "subcall.h"
diff --git a/linux/ia64/syscallent.h b/linux/ia64/syscallent.h
index 33b3e8d..e3210fb 100644
--- a/linux/ia64/syscallent.h
+++ b/linux/ia64/syscallent.h
@@ -27,21 +27,6 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- * IA-32 syscalls that have pointer arguments which are incompatible
- * with 64-bit layout get redirected to printargs.
- */
-#if CST > 0
-# undef SYS_FUNC_NAME
-# define SYS_FUNC_NAME(syscall_name) printargs
-# include "../i386/syscallent.h"
-# undef SYS_FUNC_NAME
-# define SYS_FUNC_NAME(syscall_name) MPERS_FUNC_NAME(syscall_name)
-#endif
-
-/* You must be careful to check ../i386/syscallent.h so that this table
-   starts where that one leaves off.
-*/
 [1024] = { 0,	0,		SEN(printargs),			"ni_syscall"		},
 [1025] = { 1,	TP|SE,		SEN(exit),			"exit"			},
 [1026] = { 3,	TD,		SEN(read),			"read"			},
diff --git a/linux/mips/syscallent-n32.h b/linux/mips/syscallent-n32.h
index c7d35ad..6cc86df 100644
--- a/linux/mips/syscallent-n32.h
+++ b/linux/mips/syscallent-n32.h
@@ -38,7 +38,7 @@
 [6035] = { 2,	0,		SEN(getitimer),			"getitimer"		},
 [6036] = { 3,	0,		SEN(setitimer),			"setitimer"		},
 [6037] = { 1,	0,		SEN(alarm),			"alarm"			},
-[6038] = { 0,	NF,		SEN(getpid),			"getpid"		},
+[6038] = { 0,	PU|NF,		SEN(getpid),			"getpid"		},
 [6039] = { 4,	TD|TN,		SEN(sendfile),			"sendfile"		},
 [6040] = { 3,	TN,		SEN(socket),			"socket"		},
 [6041] = { 3,	TN,		SEN(connect),			"connect"		},
@@ -100,16 +100,16 @@
 [6097] = { 1,	0,		SEN(sysinfo),			"sysinfo"		},
 [6098] = { 1,	0,		SEN(times),			"times"			},
 [6099] = { 4,	0,		SEN(ptrace),			"ptrace"		},
-[6100] = { 0,	NF,		SEN(getuid),			"getuid"		},
+[6100] = { 0,	PU|NF,		SEN(getuid),			"getuid"		},
 [6101] = { 3,	0,		SEN(syslog),			"syslog"		},
-[6102] = { 0,	NF,		SEN(getgid),			"getgid"		},
+[6102] = { 0,	PU|NF,		SEN(getgid),			"getgid"		},
 [6103] = { 1,	0,		SEN(setuid),			"setuid"		},
 [6104] = { 1,	0,		SEN(setgid),			"setgid"		},
-[6105] = { 0,	NF,		SEN(geteuid),			"geteuid"		},
-[6106] = { 0,	NF,		SEN(getegid),			"getegid"		},
+[6105] = { 0,	PU|NF,		SEN(geteuid),			"geteuid"		},
+[6106] = { 0,	PU|NF,		SEN(getegid),			"getegid"		},
 [6107] = { 2,	0,		SEN(setpgid),			"setpgid"		},
-[6108] = { 0,	NF,		SEN(getppid),			"getppid"		},
-[6109] = { 0,	0,		SEN(getpgrp),			"getpgrp"		},
+[6108] = { 0,	PU|NF,		SEN(getppid),			"getppid"		},
+[6109] = { 0,	PU|NF,		SEN(getpgrp),			"getpgrp"		},
 [6110] = { 0,	0,		SEN(setsid),			"setsid"		},
 [6111] = { 2,	0,		SEN(setreuid),			"setreuid"		},
 [6112] = { 2,	0,		SEN(setregid),			"setregid"		},
@@ -178,7 +178,7 @@
 [6175] = { 5,	TN,		SEN(putpmsg),			"putpmsg"		},
 [6176] = { 0,	0,		SEN(afs_syscall),		"afs_syscall"		},
 [6177] = { 0,	0,		SEN(printargs),			"reserved177"		},
-[6178] = { 0,	NF,		SEN(gettid),			"gettid"		},
+[6178] = { 0,	PU|NF,		SEN(gettid),			"gettid"		},
 [6179] = { 3,	TD,		SEN(readahead),			"readahead"		},
 [6180] = { 5,	TF,		SEN(setxattr),			"setxattr"		},
 [6181] = { 5,	TF,		SEN(setxattr),			"lsetxattr"		},
diff --git a/linux/mips/syscallent-n64.h b/linux/mips/syscallent-n64.h
index 3e55848..892e92e 100644
--- a/linux/mips/syscallent-n64.h
+++ b/linux/mips/syscallent-n64.h
@@ -38,7 +38,7 @@
 [5035] = { 2,	0,		SEN(getitimer),			"getitimer"		},
 [5036] = { 3,	0,		SEN(setitimer),			"setitimer"		},
 [5037] = { 1,	0,		SEN(alarm),			"alarm"			},
-[5038] = { 0,	NF,		SEN(getpid),			"getpid"		},
+[5038] = { 0,	PU|NF,		SEN(getpid),			"getpid"		},
 [5039] = { 4,	TD|TN,		SEN(sendfile),			"sendfile"		},
 [5040] = { 3,	TN,		SEN(socket),			"socket"		},
 [5041] = { 3,	TN,		SEN(connect),			"connect"		},
@@ -100,16 +100,16 @@
 [5097] = { 1,	0,		SEN(sysinfo),			"sysinfo"		},
 [5098] = { 1,	0,		SEN(times),			"times"			},
 [5099] = { 4,	0,		SEN(ptrace),			"ptrace"		},
-[5100] = { 0,	NF,		SEN(getuid),			"getuid"		},
+[5100] = { 0,	PU|NF,		SEN(getuid),			"getuid"		},
 [5101] = { 3,	0,		SEN(syslog),			"syslog"		},
-[5102] = { 0,	NF,		SEN(getgid),			"getgid"		},
+[5102] = { 0,	PU|NF,		SEN(getgid),			"getgid"		},
 [5103] = { 1,	0,		SEN(setuid),			"setuid"		},
 [5104] = { 1,	0,		SEN(setgid),			"setgid"		},
-[5105] = { 0,	NF,		SEN(geteuid),			"geteuid"		},
-[5106] = { 0,	NF,		SEN(getegid),			"getegid"		},
+[5105] = { 0,	PU|NF,		SEN(geteuid),			"geteuid"		},
+[5106] = { 0,	PU|NF,		SEN(getegid),			"getegid"		},
 [5107] = { 2,	0,		SEN(setpgid),			"setpgid"		},
-[5108] = { 0,	NF,		SEN(getppid),			"getppid"		},
-[5109] = { 0,	0,		SEN(getpgrp),			"getpgrp"		},
+[5108] = { 0,	PU|NF,		SEN(getppid),			"getppid"		},
+[5109] = { 0,	PU|NF,		SEN(getpgrp),			"getpgrp"		},
 [5110] = { 0,	0,		SEN(setsid),			"setsid"		},
 [5111] = { 2,	0,		SEN(setreuid),			"setreuid"		},
 [5112] = { 2,	0,		SEN(setregid),			"setregid"		},
@@ -178,7 +178,7 @@
 [5175] = { 5,	TN,		SEN(putpmsg),			"putpmsg"		},
 [5176] = { 0,	0,		SEN(afs_syscall),		"afs_syscall"		},
 [5177] = { 0,	0,		SEN(printargs),			"reserved177"		},
-[5178] = { 0,	NF,		SEN(gettid),			"gettid"		},
+[5178] = { 0,	PU|NF,		SEN(gettid),			"gettid"		},
 [5179] = { 3,	TD,		SEN(readahead),			"readahead"		},
 [5180] = { 5,	TF,		SEN(setxattr),			"setxattr"		},
 [5181] = { 5,	TF,		SEN(setxattr),			"lsetxattr"		},
diff --git a/linux/mips/syscallent-o32.h b/linux/mips/syscallent-o32.h
index 4041907..66cf0cd 100644
--- a/linux/mips/syscallent-o32.h
+++ b/linux/mips/syscallent-o32.h
@@ -21,11 +21,11 @@
 [4017] = { 0,	TM,		SEN(break),			"break"			},
 [4018] = { 2,	TF|TST|TSTA,	SEN(oldstat),			"oldstat"		},
 [4019] = { 3,	TD,		SEN(lseek),			"lseek"			},
-[4020] = { 0,	NF,		SEN(getpid),			"getpid"		},
+[4020] = { 0,	PU|NF,		SEN(getpid),			"getpid"		},
 [4021] = { 5,	TF,		SEN(mount),			"mount"			},
 [4022] = { 1,	TF,		SEN(umount),			"umount"		},
 [4023] = { 1,	0,		SEN(setuid),			"setuid"		},
-[4024] = { 0,	NF,		SEN(getuid),			"getuid"		},
+[4024] = { 0,	PU|NF,		SEN(getuid),			"getuid"		},
 [4025] = { 1,	0,		SEN(stime),			"stime"			},
 [4026] = { 4,	0,		SEN(ptrace),			"ptrace"		},
 [4027] = { 1,	0,		SEN(alarm),			"alarm"			},
@@ -48,10 +48,10 @@
 [4044] = { 0,	0,		SEN(prof),			"prof"			},
 [4045] = { 1,	TM|SI,		SEN(brk),			"brk"			},
 [4046] = { 1,	0,		SEN(setgid),			"setgid"		},
-[4047] = { 0,	NF,		SEN(getgid),			"getgid"		},
+[4047] = { 0,	PU|NF,		SEN(getgid),			"getgid"		},
 [4048] = { 2,	TS,		SEN(signal),			"signal"		},
-[4049] = { 0,	NF,		SEN(geteuid),			"geteuid"		},
-[4050] = { 0,	NF,		SEN(getegid),			"getegid"		},
+[4049] = { 0,	PU|NF,		SEN(geteuid),			"geteuid"		},
+[4050] = { 0,	PU|NF,		SEN(getegid),			"getegid"		},
 [4051] = { 1,	TF,		SEN(acct),			"acct"			},
 [4052] = { 2,	TF,		SEN(umount2),			"umount2"		},
 [4053] = { 0,	0,		SEN(lock),			"lock"			},
@@ -65,8 +65,8 @@
 [4061] = { 1,	TF,		SEN(chroot),			"chroot"		},
 [4062] = { 2,	TSFA,		SEN(ustat),			"ustat"			},
 [4063] = { 2,	TD,		SEN(dup2),			"dup2"			},
-[4064] = { 0,	NF,		SEN(getppid),			"getppid"		},
-[4065] = { 0,	0,		SEN(getpgrp),			"getpgrp"		},
+[4064] = { 0,	PU|NF,		SEN(getppid),			"getppid"		},
+[4065] = { 0,	PU|NF,		SEN(getpgrp),			"getpgrp"		},
 [4066] = { 0,	0,		SEN(setsid),			"setsid"		},
 [4067] = { 3,	TS,		SEN(sigaction),			"sigaction"		},
 [4068] = { 0,	TS,		SEN(sgetmask),			"sgetmask"		},
@@ -223,7 +223,7 @@
 [4219] = { 3,	TD,		SEN(getdents64),		"getdents64"		},
 [4220] = { 3,	TD,		SEN(fcntl64),			"fcntl64"		},
 [4221] = { },
-[4222] = { 0,	NF,		SEN(gettid),			"gettid"		},
+[4222] = { 0,	PU|NF,		SEN(gettid),			"gettid"		},
 [4223] = { 5,	TD,		SEN(readahead),			"readahead"		},
 [4224] = { 5,	TF,		SEN(setxattr),			"setxattr"		},
 [4225] = { 5,	TF,		SEN(setxattr),			"lsetxattr"		},
diff --git a/linux/powerpc/set_error.c b/linux/powerpc/set_error.c
index 38ae32b..602ca15 100644
--- a/linux/powerpc/set_error.c
+++ b/linux/powerpc/set_error.c
@@ -2,8 +2,10 @@
 arch_set_error(struct tcb *tcp)
 {
 	ppc_regs.gpr[3] = tcp->u_error;
+	ppc_regs.ccr |= 0x10000000;
 #ifdef HAVE_GETREGS_OLD
-	return upoke(tcp, sizeof(long) * (PT_R0 + 3), ppc_regs.gpr[3]);
+	return upoke(tcp, sizeof(long) * PT_CCR, ppc_regs.ccr) ||
+	       upoke(tcp, sizeof(long) * (PT_R0 + 3), ppc_regs.gpr[3]);
 #else
 	return set_regs(tcp->pid);
 #endif
diff --git a/linux/powerpc/syscallent.h b/linux/powerpc/syscallent.h
index d0bcbba..3333794 100644
--- a/linux/powerpc/syscallent.h
+++ b/linux/powerpc/syscallent.h
@@ -414,6 +414,7 @@
 [384] = { 2,	0,		SEN(pkey_alloc),		"pkey_alloc"		},
 [385] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
 [386] = { 4,	TM|SI,		SEN(pkey_mprotect),		"pkey_mprotect"		},
+[387] = { 4,	0,		SEN(rseq),			"rseq"			},
 
 #define SYS_socket_subcall	400
 #include "subcall.h"
diff --git a/linux/powerpc64/errnoent1.h b/linux/powerpc64/errnoent1.h
deleted file mode 100644
index c0f7787..0000000
--- a/linux/powerpc64/errnoent1.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "errnoent.h"
diff --git a/linux/powerpc64/signalent1.h b/linux/powerpc64/signalent1.h
deleted file mode 100644
index 093cba7..0000000
--- a/linux/powerpc64/signalent1.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "signalent.h"
diff --git a/linux/powerpc64/syscallent.h b/linux/powerpc64/syscallent.h
index 74362c6..6bdd4c1 100644
--- a/linux/powerpc64/syscallent.h
+++ b/linux/powerpc64/syscallent.h
@@ -409,6 +409,7 @@
 [384] = { 2,	0,		SEN(pkey_alloc),		"pkey_alloc"		},
 [385] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
 [386] = { 4,	TM|SI,		SEN(pkey_mprotect),		"pkey_mprotect"		},
+[387] = { 4,	0,		SEN(rseq),			"rseq"			},
 
 #define SYS_socket_subcall	400
 #include "subcall.h"
diff --git a/linux/riscv/errnoent1.h b/linux/riscv/errnoent1.h
deleted file mode 100644
index 2a5c728..0000000
--- a/linux/riscv/errnoent1.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* RISC-V rv32 and rv64 */
-#include "../errnoent.h"
diff --git a/linux/riscv/signalent1.h b/linux/riscv/signalent1.h
deleted file mode 100644
index 39891b8..0000000
--- a/linux/riscv/signalent1.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* RISC-V rv32 and rv64 */
-#include "../signalent.h"
diff --git a/linux/s390/syscallent.h b/linux/s390/syscallent.h
index b7e768e..b39779d 100644
--- a/linux/s390/syscallent.h
+++ b/linux/s390/syscallent.h
@@ -410,6 +410,7 @@
 [378] = { 2,	0,		SEN(s390_guarded_storage),	"s390_guarded_storage"	},
 [379] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
 [380] = { 4,	0,		SEN(s390_sthyi),		"s390_sthyi"		},
+[381] = { 5,	TD,		SEN(kexec_file_load),		"kexec_file_load"	},
 
 #define SYS_socket_subcall	400
 #include "subcall.h"
diff --git a/linux/s390x/errnoent1.h b/linux/s390x/errnoent1.h
deleted file mode 100644
index c0f7787..0000000
--- a/linux/s390x/errnoent1.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "errnoent.h"
diff --git a/linux/s390x/signalent1.h b/linux/s390x/signalent1.h
deleted file mode 100644
index 093cba7..0000000
--- a/linux/s390x/signalent1.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "signalent.h"
diff --git a/linux/s390x/syscallent.h b/linux/s390x/syscallent.h
index d16ee94..c4251eb 100644
--- a/linux/s390x/syscallent.h
+++ b/linux/s390x/syscallent.h
@@ -394,6 +394,7 @@
 [378] = { 2,	0,		SEN(s390_guarded_storage),	"s390_guarded_storage"	},
 [379] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
 [380] = { 4,	0,		SEN(s390_sthyi),		"s390_sthyi"		},
+[381] = { 5,	TD,		SEN(kexec_file_load),		"kexec_file_load"	},
 
 #define SYS_socket_subcall	400
 #include "subcall.h"
diff --git a/linux/sparc64/errnoent1.h b/linux/sparc64/errnoent1.h
deleted file mode 100644
index c0f7787..0000000
--- a/linux/sparc64/errnoent1.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "errnoent.h"
diff --git a/linux/sparc64/signalent1.h b/linux/sparc64/signalent1.h
deleted file mode 100644
index 093cba7..0000000
--- a/linux/sparc64/signalent1.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "signalent.h"
diff --git a/linux/tile/errnoent1.h b/linux/tile/errnoent1.h
deleted file mode 100644
index 091df78..0000000
--- a/linux/tile/errnoent1.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* tilegx32/tilepro */
-#include "errnoent.h"
diff --git a/linux/tile/signalent1.h b/linux/tile/signalent1.h
deleted file mode 100644
index 62f1193..0000000
--- a/linux/tile/signalent1.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* tilegx32/tilepro */
-#include "signalent.h"
diff --git a/linux/x32/errnoent1.h b/linux/x32/errnoent1.h
deleted file mode 100644
index d32435a..0000000
--- a/linux/x32/errnoent1.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* i386 personality */
-#include "errnoent.h"
diff --git a/linux/x32/ioctls_inc0.h b/linux/x32/ioctls_inc0.h
index 7356681..1d9c6f3 100644
--- a/linux/x32/ioctls_inc0.h
+++ b/linux/x32/ioctls_inc0.h
@@ -283,6 +283,7 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_ADD_CONFIG", _IOC_WRITE, 0x6477, 0x48 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_OPEN", _IOC_WRITE, 0x6476, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_PERF_REMOVE_CONFIG", _IOC_WRITE, 0x6478, 0x08 },
+{ "drm/i915_drm.h", "DRM_IOCTL_I915_QUERY", _IOC_READ|_IOC_WRITE, 0x6479, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_REG_READ", _IOC_READ|_IOC_WRITE, 0x6471, 0x10 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SETPARAM", _IOC_WRITE, 0x6447, 0x08 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_SET_SPRITE_COLORKEY", _IOC_READ|_IOC_WRITE, 0x646b, 0x14 },
@@ -422,8 +423,11 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_LABEL_BO", _IOC_READ|_IOC_WRITE, 0x644a, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_MMAP_BO", _IOC_READ|_IOC_WRITE, 0x6444, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_CREATE", _IOC_READ|_IOC_WRITE, 0x644c, 0x18 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_DESTROY", _IOC_READ|_IOC_WRITE, 0x644d, 0x04 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_PERFMON_GET_VALUES", _IOC_READ|_IOC_WRITE, 0x644e, 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_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa8 },
 { "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 },
 { "drm/vgem_drm.h", "DRM_IOCTL_VGEM_FENCE_ATTACH", _IOC_READ|_IOC_WRITE, 0x6441, 0x10 },
@@ -1160,6 +1164,7 @@
 { "linux/if_tun.h", "TUNSETVNETHDRSZ", _IOC_WRITE, 0x54d8, 0x04 },
 { "linux/if_tun.h", "TUNSETVNETLE", _IOC_WRITE, 0x54dc, 0x04 },
 { "linux/iio/events.h", "IIO_GET_EVENT_FD_IOCTL", _IOC_READ, 0x6990, 0x04 },
+{ "linux/inotify.h", "INOTIFY_IOC_SETNEXTWD", _IOC_WRITE, 0x4900, 0x04 },
 { "linux/input.h", "EVIOCGEFFECTS", _IOC_READ, 0x4584, 0x04 },
 { "linux/input.h", "EVIOCGID", _IOC_READ, 0x4502, 0x08 },
 { "linux/input.h", "EVIOCGKEYCODE", _IOC_READ, 0x4504, 0x08 },
@@ -1197,6 +1202,9 @@
 { "linux/ipmi.h", "IPMICTL_SET_TIMING_PARMS_CMD", _IOC_READ, 0x6916, 0x08 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD", _IOC_READ, 0x690f, 0x02 },
 { "linux/ipmi.h", "IPMICTL_UNREGISTER_FOR_CMD_CHANS", _IOC_READ, 0x691d, 0x0c },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_CLEAR_SMS_ATN", _IOC_NONE, 0xb101, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_FORCE_ABORT", _IOC_NONE, 0xb102, 0x00 },
+{ "linux/ipmi_bmc.h", "IPMI_BMC_IOCTL_SET_SMS_ATN", _IOC_NONE, 0xb100, 0x00 },
 { "linux/isdn.h", "IIOCDBGVAR", _IOC_NONE, 0x497f, 0x00 },
 { "linux/isdn.h", "IIOCDRVCTL", _IOC_NONE, 0x4980, 0x00 },
 { "linux/isdn.h", "IIOCGETCPS", _IOC_NONE, 0x4915, 0x00 },
@@ -1238,48 +1246,6 @@
 { "linux/ivtv.h", "IVTV_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x38 },
 { "linux/ivtv.h", "IVTV_IOC_PASSTHROUGH_MODE", _IOC_WRITE, 0x56c1, 0x04 },
 { "linux/ivtvfb.h", "IVTVFB_IOC_DMA_FRAME", _IOC_WRITE, 0x56c0, 0x0c },
-{ "linux/ixjuser.h", "IXJCTL_AEC_GET_LEVEL", _IOC_NONE, 0x71cd, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_START", _IOC_WRITE, 0x71cb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_AEC_STOP", _IOC_NONE, 0x71cc, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_CARDTYPE", _IOC_READ, 0x71c1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_CID", _IOC_READ, 0x71d4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_CIDCW", _IOC_WRITE, 0x71d9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_AGAIN", _IOC_WRITE, 0x71d2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DAA_COEFF_SET", _IOC_WRITE, 0x71d0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_CLEAR", _IOC_NONE, 0x71e7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DRYBUFFER_READ", _IOC_READ, 0x71e6, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_IDLE", _IOC_NONE, 0x71c5, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_RESET", _IOC_NONE, 0x71c0, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_TYPE", _IOC_READ, 0x71c3, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DSP_VERSION", _IOC_READ, 0x71c4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_DTMF_PRESCALE", _IOC_WRITE, 0x71e8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FILTER_CADENCE", _IOC_WRITE, 0x71d6, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_READ", _IOC_READ, 0x71e2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_FRAMES_WRITTEN", _IOC_READ, 0x71e3, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_GET_FILTER_HIST", _IOC_WRITE, 0x71c8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_HZ", _IOC_WRITE, 0x71e0, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INIT_TONE", _IOC_WRITE, 0x71c9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_START", _IOC_WRITE, 0x71fd, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_INTERCOM_STOP", _IOC_WRITE, 0x71fe, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_MIXER", _IOC_WRITE, 0x71cf, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PLAY_CID", _IOC_NONE, 0x71d7, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_PORT", _IOC_WRITE, 0x71d1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_POTS_PSTN", _IOC_WRITE, 0x71d5, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_PSTN_LINETEST", _IOC_NONE, 0x71d3, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_RATE", _IOC_WRITE, 0x71e1, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_READ_WAIT", _IOC_READ, 0x71e4, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SC_RXG", _IOC_WRITE, 0x71ea, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SC_TXG", _IOC_WRITE, 0x71eb, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SERIAL", _IOC_READ, 0x71c2, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER", _IOC_WRITE, 0x71c7, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_FILTER_RAW", _IOC_WRITE, 0x71dd, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SET_LED", _IOC_WRITE, 0x71ce, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_SIGCTL", _IOC_WRITE, 0x71e9, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_TESTRAM", _IOC_NONE, 0x71c6, 0x00 },
-{ "linux/ixjuser.h", "IXJCTL_TONE_CADENCE", _IOC_WRITE, 0x71ca, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_VERSION", _IOC_READ, 0x71da, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_VMWI", _IOC_READ, 0x71d8, 0x04 },
-{ "linux/ixjuser.h", "IXJCTL_WRITE_WAIT", _IOC_READ, 0x71e5, 0x04 },
 { "linux/joystick.h", "JSIOCGAXES", _IOC_READ, 0x6a11, 0x01 },
 { "linux/joystick.h", "JSIOCGAXMAP", _IOC_READ, 0x6a32, 0x40 },
 { "linux/joystick.h", "JSIOCGBTNMAP", _IOC_READ, 0x6a34, 0x400 },
@@ -1338,6 +1304,8 @@
 { "linux/kd.h", "PIO_UNIMAP", 0, 0x4B67, 0 },
 { "linux/kd.h", "PIO_UNIMAPCLR", 0, 0x4B68, 0 },
 { "linux/kd.h", "PIO_UNISCRNMAP", 0, 0x4B6A, 0 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ACQUIRE_VM", _IOC_WRITE, 0x4b15, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_ALLOC_MEMORY_OF_GPU", _IOC_READ|_IOC_WRITE, 0x4b16, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_EVENT", _IOC_READ|_IOC_WRITE, 0x4b08, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_CREATE_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b02, 0x58 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_ADDRESS_WATCH", _IOC_WRITE, 0x4b0f, 0x10 },
@@ -1346,15 +1314,19 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DBG_WAVE_CONTROL", _IOC_WRITE, 0x4b10, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_EVENT", _IOC_WRITE, 0x4b09, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_FREE_MEMORY_OF_GPU", _IOC_WRITE, 0x4b17, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_CLOCK_COUNTERS", _IOC_READ|_IOC_WRITE, 0x4b05, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES", _IOC_READ, 0x4b06, 0x190 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_PROCESS_APERTURES_NEW", _IOC_READ|_IOC_WRITE, 0x4b14, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_TILE_CONFIG", _IOC_READ|_IOC_WRITE, 0x4b12, 0x28 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_GET_VERSION", _IOC_READ, 0x4b01, 0x08 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_MAP_MEMORY_TO_GPU", _IOC_READ|_IOC_WRITE, 0x4b18, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_RESET_EVENT", _IOC_WRITE, 0x4b0b, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_EVENT", _IOC_WRITE, 0x4b0a, 0x08 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_MEMORY_POLICY", _IOC_WRITE, 0x4b04, 0x20 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", _IOC_READ|_IOC_WRITE, 0x4b11, 0x10 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_SET_TRAP_HANDLER", _IOC_WRITE, 0x4b13, 0x18 },
+{ "linux/kfd_ioctl.h", "AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU", _IOC_READ|_IOC_WRITE, 0x4b19, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_UPDATE_QUEUE", _IOC_WRITE, 0x4b07, 0x18 },
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_WAIT_EVENTS", _IOC_READ|_IOC_WRITE, 0x4b0c, 0x18 },
 { "linux/lightnvm.h", "NVME_NVM_IOCTL_ADMIN_VIO", _IOC_READ|_IOC_WRITE, 0x4c41, 0x50 },
@@ -1552,6 +1524,7 @@
 { "linux/perf_event.h", "PERF_EVENT_IOC_DISABLE", _IOC_NONE, 0x2401, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ENABLE", _IOC_NONE, 0x2400, 0x00 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_ID", _IOC_READ, 0x2407, 0x04 },
+{ "linux/perf_event.h", "PERF_EVENT_IOC_MODIFY_ATTRIBUTES", _IOC_WRITE, 0x240b, 0x04 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PAUSE_OUTPUT", _IOC_WRITE, 0x2409, 0x04 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_PERIOD", _IOC_WRITE, 0x2404, 0x08 },
 { "linux/perf_event.h", "PERF_EVENT_IOC_QUERY_BPF", _IOC_READ|_IOC_WRITE, 0x240a, 0x04 },
@@ -1680,6 +1653,7 @@
 { "linux/random.h", "RNDCLEARPOOL", _IOC_NONE, 0x5206, 0x00 },
 { "linux/random.h", "RNDGETENTCNT", _IOC_READ, 0x5200, 0x04 },
 { "linux/random.h", "RNDGETPOOL", _IOC_READ, 0x5202, 0x08 },
+{ "linux/random.h", "RNDRESEEDCRNG", _IOC_NONE, 0x5207, 0x00 },
 { "linux/random.h", "RNDZAPENTCNT", _IOC_NONE, 0x5204, 0x00 },
 { "linux/raw.h", "RAW_GETBIND", _IOC_NONE, 0xac01, 0x00 },
 { "linux/raw.h", "RAW_SETBIND", _IOC_NONE, 0xac00, 0x00 },
@@ -2022,53 +1996,6 @@
 { "linux/tee.h", "TEE_IOC_SUPPL_RECV", _IOC_READ, 0xa406, 0x10 },
 { "linux/tee.h", "TEE_IOC_SUPPL_SEND", _IOC_READ, 0xa407, 0x10 },
 { "linux/tee.h", "TEE_IOC_VERSION", _IOC_READ, 0xa400, 0x0c },
-{ "linux/telephony.h", "OLD_PHONE_RING_START", _IOC_NONE, 0x7187, 0x00 },
-{ "linux/telephony.h", "PHONE_BUSY", _IOC_NONE, 0x71a1, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES", _IOC_NONE, 0x7180, 0x00 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_CHECK", _IOC_WRITE, 0x7182, 0x04 },
-{ "linux/telephony.h", "PHONE_CAPABILITIES_LIST", _IOC_READ, 0x7181, 0x04 },
-{ "linux/telephony.h", "PHONE_CPT_STOP", _IOC_NONE, 0x71a4, 0x00 },
-{ "linux/telephony.h", "PHONE_DIALTONE", _IOC_NONE, 0x71a3, 0x00 },
-{ "linux/telephony.h", "PHONE_DTMF_OOB", _IOC_WRITE, 0x7199, 0x04 },
-{ "linux/telephony.h", "PHONE_DTMF_READY", _IOC_READ, 0x7196, 0x04 },
-{ "linux/telephony.h", "PHONE_EXCEPTION", _IOC_READ, 0x719a, 0x04 },
-{ "linux/telephony.h", "PHONE_FRAME", _IOC_WRITE, 0x718d, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF", _IOC_READ, 0x7197, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_DTMF_ASCII", _IOC_READ, 0x7198, 0x04 },
-{ "linux/telephony.h", "PHONE_GET_TONE_OFF_TIME", _IOC_NONE, 0x719f, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_ON_TIME", _IOC_NONE, 0x719e, 0x00 },
-{ "linux/telephony.h", "PHONE_GET_TONE_STATE", _IOC_NONE, 0x71a0, 0x00 },
-{ "linux/telephony.h", "PHONE_HOOKSTATE", _IOC_NONE, 0x7184, 0x00 },
-{ "linux/telephony.h", "PHONE_MAXRINGS", _IOC_WRITE, 0x7185, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_CODEC", _IOC_WRITE, 0x7190, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_DEPTH", _IOC_WRITE, 0x7193, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_LEVEL", _IOC_NONE, 0x7195, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_START", _IOC_NONE, 0x7191, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_STOP", _IOC_NONE, 0x7192, 0x00 },
-{ "linux/telephony.h", "PHONE_PLAY_TONE", _IOC_WRITE, 0x719b, 0x01 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME", _IOC_WRITE, 0x7194, 0x04 },
-{ "linux/telephony.h", "PHONE_PLAY_VOLUME_LINEAR", _IOC_WRITE, 0x71dc, 0x04 },
-{ "linux/telephony.h", "PHONE_PSTN_GET_STATE", _IOC_NONE, 0x71a5, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_LINETEST", _IOC_NONE, 0x71a8, 0x00 },
-{ "linux/telephony.h", "PHONE_PSTN_SET_STATE", _IOC_WRITE, 0x71a4, 0x04 },
-{ "linux/telephony.h", "PHONE_QUERY_CODEC", _IOC_READ|_IOC_WRITE, 0x71a7, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_CODEC", _IOC_WRITE, 0x7189, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_DEPTH", _IOC_WRITE, 0x718c, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_LEVEL", _IOC_NONE, 0x718f, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_START", _IOC_NONE, 0x718a, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_STOP", _IOC_NONE, 0x718b, 0x00 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME", _IOC_WRITE, 0x718e, 0x04 },
-{ "linux/telephony.h", "PHONE_REC_VOLUME_LINEAR", _IOC_WRITE, 0x71db, 0x04 },
-{ "linux/telephony.h", "PHONE_RING", _IOC_NONE, 0x7183, 0x00 },
-{ "linux/telephony.h", "PHONE_RINGBACK", _IOC_NONE, 0x71a2, 0x00 },
-{ "linux/telephony.h", "PHONE_RING_CADENCE", _IOC_WRITE, 0x7186, 0x02 },
-{ "linux/telephony.h", "PHONE_RING_START", _IOC_WRITE, 0x7187, 0x04 },
-{ "linux/telephony.h", "PHONE_RING_STOP", _IOC_NONE, 0x7188, 0x00 },
-{ "linux/telephony.h", "PHONE_SET_TONE_OFF_TIME", _IOC_WRITE, 0x719d, 0x04 },
-{ "linux/telephony.h", "PHONE_SET_TONE_ON_TIME", _IOC_WRITE, 0x719c, 0x04 },
-{ "linux/telephony.h", "PHONE_VAD", _IOC_WRITE, 0x71a9, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK", _IOC_WRITE, 0x71aa, 0x04 },
-{ "linux/telephony.h", "PHONE_WINK_DURATION", _IOC_WRITE, 0x71a6, 0x04 },
 { "linux/timerfd.h", "TFD_IOC_SET_TICKS", _IOC_WRITE, 0x5400, 0x08 },
 { "linux/toshiba.h", "TOSHIBA_ACPI_SCI", _IOC_READ|_IOC_WRITE, 0x7491, 0x18 },
 { "linux/toshiba.h", "TOSH_SMM", _IOC_READ|_IOC_WRITE, 0x7490, 0x18 },
@@ -2199,6 +2126,7 @@
 { "linux/vfio.h", "VFIO_DEVICE_GET_IRQ_INFO", _IOC_NONE, 0x3b6d, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_PCI_HOT_RESET_INFO", _IOC_NONE, 0x3b70, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_GET_REGION_INFO", _IOC_NONE, 0x3b6c, 0x00 },
+{ "linux/vfio.h", "VFIO_DEVICE_IOEVENTFD", _IOC_NONE, 0x3b74, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_PCI_HOT_RESET", _IOC_NONE, 0x3b71, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_QUERY_GFX_PLANE", _IOC_NONE, 0x3b72, 0x00 },
 { "linux/vfio.h", "VFIO_DEVICE_RESET", _IOC_NONE, 0x3b6f, 0x00 },
@@ -2537,7 +2465,7 @@
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT", _IOC_READ|_IOC_WRITE, 0x1b01, 0x1c },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_REGISTER_AGENT2", _IOC_READ|_IOC_WRITE, 0x1b04, 0x28 },
 { "rdma/rdma_user_ioctl.h", "IB_USER_MAD_UNREGISTER_AGENT", _IOC_WRITE, 0x1b02, 0x04 },
-{ "rdma/rdma_user_ioctl.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x10 },
+{ "rdma/rdma_user_ioctl_cmds.h", "RDMA_VERBS_IOCTL", _IOC_READ|_IOC_WRITE, 0x1b01, 0x18 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_ATTACH", _IOC_READ|_IOC_WRITE, 0xca80, 0x90 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_DETACH", _IOC_READ|_IOC_WRITE, 0xca83, 0x60 },
 { "scsi/cxlflash_ioctl.h", "DK_CXLFLASH_MANAGE_LUN", _IOC_READ|_IOC_WRITE, 0xca86, 0x68 },
diff --git a/linux/x32/signalent1.h b/linux/x32/signalent1.h
deleted file mode 100644
index fdae15f..0000000
--- a/linux/x32/signalent1.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* i386 personality */
-#include "signalent.h"
diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h
index e448dc5..072a2c3 100644
--- a/linux/x32/syscallent.h
+++ b/linux/x32/syscallent.h
@@ -11,14 +11,14 @@
 [ 10] = { 3,	TM|SI,		SEN(mprotect),			"mprotect"		},
 [ 11] = { 2,	TM|SI,		SEN(munmap),			"munmap"		},
 [ 12] = { 1,	TM|SI,		SEN(brk),			"brk"			},
-[ 13] = { 4,	TS,		SEN(printargs),			"64:rt_sigaction"	},
+[ 13] = { 4,	TS,		SEN(printargs),			"rt_sigaction#64"	},
 [ 14] = { 4,	TS,		SEN(rt_sigprocmask),		"rt_sigprocmask"	},
-[ 15] = { 0,	TS,		SEN(rt_sigreturn),		"64:rt_sigreturn"	},
-[ 16] = { 3,	TD,		SEN(printargs),			"64:ioctl"		},
+[ 15] = { 0,	TS,		SEN(rt_sigreturn),		"rt_sigreturn#64"	},
+[ 16] = { 3,	TD,		SEN(printargs),			"ioctl#64"		},
 [ 17] = { 4,	TD,		SEN(pread),			"pread64"		},
 [ 18] = { 4,	TD,		SEN(pwrite),			"pwrite64"		},
-[ 19] = { 3,	TD,		SEN(printargs),			"64:readv"		},
-[ 20] = { 3,	TD,		SEN(printargs),			"64:writev"		},
+[ 19] = { 3,	TD,		SEN(printargs),			"readv#64"		},
+[ 20] = { 3,	TD,		SEN(printargs),			"writev#64"		},
 [ 21] = { 2,	TF,		SEN(access),			"access"		},
 [ 22] = { 1,	TD,		SEN(pipe),			"pipe"			},
 [ 23] = { 5,	TD,		SEN(select),			"select"		},
@@ -43,21 +43,21 @@
 [ 42] = { 3,	TN,		SEN(connect),			"connect"		},
 [ 43] = { 3,	TN,		SEN(accept),			"accept"		},
 [ 44] = { 6,	TN,		SEN(sendto),			"sendto"		},
-[ 45] = { 6,	TN,		SEN(printargs),			"64:recvfrom"		},
-[ 46] = { 3,	TN,		SEN(printargs),			"64:sendmsg"		},
-[ 47] = { 3,	TN,		SEN(printargs),			"64:recvmsg"		},
+[ 45] = { 6,	TN,		SEN(printargs),			"recvfrom#64"		},
+[ 46] = { 3,	TN,		SEN(printargs),			"sendmsg#64"		},
+[ 47] = { 3,	TN,		SEN(printargs),			"recvmsg#64"		},
 [ 48] = { 2,	TN,		SEN(shutdown),			"shutdown"		},
 [ 49] = { 3,	TN,		SEN(bind),			"bind"			},
 [ 50] = { 2,	TN,		SEN(listen),			"listen"		},
 [ 51] = { 3,	TN,		SEN(getsockname),		"getsockname"		},
 [ 52] = { 3,	TN,		SEN(getpeername),		"getpeername"		},
 [ 53] = { 4,	TN,		SEN(socketpair),		"socketpair"		},
-[ 54] = { 5,	TN,		SEN(printargs),			"64:setsockopt"		},
-[ 55] = { 5,	TN,		SEN(printargs),			"64:getsockopt"		},
+[ 54] = { 5,	TN,		SEN(printargs),			"setsockopt#64"		},
+[ 55] = { 5,	TN,		SEN(printargs),			"getsockopt#64"		},
 [ 56] = { 5,	TP,		SEN(clone),			"clone"			},
 [ 57] = { 0,	TP,		SEN(fork),			"fork"			},
 [ 58] = { 0,	TP,		SEN(vfork),			"vfork"			},
-[ 59] = { 3,	TF|TP|SE|SI,	SEN(printargs),			"64:execve"		},
+[ 59] = { 3,	TF|TP|SE|SI,	SEN(printargs),			"execve#64"		},
 [ 60] = { 1,	TP|SE,		SEN(exit),			"exit"			},
 [ 61] = { 4,	TP,		SEN(wait4),			"wait4"			},
 [ 62] = { 2,	TS,		SEN(kill),			"kill"			},
@@ -99,7 +99,7 @@
 [ 98] = { 2,	0,		SEN(getrusage),			"getrusage"		},
 [ 99] = { 1,	0,		SEN(sysinfo),			"sysinfo"		},
 [100] = { 1,	0,		SEN(times),			"times"			},
-[101] = { 4,	0,		SEN(printargs),			"64:ptrace"		},
+[101] = { 4,	0,		SEN(printargs),			"ptrace#64"		},
 [102] = { 0,	PU|NF,		SEN(getuid),			"getuid"		},
 [103] = { 3,	0,		SEN(syslog),			"syslog"		},
 [104] = { 0,	PU|NF,		SEN(getgid),			"getgid"		},
@@ -125,14 +125,14 @@
 [124] = { 1,	0,		SEN(getsid),			"getsid"		},
 [125] = { 2,	0,		SEN(capget),			"capget"		},
 [126] = { 2,	0,		SEN(capset),			"capset"		},
-[127] = { 2,	TS,		SEN(printargs),			"64:rt_sigpending"	},
-[128] = { 4,	TS,		SEN(printargs),			"64:rt_sigtimedwait"	},
-[129] = { 3,	TS,		SEN(printargs),			"64:rt_sigqueueinfo"	},
+[127] = { 2,	TS,		SEN(printargs),			"rt_sigpending#64"	},
+[128] = { 4,	TS,		SEN(printargs),			"rt_sigtimedwait#64"	},
+[129] = { 3,	TS,		SEN(printargs),			"rt_sigqueueinfo#64"	},
 [130] = { 2,	TS,		SEN(rt_sigsuspend),		"rt_sigsuspend"		},
-[131] = { 2,	TS,		SEN(printargs),			"64:sigaltstack"	},
+[131] = { 2,	TS,		SEN(printargs),			"sigaltstack#64"	},
 [132] = { 2,	TF,		SEN(utime),			"utime"			},
 [133] = { 3,	TF,		SEN(mknod),			"mknod"			},
-[134] = { 1,	TF,		SEN(printargs),			"64:uselib"		},
+[134] = { 1,	TF,		SEN(printargs),			"uselib#64"		},
 [135] = { 1,	NF,		SEN(personality),		"personality"		},
 [136] = { 2,	TSFA,		SEN(ustat),			"ustat"			},
 [137] = { 2,	TF|TSF|TSFA,	SEN(statfs),			"statfs"		},
@@ -154,7 +154,7 @@
 [153] = { 0,	0,		SEN(vhangup),			"vhangup"		},
 [154] = { 3,	0,		SEN(modify_ldt),		"modify_ldt"		},
 [155] = { 2,	TF,		SEN(pivotroot),			"pivot_root"		},
-[156] = { 1,	0,		SEN(printargs),			"64:_sysctl"		},
+[156] = { 1,	0,		SEN(printargs),			"_sysctl#64"		},
 [157] = { 5,	0,		SEN(prctl),			"prctl"			},
 [158] = { 2,	TP,		SEN(arch_prctl),		"arch_prctl"		},
 [159] = { 1,	0,		SEN(adjtimex),			"adjtimex"		},
@@ -172,13 +172,13 @@
 [171] = { 2,	0,		SEN(setdomainname),		"setdomainname"		},
 [172] = { 1,	0,		SEN(iopl),			"iopl"			},
 [173] = { 3,	0,		SEN(ioperm),			"ioperm"		},
-[174] = { 2,	0,		SEN(printargs),			"64:create_module"	},
+[174] = { 2,	0,		SEN(printargs),			"create_module#64"	},
 [175] = { 3,	0,		SEN(init_module),		"init_module"		},
 [176] = { 2,	0,		SEN(delete_module),		"delete_module"		},
-[177] = { 1,	0,		SEN(printargs),			"64:get_kernel_syms"	},
-[178] = { 5,	0,		SEN(printargs),			"64:query_module"	},
+[177] = { 1,	0,		SEN(printargs),			"get_kernel_syms#64"	},
+[178] = { 5,	0,		SEN(printargs),			"query_module#64"	},
 [179] = { 4,	TF,		SEN(quotactl),			"quotactl"		},
-[180] = { 3,	0,		SEN(printargs),			"64:nfsservctl"		},
+[180] = { 3,	0,		SEN(printargs),			"nfsservctl#64"		},
 [181] = { 5,	TN,		SEN(getpmsg),			"getpmsg"		},
 [182] = { 5,	TN,		SEN(putpmsg),			"putpmsg"		},
 [183] = { 5,	0,		SEN(afs_syscall),		"afs_syscall"		},
@@ -203,24 +203,24 @@
 [202] = { 6,	0,		SEN(futex),			"futex"			},
 [203] = { 3,	0,		SEN(sched_setaffinity),		"sched_setaffinity"	},
 [204] = { 3,	0,		SEN(sched_getaffinity),		"sched_getaffinity"	},
-[205] = { 1,	0,		SEN(printargs),			"64:set_thread_area"	},
-[206] = { 2,	TM,		SEN(printargs),			"64:io_setup"		},
+[205] = { 1,	0,		SEN(printargs),			"set_thread_area#64"	},
+[206] = { 2,	TM,		SEN(printargs),			"io_setup#64"		},
 [207] = { 1,	TM,		SEN(io_destroy),		"io_destroy"		},
 [208] = { 5,	0,		SEN(io_getevents),		"io_getevents"		},
-[209] = { 3,	0,		SEN(printargs),			"64:io_submit"		},
+[209] = { 3,	0,		SEN(printargs),			"io_submit#64"		},
 [210] = { 3,	0,		SEN(io_cancel),			"io_cancel"		},
-[211] = { 1,	0,		SEN(printargs),			"64:get_thread_area"	},
+[211] = { 1,	0,		SEN(printargs),			"get_thread_area#64"	},
 [212] = { 3,	0,		SEN(lookup_dcookie),		"lookup_dcookie"	},
 [213] = { 1,	TD,		SEN(epoll_create),		"epoll_create"		},
-[214] = { 4,	0,		SEN(printargs),			"64:epoll_ctl_old"	},
-[215] = { 4,	0,		SEN(printargs),			"64:epoll_wait_old"	},
+[214] = { 4,	0,		SEN(printargs),			"epoll_ctl_old#64"	},
+[215] = { 4,	0,		SEN(printargs),			"epoll_wait_old#64"	},
 [216] = { 5,	TM|SI,		SEN(remap_file_pages),		"remap_file_pages"	},
 [217] = { 3,	TD,		SEN(getdents64),		"getdents64"		},
 [218] = { 1,	0,		SEN(set_tid_address),		"set_tid_address"	},
 [219] = { 0,	0,		SEN(restart_syscall),		"restart_syscall"	},
 [220] = { 4,	TI,		SEN(semtimedop),		"semtimedop"		},
 [221] = { 4,	TD,		SEN(fadvise64),			"fadvise64"		},
-[222] = { 3,	0,		SEN(printargs),			"64:timer_create"	},
+[222] = { 3,	0,		SEN(printargs),			"timer_create#64"	},
 [223] = { 4,	0,		SEN(timer_settime),		"timer_settime"		},
 [224] = { 2,	0,		SEN(timer_gettime),		"timer_gettime"		},
 [225] = { 1,	0,		SEN(timer_getoverrun),		"timer_getoverrun"	},
@@ -234,7 +234,7 @@
 [233] = { 4,	TD,		SEN(epoll_ctl),			"epoll_ctl"		},
 [234] = { 3,	TS,		SEN(tgkill),			"tgkill"		},
 [235] = { 2,	TF,		SEN(utimes),			"utimes"		},
-[236] = { 5,	0,		SEN(printargs),			"64:vserver"		},
+[236] = { 5,	0,		SEN(printargs),			"vserver#64"		},
 [237] = { 6,	TM,		SEN(mbind),			"mbind"			},
 [238] = { 3,	TM,		SEN(set_mempolicy),		"set_mempolicy"		},
 [239] = { 5,	TM,		SEN(get_mempolicy),		"get_mempolicy"		},
@@ -242,10 +242,10 @@
 [241] = { 1,	0,		SEN(mq_unlink),			"mq_unlink"		},
 [242] = { 5,	TD,		SEN(mq_timedsend),		"mq_timedsend"		},
 [243] = { 5,	TD,		SEN(mq_timedreceive),		"mq_timedreceive"	},
-[244] = { 2,	0,		SEN(printargs),			"64:mq_notify"		},
+[244] = { 2,	0,		SEN(printargs),			"mq_notify#64"		},
 [245] = { 3,	TD,		SEN(mq_getsetattr),		"mq_getsetattr"		},
-[246] = { 4,	0,		SEN(printargs),			"64:kexec_load"		},
-[247] = { 5,	TP,		SEN(printargs),			"64:waitid"		},
+[246] = { 4,	0,		SEN(printargs),			"kexec_load#64"		},
+[247] = { 5,	TP,		SEN(printargs),			"waitid#64"		},
 [248] = { 5,	0,		SEN(add_key),			"add_key"		},
 [249] = { 4,	0,		SEN(request_key),		"request_key"		},
 [250] = { 5,	0,		SEN(keyctl),			"keyctl"		},
@@ -271,13 +271,13 @@
 [270] = { 6,	TD,		SEN(pselect6),			"pselect6"		},
 [271] = { 5,	TD,		SEN(ppoll),			"ppoll"			},
 [272] = { 1,	TP,		SEN(unshare),			"unshare"		},
-[273] = { 2,	0,		SEN(printargs),			"64:set_robust_list"	},
-[274] = { 3,	0,		SEN(printargs),			"64:get_robust_list"	},
+[273] = { 2,	0,		SEN(printargs),			"set_robust_list#64"	},
+[274] = { 3,	0,		SEN(printargs),			"get_robust_list#64"	},
 [275] = { 6,	TD,		SEN(splice),			"splice"		},
 [276] = { 4,	TD,		SEN(tee),			"tee"			},
 [277] = { 4,	TD,		SEN(sync_file_range),		"sync_file_range"	},
-[278] = { 4,	TD,		SEN(printargs),			"64:vmsplice"		},
-[279] = { 6,	TM,		SEN(printargs),			"64:move_pages"		},
+[278] = { 4,	TD,		SEN(printargs),			"vmsplice#64"		},
+[279] = { 6,	TM,		SEN(printargs),			"move_pages#64"		},
 [280] = { 4,	TD|TF,		SEN(utimensat),			"utimensat"		},
 [281] = { 6,	TD,		SEN(epoll_pwait),		"epoll_pwait"		},
 [282] = { 3,	TD|TS,		SEN(signalfd),			"signalfd"		},
@@ -293,11 +293,11 @@
 [292] = { 3,	TD,		SEN(dup3),			"dup3"			},
 [293] = { 2,	TD,		SEN(pipe2),			"pipe2"			},
 [294] = { 1,	TD,		SEN(inotify_init1),		"inotify_init1"		},
-[295] = { 4,	TD,		SEN(printargs),			"64:preadv"		},
-[296] = { 4,	TD,		SEN(printargs),			"64:pwritev"		},
-[297] = { 4,	TP|TS,		SEN(printargs),			"64:rt_tgsigqueueinfo"	},
+[295] = { 4,	TD,		SEN(printargs),			"preadv#64"		},
+[296] = { 4,	TD,		SEN(printargs),			"pwritev#64"		},
+[297] = { 4,	TP|TS,		SEN(printargs),			"rt_tgsigqueueinfo#64"	},
 [298] = { 5,	TD,		SEN(perf_event_open),		"perf_event_open"	},
-[299] = { 5,	TN,		SEN(printargs),			"64:recvmmsg"		},
+[299] = { 5,	TN,		SEN(printargs),			"recvmmsg#64"		},
 [300] = { 2,	TD,		SEN(fanotify_init),		"fanotify_init"		},
 [301] = { 5,	TD|TF,		SEN(fanotify_mark),		"fanotify_mark"		},
 [302] = { 4,	0,		SEN(prlimit64),			"prlimit64"		},
@@ -305,11 +305,11 @@
 [304] = { 3,	TD,		SEN(open_by_handle_at),		"open_by_handle_at"	},
 [305] = { 2,	0,		SEN(clock_adjtime),		"clock_adjtime"		},
 [306] = { 1,	TD,		SEN(syncfs),			"syncfs"		},
-[307] = { 4,	TN,		SEN(printargs),			"64:sendmmsg"		},
+[307] = { 4,	TN,		SEN(printargs),			"sendmmsg#64"		},
 [308] = { 2,	TD,		SEN(setns),			"setns"			},
 [309] = { 3,	0,		SEN(getcpu),			"getcpu"		},
-[310] = { 6,	0,		SEN(printargs),			"64:process_vm_readv"	},
-[311] = { 6,	0,		SEN(printargs),			"64:process_vm_writev"	},
+[310] = { 6,	0,		SEN(printargs),			"process_vm_readv#64"	},
+[311] = { 6,	0,		SEN(printargs),			"process_vm_writev#64"	},
 [312] = { 5,	0,		SEN(kcmp),			"kcmp"			},
 [313] = { 3,	TD,		SEN(finit_module),		"finit_module"		},
 [314] = { 3,	0,		SEN(sched_setattr),		"sched_setattr"		},
@@ -320,18 +320,19 @@
 [319] = { 2,	TD,		SEN(memfd_create),		"memfd_create"		},
 [320] = { 5,	TD,		SEN(kexec_file_load),		"kexec_file_load"	},
 [321] = { 3,	TD,		SEN(bpf),			"bpf"			},
-[322] = { 5,	TD|TF|TP|SE|SI,	SEN(printargs),			"64:execveat"		},
+[322] = { 5,	TD|TF|TP|SE|SI,	SEN(printargs),			"execveat#64"		},
 [323] = { 1,	TD,		SEN(userfaultfd),		"userfaultfd"		},
 [324] = { 2,	0,		SEN(membarrier),		"membarrier"		},
 [325] = { 3,	TM,		SEN(mlock2),			"mlock2"		},
 [326] = { 6,	TD,		SEN(copy_file_range),		"copy_file_range"	},
-[327] = { 6,	TD,		SEN(printargs),			"64:preadv2"		},
-[328] = { 6,	TD,		SEN(printargs),			"64:pwritev2"		},
+[327] = { 6,	TD,		SEN(printargs),			"preadv2#64"		},
+[328] = { 6,	TD,		SEN(printargs),			"pwritev2#64"		},
 [329] = { 4,	TM|SI,		SEN(pkey_mprotect),		"pkey_mprotect"		},
 [330] = { 2,	0,		SEN(pkey_alloc),		"pkey_alloc"		},
 [331] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
 [332] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
-[333 ... 511] = { },
+[333] = { 6,	0,		SEN(io_pgetevents),		"io_pgetevents"		},
+[334 ... 511] = { },
 /*
  * x32-specific system call numbers start at 512 to avoid cache impact
  * for native 64-bit operation.
@@ -372,3 +373,4 @@
 [545] = { 5,	CST|TD|TF|TP|SE|SI,	SEN(execveat),		"execveat"		},
 [546] = { 5,	TD,		SEN(preadv2),			"preadv2"		},
 [547] = { 5,	TD,		SEN(pwritev2),			"pwritev2"		},
+[334] = { 4,	0,		SEN(rseq),			"rseq"			},
diff --git a/linux/x86_64/errnoent1.h b/linux/x86_64/errnoent1.h
deleted file mode 100644
index d32435a..0000000
--- a/linux/x86_64/errnoent1.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* i386 personality */
-#include "errnoent.h"
diff --git a/linux/x86_64/errnoent2.h b/linux/x86_64/errnoent2.h
deleted file mode 100644
index 2192ec8..0000000
--- a/linux/x86_64/errnoent2.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* x32 personality */
-#include "errnoent.h"
diff --git a/linux/x86_64/ioctls_arch0.h b/linux/x86_64/ioctls_arch0.h
index 8d6abab..3399500 100644
--- a/linux/x86_64/ioctls_arch0.h
+++ b/linux/x86_64/ioctls_arch0.h
@@ -58,6 +58,7 @@
 { "linux/kvm.h", "KVM_GET_XCRS", _IOC_READ, 0xaea6, 0x188 },
 { "linux/kvm.h", "KVM_GET_XSAVE", _IOC_READ, 0xaea4, 0x1000 },
 { "linux/kvm.h", "KVM_HAS_DEVICE_ATTR", _IOC_WRITE, 0xaee3, 0x18 },
+{ "linux/kvm.h", "KVM_HYPERV_EVENTFD", _IOC_WRITE, 0xaebd, 0x18 },
 { "linux/kvm.h", "KVM_INTERRUPT", _IOC_WRITE, 0xae86, 0x04 },
 { "linux/kvm.h", "KVM_IOEVENTFD", _IOC_WRITE, 0xae79, 0x40 },
 { "linux/kvm.h", "KVM_IRQFD", _IOC_WRITE, 0xae76, 0x20 },
diff --git a/linux/x86_64/signalent1.h b/linux/x86_64/signalent1.h
deleted file mode 100644
index fdae15f..0000000
--- a/linux/x86_64/signalent1.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* i386 personality */
-#include "signalent.h"
diff --git a/linux/x86_64/signalent2.h b/linux/x86_64/signalent2.h
deleted file mode 100644
index 6b32d62..0000000
--- a/linux/x86_64/signalent2.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* x32 personality */
-#include "signalent.h"
diff --git a/linux/x86_64/syscallent.h b/linux/x86_64/syscallent.h
index 8d95c1d..63ec52e 100644
--- a/linux/x86_64/syscallent.h
+++ b/linux/x86_64/syscallent.h
@@ -331,3 +331,5 @@
 [330] = { 2,	0,		SEN(pkey_alloc),		"pkey_alloc"		},
 [331] = { 1,	0,		SEN(pkey_free),			"pkey_free"		},
 [332] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
+[333] = { 6,	0,		SEN(io_pgetevents),		"io_pgetevents"		},
+[334] = { 4,	0,		SEN(rseq),			"rseq"			},
diff --git a/m32_printer_decls.h b/m32_printer_decls.h
index bd1dee3..52018a7 100644
--- a/m32_printer_decls.h
+++ b/m32_printer_decls.h
@@ -1,4 +1,4 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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. */
+/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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 perf_ioctl.c.mpers.i print_aio_sigset.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 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_write_ioctl_mpers(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
@@ -17,6 +17,8 @@
 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 int m32_perf_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
+extern void m32_print_aio_sigset(struct tcb *tcp, const kernel_ulong_t addr);
 extern void m32_print_group_req(struct tcb *const tcp, const kernel_ulong_t addr, const int len);
 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);
diff --git a/m32_printer_defs.h b/m32_printer_defs.h
index 9551ea9..8345175 100644
--- a/m32_printer_defs.h
+++ b/m32_printer_defs.h
@@ -1,4 +1,4 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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. */
+/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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 perf_ioctl.c.mpers.i print_aio_sigset.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 = m32_block_ioctl,
 .btrfs_ioctl = m32_btrfs_ioctl,
 .evdev_write_ioctl_mpers = m32_evdev_write_ioctl_mpers,
@@ -17,6 +17,8 @@
 .hdio_ioctl = m32_hdio_ioctl,
 .loop_ioctl = m32_loop_ioctl,
 .mtd_ioctl = m32_mtd_ioctl,
+.perf_ioctl = m32_perf_ioctl,
+.print_aio_sigset = m32_print_aio_sigset,
 .print_group_req = m32_print_group_req,
 .printmqattr = m32_printmqattr,
 .tprint_msgbuf = m32_tprint_msgbuf,
diff --git a/m32_type_defs.h b/m32_type_defs.h
index d379ecd..a20665d 100644
--- a/m32_type_defs.h
+++ b/m32_type_defs.h
@@ -70,6 +70,9 @@
 #ifdef MPERS_m32_struct_mtd_oob_buf
 # define struct_mtd_oob_buf MPERS_m32_struct_mtd_oob_buf
 #endif
+#ifdef MPERS_m32_strace_aio_sigset
+# define strace_aio_sigset MPERS_m32_strace_aio_sigset
+#endif
 #ifdef MPERS_m32_struct_group_req
 # define struct_group_req MPERS_m32_struct_group_req
 #endif
diff --git a/m4/bpf_attr.m4 b/m4/bpf_attr.m4
index a90373b..16cdb97 100644
--- a/m4/bpf_attr.m4
+++ b/m4/bpf_attr.m4
@@ -1,13 +1,38 @@
 dnl Generated by ./m4/gen_bpf_attr_m4.sh from bpf_attr.h; do not edit.
 AC_DEFUN([st_BPF_ATTR], [dnl
 	AC_CHECK_MEMBERS(m4_normalize([
+		struct bpf_map_info.id,
+		struct bpf_map_info.ifindex,
+		struct bpf_map_info.key_size,
+		struct bpf_map_info.map_flags,
+		struct bpf_map_info.max_entries,
+		struct bpf_map_info.name,
+		struct bpf_map_info.type,
+		struct bpf_map_info.value_size,
+		struct bpf_prog_info.created_by_uid,
+		struct bpf_prog_info.id,
+		struct bpf_prog_info.ifindex,
+		struct bpf_prog_info.jited_prog_insns,
+		struct bpf_prog_info.jited_prog_len,
+		struct bpf_prog_info.load_time,
+		struct bpf_prog_info.map_ids,
+		struct bpf_prog_info.name,
+		struct bpf_prog_info.nr_map_ids,
+		struct bpf_prog_info.tag,
+		struct bpf_prog_info.type,
+		struct bpf_prog_info.xlated_prog_insns,
+		struct bpf_prog_info.xlated_prog_len,
 		union bpf_attr.attach_bpf_fd,
 		union bpf_attr.attach_flags,
 		union bpf_attr.attach_type,
 		union bpf_attr.bpf_fd,
 		union bpf_attr.dummy,
+		union bpf_attr.expected_attach_type,
 		union bpf_attr.file_flags,
 		union bpf_attr.flags,
+		union bpf_attr.info.bpf_fd,
+		union bpf_attr.info.info,
+		union bpf_attr.info.info_len,
 		union bpf_attr.inner_map_fd,
 		union bpf_attr.insn_cnt,
 		union bpf_attr.insns,
@@ -21,6 +46,8 @@
 		union bpf_attr.map_fd,
 		union bpf_attr.map_flags,
 		union bpf_attr.map_id,
+		union bpf_attr.map_ifindex,
+		union bpf_attr.map_name,
 		union bpf_attr.map_type,
 		union bpf_attr.max_entries,
 		union bpf_attr.next_id,
@@ -30,11 +57,19 @@
 		union bpf_attr.pathname,
 		union bpf_attr.prog_flags,
 		union bpf_attr.prog_id,
+		union bpf_attr.prog_ifindex,
+		union bpf_attr.prog_name,
 		union bpf_attr.prog_type,
+		union bpf_attr.query.attach_flags,
+		union bpf_attr.query.attach_type,
+		union bpf_attr.query.prog_cnt,
+		union bpf_attr.query.prog_ids,
+		union bpf_attr.query.query_flags,
+		union bpf_attr.query.target_fd,
+		union bpf_attr.raw_tracepoint.name,
+		union bpf_attr.raw_tracepoint.prog_fd,
 		union bpf_attr.start_id,
 		union bpf_attr.target_fd,
-		union bpf_attr.value,
-		union bpf_attr.value_size,
 		union bpf_attr.test.data_in,
 		union bpf_attr.test.data_out,
 		union bpf_attr.test.data_size_in,
@@ -43,9 +78,8 @@
 		union bpf_attr.test.prog_fd,
 		union bpf_attr.test.repeat,
 		union bpf_attr.test.retval,
-		union bpf_attr.info.bpf_fd,
-		union bpf_attr.info.info,
-		union bpf_attr.info.info_len,
+		union bpf_attr.value,
+		union bpf_attr.value_size,
 		union bpf_attr.dummy
 	]),,, [#include <linux/bpf.h>])
 ])
diff --git a/m4/st_demangle.m4 b/m4/st_demangle.m4
new file mode 100644
index 0000000..cf3d2d1
--- /dev/null
+++ b/m4/st_demangle.m4
@@ -0,0 +1,82 @@
+#!/usr/bin/m4
+#
+# Copyright (c) 2017-2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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_DEMANGLE], [dnl
+
+AC_ARG_WITH([libiberty],
+	    [AS_HELP_STRING([--with-libiberty],
+			    [use libiberty to demangle symbols in stack trace])],
+	    [case "${withval}" in
+	     yes|no|check) ;;
+	     *) with_libiberty=yes
+		libiberty_CPPFLAGS="-I${withval}/include"
+		libiberty_LDFLAGS="-L${withval}/lib" ;;
+	     esac],
+	    [with_libiberty=check]
+)
+
+libiberty_CPPFLAGS=
+libiberty_LDFLAGS=
+libiberty_LIBS=
+use_libiberty=no
+
+AS_IF([test "x$with_libiberty" != xno],
+      [saved_CPPFLAGS="$CPPFLAGS"
+       CPPFLAGS="$CPPFLAGS $libiberty_CPPFLAGS"
+       AC_CHECK_HEADERS([demangle.h libiberty/demangle.h],
+	 [saved_LDFLAGS="$LDFLAGS"
+	  LDFLAGS="$LDFLAGS $libiberty_LDFLAGS"
+	  AC_CHECK_LIB([iberty],[cplus_demangle],
+	    [libiberty_LIBS="-liberty"
+	     use_libiberty=yes
+	    ],
+	    [if test "x$with_libiberty" != xcheck; then
+	       AC_MSG_FAILURE([failed to find cplus_demangle in libiberty])
+	     fi
+	    ]
+	  )
+	  LDFLAGS="$saved_LDFLAGS"
+	 ],
+	 [if test "x$with_libiberty" != xcheck; then
+	      AC_MSG_FAILURE([failed to find demangle.h])
+	  fi
+	 ]
+       )
+       CPPFLAGS="$saved_CPPFLAGS"
+      ]
+)
+
+AC_MSG_CHECKING([whether to enable symbols demangling in stack trace])
+if test "x$use_libiberty" = xyes; then
+	AC_DEFINE([USE_DEMANGLE], 1, [Do symbols demangling in stack trace])
+	AC_SUBST(libiberty_LIBS)
+	AC_SUBST(libiberty_LDFLAGS)
+	AC_SUBST(libiberty_CPPFLAGS)
+fi
+AC_MSG_RESULT([$use_libiberty])
+
+])
diff --git a/m4/st_libdw.m4 b/m4/st_libdw.m4
new file mode 100644
index 0000000..f33ec35
--- /dev/null
+++ b/m4/st_libdw.m4
@@ -0,0 +1,113 @@
+#!/usr/bin/m4
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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_ARG_LIBDW], [dnl
+
+: ${libdw_CPPFLAGS=}
+: ${libdw_CFLAGS=}
+: ${libdw_LDFLAGS=}
+: ${libdw_LIBS=}
+
+AC_ARG_WITH([libdw],
+	    [AS_HELP_STRING([--with-libdw],
+			    [use libdw to implement stack tracing support]
+			   )
+	    ],
+	    [case "${withval}" in
+	     yes|no|check) ;;
+	     *) libdw_CPPFLAGS="-I${withval}/include"
+		libdw_LDFLAGS="-L${withval}/lib"
+		with_libdw=yes ;;
+	     esac
+	    ],
+	    [with_libdw=check]
+	   )
+
+])
+
+AC_DEFUN([st_LIBDW], [dnl
+
+have_libdw=
+
+AS_IF([test "x$with_libdw" != xno && test "x$use_unwinder" = x],
+      [saved_CPPFLAGS="$CPPFLAGS"
+       saved_CFLAGS="$CFLAGS"
+       CPPFLAGS="$CPPFLAGS $libdw_CPPFLAGS"
+       CFLAGS="$CFLAGS $libdw_CFLAGS"
+
+       AC_CHECK_HEADERS([elfutils/libdwfl.h],
+			[AC_CHECK_LIB([dw], [dwfl_linux_proc_attach],
+				      [libdw_LIBS="-ldw $libdw_LIBS"
+				       AC_CACHE_CHECK([for elfutils version],
+						      [st_cv_ELFUTILS_VERSION],
+						      [[st_cv_ELFUTILS_VERSION="$(echo _ELFUTILS_VERSION |
+										  $CPP $CPPFLAGS -P -imacros elfutils/version.h - |
+										  grep '^[0-9]')"
+							test -n "$st_cv_ELFUTILS_VERSION" ||
+								st_cv_ELFUTILS_VERSION=0
+						      ]]
+						     )
+				       AS_IF([test "$st_cv_ELFUTILS_VERSION" -ge 164],
+					     [have_libdw=yes],
+					     [AS_IF([test "x$with_libdw" = xyes],
+						    [AC_MSG_ERROR([elfutils version >= 164 is required for stack tracing support])],
+						    [AC_MSG_WARN([elfutils version >= 164 is required for stack tracing support])]
+						   )
+					     ]
+					    )
+				      ],
+				      [AS_IF([test "x$with_libdw" = xyes],
+					     [AC_MSG_FAILURE([failed to find dwfl_linux_proc_attach in libdw])],
+					    )
+				      ],
+				      [$libdw_LDFLAGS $libdw_LIBS]
+				     )
+			],
+			[AS_IF([test "x$with_libdw" = xyes],
+			       [AC_MSG_FAILURE([failed to find elfutils/libdwfl.h])]
+			      )
+			]
+		       )
+
+       CFLAGS="$saved_CFLAGS"
+       CPPFLAGS="$saved_CPPFLAGS"
+      ]
+)
+
+AS_IF([test "x$have_libdw" = xyes],
+      [use_unwinder=libdw
+       AC_DEFINE([USE_LIBDW], 1,
+		 [Whether to use libdw for stack tracing]
+		)
+       AC_SUBST(libdw_CPPFLAGS)
+       AC_SUBST(libdw_CFLAGS)
+       AC_SUBST(libdw_LDFLAGS)
+       AC_SUBST(libdw_LIBS)
+      ]
+     )
+
+])
diff --git a/m4/st_libunwind.m4 b/m4/st_libunwind.m4
new file mode 100644
index 0000000..f68f9cb
--- /dev/null
+++ b/m4/st_libunwind.m4
@@ -0,0 +1,119 @@
+#!/usr/bin/m4
+#
+# Copyright (c) 2013-2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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_ARG_LIBUNWIND], [dnl
+
+AC_ARG_WITH([libunwind],
+	    [AS_HELP_STRING([--with-libunwind],
+			    [use libunwind to implement stack tracing support])],
+	    [case "${withval}" in
+	     yes|no|check) ;;
+	     *) with_libunwind=yes
+		libunwind_CPPFLAGS="-I${withval}/include"
+		libunwind_LDFLAGS="-L${withval}/lib" ;;
+	     esac],
+	    [with_libunwind=check]
+)
+
+])
+
+AC_DEFUN([st_LIBUNWIND], [dnl
+
+libunwind_CPPFLAGS=
+libunwind_LDFLAGS=
+libunwind_LIBS=
+
+AS_IF([test "x$with_libunwind" != xno && test "x$use_unwinder" = x],
+      [saved_CPPFLAGS="$CPPFLAGS"
+       CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS"
+
+       AC_CHECK_HEADERS([libunwind-ptrace.h],
+	 [saved_LDFLAGS="$LDFLAGS"
+	  LDFLAGS="$LDFLAGS $libunwind_LDFLAGS"
+
+	  AC_CHECK_LIB([unwind], [backtrace],
+	    [libunwind_LIBS="-lunwind $libunwind_LIBS"
+
+	     AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic])
+	     saved_LIBS="$LIBS"
+	     LIBS="-lunwind-generic $libunwind_LIBS $LIBS"
+
+	     AC_LINK_IFELSE(
+	       [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]],
+				[[return !unw_create_addr_space(0, 0)]])
+	       ],
+	       [AC_MSG_RESULT([yes])
+		libunwind_LIBS="-lunwind-generic $libunwind_LIBS"
+
+		AC_CHECK_LIB([unwind-ptrace], [_UPT_create],
+		  [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"
+		   use_unwinder=libunwind
+		  ],
+		  [if test "x$with_libunwind" != xcheck; then
+		     AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace])
+		   fi
+		  ],
+		  [$libunwind_LIBS]
+		)
+	       ],
+	       [AC_MSG_RESULT([no])
+		if test "x$with_libunwind" != xcheck; then
+		  AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic])
+		fi
+	       ]
+	     )
+
+	     LIBS="$saved_LIBS"
+	    ],
+	    [if test "x$with_libunwind" != xcheck; then
+	       AC_MSG_FAILURE([failed to find libunwind])
+	     fi
+	    ],
+	    [$libunwind_LIBS]
+	  )
+
+	  LDFLAGS="$saved_LDFLAGS"
+	 ],
+	 [if test "x$with_libunwind" != xcheck; then
+	    AC_MSG_FAILURE([failed to find libunwind-ptrace.h])
+	  fi
+	 ]
+       )
+
+       CPPFLAGS="$saved_CPPFLAGS"
+      ]
+)
+
+if test "x$use_unwinder" = xlibunwind; then
+	AC_DEFINE([USE_LIBUNWIND], 1,
+		  [Whether to use libunwind for stack tracing])
+	AC_SUBST(libunwind_LIBS)
+	AC_SUBST(libunwind_LDFLAGS)
+	AC_SUBST(libunwind_CPPFLAGS)
+fi
+
+])
diff --git a/m4/st_stacktrace.m4 b/m4/st_stacktrace.m4
new file mode 100644
index 0000000..35b50e7
--- /dev/null
+++ b/m4/st_stacktrace.m4
@@ -0,0 +1,78 @@
+#!/usr/bin/m4
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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_STACKTRACE], [dnl
+
+AC_ARG_ENABLE([stacktrace],
+	[AS_HELP_STRING([--enable-stacktrace=yes|no|check],
+		[whether to enable stack tracing support, default is check])],
+	[case "$enableval" in
+		yes|no|check) enable_stacktrace="$enableval" ;;
+		*) AC_MSG_ERROR([bad value $enableval for enable-stacktrace option.
+				 Valid options are: yes, no, check.])
+		;;
+	 esac],
+	[enable_stacktrace=check])
+
+use_unwinder=
+dnl Whether to enable stack tracing support?
+
+AS_IF([test x"$enable_stacktrace" != xno],
+      [st_ARG_LIBDW
+       st_ARG_LIBUNWIND
+       AS_IF([test "x$with_libdw" = xyes && test "x$with_libunwind" = xyes],
+	     [AC_MSG_ERROR([--with-libdw=yes and --with-libunwind=yes are mutually exclusive])],
+	     [test "x$with_libdw" = xyes], [with_libunwind=no],
+	     [test "x$with_libunwind" = xyes], [with_libdw=no]
+	    )
+       AS_IF([test "x$use_unwinder" = x], [st_LIBDW])
+       AS_IF([test "x$use_unwinder" = x], [st_LIBUNWIND])
+       AS_IF([test x"$enable_stacktrace$use_unwinder" = xyes],
+	     [AC_MSG_ERROR([stack tracing support requires an unwinder])]
+	    )
+      ]
+     )
+
+AC_MSG_CHECKING([whether to enable stack tracing support])
+AM_CONDITIONAL([ENABLE_STACKTRACE], [test "x$use_unwinder" != x])
+AM_CONDITIONAL([USE_LIBDW], [test "x$use_unwinder" = xlibdw])
+AM_CONDITIONAL([USE_LIBUNWIND], [test "x$use_unwinder" = xlibunwind])
+
+use_libiberty=
+AS_IF([test "x$use_unwinder" != x],
+      [AC_DEFINE([ENABLE_STACKTRACE], [1],
+			  [Define to enable stack tracing support])
+       AC_DEFINE_UNQUOTED([USE_UNWINDER], ["$use_unwinder"],
+			  [The unwinder to use for stack tracing support])
+       AC_MSG_RESULT([yes, using $use_unwinder])
+       dnl As stack tracing support is enabled, check for a demangler.
+       st_DEMANGLE],
+      [AC_MSG_RESULT([no])])
+
+AM_CONDITIONAL([USE_DEMANGLE], [test "x$use_libiberty" = xyes])
+
+])
diff --git a/macros.h b/macros.h
index d7e116e..f5334ef 100644
--- a/macros.h
+++ b/macros.h
@@ -35,6 +35,8 @@
 
 #define ARRAY_SIZE(a_)	(sizeof(a_) / sizeof((a_)[0]) + MUST_BE_ARRAY(a_))
 
+#define ARRSZ_PAIR(a_) a_, ARRAY_SIZE(a_)
+
 #define STRINGIFY(...)		#__VA_ARGS__
 #define STRINGIFY_VAL(...)	STRINGIFY(__VA_ARGS__)
 
diff --git a/mem.c b/mem.c
index f79d67c..3e37da1 100644
--- a/mem.c
+++ b/mem.c
@@ -40,8 +40,18 @@
 {
 	static unsigned long pagesize;
 
-	if (!pagesize)
-		pagesize = sysconf(_SC_PAGESIZE);
+	if (!pagesize) {
+		long ret = sysconf(_SC_PAGESIZE);
+
+		if (ret < 0)
+			perror_func_msg_and_die("sysconf(_SC_PAGESIZE)");
+		if (ret == 0)
+			error_func_msg_and_die("sysconf(_SC_PAGESIZE) "
+					       "returned 0");
+
+		pagesize = (unsigned long) ret;
+	}
+
 	return pagesize;
 }
 
@@ -350,7 +360,7 @@
 
 	unsigned int entry;
 	print_array(tcp, map, nmemb, &entry, sizeof(entry),
-		    umoven_or_printaddr, print_protmap_entry, 0);
+		    tfetch_mem, print_protmap_entry, 0);
 
 	return RVAL_DECODED;
 }
diff --git a/mmap_cache.c b/mmap_cache.c
index 19f88ab..631133b 100644
--- a/mmap_cache.c
+++ b/mmap_cache.c
@@ -30,19 +30,61 @@
 
 #include "largefile_wrappers.h"
 #include "mmap_cache.h"
+#include "mmap_notify.h"
 #include "xstring.h"
 
 static unsigned int mmap_cache_generation;
-static bool use_mmap_cache;
 
-extern void mmap_cache_enable(void)
+static void
+mmap_cache_invalidate(struct tcb *tcp, void *unused)
 {
-	use_mmap_cache = true;
+#if SUPPORTED_PERSONALITIES > 1
+	if (tcp->currpers != DEFAULT_PERSONALITY) {
+		/* disable stack trace */
+		return;
+	}
+#endif
+	mmap_cache_generation++;
+	debug_func_msg("tgen=%u, ggen=%u, tcp=%p, cache=%p",
+		       tcp->mmap_cache ? tcp->mmap_cache->generation : 0,
+		       mmap_cache_generation, tcp,
+		       tcp->mmap_cache ? tcp->mmap_cache->entry : 0);
 }
 
-extern bool mmap_cache_is_enabled(void)
+void
+mmap_cache_enable(void)
 {
-	return use_mmap_cache;
+	static bool use_mmap_cache;
+
+	if (!use_mmap_cache) {
+		mmap_notify_register_client(mmap_cache_invalidate, NULL);
+		use_mmap_cache = true;
+	}
+}
+
+/* deleting the cache */
+static void
+delete_mmap_cache(struct tcb *tcp, const char *caller)
+{
+	debug_func_msg("tgen=%u, ggen=%u, tcp=%p, cache=%p, caller=%s",
+		       tcp->mmap_cache ? tcp->mmap_cache->generation : 0,
+		       mmap_cache_generation, tcp,
+		       tcp->mmap_cache ? tcp->mmap_cache->entry : 0, caller);
+
+	if (!tcp->mmap_cache)
+		return;
+
+	while (tcp->mmap_cache->size) {
+		unsigned int i = --tcp->mmap_cache->size;
+		free(tcp->mmap_cache->entry[i].binary_filename);
+		tcp->mmap_cache->entry[i].binary_filename = NULL;
+	}
+
+	free(tcp->mmap_cache->entry);
+	tcp->mmap_cache->entry = NULL;
+
+	free(tcp->mmap_cache);
+	tcp->mmap_cache = NULL;
 }
 
 /*
@@ -51,25 +93,35 @@
  * The cache must be refreshed after syscalls that affect memory mappings,
  * e.g. mmap, mprotect, munmap, execve.
  */
-static void
-build_mmap_cache(struct tcb *tcp)
+extern enum mmap_cache_rebuild_result
+mmap_cache_rebuild_if_invalid(struct tcb *tcp, const char *caller)
 {
-	FILE *fp;
-	struct mmap_cache_t *cache_head = NULL;
-	/* start with a small dynamically-allocated array and then expand it */
-	size_t cur_array_size = 0;
-	char filename[sizeof("/proc/4294967296/maps")];
-	char buffer[PATH_MAX + 80];
+	if (tcp->mmap_cache
+	    && tcp->mmap_cache->generation != mmap_cache_generation)
+		delete_mmap_cache(tcp, caller);
 
+	if (tcp->mmap_cache)
+		return MMAP_CACHE_REBUILD_READY;
+
+	char filename[sizeof("/proc/4294967296/maps")];
 	xsprintf(filename, "/proc/%u/maps", tcp->pid);
-	fp = fopen_stream(filename, "r");
+
+	FILE *fp = fopen_stream(filename, "r");
 	if (!fp) {
 		perror_msg("fopen: %s", filename);
-		return;
+		return MMAP_CACHE_REBUILD_NOCACHE;
 	}
 
+	struct mmap_cache_t cache = {
+		.free_fn = delete_mmap_cache,
+		.generation = mmap_cache_generation
+	};
+
+	/* start with a small dynamically-allocated array and then expand it */
+	size_t allocated = 0;
+	char buffer[PATH_MAX + 80];
+
 	while (fgets(buffer, sizeof(buffer), fp) != NULL) {
-		struct mmap_cache_t *entry;
 		unsigned long start_addr, end_addr, mmap_offset;
 		char read_bit;
 		char write_bit;
@@ -101,12 +153,13 @@
 			break;
 		}
 
+		struct mmap_cache_entry_t *entry;
 		/*
 		 * sanity check to make sure that we're storing
 		 * non-overlapping regions in ascending order
 		 */
-		if (tcp->mmap_cache_size > 0) {
-			entry = &cache_head[tcp->mmap_cache_size - 1];
+		if (cache.size > 0) {
+			entry = &cache.entry[cache.size - 1];
 			if (entry->start_addr == start_addr &&
 			    entry->end_addr == end_addr) {
 				/* duplicate entry, e.g. [vsyscall] */
@@ -124,11 +177,11 @@
 			}
 		}
 
-		if (tcp->mmap_cache_size >= cur_array_size)
-			cache_head = xgrowarray(cache_head, &cur_array_size,
-						sizeof(*cache_head));
+		if (cache.size >= allocated)
+			cache.entry = xgrowarray(cache.entry, &allocated,
+						 sizeof(*cache.entry));
 
-		entry = &cache_head[tcp->mmap_cache_size];
+		entry = &cache.entry[cache.size];
 		entry->start_addr = start_addr;
 		entry->end_addr = end_addr;
 		entry->mmap_offset = mmap_offset;
@@ -142,89 +195,40 @@
 		entry->major = major;
 		entry->minor = minor;
 		entry->binary_filename = xstrdup(binary_path);
-		tcp->mmap_cache_size++;
+		cache.size++;
 	}
 	fclose(fp);
-	tcp->mmap_cache = cache_head;
-	tcp->mmap_cache_generation = mmap_cache_generation;
 
-	debug_func_msg("tgen=%u, ggen=%u, tcp=%p, cache=%p",
-		       tcp->mmap_cache_generation,
-		       mmap_cache_generation,
-		       tcp, tcp->mmap_cache);
-}
+	if (!cache.size)
+		return MMAP_CACHE_REBUILD_NOCACHE;
 
-/* deleting the cache */
-extern void
-mmap_cache_delete(struct tcb *tcp, const char *caller)
-{
-	unsigned int i;
+	tcp->mmap_cache = xmalloc(sizeof(*tcp->mmap_cache));
+	memcpy(tcp->mmap_cache, &cache, sizeof(cache));
 
 	debug_func_msg("tgen=%u, ggen=%u, tcp=%p, cache=%p, caller=%s",
-		       tcp->mmap_cache_generation,
-		       mmap_cache_generation,
-		       tcp, tcp->mmap_cache, caller);
+		       tcp->mmap_cache->generation, mmap_cache_generation,
+		       tcp, tcp->mmap_cache->entry, caller);
 
-	for (i = 0; i < tcp->mmap_cache_size; i++) {
-		free(tcp->mmap_cache[i].binary_filename);
-		tcp->mmap_cache[i].binary_filename = NULL;
-	}
-	free(tcp->mmap_cache);
-	tcp->mmap_cache = NULL;
-	tcp->mmap_cache_size = 0;
+	return MMAP_CACHE_REBUILD_RENEWED;
 }
 
-extern enum mmap_cache_rebuild_result
-mmap_cache_rebuild_if_invalid(struct tcb *tcp, const char *caller)
-{
-	enum mmap_cache_rebuild_result r = MMAP_CACHE_REBUILD_READY;
-	if ((tcp->mmap_cache_generation != mmap_cache_generation)
-	    && tcp->mmap_cache)
-		mmap_cache_delete(tcp, caller);
-
-	if (!tcp->mmap_cache) {
-		r = MMAP_CACHE_REBUILD_RENEWED;
-		build_mmap_cache(tcp);
-	}
-
-	if (!(tcp->mmap_cache && tcp->mmap_cache_size))
-		r = MMAP_CACHE_REBUILD_NOCACHE;
-
-	return r;
-}
-
-void
-mmap_cache_invalidate(struct tcb *tcp)
-{
-#if SUPPORTED_PERSONALITIES > 1
-	if (tcp->currpers != DEFAULT_PERSONALITY) {
-		/* disable stack trace */
-		return;
-	}
-#endif
-	mmap_cache_generation++;
-	debug_func_msg("tgen=%u, ggen=%u, tcp=%p, cache=%p",
-		       tcp->mmap_cache_generation,
-		       mmap_cache_generation,
-		       tcp, tcp->mmap_cache);
-}
-
-struct mmap_cache_t *
+struct mmap_cache_entry_t *
 mmap_cache_search(struct tcb *tcp, unsigned long ip)
 {
+	if (!tcp->mmap_cache)
+		return NULL;
+
 	int lower = 0;
-	int upper = (int) tcp->mmap_cache_size - 1;
+	int upper = (int) tcp->mmap_cache->size - 1;
 
 	while (lower <= upper) {
-		struct mmap_cache_t *cur_mmap_cache;
 		int mid = (upper + lower) / 2;
+		struct mmap_cache_entry_t *entry = &tcp->mmap_cache->entry[mid];
 
-		cur_mmap_cache = &tcp->mmap_cache[mid];
-
-		if (ip >= cur_mmap_cache->start_addr &&
-		    ip < cur_mmap_cache->end_addr)
-			return cur_mmap_cache;
-		else if (ip < cur_mmap_cache->start_addr)
+		if (ip >= entry->start_addr &&
+		    ip < entry->end_addr)
+			return entry;
+		else if (ip < entry->start_addr)
 			upper = mid - 1;
 		else
 			lower = mid + 1;
diff --git a/mmap_cache.h b/mmap_cache.h
index 265f8ec..90a939f 100644
--- a/mmap_cache.h
+++ b/mmap_cache.h
@@ -31,7 +31,15 @@
  * Keep a sorted array of cache entries,
  * so that we can binary search through it.
  */
+
 struct mmap_cache_t {
+	struct mmap_cache_entry_t *entry;
+	void (*free_fn)(struct tcb *, const char *caller);
+	unsigned int size;
+	unsigned int generation;
+};
+
+struct mmap_cache_entry_t {
 	/**
 	 * example entry:
 	 * 7fabbb09b000-7fabbb09f000 r-xp 00179000 fc:00 1180246 /lib/libc-2.11.1.so
@@ -68,19 +76,10 @@
 extern void
 mmap_cache_enable(void);
 
-extern bool
-mmap_cache_is_enabled(void);
-
-extern void
-mmap_cache_invalidate(struct tcb *);
-
-extern void
-mmap_cache_delete(struct tcb *, const char *caller);
-
 extern enum mmap_cache_rebuild_result
 mmap_cache_rebuild_if_invalid(struct tcb *, const char *caller);
 
-extern struct mmap_cache_t *
+extern struct mmap_cache_entry_t *
 mmap_cache_search(struct tcb *, unsigned long ip);
 
 #endif /* !STRACE_MMAP_CACHE_H */
diff --git a/mmap_notify.c b/mmap_notify.c
new file mode 100644
index 0000000..034a6d9
--- /dev/null
+++ b/mmap_notify.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2018 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 "mmap_notify.h"
+
+struct mmap_notify_client {
+	mmap_notify_fn fn;
+	void *data;
+	struct mmap_notify_client *next;
+};
+
+static struct mmap_notify_client *clients;
+
+void
+mmap_notify_register_client(mmap_notify_fn fn, void *data)
+{
+	struct mmap_notify_client *client = xmalloc(sizeof(*client));
+	client->fn = fn;
+	client->data = data;
+	client->next = clients;
+	clients = client;
+}
+
+void
+mmap_notify_report(struct tcb *tcp)
+{
+	struct mmap_notify_client *client;
+
+	for (client = clients; client; client = client->next)
+		client->fn(tcp, client->data);
+}
diff --git a/mmap_notify.h b/mmap_notify.h
new file mode 100644
index 0000000..8cf44c4
--- /dev/null
+++ b/mmap_notify.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2018 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.
+ */
+
+#ifndef STRACE_MMAP_NOTIFY_H
+#define STRACE_MMAP_NOTIFY_H
+
+#include "defs.h"
+
+typedef void (*mmap_notify_fn)(struct tcb *, void *);
+
+extern void
+mmap_notify_register_client(mmap_notify_fn, void *);
+
+extern void
+mmap_notify_report (struct tcb *);
+
+#endif /* !STRACE_MMAP_NOTIFY_H */
diff --git a/mmsghdr.c b/mmsghdr.c
index 9b78a1e..23e616a 100644
--- a/mmsghdr.c
+++ b/mmsghdr.c
@@ -34,18 +34,13 @@
 #include "xstring.h"
 #include <limits.h>
 
-static int
-fetch_struct_mmsghdr_or_printaddr(struct tcb *const tcp,
+static bool
+fetch_struct_mmsghdr_for_print(struct tcb *const tcp,
 				  const kernel_ulong_t addr,
 				  const unsigned int len, void *const mh)
 {
-	if ((entering(tcp) || !syserror(tcp))
-	    && fetch_struct_mmsghdr(tcp, addr, mh)) {
-		return 0;
-	} else {
-		printaddr(addr);
-		return -1;
-	}
+	return (entering(tcp) || !syserror(tcp)) &&
+	       fetch_struct_mmsghdr(tcp, addr, mh);
 }
 
 struct print_struct_mmsghdr_config {
@@ -146,7 +141,7 @@
 	}
 
 	print_array(tcp, addr, vlen, &mmsg, sizeof_struct_mmsghdr(),
-		    fetch_struct_mmsghdr_or_printaddr,
+		    fetch_struct_mmsghdr_for_print,
 		    print_struct_mmsghdr, &c);
 }
 
diff --git a/mount.c b/mount.c
index 7df0e68..7b8d88d 100644
--- a/mount.c
+++ b/mount.c
@@ -5,7 +5,7 @@
  * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
  * Copyright (c) 2005 Roland McGrath <roland@redhat.com>
  * Copyright (c) 2007-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2014-2017 The strace developers.
+ * Copyright (c) 2014-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -70,7 +70,7 @@
 	tprints(", ");
 
 	if (old_magic) {
-		tprints("MS_MGC_VAL");
+		print_xlat(MS_MGC_VAL);
 		if (flags)
 			tprints("|");
 	}
diff --git a/mpers-m32/kernel_dirent.d1 b/mpers-m32/kernel_dirent.d1
index a7e2a71..83b6410 100644
--- a/mpers-m32/kernel_dirent.d1
+++ b/mpers-m32/kernel_dirent.d1
@@ -1,89 +1,90 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xb4 (32-bit)
+   Length:        0xb5 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/kernel_dirent.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/kernel_dirent.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x57): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 36
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x10e): kernel_dirent
-    <39>   DW_AT_decl_file   : 2
-    <3a>   DW_AT_decl_line   : 56
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_byte_size   : 12
-    <3d>   DW_AT_decl_file   : 2
-    <3e>   DW_AT_decl_line   : 51
- <2><3f>: Abbrev Number: 5 (DW_TAG_member)
-    <40>   DW_AT_name        : (indirect string, offset: 0xa3): d_ino
-    <44>   DW_AT_type        : <0x78>
-    <48>   DW_AT_decl_file   : 2
-    <49>   DW_AT_decl_line   : 52
-    <4a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><4d>: Abbrev Number: 5 (DW_TAG_member)
-    <4e>   DW_AT_name        : (indirect string, offset: 0xdb): d_off
-    <52>   DW_AT_type        : <0x78>
-    <56>   DW_AT_decl_file   : 2
-    <57>   DW_AT_decl_line   : 53
-    <58>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5b>: Abbrev Number: 5 (DW_TAG_member)
-    <5c>   DW_AT_name        : (indirect string, offset: 0xe1): d_reclen
-    <60>   DW_AT_type        : <0x95>
-    <64>   DW_AT_decl_file   : 2
-    <65>   DW_AT_decl_line   : 54
-    <66>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><69>: Abbrev Number: 5 (DW_TAG_member)
-    <6a>   DW_AT_name        : (indirect string, offset: 0xf9): d_name
-    <6e>   DW_AT_type        : <0x9c>
-    <72>   DW_AT_decl_file   : 2
-    <73>   DW_AT_decl_line   : 55
-    <74>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
- <2><77>: Abbrev Number: 0
- <1><78>: Abbrev Number: 3 (DW_TAG_typedef)
-    <79>   DW_AT_type        : <0x83>
-    <7d>   DW_AT_name        : (indirect string, offset: 0xcc): kernel_ulong_t
-    <81>   DW_AT_decl_file   : 2
-    <82>   DW_AT_decl_line   : 37
- <1><83>: Abbrev Number: 3 (DW_TAG_typedef)
-    <84>   DW_AT_type        : <0x8e>
-    <88>   DW_AT_name        : (indirect string, offset: 0xbb): __kernel_ulong_t
-    <8c>   DW_AT_decl_file   : 1
-    <8d>   DW_AT_decl_line   : 24
- <1><8e>: Abbrev Number: 6 (DW_TAG_base_type)
-    <8f>   DW_AT_name        : (indirect string, offset: 0xa9): long unsigned int
-    <93>   DW_AT_encoding    : 7	(unsigned)
-    <94>   DW_AT_byte_size   : 4
- <1><95>: Abbrev Number: 6 (DW_TAG_base_type)
-    <96>   DW_AT_name        : (indirect string, offset: 0xea): unsigned short
-    <9a>   DW_AT_encoding    : 7	(unsigned)
-    <9b>   DW_AT_byte_size   : 2
- <1><9c>: Abbrev Number: 7 (DW_TAG_array_type)
-    <9d>   DW_AT_type        : <0xa9>
- <2><a1>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <a2>   DW_AT_type        : <0xb0>
-    <a6>   DW_AT_lower_bound : 0
-    <a7>   DW_AT_count       : 1
- <2><a8>: Abbrev Number: 0
- <1><a9>: Abbrev Number: 6 (DW_TAG_base_type)
-    <aa>   DW_AT_name        : (indirect string, offset: 0x100): char
-    <ae>   DW_AT_encoding    : 8	(unsigned char)
-    <af>   DW_AT_byte_size   : 1
- <1><b0>: Abbrev Number: 9 (DW_TAG_base_type)
-    <b1>   DW_AT_name        : (indirect string, offset: 0x105): sizetype
-    <b5>   DW_AT_byte_size   : 8
-    <b6>   DW_AT_encoding    : 7	(unsigned)
- <1><b7>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x121): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 36
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1d8): kernel_dirent
+    <3a>   DW_AT_decl_file   : 2
+    <3b>   DW_AT_decl_line   : 56
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_byte_size   : 12
+    <3e>   DW_AT_decl_file   : 2
+    <3f>   DW_AT_decl_line   : 51
+ <2><40>: Abbrev Number: 5 (DW_TAG_member)
+    <41>   DW_AT_name        : (indirect string, offset: 0x16d): d_ino
+    <45>   DW_AT_type        : <0x79>
+    <49>   DW_AT_decl_file   : 2
+    <4a>   DW_AT_decl_line   : 52
+    <4b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><4e>: Abbrev Number: 5 (DW_TAG_member)
+    <4f>   DW_AT_name        : (indirect string, offset: 0x1a5): d_off
+    <53>   DW_AT_type        : <0x79>
+    <57>   DW_AT_decl_file   : 2
+    <58>   DW_AT_decl_line   : 53
+    <59>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><5c>: Abbrev Number: 5 (DW_TAG_member)
+    <5d>   DW_AT_name        : (indirect string, offset: 0x1ab): d_reclen
+    <61>   DW_AT_type        : <0x96>
+    <65>   DW_AT_decl_file   : 2
+    <66>   DW_AT_decl_line   : 54
+    <67>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6a>: Abbrev Number: 5 (DW_TAG_member)
+    <6b>   DW_AT_name        : (indirect string, offset: 0x1c3): d_name
+    <6f>   DW_AT_type        : <0x9d>
+    <73>   DW_AT_decl_file   : 2
+    <74>   DW_AT_decl_line   : 55
+    <75>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+ <2><78>: Abbrev Number: 0
+ <1><79>: Abbrev Number: 3 (DW_TAG_typedef)
+    <7a>   DW_AT_type        : <0x84>
+    <7e>   DW_AT_name        : (indirect string, offset: 0x196): kernel_ulong_t
+    <82>   DW_AT_decl_file   : 2
+    <83>   DW_AT_decl_line   : 37
+ <1><84>: Abbrev Number: 3 (DW_TAG_typedef)
+    <85>   DW_AT_type        : <0x8f>
+    <89>   DW_AT_name        : (indirect string, offset: 0x185): __kernel_ulong_t
+    <8d>   DW_AT_decl_file   : 1
+    <8e>   DW_AT_decl_line   : 24
+ <1><8f>: Abbrev Number: 6 (DW_TAG_base_type)
+    <90>   DW_AT_name        : (indirect string, offset: 0x173): long unsigned int
+    <94>   DW_AT_encoding    : 7	(unsigned)
+    <95>   DW_AT_byte_size   : 4
+ <1><96>: Abbrev Number: 6 (DW_TAG_base_type)
+    <97>   DW_AT_name        : (indirect string, offset: 0x1b4): unsigned short
+    <9b>   DW_AT_encoding    : 7	(unsigned)
+    <9c>   DW_AT_byte_size   : 2
+ <1><9d>: Abbrev Number: 7 (DW_TAG_array_type)
+    <9e>   DW_AT_type        : <0xaa>
+ <2><a2>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <a3>   DW_AT_type        : <0xb1>
+    <a7>   DW_AT_lower_bound : 0
+    <a8>   DW_AT_count       : 1
+ <2><a9>: Abbrev Number: 0
+ <1><aa>: Abbrev Number: 6 (DW_TAG_base_type)
+    <ab>   DW_AT_name        : (indirect string, offset: 0x1ca): char
+    <af>   DW_AT_encoding    : 8	(unsigned char)
+    <b0>   DW_AT_byte_size   : 1
+ <1><b1>: Abbrev Number: 9 (DW_TAG_base_type)
+    <b2>   DW_AT_name        : (indirect string, offset: 0x1cf): sizetype
+    <b6>   DW_AT_byte_size   : 8
+    <b7>   DW_AT_encoding    : 7	(unsigned)
+ <1><b8>: Abbrev Number: 0
 
diff --git a/mpers-m32/kernel_dirent.d2 b/mpers-m32/kernel_dirent.d2
index 906d78a..904ca4f 100644
--- a/mpers-m32/kernel_dirent.d2
+++ b/mpers-m32/kernel_dirent.d2
@@ -1,87 +1,87 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 36
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x10e): kernel_dirent
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1d8): kernel_dirent
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 56
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 51
-<2><3f>
+<2><40>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa3): d_ino
-DW_AT_type        : <0x78>
+DW_AT_name        : (indirect string, offset: 0x16d): d_ino
+DW_AT_type        : <0x79>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 52
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><4d>
+<2><4e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdb): d_off
-DW_AT_type        : <0x78>
+DW_AT_name        : (indirect string, offset: 0x1a5): d_off
+DW_AT_type        : <0x79>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 53
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5b>
+<2><5c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe1): d_reclen
-DW_AT_type        : <0x95>
+DW_AT_name        : (indirect string, offset: 0x1ab): d_reclen
+DW_AT_type        : <0x96>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 54
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><69>
+<2><6a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf9): d_name
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x1c3): d_name
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 55
 DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
-<1><78>
+<1><79>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x83>
-DW_AT_name        : (indirect string, offset: 0xcc): kernel_ulong_t
+DW_AT_type        : <0x84>
+DW_AT_name        : (indirect string, offset: 0x196): kernel_ulong_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 37
-<1><83>
+<1><84>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x8e>
-DW_AT_name        : (indirect string, offset: 0xbb): __kernel_ulong_t
+DW_AT_type        : <0x8f>
+DW_AT_name        : (indirect string, offset: 0x185): __kernel_ulong_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
-<1><8e>
+<1><8f>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa9): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x173): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><95>
+<1><96>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xea): unsigned short
+DW_AT_name        : (indirect string, offset: 0x1b4): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><9c>
+<1><9d>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0xa9>
-<2><a1>
+DW_AT_type        : <0xaa>
+<2><a2>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0xb0>
+DW_AT_type        : <0xb1>
 DW_AT_lower_bound : 0
 DW_AT_count       : 1
-<1><a9>
+<1><aa>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x100): char
+DW_AT_name        : (indirect string, offset: 0x1ca): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><b0>
+<1><b1>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x105): sizetype
+DW_AT_name        : (indirect string, offset: 0x1cf): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
diff --git a/mpers-m32/mq_attr_t.d1 b/mpers-m32/mq_attr_t.d1
index 192ce5c..38805c5 100644
--- a/mpers-m32/mq_attr_t.d1
+++ b/mpers-m32/mq_attr_t.d1
@@ -1,83 +1,84 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xad (32-bit)
+   Length:        0xae (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/mq_attr_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/mq_attr_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x53): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 43
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xfd): mq_attr_t
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 39
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xf5): mq_attr
-    <40>   DW_AT_byte_size   : 32
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 24
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0x9f): mq_flags
-    <48>   DW_AT_type        : <0x8a>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 25
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xc1): mq_maxmsg
-    <56>   DW_AT_type        : <0x8a>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 26
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xcb): mq_msgsize
-    <64>   DW_AT_type        : <0x8a>
-    <68>   DW_AT_decl_file   : 2
-    <69>   DW_AT_decl_line   : 27
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xd6): mq_curmsgs
-    <72>   DW_AT_type        : <0x8a>
-    <76>   DW_AT_decl_file   : 2
-    <77>   DW_AT_decl_line   : 28
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0xe1): __reserved
-    <80>   DW_AT_type        : <0x9c>
-    <84>   DW_AT_decl_file   : 2
-    <85>   DW_AT_decl_line   : 29
-    <86>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><89>: Abbrev Number: 0
- <1><8a>: Abbrev Number: 3 (DW_TAG_typedef)
-    <8b>   DW_AT_type        : <0x95>
-    <8f>   DW_AT_name        : (indirect string, offset: 0xb1): __kernel_long_t
-    <93>   DW_AT_decl_file   : 1
-    <94>   DW_AT_decl_line   : 23
- <1><95>: Abbrev Number: 6 (DW_TAG_base_type)
-    <96>   DW_AT_name        : (indirect string, offset: 0xa8): long int
-    <9a>   DW_AT_encoding    : 5	(signed)
-    <9b>   DW_AT_byte_size   : 4
- <1><9c>: Abbrev Number: 7 (DW_TAG_array_type)
-    <9d>   DW_AT_type        : <0x8a>
- <2><a1>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <a2>   DW_AT_type        : <0xa9>
-    <a6>   DW_AT_lower_bound : 0
-    <a7>   DW_AT_count       : 4
- <2><a8>: Abbrev Number: 0
- <1><a9>: Abbrev Number: 9 (DW_TAG_base_type)
-    <aa>   DW_AT_name        : (indirect string, offset: 0xec): sizetype
-    <ae>   DW_AT_byte_size   : 8
-    <af>   DW_AT_encoding    : 7	(unsigned)
- <1><b0>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11d): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 43
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1c7): mq_attr_t
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 39
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1bf): mq_attr
+    <41>   DW_AT_byte_size   : 32
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 24
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x169): mq_flags
+    <49>   DW_AT_type        : <0x8b>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 25
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x18b): mq_maxmsg
+    <57>   DW_AT_type        : <0x8b>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 26
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x195): mq_msgsize
+    <65>   DW_AT_type        : <0x8b>
+    <69>   DW_AT_decl_file   : 2
+    <6a>   DW_AT_decl_line   : 27
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1a0): mq_curmsgs
+    <73>   DW_AT_type        : <0x8b>
+    <77>   DW_AT_decl_file   : 2
+    <78>   DW_AT_decl_line   : 28
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1ab): __reserved
+    <81>   DW_AT_type        : <0x9d>
+    <85>   DW_AT_decl_file   : 2
+    <86>   DW_AT_decl_line   : 29
+    <87>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><8a>: Abbrev Number: 0
+ <1><8b>: Abbrev Number: 3 (DW_TAG_typedef)
+    <8c>   DW_AT_type        : <0x96>
+    <90>   DW_AT_name        : (indirect string, offset: 0x17b): __kernel_long_t
+    <94>   DW_AT_decl_file   : 1
+    <95>   DW_AT_decl_line   : 23
+ <1><96>: Abbrev Number: 6 (DW_TAG_base_type)
+    <97>   DW_AT_name        : (indirect string, offset: 0x172): long int
+    <9b>   DW_AT_encoding    : 5	(signed)
+    <9c>   DW_AT_byte_size   : 4
+ <1><9d>: Abbrev Number: 7 (DW_TAG_array_type)
+    <9e>   DW_AT_type        : <0x8b>
+ <2><a2>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <a3>   DW_AT_type        : <0xaa>
+    <a7>   DW_AT_lower_bound : 0
+    <a8>   DW_AT_count       : 4
+ <2><a9>: Abbrev Number: 0
+ <1><aa>: Abbrev Number: 9 (DW_TAG_base_type)
+    <ab>   DW_AT_name        : (indirect string, offset: 0x1b6): sizetype
+    <af>   DW_AT_byte_size   : 8
+    <b0>   DW_AT_encoding    : 7	(unsigned)
+ <1><b1>: Abbrev Number: 0
 
diff --git a/mpers-m32/mq_attr_t.d2 b/mpers-m32/mq_attr_t.d2
index be61833..12be562 100644
--- a/mpers-m32/mq_attr_t.d2
+++ b/mpers-m32/mq_attr_t.d2
@@ -1,79 +1,79 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 43
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xfd): mq_attr_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1c7): mq_attr_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 39
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xf5): mq_attr
+DW_AT_name        : (indirect string, offset: 0x1bf): mq_attr
 DW_AT_byte_size   : 32
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 24
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x9f): mq_flags
-DW_AT_type        : <0x8a>
+DW_AT_name        : (indirect string, offset: 0x169): mq_flags
+DW_AT_type        : <0x8b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc1): mq_maxmsg
-DW_AT_type        : <0x8a>
+DW_AT_name        : (indirect string, offset: 0x18b): mq_maxmsg
+DW_AT_type        : <0x8b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcb): mq_msgsize
-DW_AT_type        : <0x8a>
+DW_AT_name        : (indirect string, offset: 0x195): mq_msgsize
+DW_AT_type        : <0x8b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 27
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd6): mq_curmsgs
-DW_AT_type        : <0x8a>
+DW_AT_name        : (indirect string, offset: 0x1a0): mq_curmsgs
+DW_AT_type        : <0x8b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe1): __reserved
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x1ab): __reserved
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<1><8a>
+<1><8b>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x95>
-DW_AT_name        : (indirect string, offset: 0xb1): __kernel_long_t
+DW_AT_type        : <0x96>
+DW_AT_name        : (indirect string, offset: 0x17b): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><95>
+<1><96>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa8): long int
+DW_AT_name        : (indirect string, offset: 0x172): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><9c>
+<1><9d>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x8a>
-<2><a1>
+DW_AT_type        : <0x8b>
+<2><a2>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0xa9>
+DW_AT_type        : <0xaa>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4
-<1><a9>
+<1><aa>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xec): sizetype
+DW_AT_name        : (indirect string, offset: 0x1b6): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
diff --git a/mpers-m32/msgbuf_t.d1 b/mpers-m32/msgbuf_t.d1
index 3e5b353..cd3f2df 100644
--- a/mpers-m32/msgbuf_t.d1
+++ b/mpers-m32/msgbuf_t.d1
@@ -1,69 +1,70 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x8a (32-bit)
+   Length:        0x8b (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/msgbuf_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/msgbuf_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x52): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8d): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 39
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xd8): msgbuf_t
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 38
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xd1): msgbuf
-    <40>   DW_AT_byte_size   : 8
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 43
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0x9e): mtype
-    <48>   DW_AT_type        : <0x60>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 44
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xbd): mtext
-    <56>   DW_AT_type        : <0x72>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 45
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 0
- <1><60>: Abbrev Number: 3 (DW_TAG_typedef)
-    <61>   DW_AT_type        : <0x6b>
-    <65>   DW_AT_name        : (indirect string, offset: 0xad): __kernel_long_t
-    <69>   DW_AT_decl_file   : 1
-    <6a>   DW_AT_decl_line   : 23
- <1><6b>: Abbrev Number: 6 (DW_TAG_base_type)
-    <6c>   DW_AT_name        : (indirect string, offset: 0xa4): long int
-    <70>   DW_AT_encoding    : 5	(signed)
-    <71>   DW_AT_byte_size   : 4
- <1><72>: Abbrev Number: 7 (DW_TAG_array_type)
-    <73>   DW_AT_type        : <0x7f>
- <2><77>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <78>   DW_AT_type        : <0x86>
-    <7c>   DW_AT_lower_bound : 0
-    <7d>   DW_AT_count       : 1
- <2><7e>: Abbrev Number: 0
- <1><7f>: Abbrev Number: 6 (DW_TAG_base_type)
-    <80>   DW_AT_name        : (indirect string, offset: 0xc3): char
-    <84>   DW_AT_encoding    : 8	(unsigned char)
-    <85>   DW_AT_byte_size   : 1
- <1><86>: Abbrev Number: 9 (DW_TAG_base_type)
-    <87>   DW_AT_name        : (indirect string, offset: 0xc8): sizetype
-    <8b>   DW_AT_byte_size   : 8
-    <8c>   DW_AT_encoding    : 7	(unsigned)
- <1><8d>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11c): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x157): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 39
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1a2): msgbuf_t
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 38
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x19b): msgbuf
+    <41>   DW_AT_byte_size   : 8
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 43
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x168): mtype
+    <49>   DW_AT_type        : <0x61>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 44
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x187): mtext
+    <57>   DW_AT_type        : <0x73>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 45
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 0
+ <1><61>: Abbrev Number: 3 (DW_TAG_typedef)
+    <62>   DW_AT_type        : <0x6c>
+    <66>   DW_AT_name        : (indirect string, offset: 0x177): __kernel_long_t
+    <6a>   DW_AT_decl_file   : 1
+    <6b>   DW_AT_decl_line   : 23
+ <1><6c>: Abbrev Number: 6 (DW_TAG_base_type)
+    <6d>   DW_AT_name        : (indirect string, offset: 0x16e): long int
+    <71>   DW_AT_encoding    : 5	(signed)
+    <72>   DW_AT_byte_size   : 4
+ <1><73>: Abbrev Number: 7 (DW_TAG_array_type)
+    <74>   DW_AT_type        : <0x80>
+ <2><78>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <79>   DW_AT_type        : <0x87>
+    <7d>   DW_AT_lower_bound : 0
+    <7e>   DW_AT_count       : 1
+ <2><7f>: Abbrev Number: 0
+ <1><80>: Abbrev Number: 6 (DW_TAG_base_type)
+    <81>   DW_AT_name        : (indirect string, offset: 0x18d): char
+    <85>   DW_AT_encoding    : 8	(unsigned char)
+    <86>   DW_AT_byte_size   : 1
+ <1><87>: Abbrev Number: 9 (DW_TAG_base_type)
+    <88>   DW_AT_name        : (indirect string, offset: 0x192): sizetype
+    <8c>   DW_AT_byte_size   : 8
+    <8d>   DW_AT_encoding    : 7	(unsigned)
+ <1><8e>: Abbrev Number: 0
 
diff --git a/mpers-m32/msgbuf_t.d2 b/mpers-m32/msgbuf_t.d2
index 38a10dd..f7929c7 100644
--- a/mpers-m32/msgbuf_t.d2
+++ b/mpers-m32/msgbuf_t.d2
@@ -1,63 +1,63 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8d): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x157): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 39
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xd8): msgbuf_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1a2): msgbuf_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 38
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xd1): msgbuf
+DW_AT_name        : (indirect string, offset: 0x19b): msgbuf
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 43
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x9e): mtype
-DW_AT_type        : <0x60>
+DW_AT_name        : (indirect string, offset: 0x168): mtype
+DW_AT_type        : <0x61>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 44
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xbd): mtext
-DW_AT_type        : <0x72>
+DW_AT_name        : (indirect string, offset: 0x187): mtext
+DW_AT_type        : <0x73>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 45
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><60>
+<1><61>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x6b>
-DW_AT_name        : (indirect string, offset: 0xad): __kernel_long_t
+DW_AT_type        : <0x6c>
+DW_AT_name        : (indirect string, offset: 0x177): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><6b>
+<1><6c>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa4): long int
+DW_AT_name        : (indirect string, offset: 0x16e): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><72>
+<1><73>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x7f>
-<2><77>
+DW_AT_type        : <0x80>
+<2><78>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x86>
+DW_AT_type        : <0x87>
 DW_AT_lower_bound : 0
 DW_AT_count       : 1
-<1><7f>
+<1><80>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc3): char
+DW_AT_name        : (indirect string, offset: 0x18d): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><86>
+<1><87>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc8): sizetype
+DW_AT_name        : (indirect string, offset: 0x192): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
diff --git a/mpers-m32/msqid_ds_t.d1 b/mpers-m32/msqid_ds_t.d1
index 7d750ef..4124b20 100644
--- a/mpers-m32/msqid_ds_t.d1
+++ b/mpers-m32/msqid_ds_t.d1
@@ -1,246 +1,247 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x214 (32-bit)
+   Length:        0x215 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/msqid_ds_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/msqid_ds_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x54): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8f): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 5
-    <29>   DW_AT_decl_line   : 49
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x238): msqid_ds_t
-    <39>   DW_AT_decl_file   : 5
-    <3a>   DW_AT_decl_line   : 42
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x22d): msqid64_ds
-    <40>   DW_AT_byte_size   : 76
-    <41>   DW_AT_decl_file   : 4
-    <42>   DW_AT_decl_line   : 22
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa0): msg_perm
-    <48>   DW_AT_type        : <0xde>
-    <4c>   DW_AT_decl_file   : 4
-    <4d>   DW_AT_decl_line   : 23
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0x190): msg_stime
-    <56>   DW_AT_type        : <0x1ef>
-    <5a>   DW_AT_decl_file   : 4
-    <5b>   DW_AT_decl_line   : 24
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0x1c3): msg_rtime
-    <64>   DW_AT_type        : <0x1ef>
-    <68>   DW_AT_decl_file   : 4
-    <69>   DW_AT_decl_line   : 28
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0x1cd): msg_ctime
-    <72>   DW_AT_type        : <0x1ef>
-    <76>   DW_AT_decl_file   : 4
-    <77>   DW_AT_decl_line   : 32
-    <78>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0x1d7): msg_cbytes
-    <80>   DW_AT_type        : <0x1dd>
-    <84>   DW_AT_decl_file   : 4
-    <85>   DW_AT_decl_line   : 36
-    <86>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x1e2): msg_qnum
-    <8e>   DW_AT_type        : <0x1dd>
-    <92>   DW_AT_decl_file   : 4
-    <93>   DW_AT_decl_line   : 37
-    <94>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0x1eb): msg_qbytes
-    <9c>   DW_AT_type        : <0x1dd>
-    <a0>   DW_AT_decl_file   : 4
-    <a1>   DW_AT_decl_line   : 38
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0x1f6): msg_lspid
-    <aa>   DW_AT_type        : <0x20c>
-    <ae>   DW_AT_decl_file   : 4
-    <af>   DW_AT_decl_line   : 39
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0x20f): msg_lrpid
-    <b8>   DW_AT_type        : <0x20c>
-    <bc>   DW_AT_decl_file   : 4
-    <bd>   DW_AT_decl_line   : 40
-    <be>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x219): __unused4
-    <c6>   DW_AT_type        : <0x1dd>
-    <ca>   DW_AT_decl_file   : 4
-    <cb>   DW_AT_decl_line   : 41
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
- <2><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0x223): __unused5
-    <d4>   DW_AT_type        : <0x1dd>
-    <d8>   DW_AT_decl_file   : 4
-    <d9>   DW_AT_decl_line   : 42
-    <da>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
- <2><dd>: Abbrev Number: 0
- <1><de>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <df>   DW_AT_name        : (indirect string, offset: 0x185): ipc64_perm
-    <e3>   DW_AT_byte_size   : 36
-    <e4>   DW_AT_decl_file   : 2
-    <e5>   DW_AT_decl_line   : 21
- <2><e6>: Abbrev Number: 5 (DW_TAG_member)
-    <e7>   DW_AT_name        : (indirect string, offset: 0xa9): key
-    <eb>   DW_AT_type        : <0x181>
-    <ef>   DW_AT_decl_file   : 2
-    <f0>   DW_AT_decl_line   : 22
-    <f1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><f4>: Abbrev Number: 5 (DW_TAG_member)
-    <f5>   DW_AT_name        : (indirect string, offset: 0xc0): uid
-    <f9>   DW_AT_type        : <0x193>
-    <fd>   DW_AT_decl_file   : 2
-    <fe>   DW_AT_decl_line   : 23
-    <ff>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><102>: Abbrev Number: 5 (DW_TAG_member)
-    <103>   DW_AT_name        : (indirect string, offset: 0xe2): gid
-    <107>   DW_AT_type        : <0x1a5>
-    <10b>   DW_AT_decl_file   : 2
-    <10c>   DW_AT_decl_line   : 24
-    <10d>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><110>: Abbrev Number: 5 (DW_TAG_member)
-    <111>   DW_AT_name        : (indirect string, offset: 0xf7): cuid
-    <115>   DW_AT_type        : <0x193>
-    <119>   DW_AT_decl_file   : 2
-    <11a>   DW_AT_decl_line   : 25
-    <11b>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><11e>: Abbrev Number: 5 (DW_TAG_member)
-    <11f>   DW_AT_name        : (indirect string, offset: 0xfc): cgid
-    <123>   DW_AT_type        : <0x1a5>
-    <127>   DW_AT_decl_file   : 2
-    <128>   DW_AT_decl_line   : 26
-    <129>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><12c>: Abbrev Number: 5 (DW_TAG_member)
-    <12d>   DW_AT_name        : (indirect string, offset: 0x101): mode
-    <131>   DW_AT_type        : <0x1b0>
-    <135>   DW_AT_decl_file   : 2
-    <136>   DW_AT_decl_line   : 27
-    <137>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><13a>: Abbrev Number: 5 (DW_TAG_member)
-    <13b>   DW_AT_name        : (indirect string, offset: 0x116): __pad1
-    <13f>   DW_AT_type        : <0x1bb>
-    <143>   DW_AT_decl_file   : 2
-    <144>   DW_AT_decl_line   : 28
-    <145>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><148>: Abbrev Number: 5 (DW_TAG_member)
-    <149>   DW_AT_name        : (indirect string, offset: 0x134): seq
-    <14d>   DW_AT_type        : <0x1d6>
-    <151>   DW_AT_decl_file   : 2
-    <152>   DW_AT_decl_line   : 29
-    <153>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><156>: Abbrev Number: 5 (DW_TAG_member)
-    <157>   DW_AT_name        : (indirect string, offset: 0x147): __pad2
-    <15b>   DW_AT_type        : <0x1d6>
-    <15f>   DW_AT_decl_file   : 2
-    <160>   DW_AT_decl_line   : 30
-    <161>   DW_AT_data_member_location: 2 byte block: 23 1a 	(DW_OP_plus_uconst: 26)
- <2><164>: Abbrev Number: 5 (DW_TAG_member)
-    <165>   DW_AT_name        : (indirect string, offset: 0x14e): __unused1
-    <169>   DW_AT_type        : <0x1dd>
-    <16d>   DW_AT_decl_file   : 2
-    <16e>   DW_AT_decl_line   : 31
-    <16f>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><172>: Abbrev Number: 5 (DW_TAG_member)
-    <173>   DW_AT_name        : (indirect string, offset: 0x17b): __unused2
-    <177>   DW_AT_type        : <0x1dd>
-    <17b>   DW_AT_decl_file   : 2
-    <17c>   DW_AT_decl_line   : 32
-    <17d>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><180>: Abbrev Number: 0
- <1><181>: Abbrev Number: 3 (DW_TAG_typedef)
-    <182>   DW_AT_type        : <0x18c>
-    <186>   DW_AT_name        : (indirect string, offset: 0xb1): __kernel_key_t
-    <18a>   DW_AT_decl_file   : 1
-    <18b>   DW_AT_decl_line   : 28
- <1><18c>: Abbrev Number: 6 (DW_TAG_base_type)
-    <18d>   DW_AT_name        : (indirect string, offset: 0xad): int
-    <191>   DW_AT_encoding    : 5	(signed)
-    <192>   DW_AT_byte_size   : 4
- <1><193>: Abbrev Number: 3 (DW_TAG_typedef)
-    <194>   DW_AT_type        : <0x19e>
-    <198>   DW_AT_name        : (indirect string, offset: 0xd1): __kernel_uid32_t
-    <19c>   DW_AT_decl_file   : 3
-    <19d>   DW_AT_decl_line   : 49
- <1><19e>: Abbrev Number: 6 (DW_TAG_base_type)
-    <19f>   DW_AT_name        : (indirect string, offset: 0xc4): unsigned int
-    <1a3>   DW_AT_encoding    : 7	(unsigned)
-    <1a4>   DW_AT_byte_size   : 4
- <1><1a5>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1a6>   DW_AT_type        : <0x19e>
-    <1aa>   DW_AT_name        : (indirect string, offset: 0xe6): __kernel_gid32_t
-    <1ae>   DW_AT_decl_file   : 3
-    <1af>   DW_AT_decl_line   : 50
- <1><1b0>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1b1>   DW_AT_type        : <0x19e>
-    <1b5>   DW_AT_name        : (indirect string, offset: 0x106): __kernel_mode_t
-    <1b9>   DW_AT_decl_file   : 3
-    <1ba>   DW_AT_decl_line   : 30
- <1><1bb>: Abbrev Number: 7 (DW_TAG_array_type)
-    <1bc>   DW_AT_type        : <0x1c8>
- <2><1c0>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <1c1>   DW_AT_type        : <0x1cf>
-    <1c5>   DW_AT_lower_bound : 0
-    <1c6>   DW_AT_count       : 0
- <2><1c7>: Abbrev Number: 0
- <1><1c8>: Abbrev Number: 6 (DW_TAG_base_type)
-    <1c9>   DW_AT_name        : (indirect string, offset: 0x11d): unsigned char
-    <1cd>   DW_AT_encoding    : 8	(unsigned char)
-    <1ce>   DW_AT_byte_size   : 1
- <1><1cf>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1d0>   DW_AT_name        : (indirect string, offset: 0x12b): sizetype
-    <1d4>   DW_AT_byte_size   : 8
-    <1d5>   DW_AT_encoding    : 7	(unsigned)
- <1><1d6>: Abbrev Number: 6 (DW_TAG_base_type)
-    <1d7>   DW_AT_name        : (indirect string, offset: 0x138): unsigned short
-    <1db>   DW_AT_encoding    : 7	(unsigned)
-    <1dc>   DW_AT_byte_size   : 2
- <1><1dd>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1de>   DW_AT_type        : <0x1e8>
-    <1e2>   DW_AT_name        : (indirect string, offset: 0x16a): __kernel_ulong_t
-    <1e6>   DW_AT_decl_file   : 3
-    <1e7>   DW_AT_decl_line   : 24
- <1><1e8>: Abbrev Number: 6 (DW_TAG_base_type)
-    <1e9>   DW_AT_name        : (indirect string, offset: 0x158): long unsigned int
-    <1ed>   DW_AT_encoding    : 7	(unsigned)
-    <1ee>   DW_AT_byte_size   : 4
- <1><1ef>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1f0>   DW_AT_type        : <0x1fa>
-    <1f4>   DW_AT_name        : (indirect string, offset: 0x1b3): __kernel_time_t
-    <1f8>   DW_AT_decl_file   : 3
-    <1f9>   DW_AT_decl_line   : 77
- <1><1fa>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1fb>   DW_AT_type        : <0x205>
-    <1ff>   DW_AT_name        : (indirect string, offset: 0x1a3): __kernel_long_t
-    <203>   DW_AT_decl_file   : 3
-    <204>   DW_AT_decl_line   : 23
- <1><205>: Abbrev Number: 6 (DW_TAG_base_type)
-    <206>   DW_AT_name        : (indirect string, offset: 0x19a): long int
-    <20a>   DW_AT_encoding    : 5	(signed)
-    <20b>   DW_AT_byte_size   : 4
- <1><20c>: Abbrev Number: 3 (DW_TAG_typedef)
-    <20d>   DW_AT_type        : <0x18c>
-    <211>   DW_AT_name        : (indirect string, offset: 0x200): __kernel_pid_t
-    <215>   DW_AT_decl_file   : 3
-    <216>   DW_AT_decl_line   : 33
- <1><217>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11e): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x159): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 5
+    <2a>   DW_AT_decl_line   : 49
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x302): msqid_ds_t
+    <3a>   DW_AT_decl_file   : 5
+    <3b>   DW_AT_decl_line   : 42
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x2f7): msqid64_ds
+    <41>   DW_AT_byte_size   : 76
+    <42>   DW_AT_decl_file   : 4
+    <43>   DW_AT_decl_line   : 22
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16a): msg_perm
+    <49>   DW_AT_type        : <0xdf>
+    <4d>   DW_AT_decl_file   : 4
+    <4e>   DW_AT_decl_line   : 23
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x25a): msg_stime
+    <57>   DW_AT_type        : <0x1f0>
+    <5b>   DW_AT_decl_file   : 4
+    <5c>   DW_AT_decl_line   : 24
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x28d): msg_rtime
+    <65>   DW_AT_type        : <0x1f0>
+    <69>   DW_AT_decl_file   : 4
+    <6a>   DW_AT_decl_line   : 28
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x297): msg_ctime
+    <73>   DW_AT_type        : <0x1f0>
+    <77>   DW_AT_decl_file   : 4
+    <78>   DW_AT_decl_line   : 32
+    <79>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x2a1): msg_cbytes
+    <81>   DW_AT_type        : <0x1de>
+    <85>   DW_AT_decl_file   : 4
+    <86>   DW_AT_decl_line   : 36
+    <87>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x2ac): msg_qnum
+    <8f>   DW_AT_type        : <0x1de>
+    <93>   DW_AT_decl_file   : 4
+    <94>   DW_AT_decl_line   : 37
+    <95>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x2b5): msg_qbytes
+    <9d>   DW_AT_type        : <0x1de>
+    <a1>   DW_AT_decl_file   : 4
+    <a2>   DW_AT_decl_line   : 38
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x2c0): msg_lspid
+    <ab>   DW_AT_type        : <0x20d>
+    <af>   DW_AT_decl_file   : 4
+    <b0>   DW_AT_decl_line   : 39
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x2d9): msg_lrpid
+    <b9>   DW_AT_type        : <0x20d>
+    <bd>   DW_AT_decl_file   : 4
+    <be>   DW_AT_decl_line   : 40
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x2e3): __unused4
+    <c7>   DW_AT_type        : <0x1de>
+    <cb>   DW_AT_decl_file   : 4
+    <cc>   DW_AT_decl_line   : 41
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
+ <2><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x2ed): __unused5
+    <d5>   DW_AT_type        : <0x1de>
+    <d9>   DW_AT_decl_file   : 4
+    <da>   DW_AT_decl_line   : 42
+    <db>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
+ <2><de>: Abbrev Number: 0
+ <1><df>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <e0>   DW_AT_name        : (indirect string, offset: 0x24f): ipc64_perm
+    <e4>   DW_AT_byte_size   : 36
+    <e5>   DW_AT_decl_file   : 2
+    <e6>   DW_AT_decl_line   : 21
+ <2><e7>: Abbrev Number: 5 (DW_TAG_member)
+    <e8>   DW_AT_name        : (indirect string, offset: 0x173): key
+    <ec>   DW_AT_type        : <0x182>
+    <f0>   DW_AT_decl_file   : 2
+    <f1>   DW_AT_decl_line   : 22
+    <f2>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><f5>: Abbrev Number: 5 (DW_TAG_member)
+    <f6>   DW_AT_name        : (indirect string, offset: 0x18a): uid
+    <fa>   DW_AT_type        : <0x194>
+    <fe>   DW_AT_decl_file   : 2
+    <ff>   DW_AT_decl_line   : 23
+    <100>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><103>: Abbrev Number: 5 (DW_TAG_member)
+    <104>   DW_AT_name        : (indirect string, offset: 0x1ac): gid
+    <108>   DW_AT_type        : <0x1a6>
+    <10c>   DW_AT_decl_file   : 2
+    <10d>   DW_AT_decl_line   : 24
+    <10e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><111>: Abbrev Number: 5 (DW_TAG_member)
+    <112>   DW_AT_name        : (indirect string, offset: 0x1c1): cuid
+    <116>   DW_AT_type        : <0x194>
+    <11a>   DW_AT_decl_file   : 2
+    <11b>   DW_AT_decl_line   : 25
+    <11c>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><11f>: Abbrev Number: 5 (DW_TAG_member)
+    <120>   DW_AT_name        : (indirect string, offset: 0x1c6): cgid
+    <124>   DW_AT_type        : <0x1a6>
+    <128>   DW_AT_decl_file   : 2
+    <129>   DW_AT_decl_line   : 26
+    <12a>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><12d>: Abbrev Number: 5 (DW_TAG_member)
+    <12e>   DW_AT_name        : (indirect string, offset: 0x1cb): mode
+    <132>   DW_AT_type        : <0x1b1>
+    <136>   DW_AT_decl_file   : 2
+    <137>   DW_AT_decl_line   : 27
+    <138>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><13b>: Abbrev Number: 5 (DW_TAG_member)
+    <13c>   DW_AT_name        : (indirect string, offset: 0x1e0): __pad1
+    <140>   DW_AT_type        : <0x1bc>
+    <144>   DW_AT_decl_file   : 2
+    <145>   DW_AT_decl_line   : 28
+    <146>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><149>: Abbrev Number: 5 (DW_TAG_member)
+    <14a>   DW_AT_name        : (indirect string, offset: 0x1fe): seq
+    <14e>   DW_AT_type        : <0x1d7>
+    <152>   DW_AT_decl_file   : 2
+    <153>   DW_AT_decl_line   : 29
+    <154>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><157>: Abbrev Number: 5 (DW_TAG_member)
+    <158>   DW_AT_name        : (indirect string, offset: 0x211): __pad2
+    <15c>   DW_AT_type        : <0x1d7>
+    <160>   DW_AT_decl_file   : 2
+    <161>   DW_AT_decl_line   : 30
+    <162>   DW_AT_data_member_location: 2 byte block: 23 1a 	(DW_OP_plus_uconst: 26)
+ <2><165>: Abbrev Number: 5 (DW_TAG_member)
+    <166>   DW_AT_name        : (indirect string, offset: 0x218): __unused1
+    <16a>   DW_AT_type        : <0x1de>
+    <16e>   DW_AT_decl_file   : 2
+    <16f>   DW_AT_decl_line   : 31
+    <170>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><173>: Abbrev Number: 5 (DW_TAG_member)
+    <174>   DW_AT_name        : (indirect string, offset: 0x245): __unused2
+    <178>   DW_AT_type        : <0x1de>
+    <17c>   DW_AT_decl_file   : 2
+    <17d>   DW_AT_decl_line   : 32
+    <17e>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><181>: Abbrev Number: 0
+ <1><182>: Abbrev Number: 3 (DW_TAG_typedef)
+    <183>   DW_AT_type        : <0x18d>
+    <187>   DW_AT_name        : (indirect string, offset: 0x17b): __kernel_key_t
+    <18b>   DW_AT_decl_file   : 1
+    <18c>   DW_AT_decl_line   : 28
+ <1><18d>: Abbrev Number: 6 (DW_TAG_base_type)
+    <18e>   DW_AT_name        : (indirect string, offset: 0x177): int
+    <192>   DW_AT_encoding    : 5	(signed)
+    <193>   DW_AT_byte_size   : 4
+ <1><194>: Abbrev Number: 3 (DW_TAG_typedef)
+    <195>   DW_AT_type        : <0x19f>
+    <199>   DW_AT_name        : (indirect string, offset: 0x19b): __kernel_uid32_t
+    <19d>   DW_AT_decl_file   : 3
+    <19e>   DW_AT_decl_line   : 49
+ <1><19f>: Abbrev Number: 6 (DW_TAG_base_type)
+    <1a0>   DW_AT_name        : (indirect string, offset: 0x18e): unsigned int
+    <1a4>   DW_AT_encoding    : 7	(unsigned)
+    <1a5>   DW_AT_byte_size   : 4
+ <1><1a6>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1a7>   DW_AT_type        : <0x19f>
+    <1ab>   DW_AT_name        : (indirect string, offset: 0x1b0): __kernel_gid32_t
+    <1af>   DW_AT_decl_file   : 3
+    <1b0>   DW_AT_decl_line   : 50
+ <1><1b1>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1b2>   DW_AT_type        : <0x19f>
+    <1b6>   DW_AT_name        : (indirect string, offset: 0x1d0): __kernel_mode_t
+    <1ba>   DW_AT_decl_file   : 3
+    <1bb>   DW_AT_decl_line   : 30
+ <1><1bc>: Abbrev Number: 7 (DW_TAG_array_type)
+    <1bd>   DW_AT_type        : <0x1c9>
+ <2><1c1>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <1c2>   DW_AT_type        : <0x1d0>
+    <1c6>   DW_AT_lower_bound : 0
+    <1c7>   DW_AT_count       : 0
+ <2><1c8>: Abbrev Number: 0
+ <1><1c9>: Abbrev Number: 6 (DW_TAG_base_type)
+    <1ca>   DW_AT_name        : (indirect string, offset: 0x1e7): unsigned char
+    <1ce>   DW_AT_encoding    : 8	(unsigned char)
+    <1cf>   DW_AT_byte_size   : 1
+ <1><1d0>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1d1>   DW_AT_name        : (indirect string, offset: 0x1f5): sizetype
+    <1d5>   DW_AT_byte_size   : 8
+    <1d6>   DW_AT_encoding    : 7	(unsigned)
+ <1><1d7>: Abbrev Number: 6 (DW_TAG_base_type)
+    <1d8>   DW_AT_name        : (indirect string, offset: 0x202): unsigned short
+    <1dc>   DW_AT_encoding    : 7	(unsigned)
+    <1dd>   DW_AT_byte_size   : 2
+ <1><1de>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1df>   DW_AT_type        : <0x1e9>
+    <1e3>   DW_AT_name        : (indirect string, offset: 0x234): __kernel_ulong_t
+    <1e7>   DW_AT_decl_file   : 3
+    <1e8>   DW_AT_decl_line   : 24
+ <1><1e9>: Abbrev Number: 6 (DW_TAG_base_type)
+    <1ea>   DW_AT_name        : (indirect string, offset: 0x222): long unsigned int
+    <1ee>   DW_AT_encoding    : 7	(unsigned)
+    <1ef>   DW_AT_byte_size   : 4
+ <1><1f0>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1f1>   DW_AT_type        : <0x1fb>
+    <1f5>   DW_AT_name        : (indirect string, offset: 0x27d): __kernel_time_t
+    <1f9>   DW_AT_decl_file   : 3
+    <1fa>   DW_AT_decl_line   : 77
+ <1><1fb>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1fc>   DW_AT_type        : <0x206>
+    <200>   DW_AT_name        : (indirect string, offset: 0x26d): __kernel_long_t
+    <204>   DW_AT_decl_file   : 3
+    <205>   DW_AT_decl_line   : 23
+ <1><206>: Abbrev Number: 6 (DW_TAG_base_type)
+    <207>   DW_AT_name        : (indirect string, offset: 0x264): long int
+    <20b>   DW_AT_encoding    : 5	(signed)
+    <20c>   DW_AT_byte_size   : 4
+ <1><20d>: Abbrev Number: 3 (DW_TAG_typedef)
+    <20e>   DW_AT_type        : <0x18d>
+    <212>   DW_AT_name        : (indirect string, offset: 0x2ca): __kernel_pid_t
+    <216>   DW_AT_decl_file   : 3
+    <217>   DW_AT_decl_line   : 33
+ <1><218>: Abbrev Number: 0
 
diff --git a/mpers-m32/msqid_ds_t.d2 b/mpers-m32/msqid_ds_t.d2
index e1f1686..67fad36 100644
--- a/mpers-m32/msqid_ds_t.d2
+++ b/mpers-m32/msqid_ds_t.d2
@@ -1,271 +1,271 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8f): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x159): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 49
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x238): msqid_ds_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x302): msqid_ds_t
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 42
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x22d): msqid64_ds
+DW_AT_name        : (indirect string, offset: 0x2f7): msqid64_ds
 DW_AT_byte_size   : 76
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 22
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa0): msg_perm
-DW_AT_type        : <0xde>
+DW_AT_name        : (indirect string, offset: 0x16a): msg_perm
+DW_AT_type        : <0xdf>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 23
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x190): msg_stime
-DW_AT_type        : <0x1ef>
+DW_AT_name        : (indirect string, offset: 0x25a): msg_stime
+DW_AT_type        : <0x1f0>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1c3): msg_rtime
-DW_AT_type        : <0x1ef>
+DW_AT_name        : (indirect string, offset: 0x28d): msg_rtime
+DW_AT_type        : <0x1f0>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1cd): msg_ctime
-DW_AT_type        : <0x1ef>
+DW_AT_name        : (indirect string, offset: 0x297): msg_ctime
+DW_AT_type        : <0x1f0>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d7): msg_cbytes
-DW_AT_type        : <0x1dd>
+DW_AT_name        : (indirect string, offset: 0x2a1): msg_cbytes
+DW_AT_type        : <0x1de>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1e2): msg_qnum
-DW_AT_type        : <0x1dd>
+DW_AT_name        : (indirect string, offset: 0x2ac): msg_qnum
+DW_AT_type        : <0x1de>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1eb): msg_qbytes
-DW_AT_type        : <0x1dd>
+DW_AT_name        : (indirect string, offset: 0x2b5): msg_qbytes
+DW_AT_type        : <0x1de>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f6): msg_lspid
-DW_AT_type        : <0x20c>
+DW_AT_name        : (indirect string, offset: 0x2c0): msg_lspid
+DW_AT_type        : <0x20d>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x20f): msg_lrpid
-DW_AT_type        : <0x20c>
+DW_AT_name        : (indirect string, offset: 0x2d9): msg_lrpid
+DW_AT_type        : <0x20d>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x219): __unused4
-DW_AT_type        : <0x1dd>
+DW_AT_name        : (indirect string, offset: 0x2e3): __unused4
+DW_AT_type        : <0x1de>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
-<2><cf>
+<2><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x223): __unused5
-DW_AT_type        : <0x1dd>
+DW_AT_name        : (indirect string, offset: 0x2ed): __unused5
+DW_AT_type        : <0x1de>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 42
 DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
-<1><de>
+<1><df>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x185): ipc64_perm
+DW_AT_name        : (indirect string, offset: 0x24f): ipc64_perm
 DW_AT_byte_size   : 36
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 21
-<2><e6>
+<2><e7>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa9): key
-DW_AT_type        : <0x181>
+DW_AT_name        : (indirect string, offset: 0x173): key
+DW_AT_type        : <0x182>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 22
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><f4>
+<2><f5>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc0): uid
-DW_AT_type        : <0x193>
+DW_AT_name        : (indirect string, offset: 0x18a): uid
+DW_AT_type        : <0x194>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 23
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><102>
+<2><103>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe2): gid
-DW_AT_type        : <0x1a5>
+DW_AT_name        : (indirect string, offset: 0x1ac): gid
+DW_AT_type        : <0x1a6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><110>
+<2><111>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf7): cuid
-DW_AT_type        : <0x193>
+DW_AT_name        : (indirect string, offset: 0x1c1): cuid
+DW_AT_type        : <0x194>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><11e>
+<2><11f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfc): cgid
-DW_AT_type        : <0x1a5>
+DW_AT_name        : (indirect string, offset: 0x1c6): cgid
+DW_AT_type        : <0x1a6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><12c>
+<2><12d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x101): mode
-DW_AT_type        : <0x1b0>
+DW_AT_name        : (indirect string, offset: 0x1cb): mode
+DW_AT_type        : <0x1b1>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 27
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><13a>
+<2><13b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x116): __pad1
-DW_AT_type        : <0x1bb>
+DW_AT_name        : (indirect string, offset: 0x1e0): __pad1
+DW_AT_type        : <0x1bc>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><148>
+<2><149>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x134): seq
-DW_AT_type        : <0x1d6>
+DW_AT_name        : (indirect string, offset: 0x1fe): seq
+DW_AT_type        : <0x1d7>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><156>
+<2><157>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x147): __pad2
-DW_AT_type        : <0x1d6>
+DW_AT_name        : (indirect string, offset: 0x211): __pad2
+DW_AT_type        : <0x1d7>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 1a 	(DW_OP_plus_uconst: 26)
-<2><164>
+<2><165>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14e): __unused1
-DW_AT_type        : <0x1dd>
+DW_AT_name        : (indirect string, offset: 0x218): __unused1
+DW_AT_type        : <0x1de>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><172>
+<2><173>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17b): __unused2
-DW_AT_type        : <0x1dd>
+DW_AT_name        : (indirect string, offset: 0x245): __unused2
+DW_AT_type        : <0x1de>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<1><181>
+<1><182>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x18c>
-DW_AT_name        : (indirect string, offset: 0xb1): __kernel_key_t
+DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x17b): __kernel_key_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><18c>
+<1><18d>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xad): int
+DW_AT_name        : (indirect string, offset: 0x177): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><193>
+<1><194>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x19e>
-DW_AT_name        : (indirect string, offset: 0xd1): __kernel_uid32_t
+DW_AT_type        : <0x19f>
+DW_AT_name        : (indirect string, offset: 0x19b): __kernel_uid32_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 49
-<1><19e>
+<1><19f>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc4): unsigned int
+DW_AT_name        : (indirect string, offset: 0x18e): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><1a5>
+<1><1a6>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x19e>
-DW_AT_name        : (indirect string, offset: 0xe6): __kernel_gid32_t
+DW_AT_type        : <0x19f>
+DW_AT_name        : (indirect string, offset: 0x1b0): __kernel_gid32_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 50
-<1><1b0>
+<1><1b1>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x19e>
-DW_AT_name        : (indirect string, offset: 0x106): __kernel_mode_t
+DW_AT_type        : <0x19f>
+DW_AT_name        : (indirect string, offset: 0x1d0): __kernel_mode_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 30
-<1><1bb>
+<1><1bc>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x1c8>
-<2><1c0>
+DW_AT_type        : <0x1c9>
+<2><1c1>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x1cf>
+DW_AT_type        : <0x1d0>
 DW_AT_lower_bound : 0
 DW_AT_count       : 0
-<1><1c8>
+<1><1c9>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x11d): unsigned char
+DW_AT_name        : (indirect string, offset: 0x1e7): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><1cf>
+<1><1d0>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x12b): sizetype
+DW_AT_name        : (indirect string, offset: 0x1f5): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><1d6>
+<1><1d7>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x138): unsigned short
+DW_AT_name        : (indirect string, offset: 0x202): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><1dd>
+<1><1de>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x1e8>
-DW_AT_name        : (indirect string, offset: 0x16a): __kernel_ulong_t
+DW_AT_type        : <0x1e9>
+DW_AT_name        : (indirect string, offset: 0x234): __kernel_ulong_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 24
-<1><1e8>
+<1><1e9>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x158): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x222): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><1ef>
+<1><1f0>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x1fa>
-DW_AT_name        : (indirect string, offset: 0x1b3): __kernel_time_t
+DW_AT_type        : <0x1fb>
+DW_AT_name        : (indirect string, offset: 0x27d): __kernel_time_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 77
-<1><1fa>
+<1><1fb>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x205>
-DW_AT_name        : (indirect string, offset: 0x1a3): __kernel_long_t
+DW_AT_type        : <0x206>
+DW_AT_name        : (indirect string, offset: 0x26d): __kernel_long_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 23
-<1><205>
+<1><206>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x19a): long int
+DW_AT_name        : (indirect string, offset: 0x264): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><20c>
+<1><20d>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x18c>
-DW_AT_name        : (indirect string, offset: 0x200): __kernel_pid_t
+DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x2ca): __kernel_pid_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 33
diff --git a/mpers-m32/rusage_t.d1 b/mpers-m32/rusage_t.d1
index 63b19c4..16af0eb 100644
--- a/mpers-m32/rusage_t.d1
+++ b/mpers-m32/rusage_t.d1
@@ -1,166 +1,167 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x16e (32-bit)
+   Length:        0x16f (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/rusage_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/rusage_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x52): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8d): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 4
-    <29>   DW_AT_decl_line   : 38
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x197): rusage_t
-    <39>   DW_AT_decl_file   : 4
-    <3a>   DW_AT_decl_line   : 36
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x190): rusage
-    <40>   DW_AT_byte_size   : 72
-    <41>   DW_AT_decl_file   : 3
-    <42>   DW_AT_decl_line   : 27
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0x9e): ru_utime
-    <48>   DW_AT_type        : <0x124>
-    <4c>   DW_AT_decl_file   : 3
-    <4d>   DW_AT_decl_line   : 28
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xfc): ru_stime
-    <56>   DW_AT_type        : <0x124>
-    <5a>   DW_AT_decl_file   : 3
-    <5b>   DW_AT_decl_line   : 29
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0x105): ru_maxrss
-    <64>   DW_AT_type        : <0x154>
-    <68>   DW_AT_decl_file   : 3
-    <69>   DW_AT_decl_line   : 30
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0x10f): ru_ixrss
-    <72>   DW_AT_type        : <0x154>
-    <76>   DW_AT_decl_file   : 3
-    <77>   DW_AT_decl_line   : 31
-    <78>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0x118): ru_idrss
-    <80>   DW_AT_type        : <0x154>
-    <84>   DW_AT_decl_file   : 3
-    <85>   DW_AT_decl_line   : 32
-    <86>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x121): ru_isrss
-    <8e>   DW_AT_type        : <0x154>
-    <92>   DW_AT_decl_file   : 3
-    <93>   DW_AT_decl_line   : 33
-    <94>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0x12a): ru_minflt
-    <9c>   DW_AT_type        : <0x154>
-    <a0>   DW_AT_decl_file   : 3
-    <a1>   DW_AT_decl_line   : 34
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0x134): ru_majflt
-    <aa>   DW_AT_type        : <0x154>
-    <ae>   DW_AT_decl_file   : 3
-    <af>   DW_AT_decl_line   : 35
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0x13e): ru_nswap
-    <b8>   DW_AT_type        : <0x154>
-    <bc>   DW_AT_decl_file   : 3
-    <bd>   DW_AT_decl_line   : 36
-    <be>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x147): ru_inblock
-    <c6>   DW_AT_type        : <0x154>
-    <ca>   DW_AT_decl_file   : 3
-    <cb>   DW_AT_decl_line   : 37
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0x152): ru_oublock
-    <d4>   DW_AT_type        : <0x154>
-    <d8>   DW_AT_decl_file   : 3
-    <d9>   DW_AT_decl_line   : 38
-    <da>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><dd>: Abbrev Number: 5 (DW_TAG_member)
-    <de>   DW_AT_name        : (indirect string, offset: 0x15d): ru_msgsnd
-    <e2>   DW_AT_type        : <0x154>
-    <e6>   DW_AT_decl_file   : 3
-    <e7>   DW_AT_decl_line   : 39
-    <e8>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <2><eb>: Abbrev Number: 5 (DW_TAG_member)
-    <ec>   DW_AT_name        : (indirect string, offset: 0x167): ru_msgrcv
-    <f0>   DW_AT_type        : <0x154>
-    <f4>   DW_AT_decl_file   : 3
-    <f5>   DW_AT_decl_line   : 40
-    <f6>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><f9>: Abbrev Number: 5 (DW_TAG_member)
-    <fa>   DW_AT_name        : (indirect string, offset: 0x171): ru_nsignals
-    <fe>   DW_AT_type        : <0x154>
-    <102>   DW_AT_decl_file   : 3
-    <103>   DW_AT_decl_line   : 41
-    <104>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
- <2><107>: Abbrev Number: 5 (DW_TAG_member)
-    <108>   DW_AT_name        : (indirect string, offset: 0x17d): ru_nvcsw
-    <10c>   DW_AT_type        : <0x154>
-    <110>   DW_AT_decl_file   : 3
-    <111>   DW_AT_decl_line   : 42
-    <112>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><115>: Abbrev Number: 5 (DW_TAG_member)
-    <116>   DW_AT_name        : (indirect string, offset: 0x186): ru_nivcsw
-    <11a>   DW_AT_type        : <0x154>
-    <11e>   DW_AT_decl_file   : 3
-    <11f>   DW_AT_decl_line   : 43
-    <120>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
- <2><123>: Abbrev Number: 0
- <1><124>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <125>   DW_AT_name        : (indirect string, offset: 0xf4): timeval
-    <129>   DW_AT_byte_size   : 8
-    <12a>   DW_AT_decl_file   : 2
-    <12b>   DW_AT_decl_line   : 29
- <2><12c>: Abbrev Number: 5 (DW_TAG_member)
-    <12d>   DW_AT_name        : (indirect string, offset: 0xa7): tv_sec
-    <131>   DW_AT_type        : <0x149>
-    <135>   DW_AT_decl_file   : 2
-    <136>   DW_AT_decl_line   : 30
-    <137>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><13a>: Abbrev Number: 5 (DW_TAG_member)
-    <13b>   DW_AT_name        : (indirect string, offset: 0xd7): tv_usec
-    <13f>   DW_AT_type        : <0x166>
-    <143>   DW_AT_decl_file   : 2
-    <144>   DW_AT_decl_line   : 31
-    <145>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><148>: Abbrev Number: 0
- <1><149>: Abbrev Number: 3 (DW_TAG_typedef)
-    <14a>   DW_AT_type        : <0x154>
-    <14e>   DW_AT_name        : (indirect string, offset: 0xc7): __kernel_time_t
-    <152>   DW_AT_decl_file   : 1
-    <153>   DW_AT_decl_line   : 77
- <1><154>: Abbrev Number: 3 (DW_TAG_typedef)
-    <155>   DW_AT_type        : <0x15f>
-    <159>   DW_AT_name        : (indirect string, offset: 0xb7): __kernel_long_t
-    <15d>   DW_AT_decl_file   : 1
-    <15e>   DW_AT_decl_line   : 23
- <1><15f>: Abbrev Number: 6 (DW_TAG_base_type)
-    <160>   DW_AT_name        : (indirect string, offset: 0xae): long int
-    <164>   DW_AT_encoding    : 5	(signed)
-    <165>   DW_AT_byte_size   : 4
- <1><166>: Abbrev Number: 3 (DW_TAG_typedef)
-    <167>   DW_AT_type        : <0x154>
-    <16b>   DW_AT_name        : (indirect string, offset: 0xdf): __kernel_suseconds_t
-    <16f>   DW_AT_decl_file   : 1
-    <170>   DW_AT_decl_line   : 43
- <1><171>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11c): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x157): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 4
+    <2a>   DW_AT_decl_line   : 38
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x261): rusage_t
+    <3a>   DW_AT_decl_file   : 4
+    <3b>   DW_AT_decl_line   : 36
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x25a): rusage
+    <41>   DW_AT_byte_size   : 72
+    <42>   DW_AT_decl_file   : 3
+    <43>   DW_AT_decl_line   : 27
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x168): ru_utime
+    <49>   DW_AT_type        : <0x125>
+    <4d>   DW_AT_decl_file   : 3
+    <4e>   DW_AT_decl_line   : 28
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x1c6): ru_stime
+    <57>   DW_AT_type        : <0x125>
+    <5b>   DW_AT_decl_file   : 3
+    <5c>   DW_AT_decl_line   : 29
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x1cf): ru_maxrss
+    <65>   DW_AT_type        : <0x155>
+    <69>   DW_AT_decl_file   : 3
+    <6a>   DW_AT_decl_line   : 30
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1d9): ru_ixrss
+    <73>   DW_AT_type        : <0x155>
+    <77>   DW_AT_decl_file   : 3
+    <78>   DW_AT_decl_line   : 31
+    <79>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1e2): ru_idrss
+    <81>   DW_AT_type        : <0x155>
+    <85>   DW_AT_decl_file   : 3
+    <86>   DW_AT_decl_line   : 32
+    <87>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1eb): ru_isrss
+    <8f>   DW_AT_type        : <0x155>
+    <93>   DW_AT_decl_file   : 3
+    <94>   DW_AT_decl_line   : 33
+    <95>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1f4): ru_minflt
+    <9d>   DW_AT_type        : <0x155>
+    <a1>   DW_AT_decl_file   : 3
+    <a2>   DW_AT_decl_line   : 34
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1fe): ru_majflt
+    <ab>   DW_AT_type        : <0x155>
+    <af>   DW_AT_decl_file   : 3
+    <b0>   DW_AT_decl_line   : 35
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x208): ru_nswap
+    <b9>   DW_AT_type        : <0x155>
+    <bd>   DW_AT_decl_file   : 3
+    <be>   DW_AT_decl_line   : 36
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x211): ru_inblock
+    <c7>   DW_AT_type        : <0x155>
+    <cb>   DW_AT_decl_file   : 3
+    <cc>   DW_AT_decl_line   : 37
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x21c): ru_oublock
+    <d5>   DW_AT_type        : <0x155>
+    <d9>   DW_AT_decl_file   : 3
+    <da>   DW_AT_decl_line   : 38
+    <db>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><de>: Abbrev Number: 5 (DW_TAG_member)
+    <df>   DW_AT_name        : (indirect string, offset: 0x227): ru_msgsnd
+    <e3>   DW_AT_type        : <0x155>
+    <e7>   DW_AT_decl_file   : 3
+    <e8>   DW_AT_decl_line   : 39
+    <e9>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <2><ec>: Abbrev Number: 5 (DW_TAG_member)
+    <ed>   DW_AT_name        : (indirect string, offset: 0x231): ru_msgrcv
+    <f1>   DW_AT_type        : <0x155>
+    <f5>   DW_AT_decl_file   : 3
+    <f6>   DW_AT_decl_line   : 40
+    <f7>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><fa>: Abbrev Number: 5 (DW_TAG_member)
+    <fb>   DW_AT_name        : (indirect string, offset: 0x23b): ru_nsignals
+    <ff>   DW_AT_type        : <0x155>
+    <103>   DW_AT_decl_file   : 3
+    <104>   DW_AT_decl_line   : 41
+    <105>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+ <2><108>: Abbrev Number: 5 (DW_TAG_member)
+    <109>   DW_AT_name        : (indirect string, offset: 0x247): ru_nvcsw
+    <10d>   DW_AT_type        : <0x155>
+    <111>   DW_AT_decl_file   : 3
+    <112>   DW_AT_decl_line   : 42
+    <113>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><116>: Abbrev Number: 5 (DW_TAG_member)
+    <117>   DW_AT_name        : (indirect string, offset: 0x250): ru_nivcsw
+    <11b>   DW_AT_type        : <0x155>
+    <11f>   DW_AT_decl_file   : 3
+    <120>   DW_AT_decl_line   : 43
+    <121>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
+ <2><124>: Abbrev Number: 0
+ <1><125>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <126>   DW_AT_name        : (indirect string, offset: 0x1be): timeval
+    <12a>   DW_AT_byte_size   : 8
+    <12b>   DW_AT_decl_file   : 2
+    <12c>   DW_AT_decl_line   : 29
+ <2><12d>: Abbrev Number: 5 (DW_TAG_member)
+    <12e>   DW_AT_name        : (indirect string, offset: 0x171): tv_sec
+    <132>   DW_AT_type        : <0x14a>
+    <136>   DW_AT_decl_file   : 2
+    <137>   DW_AT_decl_line   : 30
+    <138>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><13b>: Abbrev Number: 5 (DW_TAG_member)
+    <13c>   DW_AT_name        : (indirect string, offset: 0x1a1): tv_usec
+    <140>   DW_AT_type        : <0x167>
+    <144>   DW_AT_decl_file   : 2
+    <145>   DW_AT_decl_line   : 31
+    <146>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><149>: Abbrev Number: 0
+ <1><14a>: Abbrev Number: 3 (DW_TAG_typedef)
+    <14b>   DW_AT_type        : <0x155>
+    <14f>   DW_AT_name        : (indirect string, offset: 0x191): __kernel_time_t
+    <153>   DW_AT_decl_file   : 1
+    <154>   DW_AT_decl_line   : 77
+ <1><155>: Abbrev Number: 3 (DW_TAG_typedef)
+    <156>   DW_AT_type        : <0x160>
+    <15a>   DW_AT_name        : (indirect string, offset: 0x181): __kernel_long_t
+    <15e>   DW_AT_decl_file   : 1
+    <15f>   DW_AT_decl_line   : 23
+ <1><160>: Abbrev Number: 6 (DW_TAG_base_type)
+    <161>   DW_AT_name        : (indirect string, offset: 0x178): long int
+    <165>   DW_AT_encoding    : 5	(signed)
+    <166>   DW_AT_byte_size   : 4
+ <1><167>: Abbrev Number: 3 (DW_TAG_typedef)
+    <168>   DW_AT_type        : <0x155>
+    <16c>   DW_AT_name        : (indirect string, offset: 0x1a9): __kernel_suseconds_t
+    <170>   DW_AT_decl_file   : 1
+    <171>   DW_AT_decl_line   : 43
+ <1><172>: Abbrev Number: 0
 
diff --git a/mpers-m32/rusage_t.d2 b/mpers-m32/rusage_t.d2
index 23776a7..3ba0e0c 100644
--- a/mpers-m32/rusage_t.d2
+++ b/mpers-m32/rusage_t.d2
@@ -1,175 +1,175 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8d): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x157): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 38
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x197): rusage_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x261): rusage_t
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 36
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x190): rusage
+DW_AT_name        : (indirect string, offset: 0x25a): rusage
 DW_AT_byte_size   : 72
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 27
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x9e): ru_utime
-DW_AT_type        : <0x124>
+DW_AT_name        : (indirect string, offset: 0x168): ru_utime
+DW_AT_type        : <0x125>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfc): ru_stime
-DW_AT_type        : <0x124>
+DW_AT_name        : (indirect string, offset: 0x1c6): ru_stime
+DW_AT_type        : <0x125>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x105): ru_maxrss
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x1cf): ru_maxrss
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10f): ru_ixrss
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x1d9): ru_ixrss
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x118): ru_idrss
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x1e2): ru_idrss
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x121): ru_isrss
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x1eb): ru_isrss
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12a): ru_minflt
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x1f4): ru_minflt
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x134): ru_majflt
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x1fe): ru_majflt
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 35
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13e): ru_nswap
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x208): ru_nswap
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x147): ru_inblock
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x211): ru_inblock
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><cf>
+<2><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x152): ru_oublock
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x21c): ru_oublock
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><dd>
+<2><de>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15d): ru_msgsnd
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x227): ru_msgsnd
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<2><eb>
+<2><ec>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x167): ru_msgrcv
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x231): ru_msgrcv
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><f9>
+<2><fa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x171): ru_nsignals
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x23b): ru_nsignals
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
-<2><107>
+<2><108>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17d): ru_nvcsw
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x247): ru_nvcsw
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 42
 DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<2><115>
+<2><116>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x186): ru_nivcsw
-DW_AT_type        : <0x154>
+DW_AT_name        : (indirect string, offset: 0x250): ru_nivcsw
+DW_AT_type        : <0x155>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 43
 DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
-<1><124>
+<1><125>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xf4): timeval
+DW_AT_name        : (indirect string, offset: 0x1be): timeval
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 29
-<2><12c>
+<2><12d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa7): tv_sec
-DW_AT_type        : <0x149>
+DW_AT_name        : (indirect string, offset: 0x171): tv_sec
+DW_AT_type        : <0x14a>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><13a>
+<2><13b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd7): tv_usec
-DW_AT_type        : <0x166>
+DW_AT_name        : (indirect string, offset: 0x1a1): tv_usec
+DW_AT_type        : <0x167>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><149>
+<1><14a>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x154>
-DW_AT_name        : (indirect string, offset: 0xc7): __kernel_time_t
+DW_AT_type        : <0x155>
+DW_AT_name        : (indirect string, offset: 0x191): __kernel_time_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 77
-<1><154>
+<1><155>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x15f>
-DW_AT_name        : (indirect string, offset: 0xb7): __kernel_long_t
+DW_AT_type        : <0x160>
+DW_AT_name        : (indirect string, offset: 0x181): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><15f>
+<1><160>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xae): long int
+DW_AT_name        : (indirect string, offset: 0x178): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><166>
+<1><167>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x154>
-DW_AT_name        : (indirect string, offset: 0xdf): __kernel_suseconds_t
+DW_AT_type        : <0x155>
+DW_AT_name        : (indirect string, offset: 0x1a9): __kernel_suseconds_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 43
diff --git a/mpers-m32/sample_struct.d1 b/mpers-m32/sample_struct.d1
index 5cbf0a6..0562c17 100644
--- a/mpers-m32/sample_struct.d1
+++ b/mpers-m32/sample_struct.d1
@@ -1,301 +1,302 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x272 (32-bit)
+   Length:        0x273 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/sample_struct.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/sample_struct.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x57): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 1
-    <29>   DW_AT_decl_line   : 37
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x151): sample_struct
-    <39>   DW_AT_decl_file   : 1
-    <3a>   DW_AT_decl_line   : 36
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_byte_size   : 1248
-    <3e>   DW_AT_decl_file   : 1
-    <3f>   DW_AT_decl_line   : 2
- <2><40>: Abbrev Number: 5 (DW_TAG_member)
-    <41>   DW_AT_name        : (indirect string, offset: 0xa3): s
-    <45>   DW_AT_type        : <0x4e>
-    <49>   DW_AT_decl_file   : 1
-    <4a>   DW_AT_decl_line   : 21
-    <4b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><4e>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <4f>   DW_AT_byte_size   : 480
-    <51>   DW_AT_decl_file   : 1
-    <52>   DW_AT_decl_line   : 3
- <3><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xa5): p
-    <58>   DW_AT_type        : <0x1ca>
-    <5c>   DW_AT_decl_file   : 1
-    <5d>   DW_AT_decl_line   : 4
-    <5e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><61>: Abbrev Number: 5 (DW_TAG_member)
-    <62>   DW_AT_name        : (indirect string, offset: 0xa7): sc
-    <66>   DW_AT_type        : <0x1cb>
-    <6a>   DW_AT_decl_file   : 1
-    <6b>   DW_AT_decl_line   : 5
-    <6c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <3><6f>: Abbrev Number: 5 (DW_TAG_member)
-    <70>   DW_AT_name        : (indirect string, offset: 0xaf): ss
-    <74>   DW_AT_type        : <0x1d2>
-    <78>   DW_AT_decl_file   : 1
-    <79>   DW_AT_decl_line   : 7
-    <7a>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
- <3><7d>: Abbrev Number: 5 (DW_TAG_member)
-    <7e>   DW_AT_name        : (indirect string, offset: 0xb8): uc
-    <82>   DW_AT_type        : <0x1d9>
-    <86>   DW_AT_decl_file   : 1
-    <87>   DW_AT_decl_line   : 8
-    <88>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <3><8b>: Abbrev Number: 5 (DW_TAG_member)
-    <8c>   DW_AT_name        : (indirect string, offset: 0xc9): si
-    <90>   DW_AT_type        : <0x1e0>
-    <94>   DW_AT_decl_file   : 1
-    <95>   DW_AT_decl_line   : 10
-    <96>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <3><99>: Abbrev Number: 5 (DW_TAG_member)
-    <9a>   DW_AT_name        : (indirect string, offset: 0xd0): ui
-    <9e>   DW_AT_type        : <0x1e7>
-    <a2>   DW_AT_decl_file   : 1
-    <a3>   DW_AT_decl_line   : 11
-    <a4>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <3><a7>: Abbrev Number: 5 (DW_TAG_member)
-    <a8>   DW_AT_name        : (indirect string, offset: 0xe0): sl
-    <ac>   DW_AT_type        : <0x1ee>
-    <b0>   DW_AT_decl_file   : 1
-    <b1>   DW_AT_decl_line   : 12
-    <b2>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <3><b5>: Abbrev Number: 5 (DW_TAG_member)
-    <b6>   DW_AT_name        : (indirect string, offset: 0xec): us
-    <ba>   DW_AT_type        : <0x1f5>
-    <be>   DW_AT_decl_file   : 1
-    <bf>   DW_AT_decl_line   : 13
-    <c0>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <3><c3>: Abbrev Number: 6 (DW_TAG_member)
-    <c4>   DW_AT_name        : (indirect string, offset: 0xfe): sll
-    <c8>   DW_AT_type        : <0x1fc>
-    <cc>   DW_AT_decl_file   : 1
-    <cd>   DW_AT_decl_line   : 15
-    <ce>   Unknown AT value: 88: 8
-    <cf>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <3><d2>: Abbrev Number: 5 (DW_TAG_member)
-    <d3>   DW_AT_name        : (indirect string, offset: 0x110): ull
-    <d7>   DW_AT_type        : <0x203>
-    <db>   DW_AT_decl_file   : 1
-    <dc>   DW_AT_decl_line   : 16
-    <dd>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <3><e0>: Abbrev Number: 5 (DW_TAG_member)
-    <e1>   DW_AT_name        : (indirect string, offset: 0x12b): ul
-    <e5>   DW_AT_type        : <0x20a>
-    <e9>   DW_AT_decl_file   : 1
-    <ea>   DW_AT_decl_line   : 17
-    <eb>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <3><ee>: Abbrev Number: 5 (DW_TAG_member)
-    <ef>   DW_AT_name        : (indirect string, offset: 0x140): asl
-    <f3>   DW_AT_type        : <0x211>
-    <f7>   DW_AT_decl_file   : 1
-    <f8>   DW_AT_decl_line   : 18
-    <f9>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <3><fc>: Abbrev Number: 5 (DW_TAG_member)
-    <fd>   DW_AT_name        : (indirect string, offset: 0x14d): f
-    <101>   DW_AT_type        : <0x1cb>
-    <105>   DW_AT_decl_file   : 1
-    <106>   DW_AT_decl_line   : 19
-    <107>   DW_AT_data_member_location: 3 byte block: 23 d8 3 	(DW_OP_plus_uconst: 472)
- <3><10b>: Abbrev Number: 0
- <2><10c>: Abbrev Number: 5 (DW_TAG_member)
-    <10d>   DW_AT_name        : (indirect string, offset: 0x14f): u
-    <111>   DW_AT_type        : <0x233>
-    <115>   DW_AT_decl_file   : 1
-    <116>   DW_AT_decl_line   : 34
-    <117>   DW_AT_data_member_location: 3 byte block: 23 e0 3 	(DW_OP_plus_uconst: 480)
- <2><11b>: Abbrev Number: 7 (DW_TAG_union_type)
-    <11c>   DW_AT_byte_size   : 128
-    <11d>   DW_AT_decl_file   : 1
-    <11e>   DW_AT_decl_line   : 22
- <3><11f>: Abbrev Number: 5 (DW_TAG_member)
-    <120>   DW_AT_name        : (indirect string, offset: 0xfe): sll
-    <124>   DW_AT_type        : <0x1fc>
-    <128>   DW_AT_decl_file   : 1
-    <129>   DW_AT_decl_line   : 23
-    <12a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><12d>: Abbrev Number: 5 (DW_TAG_member)
-    <12e>   DW_AT_name        : (indirect string, offset: 0x110): ull
-    <132>   DW_AT_type        : <0x203>
-    <136>   DW_AT_decl_file   : 1
-    <137>   DW_AT_decl_line   : 24
-    <138>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><13b>: Abbrev Number: 5 (DW_TAG_member)
-    <13c>   DW_AT_name        : (indirect string, offset: 0xa5): p
-    <140>   DW_AT_type        : <0x1ca>
-    <144>   DW_AT_decl_file   : 1
-    <145>   DW_AT_decl_line   : 25
-    <146>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><149>: Abbrev Number: 5 (DW_TAG_member)
-    <14a>   DW_AT_name        : (indirect string, offset: 0xe0): sl
-    <14e>   DW_AT_type        : <0x1ee>
-    <152>   DW_AT_decl_file   : 1
-    <153>   DW_AT_decl_line   : 26
-    <154>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><157>: Abbrev Number: 5 (DW_TAG_member)
-    <158>   DW_AT_name        : (indirect string, offset: 0x12b): ul
-    <15c>   DW_AT_type        : <0x20a>
-    <160>   DW_AT_decl_file   : 1
-    <161>   DW_AT_decl_line   : 27
-    <162>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><165>: Abbrev Number: 5 (DW_TAG_member)
-    <166>   DW_AT_name        : (indirect string, offset: 0xc9): si
-    <16a>   DW_AT_type        : <0x1e0>
-    <16e>   DW_AT_decl_file   : 1
-    <16f>   DW_AT_decl_line   : 28
-    <170>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><173>: Abbrev Number: 5 (DW_TAG_member)
-    <174>   DW_AT_name        : (indirect string, offset: 0xd0): ui
-    <178>   DW_AT_type        : <0x1e7>
-    <17c>   DW_AT_decl_file   : 1
-    <17d>   DW_AT_decl_line   : 29
-    <17e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><181>: Abbrev Number: 5 (DW_TAG_member)
-    <182>   DW_AT_name        : (indirect string, offset: 0xaf): ss
-    <186>   DW_AT_type        : <0x247>
-    <18a>   DW_AT_decl_file   : 1
-    <18b>   DW_AT_decl_line   : 30
-    <18c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><18f>: Abbrev Number: 5 (DW_TAG_member)
-    <190>   DW_AT_name        : (indirect string, offset: 0xec): us
-    <194>   DW_AT_type        : <0x25b>
-    <198>   DW_AT_decl_file   : 1
-    <199>   DW_AT_decl_line   : 31
-    <19a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><19d>: Abbrev Number: 5 (DW_TAG_member)
-    <19e>   DW_AT_name        : (indirect string, offset: 0xa7): sc
-    <1a2>   DW_AT_type        : <0x1cb>
-    <1a6>   DW_AT_decl_file   : 1
-    <1a7>   DW_AT_decl_line   : 32
-    <1a8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><1ab>: Abbrev Number: 5 (DW_TAG_member)
-    <1ac>   DW_AT_name        : (indirect string, offset: 0xb8): uc
-    <1b0>   DW_AT_type        : <0x1d9>
-    <1b4>   DW_AT_decl_file   : 1
-    <1b5>   DW_AT_decl_line   : 33
-    <1b6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><1b9>: Abbrev Number: 0
- <2><1ba>: Abbrev Number: 5 (DW_TAG_member)
-    <1bb>   DW_AT_name        : (indirect string, offset: 0x14d): f
-    <1bf>   DW_AT_type        : <0x268>
-    <1c3>   DW_AT_decl_file   : 1
-    <1c4>   DW_AT_decl_line   : 35
-    <1c5>   DW_AT_data_member_location: 3 byte block: 23 e0 9 	(DW_OP_plus_uconst: 1248)
- <2><1c9>: Abbrev Number: 0
- <1><1ca>: Abbrev Number: 8 (DW_TAG_pointer_type)
- <1><1cb>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1cc>   DW_AT_name        : (indirect string, offset: 0xaa): char
-    <1d0>   DW_AT_encoding    : 8	(unsigned char)
-    <1d1>   DW_AT_byte_size   : 1
- <1><1d2>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1d3>   DW_AT_name        : (indirect string, offset: 0xb2): short
-    <1d7>   DW_AT_encoding    : 5	(signed)
-    <1d8>   DW_AT_byte_size   : 2
- <1><1d9>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1da>   DW_AT_name        : (indirect string, offset: 0xbb): unsigned char
-    <1de>   DW_AT_encoding    : 8	(unsigned char)
-    <1df>   DW_AT_byte_size   : 1
- <1><1e0>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1e1>   DW_AT_name        : (indirect string, offset: 0xcc): int
-    <1e5>   DW_AT_encoding    : 5	(signed)
-    <1e6>   DW_AT_byte_size   : 4
- <1><1e7>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1e8>   DW_AT_name        : (indirect string, offset: 0xd3): unsigned int
-    <1ec>   DW_AT_encoding    : 7	(unsigned)
-    <1ed>   DW_AT_byte_size   : 4
- <1><1ee>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1ef>   DW_AT_name        : (indirect string, offset: 0xe3): long int
-    <1f3>   DW_AT_encoding    : 5	(signed)
-    <1f4>   DW_AT_byte_size   : 4
- <1><1f5>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1f6>   DW_AT_name        : (indirect string, offset: 0xef): unsigned short
-    <1fa>   DW_AT_encoding    : 7	(unsigned)
-    <1fb>   DW_AT_byte_size   : 2
- <1><1fc>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1fd>   DW_AT_name        : (indirect string, offset: 0x102): long long int
-    <201>   DW_AT_encoding    : 5	(signed)
-    <202>   DW_AT_byte_size   : 8
- <1><203>: Abbrev Number: 9 (DW_TAG_base_type)
-    <204>   DW_AT_name        : (indirect string, offset: 0x114): long long unsigned int
-    <208>   DW_AT_encoding    : 7	(unsigned)
-    <209>   DW_AT_byte_size   : 8
- <1><20a>: Abbrev Number: 9 (DW_TAG_base_type)
-    <20b>   DW_AT_name        : (indirect string, offset: 0x12e): long unsigned int
-    <20f>   DW_AT_encoding    : 7	(unsigned)
-    <210>   DW_AT_byte_size   : 4
- <1><211>: Abbrev Number: 10 (DW_TAG_array_type)
-    <212>   DW_AT_type        : <0x1ee>
- <2><216>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <217>   DW_AT_type        : <0x22c>
-    <21b>   DW_AT_lower_bound : 0
-    <21c>   DW_AT_count       : 3
- <2><21d>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <21e>   DW_AT_type        : <0x22c>
-    <222>   DW_AT_lower_bound : 0
-    <223>   DW_AT_count       : 5
- <2><224>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <225>   DW_AT_type        : <0x22c>
-    <229>   DW_AT_lower_bound : 0
-    <22a>   DW_AT_count       : 7
- <2><22b>: Abbrev Number: 0
- <1><22c>: Abbrev Number: 12 (DW_TAG_base_type)
-    <22d>   DW_AT_name        : (indirect string, offset: 0x144): sizetype
-    <231>   DW_AT_byte_size   : 8
-    <232>   DW_AT_encoding    : 7	(unsigned)
- <1><233>: Abbrev Number: 10 (DW_TAG_array_type)
-    <234>   DW_AT_type        : <0x11b>
- <2><238>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <239>   DW_AT_type        : <0x22c>
-    <23d>   DW_AT_lower_bound : 0
-    <23e>   DW_AT_count       : 3
- <2><23f>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <240>   DW_AT_type        : <0x22c>
-    <244>   DW_AT_lower_bound : 0
-    <245>   DW_AT_count       : 2
- <2><246>: Abbrev Number: 0
- <1><247>: Abbrev Number: 10 (DW_TAG_array_type)
-    <248>   DW_AT_type        : <0x1d2>
- <2><24c>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <24d>   DW_AT_type        : <0x22c>
-    <251>   DW_AT_lower_bound : 0
-    <252>   DW_AT_count       : 7
- <2><253>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <254>   DW_AT_type        : <0x22c>
-    <258>   DW_AT_lower_bound : 0
-    <259>   DW_AT_count       : 9
- <2><25a>: Abbrev Number: 0
- <1><25b>: Abbrev Number: 10 (DW_TAG_array_type)
-    <25c>   DW_AT_type        : <0x1f5>
- <2><260>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <261>   DW_AT_type        : <0x22c>
-    <265>   DW_AT_lower_bound : 0
-    <266>   DW_AT_count       : 4
- <2><267>: Abbrev Number: 0
- <1><268>: Abbrev Number: 10 (DW_TAG_array_type)
-    <269>   DW_AT_type        : <0x1d2>
- <2><26d>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <26e>   DW_AT_type        : <0x22c>
-    <272>   DW_AT_lower_bound : 0
-    <273>   DW_AT_count       : 0
- <2><274>: Abbrev Number: 0
- <1><275>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x121): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 1
+    <2a>   DW_AT_decl_line   : 37
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x21b): sample_struct
+    <3a>   DW_AT_decl_file   : 1
+    <3b>   DW_AT_decl_line   : 36
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_byte_size   : 1248
+    <3f>   DW_AT_decl_file   : 1
+    <40>   DW_AT_decl_line   : 2
+ <2><41>: Abbrev Number: 5 (DW_TAG_member)
+    <42>   DW_AT_name        : (indirect string, offset: 0x16d): s
+    <46>   DW_AT_type        : <0x4f>
+    <4a>   DW_AT_decl_file   : 1
+    <4b>   DW_AT_decl_line   : 21
+    <4c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><4f>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <50>   DW_AT_byte_size   : 480
+    <52>   DW_AT_decl_file   : 1
+    <53>   DW_AT_decl_line   : 3
+ <3><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x16f): p
+    <59>   DW_AT_type        : <0x1cb>
+    <5d>   DW_AT_decl_file   : 1
+    <5e>   DW_AT_decl_line   : 4
+    <5f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><62>: Abbrev Number: 5 (DW_TAG_member)
+    <63>   DW_AT_name        : (indirect string, offset: 0x171): sc
+    <67>   DW_AT_type        : <0x1cc>
+    <6b>   DW_AT_decl_file   : 1
+    <6c>   DW_AT_decl_line   : 5
+    <6d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <3><70>: Abbrev Number: 5 (DW_TAG_member)
+    <71>   DW_AT_name        : (indirect string, offset: 0x179): ss
+    <75>   DW_AT_type        : <0x1d3>
+    <79>   DW_AT_decl_file   : 1
+    <7a>   DW_AT_decl_line   : 7
+    <7b>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
+ <3><7e>: Abbrev Number: 5 (DW_TAG_member)
+    <7f>   DW_AT_name        : (indirect string, offset: 0x182): uc
+    <83>   DW_AT_type        : <0x1da>
+    <87>   DW_AT_decl_file   : 1
+    <88>   DW_AT_decl_line   : 8
+    <89>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <3><8c>: Abbrev Number: 5 (DW_TAG_member)
+    <8d>   DW_AT_name        : (indirect string, offset: 0x193): si
+    <91>   DW_AT_type        : <0x1e1>
+    <95>   DW_AT_decl_file   : 1
+    <96>   DW_AT_decl_line   : 10
+    <97>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <3><9a>: Abbrev Number: 5 (DW_TAG_member)
+    <9b>   DW_AT_name        : (indirect string, offset: 0x19a): ui
+    <9f>   DW_AT_type        : <0x1e8>
+    <a3>   DW_AT_decl_file   : 1
+    <a4>   DW_AT_decl_line   : 11
+    <a5>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <3><a8>: Abbrev Number: 5 (DW_TAG_member)
+    <a9>   DW_AT_name        : (indirect string, offset: 0x1aa): sl
+    <ad>   DW_AT_type        : <0x1ef>
+    <b1>   DW_AT_decl_file   : 1
+    <b2>   DW_AT_decl_line   : 12
+    <b3>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <3><b6>: Abbrev Number: 5 (DW_TAG_member)
+    <b7>   DW_AT_name        : (indirect string, offset: 0x1b6): us
+    <bb>   DW_AT_type        : <0x1f6>
+    <bf>   DW_AT_decl_file   : 1
+    <c0>   DW_AT_decl_line   : 13
+    <c1>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <3><c4>: Abbrev Number: 6 (DW_TAG_member)
+    <c5>   DW_AT_name        : (indirect string, offset: 0x1c8): sll
+    <c9>   DW_AT_type        : <0x1fd>
+    <cd>   DW_AT_decl_file   : 1
+    <ce>   DW_AT_decl_line   : 15
+    <cf>   Unknown AT value: 88: 8
+    <d0>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <3><d3>: Abbrev Number: 5 (DW_TAG_member)
+    <d4>   DW_AT_name        : (indirect string, offset: 0x1da): ull
+    <d8>   DW_AT_type        : <0x204>
+    <dc>   DW_AT_decl_file   : 1
+    <dd>   DW_AT_decl_line   : 16
+    <de>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <3><e1>: Abbrev Number: 5 (DW_TAG_member)
+    <e2>   DW_AT_name        : (indirect string, offset: 0x1f5): ul
+    <e6>   DW_AT_type        : <0x20b>
+    <ea>   DW_AT_decl_file   : 1
+    <eb>   DW_AT_decl_line   : 17
+    <ec>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <3><ef>: Abbrev Number: 5 (DW_TAG_member)
+    <f0>   DW_AT_name        : (indirect string, offset: 0x20a): asl
+    <f4>   DW_AT_type        : <0x212>
+    <f8>   DW_AT_decl_file   : 1
+    <f9>   DW_AT_decl_line   : 18
+    <fa>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <3><fd>: Abbrev Number: 5 (DW_TAG_member)
+    <fe>   DW_AT_name        : (indirect string, offset: 0x217): f
+    <102>   DW_AT_type        : <0x1cc>
+    <106>   DW_AT_decl_file   : 1
+    <107>   DW_AT_decl_line   : 19
+    <108>   DW_AT_data_member_location: 3 byte block: 23 d8 3 	(DW_OP_plus_uconst: 472)
+ <3><10c>: Abbrev Number: 0
+ <2><10d>: Abbrev Number: 5 (DW_TAG_member)
+    <10e>   DW_AT_name        : (indirect string, offset: 0x219): u
+    <112>   DW_AT_type        : <0x234>
+    <116>   DW_AT_decl_file   : 1
+    <117>   DW_AT_decl_line   : 34
+    <118>   DW_AT_data_member_location: 3 byte block: 23 e0 3 	(DW_OP_plus_uconst: 480)
+ <2><11c>: Abbrev Number: 7 (DW_TAG_union_type)
+    <11d>   DW_AT_byte_size   : 128
+    <11e>   DW_AT_decl_file   : 1
+    <11f>   DW_AT_decl_line   : 22
+ <3><120>: Abbrev Number: 5 (DW_TAG_member)
+    <121>   DW_AT_name        : (indirect string, offset: 0x1c8): sll
+    <125>   DW_AT_type        : <0x1fd>
+    <129>   DW_AT_decl_file   : 1
+    <12a>   DW_AT_decl_line   : 23
+    <12b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><12e>: Abbrev Number: 5 (DW_TAG_member)
+    <12f>   DW_AT_name        : (indirect string, offset: 0x1da): ull
+    <133>   DW_AT_type        : <0x204>
+    <137>   DW_AT_decl_file   : 1
+    <138>   DW_AT_decl_line   : 24
+    <139>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><13c>: Abbrev Number: 5 (DW_TAG_member)
+    <13d>   DW_AT_name        : (indirect string, offset: 0x16f): p
+    <141>   DW_AT_type        : <0x1cb>
+    <145>   DW_AT_decl_file   : 1
+    <146>   DW_AT_decl_line   : 25
+    <147>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><14a>: Abbrev Number: 5 (DW_TAG_member)
+    <14b>   DW_AT_name        : (indirect string, offset: 0x1aa): sl
+    <14f>   DW_AT_type        : <0x1ef>
+    <153>   DW_AT_decl_file   : 1
+    <154>   DW_AT_decl_line   : 26
+    <155>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><158>: Abbrev Number: 5 (DW_TAG_member)
+    <159>   DW_AT_name        : (indirect string, offset: 0x1f5): ul
+    <15d>   DW_AT_type        : <0x20b>
+    <161>   DW_AT_decl_file   : 1
+    <162>   DW_AT_decl_line   : 27
+    <163>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><166>: Abbrev Number: 5 (DW_TAG_member)
+    <167>   DW_AT_name        : (indirect string, offset: 0x193): si
+    <16b>   DW_AT_type        : <0x1e1>
+    <16f>   DW_AT_decl_file   : 1
+    <170>   DW_AT_decl_line   : 28
+    <171>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><174>: Abbrev Number: 5 (DW_TAG_member)
+    <175>   DW_AT_name        : (indirect string, offset: 0x19a): ui
+    <179>   DW_AT_type        : <0x1e8>
+    <17d>   DW_AT_decl_file   : 1
+    <17e>   DW_AT_decl_line   : 29
+    <17f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><182>: Abbrev Number: 5 (DW_TAG_member)
+    <183>   DW_AT_name        : (indirect string, offset: 0x179): ss
+    <187>   DW_AT_type        : <0x248>
+    <18b>   DW_AT_decl_file   : 1
+    <18c>   DW_AT_decl_line   : 30
+    <18d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><190>: Abbrev Number: 5 (DW_TAG_member)
+    <191>   DW_AT_name        : (indirect string, offset: 0x1b6): us
+    <195>   DW_AT_type        : <0x25c>
+    <199>   DW_AT_decl_file   : 1
+    <19a>   DW_AT_decl_line   : 31
+    <19b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><19e>: Abbrev Number: 5 (DW_TAG_member)
+    <19f>   DW_AT_name        : (indirect string, offset: 0x171): sc
+    <1a3>   DW_AT_type        : <0x1cc>
+    <1a7>   DW_AT_decl_file   : 1
+    <1a8>   DW_AT_decl_line   : 32
+    <1a9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><1ac>: Abbrev Number: 5 (DW_TAG_member)
+    <1ad>   DW_AT_name        : (indirect string, offset: 0x182): uc
+    <1b1>   DW_AT_type        : <0x1da>
+    <1b5>   DW_AT_decl_file   : 1
+    <1b6>   DW_AT_decl_line   : 33
+    <1b7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><1ba>: Abbrev Number: 0
+ <2><1bb>: Abbrev Number: 5 (DW_TAG_member)
+    <1bc>   DW_AT_name        : (indirect string, offset: 0x217): f
+    <1c0>   DW_AT_type        : <0x269>
+    <1c4>   DW_AT_decl_file   : 1
+    <1c5>   DW_AT_decl_line   : 35
+    <1c6>   DW_AT_data_member_location: 3 byte block: 23 e0 9 	(DW_OP_plus_uconst: 1248)
+ <2><1ca>: Abbrev Number: 0
+ <1><1cb>: Abbrev Number: 8 (DW_TAG_pointer_type)
+ <1><1cc>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1cd>   DW_AT_name        : (indirect string, offset: 0x174): char
+    <1d1>   DW_AT_encoding    : 8	(unsigned char)
+    <1d2>   DW_AT_byte_size   : 1
+ <1><1d3>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1d4>   DW_AT_name        : (indirect string, offset: 0x17c): short
+    <1d8>   DW_AT_encoding    : 5	(signed)
+    <1d9>   DW_AT_byte_size   : 2
+ <1><1da>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1db>   DW_AT_name        : (indirect string, offset: 0x185): unsigned char
+    <1df>   DW_AT_encoding    : 8	(unsigned char)
+    <1e0>   DW_AT_byte_size   : 1
+ <1><1e1>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1e2>   DW_AT_name        : (indirect string, offset: 0x196): int
+    <1e6>   DW_AT_encoding    : 5	(signed)
+    <1e7>   DW_AT_byte_size   : 4
+ <1><1e8>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1e9>   DW_AT_name        : (indirect string, offset: 0x19d): unsigned int
+    <1ed>   DW_AT_encoding    : 7	(unsigned)
+    <1ee>   DW_AT_byte_size   : 4
+ <1><1ef>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1f0>   DW_AT_name        : (indirect string, offset: 0x1ad): long int
+    <1f4>   DW_AT_encoding    : 5	(signed)
+    <1f5>   DW_AT_byte_size   : 4
+ <1><1f6>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1f7>   DW_AT_name        : (indirect string, offset: 0x1b9): unsigned short
+    <1fb>   DW_AT_encoding    : 7	(unsigned)
+    <1fc>   DW_AT_byte_size   : 2
+ <1><1fd>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1fe>   DW_AT_name        : (indirect string, offset: 0x1cc): long long int
+    <202>   DW_AT_encoding    : 5	(signed)
+    <203>   DW_AT_byte_size   : 8
+ <1><204>: Abbrev Number: 9 (DW_TAG_base_type)
+    <205>   DW_AT_name        : (indirect string, offset: 0x1de): long long unsigned int
+    <209>   DW_AT_encoding    : 7	(unsigned)
+    <20a>   DW_AT_byte_size   : 8
+ <1><20b>: Abbrev Number: 9 (DW_TAG_base_type)
+    <20c>   DW_AT_name        : (indirect string, offset: 0x1f8): long unsigned int
+    <210>   DW_AT_encoding    : 7	(unsigned)
+    <211>   DW_AT_byte_size   : 4
+ <1><212>: Abbrev Number: 10 (DW_TAG_array_type)
+    <213>   DW_AT_type        : <0x1ef>
+ <2><217>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <218>   DW_AT_type        : <0x22d>
+    <21c>   DW_AT_lower_bound : 0
+    <21d>   DW_AT_count       : 3
+ <2><21e>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <21f>   DW_AT_type        : <0x22d>
+    <223>   DW_AT_lower_bound : 0
+    <224>   DW_AT_count       : 5
+ <2><225>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <226>   DW_AT_type        : <0x22d>
+    <22a>   DW_AT_lower_bound : 0
+    <22b>   DW_AT_count       : 7
+ <2><22c>: Abbrev Number: 0
+ <1><22d>: Abbrev Number: 12 (DW_TAG_base_type)
+    <22e>   DW_AT_name        : (indirect string, offset: 0x20e): sizetype
+    <232>   DW_AT_byte_size   : 8
+    <233>   DW_AT_encoding    : 7	(unsigned)
+ <1><234>: Abbrev Number: 10 (DW_TAG_array_type)
+    <235>   DW_AT_type        : <0x11c>
+ <2><239>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <23a>   DW_AT_type        : <0x22d>
+    <23e>   DW_AT_lower_bound : 0
+    <23f>   DW_AT_count       : 3
+ <2><240>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <241>   DW_AT_type        : <0x22d>
+    <245>   DW_AT_lower_bound : 0
+    <246>   DW_AT_count       : 2
+ <2><247>: Abbrev Number: 0
+ <1><248>: Abbrev Number: 10 (DW_TAG_array_type)
+    <249>   DW_AT_type        : <0x1d3>
+ <2><24d>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <24e>   DW_AT_type        : <0x22d>
+    <252>   DW_AT_lower_bound : 0
+    <253>   DW_AT_count       : 7
+ <2><254>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <255>   DW_AT_type        : <0x22d>
+    <259>   DW_AT_lower_bound : 0
+    <25a>   DW_AT_count       : 9
+ <2><25b>: Abbrev Number: 0
+ <1><25c>: Abbrev Number: 10 (DW_TAG_array_type)
+    <25d>   DW_AT_type        : <0x1f6>
+ <2><261>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <262>   DW_AT_type        : <0x22d>
+    <266>   DW_AT_lower_bound : 0
+    <267>   DW_AT_count       : 4
+ <2><268>: Abbrev Number: 0
+ <1><269>: Abbrev Number: 10 (DW_TAG_array_type)
+    <26a>   DW_AT_type        : <0x1d3>
+ <2><26e>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <26f>   DW_AT_type        : <0x22d>
+    <273>   DW_AT_lower_bound : 0
+    <274>   DW_AT_count       : 0
+ <2><275>: Abbrev Number: 0
+ <1><276>: Abbrev Number: 0
 
diff --git a/mpers-m32/sample_struct.d2 b/mpers-m32/sample_struct.d2
index ceab522..6c539d7 100644
--- a/mpers-m32/sample_struct.d2
+++ b/mpers-m32/sample_struct.d2
@@ -1,336 +1,336 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 37
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x151): sample_struct
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x21b): sample_struct
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 36
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
 DW_AT_byte_size   : 1248
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 2
-<2><40>
+<2><41>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa3): s
-DW_AT_type        : <0x4e>
+DW_AT_name        : (indirect string, offset: 0x16d): s
+DW_AT_type        : <0x4f>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 21
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><4e>
+<2><4f>
 Abbrev Number: 4 (DW_TAG_structure_type)
 DW_AT_byte_size   : 480
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 3
-<3><53>
+<3><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa5): p
-DW_AT_type        : <0x1ca>
+DW_AT_name        : (indirect string, offset: 0x16f): p
+DW_AT_type        : <0x1cb>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 4
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><61>
+<3><62>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa7): sc
-DW_AT_type        : <0x1cb>
+DW_AT_name        : (indirect string, offset: 0x171): sc
+DW_AT_type        : <0x1cc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 5
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<3><6f>
+<3><70>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xaf): ss
-DW_AT_type        : <0x1d2>
+DW_AT_name        : (indirect string, offset: 0x179): ss
+DW_AT_type        : <0x1d3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 7
 DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
-<3><7d>
+<3><7e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb8): uc
-DW_AT_type        : <0x1d9>
+DW_AT_name        : (indirect string, offset: 0x182): uc
+DW_AT_type        : <0x1da>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 8
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<3><8b>
+<3><8c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc9): si
-DW_AT_type        : <0x1e0>
+DW_AT_name        : (indirect string, offset: 0x193): si
+DW_AT_type        : <0x1e1>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 10
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<3><99>
+<3><9a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd0): ui
-DW_AT_type        : <0x1e7>
+DW_AT_name        : (indirect string, offset: 0x19a): ui
+DW_AT_type        : <0x1e8>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 11
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<3><a7>
+<3><a8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe0): sl
-DW_AT_type        : <0x1ee>
+DW_AT_name        : (indirect string, offset: 0x1aa): sl
+DW_AT_type        : <0x1ef>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 12
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<3><b5>
+<3><b6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xec): us
-DW_AT_type        : <0x1f5>
+DW_AT_name        : (indirect string, offset: 0x1b6): us
+DW_AT_type        : <0x1f6>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 13
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<3><c3>
+<3><c4>
 Abbrev Number: 6 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfe): sll
-DW_AT_type        : <0x1fc>
+DW_AT_name        : (indirect string, offset: 0x1c8): sll
+DW_AT_type        : <0x1fd>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 15
 Unknown AT value: 88: 8
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<3><d2>
+<3><d3>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x110): ull
-DW_AT_type        : <0x203>
+DW_AT_name        : (indirect string, offset: 0x1da): ull
+DW_AT_type        : <0x204>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 16
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<3><e0>
+<3><e1>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12b): ul
-DW_AT_type        : <0x20a>
+DW_AT_name        : (indirect string, offset: 0x1f5): ul
+DW_AT_type        : <0x20b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 17
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<3><ee>
+<3><ef>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x140): asl
-DW_AT_type        : <0x211>
+DW_AT_name        : (indirect string, offset: 0x20a): asl
+DW_AT_type        : <0x212>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 18
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<3><fc>
+<3><fd>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14d): f
-DW_AT_type        : <0x1cb>
+DW_AT_name        : (indirect string, offset: 0x217): f
+DW_AT_type        : <0x1cc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 19
 DW_AT_data_member_location: 3 byte block: 23 d8 3 	(DW_OP_plus_uconst: 472)
-<2><10c>
+<2><10d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14f): u
-DW_AT_type        : <0x233>
+DW_AT_name        : (indirect string, offset: 0x219): u
+DW_AT_type        : <0x234>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 3 byte block: 23 e0 3 	(DW_OP_plus_uconst: 480)
-<2><11b>
+<2><11c>
 Abbrev Number: 7 (DW_TAG_union_type)
 DW_AT_byte_size   : 128
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 22
-<3><11f>
+<3><120>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfe): sll
-DW_AT_type        : <0x1fc>
+DW_AT_name        : (indirect string, offset: 0x1c8): sll
+DW_AT_type        : <0x1fd>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><12d>
+<3><12e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x110): ull
-DW_AT_type        : <0x203>
+DW_AT_name        : (indirect string, offset: 0x1da): ull
+DW_AT_type        : <0x204>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><13b>
+<3><13c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa5): p
-DW_AT_type        : <0x1ca>
+DW_AT_name        : (indirect string, offset: 0x16f): p
+DW_AT_type        : <0x1cb>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><149>
+<3><14a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe0): sl
-DW_AT_type        : <0x1ee>
+DW_AT_name        : (indirect string, offset: 0x1aa): sl
+DW_AT_type        : <0x1ef>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><157>
+<3><158>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12b): ul
-DW_AT_type        : <0x20a>
+DW_AT_name        : (indirect string, offset: 0x1f5): ul
+DW_AT_type        : <0x20b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 27
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><165>
+<3><166>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc9): si
-DW_AT_type        : <0x1e0>
+DW_AT_name        : (indirect string, offset: 0x193): si
+DW_AT_type        : <0x1e1>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><173>
+<3><174>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd0): ui
-DW_AT_type        : <0x1e7>
+DW_AT_name        : (indirect string, offset: 0x19a): ui
+DW_AT_type        : <0x1e8>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><181>
+<3><182>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xaf): ss
-DW_AT_type        : <0x247>
+DW_AT_name        : (indirect string, offset: 0x179): ss
+DW_AT_type        : <0x248>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><18f>
+<3><190>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xec): us
-DW_AT_type        : <0x25b>
+DW_AT_name        : (indirect string, offset: 0x1b6): us
+DW_AT_type        : <0x25c>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><19d>
+<3><19e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa7): sc
-DW_AT_type        : <0x1cb>
+DW_AT_name        : (indirect string, offset: 0x171): sc
+DW_AT_type        : <0x1cc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><1ab>
+<3><1ac>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb8): uc
-DW_AT_type        : <0x1d9>
+DW_AT_name        : (indirect string, offset: 0x182): uc
+DW_AT_type        : <0x1da>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><1ba>
+<2><1bb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14d): f
-DW_AT_type        : <0x268>
+DW_AT_name        : (indirect string, offset: 0x217): f
+DW_AT_type        : <0x269>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 35
 DW_AT_data_member_location: 3 byte block: 23 e0 9 	(DW_OP_plus_uconst: 1248)
-<1><1ca>
-Abbrev Number: 8 (DW_TAG_pointer_type)
 <1><1cb>
+Abbrev Number: 8 (DW_TAG_pointer_type)
+<1><1cc>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xaa): char
+DW_AT_name        : (indirect string, offset: 0x174): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><1d2>
+<1><1d3>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb2): short
+DW_AT_name        : (indirect string, offset: 0x17c): short
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 2
-<1><1d9>
+<1><1da>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xbb): unsigned char
+DW_AT_name        : (indirect string, offset: 0x185): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><1e0>
+<1><1e1>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xcc): int
+DW_AT_name        : (indirect string, offset: 0x196): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><1e7>
+<1><1e8>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xd3): unsigned int
+DW_AT_name        : (indirect string, offset: 0x19d): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><1ee>
+<1><1ef>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe3): long int
+DW_AT_name        : (indirect string, offset: 0x1ad): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><1f5>
+<1><1f6>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xef): unsigned short
+DW_AT_name        : (indirect string, offset: 0x1b9): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><1fc>
+<1><1fd>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x102): long long int
+DW_AT_name        : (indirect string, offset: 0x1cc): long long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 8
-<1><203>
+<1><204>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x114): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1de): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
-<1><20a>
+<1><20b>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x12e): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1f8): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><211>
+<1><212>
 Abbrev Number: 10 (DW_TAG_array_type)
-DW_AT_type        : <0x1ee>
-<2><216>
+DW_AT_type        : <0x1ef>
+<2><217>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x22c>
+DW_AT_type        : <0x22d>
 DW_AT_lower_bound : 0
 DW_AT_count       : 3
-<2><21d>
+<2><21e>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x22c>
+DW_AT_type        : <0x22d>
 DW_AT_lower_bound : 0
 DW_AT_count       : 5
-<2><224>
+<2><225>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x22c>
+DW_AT_type        : <0x22d>
 DW_AT_lower_bound : 0
 DW_AT_count       : 7
-<1><22c>
+<1><22d>
 Abbrev Number: 12 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x144): sizetype
+DW_AT_name        : (indirect string, offset: 0x20e): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><233>
+<1><234>
 Abbrev Number: 10 (DW_TAG_array_type)
-DW_AT_type        : <0x11b>
-<2><238>
+DW_AT_type        : <0x11c>
+<2><239>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x22c>
+DW_AT_type        : <0x22d>
 DW_AT_lower_bound : 0
 DW_AT_count       : 3
-<2><23f>
+<2><240>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x22c>
+DW_AT_type        : <0x22d>
 DW_AT_lower_bound : 0
 DW_AT_count       : 2
-<1><247>
+<1><248>
 Abbrev Number: 10 (DW_TAG_array_type)
-DW_AT_type        : <0x1d2>
-<2><24c>
+DW_AT_type        : <0x1d3>
+<2><24d>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x22c>
+DW_AT_type        : <0x22d>
 DW_AT_lower_bound : 0
 DW_AT_count       : 7
-<2><253>
+<2><254>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x22c>
+DW_AT_type        : <0x22d>
 DW_AT_lower_bound : 0
 DW_AT_count       : 9
-<1><25b>
+<1><25c>
 Abbrev Number: 10 (DW_TAG_array_type)
-DW_AT_type        : <0x1f5>
-<2><260>
+DW_AT_type        : <0x1f6>
+<2><261>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x22c>
+DW_AT_type        : <0x22d>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4
-<1><268>
+<1><269>
 Abbrev Number: 10 (DW_TAG_array_type)
-DW_AT_type        : <0x1d2>
-<2><26d>
+DW_AT_type        : <0x1d3>
+<2><26e>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x22c>
+DW_AT_type        : <0x22d>
 DW_AT_lower_bound : 0
 DW_AT_count       : 0
diff --git a/mpers-m32/shmid_ds_t.d1 b/mpers-m32/shmid_ds_t.d1
index 721245d..a9ddc27 100644
--- a/mpers-m32/shmid_ds_t.d1
+++ b/mpers-m32/shmid_ds_t.d1
@@ -1,245 +1,246 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x211 (32-bit)
+   Length:        0x212 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/shmid_ds_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/shmid_ds_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x54): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8f): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 6
-    <29>   DW_AT_decl_line   : 49
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x233): shmid_ds_t
-    <39>   DW_AT_decl_file   : 6
-    <3a>   DW_AT_decl_line   : 42
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x228): shmid64_ds
-    <40>   DW_AT_byte_size   : 72
-    <41>   DW_AT_decl_file   : 4
-    <42>   DW_AT_decl_line   : 22
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa0): shm_perm
-    <48>   DW_AT_type        : <0xd0>
-    <4c>   DW_AT_decl_file   : 4
-    <4d>   DW_AT_decl_line   : 23
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0x190): shm_segsz
-    <56>   DW_AT_type        : <0x1e1>
-    <5a>   DW_AT_decl_file   : 4
-    <5b>   DW_AT_decl_line   : 24
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0x1a1): shm_atime
-    <64>   DW_AT_type        : <0x1ec>
-    <68>   DW_AT_decl_file   : 4
-    <69>   DW_AT_decl_line   : 25
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0x1d4): shm_dtime
-    <72>   DW_AT_type        : <0x1ec>
-    <76>   DW_AT_decl_file   : 4
-    <77>   DW_AT_decl_line   : 29
-    <78>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0x1de): shm_ctime
-    <80>   DW_AT_type        : <0x1ec>
-    <84>   DW_AT_decl_file   : 4
-    <85>   DW_AT_decl_line   : 33
-    <86>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x1e8): shm_cpid
-    <8e>   DW_AT_type        : <0x209>
-    <92>   DW_AT_decl_file   : 4
-    <93>   DW_AT_decl_line   : 37
-    <94>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0x200): shm_lpid
-    <9c>   DW_AT_type        : <0x209>
-    <a0>   DW_AT_decl_file   : 4
-    <a1>   DW_AT_decl_line   : 38
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0x209): shm_nattch
-    <aa>   DW_AT_type        : <0x1cf>
-    <ae>   DW_AT_decl_file   : 4
-    <af>   DW_AT_decl_line   : 39
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0x214): __unused4
-    <b8>   DW_AT_type        : <0x1cf>
-    <bc>   DW_AT_decl_file   : 4
-    <bd>   DW_AT_decl_line   : 40
-    <be>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x21e): __unused5
-    <c6>   DW_AT_type        : <0x1cf>
-    <ca>   DW_AT_decl_file   : 4
-    <cb>   DW_AT_decl_line   : 41
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
- <2><cf>: Abbrev Number: 0
- <1><d0>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <d1>   DW_AT_name        : (indirect string, offset: 0x185): ipc64_perm
-    <d5>   DW_AT_byte_size   : 36
-    <d6>   DW_AT_decl_file   : 2
-    <d7>   DW_AT_decl_line   : 21
- <2><d8>: Abbrev Number: 5 (DW_TAG_member)
-    <d9>   DW_AT_name        : (indirect string, offset: 0xa9): key
-    <dd>   DW_AT_type        : <0x173>
-    <e1>   DW_AT_decl_file   : 2
-    <e2>   DW_AT_decl_line   : 22
-    <e3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><e6>: Abbrev Number: 5 (DW_TAG_member)
-    <e7>   DW_AT_name        : (indirect string, offset: 0xc0): uid
-    <eb>   DW_AT_type        : <0x185>
-    <ef>   DW_AT_decl_file   : 2
-    <f0>   DW_AT_decl_line   : 23
-    <f1>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><f4>: Abbrev Number: 5 (DW_TAG_member)
-    <f5>   DW_AT_name        : (indirect string, offset: 0xe2): gid
-    <f9>   DW_AT_type        : <0x197>
-    <fd>   DW_AT_decl_file   : 2
-    <fe>   DW_AT_decl_line   : 24
-    <ff>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><102>: Abbrev Number: 5 (DW_TAG_member)
-    <103>   DW_AT_name        : (indirect string, offset: 0xf7): cuid
-    <107>   DW_AT_type        : <0x185>
-    <10b>   DW_AT_decl_file   : 2
-    <10c>   DW_AT_decl_line   : 25
-    <10d>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><110>: Abbrev Number: 5 (DW_TAG_member)
-    <111>   DW_AT_name        : (indirect string, offset: 0xfc): cgid
-    <115>   DW_AT_type        : <0x197>
-    <119>   DW_AT_decl_file   : 2
-    <11a>   DW_AT_decl_line   : 26
-    <11b>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><11e>: Abbrev Number: 5 (DW_TAG_member)
-    <11f>   DW_AT_name        : (indirect string, offset: 0x101): mode
-    <123>   DW_AT_type        : <0x1a2>
-    <127>   DW_AT_decl_file   : 2
-    <128>   DW_AT_decl_line   : 27
-    <129>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><12c>: Abbrev Number: 5 (DW_TAG_member)
-    <12d>   DW_AT_name        : (indirect string, offset: 0x116): __pad1
-    <131>   DW_AT_type        : <0x1ad>
-    <135>   DW_AT_decl_file   : 2
-    <136>   DW_AT_decl_line   : 28
-    <137>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><13a>: Abbrev Number: 5 (DW_TAG_member)
-    <13b>   DW_AT_name        : (indirect string, offset: 0x134): seq
-    <13f>   DW_AT_type        : <0x1c8>
-    <143>   DW_AT_decl_file   : 2
-    <144>   DW_AT_decl_line   : 29
-    <145>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><148>: Abbrev Number: 5 (DW_TAG_member)
-    <149>   DW_AT_name        : (indirect string, offset: 0x147): __pad2
-    <14d>   DW_AT_type        : <0x1c8>
-    <151>   DW_AT_decl_file   : 2
-    <152>   DW_AT_decl_line   : 30
-    <153>   DW_AT_data_member_location: 2 byte block: 23 1a 	(DW_OP_plus_uconst: 26)
- <2><156>: Abbrev Number: 5 (DW_TAG_member)
-    <157>   DW_AT_name        : (indirect string, offset: 0x14e): __unused1
-    <15b>   DW_AT_type        : <0x1cf>
-    <15f>   DW_AT_decl_file   : 2
-    <160>   DW_AT_decl_line   : 31
-    <161>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><164>: Abbrev Number: 5 (DW_TAG_member)
-    <165>   DW_AT_name        : (indirect string, offset: 0x17b): __unused2
-    <169>   DW_AT_type        : <0x1cf>
-    <16d>   DW_AT_decl_file   : 2
-    <16e>   DW_AT_decl_line   : 32
-    <16f>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><172>: Abbrev Number: 0
- <1><173>: Abbrev Number: 3 (DW_TAG_typedef)
-    <174>   DW_AT_type        : <0x17e>
-    <178>   DW_AT_name        : (indirect string, offset: 0xb1): __kernel_key_t
-    <17c>   DW_AT_decl_file   : 1
-    <17d>   DW_AT_decl_line   : 28
- <1><17e>: Abbrev Number: 6 (DW_TAG_base_type)
-    <17f>   DW_AT_name        : (indirect string, offset: 0xad): int
-    <183>   DW_AT_encoding    : 5	(signed)
-    <184>   DW_AT_byte_size   : 4
- <1><185>: Abbrev Number: 3 (DW_TAG_typedef)
-    <186>   DW_AT_type        : <0x190>
-    <18a>   DW_AT_name        : (indirect string, offset: 0xd1): __kernel_uid32_t
-    <18e>   DW_AT_decl_file   : 3
-    <18f>   DW_AT_decl_line   : 49
- <1><190>: Abbrev Number: 6 (DW_TAG_base_type)
-    <191>   DW_AT_name        : (indirect string, offset: 0xc4): unsigned int
-    <195>   DW_AT_encoding    : 7	(unsigned)
-    <196>   DW_AT_byte_size   : 4
- <1><197>: Abbrev Number: 3 (DW_TAG_typedef)
-    <198>   DW_AT_type        : <0x190>
-    <19c>   DW_AT_name        : (indirect string, offset: 0xe6): __kernel_gid32_t
-    <1a0>   DW_AT_decl_file   : 3
-    <1a1>   DW_AT_decl_line   : 50
- <1><1a2>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1a3>   DW_AT_type        : <0x190>
-    <1a7>   DW_AT_name        : (indirect string, offset: 0x106): __kernel_mode_t
-    <1ab>   DW_AT_decl_file   : 3
-    <1ac>   DW_AT_decl_line   : 30
- <1><1ad>: Abbrev Number: 7 (DW_TAG_array_type)
-    <1ae>   DW_AT_type        : <0x1ba>
- <2><1b2>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <1b3>   DW_AT_type        : <0x1c1>
-    <1b7>   DW_AT_lower_bound : 0
-    <1b8>   DW_AT_count       : 0
- <2><1b9>: Abbrev Number: 0
- <1><1ba>: Abbrev Number: 6 (DW_TAG_base_type)
-    <1bb>   DW_AT_name        : (indirect string, offset: 0x11d): unsigned char
-    <1bf>   DW_AT_encoding    : 8	(unsigned char)
-    <1c0>   DW_AT_byte_size   : 1
- <1><1c1>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1c2>   DW_AT_name        : (indirect string, offset: 0x12b): sizetype
-    <1c6>   DW_AT_byte_size   : 8
-    <1c7>   DW_AT_encoding    : 7	(unsigned)
- <1><1c8>: Abbrev Number: 6 (DW_TAG_base_type)
-    <1c9>   DW_AT_name        : (indirect string, offset: 0x138): unsigned short
-    <1cd>   DW_AT_encoding    : 7	(unsigned)
-    <1ce>   DW_AT_byte_size   : 2
- <1><1cf>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1d0>   DW_AT_type        : <0x1da>
-    <1d4>   DW_AT_name        : (indirect string, offset: 0x16a): __kernel_ulong_t
-    <1d8>   DW_AT_decl_file   : 3
-    <1d9>   DW_AT_decl_line   : 24
- <1><1da>: Abbrev Number: 6 (DW_TAG_base_type)
-    <1db>   DW_AT_name        : (indirect string, offset: 0x158): long unsigned int
-    <1df>   DW_AT_encoding    : 7	(unsigned)
-    <1e0>   DW_AT_byte_size   : 4
- <1><1e1>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1e2>   DW_AT_type        : <0x190>
-    <1e6>   DW_AT_name        : (indirect string, offset: 0x19a): size_t
-    <1ea>   DW_AT_decl_file   : 5
-    <1eb>   DW_AT_decl_line   : 62
- <1><1ec>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1ed>   DW_AT_type        : <0x1f7>
-    <1f1>   DW_AT_name        : (indirect string, offset: 0x1c4): __kernel_time_t
-    <1f5>   DW_AT_decl_file   : 3
-    <1f6>   DW_AT_decl_line   : 77
- <1><1f7>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1f8>   DW_AT_type        : <0x202>
-    <1fc>   DW_AT_name        : (indirect string, offset: 0x1b4): __kernel_long_t
-    <200>   DW_AT_decl_file   : 3
-    <201>   DW_AT_decl_line   : 23
- <1><202>: Abbrev Number: 6 (DW_TAG_base_type)
-    <203>   DW_AT_name        : (indirect string, offset: 0x1ab): long int
-    <207>   DW_AT_encoding    : 5	(signed)
-    <208>   DW_AT_byte_size   : 4
- <1><209>: Abbrev Number: 3 (DW_TAG_typedef)
-    <20a>   DW_AT_type        : <0x17e>
-    <20e>   DW_AT_name        : (indirect string, offset: 0x1f1): __kernel_pid_t
-    <212>   DW_AT_decl_file   : 3
-    <213>   DW_AT_decl_line   : 33
- <1><214>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11e): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x159): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 6
+    <2a>   DW_AT_decl_line   : 49
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x2fd): shmid_ds_t
+    <3a>   DW_AT_decl_file   : 6
+    <3b>   DW_AT_decl_line   : 42
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x2f2): shmid64_ds
+    <41>   DW_AT_byte_size   : 72
+    <42>   DW_AT_decl_file   : 4
+    <43>   DW_AT_decl_line   : 22
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16a): shm_perm
+    <49>   DW_AT_type        : <0xd1>
+    <4d>   DW_AT_decl_file   : 4
+    <4e>   DW_AT_decl_line   : 23
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x25a): shm_segsz
+    <57>   DW_AT_type        : <0x1e2>
+    <5b>   DW_AT_decl_file   : 4
+    <5c>   DW_AT_decl_line   : 24
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x26b): shm_atime
+    <65>   DW_AT_type        : <0x1ed>
+    <69>   DW_AT_decl_file   : 4
+    <6a>   DW_AT_decl_line   : 25
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x29e): shm_dtime
+    <73>   DW_AT_type        : <0x1ed>
+    <77>   DW_AT_decl_file   : 4
+    <78>   DW_AT_decl_line   : 29
+    <79>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x2a8): shm_ctime
+    <81>   DW_AT_type        : <0x1ed>
+    <85>   DW_AT_decl_file   : 4
+    <86>   DW_AT_decl_line   : 33
+    <87>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x2b2): shm_cpid
+    <8f>   DW_AT_type        : <0x20a>
+    <93>   DW_AT_decl_file   : 4
+    <94>   DW_AT_decl_line   : 37
+    <95>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x2ca): shm_lpid
+    <9d>   DW_AT_type        : <0x20a>
+    <a1>   DW_AT_decl_file   : 4
+    <a2>   DW_AT_decl_line   : 38
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x2d3): shm_nattch
+    <ab>   DW_AT_type        : <0x1d0>
+    <af>   DW_AT_decl_file   : 4
+    <b0>   DW_AT_decl_line   : 39
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x2de): __unused4
+    <b9>   DW_AT_type        : <0x1d0>
+    <bd>   DW_AT_decl_file   : 4
+    <be>   DW_AT_decl_line   : 40
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x2e8): __unused5
+    <c7>   DW_AT_type        : <0x1d0>
+    <cb>   DW_AT_decl_file   : 4
+    <cc>   DW_AT_decl_line   : 41
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
+ <2><d0>: Abbrev Number: 0
+ <1><d1>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <d2>   DW_AT_name        : (indirect string, offset: 0x24f): ipc64_perm
+    <d6>   DW_AT_byte_size   : 36
+    <d7>   DW_AT_decl_file   : 2
+    <d8>   DW_AT_decl_line   : 21
+ <2><d9>: Abbrev Number: 5 (DW_TAG_member)
+    <da>   DW_AT_name        : (indirect string, offset: 0x173): key
+    <de>   DW_AT_type        : <0x174>
+    <e2>   DW_AT_decl_file   : 2
+    <e3>   DW_AT_decl_line   : 22
+    <e4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><e7>: Abbrev Number: 5 (DW_TAG_member)
+    <e8>   DW_AT_name        : (indirect string, offset: 0x18a): uid
+    <ec>   DW_AT_type        : <0x186>
+    <f0>   DW_AT_decl_file   : 2
+    <f1>   DW_AT_decl_line   : 23
+    <f2>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><f5>: Abbrev Number: 5 (DW_TAG_member)
+    <f6>   DW_AT_name        : (indirect string, offset: 0x1ac): gid
+    <fa>   DW_AT_type        : <0x198>
+    <fe>   DW_AT_decl_file   : 2
+    <ff>   DW_AT_decl_line   : 24
+    <100>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><103>: Abbrev Number: 5 (DW_TAG_member)
+    <104>   DW_AT_name        : (indirect string, offset: 0x1c1): cuid
+    <108>   DW_AT_type        : <0x186>
+    <10c>   DW_AT_decl_file   : 2
+    <10d>   DW_AT_decl_line   : 25
+    <10e>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><111>: Abbrev Number: 5 (DW_TAG_member)
+    <112>   DW_AT_name        : (indirect string, offset: 0x1c6): cgid
+    <116>   DW_AT_type        : <0x198>
+    <11a>   DW_AT_decl_file   : 2
+    <11b>   DW_AT_decl_line   : 26
+    <11c>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><11f>: Abbrev Number: 5 (DW_TAG_member)
+    <120>   DW_AT_name        : (indirect string, offset: 0x1cb): mode
+    <124>   DW_AT_type        : <0x1a3>
+    <128>   DW_AT_decl_file   : 2
+    <129>   DW_AT_decl_line   : 27
+    <12a>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><12d>: Abbrev Number: 5 (DW_TAG_member)
+    <12e>   DW_AT_name        : (indirect string, offset: 0x1e0): __pad1
+    <132>   DW_AT_type        : <0x1ae>
+    <136>   DW_AT_decl_file   : 2
+    <137>   DW_AT_decl_line   : 28
+    <138>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><13b>: Abbrev Number: 5 (DW_TAG_member)
+    <13c>   DW_AT_name        : (indirect string, offset: 0x1fe): seq
+    <140>   DW_AT_type        : <0x1c9>
+    <144>   DW_AT_decl_file   : 2
+    <145>   DW_AT_decl_line   : 29
+    <146>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><149>: Abbrev Number: 5 (DW_TAG_member)
+    <14a>   DW_AT_name        : (indirect string, offset: 0x211): __pad2
+    <14e>   DW_AT_type        : <0x1c9>
+    <152>   DW_AT_decl_file   : 2
+    <153>   DW_AT_decl_line   : 30
+    <154>   DW_AT_data_member_location: 2 byte block: 23 1a 	(DW_OP_plus_uconst: 26)
+ <2><157>: Abbrev Number: 5 (DW_TAG_member)
+    <158>   DW_AT_name        : (indirect string, offset: 0x218): __unused1
+    <15c>   DW_AT_type        : <0x1d0>
+    <160>   DW_AT_decl_file   : 2
+    <161>   DW_AT_decl_line   : 31
+    <162>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><165>: Abbrev Number: 5 (DW_TAG_member)
+    <166>   DW_AT_name        : (indirect string, offset: 0x245): __unused2
+    <16a>   DW_AT_type        : <0x1d0>
+    <16e>   DW_AT_decl_file   : 2
+    <16f>   DW_AT_decl_line   : 32
+    <170>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><173>: Abbrev Number: 0
+ <1><174>: Abbrev Number: 3 (DW_TAG_typedef)
+    <175>   DW_AT_type        : <0x17f>
+    <179>   DW_AT_name        : (indirect string, offset: 0x17b): __kernel_key_t
+    <17d>   DW_AT_decl_file   : 1
+    <17e>   DW_AT_decl_line   : 28
+ <1><17f>: Abbrev Number: 6 (DW_TAG_base_type)
+    <180>   DW_AT_name        : (indirect string, offset: 0x177): int
+    <184>   DW_AT_encoding    : 5	(signed)
+    <185>   DW_AT_byte_size   : 4
+ <1><186>: Abbrev Number: 3 (DW_TAG_typedef)
+    <187>   DW_AT_type        : <0x191>
+    <18b>   DW_AT_name        : (indirect string, offset: 0x19b): __kernel_uid32_t
+    <18f>   DW_AT_decl_file   : 3
+    <190>   DW_AT_decl_line   : 49
+ <1><191>: Abbrev Number: 6 (DW_TAG_base_type)
+    <192>   DW_AT_name        : (indirect string, offset: 0x18e): unsigned int
+    <196>   DW_AT_encoding    : 7	(unsigned)
+    <197>   DW_AT_byte_size   : 4
+ <1><198>: Abbrev Number: 3 (DW_TAG_typedef)
+    <199>   DW_AT_type        : <0x191>
+    <19d>   DW_AT_name        : (indirect string, offset: 0x1b0): __kernel_gid32_t
+    <1a1>   DW_AT_decl_file   : 3
+    <1a2>   DW_AT_decl_line   : 50
+ <1><1a3>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1a4>   DW_AT_type        : <0x191>
+    <1a8>   DW_AT_name        : (indirect string, offset: 0x1d0): __kernel_mode_t
+    <1ac>   DW_AT_decl_file   : 3
+    <1ad>   DW_AT_decl_line   : 30
+ <1><1ae>: Abbrev Number: 7 (DW_TAG_array_type)
+    <1af>   DW_AT_type        : <0x1bb>
+ <2><1b3>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <1b4>   DW_AT_type        : <0x1c2>
+    <1b8>   DW_AT_lower_bound : 0
+    <1b9>   DW_AT_count       : 0
+ <2><1ba>: Abbrev Number: 0
+ <1><1bb>: Abbrev Number: 6 (DW_TAG_base_type)
+    <1bc>   DW_AT_name        : (indirect string, offset: 0x1e7): unsigned char
+    <1c0>   DW_AT_encoding    : 8	(unsigned char)
+    <1c1>   DW_AT_byte_size   : 1
+ <1><1c2>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1c3>   DW_AT_name        : (indirect string, offset: 0x1f5): sizetype
+    <1c7>   DW_AT_byte_size   : 8
+    <1c8>   DW_AT_encoding    : 7	(unsigned)
+ <1><1c9>: Abbrev Number: 6 (DW_TAG_base_type)
+    <1ca>   DW_AT_name        : (indirect string, offset: 0x202): unsigned short
+    <1ce>   DW_AT_encoding    : 7	(unsigned)
+    <1cf>   DW_AT_byte_size   : 2
+ <1><1d0>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1d1>   DW_AT_type        : <0x1db>
+    <1d5>   DW_AT_name        : (indirect string, offset: 0x234): __kernel_ulong_t
+    <1d9>   DW_AT_decl_file   : 3
+    <1da>   DW_AT_decl_line   : 24
+ <1><1db>: Abbrev Number: 6 (DW_TAG_base_type)
+    <1dc>   DW_AT_name        : (indirect string, offset: 0x222): long unsigned int
+    <1e0>   DW_AT_encoding    : 7	(unsigned)
+    <1e1>   DW_AT_byte_size   : 4
+ <1><1e2>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1e3>   DW_AT_type        : <0x191>
+    <1e7>   DW_AT_name        : (indirect string, offset: 0x264): size_t
+    <1eb>   DW_AT_decl_file   : 5
+    <1ec>   DW_AT_decl_line   : 62
+ <1><1ed>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1ee>   DW_AT_type        : <0x1f8>
+    <1f2>   DW_AT_name        : (indirect string, offset: 0x28e): __kernel_time_t
+    <1f6>   DW_AT_decl_file   : 3
+    <1f7>   DW_AT_decl_line   : 77
+ <1><1f8>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1f9>   DW_AT_type        : <0x203>
+    <1fd>   DW_AT_name        : (indirect string, offset: 0x27e): __kernel_long_t
+    <201>   DW_AT_decl_file   : 3
+    <202>   DW_AT_decl_line   : 23
+ <1><203>: Abbrev Number: 6 (DW_TAG_base_type)
+    <204>   DW_AT_name        : (indirect string, offset: 0x275): long int
+    <208>   DW_AT_encoding    : 5	(signed)
+    <209>   DW_AT_byte_size   : 4
+ <1><20a>: Abbrev Number: 3 (DW_TAG_typedef)
+    <20b>   DW_AT_type        : <0x17f>
+    <20f>   DW_AT_name        : (indirect string, offset: 0x2bb): __kernel_pid_t
+    <213>   DW_AT_decl_file   : 3
+    <214>   DW_AT_decl_line   : 33
+ <1><215>: Abbrev Number: 0
 
diff --git a/mpers-m32/shmid_ds_t.d2 b/mpers-m32/shmid_ds_t.d2
index 47015eb..de60d60 100644
--- a/mpers-m32/shmid_ds_t.d2
+++ b/mpers-m32/shmid_ds_t.d2
@@ -1,270 +1,270 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8f): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x159): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 49
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x233): shmid_ds_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x2fd): shmid_ds_t
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 42
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x228): shmid64_ds
+DW_AT_name        : (indirect string, offset: 0x2f2): shmid64_ds
 DW_AT_byte_size   : 72
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 22
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa0): shm_perm
-DW_AT_type        : <0xd0>
+DW_AT_name        : (indirect string, offset: 0x16a): shm_perm
+DW_AT_type        : <0xd1>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 23
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x190): shm_segsz
-DW_AT_type        : <0x1e1>
+DW_AT_name        : (indirect string, offset: 0x25a): shm_segsz
+DW_AT_type        : <0x1e2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1a1): shm_atime
-DW_AT_type        : <0x1ec>
+DW_AT_name        : (indirect string, offset: 0x26b): shm_atime
+DW_AT_type        : <0x1ed>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d4): shm_dtime
-DW_AT_type        : <0x1ec>
+DW_AT_name        : (indirect string, offset: 0x29e): shm_dtime
+DW_AT_type        : <0x1ed>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1de): shm_ctime
-DW_AT_type        : <0x1ec>
+DW_AT_name        : (indirect string, offset: 0x2a8): shm_ctime
+DW_AT_type        : <0x1ed>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1e8): shm_cpid
-DW_AT_type        : <0x209>
+DW_AT_name        : (indirect string, offset: 0x2b2): shm_cpid
+DW_AT_type        : <0x20a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x200): shm_lpid
-DW_AT_type        : <0x209>
+DW_AT_name        : (indirect string, offset: 0x2ca): shm_lpid
+DW_AT_type        : <0x20a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x209): shm_nattch
-DW_AT_type        : <0x1cf>
+DW_AT_name        : (indirect string, offset: 0x2d3): shm_nattch
+DW_AT_type        : <0x1d0>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x214): __unused4
-DW_AT_type        : <0x1cf>
+DW_AT_name        : (indirect string, offset: 0x2de): __unused4
+DW_AT_type        : <0x1d0>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x21e): __unused5
-DW_AT_type        : <0x1cf>
+DW_AT_name        : (indirect string, offset: 0x2e8): __unused5
+DW_AT_type        : <0x1d0>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
-<1><d0>
+<1><d1>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x185): ipc64_perm
+DW_AT_name        : (indirect string, offset: 0x24f): ipc64_perm
 DW_AT_byte_size   : 36
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 21
-<2><d8>
+<2><d9>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa9): key
-DW_AT_type        : <0x173>
+DW_AT_name        : (indirect string, offset: 0x173): key
+DW_AT_type        : <0x174>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 22
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><e6>
+<2><e7>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc0): uid
-DW_AT_type        : <0x185>
+DW_AT_name        : (indirect string, offset: 0x18a): uid
+DW_AT_type        : <0x186>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 23
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><f4>
+<2><f5>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe2): gid
-DW_AT_type        : <0x197>
+DW_AT_name        : (indirect string, offset: 0x1ac): gid
+DW_AT_type        : <0x198>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><102>
+<2><103>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf7): cuid
-DW_AT_type        : <0x185>
+DW_AT_name        : (indirect string, offset: 0x1c1): cuid
+DW_AT_type        : <0x186>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><110>
+<2><111>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfc): cgid
-DW_AT_type        : <0x197>
+DW_AT_name        : (indirect string, offset: 0x1c6): cgid
+DW_AT_type        : <0x198>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><11e>
+<2><11f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x101): mode
-DW_AT_type        : <0x1a2>
+DW_AT_name        : (indirect string, offset: 0x1cb): mode
+DW_AT_type        : <0x1a3>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 27
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><12c>
+<2><12d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x116): __pad1
-DW_AT_type        : <0x1ad>
+DW_AT_name        : (indirect string, offset: 0x1e0): __pad1
+DW_AT_type        : <0x1ae>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><13a>
+<2><13b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x134): seq
-DW_AT_type        : <0x1c8>
+DW_AT_name        : (indirect string, offset: 0x1fe): seq
+DW_AT_type        : <0x1c9>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><148>
+<2><149>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x147): __pad2
-DW_AT_type        : <0x1c8>
+DW_AT_name        : (indirect string, offset: 0x211): __pad2
+DW_AT_type        : <0x1c9>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 1a 	(DW_OP_plus_uconst: 26)
-<2><156>
+<2><157>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14e): __unused1
-DW_AT_type        : <0x1cf>
+DW_AT_name        : (indirect string, offset: 0x218): __unused1
+DW_AT_type        : <0x1d0>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><164>
+<2><165>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17b): __unused2
-DW_AT_type        : <0x1cf>
+DW_AT_name        : (indirect string, offset: 0x245): __unused2
+DW_AT_type        : <0x1d0>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<1><173>
+<1><174>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x17e>
-DW_AT_name        : (indirect string, offset: 0xb1): __kernel_key_t
+DW_AT_type        : <0x17f>
+DW_AT_name        : (indirect string, offset: 0x17b): __kernel_key_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><17e>
+<1><17f>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xad): int
+DW_AT_name        : (indirect string, offset: 0x177): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><185>
+<1><186>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x190>
-DW_AT_name        : (indirect string, offset: 0xd1): __kernel_uid32_t
+DW_AT_type        : <0x191>
+DW_AT_name        : (indirect string, offset: 0x19b): __kernel_uid32_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 49
-<1><190>
+<1><191>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc4): unsigned int
+DW_AT_name        : (indirect string, offset: 0x18e): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><197>
+<1><198>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x190>
-DW_AT_name        : (indirect string, offset: 0xe6): __kernel_gid32_t
+DW_AT_type        : <0x191>
+DW_AT_name        : (indirect string, offset: 0x1b0): __kernel_gid32_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 50
-<1><1a2>
+<1><1a3>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x190>
-DW_AT_name        : (indirect string, offset: 0x106): __kernel_mode_t
+DW_AT_type        : <0x191>
+DW_AT_name        : (indirect string, offset: 0x1d0): __kernel_mode_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 30
-<1><1ad>
+<1><1ae>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x1ba>
-<2><1b2>
+DW_AT_type        : <0x1bb>
+<2><1b3>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x1c1>
+DW_AT_type        : <0x1c2>
 DW_AT_lower_bound : 0
 DW_AT_count       : 0
-<1><1ba>
+<1><1bb>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x11d): unsigned char
+DW_AT_name        : (indirect string, offset: 0x1e7): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><1c1>
+<1><1c2>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x12b): sizetype
+DW_AT_name        : (indirect string, offset: 0x1f5): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><1c8>
+<1><1c9>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x138): unsigned short
+DW_AT_name        : (indirect string, offset: 0x202): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><1cf>
+<1><1d0>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x1da>
-DW_AT_name        : (indirect string, offset: 0x16a): __kernel_ulong_t
+DW_AT_type        : <0x1db>
+DW_AT_name        : (indirect string, offset: 0x234): __kernel_ulong_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 24
-<1><1da>
+<1><1db>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x158): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x222): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><1e1>
+<1><1e2>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x190>
-DW_AT_name        : (indirect string, offset: 0x19a): size_t
+DW_AT_type        : <0x191>
+DW_AT_name        : (indirect string, offset: 0x264): size_t
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 62
-<1><1ec>
+<1><1ed>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x1f7>
-DW_AT_name        : (indirect string, offset: 0x1c4): __kernel_time_t
+DW_AT_type        : <0x1f8>
+DW_AT_name        : (indirect string, offset: 0x28e): __kernel_time_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 77
-<1><1f7>
+<1><1f8>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x202>
-DW_AT_name        : (indirect string, offset: 0x1b4): __kernel_long_t
+DW_AT_type        : <0x203>
+DW_AT_name        : (indirect string, offset: 0x27e): __kernel_long_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 23
-<1><202>
+<1><203>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1ab): long int
+DW_AT_name        : (indirect string, offset: 0x275): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><209>
+<1><20a>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x17e>
-DW_AT_name        : (indirect string, offset: 0x1f1): __kernel_pid_t
+DW_AT_type        : <0x17f>
+DW_AT_name        : (indirect string, offset: 0x2bb): __kernel_pid_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 33
diff --git a/mpers-m32/siginfo_t.d1 b/mpers-m32/siginfo_t.d1
index 7cb5c2b..365ad3f 100644
--- a/mpers-m32/siginfo_t.d1
+++ b/mpers-m32/siginfo_t.d1
@@ -1,408 +1,409 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x348 (32-bit)
+   Length:        0x349 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/siginfo_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/siginfo_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x53): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 4
-    <29>   DW_AT_decl_line   : 42
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x244): siginfo_t
-    <39>   DW_AT_decl_file   : 1
-    <3a>   DW_AT_decl_line   : 100
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x23c): siginfo
-    <40>   DW_AT_byte_size   : 124
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 47
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0x9f): si_signo
-    <48>   DW_AT_type        : <0x294>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 48
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xac): si_errno
-    <56>   DW_AT_type        : <0x294>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 49
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xb5): si_code
-    <64>   DW_AT_type        : <0x294>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 50
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xbd): _sifields
-    <72>   DW_AT_type        : <0x7b>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 99
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 6 (DW_TAG_union_type)
-    <7c>   DW_AT_byte_size   : 112
-    <7d>   DW_AT_decl_file   : 1
-    <7e>   DW_AT_decl_line   : 51
- <3><7f>: Abbrev Number: 5 (DW_TAG_member)
-    <80>   DW_AT_name        : (indirect string, offset: 0xc7): _pad
-    <84>   DW_AT_type        : <0x29b>
-    <88>   DW_AT_decl_file   : 1
-    <89>   DW_AT_decl_line   : 52
-    <8a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><8d>: Abbrev Number: 5 (DW_TAG_member)
-    <8e>   DW_AT_name        : (indirect string, offset: 0xd5): _kill
-    <92>   DW_AT_type        : <0x9b>
-    <96>   DW_AT_decl_file   : 1
-    <97>   DW_AT_decl_line   : 56
-    <98>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><9b>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <9c>   DW_AT_byte_size   : 8
-    <9d>   DW_AT_decl_file   : 1
-    <9e>   DW_AT_decl_line   : 53
- <4><9f>: Abbrev Number: 5 (DW_TAG_member)
-    <a0>   DW_AT_name        : (indirect string, offset: 0xdb): _pid
-    <a4>   DW_AT_type        : <0x2af>
-    <a8>   DW_AT_decl_file   : 1
-    <a9>   DW_AT_decl_line   : 54
-    <aa>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><ad>: Abbrev Number: 5 (DW_TAG_member)
-    <ae>   DW_AT_name        : (indirect string, offset: 0xef): _uid
-    <b2>   DW_AT_type        : <0x2ba>
-    <b6>   DW_AT_decl_file   : 1
-    <b7>   DW_AT_decl_line   : 55
-    <b8>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><bb>: Abbrev Number: 0
- <3><bc>: Abbrev Number: 5 (DW_TAG_member)
-    <bd>   DW_AT_name        : (indirect string, offset: 0x112): _timer
-    <c1>   DW_AT_type        : <0xca>
-    <c5>   DW_AT_decl_file   : 1
-    <c6>   DW_AT_decl_line   : 63
-    <c7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><ca>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <cb>   DW_AT_byte_size   : 16
-    <cc>   DW_AT_decl_file   : 1
-    <cd>   DW_AT_decl_line   : 57
- <4><ce>: Abbrev Number: 5 (DW_TAG_member)
-    <cf>   DW_AT_name        : (indirect string, offset: 0x119): _tid
-    <d3>   DW_AT_type        : <0x2cc>
-    <d7>   DW_AT_decl_file   : 1
-    <d8>   DW_AT_decl_line   : 58
-    <d9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><dc>: Abbrev Number: 5 (DW_TAG_member)
-    <dd>   DW_AT_name        : (indirect string, offset: 0x12f): _overrun
-    <e1>   DW_AT_type        : <0x294>
-    <e5>   DW_AT_decl_file   : 1
-    <e6>   DW_AT_decl_line   : 59
-    <e7>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><ea>: Abbrev Number: 5 (DW_TAG_member)
-    <eb>   DW_AT_name        : (indirect string, offset: 0xc7): _pad
-    <ef>   DW_AT_type        : <0x2d7>
-    <f3>   DW_AT_decl_file   : 1
-    <f4>   DW_AT_decl_line   : 60
-    <f5>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><f8>: Abbrev Number: 5 (DW_TAG_member)
-    <f9>   DW_AT_name        : (indirect string, offset: 0x13d): _sigval
-    <fd>   DW_AT_type        : <0x2eb>
-    <101>   DW_AT_decl_file   : 1
-    <102>   DW_AT_decl_line   : 61
-    <103>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><106>: Abbrev Number: 5 (DW_TAG_member)
-    <107>   DW_AT_name        : (indirect string, offset: 0x169): _sys_private
-    <10b>   DW_AT_type        : <0x294>
-    <10f>   DW_AT_decl_file   : 1
-    <110>   DW_AT_decl_line   : 62
-    <111>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <4><114>: Abbrev Number: 0
- <3><115>: Abbrev Number: 5 (DW_TAG_member)
-    <116>   DW_AT_name        : (indirect string, offset: 0x176): _rt
-    <11a>   DW_AT_type        : <0x123>
-    <11e>   DW_AT_decl_file   : 1
-    <11f>   DW_AT_decl_line   : 68
-    <120>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><123>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <124>   DW_AT_byte_size   : 12
-    <125>   DW_AT_decl_file   : 1
-    <126>   DW_AT_decl_line   : 64
- <4><127>: Abbrev Number: 5 (DW_TAG_member)
-    <128>   DW_AT_name        : (indirect string, offset: 0xdb): _pid
-    <12c>   DW_AT_type        : <0x2af>
-    <130>   DW_AT_decl_file   : 1
-    <131>   DW_AT_decl_line   : 65
-    <132>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><135>: Abbrev Number: 5 (DW_TAG_member)
-    <136>   DW_AT_name        : (indirect string, offset: 0xef): _uid
-    <13a>   DW_AT_type        : <0x2ba>
-    <13e>   DW_AT_decl_file   : 1
-    <13f>   DW_AT_decl_line   : 66
-    <140>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><143>: Abbrev Number: 5 (DW_TAG_member)
-    <144>   DW_AT_name        : (indirect string, offset: 0x13d): _sigval
-    <148>   DW_AT_type        : <0x2eb>
-    <14c>   DW_AT_decl_file   : 1
-    <14d>   DW_AT_decl_line   : 67
-    <14e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><151>: Abbrev Number: 0
- <3><152>: Abbrev Number: 5 (DW_TAG_member)
-    <153>   DW_AT_name        : (indirect string, offset: 0x17a): _sigchld
-    <157>   DW_AT_type        : <0x160>
-    <15b>   DW_AT_decl_file   : 1
-    <15c>   DW_AT_decl_line   : 75
-    <15d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><160>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <161>   DW_AT_byte_size   : 20
-    <162>   DW_AT_decl_file   : 1
-    <163>   DW_AT_decl_line   : 69
- <4><164>: Abbrev Number: 5 (DW_TAG_member)
-    <165>   DW_AT_name        : (indirect string, offset: 0xdb): _pid
-    <169>   DW_AT_type        : <0x2af>
-    <16d>   DW_AT_decl_file   : 1
-    <16e>   DW_AT_decl_line   : 70
-    <16f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><172>: Abbrev Number: 5 (DW_TAG_member)
-    <173>   DW_AT_name        : (indirect string, offset: 0xef): _uid
-    <177>   DW_AT_type        : <0x2ba>
-    <17b>   DW_AT_decl_file   : 1
-    <17c>   DW_AT_decl_line   : 71
-    <17d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><180>: Abbrev Number: 5 (DW_TAG_member)
-    <181>   DW_AT_name        : (indirect string, offset: 0x183): _status
-    <185>   DW_AT_type        : <0x294>
-    <189>   DW_AT_decl_file   : 1
-    <18a>   DW_AT_decl_line   : 72
-    <18b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><18e>: Abbrev Number: 5 (DW_TAG_member)
-    <18f>   DW_AT_name        : (indirect string, offset: 0x18b): _utime
-    <193>   DW_AT_type        : <0x31c>
-    <197>   DW_AT_decl_file   : 1
-    <198>   DW_AT_decl_line   : 73
-    <199>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <4><19c>: Abbrev Number: 5 (DW_TAG_member)
-    <19d>   DW_AT_name        : (indirect string, offset: 0x1bc): _stime
-    <1a1>   DW_AT_type        : <0x31c>
-    <1a5>   DW_AT_decl_file   : 1
-    <1a6>   DW_AT_decl_line   : 74
-    <1a7>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <4><1aa>: Abbrev Number: 0
- <3><1ab>: Abbrev Number: 5 (DW_TAG_member)
-    <1ac>   DW_AT_name        : (indirect string, offset: 0x1c3): _sigfault
-    <1b0>   DW_AT_type        : <0x1b9>
-    <1b4>   DW_AT_decl_file   : 1
-    <1b5>   DW_AT_decl_line   : 89
-    <1b6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><1b9>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <1ba>   DW_AT_byte_size   : 16
-    <1bb>   DW_AT_decl_file   : 1
-    <1bc>   DW_AT_decl_line   : 76
- <4><1bd>: Abbrev Number: 5 (DW_TAG_member)
-    <1be>   DW_AT_name        : (indirect string, offset: 0x1cd): _addr
-    <1c2>   DW_AT_type        : <0x31b>
-    <1c6>   DW_AT_decl_file   : 1
-    <1c7>   DW_AT_decl_line   : 77
-    <1c8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><1cb>: Abbrev Number: 5 (DW_TAG_member)
-    <1cc>   DW_AT_name        : (indirect string, offset: 0x1d3): _addr_lsb
-    <1d0>   DW_AT_type        : <0x339>
-    <1d4>   DW_AT_decl_file   : 1
-    <1d5>   DW_AT_decl_line   : 81
-    <1d6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><1d9>: Abbrev Number: 8 (DW_TAG_member)
-    <1da>   DW_AT_type        : <0x1e3>
-    <1de>   DW_AT_decl_file   : 1
-    <1df>   DW_AT_decl_line   : 82
-    <1e0>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><1e3>: Abbrev Number: 6 (DW_TAG_union_type)
-    <1e4>   DW_AT_byte_size   : 8
-    <1e5>   DW_AT_decl_file   : 1
-    <1e6>   DW_AT_decl_line   : 82
- <5><1e7>: Abbrev Number: 5 (DW_TAG_member)
-    <1e8>   DW_AT_name        : (indirect string, offset: 0x1e3): _addr_bnd
-    <1ec>   DW_AT_type        : <0x1f5>
-    <1f0>   DW_AT_decl_file   : 1
-    <1f1>   DW_AT_decl_line   : 86
-    <1f2>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <5><1f5>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <1f6>   DW_AT_byte_size   : 8
-    <1f7>   DW_AT_decl_file   : 1
-    <1f8>   DW_AT_decl_line   : 83
- <6><1f9>: Abbrev Number: 5 (DW_TAG_member)
-    <1fa>   DW_AT_name        : (indirect string, offset: 0x1ed): _lower
-    <1fe>   DW_AT_type        : <0x31b>
-    <202>   DW_AT_decl_file   : 1
-    <203>   DW_AT_decl_line   : 84
-    <204>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <6><207>: Abbrev Number: 5 (DW_TAG_member)
-    <208>   DW_AT_name        : (indirect string, offset: 0x1f4): _upper
-    <20c>   DW_AT_type        : <0x31b>
-    <210>   DW_AT_decl_file   : 1
-    <211>   DW_AT_decl_line   : 85
-    <212>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <6><215>: Abbrev Number: 0
- <5><216>: Abbrev Number: 5 (DW_TAG_member)
-    <217>   DW_AT_name        : (indirect string, offset: 0x1fb): _pkey
-    <21b>   DW_AT_type        : <0x340>
-    <21f>   DW_AT_decl_file   : 1
-    <220>   DW_AT_decl_line   : 87
-    <221>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <5><224>: Abbrev Number: 0
- <4><225>: Abbrev Number: 0
- <3><226>: Abbrev Number: 5 (DW_TAG_member)
-    <227>   DW_AT_name        : (indirect string, offset: 0x207): _sigpoll
-    <22b>   DW_AT_type        : <0x234>
-    <22f>   DW_AT_decl_file   : 1
-    <230>   DW_AT_decl_line   : 93
-    <231>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><234>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <235>   DW_AT_byte_size   : 8
-    <236>   DW_AT_decl_file   : 1
-    <237>   DW_AT_decl_line   : 90
- <4><238>: Abbrev Number: 5 (DW_TAG_member)
-    <239>   DW_AT_name        : (indirect string, offset: 0x210): _band
-    <23d>   DW_AT_type        : <0x332>
-    <241>   DW_AT_decl_file   : 1
-    <242>   DW_AT_decl_line   : 91
-    <243>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><246>: Abbrev Number: 5 (DW_TAG_member)
-    <247>   DW_AT_name        : (indirect string, offset: 0x216): _fd
-    <24b>   DW_AT_type        : <0x294>
-    <24f>   DW_AT_decl_file   : 1
-    <250>   DW_AT_decl_line   : 92
-    <251>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><254>: Abbrev Number: 0
- <3><255>: Abbrev Number: 5 (DW_TAG_member)
-    <256>   DW_AT_name        : (indirect string, offset: 0x21a): _sigsys
-    <25a>   DW_AT_type        : <0x263>
-    <25e>   DW_AT_decl_file   : 1
-    <25f>   DW_AT_decl_line   : 98
-    <260>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><263>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <264>   DW_AT_byte_size   : 12
-    <265>   DW_AT_decl_file   : 1
-    <266>   DW_AT_decl_line   : 94
- <4><267>: Abbrev Number: 5 (DW_TAG_member)
-    <268>   DW_AT_name        : (indirect string, offset: 0x222): _call_addr
-    <26c>   DW_AT_type        : <0x31b>
-    <270>   DW_AT_decl_file   : 1
-    <271>   DW_AT_decl_line   : 95
-    <272>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><275>: Abbrev Number: 5 (DW_TAG_member)
-    <276>   DW_AT_name        : (indirect string, offset: 0x22d): _syscall
-    <27a>   DW_AT_type        : <0x294>
-    <27e>   DW_AT_decl_file   : 1
-    <27f>   DW_AT_decl_line   : 96
-    <280>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><283>: Abbrev Number: 5 (DW_TAG_member)
-    <284>   DW_AT_name        : (indirect string, offset: 0x236): _arch
-    <288>   DW_AT_type        : <0x2c5>
-    <28c>   DW_AT_decl_file   : 1
-    <28d>   DW_AT_decl_line   : 97
-    <28e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><291>: Abbrev Number: 0
- <3><292>: Abbrev Number: 0
- <2><293>: Abbrev Number: 0
- <1><294>: Abbrev Number: 9 (DW_TAG_base_type)
-    <295>   DW_AT_name        : (indirect string, offset: 0xa8): int
-    <299>   DW_AT_encoding    : 5	(signed)
-    <29a>   DW_AT_byte_size   : 4
- <1><29b>: Abbrev Number: 10 (DW_TAG_array_type)
-    <29c>   DW_AT_type        : <0x294>
- <2><2a0>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <2a1>   DW_AT_type        : <0x2a8>
-    <2a5>   DW_AT_lower_bound : 0
-    <2a6>   DW_AT_count       : 28
- <2><2a7>: Abbrev Number: 0
- <1><2a8>: Abbrev Number: 12 (DW_TAG_base_type)
-    <2a9>   DW_AT_name        : (indirect string, offset: 0xcc): sizetype
-    <2ad>   DW_AT_byte_size   : 8
-    <2ae>   DW_AT_encoding    : 7	(unsigned)
- <1><2af>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2b0>   DW_AT_type        : <0x294>
-    <2b4>   DW_AT_name        : (indirect string, offset: 0xe0): __kernel_pid_t
-    <2b8>   DW_AT_decl_file   : 2
-    <2b9>   DW_AT_decl_line   : 33
- <1><2ba>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2bb>   DW_AT_type        : <0x2c5>
-    <2bf>   DW_AT_name        : (indirect string, offset: 0x101): __kernel_uid32_t
-    <2c3>   DW_AT_decl_file   : 2
-    <2c4>   DW_AT_decl_line   : 49
- <1><2c5>: Abbrev Number: 9 (DW_TAG_base_type)
-    <2c6>   DW_AT_name        : (indirect string, offset: 0xf4): unsigned int
-    <2ca>   DW_AT_encoding    : 7	(unsigned)
-    <2cb>   DW_AT_byte_size   : 4
- <1><2cc>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2cd>   DW_AT_type        : <0x294>
-    <2d1>   DW_AT_name        : (indirect string, offset: 0x11e): __kernel_timer_t
-    <2d5>   DW_AT_decl_file   : 2
-    <2d6>   DW_AT_decl_line   : 79
- <1><2d7>: Abbrev Number: 10 (DW_TAG_array_type)
-    <2d8>   DW_AT_type        : <0x2e4>
- <2><2dc>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <2dd>   DW_AT_type        : <0x2a8>
-    <2e1>   DW_AT_lower_bound : 0
-    <2e2>   DW_AT_count       : 0
- <2><2e3>: Abbrev Number: 0
- <1><2e4>: Abbrev Number: 9 (DW_TAG_base_type)
-    <2e5>   DW_AT_name        : (indirect string, offset: 0x138): char
-    <2e9>   DW_AT_encoding    : 8	(unsigned char)
-    <2ea>   DW_AT_byte_size   : 1
- <1><2eb>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2ec>   DW_AT_type        : <0x2f6>
-    <2f0>   DW_AT_name        : (indirect string, offset: 0x160): sigval_t
-    <2f4>   DW_AT_decl_file   : 1
-    <2f5>   DW_AT_decl_line   : 26
- <1><2f6>: Abbrev Number: 13 (DW_TAG_union_type)
-    <2f7>   DW_AT_name        : (indirect string, offset: 0x159): sigval
-    <2fb>   DW_AT_byte_size   : 4
-    <2fc>   DW_AT_decl_file   : 1
-    <2fd>   DW_AT_decl_line   : 23
- <2><2fe>: Abbrev Number: 5 (DW_TAG_member)
-    <2ff>   DW_AT_name        : (indirect string, offset: 0x145): sival_int
-    <303>   DW_AT_type        : <0x294>
-    <307>   DW_AT_decl_file   : 1
-    <308>   DW_AT_decl_line   : 24
-    <309>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><30c>: Abbrev Number: 5 (DW_TAG_member)
-    <30d>   DW_AT_name        : (indirect string, offset: 0x14f): sival_ptr
-    <311>   DW_AT_type        : <0x31b>
-    <315>   DW_AT_decl_file   : 1
-    <316>   DW_AT_decl_line   : 25
-    <317>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><31a>: Abbrev Number: 0
- <1><31b>: Abbrev Number: 14 (DW_TAG_pointer_type)
- <1><31c>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31d>   DW_AT_type        : <0x327>
-    <321>   DW_AT_name        : (indirect string, offset: 0x1ab): __kernel_clock_t
-    <325>   DW_AT_decl_file   : 2
-    <326>   DW_AT_decl_line   : 78
- <1><327>: Abbrev Number: 3 (DW_TAG_typedef)
-    <328>   DW_AT_type        : <0x332>
-    <32c>   DW_AT_name        : (indirect string, offset: 0x19b): __kernel_long_t
-    <330>   DW_AT_decl_file   : 2
-    <331>   DW_AT_decl_line   : 23
- <1><332>: Abbrev Number: 9 (DW_TAG_base_type)
-    <333>   DW_AT_name        : (indirect string, offset: 0x192): long int
-    <337>   DW_AT_encoding    : 5	(signed)
-    <338>   DW_AT_byte_size   : 4
- <1><339>: Abbrev Number: 9 (DW_TAG_base_type)
-    <33a>   DW_AT_name        : (indirect string, offset: 0x1dd): short
-    <33e>   DW_AT_encoding    : 5	(signed)
-    <33f>   DW_AT_byte_size   : 2
- <1><340>: Abbrev Number: 3 (DW_TAG_typedef)
-    <341>   DW_AT_type        : <0x2c5>
-    <345>   DW_AT_name        : (indirect string, offset: 0x201): __u32
-    <349>   DW_AT_decl_file   : 3
-    <34a>   DW_AT_decl_line   : 28
- <1><34b>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11d): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 4
+    <2a>   DW_AT_decl_line   : 42
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x30e): siginfo_t
+    <3a>   DW_AT_decl_file   : 1
+    <3b>   DW_AT_decl_line   : 100
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x306): siginfo
+    <41>   DW_AT_byte_size   : 124
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 47
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x169): si_signo
+    <49>   DW_AT_type        : <0x295>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 48
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x176): si_errno
+    <57>   DW_AT_type        : <0x295>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 49
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x17f): si_code
+    <65>   DW_AT_type        : <0x295>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 50
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x187): _sifields
+    <73>   DW_AT_type        : <0x7c>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 99
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 6 (DW_TAG_union_type)
+    <7d>   DW_AT_byte_size   : 112
+    <7e>   DW_AT_decl_file   : 1
+    <7f>   DW_AT_decl_line   : 51
+ <3><80>: Abbrev Number: 5 (DW_TAG_member)
+    <81>   DW_AT_name        : (indirect string, offset: 0x191): _pad
+    <85>   DW_AT_type        : <0x29c>
+    <89>   DW_AT_decl_file   : 1
+    <8a>   DW_AT_decl_line   : 52
+    <8b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><8e>: Abbrev Number: 5 (DW_TAG_member)
+    <8f>   DW_AT_name        : (indirect string, offset: 0x19f): _kill
+    <93>   DW_AT_type        : <0x9c>
+    <97>   DW_AT_decl_file   : 1
+    <98>   DW_AT_decl_line   : 56
+    <99>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><9c>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <9d>   DW_AT_byte_size   : 8
+    <9e>   DW_AT_decl_file   : 1
+    <9f>   DW_AT_decl_line   : 53
+ <4><a0>: Abbrev Number: 5 (DW_TAG_member)
+    <a1>   DW_AT_name        : (indirect string, offset: 0x1a5): _pid
+    <a5>   DW_AT_type        : <0x2b0>
+    <a9>   DW_AT_decl_file   : 1
+    <aa>   DW_AT_decl_line   : 54
+    <ab>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><ae>: Abbrev Number: 5 (DW_TAG_member)
+    <af>   DW_AT_name        : (indirect string, offset: 0x1b9): _uid
+    <b3>   DW_AT_type        : <0x2bb>
+    <b7>   DW_AT_decl_file   : 1
+    <b8>   DW_AT_decl_line   : 55
+    <b9>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><bc>: Abbrev Number: 0
+ <3><bd>: Abbrev Number: 5 (DW_TAG_member)
+    <be>   DW_AT_name        : (indirect string, offset: 0x1dc): _timer
+    <c2>   DW_AT_type        : <0xcb>
+    <c6>   DW_AT_decl_file   : 1
+    <c7>   DW_AT_decl_line   : 63
+    <c8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><cb>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <cc>   DW_AT_byte_size   : 16
+    <cd>   DW_AT_decl_file   : 1
+    <ce>   DW_AT_decl_line   : 57
+ <4><cf>: Abbrev Number: 5 (DW_TAG_member)
+    <d0>   DW_AT_name        : (indirect string, offset: 0x1e3): _tid
+    <d4>   DW_AT_type        : <0x2cd>
+    <d8>   DW_AT_decl_file   : 1
+    <d9>   DW_AT_decl_line   : 58
+    <da>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><dd>: Abbrev Number: 5 (DW_TAG_member)
+    <de>   DW_AT_name        : (indirect string, offset: 0x1f9): _overrun
+    <e2>   DW_AT_type        : <0x295>
+    <e6>   DW_AT_decl_file   : 1
+    <e7>   DW_AT_decl_line   : 59
+    <e8>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><eb>: Abbrev Number: 5 (DW_TAG_member)
+    <ec>   DW_AT_name        : (indirect string, offset: 0x191): _pad
+    <f0>   DW_AT_type        : <0x2d8>
+    <f4>   DW_AT_decl_file   : 1
+    <f5>   DW_AT_decl_line   : 60
+    <f6>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><f9>: Abbrev Number: 5 (DW_TAG_member)
+    <fa>   DW_AT_name        : (indirect string, offset: 0x207): _sigval
+    <fe>   DW_AT_type        : <0x2ec>
+    <102>   DW_AT_decl_file   : 1
+    <103>   DW_AT_decl_line   : 61
+    <104>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><107>: Abbrev Number: 5 (DW_TAG_member)
+    <108>   DW_AT_name        : (indirect string, offset: 0x233): _sys_private
+    <10c>   DW_AT_type        : <0x295>
+    <110>   DW_AT_decl_file   : 1
+    <111>   DW_AT_decl_line   : 62
+    <112>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <4><115>: Abbrev Number: 0
+ <3><116>: Abbrev Number: 5 (DW_TAG_member)
+    <117>   DW_AT_name        : (indirect string, offset: 0x240): _rt
+    <11b>   DW_AT_type        : <0x124>
+    <11f>   DW_AT_decl_file   : 1
+    <120>   DW_AT_decl_line   : 68
+    <121>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><124>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <125>   DW_AT_byte_size   : 12
+    <126>   DW_AT_decl_file   : 1
+    <127>   DW_AT_decl_line   : 64
+ <4><128>: Abbrev Number: 5 (DW_TAG_member)
+    <129>   DW_AT_name        : (indirect string, offset: 0x1a5): _pid
+    <12d>   DW_AT_type        : <0x2b0>
+    <131>   DW_AT_decl_file   : 1
+    <132>   DW_AT_decl_line   : 65
+    <133>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><136>: Abbrev Number: 5 (DW_TAG_member)
+    <137>   DW_AT_name        : (indirect string, offset: 0x1b9): _uid
+    <13b>   DW_AT_type        : <0x2bb>
+    <13f>   DW_AT_decl_file   : 1
+    <140>   DW_AT_decl_line   : 66
+    <141>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><144>: Abbrev Number: 5 (DW_TAG_member)
+    <145>   DW_AT_name        : (indirect string, offset: 0x207): _sigval
+    <149>   DW_AT_type        : <0x2ec>
+    <14d>   DW_AT_decl_file   : 1
+    <14e>   DW_AT_decl_line   : 67
+    <14f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><152>: Abbrev Number: 0
+ <3><153>: Abbrev Number: 5 (DW_TAG_member)
+    <154>   DW_AT_name        : (indirect string, offset: 0x244): _sigchld
+    <158>   DW_AT_type        : <0x161>
+    <15c>   DW_AT_decl_file   : 1
+    <15d>   DW_AT_decl_line   : 75
+    <15e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><161>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <162>   DW_AT_byte_size   : 20
+    <163>   DW_AT_decl_file   : 1
+    <164>   DW_AT_decl_line   : 69
+ <4><165>: Abbrev Number: 5 (DW_TAG_member)
+    <166>   DW_AT_name        : (indirect string, offset: 0x1a5): _pid
+    <16a>   DW_AT_type        : <0x2b0>
+    <16e>   DW_AT_decl_file   : 1
+    <16f>   DW_AT_decl_line   : 70
+    <170>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><173>: Abbrev Number: 5 (DW_TAG_member)
+    <174>   DW_AT_name        : (indirect string, offset: 0x1b9): _uid
+    <178>   DW_AT_type        : <0x2bb>
+    <17c>   DW_AT_decl_file   : 1
+    <17d>   DW_AT_decl_line   : 71
+    <17e>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><181>: Abbrev Number: 5 (DW_TAG_member)
+    <182>   DW_AT_name        : (indirect string, offset: 0x24d): _status
+    <186>   DW_AT_type        : <0x295>
+    <18a>   DW_AT_decl_file   : 1
+    <18b>   DW_AT_decl_line   : 72
+    <18c>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><18f>: Abbrev Number: 5 (DW_TAG_member)
+    <190>   DW_AT_name        : (indirect string, offset: 0x255): _utime
+    <194>   DW_AT_type        : <0x31d>
+    <198>   DW_AT_decl_file   : 1
+    <199>   DW_AT_decl_line   : 73
+    <19a>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <4><19d>: Abbrev Number: 5 (DW_TAG_member)
+    <19e>   DW_AT_name        : (indirect string, offset: 0x286): _stime
+    <1a2>   DW_AT_type        : <0x31d>
+    <1a6>   DW_AT_decl_file   : 1
+    <1a7>   DW_AT_decl_line   : 74
+    <1a8>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <4><1ab>: Abbrev Number: 0
+ <3><1ac>: Abbrev Number: 5 (DW_TAG_member)
+    <1ad>   DW_AT_name        : (indirect string, offset: 0x28d): _sigfault
+    <1b1>   DW_AT_type        : <0x1ba>
+    <1b5>   DW_AT_decl_file   : 1
+    <1b6>   DW_AT_decl_line   : 89
+    <1b7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><1ba>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <1bb>   DW_AT_byte_size   : 16
+    <1bc>   DW_AT_decl_file   : 1
+    <1bd>   DW_AT_decl_line   : 76
+ <4><1be>: Abbrev Number: 5 (DW_TAG_member)
+    <1bf>   DW_AT_name        : (indirect string, offset: 0x297): _addr
+    <1c3>   DW_AT_type        : <0x31c>
+    <1c7>   DW_AT_decl_file   : 1
+    <1c8>   DW_AT_decl_line   : 77
+    <1c9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><1cc>: Abbrev Number: 5 (DW_TAG_member)
+    <1cd>   DW_AT_name        : (indirect string, offset: 0x29d): _addr_lsb
+    <1d1>   DW_AT_type        : <0x33a>
+    <1d5>   DW_AT_decl_file   : 1
+    <1d6>   DW_AT_decl_line   : 81
+    <1d7>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><1da>: Abbrev Number: 8 (DW_TAG_member)
+    <1db>   DW_AT_type        : <0x1e4>
+    <1df>   DW_AT_decl_file   : 1
+    <1e0>   DW_AT_decl_line   : 82
+    <1e1>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><1e4>: Abbrev Number: 6 (DW_TAG_union_type)
+    <1e5>   DW_AT_byte_size   : 8
+    <1e6>   DW_AT_decl_file   : 1
+    <1e7>   DW_AT_decl_line   : 82
+ <5><1e8>: Abbrev Number: 5 (DW_TAG_member)
+    <1e9>   DW_AT_name        : (indirect string, offset: 0x2ad): _addr_bnd
+    <1ed>   DW_AT_type        : <0x1f6>
+    <1f1>   DW_AT_decl_file   : 1
+    <1f2>   DW_AT_decl_line   : 86
+    <1f3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <5><1f6>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <1f7>   DW_AT_byte_size   : 8
+    <1f8>   DW_AT_decl_file   : 1
+    <1f9>   DW_AT_decl_line   : 83
+ <6><1fa>: Abbrev Number: 5 (DW_TAG_member)
+    <1fb>   DW_AT_name        : (indirect string, offset: 0x2b7): _lower
+    <1ff>   DW_AT_type        : <0x31c>
+    <203>   DW_AT_decl_file   : 1
+    <204>   DW_AT_decl_line   : 84
+    <205>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <6><208>: Abbrev Number: 5 (DW_TAG_member)
+    <209>   DW_AT_name        : (indirect string, offset: 0x2be): _upper
+    <20d>   DW_AT_type        : <0x31c>
+    <211>   DW_AT_decl_file   : 1
+    <212>   DW_AT_decl_line   : 85
+    <213>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <6><216>: Abbrev Number: 0
+ <5><217>: Abbrev Number: 5 (DW_TAG_member)
+    <218>   DW_AT_name        : (indirect string, offset: 0x2c5): _pkey
+    <21c>   DW_AT_type        : <0x341>
+    <220>   DW_AT_decl_file   : 1
+    <221>   DW_AT_decl_line   : 87
+    <222>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <5><225>: Abbrev Number: 0
+ <4><226>: Abbrev Number: 0
+ <3><227>: Abbrev Number: 5 (DW_TAG_member)
+    <228>   DW_AT_name        : (indirect string, offset: 0x2d1): _sigpoll
+    <22c>   DW_AT_type        : <0x235>
+    <230>   DW_AT_decl_file   : 1
+    <231>   DW_AT_decl_line   : 93
+    <232>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><235>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <236>   DW_AT_byte_size   : 8
+    <237>   DW_AT_decl_file   : 1
+    <238>   DW_AT_decl_line   : 90
+ <4><239>: Abbrev Number: 5 (DW_TAG_member)
+    <23a>   DW_AT_name        : (indirect string, offset: 0x2da): _band
+    <23e>   DW_AT_type        : <0x333>
+    <242>   DW_AT_decl_file   : 1
+    <243>   DW_AT_decl_line   : 91
+    <244>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><247>: Abbrev Number: 5 (DW_TAG_member)
+    <248>   DW_AT_name        : (indirect string, offset: 0x2e0): _fd
+    <24c>   DW_AT_type        : <0x295>
+    <250>   DW_AT_decl_file   : 1
+    <251>   DW_AT_decl_line   : 92
+    <252>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><255>: Abbrev Number: 0
+ <3><256>: Abbrev Number: 5 (DW_TAG_member)
+    <257>   DW_AT_name        : (indirect string, offset: 0x2e4): _sigsys
+    <25b>   DW_AT_type        : <0x264>
+    <25f>   DW_AT_decl_file   : 1
+    <260>   DW_AT_decl_line   : 98
+    <261>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><264>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <265>   DW_AT_byte_size   : 12
+    <266>   DW_AT_decl_file   : 1
+    <267>   DW_AT_decl_line   : 94
+ <4><268>: Abbrev Number: 5 (DW_TAG_member)
+    <269>   DW_AT_name        : (indirect string, offset: 0x2ec): _call_addr
+    <26d>   DW_AT_type        : <0x31c>
+    <271>   DW_AT_decl_file   : 1
+    <272>   DW_AT_decl_line   : 95
+    <273>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><276>: Abbrev Number: 5 (DW_TAG_member)
+    <277>   DW_AT_name        : (indirect string, offset: 0x2f7): _syscall
+    <27b>   DW_AT_type        : <0x295>
+    <27f>   DW_AT_decl_file   : 1
+    <280>   DW_AT_decl_line   : 96
+    <281>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><284>: Abbrev Number: 5 (DW_TAG_member)
+    <285>   DW_AT_name        : (indirect string, offset: 0x300): _arch
+    <289>   DW_AT_type        : <0x2c6>
+    <28d>   DW_AT_decl_file   : 1
+    <28e>   DW_AT_decl_line   : 97
+    <28f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><292>: Abbrev Number: 0
+ <3><293>: Abbrev Number: 0
+ <2><294>: Abbrev Number: 0
+ <1><295>: Abbrev Number: 9 (DW_TAG_base_type)
+    <296>   DW_AT_name        : (indirect string, offset: 0x172): int
+    <29a>   DW_AT_encoding    : 5	(signed)
+    <29b>   DW_AT_byte_size   : 4
+ <1><29c>: Abbrev Number: 10 (DW_TAG_array_type)
+    <29d>   DW_AT_type        : <0x295>
+ <2><2a1>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <2a2>   DW_AT_type        : <0x2a9>
+    <2a6>   DW_AT_lower_bound : 0
+    <2a7>   DW_AT_count       : 28
+ <2><2a8>: Abbrev Number: 0
+ <1><2a9>: Abbrev Number: 12 (DW_TAG_base_type)
+    <2aa>   DW_AT_name        : (indirect string, offset: 0x196): sizetype
+    <2ae>   DW_AT_byte_size   : 8
+    <2af>   DW_AT_encoding    : 7	(unsigned)
+ <1><2b0>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2b1>   DW_AT_type        : <0x295>
+    <2b5>   DW_AT_name        : (indirect string, offset: 0x1aa): __kernel_pid_t
+    <2b9>   DW_AT_decl_file   : 2
+    <2ba>   DW_AT_decl_line   : 33
+ <1><2bb>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2bc>   DW_AT_type        : <0x2c6>
+    <2c0>   DW_AT_name        : (indirect string, offset: 0x1cb): __kernel_uid32_t
+    <2c4>   DW_AT_decl_file   : 2
+    <2c5>   DW_AT_decl_line   : 49
+ <1><2c6>: Abbrev Number: 9 (DW_TAG_base_type)
+    <2c7>   DW_AT_name        : (indirect string, offset: 0x1be): unsigned int
+    <2cb>   DW_AT_encoding    : 7	(unsigned)
+    <2cc>   DW_AT_byte_size   : 4
+ <1><2cd>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2ce>   DW_AT_type        : <0x295>
+    <2d2>   DW_AT_name        : (indirect string, offset: 0x1e8): __kernel_timer_t
+    <2d6>   DW_AT_decl_file   : 2
+    <2d7>   DW_AT_decl_line   : 79
+ <1><2d8>: Abbrev Number: 10 (DW_TAG_array_type)
+    <2d9>   DW_AT_type        : <0x2e5>
+ <2><2dd>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <2de>   DW_AT_type        : <0x2a9>
+    <2e2>   DW_AT_lower_bound : 0
+    <2e3>   DW_AT_count       : 0
+ <2><2e4>: Abbrev Number: 0
+ <1><2e5>: Abbrev Number: 9 (DW_TAG_base_type)
+    <2e6>   DW_AT_name        : (indirect string, offset: 0x202): char
+    <2ea>   DW_AT_encoding    : 8	(unsigned char)
+    <2eb>   DW_AT_byte_size   : 1
+ <1><2ec>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2ed>   DW_AT_type        : <0x2f7>
+    <2f1>   DW_AT_name        : (indirect string, offset: 0x22a): sigval_t
+    <2f5>   DW_AT_decl_file   : 1
+    <2f6>   DW_AT_decl_line   : 26
+ <1><2f7>: Abbrev Number: 13 (DW_TAG_union_type)
+    <2f8>   DW_AT_name        : (indirect string, offset: 0x223): sigval
+    <2fc>   DW_AT_byte_size   : 4
+    <2fd>   DW_AT_decl_file   : 1
+    <2fe>   DW_AT_decl_line   : 23
+ <2><2ff>: Abbrev Number: 5 (DW_TAG_member)
+    <300>   DW_AT_name        : (indirect string, offset: 0x20f): sival_int
+    <304>   DW_AT_type        : <0x295>
+    <308>   DW_AT_decl_file   : 1
+    <309>   DW_AT_decl_line   : 24
+    <30a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><30d>: Abbrev Number: 5 (DW_TAG_member)
+    <30e>   DW_AT_name        : (indirect string, offset: 0x219): sival_ptr
+    <312>   DW_AT_type        : <0x31c>
+    <316>   DW_AT_decl_file   : 1
+    <317>   DW_AT_decl_line   : 25
+    <318>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><31b>: Abbrev Number: 0
+ <1><31c>: Abbrev Number: 14 (DW_TAG_pointer_type)
+ <1><31d>: Abbrev Number: 3 (DW_TAG_typedef)
+    <31e>   DW_AT_type        : <0x328>
+    <322>   DW_AT_name        : (indirect string, offset: 0x275): __kernel_clock_t
+    <326>   DW_AT_decl_file   : 2
+    <327>   DW_AT_decl_line   : 78
+ <1><328>: Abbrev Number: 3 (DW_TAG_typedef)
+    <329>   DW_AT_type        : <0x333>
+    <32d>   DW_AT_name        : (indirect string, offset: 0x265): __kernel_long_t
+    <331>   DW_AT_decl_file   : 2
+    <332>   DW_AT_decl_line   : 23
+ <1><333>: Abbrev Number: 9 (DW_TAG_base_type)
+    <334>   DW_AT_name        : (indirect string, offset: 0x25c): long int
+    <338>   DW_AT_encoding    : 5	(signed)
+    <339>   DW_AT_byte_size   : 4
+ <1><33a>: Abbrev Number: 9 (DW_TAG_base_type)
+    <33b>   DW_AT_name        : (indirect string, offset: 0x2a7): short
+    <33f>   DW_AT_encoding    : 5	(signed)
+    <340>   DW_AT_byte_size   : 2
+ <1><341>: Abbrev Number: 3 (DW_TAG_typedef)
+    <342>   DW_AT_type        : <0x2c6>
+    <346>   DW_AT_name        : (indirect string, offset: 0x2cb): __u32
+    <34a>   DW_AT_decl_file   : 3
+    <34b>   DW_AT_decl_line   : 28
+ <1><34c>: Abbrev Number: 0
 
diff --git a/mpers-m32/siginfo_t.d2 b/mpers-m32/siginfo_t.d2
index f1b6d09..4bf66db 100644
--- a/mpers-m32/siginfo_t.d2
+++ b/mpers-m32/siginfo_t.d2
@@ -1,452 +1,452 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 42
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x244): siginfo_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x30e): siginfo_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 100
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x23c): siginfo
+DW_AT_name        : (indirect string, offset: 0x306): siginfo
 DW_AT_byte_size   : 124
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 47
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x9f): si_signo
-DW_AT_type        : <0x294>
+DW_AT_name        : (indirect string, offset: 0x169): si_signo
+DW_AT_type        : <0x295>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 48
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xac): si_errno
-DW_AT_type        : <0x294>
+DW_AT_name        : (indirect string, offset: 0x176): si_errno
+DW_AT_type        : <0x295>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 49
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb5): si_code
-DW_AT_type        : <0x294>
+DW_AT_name        : (indirect string, offset: 0x17f): si_code
+DW_AT_type        : <0x295>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 50
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xbd): _sifields
-DW_AT_type        : <0x7b>
+DW_AT_name        : (indirect string, offset: 0x187): _sifields
+DW_AT_type        : <0x7c>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 99
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><7b>
+<2><7c>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 112
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 51
-<3><7f>
+<3><80>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc7): _pad
-DW_AT_type        : <0x29b>
+DW_AT_name        : (indirect string, offset: 0x191): _pad
+DW_AT_type        : <0x29c>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 52
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><8d>
+<3><8e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd5): _kill
-DW_AT_type        : <0x9b>
+DW_AT_name        : (indirect string, offset: 0x19f): _kill
+DW_AT_type        : <0x9c>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 56
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><9b>
+<3><9c>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 53
-<4><9f>
+<4><a0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdb): _pid
-DW_AT_type        : <0x2af>
+DW_AT_name        : (indirect string, offset: 0x1a5): _pid
+DW_AT_type        : <0x2b0>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 54
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><ad>
+<4><ae>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xef): _uid
-DW_AT_type        : <0x2ba>
+DW_AT_name        : (indirect string, offset: 0x1b9): _uid
+DW_AT_type        : <0x2bb>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 55
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<3><bc>
+<3><bd>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x112): _timer
-DW_AT_type        : <0xca>
+DW_AT_name        : (indirect string, offset: 0x1dc): _timer
+DW_AT_type        : <0xcb>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 63
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><ca>
+<3><cb>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 57
-<4><ce>
+<4><cf>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x119): _tid
-DW_AT_type        : <0x2cc>
+DW_AT_name        : (indirect string, offset: 0x1e3): _tid
+DW_AT_type        : <0x2cd>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 58
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><dc>
+<4><dd>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12f): _overrun
-DW_AT_type        : <0x294>
+DW_AT_name        : (indirect string, offset: 0x1f9): _overrun
+DW_AT_type        : <0x295>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 59
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><ea>
+<4><eb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc7): _pad
-DW_AT_type        : <0x2d7>
+DW_AT_name        : (indirect string, offset: 0x191): _pad
+DW_AT_type        : <0x2d8>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 60
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<4><f8>
+<4><f9>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13d): _sigval
-DW_AT_type        : <0x2eb>
+DW_AT_name        : (indirect string, offset: 0x207): _sigval
+DW_AT_type        : <0x2ec>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 61
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<4><106>
+<4><107>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x169): _sys_private
-DW_AT_type        : <0x294>
+DW_AT_name        : (indirect string, offset: 0x233): _sys_private
+DW_AT_type        : <0x295>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 62
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<3><115>
+<3><116>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x176): _rt
-DW_AT_type        : <0x123>
+DW_AT_name        : (indirect string, offset: 0x240): _rt
+DW_AT_type        : <0x124>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 68
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><123>
+<3><124>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 64
-<4><127>
+<4><128>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdb): _pid
-DW_AT_type        : <0x2af>
+DW_AT_name        : (indirect string, offset: 0x1a5): _pid
+DW_AT_type        : <0x2b0>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 65
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><135>
+<4><136>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xef): _uid
-DW_AT_type        : <0x2ba>
+DW_AT_name        : (indirect string, offset: 0x1b9): _uid
+DW_AT_type        : <0x2bb>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 66
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><143>
+<4><144>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13d): _sigval
-DW_AT_type        : <0x2eb>
+DW_AT_name        : (indirect string, offset: 0x207): _sigval
+DW_AT_type        : <0x2ec>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 67
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<3><152>
+<3><153>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17a): _sigchld
-DW_AT_type        : <0x160>
+DW_AT_name        : (indirect string, offset: 0x244): _sigchld
+DW_AT_type        : <0x161>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 75
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><160>
+<3><161>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 20
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 69
-<4><164>
+<4><165>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdb): _pid
-DW_AT_type        : <0x2af>
+DW_AT_name        : (indirect string, offset: 0x1a5): _pid
+DW_AT_type        : <0x2b0>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 70
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><172>
+<4><173>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xef): _uid
-DW_AT_type        : <0x2ba>
+DW_AT_name        : (indirect string, offset: 0x1b9): _uid
+DW_AT_type        : <0x2bb>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 71
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><180>
+<4><181>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x183): _status
-DW_AT_type        : <0x294>
+DW_AT_name        : (indirect string, offset: 0x24d): _status
+DW_AT_type        : <0x295>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 72
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<4><18e>
+<4><18f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x18b): _utime
-DW_AT_type        : <0x31c>
+DW_AT_name        : (indirect string, offset: 0x255): _utime
+DW_AT_type        : <0x31d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 73
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<4><19c>
+<4><19d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1bc): _stime
-DW_AT_type        : <0x31c>
+DW_AT_name        : (indirect string, offset: 0x286): _stime
+DW_AT_type        : <0x31d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 74
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<3><1ab>
+<3><1ac>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1c3): _sigfault
-DW_AT_type        : <0x1b9>
+DW_AT_name        : (indirect string, offset: 0x28d): _sigfault
+DW_AT_type        : <0x1ba>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 89
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><1b9>
+<3><1ba>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 76
-<4><1bd>
+<4><1be>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1cd): _addr
-DW_AT_type        : <0x31b>
+DW_AT_name        : (indirect string, offset: 0x297): _addr
+DW_AT_type        : <0x31c>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 77
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><1cb>
+<4><1cc>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d3): _addr_lsb
-DW_AT_type        : <0x339>
+DW_AT_name        : (indirect string, offset: 0x29d): _addr_lsb
+DW_AT_type        : <0x33a>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 81
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><1d9>
+<4><1da>
 Abbrev Number: 8 (DW_TAG_member)
-DW_AT_type        : <0x1e3>
+DW_AT_type        : <0x1e4>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 82
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<4><1e3>
+<4><1e4>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 82
-<5><1e7>
+<5><1e8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1e3): _addr_bnd
-DW_AT_type        : <0x1f5>
+DW_AT_name        : (indirect string, offset: 0x2ad): _addr_bnd
+DW_AT_type        : <0x1f6>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 86
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<5><1f5>
+<5><1f6>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 83
-<6><1f9>
+<6><1fa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1ed): _lower
-DW_AT_type        : <0x31b>
+DW_AT_name        : (indirect string, offset: 0x2b7): _lower
+DW_AT_type        : <0x31c>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 84
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<6><207>
+<6><208>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f4): _upper
-DW_AT_type        : <0x31b>
+DW_AT_name        : (indirect string, offset: 0x2be): _upper
+DW_AT_type        : <0x31c>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 85
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<5><216>
+<5><217>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1fb): _pkey
-DW_AT_type        : <0x340>
+DW_AT_name        : (indirect string, offset: 0x2c5): _pkey
+DW_AT_type        : <0x341>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 87
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><226>
+<3><227>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x207): _sigpoll
-DW_AT_type        : <0x234>
+DW_AT_name        : (indirect string, offset: 0x2d1): _sigpoll
+DW_AT_type        : <0x235>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 93
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><234>
+<3><235>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 90
-<4><238>
+<4><239>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x210): _band
-DW_AT_type        : <0x332>
+DW_AT_name        : (indirect string, offset: 0x2da): _band
+DW_AT_type        : <0x333>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 91
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><246>
+<4><247>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x216): _fd
-DW_AT_type        : <0x294>
+DW_AT_name        : (indirect string, offset: 0x2e0): _fd
+DW_AT_type        : <0x295>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 92
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<3><255>
+<3><256>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x21a): _sigsys
-DW_AT_type        : <0x263>
+DW_AT_name        : (indirect string, offset: 0x2e4): _sigsys
+DW_AT_type        : <0x264>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 98
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><263>
+<3><264>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 94
-<4><267>
+<4><268>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x222): _call_addr
-DW_AT_type        : <0x31b>
+DW_AT_name        : (indirect string, offset: 0x2ec): _call_addr
+DW_AT_type        : <0x31c>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 95
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><275>
+<4><276>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x22d): _syscall
-DW_AT_type        : <0x294>
+DW_AT_name        : (indirect string, offset: 0x2f7): _syscall
+DW_AT_type        : <0x295>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 96
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><283>
+<4><284>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x236): _arch
-DW_AT_type        : <0x2c5>
+DW_AT_name        : (indirect string, offset: 0x300): _arch
+DW_AT_type        : <0x2c6>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 97
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><294>
+<1><295>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa8): int
+DW_AT_name        : (indirect string, offset: 0x172): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><29b>
+<1><29c>
 Abbrev Number: 10 (DW_TAG_array_type)
-DW_AT_type        : <0x294>
-<2><2a0>
+DW_AT_type        : <0x295>
+<2><2a1>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2a8>
+DW_AT_type        : <0x2a9>
 DW_AT_lower_bound : 0
 DW_AT_count       : 28
-<1><2a8>
+<1><2a9>
 Abbrev Number: 12 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xcc): sizetype
+DW_AT_name        : (indirect string, offset: 0x196): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><2af>
+<1><2b0>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x294>
-DW_AT_name        : (indirect string, offset: 0xe0): __kernel_pid_t
+DW_AT_type        : <0x295>
+DW_AT_name        : (indirect string, offset: 0x1aa): __kernel_pid_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 33
-<1><2ba>
+<1><2bb>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2c5>
-DW_AT_name        : (indirect string, offset: 0x101): __kernel_uid32_t
+DW_AT_type        : <0x2c6>
+DW_AT_name        : (indirect string, offset: 0x1cb): __kernel_uid32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 49
-<1><2c5>
+<1><2c6>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xf4): unsigned int
+DW_AT_name        : (indirect string, offset: 0x1be): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><2cc>
+<1><2cd>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x294>
-DW_AT_name        : (indirect string, offset: 0x11e): __kernel_timer_t
+DW_AT_type        : <0x295>
+DW_AT_name        : (indirect string, offset: 0x1e8): __kernel_timer_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 79
-<1><2d7>
+<1><2d8>
 Abbrev Number: 10 (DW_TAG_array_type)
-DW_AT_type        : <0x2e4>
-<2><2dc>
+DW_AT_type        : <0x2e5>
+<2><2dd>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2a8>
+DW_AT_type        : <0x2a9>
 DW_AT_lower_bound : 0
 DW_AT_count       : 0
-<1><2e4>
+<1><2e5>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x138): char
+DW_AT_name        : (indirect string, offset: 0x202): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><2eb>
+<1><2ec>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2f6>
-DW_AT_name        : (indirect string, offset: 0x160): sigval_t
+DW_AT_type        : <0x2f7>
+DW_AT_name        : (indirect string, offset: 0x22a): sigval_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
-<1><2f6>
+<1><2f7>
 Abbrev Number: 13 (DW_TAG_union_type)
-DW_AT_name        : (indirect string, offset: 0x159): sigval
+DW_AT_name        : (indirect string, offset: 0x223): sigval
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<2><2fe>
+<2><2ff>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x145): sival_int
-DW_AT_type        : <0x294>
+DW_AT_name        : (indirect string, offset: 0x20f): sival_int
+DW_AT_type        : <0x295>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><30c>
+<2><30d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14f): sival_ptr
-DW_AT_type        : <0x31b>
+DW_AT_name        : (indirect string, offset: 0x219): sival_ptr
+DW_AT_type        : <0x31c>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><31b>
-Abbrev Number: 14 (DW_TAG_pointer_type)
 <1><31c>
+Abbrev Number: 14 (DW_TAG_pointer_type)
+<1><31d>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x327>
-DW_AT_name        : (indirect string, offset: 0x1ab): __kernel_clock_t
+DW_AT_type        : <0x328>
+DW_AT_name        : (indirect string, offset: 0x275): __kernel_clock_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 78
-<1><327>
+<1><328>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x332>
-DW_AT_name        : (indirect string, offset: 0x19b): __kernel_long_t
+DW_AT_type        : <0x333>
+DW_AT_name        : (indirect string, offset: 0x265): __kernel_long_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 23
-<1><332>
+<1><333>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x192): long int
+DW_AT_name        : (indirect string, offset: 0x25c): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><339>
+<1><33a>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1dd): short
+DW_AT_name        : (indirect string, offset: 0x2a7): short
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 2
-<1><340>
+<1><341>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2c5>
-DW_AT_name        : (indirect string, offset: 0x201): __u32
+DW_AT_type        : <0x2c6>
+DW_AT_name        : (indirect string, offset: 0x2cb): __u32
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 28
diff --git a/mpers-m32/stack_t.d1 b/mpers-m32/stack_t.d1
index 685aa00..e1fba23 100644
--- a/mpers-m32/stack_t.d1
+++ b/mpers-m32/stack_t.d1
@@ -1,65 +1,66 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x85 (32-bit)
+   Length:        0x86 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/stack_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/stack_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x51): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8c): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 39
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xd8): stack_t
-    <39>   DW_AT_decl_file   : 1
-    <3a>   DW_AT_decl_line   : 97
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xcc): sigaltstack
-    <40>   DW_AT_byte_size   : 12
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 93
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0x9d): ss_sp
-    <48>   DW_AT_type        : <0x6e>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 94
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xa3): ss_flags
-    <56>   DW_AT_type        : <0x6f>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 95
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xb0): ss_size
-    <64>   DW_AT_type        : <0x76>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 96
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 0
- <1><6e>: Abbrev Number: 6 (DW_TAG_pointer_type)
- <1><6f>: Abbrev Number: 7 (DW_TAG_base_type)
-    <70>   DW_AT_name        : (indirect string, offset: 0xac): int
-    <74>   DW_AT_encoding    : 5	(signed)
-    <75>   DW_AT_byte_size   : 4
- <1><76>: Abbrev Number: 3 (DW_TAG_typedef)
-    <77>   DW_AT_type        : <0x81>
-    <7b>   DW_AT_name        : (indirect string, offset: 0xc5): size_t
-    <7f>   DW_AT_decl_file   : 2
-    <80>   DW_AT_decl_line   : 62
- <1><81>: Abbrev Number: 7 (DW_TAG_base_type)
-    <82>   DW_AT_name        : (indirect string, offset: 0xb8): unsigned int
-    <86>   DW_AT_encoding    : 7	(unsigned)
-    <87>   DW_AT_byte_size   : 4
- <1><88>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11b): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x156): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 39
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1a2): stack_t
+    <3a>   DW_AT_decl_file   : 1
+    <3b>   DW_AT_decl_line   : 97
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x196): sigaltstack
+    <41>   DW_AT_byte_size   : 12
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 93
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x167): ss_sp
+    <49>   DW_AT_type        : <0x6f>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 94
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x16d): ss_flags
+    <57>   DW_AT_type        : <0x70>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 95
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x17a): ss_size
+    <65>   DW_AT_type        : <0x77>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 96
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 0
+ <1><6f>: Abbrev Number: 6 (DW_TAG_pointer_type)
+ <1><70>: Abbrev Number: 7 (DW_TAG_base_type)
+    <71>   DW_AT_name        : (indirect string, offset: 0x176): int
+    <75>   DW_AT_encoding    : 5	(signed)
+    <76>   DW_AT_byte_size   : 4
+ <1><77>: Abbrev Number: 3 (DW_TAG_typedef)
+    <78>   DW_AT_type        : <0x82>
+    <7c>   DW_AT_name        : (indirect string, offset: 0x18f): size_t
+    <80>   DW_AT_decl_file   : 2
+    <81>   DW_AT_decl_line   : 62
+ <1><82>: Abbrev Number: 7 (DW_TAG_base_type)
+    <83>   DW_AT_name        : (indirect string, offset: 0x182): unsigned int
+    <87>   DW_AT_encoding    : 7	(unsigned)
+    <88>   DW_AT_byte_size   : 4
+ <1><89>: Abbrev Number: 0
 
diff --git a/mpers-m32/stack_t.d2 b/mpers-m32/stack_t.d2
index 0890371..d9598d3 100644
--- a/mpers-m32/stack_t.d2
+++ b/mpers-m32/stack_t.d2
@@ -1,59 +1,59 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8c): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x156): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 39
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xd8): stack_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1a2): stack_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 97
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xcc): sigaltstack
+DW_AT_name        : (indirect string, offset: 0x196): sigaltstack
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 93
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x9d): ss_sp
-DW_AT_type        : <0x6e>
+DW_AT_name        : (indirect string, offset: 0x167): ss_sp
+DW_AT_type        : <0x6f>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 94
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa3): ss_flags
-DW_AT_type        : <0x6f>
+DW_AT_name        : (indirect string, offset: 0x16d): ss_flags
+DW_AT_type        : <0x70>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 95
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb0): ss_size
-DW_AT_type        : <0x76>
+DW_AT_name        : (indirect string, offset: 0x17a): ss_size
+DW_AT_type        : <0x77>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 96
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><6e>
-Abbrev Number: 6 (DW_TAG_pointer_type)
 <1><6f>
+Abbrev Number: 6 (DW_TAG_pointer_type)
+<1><70>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xac): int
+DW_AT_name        : (indirect string, offset: 0x176): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><76>
+<1><77>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x81>
-DW_AT_name        : (indirect string, offset: 0xc5): size_t
+DW_AT_type        : <0x82>
+DW_AT_name        : (indirect string, offset: 0x18f): size_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 62
-<1><81>
+<1><82>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb8): unsigned int
+DW_AT_name        : (indirect string, offset: 0x182): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/strace_aio_sigset.c b/mpers-m32/strace_aio_sigset.c
new file mode 100644
index 0000000..6537f4c
--- /dev/null
+++ b/mpers-m32/strace_aio_sigset.c
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR 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 {
+	sigset_t *sigmask;
+	size_t sigsetsize;
+} strace_aio_sigset;
+
+strace_aio_sigset mpers_target_var;
diff --git a/mpers-m32/strace_aio_sigset.d1 b/mpers-m32/strace_aio_sigset.d1
new file mode 100644
index 0000000..d4d229f
--- /dev/null
+++ b/mpers-m32/strace_aio_sigset.d1
@@ -0,0 +1,87 @@
+Contents of the .debug_info section:
+
+  Compilation Unit @ offset 0x0:
+   Length:        0xaa (32-bit)
+   Version:       2
+   Abbrev Offset: 0x0
+   Pointer Size:  4
+ <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
+    <10>   DW_AT_language    : 12	(ANSI C99)
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/strace_aio_sigset.c
+    <16>   DW_AT_stmt_list   : 0x0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x125): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x160): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 2
+    <2a>   DW_AT_decl_line   : 36
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1c0): strace_aio_sigset
+    <3a>   DW_AT_decl_file   : 2
+    <3b>   DW_AT_decl_line   : 34
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_byte_size   : 8
+    <3e>   DW_AT_decl_file   : 2
+    <3f>   DW_AT_decl_line   : 31
+ <2><40>: Abbrev Number: 5 (DW_TAG_member)
+    <41>   DW_AT_name        : (indirect string, offset: 0x171): sigmask
+    <45>   DW_AT_type        : <0x5d>
+    <49>   DW_AT_decl_file   : 2
+    <4a>   DW_AT_decl_line   : 32
+    <4b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><4e>: Abbrev Number: 5 (DW_TAG_member)
+    <4f>   DW_AT_name        : (indirect string, offset: 0x1a1): sigsetsize
+    <53>   DW_AT_type        : <0x9b>
+    <57>   DW_AT_decl_file   : 2
+    <58>   DW_AT_decl_line   : 33
+    <59>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><5c>: Abbrev Number: 0
+ <1><5d>: Abbrev Number: 6 (DW_TAG_pointer_type)
+    <5e>   DW_AT_type        : <0x62>
+ <1><62>: Abbrev Number: 3 (DW_TAG_typedef)
+    <63>   DW_AT_type        : <0x6d>
+    <67>   DW_AT_name        : (indirect string, offset: 0x198): sigset_t
+    <6b>   DW_AT_decl_file   : 1
+    <6c>   DW_AT_decl_line   : 79
+ <1><6d>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <6e>   DW_AT_byte_size   : 4
+    <6f>   DW_AT_decl_file   : 1
+    <70>   DW_AT_decl_line   : 77
+ <2><71>: Abbrev Number: 5 (DW_TAG_member)
+    <72>   DW_AT_name        : (indirect string, offset: 0x179): sig
+    <76>   DW_AT_type        : <0x80>
+    <7a>   DW_AT_decl_file   : 1
+    <7b>   DW_AT_decl_line   : 78
+    <7c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><7f>: Abbrev Number: 0
+ <1><80>: Abbrev Number: 7 (DW_TAG_array_type)
+    <81>   DW_AT_type        : <0x8d>
+ <2><85>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <86>   DW_AT_type        : <0x94>
+    <8a>   DW_AT_lower_bound : 0
+    <8b>   DW_AT_count       : 1
+ <2><8c>: Abbrev Number: 0
+ <1><8d>: Abbrev Number: 9 (DW_TAG_base_type)
+    <8e>   DW_AT_name        : (indirect string, offset: 0x17d): long unsigned int
+    <92>   DW_AT_encoding    : 7	(unsigned)
+    <93>   DW_AT_byte_size   : 4
+ <1><94>: Abbrev Number: 10 (DW_TAG_base_type)
+    <95>   DW_AT_name        : (indirect string, offset: 0x18f): sizetype
+    <99>   DW_AT_byte_size   : 8
+    <9a>   DW_AT_encoding    : 7	(unsigned)
+ <1><9b>: Abbrev Number: 3 (DW_TAG_typedef)
+    <9c>   DW_AT_type        : <0xa6>
+    <a0>   DW_AT_name        : (indirect string, offset: 0x1b9): size_t
+    <a4>   DW_AT_decl_file   : 3
+    <a5>   DW_AT_decl_line   : 62
+ <1><a6>: Abbrev Number: 9 (DW_TAG_base_type)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1ac): unsigned int
+    <ab>   DW_AT_encoding    : 7	(unsigned)
+    <ac>   DW_AT_byte_size   : 4
+ <1><ad>: Abbrev Number: 0
+
diff --git a/mpers-m32/strace_aio_sigset.d2 b/mpers-m32/strace_aio_sigset.d2
new file mode 100644
index 0000000..96e7f58
--- /dev/null
+++ b/mpers-m32/strace_aio_sigset.d2
@@ -0,0 +1,83 @@
+<1><1f>
+Abbrev Number: 2 (DW_TAG_variable)
+DW_AT_name        : (indirect string, offset: 0x160): mpers_target_var
+DW_AT_type        : <0x31>
+DW_AT_external    : 1
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 36
+DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+<1><31>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1c0): strace_aio_sigset
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 34
+<1><3c>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_byte_size   : 8
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 31
+<2><40>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x171): sigmask
+DW_AT_type        : <0x5d>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 32
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><4e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1a1): sigsetsize
+DW_AT_type        : <0x9b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 33
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<1><5d>
+Abbrev Number: 6 (DW_TAG_pointer_type)
+DW_AT_type        : <0x62>
+<1><62>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0x6d>
+DW_AT_name        : (indirect string, offset: 0x198): sigset_t
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 79
+<1><6d>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_byte_size   : 4
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 77
+<2><71>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x179): sig
+DW_AT_type        : <0x80>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 78
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><80>
+Abbrev Number: 7 (DW_TAG_array_type)
+DW_AT_type        : <0x8d>
+<2><85>
+Abbrev Number: 8 (DW_TAG_subrange_type)
+DW_AT_type        : <0x94>
+DW_AT_lower_bound : 0
+DW_AT_count       : 1
+<1><8d>
+Abbrev Number: 9 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x17d): long unsigned int
+DW_AT_encoding    : 7	(unsigned)
+DW_AT_byte_size   : 4
+<1><94>
+Abbrev Number: 10 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x18f): sizetype
+DW_AT_byte_size   : 8
+DW_AT_encoding    : 7	(unsigned)
+<1><9b>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x1b9): size_t
+DW_AT_decl_file   : 3
+DW_AT_decl_line   : 62
+<1><a6>
+Abbrev Number: 9 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x1ac): unsigned int
+DW_AT_encoding    : 7	(unsigned)
+DW_AT_byte_size   : 4
diff --git a/mpers-m32/strace_aio_sigset.h b/mpers-m32/strace_aio_sigset.h
new file mode 100644
index 0000000..30c1f1e
--- /dev/null
+++ b/mpers-m32/strace_aio_sigset.h
@@ -0,0 +1,11 @@
+#include <stdint.h>
+#ifndef mpers_ptr_t_is_uint32_t
+typedef uint32_t mpers_ptr_t;
+#define mpers_ptr_t_is_uint32_t
+#endif
+typedef
+struct {
+mpers_ptr_t sigmask;
+uint32_t sigsetsize;
+} ATTRIBUTE_PACKED m32_strace_aio_sigset;
+#define MPERS_m32_strace_aio_sigset m32_strace_aio_sigset
diff --git a/mpers-m32/struct_blk_user_trace_setup.d1 b/mpers-m32/struct_blk_user_trace_setup.d1
index 2612d98..2da14e2 100644
--- a/mpers-m32/struct_blk_user_trace_setup.d1
+++ b/mpers-m32/struct_blk_user_trace_setup.d1
@@ -1,132 +1,133 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x115 (32-bit)
+   Length:        0x116 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_blk_user_trace_setup.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_blk_user_trace_setup.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x65): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0xa0): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 1
-    <29>   DW_AT_decl_line   : 65
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x177): struct_blk_user_trace_setup
-    <39>   DW_AT_decl_file   : 1
-    <3a>   DW_AT_decl_line   : 63
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x162): blk_user_trace_setup
-    <40>   DW_AT_byte_size   : 72
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 55
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xb1): name
-    <48>   DW_AT_type        : <0xa6>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 56
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xc4): act_mask
-    <56>   DW_AT_type        : <0xc1>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 57
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xf0): buf_size
-    <64>   DW_AT_type        : <0xde>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 58
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0x11a): buf_nr
-    <72>   DW_AT_type        : <0xde>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 59
-    <78>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0x121): start_lba
-    <80>   DW_AT_type        : <0xfb>
-    <84>   DW_AT_decl_file   : 1
-    <85>   DW_AT_decl_line   : 60
-    <86>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x156): end_lba
-    <8e>   DW_AT_type        : <0xfb>
-    <92>   DW_AT_decl_file   : 1
-    <93>   DW_AT_decl_line   : 61
-    <94>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0x15e): pid
-    <9c>   DW_AT_type        : <0xde>
-    <a0>   DW_AT_decl_file   : 1
-    <a1>   DW_AT_decl_line   : 62
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><a5>: Abbrev Number: 0
- <1><a6>: Abbrev Number: 6 (DW_TAG_array_type)
-    <a7>   DW_AT_type        : <0xb3>
- <2><ab>: Abbrev Number: 7 (DW_TAG_subrange_type)
-    <ac>   DW_AT_type        : <0xba>
-    <b0>   DW_AT_lower_bound : 0
-    <b1>   DW_AT_count       : 32
- <2><b2>: Abbrev Number: 0
- <1><b3>: Abbrev Number: 8 (DW_TAG_base_type)
-    <b4>   DW_AT_name        : (indirect string, offset: 0xb6): char
-    <b8>   DW_AT_encoding    : 8	(unsigned char)
-    <b9>   DW_AT_byte_size   : 1
- <1><ba>: Abbrev Number: 9 (DW_TAG_base_type)
-    <bb>   DW_AT_name        : (indirect string, offset: 0xbb): sizetype
-    <bf>   DW_AT_byte_size   : 8
-    <c0>   DW_AT_encoding    : 7	(unsigned)
- <1><c1>: Abbrev Number: 3 (DW_TAG_typedef)
-    <c2>   DW_AT_type        : <0xcc>
-    <c6>   DW_AT_name        : (indirect string, offset: 0xe7): uint16_t
-    <ca>   DW_AT_decl_file   : 2
-    <cb>   DW_AT_decl_line   : 62
- <1><cc>: Abbrev Number: 3 (DW_TAG_typedef)
-    <cd>   DW_AT_type        : <0xd7>
-    <d1>   DW_AT_name        : (indirect string, offset: 0xdc): __uint16_t
-    <d5>   DW_AT_decl_file   : 2
-    <d6>   DW_AT_decl_line   : 39
- <1><d7>: Abbrev Number: 8 (DW_TAG_base_type)
-    <d8>   DW_AT_name        : (indirect string, offset: 0xcd): unsigned short
-    <dc>   DW_AT_encoding    : 7	(unsigned)
-    <dd>   DW_AT_byte_size   : 2
- <1><de>: Abbrev Number: 3 (DW_TAG_typedef)
-    <df>   DW_AT_type        : <0xe9>
-    <e3>   DW_AT_name        : (indirect string, offset: 0x111): uint32_t
-    <e7>   DW_AT_decl_file   : 2
-    <e8>   DW_AT_decl_line   : 65
- <1><e9>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ea>   DW_AT_type        : <0xf4>
-    <ee>   DW_AT_name        : (indirect string, offset: 0x106): __uint32_t
-    <f2>   DW_AT_decl_file   : 2
-    <f3>   DW_AT_decl_line   : 41
- <1><f4>: Abbrev Number: 8 (DW_TAG_base_type)
-    <f5>   DW_AT_name        : (indirect string, offset: 0xf9): unsigned int
-    <f9>   DW_AT_encoding    : 7	(unsigned)
-    <fa>   DW_AT_byte_size   : 4
- <1><fb>: Abbrev Number: 3 (DW_TAG_typedef)
-    <fc>   DW_AT_type        : <0x106>
-    <100>   DW_AT_name        : (indirect string, offset: 0x14d): uint64_t
-    <104>   DW_AT_decl_file   : 2
-    <105>   DW_AT_decl_line   : 68
- <1><106>: Abbrev Number: 3 (DW_TAG_typedef)
-    <107>   DW_AT_type        : <0x111>
-    <10b>   DW_AT_name        : (indirect string, offset: 0x142): __uint64_t
-    <10f>   DW_AT_decl_file   : 2
-    <110>   DW_AT_decl_line   : 47
- <1><111>: Abbrev Number: 8 (DW_TAG_base_type)
-    <112>   DW_AT_name        : (indirect string, offset: 0x12b): long long unsigned int
-    <116>   DW_AT_encoding    : 7	(unsigned)
-    <117>   DW_AT_byte_size   : 8
- <1><118>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x12f): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x16a): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 1
+    <2a>   DW_AT_decl_line   : 65
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x241): struct_blk_user_trace_setup
+    <3a>   DW_AT_decl_file   : 1
+    <3b>   DW_AT_decl_line   : 63
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x22c): blk_user_trace_setup
+    <41>   DW_AT_byte_size   : 72
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 55
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x17b): name
+    <49>   DW_AT_type        : <0xa7>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 56
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x18e): act_mask
+    <57>   DW_AT_type        : <0xc2>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 57
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x1ba): buf_size
+    <65>   DW_AT_type        : <0xdf>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 58
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1e4): buf_nr
+    <73>   DW_AT_type        : <0xdf>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 59
+    <79>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1eb): start_lba
+    <81>   DW_AT_type        : <0xfc>
+    <85>   DW_AT_decl_file   : 1
+    <86>   DW_AT_decl_line   : 60
+    <87>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x220): end_lba
+    <8f>   DW_AT_type        : <0xfc>
+    <93>   DW_AT_decl_file   : 1
+    <94>   DW_AT_decl_line   : 61
+    <95>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x228): pid
+    <9d>   DW_AT_type        : <0xdf>
+    <a1>   DW_AT_decl_file   : 1
+    <a2>   DW_AT_decl_line   : 62
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><a6>: Abbrev Number: 0
+ <1><a7>: Abbrev Number: 6 (DW_TAG_array_type)
+    <a8>   DW_AT_type        : <0xb4>
+ <2><ac>: Abbrev Number: 7 (DW_TAG_subrange_type)
+    <ad>   DW_AT_type        : <0xbb>
+    <b1>   DW_AT_lower_bound : 0
+    <b2>   DW_AT_count       : 32
+ <2><b3>: Abbrev Number: 0
+ <1><b4>: Abbrev Number: 8 (DW_TAG_base_type)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x180): char
+    <b9>   DW_AT_encoding    : 8	(unsigned char)
+    <ba>   DW_AT_byte_size   : 1
+ <1><bb>: Abbrev Number: 9 (DW_TAG_base_type)
+    <bc>   DW_AT_name        : (indirect string, offset: 0x185): sizetype
+    <c0>   DW_AT_byte_size   : 8
+    <c1>   DW_AT_encoding    : 7	(unsigned)
+ <1><c2>: Abbrev Number: 3 (DW_TAG_typedef)
+    <c3>   DW_AT_type        : <0xcd>
+    <c7>   DW_AT_name        : (indirect string, offset: 0x1b1): uint16_t
+    <cb>   DW_AT_decl_file   : 2
+    <cc>   DW_AT_decl_line   : 62
+ <1><cd>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ce>   DW_AT_type        : <0xd8>
+    <d2>   DW_AT_name        : (indirect string, offset: 0x1a6): __uint16_t
+    <d6>   DW_AT_decl_file   : 2
+    <d7>   DW_AT_decl_line   : 39
+ <1><d8>: Abbrev Number: 8 (DW_TAG_base_type)
+    <d9>   DW_AT_name        : (indirect string, offset: 0x197): unsigned short
+    <dd>   DW_AT_encoding    : 7	(unsigned)
+    <de>   DW_AT_byte_size   : 2
+ <1><df>: Abbrev Number: 3 (DW_TAG_typedef)
+    <e0>   DW_AT_type        : <0xea>
+    <e4>   DW_AT_name        : (indirect string, offset: 0x1db): uint32_t
+    <e8>   DW_AT_decl_file   : 2
+    <e9>   DW_AT_decl_line   : 65
+ <1><ea>: Abbrev Number: 3 (DW_TAG_typedef)
+    <eb>   DW_AT_type        : <0xf5>
+    <ef>   DW_AT_name        : (indirect string, offset: 0x1d0): __uint32_t
+    <f3>   DW_AT_decl_file   : 2
+    <f4>   DW_AT_decl_line   : 41
+ <1><f5>: Abbrev Number: 8 (DW_TAG_base_type)
+    <f6>   DW_AT_name        : (indirect string, offset: 0x1c3): unsigned int
+    <fa>   DW_AT_encoding    : 7	(unsigned)
+    <fb>   DW_AT_byte_size   : 4
+ <1><fc>: Abbrev Number: 3 (DW_TAG_typedef)
+    <fd>   DW_AT_type        : <0x107>
+    <101>   DW_AT_name        : (indirect string, offset: 0x217): uint64_t
+    <105>   DW_AT_decl_file   : 2
+    <106>   DW_AT_decl_line   : 68
+ <1><107>: Abbrev Number: 3 (DW_TAG_typedef)
+    <108>   DW_AT_type        : <0x112>
+    <10c>   DW_AT_name        : (indirect string, offset: 0x20c): __uint64_t
+    <110>   DW_AT_decl_file   : 2
+    <111>   DW_AT_decl_line   : 47
+ <1><112>: Abbrev Number: 8 (DW_TAG_base_type)
+    <113>   DW_AT_name        : (indirect string, offset: 0x1f5): long long unsigned int
+    <117>   DW_AT_encoding    : 7	(unsigned)
+    <118>   DW_AT_byte_size   : 8
+ <1><119>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_blk_user_trace_setup.d2 b/mpers-m32/struct_blk_user_trace_setup.d2
index 72a56f1..5486514 100644
--- a/mpers-m32/struct_blk_user_trace_setup.d2
+++ b/mpers-m32/struct_blk_user_trace_setup.d2
@@ -1,138 +1,138 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0xa0): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x16a): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 65
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x177): struct_blk_user_trace_setup
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x241): struct_blk_user_trace_setup
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 63
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x162): blk_user_trace_setup
+DW_AT_name        : (indirect string, offset: 0x22c): blk_user_trace_setup
 DW_AT_byte_size   : 72
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 55
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb1): name
-DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x17b): name
+DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 56
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc4): act_mask
-DW_AT_type        : <0xc1>
+DW_AT_name        : (indirect string, offset: 0x18e): act_mask
+DW_AT_type        : <0xc2>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 57
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf0): buf_size
-DW_AT_type        : <0xde>
+DW_AT_name        : (indirect string, offset: 0x1ba): buf_size
+DW_AT_type        : <0xdf>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 58
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11a): buf_nr
-DW_AT_type        : <0xde>
+DW_AT_name        : (indirect string, offset: 0x1e4): buf_nr
+DW_AT_type        : <0xdf>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 59
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x121): start_lba
-DW_AT_type        : <0xfb>
+DW_AT_name        : (indirect string, offset: 0x1eb): start_lba
+DW_AT_type        : <0xfc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 60
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x156): end_lba
-DW_AT_type        : <0xfb>
+DW_AT_name        : (indirect string, offset: 0x220): end_lba
+DW_AT_type        : <0xfc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 61
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15e): pid
-DW_AT_type        : <0xde>
+DW_AT_name        : (indirect string, offset: 0x228): pid
+DW_AT_type        : <0xdf>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 62
 DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<1><a6>
+<1><a7>
 Abbrev Number: 6 (DW_TAG_array_type)
-DW_AT_type        : <0xb3>
-<2><ab>
+DW_AT_type        : <0xb4>
+<2><ac>
 Abbrev Number: 7 (DW_TAG_subrange_type)
-DW_AT_type        : <0xba>
+DW_AT_type        : <0xbb>
 DW_AT_lower_bound : 0
 DW_AT_count       : 32
-<1><b3>
+<1><b4>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb6): char
+DW_AT_name        : (indirect string, offset: 0x180): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><ba>
+<1><bb>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xbb): sizetype
+DW_AT_name        : (indirect string, offset: 0x185): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><c1>
+<1><c2>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xcc>
-DW_AT_name        : (indirect string, offset: 0xe7): uint16_t
+DW_AT_type        : <0xcd>
+DW_AT_name        : (indirect string, offset: 0x1b1): uint16_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 62
-<1><cc>
+<1><cd>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xd7>
-DW_AT_name        : (indirect string, offset: 0xdc): __uint16_t
+DW_AT_type        : <0xd8>
+DW_AT_name        : (indirect string, offset: 0x1a6): __uint16_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 39
-<1><d7>
+<1><d8>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xcd): unsigned short
+DW_AT_name        : (indirect string, offset: 0x197): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><de>
+<1><df>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xe9>
-DW_AT_name        : (indirect string, offset: 0x111): uint32_t
+DW_AT_type        : <0xea>
+DW_AT_name        : (indirect string, offset: 0x1db): uint32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 65
-<1><e9>
+<1><ea>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xf4>
-DW_AT_name        : (indirect string, offset: 0x106): __uint32_t
+DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1d0): __uint32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 41
-<1><f4>
+<1><f5>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xf9): unsigned int
+DW_AT_name        : (indirect string, offset: 0x1c3): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><fb>
+<1><fc>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x106>
-DW_AT_name        : (indirect string, offset: 0x14d): uint64_t
+DW_AT_type        : <0x107>
+DW_AT_name        : (indirect string, offset: 0x217): uint64_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 68
-<1><106>
+<1><107>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x111>
-DW_AT_name        : (indirect string, offset: 0x142): __uint64_t
+DW_AT_type        : <0x112>
+DW_AT_name        : (indirect string, offset: 0x20c): __uint64_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 47
-<1><111>
+<1><112>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x12b): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1f5): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
diff --git a/mpers-m32/struct_blkpg_ioctl_arg.d1 b/mpers-m32/struct_blkpg_ioctl_arg.d1
index 08c96a7..e733c61 100644
--- a/mpers-m32/struct_blkpg_ioctl_arg.d1
+++ b/mpers-m32/struct_blkpg_ioctl_arg.d1
@@ -1,61 +1,62 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x7d (32-bit)
+   Length:        0x7e (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_blkpg_ioctl_arg.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_blkpg_ioctl_arg.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x60): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x9b): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 1
-    <29>   DW_AT_decl_line   : 65
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xc6): struct_blkpg_ioctl_arg
-    <39>   DW_AT_decl_file   : 1
-    <3a>   DW_AT_decl_line   : 41
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_byte_size   : 16
-    <3d>   DW_AT_decl_file   : 1
-    <3e>   DW_AT_decl_line   : 36
- <2><3f>: Abbrev Number: 5 (DW_TAG_member)
-    <40>   DW_AT_name        : (indirect string, offset: 0xac): op
-    <44>   DW_AT_type        : <0x78>
-    <48>   DW_AT_decl_file   : 1
-    <49>   DW_AT_decl_line   : 37
-    <4a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><4d>: Abbrev Number: 5 (DW_TAG_member)
-    <4e>   DW_AT_name        : (indirect string, offset: 0xb3): flags
-    <52>   DW_AT_type        : <0x78>
-    <56>   DW_AT_decl_file   : 1
-    <57>   DW_AT_decl_line   : 38
-    <58>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5b>: Abbrev Number: 5 (DW_TAG_member)
-    <5c>   DW_AT_name        : (indirect string, offset: 0xb9): datalen
-    <60>   DW_AT_type        : <0x78>
-    <64>   DW_AT_decl_file   : 1
-    <65>   DW_AT_decl_line   : 39
-    <66>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><69>: Abbrev Number: 5 (DW_TAG_member)
-    <6a>   DW_AT_name        : (indirect string, offset: 0xc1): data
-    <6e>   DW_AT_type        : <0x7f>
-    <72>   DW_AT_decl_file   : 1
-    <73>   DW_AT_decl_line   : 40
-    <74>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><77>: Abbrev Number: 0
- <1><78>: Abbrev Number: 6 (DW_TAG_base_type)
-    <79>   DW_AT_name        : (indirect string, offset: 0xaf): int
-    <7d>   DW_AT_encoding    : 5	(signed)
-    <7e>   DW_AT_byte_size   : 4
- <1><7f>: Abbrev Number: 7 (DW_TAG_pointer_type)
- <1><80>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x12a): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x165): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 1
+    <2a>   DW_AT_decl_line   : 65
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x190): struct_blkpg_ioctl_arg
+    <3a>   DW_AT_decl_file   : 1
+    <3b>   DW_AT_decl_line   : 41
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_byte_size   : 16
+    <3e>   DW_AT_decl_file   : 1
+    <3f>   DW_AT_decl_line   : 36
+ <2><40>: Abbrev Number: 5 (DW_TAG_member)
+    <41>   DW_AT_name        : (indirect string, offset: 0x176): op
+    <45>   DW_AT_type        : <0x79>
+    <49>   DW_AT_decl_file   : 1
+    <4a>   DW_AT_decl_line   : 37
+    <4b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><4e>: Abbrev Number: 5 (DW_TAG_member)
+    <4f>   DW_AT_name        : (indirect string, offset: 0x17d): flags
+    <53>   DW_AT_type        : <0x79>
+    <57>   DW_AT_decl_file   : 1
+    <58>   DW_AT_decl_line   : 38
+    <59>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><5c>: Abbrev Number: 5 (DW_TAG_member)
+    <5d>   DW_AT_name        : (indirect string, offset: 0x183): datalen
+    <61>   DW_AT_type        : <0x79>
+    <65>   DW_AT_decl_file   : 1
+    <66>   DW_AT_decl_line   : 39
+    <67>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6a>: Abbrev Number: 5 (DW_TAG_member)
+    <6b>   DW_AT_name        : (indirect string, offset: 0x18b): data
+    <6f>   DW_AT_type        : <0x80>
+    <73>   DW_AT_decl_file   : 1
+    <74>   DW_AT_decl_line   : 40
+    <75>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><78>: Abbrev Number: 0
+ <1><79>: Abbrev Number: 6 (DW_TAG_base_type)
+    <7a>   DW_AT_name        : (indirect string, offset: 0x179): int
+    <7e>   DW_AT_encoding    : 5	(signed)
+    <7f>   DW_AT_byte_size   : 4
+ <1><80>: Abbrev Number: 7 (DW_TAG_pointer_type)
+ <1><81>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_blkpg_ioctl_arg.d2 b/mpers-m32/struct_blkpg_ioctl_arg.d2
index 78211cf..8063ebe 100644
--- a/mpers-m32/struct_blkpg_ioctl_arg.d2
+++ b/mpers-m32/struct_blkpg_ioctl_arg.d2
@@ -1,54 +1,54 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x9b): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x165): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 65
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xc6): struct_blkpg_ioctl_arg
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x190): struct_blkpg_ioctl_arg
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 41
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 36
-<2><3f>
+<2><40>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xac): op
-DW_AT_type        : <0x78>
+DW_AT_name        : (indirect string, offset: 0x176): op
+DW_AT_type        : <0x79>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><4d>
+<2><4e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb3): flags
-DW_AT_type        : <0x78>
+DW_AT_name        : (indirect string, offset: 0x17d): flags
+DW_AT_type        : <0x79>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5b>
+<2><5c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb9): datalen
-DW_AT_type        : <0x78>
+DW_AT_name        : (indirect string, offset: 0x183): datalen
+DW_AT_type        : <0x79>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><69>
+<2><6a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc1): data
-DW_AT_type        : <0x7f>
+DW_AT_name        : (indirect string, offset: 0x18b): data
+DW_AT_type        : <0x80>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><78>
+<1><79>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xaf): int
+DW_AT_name        : (indirect string, offset: 0x179): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><7f>
+<1><80>
 Abbrev Number: 7 (DW_TAG_pointer_type)
diff --git a/mpers-m32/struct_blkpg_partition.d1 b/mpers-m32/struct_blkpg_partition.d1
index 7d2243d..65f42f6 100644
--- a/mpers-m32/struct_blkpg_partition.d1
+++ b/mpers-m32/struct_blkpg_partition.d1
@@ -1,95 +1,96 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xc2 (32-bit)
+   Length:        0xc3 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_blkpg_partition.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_blkpg_partition.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x60): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x9b): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 2
-    <29>   DW_AT_decl_line   : 65
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xff): struct_blkpg_partition
-    <39>   DW_AT_decl_file   : 2
-    <3a>   DW_AT_decl_line   : 52
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_byte_size   : 152
-    <3d>   DW_AT_decl_file   : 2
-    <3e>   DW_AT_decl_line   : 45
- <2><3f>: Abbrev Number: 5 (DW_TAG_member)
-    <40>   DW_AT_name        : (indirect string, offset: 0xac): start
-    <44>   DW_AT_type        : <0x86>
-    <48>   DW_AT_decl_file   : 2
-    <49>   DW_AT_decl_line   : 46
-    <4a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><4d>: Abbrev Number: 5 (DW_TAG_member)
-    <4e>   DW_AT_name        : (indirect string, offset: 0xd2): length
-    <52>   DW_AT_type        : <0x86>
-    <56>   DW_AT_decl_file   : 2
-    <57>   DW_AT_decl_line   : 47
-    <58>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><5b>: Abbrev Number: 5 (DW_TAG_member)
-    <5c>   DW_AT_name        : (indirect string, offset: 0xd9): pno
-    <60>   DW_AT_type        : <0xa3>
-    <64>   DW_AT_decl_file   : 2
-    <65>   DW_AT_decl_line   : 48
-    <66>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><69>: Abbrev Number: 5 (DW_TAG_member)
-    <6a>   DW_AT_name        : (indirect string, offset: 0xe1): devname
-    <6e>   DW_AT_type        : <0xaa>
-    <72>   DW_AT_decl_file   : 2
-    <73>   DW_AT_decl_line   : 49
-    <74>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><77>: Abbrev Number: 5 (DW_TAG_member)
-    <78>   DW_AT_name        : (indirect string, offset: 0xf7): volname
-    <7c>   DW_AT_type        : <0xaa>
-    <80>   DW_AT_decl_file   : 2
-    <81>   DW_AT_decl_line   : 51
-    <82>   DW_AT_data_member_location: 2 byte block: 23 54 	(DW_OP_plus_uconst: 84)
- <2><85>: Abbrev Number: 0
- <1><86>: Abbrev Number: 3 (DW_TAG_typedef)
-    <87>   DW_AT_type        : <0x91>
-    <8b>   DW_AT_name        : (indirect string, offset: 0xca): int64_t
-    <8f>   DW_AT_decl_file   : 1
-    <90>   DW_AT_decl_line   : 67
- <1><91>: Abbrev Number: 3 (DW_TAG_typedef)
-    <92>   DW_AT_type        : <0x9c>
-    <96>   DW_AT_name        : (indirect string, offset: 0xc0): __int64_t
-    <9a>   DW_AT_decl_file   : 1
-    <9b>   DW_AT_decl_line   : 46
- <1><9c>: Abbrev Number: 6 (DW_TAG_base_type)
-    <9d>   DW_AT_name        : (indirect string, offset: 0xb2): long long int
-    <a1>   DW_AT_encoding    : 5	(signed)
-    <a2>   DW_AT_byte_size   : 8
- <1><a3>: Abbrev Number: 6 (DW_TAG_base_type)
-    <a4>   DW_AT_name        : (indirect string, offset: 0xdd): int
-    <a8>   DW_AT_encoding    : 5	(signed)
-    <a9>   DW_AT_byte_size   : 4
- <1><aa>: Abbrev Number: 7 (DW_TAG_array_type)
-    <ab>   DW_AT_type        : <0xb7>
- <2><af>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <b0>   DW_AT_type        : <0xbe>
-    <b4>   DW_AT_lower_bound : 0
-    <b5>   DW_AT_count       : 64
- <2><b6>: Abbrev Number: 0
- <1><b7>: Abbrev Number: 6 (DW_TAG_base_type)
-    <b8>   DW_AT_name        : (indirect string, offset: 0xe9): char
-    <bc>   DW_AT_encoding    : 8	(unsigned char)
-    <bd>   DW_AT_byte_size   : 1
- <1><be>: Abbrev Number: 9 (DW_TAG_base_type)
-    <bf>   DW_AT_name        : (indirect string, offset: 0xee): sizetype
-    <c3>   DW_AT_byte_size   : 8
-    <c4>   DW_AT_encoding    : 7	(unsigned)
- <1><c5>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x12a): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x165): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 2
+    <2a>   DW_AT_decl_line   : 65
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1c9): struct_blkpg_partition
+    <3a>   DW_AT_decl_file   : 2
+    <3b>   DW_AT_decl_line   : 52
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_byte_size   : 152
+    <3e>   DW_AT_decl_file   : 2
+    <3f>   DW_AT_decl_line   : 45
+ <2><40>: Abbrev Number: 5 (DW_TAG_member)
+    <41>   DW_AT_name        : (indirect string, offset: 0x176): start
+    <45>   DW_AT_type        : <0x87>
+    <49>   DW_AT_decl_file   : 2
+    <4a>   DW_AT_decl_line   : 46
+    <4b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><4e>: Abbrev Number: 5 (DW_TAG_member)
+    <4f>   DW_AT_name        : (indirect string, offset: 0x19c): length
+    <53>   DW_AT_type        : <0x87>
+    <57>   DW_AT_decl_file   : 2
+    <58>   DW_AT_decl_line   : 47
+    <59>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><5c>: Abbrev Number: 5 (DW_TAG_member)
+    <5d>   DW_AT_name        : (indirect string, offset: 0x1a3): pno
+    <61>   DW_AT_type        : <0xa4>
+    <65>   DW_AT_decl_file   : 2
+    <66>   DW_AT_decl_line   : 48
+    <67>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><6a>: Abbrev Number: 5 (DW_TAG_member)
+    <6b>   DW_AT_name        : (indirect string, offset: 0x1ab): devname
+    <6f>   DW_AT_type        : <0xab>
+    <73>   DW_AT_decl_file   : 2
+    <74>   DW_AT_decl_line   : 49
+    <75>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><78>: Abbrev Number: 5 (DW_TAG_member)
+    <79>   DW_AT_name        : (indirect string, offset: 0x1c1): volname
+    <7d>   DW_AT_type        : <0xab>
+    <81>   DW_AT_decl_file   : 2
+    <82>   DW_AT_decl_line   : 51
+    <83>   DW_AT_data_member_location: 2 byte block: 23 54 	(DW_OP_plus_uconst: 84)
+ <2><86>: Abbrev Number: 0
+ <1><87>: Abbrev Number: 3 (DW_TAG_typedef)
+    <88>   DW_AT_type        : <0x92>
+    <8c>   DW_AT_name        : (indirect string, offset: 0x194): int64_t
+    <90>   DW_AT_decl_file   : 1
+    <91>   DW_AT_decl_line   : 67
+ <1><92>: Abbrev Number: 3 (DW_TAG_typedef)
+    <93>   DW_AT_type        : <0x9d>
+    <97>   DW_AT_name        : (indirect string, offset: 0x18a): __int64_t
+    <9b>   DW_AT_decl_file   : 1
+    <9c>   DW_AT_decl_line   : 46
+ <1><9d>: Abbrev Number: 6 (DW_TAG_base_type)
+    <9e>   DW_AT_name        : (indirect string, offset: 0x17c): long long int
+    <a2>   DW_AT_encoding    : 5	(signed)
+    <a3>   DW_AT_byte_size   : 8
+ <1><a4>: Abbrev Number: 6 (DW_TAG_base_type)
+    <a5>   DW_AT_name        : (indirect string, offset: 0x1a7): int
+    <a9>   DW_AT_encoding    : 5	(signed)
+    <aa>   DW_AT_byte_size   : 4
+ <1><ab>: Abbrev Number: 7 (DW_TAG_array_type)
+    <ac>   DW_AT_type        : <0xb8>
+ <2><b0>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <b1>   DW_AT_type        : <0xbf>
+    <b5>   DW_AT_lower_bound : 0
+    <b6>   DW_AT_count       : 64
+ <2><b7>: Abbrev Number: 0
+ <1><b8>: Abbrev Number: 6 (DW_TAG_base_type)
+    <b9>   DW_AT_name        : (indirect string, offset: 0x1b3): char
+    <bd>   DW_AT_encoding    : 8	(unsigned char)
+    <be>   DW_AT_byte_size   : 1
+ <1><bf>: Abbrev Number: 9 (DW_TAG_base_type)
+    <c0>   DW_AT_name        : (indirect string, offset: 0x1b8): sizetype
+    <c4>   DW_AT_byte_size   : 8
+    <c5>   DW_AT_encoding    : 7	(unsigned)
+ <1><c6>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_blkpg_partition.d2 b/mpers-m32/struct_blkpg_partition.d2
index eecf846..d7e9cff 100644
--- a/mpers-m32/struct_blkpg_partition.d2
+++ b/mpers-m32/struct_blkpg_partition.d2
@@ -1,94 +1,94 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x9b): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x165): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 65
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xff): struct_blkpg_partition
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1c9): struct_blkpg_partition
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 52
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
 DW_AT_byte_size   : 152
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 45
-<2><3f>
+<2><40>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xac): start
-DW_AT_type        : <0x86>
+DW_AT_name        : (indirect string, offset: 0x176): start
+DW_AT_type        : <0x87>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 46
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><4d>
+<2><4e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd2): length
-DW_AT_type        : <0x86>
+DW_AT_name        : (indirect string, offset: 0x19c): length
+DW_AT_type        : <0x87>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 47
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><5b>
+<2><5c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd9): pno
-DW_AT_type        : <0xa3>
+DW_AT_name        : (indirect string, offset: 0x1a3): pno
+DW_AT_type        : <0xa4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 48
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><69>
+<2><6a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe1): devname
-DW_AT_type        : <0xaa>
+DW_AT_name        : (indirect string, offset: 0x1ab): devname
+DW_AT_type        : <0xab>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 49
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><77>
+<2><78>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf7): volname
-DW_AT_type        : <0xaa>
+DW_AT_name        : (indirect string, offset: 0x1c1): volname
+DW_AT_type        : <0xab>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 51
 DW_AT_data_member_location: 2 byte block: 23 54 	(DW_OP_plus_uconst: 84)
-<1><86>
+<1><87>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x91>
-DW_AT_name        : (indirect string, offset: 0xca): int64_t
+DW_AT_type        : <0x92>
+DW_AT_name        : (indirect string, offset: 0x194): int64_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 67
-<1><91>
+<1><92>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x9c>
-DW_AT_name        : (indirect string, offset: 0xc0): __int64_t
+DW_AT_type        : <0x9d>
+DW_AT_name        : (indirect string, offset: 0x18a): __int64_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 46
-<1><9c>
+<1><9d>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb2): long long int
+DW_AT_name        : (indirect string, offset: 0x17c): long long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 8
-<1><a3>
+<1><a4>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xdd): int
+DW_AT_name        : (indirect string, offset: 0x1a7): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><aa>
+<1><ab>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0xb7>
-<2><af>
+DW_AT_type        : <0xb8>
+<2><b0>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0xbe>
+DW_AT_type        : <0xbf>
 DW_AT_lower_bound : 0
 DW_AT_count       : 64
-<1><b7>
+<1><b8>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe9): char
+DW_AT_name        : (indirect string, offset: 0x1b3): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><be>
+<1><bf>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xee): sizetype
+DW_AT_name        : (indirect string, offset: 0x1b8): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
diff --git a/mpers-m32/struct_btrfs_ioctl_dev_replace_args.d1 b/mpers-m32/struct_btrfs_ioctl_dev_replace_args.d1
index 9e4477f..9ba90ad 100644
--- a/mpers-m32/struct_btrfs_ioctl_dev_replace_args.d1
+++ b/mpers-m32/struct_btrfs_ioctl_dev_replace_args.d1
@@ -1,181 +1,182 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x17f (32-bit)
+   Length:        0x180 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_btrfs_ioctl_dev_replace_args.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_btrfs_ioctl_dev_replace_args.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x6d): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0xa8): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 47
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x21c): struct_btrfs_ioctl_dev_replace_args
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 37
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x1ff): btrfs_ioctl_dev_replace_args
-    <40>   DW_AT_byte_size   : 2600
-    <42>   DW_AT_decl_file   : 2
-    <43>   DW_AT_decl_line   : 137
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xb9): cmd
-    <49>   DW_AT_type        : <0x9c>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 138
-    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><52>: Abbrev Number: 5 (DW_TAG_member)
-    <53>   DW_AT_name        : (indirect string, offset: 0xda): result
-    <57>   DW_AT_type        : <0x9c>
-    <5b>   DW_AT_decl_file   : 2
-    <5c>   DW_AT_decl_line   : 139
-    <5d>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><60>: Abbrev Number: 6 (DW_TAG_member)
-    <61>   DW_AT_type        : <0x6a>
-    <65>   DW_AT_decl_file   : 2
-    <66>   DW_AT_decl_line   : 140
-    <67>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><6a>: Abbrev Number: 7 (DW_TAG_union_type)
-    <6b>   DW_AT_byte_size   : 2072
-    <6d>   DW_AT_decl_file   : 2
-    <6e>   DW_AT_decl_line   : 140
- <3><6f>: Abbrev Number: 5 (DW_TAG_member)
-    <70>   DW_AT_name        : (indirect string, offset: 0xe1): start
-    <74>   DW_AT_type        : <0xae>
-    <78>   DW_AT_decl_file   : 2
-    <79>   DW_AT_decl_line   : 141
-    <7a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><7d>: Abbrev Number: 5 (DW_TAG_member)
-    <7e>   DW_AT_name        : (indirect string, offset: 0x167): status
-    <82>   DW_AT_type        : <0x118>
-    <86>   DW_AT_decl_file   : 2
-    <87>   DW_AT_decl_line   : 142
-    <88>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><8b>: Abbrev Number: 0
- <2><8c>: Abbrev Number: 5 (DW_TAG_member)
-    <8d>   DW_AT_name        : (indirect string, offset: 0x1f9): spare
-    <91>   DW_AT_type        : <0x175>
-    <95>   DW_AT_decl_file   : 2
-    <96>   DW_AT_decl_line   : 144
-    <97>   DW_AT_data_member_location: 3 byte block: 23 a8 10 	(DW_OP_plus_uconst: 2088)
- <2><9b>: Abbrev Number: 0
- <1><9c>: Abbrev Number: 3 (DW_TAG_typedef)
-    <9d>   DW_AT_type        : <0xa7>
-    <a1>   DW_AT_name        : (indirect string, offset: 0xd4): __u64
-    <a5>   DW_AT_decl_file   : 1
-    <a6>   DW_AT_decl_line   : 31
- <1><a7>: Abbrev Number: 8 (DW_TAG_base_type)
-    <a8>   DW_AT_name        : (indirect string, offset: 0xbd): long long unsigned int
-    <ac>   DW_AT_encoding    : 7	(unsigned)
-    <ad>   DW_AT_byte_size   : 8
- <1><ae>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <af>   DW_AT_name        : (indirect string, offset: 0x142): btrfs_ioctl_dev_replace_start_params
-    <b3>   DW_AT_byte_size   : 2072
-    <b5>   DW_AT_decl_file   : 2
-    <b6>   DW_AT_decl_line   : 111
- <2><b7>: Abbrev Number: 5 (DW_TAG_member)
-    <b8>   DW_AT_name        : (indirect string, offset: 0xe7): srcdevid
-    <bc>   DW_AT_type        : <0x9c>
-    <c0>   DW_AT_decl_file   : 2
-    <c1>   DW_AT_decl_line   : 112
-    <c2>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><c5>: Abbrev Number: 5 (DW_TAG_member)
-    <c6>   DW_AT_name        : (indirect string, offset: 0xf0): cont_reading_from_srcdev_mode
-    <ca>   DW_AT_type        : <0x9c>
-    <ce>   DW_AT_decl_file   : 2
-    <cf>   DW_AT_decl_line   : 113
-    <d0>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><d3>: Abbrev Number: 5 (DW_TAG_member)
-    <d4>   DW_AT_name        : (indirect string, offset: 0x10e): srcdev_name
-    <d8>   DW_AT_type        : <0xf1>
-    <dc>   DW_AT_decl_file   : 2
-    <dd>   DW_AT_decl_line   : 114
-    <de>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><e1>: Abbrev Number: 5 (DW_TAG_member)
-    <e2>   DW_AT_name        : (indirect string, offset: 0x136): tgtdev_name
-    <e6>   DW_AT_type        : <0xf1>
-    <ea>   DW_AT_decl_file   : 2
-    <eb>   DW_AT_decl_line   : 115
-    <ec>   DW_AT_data_member_location: 3 byte block: 23 91 8 	(DW_OP_plus_uconst: 1041)
- <2><f0>: Abbrev Number: 0
- <1><f1>: Abbrev Number: 9 (DW_TAG_array_type)
-    <f2>   DW_AT_type        : <0xff>
- <2><f6>: Abbrev Number: 10 (DW_TAG_subrange_type)
-    <f7>   DW_AT_type        : <0x111>
-    <fb>   DW_AT_lower_bound : 0
-    <fc>   DW_AT_count       : 1025
- <2><fe>: Abbrev Number: 0
- <1><ff>: Abbrev Number: 3 (DW_TAG_typedef)
-    <100>   DW_AT_type        : <0x10a>
-    <104>   DW_AT_name        : (indirect string, offset: 0x128): __u8
-    <108>   DW_AT_decl_file   : 1
-    <109>   DW_AT_decl_line   : 24
- <1><10a>: Abbrev Number: 8 (DW_TAG_base_type)
-    <10b>   DW_AT_name        : (indirect string, offset: 0x11a): unsigned char
-    <10f>   DW_AT_encoding    : 8	(unsigned char)
-    <110>   DW_AT_byte_size   : 1
- <1><111>: Abbrev Number: 11 (DW_TAG_base_type)
-    <112>   DW_AT_name        : (indirect string, offset: 0x12d): sizetype
-    <116>   DW_AT_byte_size   : 8
-    <117>   DW_AT_encoding    : 7	(unsigned)
- <1><118>: Abbrev Number: 12 (DW_TAG_structure_type)
-    <119>   DW_AT_name        : (indirect string, offset: 0x1d3): btrfs_ioctl_dev_replace_status_params
-    <11d>   DW_AT_byte_size   : 48
-    <11e>   DW_AT_decl_file   : 2
-    <11f>   DW_AT_decl_line   : 122
- <2><120>: Abbrev Number: 5 (DW_TAG_member)
-    <121>   DW_AT_name        : (indirect string, offset: 0x16e): replace_state
-    <125>   DW_AT_type        : <0x9c>
-    <129>   DW_AT_decl_file   : 2
-    <12a>   DW_AT_decl_line   : 123
-    <12b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><12e>: Abbrev Number: 5 (DW_TAG_member)
-    <12f>   DW_AT_name        : (indirect string, offset: 0x17c): progress_1000
-    <133>   DW_AT_type        : <0x9c>
-    <137>   DW_AT_decl_file   : 2
-    <138>   DW_AT_decl_line   : 124
-    <139>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><13c>: Abbrev Number: 5 (DW_TAG_member)
-    <13d>   DW_AT_name        : (indirect string, offset: 0x18a): time_started
-    <141>   DW_AT_type        : <0x9c>
-    <145>   DW_AT_decl_file   : 2
-    <146>   DW_AT_decl_line   : 125
-    <147>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><14a>: Abbrev Number: 5 (DW_TAG_member)
-    <14b>   DW_AT_name        : (indirect string, offset: 0x197): time_stopped
-    <14f>   DW_AT_type        : <0x9c>
-    <153>   DW_AT_decl_file   : 2
-    <154>   DW_AT_decl_line   : 126
-    <155>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><158>: Abbrev Number: 5 (DW_TAG_member)
-    <159>   DW_AT_name        : (indirect string, offset: 0x1a4): num_write_errors
-    <15d>   DW_AT_type        : <0x9c>
-    <161>   DW_AT_decl_file   : 2
-    <162>   DW_AT_decl_line   : 127
-    <163>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><166>: Abbrev Number: 5 (DW_TAG_member)
-    <167>   DW_AT_name        : (indirect string, offset: 0x1b5): num_uncorrectable_read_errors
-    <16b>   DW_AT_type        : <0x9c>
-    <16f>   DW_AT_decl_file   : 2
-    <170>   DW_AT_decl_line   : 128
-    <171>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><174>: Abbrev Number: 0
- <1><175>: Abbrev Number: 9 (DW_TAG_array_type)
-    <176>   DW_AT_type        : <0x9c>
- <2><17a>: Abbrev Number: 13 (DW_TAG_subrange_type)
-    <17b>   DW_AT_type        : <0x111>
-    <17f>   DW_AT_lower_bound : 0
-    <180>   DW_AT_count       : 64
- <2><181>: Abbrev Number: 0
- <1><182>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x137): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x172): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 47
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x2e6): struct_btrfs_ioctl_dev_replace_args
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 37
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x2c9): btrfs_ioctl_dev_replace_args
+    <41>   DW_AT_byte_size   : 2600
+    <43>   DW_AT_decl_file   : 2
+    <44>   DW_AT_decl_line   : 137
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x183): cmd
+    <4a>   DW_AT_type        : <0x9d>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 138
+    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><53>: Abbrev Number: 5 (DW_TAG_member)
+    <54>   DW_AT_name        : (indirect string, offset: 0x1a4): result
+    <58>   DW_AT_type        : <0x9d>
+    <5c>   DW_AT_decl_file   : 2
+    <5d>   DW_AT_decl_line   : 139
+    <5e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><61>: Abbrev Number: 6 (DW_TAG_member)
+    <62>   DW_AT_type        : <0x6b>
+    <66>   DW_AT_decl_file   : 2
+    <67>   DW_AT_decl_line   : 140
+    <68>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><6b>: Abbrev Number: 7 (DW_TAG_union_type)
+    <6c>   DW_AT_byte_size   : 2072
+    <6e>   DW_AT_decl_file   : 2
+    <6f>   DW_AT_decl_line   : 140
+ <3><70>: Abbrev Number: 5 (DW_TAG_member)
+    <71>   DW_AT_name        : (indirect string, offset: 0x1ab): start
+    <75>   DW_AT_type        : <0xaf>
+    <79>   DW_AT_decl_file   : 2
+    <7a>   DW_AT_decl_line   : 141
+    <7b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><7e>: Abbrev Number: 5 (DW_TAG_member)
+    <7f>   DW_AT_name        : (indirect string, offset: 0x231): status
+    <83>   DW_AT_type        : <0x119>
+    <87>   DW_AT_decl_file   : 2
+    <88>   DW_AT_decl_line   : 142
+    <89>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><8c>: Abbrev Number: 0
+ <2><8d>: Abbrev Number: 5 (DW_TAG_member)
+    <8e>   DW_AT_name        : (indirect string, offset: 0x2c3): spare
+    <92>   DW_AT_type        : <0x176>
+    <96>   DW_AT_decl_file   : 2
+    <97>   DW_AT_decl_line   : 144
+    <98>   DW_AT_data_member_location: 3 byte block: 23 a8 10 	(DW_OP_plus_uconst: 2088)
+ <2><9c>: Abbrev Number: 0
+ <1><9d>: Abbrev Number: 3 (DW_TAG_typedef)
+    <9e>   DW_AT_type        : <0xa8>
+    <a2>   DW_AT_name        : (indirect string, offset: 0x19e): __u64
+    <a6>   DW_AT_decl_file   : 1
+    <a7>   DW_AT_decl_line   : 31
+ <1><a8>: Abbrev Number: 8 (DW_TAG_base_type)
+    <a9>   DW_AT_name        : (indirect string, offset: 0x187): long long unsigned int
+    <ad>   DW_AT_encoding    : 7	(unsigned)
+    <ae>   DW_AT_byte_size   : 8
+ <1><af>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <b0>   DW_AT_name        : (indirect string, offset: 0x20c): btrfs_ioctl_dev_replace_start_params
+    <b4>   DW_AT_byte_size   : 2072
+    <b6>   DW_AT_decl_file   : 2
+    <b7>   DW_AT_decl_line   : 111
+ <2><b8>: Abbrev Number: 5 (DW_TAG_member)
+    <b9>   DW_AT_name        : (indirect string, offset: 0x1b1): srcdevid
+    <bd>   DW_AT_type        : <0x9d>
+    <c1>   DW_AT_decl_file   : 2
+    <c2>   DW_AT_decl_line   : 112
+    <c3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><c6>: Abbrev Number: 5 (DW_TAG_member)
+    <c7>   DW_AT_name        : (indirect string, offset: 0x1ba): cont_reading_from_srcdev_mode
+    <cb>   DW_AT_type        : <0x9d>
+    <cf>   DW_AT_decl_file   : 2
+    <d0>   DW_AT_decl_line   : 113
+    <d1>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><d4>: Abbrev Number: 5 (DW_TAG_member)
+    <d5>   DW_AT_name        : (indirect string, offset: 0x1d8): srcdev_name
+    <d9>   DW_AT_type        : <0xf2>
+    <dd>   DW_AT_decl_file   : 2
+    <de>   DW_AT_decl_line   : 114
+    <df>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><e2>: Abbrev Number: 5 (DW_TAG_member)
+    <e3>   DW_AT_name        : (indirect string, offset: 0x200): tgtdev_name
+    <e7>   DW_AT_type        : <0xf2>
+    <eb>   DW_AT_decl_file   : 2
+    <ec>   DW_AT_decl_line   : 115
+    <ed>   DW_AT_data_member_location: 3 byte block: 23 91 8 	(DW_OP_plus_uconst: 1041)
+ <2><f1>: Abbrev Number: 0
+ <1><f2>: Abbrev Number: 9 (DW_TAG_array_type)
+    <f3>   DW_AT_type        : <0x100>
+ <2><f7>: Abbrev Number: 10 (DW_TAG_subrange_type)
+    <f8>   DW_AT_type        : <0x112>
+    <fc>   DW_AT_lower_bound : 0
+    <fd>   DW_AT_count       : 1025
+ <2><ff>: Abbrev Number: 0
+ <1><100>: Abbrev Number: 3 (DW_TAG_typedef)
+    <101>   DW_AT_type        : <0x10b>
+    <105>   DW_AT_name        : (indirect string, offset: 0x1f2): __u8
+    <109>   DW_AT_decl_file   : 1
+    <10a>   DW_AT_decl_line   : 24
+ <1><10b>: Abbrev Number: 8 (DW_TAG_base_type)
+    <10c>   DW_AT_name        : (indirect string, offset: 0x1e4): unsigned char
+    <110>   DW_AT_encoding    : 8	(unsigned char)
+    <111>   DW_AT_byte_size   : 1
+ <1><112>: Abbrev Number: 11 (DW_TAG_base_type)
+    <113>   DW_AT_name        : (indirect string, offset: 0x1f7): sizetype
+    <117>   DW_AT_byte_size   : 8
+    <118>   DW_AT_encoding    : 7	(unsigned)
+ <1><119>: Abbrev Number: 12 (DW_TAG_structure_type)
+    <11a>   DW_AT_name        : (indirect string, offset: 0x29d): btrfs_ioctl_dev_replace_status_params
+    <11e>   DW_AT_byte_size   : 48
+    <11f>   DW_AT_decl_file   : 2
+    <120>   DW_AT_decl_line   : 122
+ <2><121>: Abbrev Number: 5 (DW_TAG_member)
+    <122>   DW_AT_name        : (indirect string, offset: 0x238): replace_state
+    <126>   DW_AT_type        : <0x9d>
+    <12a>   DW_AT_decl_file   : 2
+    <12b>   DW_AT_decl_line   : 123
+    <12c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><12f>: Abbrev Number: 5 (DW_TAG_member)
+    <130>   DW_AT_name        : (indirect string, offset: 0x246): progress_1000
+    <134>   DW_AT_type        : <0x9d>
+    <138>   DW_AT_decl_file   : 2
+    <139>   DW_AT_decl_line   : 124
+    <13a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><13d>: Abbrev Number: 5 (DW_TAG_member)
+    <13e>   DW_AT_name        : (indirect string, offset: 0x254): time_started
+    <142>   DW_AT_type        : <0x9d>
+    <146>   DW_AT_decl_file   : 2
+    <147>   DW_AT_decl_line   : 125
+    <148>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><14b>: Abbrev Number: 5 (DW_TAG_member)
+    <14c>   DW_AT_name        : (indirect string, offset: 0x261): time_stopped
+    <150>   DW_AT_type        : <0x9d>
+    <154>   DW_AT_decl_file   : 2
+    <155>   DW_AT_decl_line   : 126
+    <156>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><159>: Abbrev Number: 5 (DW_TAG_member)
+    <15a>   DW_AT_name        : (indirect string, offset: 0x26e): num_write_errors
+    <15e>   DW_AT_type        : <0x9d>
+    <162>   DW_AT_decl_file   : 2
+    <163>   DW_AT_decl_line   : 127
+    <164>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><167>: Abbrev Number: 5 (DW_TAG_member)
+    <168>   DW_AT_name        : (indirect string, offset: 0x27f): num_uncorrectable_read_errors
+    <16c>   DW_AT_type        : <0x9d>
+    <170>   DW_AT_decl_file   : 2
+    <171>   DW_AT_decl_line   : 128
+    <172>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><175>: Abbrev Number: 0
+ <1><176>: Abbrev Number: 9 (DW_TAG_array_type)
+    <177>   DW_AT_type        : <0x9d>
+ <2><17b>: Abbrev Number: 13 (DW_TAG_subrange_type)
+    <17c>   DW_AT_type        : <0x112>
+    <180>   DW_AT_lower_bound : 0
+    <181>   DW_AT_count       : 64
+ <2><182>: Abbrev Number: 0
+ <1><183>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_btrfs_ioctl_dev_replace_args.d2 b/mpers-m32/struct_btrfs_ioctl_dev_replace_args.d2
index db709b8..c7bdfb6 100644
--- a/mpers-m32/struct_btrfs_ioctl_dev_replace_args.d2
+++ b/mpers-m32/struct_btrfs_ioctl_dev_replace_args.d2
@@ -1,191 +1,191 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0xa8): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x172): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 47
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x21c): struct_btrfs_ioctl_dev_replace_args
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x2e6): struct_btrfs_ioctl_dev_replace_args
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 37
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1ff): btrfs_ioctl_dev_replace_args
+DW_AT_name        : (indirect string, offset: 0x2c9): btrfs_ioctl_dev_replace_args
 DW_AT_byte_size   : 2600
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 137
-<2><44>
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb9): cmd
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x183): cmd
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 138
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><52>
+<2><53>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xda): result
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x1a4): result
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 139
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><60>
+<2><61>
 Abbrev Number: 6 (DW_TAG_member)
-DW_AT_type        : <0x6a>
+DW_AT_type        : <0x6b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 140
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><6a>
+<2><6b>
 Abbrev Number: 7 (DW_TAG_union_type)
 DW_AT_byte_size   : 2072
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 140
-<3><6f>
+<3><70>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe1): start
-DW_AT_type        : <0xae>
+DW_AT_name        : (indirect string, offset: 0x1ab): start
+DW_AT_type        : <0xaf>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 141
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><7d>
+<3><7e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x167): status
-DW_AT_type        : <0x118>
+DW_AT_name        : (indirect string, offset: 0x231): status
+DW_AT_type        : <0x119>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 142
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><8c>
+<2><8d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f9): spare
-DW_AT_type        : <0x175>
+DW_AT_name        : (indirect string, offset: 0x2c3): spare
+DW_AT_type        : <0x176>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 144
 DW_AT_data_member_location: 3 byte block: 23 a8 10 	(DW_OP_plus_uconst: 2088)
-<1><9c>
+<1><9d>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xa7>
-DW_AT_name        : (indirect string, offset: 0xd4): __u64
+DW_AT_type        : <0xa8>
+DW_AT_name        : (indirect string, offset: 0x19e): __u64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
-<1><a7>
+<1><a8>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xbd): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x187): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
-<1><ae>
+<1><af>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x142): btrfs_ioctl_dev_replace_start_params
+DW_AT_name        : (indirect string, offset: 0x20c): btrfs_ioctl_dev_replace_start_params
 DW_AT_byte_size   : 2072
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 111
-<2><b7>
+<2><b8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe7): srcdevid
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x1b1): srcdevid
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 112
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><c5>
+<2><c6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf0): cont_reading_from_srcdev_mode
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x1ba): cont_reading_from_srcdev_mode
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 113
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><d3>
+<2><d4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10e): srcdev_name
-DW_AT_type        : <0xf1>
+DW_AT_name        : (indirect string, offset: 0x1d8): srcdev_name
+DW_AT_type        : <0xf2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 114
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><e1>
+<2><e2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x136): tgtdev_name
-DW_AT_type        : <0xf1>
+DW_AT_name        : (indirect string, offset: 0x200): tgtdev_name
+DW_AT_type        : <0xf2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 115
 DW_AT_data_member_location: 3 byte block: 23 91 8 	(DW_OP_plus_uconst: 1041)
-<1><f1>
+<1><f2>
 Abbrev Number: 9 (DW_TAG_array_type)
-DW_AT_type        : <0xff>
-<2><f6>
+DW_AT_type        : <0x100>
+<2><f7>
 Abbrev Number: 10 (DW_TAG_subrange_type)
-DW_AT_type        : <0x111>
+DW_AT_type        : <0x112>
 DW_AT_lower_bound : 0
 DW_AT_count       : 1025
-<1><ff>
+<1><100>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x10a>
-DW_AT_name        : (indirect string, offset: 0x128): __u8
+DW_AT_type        : <0x10b>
+DW_AT_name        : (indirect string, offset: 0x1f2): __u8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
-<1><10a>
+<1><10b>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x11a): unsigned char
+DW_AT_name        : (indirect string, offset: 0x1e4): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><111>
+<1><112>
 Abbrev Number: 11 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x12d): sizetype
+DW_AT_name        : (indirect string, offset: 0x1f7): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><118>
+<1><119>
 Abbrev Number: 12 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1d3): btrfs_ioctl_dev_replace_status_params
+DW_AT_name        : (indirect string, offset: 0x29d): btrfs_ioctl_dev_replace_status_params
 DW_AT_byte_size   : 48
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 122
-<2><120>
+<2><121>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x16e): replace_state
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x238): replace_state
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 123
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><12e>
+<2><12f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17c): progress_1000
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x246): progress_1000
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 124
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><13c>
+<2><13d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x18a): time_started
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x254): time_started
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 125
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><14a>
+<2><14b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x197): time_stopped
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x261): time_stopped
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 126
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><158>
+<2><159>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1a4): num_write_errors
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x26e): num_write_errors
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 127
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><166>
+<2><167>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1b5): num_uncorrectable_read_errors
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x27f): num_uncorrectable_read_errors
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 128
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<1><175>
+<1><176>
 Abbrev Number: 9 (DW_TAG_array_type)
-DW_AT_type        : <0x9c>
-<2><17a>
+DW_AT_type        : <0x9d>
+<2><17b>
 Abbrev Number: 13 (DW_TAG_subrange_type)
-DW_AT_type        : <0x111>
+DW_AT_type        : <0x112>
 DW_AT_lower_bound : 0
 DW_AT_count       : 64
diff --git a/mpers-m32/struct_btrfs_ioctl_received_subvol_args.d1 b/mpers-m32/struct_btrfs_ioctl_received_subvol_args.d1
index 5a55888..747edf7 100644
--- a/mpers-m32/struct_btrfs_ioctl_received_subvol_args.d1
+++ b/mpers-m32/struct_btrfs_ioctl_received_subvol_args.d1
@@ -1,133 +1,134 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x11f (32-bit)
+   Length:        0x120 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_btrfs_ioctl_received_subvol_args.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_btrfs_ioctl_received_subvol_args.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x71): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0xac): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 47
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x16c): struct_btrfs_ioctl_received_subvol_args
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 41
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x14b): btrfs_ioctl_received_subvol_args
-    <40>   DW_AT_byte_size   : 200
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 386
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xbd): uuid
-    <49>   DW_AT_type        : <0xae>
-    <4d>   DW_AT_decl_file   : 1
-    <4e>   DW_AT_decl_line   : 387
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xd0): stransid
-    <58>   DW_AT_type        : <0xc9>
-    <5c>   DW_AT_decl_file   : 1
-    <5d>   DW_AT_decl_line   : 388
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><62>: Abbrev Number: 5 (DW_TAG_member)
-    <63>   DW_AT_name        : (indirect string, offset: 0xf6): rtransid
-    <67>   DW_AT_type        : <0xc9>
-    <6b>   DW_AT_decl_file   : 1
-    <6c>   DW_AT_decl_line   : 389
-    <6e>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><71>: Abbrev Number: 5 (DW_TAG_member)
-    <72>   DW_AT_name        : (indirect string, offset: 0xff): stime
-    <76>   DW_AT_type        : <0xdb>
-    <7a>   DW_AT_decl_file   : 1
-    <7b>   DW_AT_decl_line   : 390
-    <7d>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><80>: Abbrev Number: 5 (DW_TAG_member)
-    <81>   DW_AT_name        : (indirect string, offset: 0x136): rtime
-    <85>   DW_AT_type        : <0xdb>
-    <89>   DW_AT_decl_file   : 1
-    <8a>   DW_AT_decl_line   : 391
-    <8c>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><8f>: Abbrev Number: 5 (DW_TAG_member)
-    <90>   DW_AT_name        : (indirect string, offset: 0x13c): flags
-    <94>   DW_AT_type        : <0xc9>
-    <98>   DW_AT_decl_file   : 1
-    <99>   DW_AT_decl_line   : 392
-    <9b>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><9e>: Abbrev Number: 5 (DW_TAG_member)
-    <9f>   DW_AT_name        : (indirect string, offset: 0x142): reserved
-    <a3>   DW_AT_type        : <0x115>
-    <a7>   DW_AT_decl_file   : 1
-    <a8>   DW_AT_decl_line   : 393
-    <aa>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
- <2><ad>: Abbrev Number: 0
- <1><ae>: Abbrev Number: 6 (DW_TAG_array_type)
-    <af>   DW_AT_type        : <0xbb>
- <2><b3>: Abbrev Number: 7 (DW_TAG_subrange_type)
-    <b4>   DW_AT_type        : <0xc2>
-    <b8>   DW_AT_lower_bound : 0
-    <b9>   DW_AT_count       : 16
- <2><ba>: Abbrev Number: 0
- <1><bb>: Abbrev Number: 8 (DW_TAG_base_type)
-    <bc>   DW_AT_name        : (indirect string, offset: 0xc2): char
-    <c0>   DW_AT_encoding    : 8	(unsigned char)
-    <c1>   DW_AT_byte_size   : 1
- <1><c2>: Abbrev Number: 9 (DW_TAG_base_type)
-    <c3>   DW_AT_name        : (indirect string, offset: 0xc7): sizetype
-    <c7>   DW_AT_byte_size   : 8
-    <c8>   DW_AT_encoding    : 7	(unsigned)
- <1><c9>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ca>   DW_AT_type        : <0xd4>
-    <ce>   DW_AT_name        : (indirect string, offset: 0xf0): __u64
-    <d2>   DW_AT_decl_file   : 2
-    <d3>   DW_AT_decl_line   : 31
- <1><d4>: Abbrev Number: 8 (DW_TAG_base_type)
-    <d5>   DW_AT_name        : (indirect string, offset: 0xd9): long long unsigned int
-    <d9>   DW_AT_encoding    : 7	(unsigned)
-    <da>   DW_AT_byte_size   : 8
- <1><db>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <dc>   DW_AT_name        : (indirect string, offset: 0x121): btrfs_ioctl_timespec
-    <e0>   DW_AT_byte_size   : 16
-    <e1>   DW_AT_decl_file   : 1
-    <e2>   DW_AT_decl_line   : 382
- <2><e4>: Abbrev Number: 5 (DW_TAG_member)
-    <e5>   DW_AT_name        : (indirect string, offset: 0x105): sec
-    <e9>   DW_AT_type        : <0xc9>
-    <ed>   DW_AT_decl_file   : 1
-    <ee>   DW_AT_decl_line   : 383
-    <f0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><f3>: Abbrev Number: 5 (DW_TAG_member)
-    <f4>   DW_AT_name        : (indirect string, offset: 0x109): nsec
-    <f8>   DW_AT_type        : <0x103>
-    <fc>   DW_AT_decl_file   : 1
-    <fd>   DW_AT_decl_line   : 384
-    <ff>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><102>: Abbrev Number: 0
- <1><103>: Abbrev Number: 3 (DW_TAG_typedef)
-    <104>   DW_AT_type        : <0x10e>
-    <108>   DW_AT_name        : (indirect string, offset: 0x11b): __u32
-    <10c>   DW_AT_decl_file   : 2
-    <10d>   DW_AT_decl_line   : 28
- <1><10e>: Abbrev Number: 8 (DW_TAG_base_type)
-    <10f>   DW_AT_name        : (indirect string, offset: 0x10e): unsigned int
-    <113>   DW_AT_encoding    : 7	(unsigned)
-    <114>   DW_AT_byte_size   : 4
- <1><115>: Abbrev Number: 6 (DW_TAG_array_type)
-    <116>   DW_AT_type        : <0xc9>
- <2><11a>: Abbrev Number: 7 (DW_TAG_subrange_type)
-    <11b>   DW_AT_type        : <0xc2>
-    <11f>   DW_AT_lower_bound : 0
-    <120>   DW_AT_count       : 16
- <2><121>: Abbrev Number: 0
- <1><122>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x13b): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x176): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 47
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x236): struct_btrfs_ioctl_received_subvol_args
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 41
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x215): btrfs_ioctl_received_subvol_args
+    <41>   DW_AT_byte_size   : 200
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 388
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x187): uuid
+    <4a>   DW_AT_type        : <0xaf>
+    <4e>   DW_AT_decl_file   : 1
+    <4f>   DW_AT_decl_line   : 389
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x19a): stransid
+    <59>   DW_AT_type        : <0xca>
+    <5d>   DW_AT_decl_file   : 1
+    <5e>   DW_AT_decl_line   : 390
+    <60>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><63>: Abbrev Number: 5 (DW_TAG_member)
+    <64>   DW_AT_name        : (indirect string, offset: 0x1c0): rtransid
+    <68>   DW_AT_type        : <0xca>
+    <6c>   DW_AT_decl_file   : 1
+    <6d>   DW_AT_decl_line   : 391
+    <6f>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><72>: Abbrev Number: 5 (DW_TAG_member)
+    <73>   DW_AT_name        : (indirect string, offset: 0x1c9): stime
+    <77>   DW_AT_type        : <0xdc>
+    <7b>   DW_AT_decl_file   : 1
+    <7c>   DW_AT_decl_line   : 392
+    <7e>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><81>: Abbrev Number: 5 (DW_TAG_member)
+    <82>   DW_AT_name        : (indirect string, offset: 0x200): rtime
+    <86>   DW_AT_type        : <0xdc>
+    <8a>   DW_AT_decl_file   : 1
+    <8b>   DW_AT_decl_line   : 393
+    <8d>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><90>: Abbrev Number: 5 (DW_TAG_member)
+    <91>   DW_AT_name        : (indirect string, offset: 0x206): flags
+    <95>   DW_AT_type        : <0xca>
+    <99>   DW_AT_decl_file   : 1
+    <9a>   DW_AT_decl_line   : 394
+    <9c>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><9f>: Abbrev Number: 5 (DW_TAG_member)
+    <a0>   DW_AT_name        : (indirect string, offset: 0x20c): reserved
+    <a4>   DW_AT_type        : <0x116>
+    <a8>   DW_AT_decl_file   : 1
+    <a9>   DW_AT_decl_line   : 395
+    <ab>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
+ <2><ae>: Abbrev Number: 0
+ <1><af>: Abbrev Number: 6 (DW_TAG_array_type)
+    <b0>   DW_AT_type        : <0xbc>
+ <2><b4>: Abbrev Number: 7 (DW_TAG_subrange_type)
+    <b5>   DW_AT_type        : <0xc3>
+    <b9>   DW_AT_lower_bound : 0
+    <ba>   DW_AT_count       : 16
+ <2><bb>: Abbrev Number: 0
+ <1><bc>: Abbrev Number: 8 (DW_TAG_base_type)
+    <bd>   DW_AT_name        : (indirect string, offset: 0x18c): char
+    <c1>   DW_AT_encoding    : 8	(unsigned char)
+    <c2>   DW_AT_byte_size   : 1
+ <1><c3>: Abbrev Number: 9 (DW_TAG_base_type)
+    <c4>   DW_AT_name        : (indirect string, offset: 0x191): sizetype
+    <c8>   DW_AT_byte_size   : 8
+    <c9>   DW_AT_encoding    : 7	(unsigned)
+ <1><ca>: Abbrev Number: 3 (DW_TAG_typedef)
+    <cb>   DW_AT_type        : <0xd5>
+    <cf>   DW_AT_name        : (indirect string, offset: 0x1ba): __u64
+    <d3>   DW_AT_decl_file   : 2
+    <d4>   DW_AT_decl_line   : 31
+ <1><d5>: Abbrev Number: 8 (DW_TAG_base_type)
+    <d6>   DW_AT_name        : (indirect string, offset: 0x1a3): long long unsigned int
+    <da>   DW_AT_encoding    : 7	(unsigned)
+    <db>   DW_AT_byte_size   : 8
+ <1><dc>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <dd>   DW_AT_name        : (indirect string, offset: 0x1eb): btrfs_ioctl_timespec
+    <e1>   DW_AT_byte_size   : 16
+    <e2>   DW_AT_decl_file   : 1
+    <e3>   DW_AT_decl_line   : 384
+ <2><e5>: Abbrev Number: 5 (DW_TAG_member)
+    <e6>   DW_AT_name        : (indirect string, offset: 0x1cf): sec
+    <ea>   DW_AT_type        : <0xca>
+    <ee>   DW_AT_decl_file   : 1
+    <ef>   DW_AT_decl_line   : 385
+    <f1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><f4>: Abbrev Number: 5 (DW_TAG_member)
+    <f5>   DW_AT_name        : (indirect string, offset: 0x1d3): nsec
+    <f9>   DW_AT_type        : <0x104>
+    <fd>   DW_AT_decl_file   : 1
+    <fe>   DW_AT_decl_line   : 386
+    <100>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><103>: Abbrev Number: 0
+ <1><104>: Abbrev Number: 3 (DW_TAG_typedef)
+    <105>   DW_AT_type        : <0x10f>
+    <109>   DW_AT_name        : (indirect string, offset: 0x1e5): __u32
+    <10d>   DW_AT_decl_file   : 2
+    <10e>   DW_AT_decl_line   : 28
+ <1><10f>: Abbrev Number: 8 (DW_TAG_base_type)
+    <110>   DW_AT_name        : (indirect string, offset: 0x1d8): unsigned int
+    <114>   DW_AT_encoding    : 7	(unsigned)
+    <115>   DW_AT_byte_size   : 4
+ <1><116>: Abbrev Number: 6 (DW_TAG_array_type)
+    <117>   DW_AT_type        : <0xca>
+ <2><11b>: Abbrev Number: 7 (DW_TAG_subrange_type)
+    <11c>   DW_AT_type        : <0xc3>
+    <120>   DW_AT_lower_bound : 0
+    <121>   DW_AT_count       : 16
+ <2><122>: Abbrev Number: 0
+ <1><123>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_btrfs_ioctl_received_subvol_args.d2 b/mpers-m32/struct_btrfs_ioctl_received_subvol_args.d2
index 9cceb97..2d90829 100644
--- a/mpers-m32/struct_btrfs_ioctl_received_subvol_args.d2
+++ b/mpers-m32/struct_btrfs_ioctl_received_subvol_args.d2
@@ -1,137 +1,137 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0xac): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x176): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 47
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x16c): struct_btrfs_ioctl_received_subvol_args
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x236): struct_btrfs_ioctl_received_subvol_args
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 41
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x14b): btrfs_ioctl_received_subvol_args
+DW_AT_name        : (indirect string, offset: 0x215): btrfs_ioctl_received_subvol_args
 DW_AT_byte_size   : 200
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 386
-<2><44>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xbd): uuid
-DW_AT_type        : <0xae>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 387
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd0): stransid
-DW_AT_type        : <0xc9>
-DW_AT_decl_file   : 1
 DW_AT_decl_line   : 388
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><62>
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf6): rtransid
-DW_AT_type        : <0xc9>
+DW_AT_name        : (indirect string, offset: 0x187): uuid
+DW_AT_type        : <0xaf>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 389
-DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><71>
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xff): stime
-DW_AT_type        : <0xdb>
+DW_AT_name        : (indirect string, offset: 0x19a): stransid
+DW_AT_type        : <0xca>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 390
-DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><80>
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><63>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x136): rtime
-DW_AT_type        : <0xdb>
+DW_AT_name        : (indirect string, offset: 0x1c0): rtransid
+DW_AT_type        : <0xca>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 391
-DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><8f>
+DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+<2><72>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13c): flags
-DW_AT_type        : <0xc9>
+DW_AT_name        : (indirect string, offset: 0x1c9): stime
+DW_AT_type        : <0xdc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 392
-DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<2><9e>
+DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+<2><81>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x142): reserved
-DW_AT_type        : <0x115>
+DW_AT_name        : (indirect string, offset: 0x200): rtime
+DW_AT_type        : <0xdc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 393
+DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+<2><90>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x206): flags
+DW_AT_type        : <0xca>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 394
+DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+<2><9f>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x20c): reserved
+DW_AT_type        : <0x116>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 395
 DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
-<1><ae>
+<1><af>
 Abbrev Number: 6 (DW_TAG_array_type)
-DW_AT_type        : <0xbb>
-<2><b3>
+DW_AT_type        : <0xbc>
+<2><b4>
 Abbrev Number: 7 (DW_TAG_subrange_type)
-DW_AT_type        : <0xc2>
+DW_AT_type        : <0xc3>
 DW_AT_lower_bound : 0
 DW_AT_count       : 16
-<1><bb>
+<1><bc>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc2): char
+DW_AT_name        : (indirect string, offset: 0x18c): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><c2>
+<1><c3>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc7): sizetype
+DW_AT_name        : (indirect string, offset: 0x191): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><c9>
+<1><ca>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xd4>
-DW_AT_name        : (indirect string, offset: 0xf0): __u64
+DW_AT_type        : <0xd5>
+DW_AT_name        : (indirect string, offset: 0x1ba): __u64
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 31
-<1><d4>
+<1><d5>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xd9): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1a3): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
-<1><db>
+<1><dc>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x121): btrfs_ioctl_timespec
+DW_AT_name        : (indirect string, offset: 0x1eb): btrfs_ioctl_timespec
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 382
-<2><e4>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x105): sec
-DW_AT_type        : <0xc9>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 383
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><f3>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x109): nsec
-DW_AT_type        : <0x103>
-DW_AT_decl_file   : 1
 DW_AT_decl_line   : 384
+<2><e5>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1cf): sec
+DW_AT_type        : <0xca>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 385
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><f4>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1d3): nsec
+DW_AT_type        : <0x104>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 386
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><103>
+<1><104>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x10e>
-DW_AT_name        : (indirect string, offset: 0x11b): __u32
+DW_AT_type        : <0x10f>
+DW_AT_name        : (indirect string, offset: 0x1e5): __u32
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 28
-<1><10e>
+<1><10f>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x10e): unsigned int
+DW_AT_name        : (indirect string, offset: 0x1d8): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><115>
+<1><116>
 Abbrev Number: 6 (DW_TAG_array_type)
-DW_AT_type        : <0xc9>
-<2><11a>
+DW_AT_type        : <0xca>
+<2><11b>
 Abbrev Number: 7 (DW_TAG_subrange_type)
-DW_AT_type        : <0xc2>
+DW_AT_type        : <0xc3>
 DW_AT_lower_bound : 0
 DW_AT_count       : 16
diff --git a/mpers-m32/struct_btrfs_ioctl_send_args.d1 b/mpers-m32/struct_btrfs_ioctl_send_args.d1
index 04ee16f..dce241f 100644
--- a/mpers-m32/struct_btrfs_ioctl_send_args.d1
+++ b/mpers-m32/struct_btrfs_ioctl_send_args.d1
@@ -1,100 +1,101 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xd9 (32-bit)
+   Length:        0xda (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_btrfs_ioctl_send_args.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_btrfs_ioctl_send_args.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x66): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0xa1): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 47
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x147): struct_btrfs_ioctl_send_args
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 39
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x131): btrfs_ioctl_send_args
-    <40>   DW_AT_byte_size   : 72
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 399
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xb2): send_fd
-    <49>   DW_AT_type        : <0x9f>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 400
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xce): clone_sources_count
-    <58>   DW_AT_type        : <0xb1>
-    <5c>   DW_AT_decl_file   : 2
-    <5d>   DW_AT_decl_line   : 401
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><62>: Abbrev Number: 5 (DW_TAG_member)
-    <63>   DW_AT_name        : (indirect string, offset: 0xff): clone_sources
-    <67>   DW_AT_type        : <0xc3>
-    <6b>   DW_AT_decl_file   : 2
-    <6c>   DW_AT_decl_line   : 402
-    <6e>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><71>: Abbrev Number: 5 (DW_TAG_member)
-    <72>   DW_AT_name        : (indirect string, offset: 0x10d): parent_root
-    <76>   DW_AT_type        : <0xb1>
-    <7a>   DW_AT_decl_file   : 2
-    <7b>   DW_AT_decl_line   : 403
-    <7d>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><80>: Abbrev Number: 5 (DW_TAG_member)
-    <81>   DW_AT_name        : (indirect string, offset: 0x119): flags
-    <85>   DW_AT_type        : <0xb1>
-    <89>   DW_AT_decl_file   : 2
-    <8a>   DW_AT_decl_line   : 404
-    <8c>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><8f>: Abbrev Number: 5 (DW_TAG_member)
-    <90>   DW_AT_name        : (indirect string, offset: 0x11f): reserved
-    <94>   DW_AT_type        : <0xc8>
-    <98>   DW_AT_decl_file   : 2
-    <99>   DW_AT_decl_line   : 405
-    <9b>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><9e>: Abbrev Number: 0
- <1><9f>: Abbrev Number: 3 (DW_TAG_typedef)
-    <a0>   DW_AT_type        : <0xaa>
-    <a4>   DW_AT_name        : (indirect string, offset: 0xc8): __s64
-    <a8>   DW_AT_decl_file   : 1
-    <a9>   DW_AT_decl_line   : 30
- <1><aa>: Abbrev Number: 6 (DW_TAG_base_type)
-    <ab>   DW_AT_name        : (indirect string, offset: 0xba): long long int
-    <af>   DW_AT_encoding    : 5	(signed)
-    <b0>   DW_AT_byte_size   : 8
- <1><b1>: Abbrev Number: 3 (DW_TAG_typedef)
-    <b2>   DW_AT_type        : <0xbc>
-    <b6>   DW_AT_name        : (indirect string, offset: 0xf9): __u64
-    <ba>   DW_AT_decl_file   : 1
-    <bb>   DW_AT_decl_line   : 31
- <1><bc>: Abbrev Number: 6 (DW_TAG_base_type)
-    <bd>   DW_AT_name        : (indirect string, offset: 0xe2): long long unsigned int
-    <c1>   DW_AT_encoding    : 7	(unsigned)
-    <c2>   DW_AT_byte_size   : 8
- <1><c3>: Abbrev Number: 7 (DW_TAG_pointer_type)
-    <c4>   DW_AT_type        : <0xb1>
- <1><c8>: Abbrev Number: 8 (DW_TAG_array_type)
-    <c9>   DW_AT_type        : <0xb1>
- <2><cd>: Abbrev Number: 9 (DW_TAG_subrange_type)
-    <ce>   DW_AT_type        : <0xd5>
-    <d2>   DW_AT_lower_bound : 0
-    <d3>   DW_AT_count       : 4
- <2><d4>: Abbrev Number: 0
- <1><d5>: Abbrev Number: 10 (DW_TAG_base_type)
-    <d6>   DW_AT_name        : (indirect string, offset: 0x128): sizetype
-    <da>   DW_AT_byte_size   : 8
-    <db>   DW_AT_encoding    : 7	(unsigned)
- <1><dc>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x130): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x16b): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 47
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x211): struct_btrfs_ioctl_send_args
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 39
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1fb): btrfs_ioctl_send_args
+    <41>   DW_AT_byte_size   : 72
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 401
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x17c): send_fd
+    <4a>   DW_AT_type        : <0xa0>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 402
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x198): clone_sources_count
+    <59>   DW_AT_type        : <0xb2>
+    <5d>   DW_AT_decl_file   : 2
+    <5e>   DW_AT_decl_line   : 403
+    <60>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><63>: Abbrev Number: 5 (DW_TAG_member)
+    <64>   DW_AT_name        : (indirect string, offset: 0x1c9): clone_sources
+    <68>   DW_AT_type        : <0xc4>
+    <6c>   DW_AT_decl_file   : 2
+    <6d>   DW_AT_decl_line   : 404
+    <6f>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><72>: Abbrev Number: 5 (DW_TAG_member)
+    <73>   DW_AT_name        : (indirect string, offset: 0x1d7): parent_root
+    <77>   DW_AT_type        : <0xb2>
+    <7b>   DW_AT_decl_file   : 2
+    <7c>   DW_AT_decl_line   : 405
+    <7e>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><81>: Abbrev Number: 5 (DW_TAG_member)
+    <82>   DW_AT_name        : (indirect string, offset: 0x1e3): flags
+    <86>   DW_AT_type        : <0xb2>
+    <8a>   DW_AT_decl_file   : 2
+    <8b>   DW_AT_decl_line   : 406
+    <8d>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><90>: Abbrev Number: 5 (DW_TAG_member)
+    <91>   DW_AT_name        : (indirect string, offset: 0x1e9): reserved
+    <95>   DW_AT_type        : <0xc9>
+    <99>   DW_AT_decl_file   : 2
+    <9a>   DW_AT_decl_line   : 407
+    <9c>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><9f>: Abbrev Number: 0
+ <1><a0>: Abbrev Number: 3 (DW_TAG_typedef)
+    <a1>   DW_AT_type        : <0xab>
+    <a5>   DW_AT_name        : (indirect string, offset: 0x192): __s64
+    <a9>   DW_AT_decl_file   : 1
+    <aa>   DW_AT_decl_line   : 30
+ <1><ab>: Abbrev Number: 6 (DW_TAG_base_type)
+    <ac>   DW_AT_name        : (indirect string, offset: 0x184): long long int
+    <b0>   DW_AT_encoding    : 5	(signed)
+    <b1>   DW_AT_byte_size   : 8
+ <1><b2>: Abbrev Number: 3 (DW_TAG_typedef)
+    <b3>   DW_AT_type        : <0xbd>
+    <b7>   DW_AT_name        : (indirect string, offset: 0x1c3): __u64
+    <bb>   DW_AT_decl_file   : 1
+    <bc>   DW_AT_decl_line   : 31
+ <1><bd>: Abbrev Number: 6 (DW_TAG_base_type)
+    <be>   DW_AT_name        : (indirect string, offset: 0x1ac): long long unsigned int
+    <c2>   DW_AT_encoding    : 7	(unsigned)
+    <c3>   DW_AT_byte_size   : 8
+ <1><c4>: Abbrev Number: 7 (DW_TAG_pointer_type)
+    <c5>   DW_AT_type        : <0xb2>
+ <1><c9>: Abbrev Number: 8 (DW_TAG_array_type)
+    <ca>   DW_AT_type        : <0xb2>
+ <2><ce>: Abbrev Number: 9 (DW_TAG_subrange_type)
+    <cf>   DW_AT_type        : <0xd6>
+    <d3>   DW_AT_lower_bound : 0
+    <d4>   DW_AT_count       : 4
+ <2><d5>: Abbrev Number: 0
+ <1><d6>: Abbrev Number: 10 (DW_TAG_base_type)
+    <d7>   DW_AT_name        : (indirect string, offset: 0x1f2): sizetype
+    <db>   DW_AT_byte_size   : 8
+    <dc>   DW_AT_encoding    : 7	(unsigned)
+ <1><dd>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_btrfs_ioctl_send_args.d2 b/mpers-m32/struct_btrfs_ioctl_send_args.d2
index e5dd66c..4b88319 100644
--- a/mpers-m32/struct_btrfs_ioctl_send_args.d2
+++ b/mpers-m32/struct_btrfs_ioctl_send_args.d2
@@ -1,100 +1,100 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0xa1): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x16b): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 47
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x147): struct_btrfs_ioctl_send_args
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x211): struct_btrfs_ioctl_send_args
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 39
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x131): btrfs_ioctl_send_args
+DW_AT_name        : (indirect string, offset: 0x1fb): btrfs_ioctl_send_args
 DW_AT_byte_size   : 72
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 399
-<2><44>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb2): send_fd
-DW_AT_type        : <0x9f>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 400
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xce): clone_sources_count
-DW_AT_type        : <0xb1>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 401
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><62>
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xff): clone_sources
-DW_AT_type        : <0xc3>
+DW_AT_name        : (indirect string, offset: 0x17c): send_fd
+DW_AT_type        : <0xa0>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 402
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><71>
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10d): parent_root
-DW_AT_type        : <0xb1>
+DW_AT_name        : (indirect string, offset: 0x198): clone_sources_count
+DW_AT_type        : <0xb2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 403
-DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><80>
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><63>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x119): flags
-DW_AT_type        : <0xb1>
+DW_AT_name        : (indirect string, offset: 0x1c9): clone_sources
+DW_AT_type        : <0xc4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 404
-DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><8f>
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><72>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11f): reserved
-DW_AT_type        : <0xc8>
+DW_AT_name        : (indirect string, offset: 0x1d7): parent_root
+DW_AT_type        : <0xb2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 405
+DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+<2><81>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1e3): flags
+DW_AT_type        : <0xb2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 406
+DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+<2><90>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1e9): reserved
+DW_AT_type        : <0xc9>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 407
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<1><9f>
+<1><a0>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xaa>
-DW_AT_name        : (indirect string, offset: 0xc8): __s64
+DW_AT_type        : <0xab>
+DW_AT_name        : (indirect string, offset: 0x192): __s64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 30
-<1><aa>
+<1><ab>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xba): long long int
+DW_AT_name        : (indirect string, offset: 0x184): long long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 8
-<1><b1>
+<1><b2>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xbc>
-DW_AT_name        : (indirect string, offset: 0xf9): __u64
+DW_AT_type        : <0xbd>
+DW_AT_name        : (indirect string, offset: 0x1c3): __u64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
-<1><bc>
+<1><bd>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe2): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1ac): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
-<1><c3>
+<1><c4>
 Abbrev Number: 7 (DW_TAG_pointer_type)
-DW_AT_type        : <0xb1>
-<1><c8>
+DW_AT_type        : <0xb2>
+<1><c9>
 Abbrev Number: 8 (DW_TAG_array_type)
-DW_AT_type        : <0xb1>
-<2><cd>
+DW_AT_type        : <0xb2>
+<2><ce>
 Abbrev Number: 9 (DW_TAG_subrange_type)
-DW_AT_type        : <0xd5>
+DW_AT_type        : <0xd6>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4
-<1><d5>
+<1><d6>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x128): sizetype
+DW_AT_name        : (indirect string, offset: 0x1f2): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
diff --git a/mpers-m32/struct_btrfs_ioctl_vol_args_v2.d1 b/mpers-m32/struct_btrfs_ioctl_vol_args_v2.d1
index 746a93c..c4f9723 100644
--- a/mpers-m32/struct_btrfs_ioctl_vol_args_v2.d1
+++ b/mpers-m32/struct_btrfs_ioctl_vol_args_v2.d1
@@ -1,238 +1,239 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x1eb (32-bit)
+   Length:        0x1ec (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_btrfs_ioctl_vol_args_v2.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_btrfs_ioctl_vol_args_v2.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x68): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0xa3): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 47
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x1c5): struct_btrfs_ioctl_vol_args_v2
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 43
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x1ad): btrfs_ioctl_vol_args_v2
-    <40>   DW_AT_byte_size   : 4096
-    <42>   DW_AT_decl_file   : 2
-    <43>   DW_AT_decl_line   : 67
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xb4): fd
-    <49>   DW_AT_type        : <0xe3>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 68
-    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><52>: Abbrev Number: 5 (DW_TAG_member)
-    <53>   DW_AT_name        : (indirect string, offset: 0xcb): transid
-    <57>   DW_AT_type        : <0xf5>
-    <5b>   DW_AT_decl_file   : 2
-    <5c>   DW_AT_decl_line   : 69
-    <5d>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><60>: Abbrev Number: 5 (DW_TAG_member)
-    <61>   DW_AT_name        : (indirect string, offset: 0xf0): flags
-    <65>   DW_AT_type        : <0xf5>
-    <69>   DW_AT_decl_file   : 2
-    <6a>   DW_AT_decl_line   : 70
-    <6b>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><6e>: Abbrev Number: 6 (DW_TAG_member)
-    <6f>   DW_AT_type        : <0x78>
-    <73>   DW_AT_decl_file   : 2
-    <74>   DW_AT_decl_line   : 71
-    <75>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><78>: Abbrev Number: 7 (DW_TAG_union_type)
-    <79>   DW_AT_byte_size   : 32
-    <7a>   DW_AT_decl_file   : 2
-    <7b>   DW_AT_decl_line   : 71
- <3><7c>: Abbrev Number: 6 (DW_TAG_member)
-    <7d>   DW_AT_type        : <0x86>
-    <81>   DW_AT_decl_file   : 2
-    <82>   DW_AT_decl_line   : 72
-    <83>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><86>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <87>   DW_AT_byte_size   : 16
-    <88>   DW_AT_decl_file   : 2
-    <89>   DW_AT_decl_line   : 72
- <4><8a>: Abbrev Number: 5 (DW_TAG_member)
-    <8b>   DW_AT_name        : (indirect string, offset: 0xf6): size
-    <8f>   DW_AT_type        : <0xf5>
-    <93>   DW_AT_decl_file   : 2
-    <94>   DW_AT_decl_line   : 73
-    <95>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><98>: Abbrev Number: 5 (DW_TAG_member)
-    <99>   DW_AT_name        : (indirect string, offset: 0xfb): qgroup_inherit
-    <9d>   DW_AT_type        : <0x107>
-    <a1>   DW_AT_decl_file   : 2
-    <a2>   DW_AT_decl_line   : 74
-    <a3>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><a6>: Abbrev Number: 0
- <3><a7>: Abbrev Number: 5 (DW_TAG_member)
-    <a8>   DW_AT_name        : (indirect string, offset: 0x196): unused
-    <ac>   DW_AT_type        : <0x1cc>
-    <b0>   DW_AT_decl_file   : 2
-    <b1>   DW_AT_decl_line   : 76
-    <b2>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><b5>: Abbrev Number: 0
- <2><b6>: Abbrev Number: 6 (DW_TAG_member)
-    <b7>   DW_AT_type        : <0xc0>
-    <bb>   DW_AT_decl_file   : 2
-    <bc>   DW_AT_decl_line   : 78
-    <bd>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><c0>: Abbrev Number: 9 (DW_TAG_union_type)
-    <c1>   DW_AT_byte_size   : 4040
-    <c3>   DW_AT_decl_file   : 2
-    <c4>   DW_AT_decl_line   : 78
- <3><c5>: Abbrev Number: 5 (DW_TAG_member)
-    <c6>   DW_AT_name        : (indirect string, offset: 0x19d): name
-    <ca>   DW_AT_type        : <0x1d9>
-    <ce>   DW_AT_decl_file   : 2
-    <cf>   DW_AT_decl_line   : 79
-    <d0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><d3>: Abbrev Number: 5 (DW_TAG_member)
-    <d4>   DW_AT_name        : (indirect string, offset: 0x1a7): devid
-    <d8>   DW_AT_type        : <0xf5>
-    <dc>   DW_AT_decl_file   : 2
-    <dd>   DW_AT_decl_line   : 80
-    <de>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><e1>: Abbrev Number: 0
- <2><e2>: Abbrev Number: 0
- <1><e3>: Abbrev Number: 3 (DW_TAG_typedef)
-    <e4>   DW_AT_type        : <0xee>
-    <e8>   DW_AT_name        : (indirect string, offset: 0xc5): __s64
-    <ec>   DW_AT_decl_file   : 1
-    <ed>   DW_AT_decl_line   : 30
- <1><ee>: Abbrev Number: 10 (DW_TAG_base_type)
-    <ef>   DW_AT_name        : (indirect string, offset: 0xb7): long long int
-    <f3>   DW_AT_encoding    : 5	(signed)
-    <f4>   DW_AT_byte_size   : 8
- <1><f5>: Abbrev Number: 3 (DW_TAG_typedef)
-    <f6>   DW_AT_type        : <0x100>
-    <fa>   DW_AT_name        : (indirect string, offset: 0xea): __u64
-    <fe>   DW_AT_decl_file   : 1
-    <ff>   DW_AT_decl_line   : 31
- <1><100>: Abbrev Number: 10 (DW_TAG_base_type)
-    <101>   DW_AT_name        : (indirect string, offset: 0xd3): long long unsigned int
-    <105>   DW_AT_encoding    : 7	(unsigned)
-    <106>   DW_AT_byte_size   : 8
- <1><107>: Abbrev Number: 11 (DW_TAG_pointer_type)
-    <108>   DW_AT_type        : <0x10c>
- <1><10c>: Abbrev Number: 12 (DW_TAG_structure_type)
-    <10d>   DW_AT_name        : (indirect string, offset: 0x181): btrfs_qgroup_inherit
-    <111>   DW_AT_byte_size   : 72
-    <112>   DW_AT_decl_file   : 2
-    <113>   DW_AT_decl_line   : 51
- <2><114>: Abbrev Number: 5 (DW_TAG_member)
-    <115>   DW_AT_name        : (indirect string, offset: 0xf0): flags
-    <119>   DW_AT_type        : <0xf5>
-    <11d>   DW_AT_decl_file   : 2
-    <11e>   DW_AT_decl_line   : 52
-    <11f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><122>: Abbrev Number: 5 (DW_TAG_member)
-    <123>   DW_AT_name        : (indirect string, offset: 0x10a): num_qgroups
-    <127>   DW_AT_type        : <0xf5>
-    <12b>   DW_AT_decl_file   : 2
-    <12c>   DW_AT_decl_line   : 53
-    <12d>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><130>: Abbrev Number: 5 (DW_TAG_member)
-    <131>   DW_AT_name        : (indirect string, offset: 0x116): num_ref_copies
-    <135>   DW_AT_type        : <0xf5>
-    <139>   DW_AT_decl_file   : 2
-    <13a>   DW_AT_decl_line   : 54
-    <13b>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><13e>: Abbrev Number: 5 (DW_TAG_member)
-    <13f>   DW_AT_name        : (indirect string, offset: 0x125): num_excl_copies
-    <143>   DW_AT_type        : <0xf5>
-    <147>   DW_AT_decl_file   : 2
-    <148>   DW_AT_decl_line   : 55
-    <149>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><14c>: Abbrev Number: 5 (DW_TAG_member)
-    <14d>   DW_AT_name        : (indirect string, offset: 0x135): lim
-    <151>   DW_AT_type        : <0x169>
-    <155>   DW_AT_decl_file   : 2
-    <156>   DW_AT_decl_line   : 56
-    <157>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><15a>: Abbrev Number: 5 (DW_TAG_member)
-    <15b>   DW_AT_name        : (indirect string, offset: 0x170): qgroups
-    <15f>   DW_AT_type        : <0x1b8>
-    <163>   DW_AT_decl_file   : 2
-    <164>   DW_AT_decl_line   : 57
-    <165>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
- <2><168>: Abbrev Number: 0
- <1><169>: Abbrev Number: 12 (DW_TAG_structure_type)
-    <16a>   DW_AT_name        : (indirect string, offset: 0x15d): btrfs_qgroup_limit
-    <16e>   DW_AT_byte_size   : 40
-    <16f>   DW_AT_decl_file   : 2
-    <170>   DW_AT_decl_line   : 43
- <2><171>: Abbrev Number: 5 (DW_TAG_member)
-    <172>   DW_AT_name        : (indirect string, offset: 0xf0): flags
-    <176>   DW_AT_type        : <0xf5>
-    <17a>   DW_AT_decl_file   : 2
-    <17b>   DW_AT_decl_line   : 44
-    <17c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><17f>: Abbrev Number: 5 (DW_TAG_member)
-    <180>   DW_AT_name        : (indirect string, offset: 0x139): max_rfer
-    <184>   DW_AT_type        : <0xf5>
-    <188>   DW_AT_decl_file   : 2
-    <189>   DW_AT_decl_line   : 45
-    <18a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><18d>: Abbrev Number: 5 (DW_TAG_member)
-    <18e>   DW_AT_name        : (indirect string, offset: 0x142): max_excl
-    <192>   DW_AT_type        : <0xf5>
-    <196>   DW_AT_decl_file   : 2
-    <197>   DW_AT_decl_line   : 46
-    <198>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><19b>: Abbrev Number: 5 (DW_TAG_member)
-    <19c>   DW_AT_name        : (indirect string, offset: 0x14b): rsv_rfer
-    <1a0>   DW_AT_type        : <0xf5>
-    <1a4>   DW_AT_decl_file   : 2
-    <1a5>   DW_AT_decl_line   : 47
-    <1a6>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><1a9>: Abbrev Number: 5 (DW_TAG_member)
-    <1aa>   DW_AT_name        : (indirect string, offset: 0x154): rsv_excl
-    <1ae>   DW_AT_type        : <0xf5>
-    <1b2>   DW_AT_decl_file   : 2
-    <1b3>   DW_AT_decl_line   : 48
-    <1b4>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><1b7>: Abbrev Number: 0
- <1><1b8>: Abbrev Number: 13 (DW_TAG_array_type)
-    <1b9>   DW_AT_type        : <0xf5>
- <2><1bd>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <1be>   DW_AT_type        : <0x1c5>
-    <1c2>   DW_AT_lower_bound : 0
-    <1c3>   DW_AT_count       : 0
- <2><1c4>: Abbrev Number: 0
- <1><1c5>: Abbrev Number: 15 (DW_TAG_base_type)
-    <1c6>   DW_AT_name        : (indirect string, offset: 0x178): sizetype
-    <1ca>   DW_AT_byte_size   : 8
-    <1cb>   DW_AT_encoding    : 7	(unsigned)
- <1><1cc>: Abbrev Number: 13 (DW_TAG_array_type)
-    <1cd>   DW_AT_type        : <0xf5>
- <2><1d1>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <1d2>   DW_AT_type        : <0x1c5>
-    <1d6>   DW_AT_lower_bound : 0
-    <1d7>   DW_AT_count       : 4
- <2><1d8>: Abbrev Number: 0
- <1><1d9>: Abbrev Number: 13 (DW_TAG_array_type)
-    <1da>   DW_AT_type        : <0x1e7>
- <2><1de>: Abbrev Number: 16 (DW_TAG_subrange_type)
-    <1df>   DW_AT_type        : <0x1c5>
-    <1e3>   DW_AT_lower_bound : 0
-    <1e4>   DW_AT_count       : 4040
- <2><1e6>: Abbrev Number: 0
- <1><1e7>: Abbrev Number: 10 (DW_TAG_base_type)
-    <1e8>   DW_AT_name        : (indirect string, offset: 0x1a2): char
-    <1ec>   DW_AT_encoding    : 8	(unsigned char)
-    <1ed>   DW_AT_byte_size   : 1
- <1><1ee>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x132): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x16d): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 47
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x28f): struct_btrfs_ioctl_vol_args_v2
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 43
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x277): btrfs_ioctl_vol_args_v2
+    <41>   DW_AT_byte_size   : 4096
+    <43>   DW_AT_decl_file   : 2
+    <44>   DW_AT_decl_line   : 67
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x17e): fd
+    <4a>   DW_AT_type        : <0xe4>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 68
+    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><53>: Abbrev Number: 5 (DW_TAG_member)
+    <54>   DW_AT_name        : (indirect string, offset: 0x195): transid
+    <58>   DW_AT_type        : <0xf6>
+    <5c>   DW_AT_decl_file   : 2
+    <5d>   DW_AT_decl_line   : 69
+    <5e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><61>: Abbrev Number: 5 (DW_TAG_member)
+    <62>   DW_AT_name        : (indirect string, offset: 0x1ba): flags
+    <66>   DW_AT_type        : <0xf6>
+    <6a>   DW_AT_decl_file   : 2
+    <6b>   DW_AT_decl_line   : 70
+    <6c>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><6f>: Abbrev Number: 6 (DW_TAG_member)
+    <70>   DW_AT_type        : <0x79>
+    <74>   DW_AT_decl_file   : 2
+    <75>   DW_AT_decl_line   : 71
+    <76>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><79>: Abbrev Number: 7 (DW_TAG_union_type)
+    <7a>   DW_AT_byte_size   : 32
+    <7b>   DW_AT_decl_file   : 2
+    <7c>   DW_AT_decl_line   : 71
+ <3><7d>: Abbrev Number: 6 (DW_TAG_member)
+    <7e>   DW_AT_type        : <0x87>
+    <82>   DW_AT_decl_file   : 2
+    <83>   DW_AT_decl_line   : 72
+    <84>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><87>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <88>   DW_AT_byte_size   : 16
+    <89>   DW_AT_decl_file   : 2
+    <8a>   DW_AT_decl_line   : 72
+ <4><8b>: Abbrev Number: 5 (DW_TAG_member)
+    <8c>   DW_AT_name        : (indirect string, offset: 0x1c0): size
+    <90>   DW_AT_type        : <0xf6>
+    <94>   DW_AT_decl_file   : 2
+    <95>   DW_AT_decl_line   : 73
+    <96>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><99>: Abbrev Number: 5 (DW_TAG_member)
+    <9a>   DW_AT_name        : (indirect string, offset: 0x1c5): qgroup_inherit
+    <9e>   DW_AT_type        : <0x108>
+    <a2>   DW_AT_decl_file   : 2
+    <a3>   DW_AT_decl_line   : 74
+    <a4>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><a7>: Abbrev Number: 0
+ <3><a8>: Abbrev Number: 5 (DW_TAG_member)
+    <a9>   DW_AT_name        : (indirect string, offset: 0x260): unused
+    <ad>   DW_AT_type        : <0x1cd>
+    <b1>   DW_AT_decl_file   : 2
+    <b2>   DW_AT_decl_line   : 76
+    <b3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><b6>: Abbrev Number: 0
+ <2><b7>: Abbrev Number: 6 (DW_TAG_member)
+    <b8>   DW_AT_type        : <0xc1>
+    <bc>   DW_AT_decl_file   : 2
+    <bd>   DW_AT_decl_line   : 78
+    <be>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><c1>: Abbrev Number: 9 (DW_TAG_union_type)
+    <c2>   DW_AT_byte_size   : 4040
+    <c4>   DW_AT_decl_file   : 2
+    <c5>   DW_AT_decl_line   : 78
+ <3><c6>: Abbrev Number: 5 (DW_TAG_member)
+    <c7>   DW_AT_name        : (indirect string, offset: 0x267): name
+    <cb>   DW_AT_type        : <0x1da>
+    <cf>   DW_AT_decl_file   : 2
+    <d0>   DW_AT_decl_line   : 79
+    <d1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><d4>: Abbrev Number: 5 (DW_TAG_member)
+    <d5>   DW_AT_name        : (indirect string, offset: 0x271): devid
+    <d9>   DW_AT_type        : <0xf6>
+    <dd>   DW_AT_decl_file   : 2
+    <de>   DW_AT_decl_line   : 80
+    <df>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><e2>: Abbrev Number: 0
+ <2><e3>: Abbrev Number: 0
+ <1><e4>: Abbrev Number: 3 (DW_TAG_typedef)
+    <e5>   DW_AT_type        : <0xef>
+    <e9>   DW_AT_name        : (indirect string, offset: 0x18f): __s64
+    <ed>   DW_AT_decl_file   : 1
+    <ee>   DW_AT_decl_line   : 30
+ <1><ef>: Abbrev Number: 10 (DW_TAG_base_type)
+    <f0>   DW_AT_name        : (indirect string, offset: 0x181): long long int
+    <f4>   DW_AT_encoding    : 5	(signed)
+    <f5>   DW_AT_byte_size   : 8
+ <1><f6>: Abbrev Number: 3 (DW_TAG_typedef)
+    <f7>   DW_AT_type        : <0x101>
+    <fb>   DW_AT_name        : (indirect string, offset: 0x1b4): __u64
+    <ff>   DW_AT_decl_file   : 1
+    <100>   DW_AT_decl_line   : 31
+ <1><101>: Abbrev Number: 10 (DW_TAG_base_type)
+    <102>   DW_AT_name        : (indirect string, offset: 0x19d): long long unsigned int
+    <106>   DW_AT_encoding    : 7	(unsigned)
+    <107>   DW_AT_byte_size   : 8
+ <1><108>: Abbrev Number: 11 (DW_TAG_pointer_type)
+    <109>   DW_AT_type        : <0x10d>
+ <1><10d>: Abbrev Number: 12 (DW_TAG_structure_type)
+    <10e>   DW_AT_name        : (indirect string, offset: 0x24b): btrfs_qgroup_inherit
+    <112>   DW_AT_byte_size   : 72
+    <113>   DW_AT_decl_file   : 2
+    <114>   DW_AT_decl_line   : 51
+ <2><115>: Abbrev Number: 5 (DW_TAG_member)
+    <116>   DW_AT_name        : (indirect string, offset: 0x1ba): flags
+    <11a>   DW_AT_type        : <0xf6>
+    <11e>   DW_AT_decl_file   : 2
+    <11f>   DW_AT_decl_line   : 52
+    <120>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><123>: Abbrev Number: 5 (DW_TAG_member)
+    <124>   DW_AT_name        : (indirect string, offset: 0x1d4): num_qgroups
+    <128>   DW_AT_type        : <0xf6>
+    <12c>   DW_AT_decl_file   : 2
+    <12d>   DW_AT_decl_line   : 53
+    <12e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><131>: Abbrev Number: 5 (DW_TAG_member)
+    <132>   DW_AT_name        : (indirect string, offset: 0x1e0): num_ref_copies
+    <136>   DW_AT_type        : <0xf6>
+    <13a>   DW_AT_decl_file   : 2
+    <13b>   DW_AT_decl_line   : 54
+    <13c>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><13f>: Abbrev Number: 5 (DW_TAG_member)
+    <140>   DW_AT_name        : (indirect string, offset: 0x1ef): num_excl_copies
+    <144>   DW_AT_type        : <0xf6>
+    <148>   DW_AT_decl_file   : 2
+    <149>   DW_AT_decl_line   : 55
+    <14a>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><14d>: Abbrev Number: 5 (DW_TAG_member)
+    <14e>   DW_AT_name        : (indirect string, offset: 0x1ff): lim
+    <152>   DW_AT_type        : <0x16a>
+    <156>   DW_AT_decl_file   : 2
+    <157>   DW_AT_decl_line   : 56
+    <158>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><15b>: Abbrev Number: 5 (DW_TAG_member)
+    <15c>   DW_AT_name        : (indirect string, offset: 0x23a): qgroups
+    <160>   DW_AT_type        : <0x1b9>
+    <164>   DW_AT_decl_file   : 2
+    <165>   DW_AT_decl_line   : 57
+    <166>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
+ <2><169>: Abbrev Number: 0
+ <1><16a>: Abbrev Number: 12 (DW_TAG_structure_type)
+    <16b>   DW_AT_name        : (indirect string, offset: 0x227): btrfs_qgroup_limit
+    <16f>   DW_AT_byte_size   : 40
+    <170>   DW_AT_decl_file   : 2
+    <171>   DW_AT_decl_line   : 43
+ <2><172>: Abbrev Number: 5 (DW_TAG_member)
+    <173>   DW_AT_name        : (indirect string, offset: 0x1ba): flags
+    <177>   DW_AT_type        : <0xf6>
+    <17b>   DW_AT_decl_file   : 2
+    <17c>   DW_AT_decl_line   : 44
+    <17d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><180>: Abbrev Number: 5 (DW_TAG_member)
+    <181>   DW_AT_name        : (indirect string, offset: 0x203): max_rfer
+    <185>   DW_AT_type        : <0xf6>
+    <189>   DW_AT_decl_file   : 2
+    <18a>   DW_AT_decl_line   : 45
+    <18b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><18e>: Abbrev Number: 5 (DW_TAG_member)
+    <18f>   DW_AT_name        : (indirect string, offset: 0x20c): max_excl
+    <193>   DW_AT_type        : <0xf6>
+    <197>   DW_AT_decl_file   : 2
+    <198>   DW_AT_decl_line   : 46
+    <199>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><19c>: Abbrev Number: 5 (DW_TAG_member)
+    <19d>   DW_AT_name        : (indirect string, offset: 0x215): rsv_rfer
+    <1a1>   DW_AT_type        : <0xf6>
+    <1a5>   DW_AT_decl_file   : 2
+    <1a6>   DW_AT_decl_line   : 47
+    <1a7>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><1aa>: Abbrev Number: 5 (DW_TAG_member)
+    <1ab>   DW_AT_name        : (indirect string, offset: 0x21e): rsv_excl
+    <1af>   DW_AT_type        : <0xf6>
+    <1b3>   DW_AT_decl_file   : 2
+    <1b4>   DW_AT_decl_line   : 48
+    <1b5>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><1b8>: Abbrev Number: 0
+ <1><1b9>: Abbrev Number: 13 (DW_TAG_array_type)
+    <1ba>   DW_AT_type        : <0xf6>
+ <2><1be>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <1bf>   DW_AT_type        : <0x1c6>
+    <1c3>   DW_AT_lower_bound : 0
+    <1c4>   DW_AT_count       : 0
+ <2><1c5>: Abbrev Number: 0
+ <1><1c6>: Abbrev Number: 15 (DW_TAG_base_type)
+    <1c7>   DW_AT_name        : (indirect string, offset: 0x242): sizetype
+    <1cb>   DW_AT_byte_size   : 8
+    <1cc>   DW_AT_encoding    : 7	(unsigned)
+ <1><1cd>: Abbrev Number: 13 (DW_TAG_array_type)
+    <1ce>   DW_AT_type        : <0xf6>
+ <2><1d2>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <1d3>   DW_AT_type        : <0x1c6>
+    <1d7>   DW_AT_lower_bound : 0
+    <1d8>   DW_AT_count       : 4
+ <2><1d9>: Abbrev Number: 0
+ <1><1da>: Abbrev Number: 13 (DW_TAG_array_type)
+    <1db>   DW_AT_type        : <0x1e8>
+ <2><1df>: Abbrev Number: 16 (DW_TAG_subrange_type)
+    <1e0>   DW_AT_type        : <0x1c6>
+    <1e4>   DW_AT_lower_bound : 0
+    <1e5>   DW_AT_count       : 4040
+ <2><1e7>: Abbrev Number: 0
+ <1><1e8>: Abbrev Number: 10 (DW_TAG_base_type)
+    <1e9>   DW_AT_name        : (indirect string, offset: 0x26c): char
+    <1ed>   DW_AT_encoding    : 8	(unsigned char)
+    <1ee>   DW_AT_byte_size   : 1
+ <1><1ef>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_btrfs_ioctl_vol_args_v2.d2 b/mpers-m32/struct_btrfs_ioctl_vol_args_v2.d2
index 6ed8b10..1c7bbd5 100644
--- a/mpers-m32/struct_btrfs_ioctl_vol_args_v2.d2
+++ b/mpers-m32/struct_btrfs_ioctl_vol_args_v2.d2
@@ -1,257 +1,257 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0xa3): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x16d): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 47
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x1c5): struct_btrfs_ioctl_vol_args_v2
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x28f): struct_btrfs_ioctl_vol_args_v2
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 43
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1ad): btrfs_ioctl_vol_args_v2
+DW_AT_name        : (indirect string, offset: 0x277): btrfs_ioctl_vol_args_v2
 DW_AT_byte_size   : 4096
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 67
-<2><44>
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb4): fd
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x17e): fd
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 68
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><52>
+<2><53>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcb): transid
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x195): transid
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 69
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><60>
+<2><61>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf0): flags
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1ba): flags
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 70
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><6e>
+<2><6f>
 Abbrev Number: 6 (DW_TAG_member)
-DW_AT_type        : <0x78>
+DW_AT_type        : <0x79>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 71
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><78>
+<2><79>
 Abbrev Number: 7 (DW_TAG_union_type)
 DW_AT_byte_size   : 32
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 71
-<3><7c>
+<3><7d>
 Abbrev Number: 6 (DW_TAG_member)
-DW_AT_type        : <0x86>
+DW_AT_type        : <0x87>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 72
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><86>
+<3><87>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 72
-<4><8a>
+<4><8b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf6): size
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1c0): size
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 73
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><98>
+<4><99>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfb): qgroup_inherit
-DW_AT_type        : <0x107>
+DW_AT_name        : (indirect string, offset: 0x1c5): qgroup_inherit
+DW_AT_type        : <0x108>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 74
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<3><a7>
+<3><a8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x196): unused
-DW_AT_type        : <0x1cc>
+DW_AT_name        : (indirect string, offset: 0x260): unused
+DW_AT_type        : <0x1cd>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 76
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><b6>
+<2><b7>
 Abbrev Number: 6 (DW_TAG_member)
-DW_AT_type        : <0xc0>
+DW_AT_type        : <0xc1>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 78
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><c0>
+<2><c1>
 Abbrev Number: 9 (DW_TAG_union_type)
 DW_AT_byte_size   : 4040
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 78
-<3><c5>
+<3><c6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x19d): name
-DW_AT_type        : <0x1d9>
+DW_AT_name        : (indirect string, offset: 0x267): name
+DW_AT_type        : <0x1da>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 79
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><d3>
+<3><d4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1a7): devid
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x271): devid
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 80
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><e3>
+<1><e4>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xee>
-DW_AT_name        : (indirect string, offset: 0xc5): __s64
+DW_AT_type        : <0xef>
+DW_AT_name        : (indirect string, offset: 0x18f): __s64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 30
-<1><ee>
+<1><ef>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb7): long long int
+DW_AT_name        : (indirect string, offset: 0x181): long long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 8
-<1><f5>
+<1><f6>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x100>
-DW_AT_name        : (indirect string, offset: 0xea): __u64
+DW_AT_type        : <0x101>
+DW_AT_name        : (indirect string, offset: 0x1b4): __u64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
-<1><100>
+<1><101>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xd3): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x19d): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
-<1><107>
+<1><108>
 Abbrev Number: 11 (DW_TAG_pointer_type)
-DW_AT_type        : <0x10c>
-<1><10c>
+DW_AT_type        : <0x10d>
+<1><10d>
 Abbrev Number: 12 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x181): btrfs_qgroup_inherit
+DW_AT_name        : (indirect string, offset: 0x24b): btrfs_qgroup_inherit
 DW_AT_byte_size   : 72
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 51
-<2><114>
+<2><115>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf0): flags
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1ba): flags
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 52
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><122>
+<2><123>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10a): num_qgroups
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1d4): num_qgroups
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 53
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><130>
+<2><131>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x116): num_ref_copies
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1e0): num_ref_copies
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 54
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><13e>
+<2><13f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x125): num_excl_copies
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1ef): num_excl_copies
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 55
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><14c>
+<2><14d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x135): lim
-DW_AT_type        : <0x169>
+DW_AT_name        : (indirect string, offset: 0x1ff): lim
+DW_AT_type        : <0x16a>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 56
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><15a>
+<2><15b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x170): qgroups
-DW_AT_type        : <0x1b8>
+DW_AT_name        : (indirect string, offset: 0x23a): qgroups
+DW_AT_type        : <0x1b9>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 57
 DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
-<1><169>
+<1><16a>
 Abbrev Number: 12 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x15d): btrfs_qgroup_limit
+DW_AT_name        : (indirect string, offset: 0x227): btrfs_qgroup_limit
 DW_AT_byte_size   : 40
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 43
-<2><171>
+<2><172>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf0): flags
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1ba): flags
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 44
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><17f>
+<2><180>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x139): max_rfer
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x203): max_rfer
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 45
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><18d>
+<2><18e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x142): max_excl
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x20c): max_excl
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 46
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><19b>
+<2><19c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14b): rsv_rfer
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x215): rsv_rfer
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 47
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><1a9>
+<2><1aa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x154): rsv_excl
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x21e): rsv_excl
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 48
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<1><1b8>
+<1><1b9>
 Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0xf5>
-<2><1bd>
+DW_AT_type        : <0xf6>
+<2><1be>
 Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x1c5>
+DW_AT_type        : <0x1c6>
 DW_AT_lower_bound : 0
 DW_AT_count       : 0
-<1><1c5>
+<1><1c6>
 Abbrev Number: 15 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x178): sizetype
+DW_AT_name        : (indirect string, offset: 0x242): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><1cc>
+<1><1cd>
 Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0xf5>
-<2><1d1>
+DW_AT_type        : <0xf6>
+<2><1d2>
 Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x1c5>
+DW_AT_type        : <0x1c6>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4
-<1><1d9>
+<1><1da>
 Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x1e7>
-<2><1de>
+DW_AT_type        : <0x1e8>
+<2><1df>
 Abbrev Number: 16 (DW_TAG_subrange_type)
-DW_AT_type        : <0x1c5>
+DW_AT_type        : <0x1c6>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4040
-<1><1e7>
+<1><1e8>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1a2): char
+DW_AT_name        : (indirect string, offset: 0x26c): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
diff --git a/mpers-m32/struct_ff_effect.d1 b/mpers-m32/struct_ff_effect.d1
index 45c3928..7ac19e0 100644
--- a/mpers-m32/struct_ff_effect.d1
+++ b/mpers-m32/struct_ff_effect.d1
@@ -1,366 +1,367 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x30d (32-bit)
+   Length:        0x30e (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_ff_effect.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_ff_effect.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5a): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 42
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x2cd): struct_ff_effect
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 38
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x2c3): ff_effect
-    <40>   DW_AT_byte_size   : 44
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 166
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa6): type
-    <48>   DW_AT_type        : <0xe3>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 167
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xc0): id
-    <56>   DW_AT_type        : <0xf5>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 168
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xcf): direction
-    <64>   DW_AT_type        : <0xe3>
-    <68>   DW_AT_decl_file   : 2
-    <69>   DW_AT_decl_line   : 169
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xd9): trigger
-    <72>   DW_AT_type        : <0x107>
-    <76>   DW_AT_decl_file   : 2
-    <77>   DW_AT_decl_line   : 170
-    <78>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0xfc): replay
-    <80>   DW_AT_type        : <0x12c>
-    <84>   DW_AT_decl_file   : 2
-    <85>   DW_AT_decl_line   : 171
-    <86>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x11a): u
-    <8e>   DW_AT_type        : <0x97>
-    <92>   DW_AT_decl_file   : 2
-    <93>   DW_AT_decl_line   : 178
-    <94>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><97>: Abbrev Number: 6 (DW_TAG_union_type)
-    <98>   DW_AT_byte_size   : 28
-    <99>   DW_AT_decl_file   : 2
-    <9a>   DW_AT_decl_line   : 172
- <3><9b>: Abbrev Number: 5 (DW_TAG_member)
-    <9c>   DW_AT_name        : (indirect string, offset: 0x11c): constant
-    <a0>   DW_AT_type        : <0x151>
-    <a4>   DW_AT_decl_file   : 2
-    <a5>   DW_AT_decl_line   : 173
-    <a6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><a9>: Abbrev Number: 5 (DW_TAG_member)
-    <aa>   DW_AT_name        : (indirect string, offset: 0x185): ramp
-    <ae>   DW_AT_type        : <0x1b7>
-    <b2>   DW_AT_decl_file   : 2
-    <b3>   DW_AT_decl_line   : 174
-    <b4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><b7>: Abbrev Number: 5 (DW_TAG_member)
-    <b8>   DW_AT_name        : (indirect string, offset: 0x1af): periodic
-    <bc>   DW_AT_type        : <0x1ea>
-    <c0>   DW_AT_decl_file   : 2
-    <c1>   DW_AT_decl_line   : 175
-    <c2>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><c5>: Abbrev Number: 5 (DW_TAG_member)
-    <c6>   DW_AT_name        : (indirect string, offset: 0x21c): condition
-    <ca>   DW_AT_type        : <0x27a>
-    <ce>   DW_AT_decl_file   : 2
-    <cf>   DW_AT_decl_line   : 176
-    <d0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><d3>: Abbrev Number: 5 (DW_TAG_member)
-    <d4>   DW_AT_name        : (indirect string, offset: 0x28b): rumble
-    <d8>   DW_AT_type        : <0x2eb>
-    <dc>   DW_AT_decl_file   : 2
-    <dd>   DW_AT_decl_line   : 177
-    <de>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><e1>: Abbrev Number: 0
- <2><e2>: Abbrev Number: 0
- <1><e3>: Abbrev Number: 3 (DW_TAG_typedef)
-    <e4>   DW_AT_type        : <0xee>
-    <e8>   DW_AT_name        : (indirect string, offset: 0xba): __u16
-    <ec>   DW_AT_decl_file   : 1
-    <ed>   DW_AT_decl_line   : 26
- <1><ee>: Abbrev Number: 7 (DW_TAG_base_type)
-    <ef>   DW_AT_name        : (indirect string, offset: 0xab): unsigned short
-    <f3>   DW_AT_encoding    : 7	(unsigned)
-    <f4>   DW_AT_byte_size   : 2
- <1><f5>: Abbrev Number: 3 (DW_TAG_typedef)
-    <f6>   DW_AT_type        : <0x100>
-    <fa>   DW_AT_name        : (indirect string, offset: 0xc9): __s16
-    <fe>   DW_AT_decl_file   : 1
-    <ff>   DW_AT_decl_line   : 25
- <1><100>: Abbrev Number: 7 (DW_TAG_base_type)
-    <101>   DW_AT_name        : (indirect string, offset: 0xc3): short
-    <105>   DW_AT_encoding    : 5	(signed)
-    <106>   DW_AT_byte_size   : 2
- <1><107>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <108>   DW_AT_name        : (indirect string, offset: 0xf1): ff_trigger
-    <10c>   DW_AT_byte_size   : 4
-    <10d>   DW_AT_decl_file   : 2
-    <10e>   DW_AT_decl_line   : 125
- <2><10f>: Abbrev Number: 5 (DW_TAG_member)
-    <110>   DW_AT_name        : (indirect string, offset: 0xe1): button
-    <114>   DW_AT_type        : <0xe3>
-    <118>   DW_AT_decl_file   : 2
-    <119>   DW_AT_decl_line   : 126
-    <11a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><11d>: Abbrev Number: 5 (DW_TAG_member)
-    <11e>   DW_AT_name        : (indirect string, offset: 0xe8): interval
-    <122>   DW_AT_type        : <0xe3>
-    <126>   DW_AT_decl_file   : 2
-    <127>   DW_AT_decl_line   : 127
-    <128>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><12b>: Abbrev Number: 0
- <1><12c>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <12d>   DW_AT_name        : (indirect string, offset: 0x110): ff_replay
-    <131>   DW_AT_byte_size   : 4
-    <132>   DW_AT_decl_file   : 2
-    <133>   DW_AT_decl_line   : 121
- <2><134>: Abbrev Number: 5 (DW_TAG_member)
-    <135>   DW_AT_name        : (indirect string, offset: 0x103): length
-    <139>   DW_AT_type        : <0xe3>
-    <13d>   DW_AT_decl_file   : 2
-    <13e>   DW_AT_decl_line   : 122
-    <13f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><142>: Abbrev Number: 5 (DW_TAG_member)
-    <143>   DW_AT_name        : (indirect string, offset: 0x10a): delay
-    <147>   DW_AT_type        : <0xe3>
-    <14b>   DW_AT_decl_file   : 2
-    <14c>   DW_AT_decl_line   : 123
-    <14d>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><150>: Abbrev Number: 0
- <1><151>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <152>   DW_AT_name        : (indirect string, offset: 0x172): ff_constant_effect
-    <156>   DW_AT_byte_size   : 10
-    <157>   DW_AT_decl_file   : 2
-    <158>   DW_AT_decl_line   : 135
- <2><159>: Abbrev Number: 5 (DW_TAG_member)
-    <15a>   DW_AT_name        : (indirect string, offset: 0x125): level
-    <15e>   DW_AT_type        : <0xf5>
-    <162>   DW_AT_decl_file   : 2
-    <163>   DW_AT_decl_line   : 136
-    <164>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><167>: Abbrev Number: 5 (DW_TAG_member)
-    <168>   DW_AT_name        : (indirect string, offset: 0x12b): envelope
-    <16c>   DW_AT_type        : <0x176>
-    <170>   DW_AT_decl_file   : 2
-    <171>   DW_AT_decl_line   : 137
-    <172>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><175>: Abbrev Number: 0
- <1><176>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <177>   DW_AT_name        : (indirect string, offset: 0x166): ff_envelope
-    <17b>   DW_AT_byte_size   : 8
-    <17c>   DW_AT_decl_file   : 2
-    <17d>   DW_AT_decl_line   : 129
- <2><17e>: Abbrev Number: 5 (DW_TAG_member)
-    <17f>   DW_AT_name        : (indirect string, offset: 0x134): attack_length
-    <183>   DW_AT_type        : <0xe3>
-    <187>   DW_AT_decl_file   : 2
-    <188>   DW_AT_decl_line   : 130
-    <189>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><18c>: Abbrev Number: 5 (DW_TAG_member)
-    <18d>   DW_AT_name        : (indirect string, offset: 0x142): attack_level
-    <191>   DW_AT_type        : <0xe3>
-    <195>   DW_AT_decl_file   : 2
-    <196>   DW_AT_decl_line   : 131
-    <197>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><19a>: Abbrev Number: 5 (DW_TAG_member)
-    <19b>   DW_AT_name        : (indirect string, offset: 0x14f): fade_length
-    <19f>   DW_AT_type        : <0xe3>
-    <1a3>   DW_AT_decl_file   : 2
-    <1a4>   DW_AT_decl_line   : 132
-    <1a5>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><1a8>: Abbrev Number: 5 (DW_TAG_member)
-    <1a9>   DW_AT_name        : (indirect string, offset: 0x15b): fade_level
-    <1ad>   DW_AT_type        : <0xe3>
-    <1b1>   DW_AT_decl_file   : 2
-    <1b2>   DW_AT_decl_line   : 133
-    <1b3>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
- <2><1b6>: Abbrev Number: 0
- <1><1b7>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <1b8>   DW_AT_name        : (indirect string, offset: 0x1a0): ff_ramp_effect
-    <1bc>   DW_AT_byte_size   : 12
-    <1bd>   DW_AT_decl_file   : 2
-    <1be>   DW_AT_decl_line   : 139
- <2><1bf>: Abbrev Number: 5 (DW_TAG_member)
-    <1c0>   DW_AT_name        : (indirect string, offset: 0x18a): start_level
-    <1c4>   DW_AT_type        : <0xf5>
-    <1c8>   DW_AT_decl_file   : 2
-    <1c9>   DW_AT_decl_line   : 140
-    <1ca>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><1cd>: Abbrev Number: 5 (DW_TAG_member)
-    <1ce>   DW_AT_name        : (indirect string, offset: 0x196): end_level
-    <1d2>   DW_AT_type        : <0xf5>
-    <1d6>   DW_AT_decl_file   : 2
-    <1d7>   DW_AT_decl_line   : 141
-    <1d8>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><1db>: Abbrev Number: 5 (DW_TAG_member)
-    <1dc>   DW_AT_name        : (indirect string, offset: 0x12b): envelope
-    <1e0>   DW_AT_type        : <0x176>
-    <1e4>   DW_AT_decl_file   : 2
-    <1e5>   DW_AT_decl_line   : 142
-    <1e6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><1e9>: Abbrev Number: 0
- <1><1ea>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <1eb>   DW_AT_name        : (indirect string, offset: 0x209): ff_periodic_effect
-    <1ef>   DW_AT_byte_size   : 28
-    <1f0>   DW_AT_decl_file   : 2
-    <1f1>   DW_AT_decl_line   : 152
- <2><1f2>: Abbrev Number: 5 (DW_TAG_member)
-    <1f3>   DW_AT_name        : (indirect string, offset: 0x1b8): waveform
-    <1f7>   DW_AT_type        : <0xe3>
-    <1fb>   DW_AT_decl_file   : 2
-    <1fc>   DW_AT_decl_line   : 153
-    <1fd>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><200>: Abbrev Number: 5 (DW_TAG_member)
-    <201>   DW_AT_name        : (indirect string, offset: 0x1c1): period
-    <205>   DW_AT_type        : <0xe3>
-    <209>   DW_AT_decl_file   : 2
-    <20a>   DW_AT_decl_line   : 154
-    <20b>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><20e>: Abbrev Number: 5 (DW_TAG_member)
-    <20f>   DW_AT_name        : (indirect string, offset: 0x1c8): magnitude
-    <213>   DW_AT_type        : <0xf5>
-    <217>   DW_AT_decl_file   : 2
-    <218>   DW_AT_decl_line   : 155
-    <219>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><21c>: Abbrev Number: 5 (DW_TAG_member)
-    <21d>   DW_AT_name        : (indirect string, offset: 0x1d2): offset
-    <221>   DW_AT_type        : <0xf5>
-    <225>   DW_AT_decl_file   : 2
-    <226>   DW_AT_decl_line   : 156
-    <227>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
- <2><22a>: Abbrev Number: 5 (DW_TAG_member)
-    <22b>   DW_AT_name        : (indirect string, offset: 0x1d9): phase
-    <22f>   DW_AT_type        : <0xe3>
-    <233>   DW_AT_decl_file   : 2
-    <234>   DW_AT_decl_line   : 157
-    <235>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><238>: Abbrev Number: 5 (DW_TAG_member)
-    <239>   DW_AT_name        : (indirect string, offset: 0x12b): envelope
-    <23d>   DW_AT_type        : <0x176>
-    <241>   DW_AT_decl_file   : 2
-    <242>   DW_AT_decl_line   : 158
-    <243>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
- <2><246>: Abbrev Number: 5 (DW_TAG_member)
-    <247>   DW_AT_name        : (indirect string, offset: 0x1df): custom_len
-    <24b>   DW_AT_type        : <0x263>
-    <24f>   DW_AT_decl_file   : 2
-    <250>   DW_AT_decl_line   : 159
-    <251>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><254>: Abbrev Number: 5 (DW_TAG_member)
-    <255>   DW_AT_name        : (indirect string, offset: 0x1fd): custom_data
-    <259>   DW_AT_type        : <0x275>
-    <25d>   DW_AT_decl_file   : 2
-    <25e>   DW_AT_decl_line   : 160
-    <25f>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><262>: Abbrev Number: 0
- <1><263>: Abbrev Number: 3 (DW_TAG_typedef)
-    <264>   DW_AT_type        : <0x26e>
-    <268>   DW_AT_name        : (indirect string, offset: 0x1f7): __u32
-    <26c>   DW_AT_decl_file   : 1
-    <26d>   DW_AT_decl_line   : 28
- <1><26e>: Abbrev Number: 7 (DW_TAG_base_type)
-    <26f>   DW_AT_name        : (indirect string, offset: 0x1ea): unsigned int
-    <273>   DW_AT_encoding    : 7	(unsigned)
-    <274>   DW_AT_byte_size   : 4
- <1><275>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <276>   DW_AT_type        : <0xf5>
- <1><27a>: Abbrev Number: 9 (DW_TAG_array_type)
-    <27b>   DW_AT_type        : <0x287>
- <2><27f>: Abbrev Number: 10 (DW_TAG_subrange_type)
-    <280>   DW_AT_type        : <0x2e4>
-    <284>   DW_AT_lower_bound : 0
-    <285>   DW_AT_count       : 2
- <2><286>: Abbrev Number: 0
- <1><287>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <288>   DW_AT_name        : (indirect string, offset: 0x26e): ff_condition_effect
-    <28c>   DW_AT_byte_size   : 12
-    <28d>   DW_AT_decl_file   : 2
-    <28e>   DW_AT_decl_line   : 144
- <2><28f>: Abbrev Number: 5 (DW_TAG_member)
-    <290>   DW_AT_name        : (indirect string, offset: 0x226): right_saturation
-    <294>   DW_AT_type        : <0xe3>
-    <298>   DW_AT_decl_file   : 2
-    <299>   DW_AT_decl_line   : 145
-    <29a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><29d>: Abbrev Number: 5 (DW_TAG_member)
-    <29e>   DW_AT_name        : (indirect string, offset: 0x237): left_saturation
-    <2a2>   DW_AT_type        : <0xe3>
-    <2a6>   DW_AT_decl_file   : 2
-    <2a7>   DW_AT_decl_line   : 146
-    <2a8>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><2ab>: Abbrev Number: 5 (DW_TAG_member)
-    <2ac>   DW_AT_name        : (indirect string, offset: 0x247): right_coeff
-    <2b0>   DW_AT_type        : <0xf5>
-    <2b4>   DW_AT_decl_file   : 2
-    <2b5>   DW_AT_decl_line   : 147
-    <2b6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><2b9>: Abbrev Number: 5 (DW_TAG_member)
-    <2ba>   DW_AT_name        : (indirect string, offset: 0x253): left_coeff
-    <2be>   DW_AT_type        : <0xf5>
-    <2c2>   DW_AT_decl_file   : 2
-    <2c3>   DW_AT_decl_line   : 148
-    <2c4>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
- <2><2c7>: Abbrev Number: 5 (DW_TAG_member)
-    <2c8>   DW_AT_name        : (indirect string, offset: 0x25e): deadband
-    <2cc>   DW_AT_type        : <0xe3>
-    <2d0>   DW_AT_decl_file   : 2
-    <2d1>   DW_AT_decl_line   : 149
-    <2d2>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><2d5>: Abbrev Number: 5 (DW_TAG_member)
-    <2d6>   DW_AT_name        : (indirect string, offset: 0x267): center
-    <2da>   DW_AT_type        : <0xf5>
-    <2de>   DW_AT_decl_file   : 2
-    <2df>   DW_AT_decl_line   : 150
-    <2e0>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
- <2><2e3>: Abbrev Number: 0
- <1><2e4>: Abbrev Number: 11 (DW_TAG_base_type)
-    <2e5>   DW_AT_name        : (indirect string, offset: 0x282): sizetype
-    <2e9>   DW_AT_byte_size   : 8
-    <2ea>   DW_AT_encoding    : 7	(unsigned)
- <1><2eb>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <2ec>   DW_AT_name        : (indirect string, offset: 0x2b2): ff_rumble_effect
-    <2f0>   DW_AT_byte_size   : 4
-    <2f1>   DW_AT_decl_file   : 2
-    <2f2>   DW_AT_decl_line   : 162
- <2><2f3>: Abbrev Number: 5 (DW_TAG_member)
-    <2f4>   DW_AT_name        : (indirect string, offset: 0x292): strong_magnitude
-    <2f8>   DW_AT_type        : <0xe3>
-    <2fc>   DW_AT_decl_file   : 2
-    <2fd>   DW_AT_decl_line   : 163
-    <2fe>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><301>: Abbrev Number: 5 (DW_TAG_member)
-    <302>   DW_AT_name        : (indirect string, offset: 0x2a3): weak_magnitude
-    <306>   DW_AT_type        : <0xe3>
-    <30a>   DW_AT_decl_file   : 2
-    <30b>   DW_AT_decl_line   : 164
-    <30c>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><30f>: Abbrev Number: 0
- <1><310>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x124): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 42
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x397): struct_ff_effect
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 38
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x38d): ff_effect
+    <41>   DW_AT_byte_size   : 44
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 166
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x170): type
+    <49>   DW_AT_type        : <0xe4>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 167
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x18a): id
+    <57>   DW_AT_type        : <0xf6>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 168
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x199): direction
+    <65>   DW_AT_type        : <0xe4>
+    <69>   DW_AT_decl_file   : 2
+    <6a>   DW_AT_decl_line   : 169
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1a3): trigger
+    <73>   DW_AT_type        : <0x108>
+    <77>   DW_AT_decl_file   : 2
+    <78>   DW_AT_decl_line   : 170
+    <79>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1c6): replay
+    <81>   DW_AT_type        : <0x12d>
+    <85>   DW_AT_decl_file   : 2
+    <86>   DW_AT_decl_line   : 171
+    <87>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1e4): u
+    <8f>   DW_AT_type        : <0x98>
+    <93>   DW_AT_decl_file   : 2
+    <94>   DW_AT_decl_line   : 178
+    <95>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><98>: Abbrev Number: 6 (DW_TAG_union_type)
+    <99>   DW_AT_byte_size   : 28
+    <9a>   DW_AT_decl_file   : 2
+    <9b>   DW_AT_decl_line   : 172
+ <3><9c>: Abbrev Number: 5 (DW_TAG_member)
+    <9d>   DW_AT_name        : (indirect string, offset: 0x1e6): constant
+    <a1>   DW_AT_type        : <0x152>
+    <a5>   DW_AT_decl_file   : 2
+    <a6>   DW_AT_decl_line   : 173
+    <a7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><aa>: Abbrev Number: 5 (DW_TAG_member)
+    <ab>   DW_AT_name        : (indirect string, offset: 0x24f): ramp
+    <af>   DW_AT_type        : <0x1b8>
+    <b3>   DW_AT_decl_file   : 2
+    <b4>   DW_AT_decl_line   : 174
+    <b5>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><b8>: Abbrev Number: 5 (DW_TAG_member)
+    <b9>   DW_AT_name        : (indirect string, offset: 0x279): periodic
+    <bd>   DW_AT_type        : <0x1eb>
+    <c1>   DW_AT_decl_file   : 2
+    <c2>   DW_AT_decl_line   : 175
+    <c3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><c6>: Abbrev Number: 5 (DW_TAG_member)
+    <c7>   DW_AT_name        : (indirect string, offset: 0x2e6): condition
+    <cb>   DW_AT_type        : <0x27b>
+    <cf>   DW_AT_decl_file   : 2
+    <d0>   DW_AT_decl_line   : 176
+    <d1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><d4>: Abbrev Number: 5 (DW_TAG_member)
+    <d5>   DW_AT_name        : (indirect string, offset: 0x355): rumble
+    <d9>   DW_AT_type        : <0x2ec>
+    <dd>   DW_AT_decl_file   : 2
+    <de>   DW_AT_decl_line   : 177
+    <df>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><e2>: Abbrev Number: 0
+ <2><e3>: Abbrev Number: 0
+ <1><e4>: Abbrev Number: 3 (DW_TAG_typedef)
+    <e5>   DW_AT_type        : <0xef>
+    <e9>   DW_AT_name        : (indirect string, offset: 0x184): __u16
+    <ed>   DW_AT_decl_file   : 1
+    <ee>   DW_AT_decl_line   : 26
+ <1><ef>: Abbrev Number: 7 (DW_TAG_base_type)
+    <f0>   DW_AT_name        : (indirect string, offset: 0x175): unsigned short
+    <f4>   DW_AT_encoding    : 7	(unsigned)
+    <f5>   DW_AT_byte_size   : 2
+ <1><f6>: Abbrev Number: 3 (DW_TAG_typedef)
+    <f7>   DW_AT_type        : <0x101>
+    <fb>   DW_AT_name        : (indirect string, offset: 0x193): __s16
+    <ff>   DW_AT_decl_file   : 1
+    <100>   DW_AT_decl_line   : 25
+ <1><101>: Abbrev Number: 7 (DW_TAG_base_type)
+    <102>   DW_AT_name        : (indirect string, offset: 0x18d): short
+    <106>   DW_AT_encoding    : 5	(signed)
+    <107>   DW_AT_byte_size   : 2
+ <1><108>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <109>   DW_AT_name        : (indirect string, offset: 0x1bb): ff_trigger
+    <10d>   DW_AT_byte_size   : 4
+    <10e>   DW_AT_decl_file   : 2
+    <10f>   DW_AT_decl_line   : 125
+ <2><110>: Abbrev Number: 5 (DW_TAG_member)
+    <111>   DW_AT_name        : (indirect string, offset: 0x1ab): button
+    <115>   DW_AT_type        : <0xe4>
+    <119>   DW_AT_decl_file   : 2
+    <11a>   DW_AT_decl_line   : 126
+    <11b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><11e>: Abbrev Number: 5 (DW_TAG_member)
+    <11f>   DW_AT_name        : (indirect string, offset: 0x1b2): interval
+    <123>   DW_AT_type        : <0xe4>
+    <127>   DW_AT_decl_file   : 2
+    <128>   DW_AT_decl_line   : 127
+    <129>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><12c>: Abbrev Number: 0
+ <1><12d>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <12e>   DW_AT_name        : (indirect string, offset: 0x1da): ff_replay
+    <132>   DW_AT_byte_size   : 4
+    <133>   DW_AT_decl_file   : 2
+    <134>   DW_AT_decl_line   : 121
+ <2><135>: Abbrev Number: 5 (DW_TAG_member)
+    <136>   DW_AT_name        : (indirect string, offset: 0x1cd): length
+    <13a>   DW_AT_type        : <0xe4>
+    <13e>   DW_AT_decl_file   : 2
+    <13f>   DW_AT_decl_line   : 122
+    <140>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><143>: Abbrev Number: 5 (DW_TAG_member)
+    <144>   DW_AT_name        : (indirect string, offset: 0x1d4): delay
+    <148>   DW_AT_type        : <0xe4>
+    <14c>   DW_AT_decl_file   : 2
+    <14d>   DW_AT_decl_line   : 123
+    <14e>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><151>: Abbrev Number: 0
+ <1><152>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <153>   DW_AT_name        : (indirect string, offset: 0x23c): ff_constant_effect
+    <157>   DW_AT_byte_size   : 10
+    <158>   DW_AT_decl_file   : 2
+    <159>   DW_AT_decl_line   : 135
+ <2><15a>: Abbrev Number: 5 (DW_TAG_member)
+    <15b>   DW_AT_name        : (indirect string, offset: 0x1ef): level
+    <15f>   DW_AT_type        : <0xf6>
+    <163>   DW_AT_decl_file   : 2
+    <164>   DW_AT_decl_line   : 136
+    <165>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><168>: Abbrev Number: 5 (DW_TAG_member)
+    <169>   DW_AT_name        : (indirect string, offset: 0x1f5): envelope
+    <16d>   DW_AT_type        : <0x177>
+    <171>   DW_AT_decl_file   : 2
+    <172>   DW_AT_decl_line   : 137
+    <173>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><176>: Abbrev Number: 0
+ <1><177>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <178>   DW_AT_name        : (indirect string, offset: 0x230): ff_envelope
+    <17c>   DW_AT_byte_size   : 8
+    <17d>   DW_AT_decl_file   : 2
+    <17e>   DW_AT_decl_line   : 129
+ <2><17f>: Abbrev Number: 5 (DW_TAG_member)
+    <180>   DW_AT_name        : (indirect string, offset: 0x1fe): attack_length
+    <184>   DW_AT_type        : <0xe4>
+    <188>   DW_AT_decl_file   : 2
+    <189>   DW_AT_decl_line   : 130
+    <18a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><18d>: Abbrev Number: 5 (DW_TAG_member)
+    <18e>   DW_AT_name        : (indirect string, offset: 0x20c): attack_level
+    <192>   DW_AT_type        : <0xe4>
+    <196>   DW_AT_decl_file   : 2
+    <197>   DW_AT_decl_line   : 131
+    <198>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><19b>: Abbrev Number: 5 (DW_TAG_member)
+    <19c>   DW_AT_name        : (indirect string, offset: 0x219): fade_length
+    <1a0>   DW_AT_type        : <0xe4>
+    <1a4>   DW_AT_decl_file   : 2
+    <1a5>   DW_AT_decl_line   : 132
+    <1a6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><1a9>: Abbrev Number: 5 (DW_TAG_member)
+    <1aa>   DW_AT_name        : (indirect string, offset: 0x225): fade_level
+    <1ae>   DW_AT_type        : <0xe4>
+    <1b2>   DW_AT_decl_file   : 2
+    <1b3>   DW_AT_decl_line   : 133
+    <1b4>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
+ <2><1b7>: Abbrev Number: 0
+ <1><1b8>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <1b9>   DW_AT_name        : (indirect string, offset: 0x26a): ff_ramp_effect
+    <1bd>   DW_AT_byte_size   : 12
+    <1be>   DW_AT_decl_file   : 2
+    <1bf>   DW_AT_decl_line   : 139
+ <2><1c0>: Abbrev Number: 5 (DW_TAG_member)
+    <1c1>   DW_AT_name        : (indirect string, offset: 0x254): start_level
+    <1c5>   DW_AT_type        : <0xf6>
+    <1c9>   DW_AT_decl_file   : 2
+    <1ca>   DW_AT_decl_line   : 140
+    <1cb>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><1ce>: Abbrev Number: 5 (DW_TAG_member)
+    <1cf>   DW_AT_name        : (indirect string, offset: 0x260): end_level
+    <1d3>   DW_AT_type        : <0xf6>
+    <1d7>   DW_AT_decl_file   : 2
+    <1d8>   DW_AT_decl_line   : 141
+    <1d9>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><1dc>: Abbrev Number: 5 (DW_TAG_member)
+    <1dd>   DW_AT_name        : (indirect string, offset: 0x1f5): envelope
+    <1e1>   DW_AT_type        : <0x177>
+    <1e5>   DW_AT_decl_file   : 2
+    <1e6>   DW_AT_decl_line   : 142
+    <1e7>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><1ea>: Abbrev Number: 0
+ <1><1eb>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <1ec>   DW_AT_name        : (indirect string, offset: 0x2d3): ff_periodic_effect
+    <1f0>   DW_AT_byte_size   : 28
+    <1f1>   DW_AT_decl_file   : 2
+    <1f2>   DW_AT_decl_line   : 152
+ <2><1f3>: Abbrev Number: 5 (DW_TAG_member)
+    <1f4>   DW_AT_name        : (indirect string, offset: 0x282): waveform
+    <1f8>   DW_AT_type        : <0xe4>
+    <1fc>   DW_AT_decl_file   : 2
+    <1fd>   DW_AT_decl_line   : 153
+    <1fe>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><201>: Abbrev Number: 5 (DW_TAG_member)
+    <202>   DW_AT_name        : (indirect string, offset: 0x28b): period
+    <206>   DW_AT_type        : <0xe4>
+    <20a>   DW_AT_decl_file   : 2
+    <20b>   DW_AT_decl_line   : 154
+    <20c>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><20f>: Abbrev Number: 5 (DW_TAG_member)
+    <210>   DW_AT_name        : (indirect string, offset: 0x292): magnitude
+    <214>   DW_AT_type        : <0xf6>
+    <218>   DW_AT_decl_file   : 2
+    <219>   DW_AT_decl_line   : 155
+    <21a>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><21d>: Abbrev Number: 5 (DW_TAG_member)
+    <21e>   DW_AT_name        : (indirect string, offset: 0x29c): offset
+    <222>   DW_AT_type        : <0xf6>
+    <226>   DW_AT_decl_file   : 2
+    <227>   DW_AT_decl_line   : 156
+    <228>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
+ <2><22b>: Abbrev Number: 5 (DW_TAG_member)
+    <22c>   DW_AT_name        : (indirect string, offset: 0x2a3): phase
+    <230>   DW_AT_type        : <0xe4>
+    <234>   DW_AT_decl_file   : 2
+    <235>   DW_AT_decl_line   : 157
+    <236>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><239>: Abbrev Number: 5 (DW_TAG_member)
+    <23a>   DW_AT_name        : (indirect string, offset: 0x1f5): envelope
+    <23e>   DW_AT_type        : <0x177>
+    <242>   DW_AT_decl_file   : 2
+    <243>   DW_AT_decl_line   : 158
+    <244>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+ <2><247>: Abbrev Number: 5 (DW_TAG_member)
+    <248>   DW_AT_name        : (indirect string, offset: 0x2a9): custom_len
+    <24c>   DW_AT_type        : <0x264>
+    <250>   DW_AT_decl_file   : 2
+    <251>   DW_AT_decl_line   : 159
+    <252>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><255>: Abbrev Number: 5 (DW_TAG_member)
+    <256>   DW_AT_name        : (indirect string, offset: 0x2c7): custom_data
+    <25a>   DW_AT_type        : <0x276>
+    <25e>   DW_AT_decl_file   : 2
+    <25f>   DW_AT_decl_line   : 160
+    <260>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><263>: Abbrev Number: 0
+ <1><264>: Abbrev Number: 3 (DW_TAG_typedef)
+    <265>   DW_AT_type        : <0x26f>
+    <269>   DW_AT_name        : (indirect string, offset: 0x2c1): __u32
+    <26d>   DW_AT_decl_file   : 1
+    <26e>   DW_AT_decl_line   : 28
+ <1><26f>: Abbrev Number: 7 (DW_TAG_base_type)
+    <270>   DW_AT_name        : (indirect string, offset: 0x2b4): unsigned int
+    <274>   DW_AT_encoding    : 7	(unsigned)
+    <275>   DW_AT_byte_size   : 4
+ <1><276>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <277>   DW_AT_type        : <0xf6>
+ <1><27b>: Abbrev Number: 9 (DW_TAG_array_type)
+    <27c>   DW_AT_type        : <0x288>
+ <2><280>: Abbrev Number: 10 (DW_TAG_subrange_type)
+    <281>   DW_AT_type        : <0x2e5>
+    <285>   DW_AT_lower_bound : 0
+    <286>   DW_AT_count       : 2
+ <2><287>: Abbrev Number: 0
+ <1><288>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <289>   DW_AT_name        : (indirect string, offset: 0x338): ff_condition_effect
+    <28d>   DW_AT_byte_size   : 12
+    <28e>   DW_AT_decl_file   : 2
+    <28f>   DW_AT_decl_line   : 144
+ <2><290>: Abbrev Number: 5 (DW_TAG_member)
+    <291>   DW_AT_name        : (indirect string, offset: 0x2f0): right_saturation
+    <295>   DW_AT_type        : <0xe4>
+    <299>   DW_AT_decl_file   : 2
+    <29a>   DW_AT_decl_line   : 145
+    <29b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><29e>: Abbrev Number: 5 (DW_TAG_member)
+    <29f>   DW_AT_name        : (indirect string, offset: 0x301): left_saturation
+    <2a3>   DW_AT_type        : <0xe4>
+    <2a7>   DW_AT_decl_file   : 2
+    <2a8>   DW_AT_decl_line   : 146
+    <2a9>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><2ac>: Abbrev Number: 5 (DW_TAG_member)
+    <2ad>   DW_AT_name        : (indirect string, offset: 0x311): right_coeff
+    <2b1>   DW_AT_type        : <0xf6>
+    <2b5>   DW_AT_decl_file   : 2
+    <2b6>   DW_AT_decl_line   : 147
+    <2b7>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><2ba>: Abbrev Number: 5 (DW_TAG_member)
+    <2bb>   DW_AT_name        : (indirect string, offset: 0x31d): left_coeff
+    <2bf>   DW_AT_type        : <0xf6>
+    <2c3>   DW_AT_decl_file   : 2
+    <2c4>   DW_AT_decl_line   : 148
+    <2c5>   DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
+ <2><2c8>: Abbrev Number: 5 (DW_TAG_member)
+    <2c9>   DW_AT_name        : (indirect string, offset: 0x328): deadband
+    <2cd>   DW_AT_type        : <0xe4>
+    <2d1>   DW_AT_decl_file   : 2
+    <2d2>   DW_AT_decl_line   : 149
+    <2d3>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><2d6>: Abbrev Number: 5 (DW_TAG_member)
+    <2d7>   DW_AT_name        : (indirect string, offset: 0x331): center
+    <2db>   DW_AT_type        : <0xf6>
+    <2df>   DW_AT_decl_file   : 2
+    <2e0>   DW_AT_decl_line   : 150
+    <2e1>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+ <2><2e4>: Abbrev Number: 0
+ <1><2e5>: Abbrev Number: 11 (DW_TAG_base_type)
+    <2e6>   DW_AT_name        : (indirect string, offset: 0x34c): sizetype
+    <2ea>   DW_AT_byte_size   : 8
+    <2eb>   DW_AT_encoding    : 7	(unsigned)
+ <1><2ec>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <2ed>   DW_AT_name        : (indirect string, offset: 0x37c): ff_rumble_effect
+    <2f1>   DW_AT_byte_size   : 4
+    <2f2>   DW_AT_decl_file   : 2
+    <2f3>   DW_AT_decl_line   : 162
+ <2><2f4>: Abbrev Number: 5 (DW_TAG_member)
+    <2f5>   DW_AT_name        : (indirect string, offset: 0x35c): strong_magnitude
+    <2f9>   DW_AT_type        : <0xe4>
+    <2fd>   DW_AT_decl_file   : 2
+    <2fe>   DW_AT_decl_line   : 163
+    <2ff>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><302>: Abbrev Number: 5 (DW_TAG_member)
+    <303>   DW_AT_name        : (indirect string, offset: 0x36d): weak_magnitude
+    <307>   DW_AT_type        : <0xe4>
+    <30b>   DW_AT_decl_file   : 2
+    <30c>   DW_AT_decl_line   : 164
+    <30d>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><310>: Abbrev Number: 0
+ <1><311>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_ff_effect.d2 b/mpers-m32/struct_ff_effect.d2
index 5523f80..32e43a2 100644
--- a/mpers-m32/struct_ff_effect.d2
+++ b/mpers-m32/struct_ff_effect.d2
@@ -1,402 +1,402 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 42
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x2cd): struct_ff_effect
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x397): struct_ff_effect
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 38
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x2c3): ff_effect
+DW_AT_name        : (indirect string, offset: 0x38d): ff_effect
 DW_AT_byte_size   : 44
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 166
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa6): type
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x170): type
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 167
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc0): id
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x18a): id
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 168
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcf): direction
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x199): direction
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 169
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd9): trigger
-DW_AT_type        : <0x107>
+DW_AT_name        : (indirect string, offset: 0x1a3): trigger
+DW_AT_type        : <0x108>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 170
 DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfc): replay
-DW_AT_type        : <0x12c>
+DW_AT_name        : (indirect string, offset: 0x1c6): replay
+DW_AT_type        : <0x12d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 171
 DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11a): u
-DW_AT_type        : <0x97>
+DW_AT_name        : (indirect string, offset: 0x1e4): u
+DW_AT_type        : <0x98>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 178
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><97>
+<2><98>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 28
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 172
-<3><9b>
+<3><9c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11c): constant
-DW_AT_type        : <0x151>
+DW_AT_name        : (indirect string, offset: 0x1e6): constant
+DW_AT_type        : <0x152>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 173
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><a9>
+<3><aa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x185): ramp
-DW_AT_type        : <0x1b7>
+DW_AT_name        : (indirect string, offset: 0x24f): ramp
+DW_AT_type        : <0x1b8>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 174
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><b7>
+<3><b8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1af): periodic
-DW_AT_type        : <0x1ea>
+DW_AT_name        : (indirect string, offset: 0x279): periodic
+DW_AT_type        : <0x1eb>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 175
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><c5>
+<3><c6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x21c): condition
-DW_AT_type        : <0x27a>
+DW_AT_name        : (indirect string, offset: 0x2e6): condition
+DW_AT_type        : <0x27b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 176
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><d3>
+<3><d4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x28b): rumble
-DW_AT_type        : <0x2eb>
+DW_AT_name        : (indirect string, offset: 0x355): rumble
+DW_AT_type        : <0x2ec>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 177
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><e3>
+<1><e4>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xee>
-DW_AT_name        : (indirect string, offset: 0xba): __u16
+DW_AT_type        : <0xef>
+DW_AT_name        : (indirect string, offset: 0x184): __u16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
-<1><ee>
+<1><ef>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xab): unsigned short
+DW_AT_name        : (indirect string, offset: 0x175): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><f5>
+<1><f6>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x100>
-DW_AT_name        : (indirect string, offset: 0xc9): __s16
+DW_AT_type        : <0x101>
+DW_AT_name        : (indirect string, offset: 0x193): __s16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 25
-<1><100>
+<1><101>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc3): short
+DW_AT_name        : (indirect string, offset: 0x18d): short
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 2
-<1><107>
+<1><108>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xf1): ff_trigger
+DW_AT_name        : (indirect string, offset: 0x1bb): ff_trigger
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 125
-<2><10f>
+<2><110>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe1): button
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x1ab): button
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 126
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><11d>
+<2><11e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe8): interval
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x1b2): interval
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 127
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<1><12c>
+<1><12d>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x110): ff_replay
+DW_AT_name        : (indirect string, offset: 0x1da): ff_replay
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 121
-<2><134>
+<2><135>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x103): length
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x1cd): length
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 122
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><142>
+<2><143>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10a): delay
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x1d4): delay
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 123
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<1><151>
+<1><152>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x172): ff_constant_effect
+DW_AT_name        : (indirect string, offset: 0x23c): ff_constant_effect
 DW_AT_byte_size   : 10
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 135
-<2><159>
+<2><15a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x125): level
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1ef): level
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 136
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><167>
+<2><168>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12b): envelope
-DW_AT_type        : <0x176>
+DW_AT_name        : (indirect string, offset: 0x1f5): envelope
+DW_AT_type        : <0x177>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 137
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<1><176>
+<1><177>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x166): ff_envelope
+DW_AT_name        : (indirect string, offset: 0x230): ff_envelope
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 129
-<2><17e>
+<2><17f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x134): attack_length
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x1fe): attack_length
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 130
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><18c>
+<2><18d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x142): attack_level
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x20c): attack_level
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 131
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><19a>
+<2><19b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14f): fade_length
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x219): fade_length
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 132
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><1a8>
+<2><1a9>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15b): fade_level
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x225): fade_level
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 133
 DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
-<1><1b7>
+<1><1b8>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1a0): ff_ramp_effect
+DW_AT_name        : (indirect string, offset: 0x26a): ff_ramp_effect
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 139
-<2><1bf>
+<2><1c0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x18a): start_level
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x254): start_level
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 140
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><1cd>
+<2><1ce>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x196): end_level
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x260): end_level
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 141
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><1db>
+<2><1dc>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12b): envelope
-DW_AT_type        : <0x176>
+DW_AT_name        : (indirect string, offset: 0x1f5): envelope
+DW_AT_type        : <0x177>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 142
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><1ea>
+<1><1eb>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x209): ff_periodic_effect
+DW_AT_name        : (indirect string, offset: 0x2d3): ff_periodic_effect
 DW_AT_byte_size   : 28
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 152
-<2><1f2>
+<2><1f3>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1b8): waveform
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x282): waveform
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 153
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><200>
+<2><201>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1c1): period
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x28b): period
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 154
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><20e>
+<2><20f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1c8): magnitude
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x292): magnitude
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 155
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><21c>
+<2><21d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d2): offset
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x29c): offset
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 156
 DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
-<2><22a>
+<2><22b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d9): phase
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x2a3): phase
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 157
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><238>
+<2><239>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12b): envelope
-DW_AT_type        : <0x176>
+DW_AT_name        : (indirect string, offset: 0x1f5): envelope
+DW_AT_type        : <0x177>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 158
 DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
-<2><246>
+<2><247>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1df): custom_len
-DW_AT_type        : <0x263>
+DW_AT_name        : (indirect string, offset: 0x2a9): custom_len
+DW_AT_type        : <0x264>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 159
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><254>
+<2><255>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1fd): custom_data
-DW_AT_type        : <0x275>
+DW_AT_name        : (indirect string, offset: 0x2c7): custom_data
+DW_AT_type        : <0x276>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 160
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<1><263>
+<1><264>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x26e>
-DW_AT_name        : (indirect string, offset: 0x1f7): __u32
+DW_AT_type        : <0x26f>
+DW_AT_name        : (indirect string, offset: 0x2c1): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><26e>
+<1><26f>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1ea): unsigned int
+DW_AT_name        : (indirect string, offset: 0x2b4): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><275>
+<1><276>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0xf5>
-<1><27a>
+DW_AT_type        : <0xf6>
+<1><27b>
 Abbrev Number: 9 (DW_TAG_array_type)
-DW_AT_type        : <0x287>
-<2><27f>
+DW_AT_type        : <0x288>
+<2><280>
 Abbrev Number: 10 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2e4>
+DW_AT_type        : <0x2e5>
 DW_AT_lower_bound : 0
 DW_AT_count       : 2
-<1><287>
+<1><288>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x26e): ff_condition_effect
+DW_AT_name        : (indirect string, offset: 0x338): ff_condition_effect
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 144
-<2><28f>
+<2><290>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x226): right_saturation
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x2f0): right_saturation
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 145
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><29d>
+<2><29e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x237): left_saturation
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x301): left_saturation
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 146
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><2ab>
+<2><2ac>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x247): right_coeff
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x311): right_coeff
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 147
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><2b9>
+<2><2ba>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x253): left_coeff
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x31d): left_coeff
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 148
 DW_AT_data_member_location: 2 byte block: 23 6 	(DW_OP_plus_uconst: 6)
-<2><2c7>
+<2><2c8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x25e): deadband
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x328): deadband
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 149
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><2d5>
+<2><2d6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x267): center
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x331): center
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 150
 DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
-<1><2e4>
+<1><2e5>
 Abbrev Number: 11 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x282): sizetype
+DW_AT_name        : (indirect string, offset: 0x34c): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><2eb>
+<1><2ec>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x2b2): ff_rumble_effect
+DW_AT_name        : (indirect string, offset: 0x37c): ff_rumble_effect
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 162
-<2><2f3>
+<2><2f4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x292): strong_magnitude
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x35c): strong_magnitude
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 163
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><301>
+<2><302>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2a3): weak_magnitude
-DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x36d): weak_magnitude
+DW_AT_type        : <0xe4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 164
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
diff --git a/mpers-m32/struct_flock.d1 b/mpers-m32/struct_flock.d1
index bb915ba..cfa00cc 100644
--- a/mpers-m32/struct_flock.d1
+++ b/mpers-m32/struct_flock.d1
@@ -1,95 +1,96 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xc8 (32-bit)
+   Length:        0xc9 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_flock.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_flock.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x56): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x91): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 4
-    <29>   DW_AT_decl_line   : 36
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x121): struct_flock
-    <39>   DW_AT_decl_file   : 4
-    <3a>   DW_AT_decl_line   : 33
- <1><3b>: Abbrev Number: 3 (DW_TAG_typedef)
-    <3c>   DW_AT_type        : <0x46>
-    <40>   DW_AT_name        : (indirect string, offset: 0x10d): struct_kernel_flock
-    <44>   DW_AT_decl_file   : 3
-    <45>   DW_AT_decl_line   : 35
- <1><46>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <47>   DW_AT_name        : (indirect string, offset: 0x107): flock
-    <4b>   DW_AT_byte_size   : 16
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 148
- <2><4e>: Abbrev Number: 5 (DW_TAG_member)
-    <4f>   DW_AT_name        : (indirect string, offset: 0xa2): l_type
-    <53>   DW_AT_type        : <0x95>
-    <57>   DW_AT_decl_file   : 1
-    <58>   DW_AT_decl_line   : 149
-    <59>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><5c>: Abbrev Number: 5 (DW_TAG_member)
-    <5d>   DW_AT_name        : (indirect string, offset: 0xaf): l_whence
-    <61>   DW_AT_type        : <0x95>
-    <65>   DW_AT_decl_file   : 1
-    <66>   DW_AT_decl_line   : 150
-    <67>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><6a>: Abbrev Number: 5 (DW_TAG_member)
-    <6b>   DW_AT_name        : (indirect string, offset: 0xb8): l_start
-    <6f>   DW_AT_type        : <0x9c>
-    <73>   DW_AT_decl_file   : 1
-    <74>   DW_AT_decl_line   : 151
-    <75>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><78>: Abbrev Number: 5 (DW_TAG_member)
-    <79>   DW_AT_name        : (indirect string, offset: 0xe8): l_len
-    <7d>   DW_AT_type        : <0x9c>
-    <81>   DW_AT_decl_file   : 1
-    <82>   DW_AT_decl_line   : 152
-    <83>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><86>: Abbrev Number: 5 (DW_TAG_member)
-    <87>   DW_AT_name        : (indirect string, offset: 0xee): l_pid
-    <8b>   DW_AT_type        : <0xb9>
-    <8f>   DW_AT_decl_file   : 1
-    <90>   DW_AT_decl_line   : 153
-    <91>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><94>: Abbrev Number: 0
- <1><95>: Abbrev Number: 6 (DW_TAG_base_type)
-    <96>   DW_AT_name        : (indirect string, offset: 0xa9): short
-    <9a>   DW_AT_encoding    : 5	(signed)
-    <9b>   DW_AT_byte_size   : 2
- <1><9c>: Abbrev Number: 3 (DW_TAG_typedef)
-    <9d>   DW_AT_type        : <0xa7>
-    <a1>   DW_AT_name        : (indirect string, offset: 0xd9): __kernel_off_t
-    <a5>   DW_AT_decl_file   : 2
-    <a6>   DW_AT_decl_line   : 75
- <1><a7>: Abbrev Number: 3 (DW_TAG_typedef)
-    <a8>   DW_AT_type        : <0xb2>
-    <ac>   DW_AT_name        : (indirect string, offset: 0xc9): __kernel_long_t
-    <b0>   DW_AT_decl_file   : 2
-    <b1>   DW_AT_decl_line   : 23
- <1><b2>: Abbrev Number: 6 (DW_TAG_base_type)
-    <b3>   DW_AT_name        : (indirect string, offset: 0xc0): long int
-    <b7>   DW_AT_encoding    : 5	(signed)
-    <b8>   DW_AT_byte_size   : 4
- <1><b9>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ba>   DW_AT_type        : <0xc4>
-    <be>   DW_AT_name        : (indirect string, offset: 0xf8): __kernel_pid_t
-    <c2>   DW_AT_decl_file   : 2
-    <c3>   DW_AT_decl_line   : 33
- <1><c4>: Abbrev Number: 6 (DW_TAG_base_type)
-    <c5>   DW_AT_name        : (indirect string, offset: 0xf4): int
-    <c9>   DW_AT_encoding    : 5	(signed)
-    <ca>   DW_AT_byte_size   : 4
- <1><cb>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x120): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15b): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 4
+    <2a>   DW_AT_decl_line   : 36
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1eb): struct_flock
+    <3a>   DW_AT_decl_file   : 4
+    <3b>   DW_AT_decl_line   : 33
+ <1><3c>: Abbrev Number: 3 (DW_TAG_typedef)
+    <3d>   DW_AT_type        : <0x47>
+    <41>   DW_AT_name        : (indirect string, offset: 0x1d7): struct_kernel_flock
+    <45>   DW_AT_decl_file   : 3
+    <46>   DW_AT_decl_line   : 35
+ <1><47>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <48>   DW_AT_name        : (indirect string, offset: 0x1d1): flock
+    <4c>   DW_AT_byte_size   : 16
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 148
+ <2><4f>: Abbrev Number: 5 (DW_TAG_member)
+    <50>   DW_AT_name        : (indirect string, offset: 0x16c): l_type
+    <54>   DW_AT_type        : <0x96>
+    <58>   DW_AT_decl_file   : 1
+    <59>   DW_AT_decl_line   : 149
+    <5a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><5d>: Abbrev Number: 5 (DW_TAG_member)
+    <5e>   DW_AT_name        : (indirect string, offset: 0x179): l_whence
+    <62>   DW_AT_type        : <0x96>
+    <66>   DW_AT_decl_file   : 1
+    <67>   DW_AT_decl_line   : 150
+    <68>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><6b>: Abbrev Number: 5 (DW_TAG_member)
+    <6c>   DW_AT_name        : (indirect string, offset: 0x182): l_start
+    <70>   DW_AT_type        : <0x9d>
+    <74>   DW_AT_decl_file   : 1
+    <75>   DW_AT_decl_line   : 151
+    <76>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><79>: Abbrev Number: 5 (DW_TAG_member)
+    <7a>   DW_AT_name        : (indirect string, offset: 0x1b2): l_len
+    <7e>   DW_AT_type        : <0x9d>
+    <82>   DW_AT_decl_file   : 1
+    <83>   DW_AT_decl_line   : 152
+    <84>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><87>: Abbrev Number: 5 (DW_TAG_member)
+    <88>   DW_AT_name        : (indirect string, offset: 0x1b8): l_pid
+    <8c>   DW_AT_type        : <0xba>
+    <90>   DW_AT_decl_file   : 1
+    <91>   DW_AT_decl_line   : 153
+    <92>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><95>: Abbrev Number: 0
+ <1><96>: Abbrev Number: 6 (DW_TAG_base_type)
+    <97>   DW_AT_name        : (indirect string, offset: 0x173): short
+    <9b>   DW_AT_encoding    : 5	(signed)
+    <9c>   DW_AT_byte_size   : 2
+ <1><9d>: Abbrev Number: 3 (DW_TAG_typedef)
+    <9e>   DW_AT_type        : <0xa8>
+    <a2>   DW_AT_name        : (indirect string, offset: 0x1a3): __kernel_off_t
+    <a6>   DW_AT_decl_file   : 2
+    <a7>   DW_AT_decl_line   : 75
+ <1><a8>: Abbrev Number: 3 (DW_TAG_typedef)
+    <a9>   DW_AT_type        : <0xb3>
+    <ad>   DW_AT_name        : (indirect string, offset: 0x193): __kernel_long_t
+    <b1>   DW_AT_decl_file   : 2
+    <b2>   DW_AT_decl_line   : 23
+ <1><b3>: Abbrev Number: 6 (DW_TAG_base_type)
+    <b4>   DW_AT_name        : (indirect string, offset: 0x18a): long int
+    <b8>   DW_AT_encoding    : 5	(signed)
+    <b9>   DW_AT_byte_size   : 4
+ <1><ba>: Abbrev Number: 3 (DW_TAG_typedef)
+    <bb>   DW_AT_type        : <0xc5>
+    <bf>   DW_AT_name        : (indirect string, offset: 0x1c2): __kernel_pid_t
+    <c3>   DW_AT_decl_file   : 2
+    <c4>   DW_AT_decl_line   : 33
+ <1><c5>: Abbrev Number: 6 (DW_TAG_base_type)
+    <c6>   DW_AT_name        : (indirect string, offset: 0x1be): int
+    <ca>   DW_AT_encoding    : 5	(signed)
+    <cb>   DW_AT_byte_size   : 4
+ <1><cc>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_flock.d2 b/mpers-m32/struct_flock.d2
index 339edd1..4a01ec0 100644
--- a/mpers-m32/struct_flock.d2
+++ b/mpers-m32/struct_flock.d2
@@ -1,94 +1,94 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x91): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15b): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 36
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x121): struct_flock
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1eb): struct_flock
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 33
-<1><3b>
+<1><3c>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x46>
-DW_AT_name        : (indirect string, offset: 0x10d): struct_kernel_flock
+DW_AT_type        : <0x47>
+DW_AT_name        : (indirect string, offset: 0x1d7): struct_kernel_flock
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 35
-<1><46>
+<1><47>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x107): flock
+DW_AT_name        : (indirect string, offset: 0x1d1): flock
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 148
-<2><4e>
+<2><4f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa2): l_type
-DW_AT_type        : <0x95>
+DW_AT_name        : (indirect string, offset: 0x16c): l_type
+DW_AT_type        : <0x96>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 149
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><5c>
+<2><5d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xaf): l_whence
-DW_AT_type        : <0x95>
+DW_AT_name        : (indirect string, offset: 0x179): l_whence
+DW_AT_type        : <0x96>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 150
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><6a>
+<2><6b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb8): l_start
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x182): l_start
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 151
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><78>
+<2><79>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe8): l_len
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x1b2): l_len
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 152
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><86>
+<2><87>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xee): l_pid
-DW_AT_type        : <0xb9>
+DW_AT_name        : (indirect string, offset: 0x1b8): l_pid
+DW_AT_type        : <0xba>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 153
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><95>
+<1><96>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa9): short
+DW_AT_name        : (indirect string, offset: 0x173): short
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 2
-<1><9c>
+<1><9d>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xa7>
-DW_AT_name        : (indirect string, offset: 0xd9): __kernel_off_t
+DW_AT_type        : <0xa8>
+DW_AT_name        : (indirect string, offset: 0x1a3): __kernel_off_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 75
-<1><a7>
+<1><a8>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xb2>
-DW_AT_name        : (indirect string, offset: 0xc9): __kernel_long_t
+DW_AT_type        : <0xb3>
+DW_AT_name        : (indirect string, offset: 0x193): __kernel_long_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 23
-<1><b2>
+<1><b3>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc0): long int
+DW_AT_name        : (indirect string, offset: 0x18a): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><b9>
+<1><ba>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xc4>
-DW_AT_name        : (indirect string, offset: 0xf8): __kernel_pid_t
+DW_AT_type        : <0xc5>
+DW_AT_name        : (indirect string, offset: 0x1c2): __kernel_pid_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 33
-<1><c4>
+<1><c5>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xf4): int
+DW_AT_name        : (indirect string, offset: 0x1be): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_flock64.d1 b/mpers-m32/struct_flock64.d1
index 8e5c9b4..22031da 100644
--- a/mpers-m32/struct_flock64.d1
+++ b/mpers-m32/struct_flock64.d1
@@ -1,90 +1,91 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xbd (32-bit)
+   Length:        0xbe (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_flock64.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_flock64.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x58): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x93): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 4
-    <29>   DW_AT_decl_line   : 36
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x11d): struct_flock64
-    <39>   DW_AT_decl_file   : 4
-    <3a>   DW_AT_decl_line   : 34
- <1><3b>: Abbrev Number: 3 (DW_TAG_typedef)
-    <3c>   DW_AT_type        : <0x46>
-    <40>   DW_AT_name        : (indirect string, offset: 0x107): struct_kernel_flock64
-    <44>   DW_AT_decl_file   : 3
-    <45>   DW_AT_decl_line   : 43
- <1><46>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <47>   DW_AT_name        : (indirect string, offset: 0xff): flock64
-    <4b>   DW_AT_byte_size   : 32
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 161
- <2><4e>: Abbrev Number: 5 (DW_TAG_member)
-    <4f>   DW_AT_name        : (indirect string, offset: 0xa4): l_type
-    <53>   DW_AT_type        : <0x95>
-    <57>   DW_AT_decl_file   : 1
-    <58>   DW_AT_decl_line   : 162
-    <59>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><5c>: Abbrev Number: 5 (DW_TAG_member)
-    <5d>   DW_AT_name        : (indirect string, offset: 0xb1): l_whence
-    <61>   DW_AT_type        : <0x95>
-    <65>   DW_AT_decl_file   : 1
-    <66>   DW_AT_decl_line   : 163
-    <67>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><6a>: Abbrev Number: 5 (DW_TAG_member)
-    <6b>   DW_AT_name        : (indirect string, offset: 0xba): l_start
-    <6f>   DW_AT_type        : <0x9c>
-    <73>   DW_AT_decl_file   : 1
-    <74>   DW_AT_decl_line   : 164
-    <75>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><78>: Abbrev Number: 5 (DW_TAG_member)
-    <79>   DW_AT_name        : (indirect string, offset: 0xe0): l_len
-    <7d>   DW_AT_type        : <0x9c>
-    <81>   DW_AT_decl_file   : 1
-    <82>   DW_AT_decl_line   : 165
-    <83>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><86>: Abbrev Number: 5 (DW_TAG_member)
-    <87>   DW_AT_name        : (indirect string, offset: 0xe6): l_pid
-    <8b>   DW_AT_type        : <0xae>
-    <8f>   DW_AT_decl_file   : 1
-    <90>   DW_AT_decl_line   : 166
-    <91>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><94>: Abbrev Number: 0
- <1><95>: Abbrev Number: 6 (DW_TAG_base_type)
-    <96>   DW_AT_name        : (indirect string, offset: 0xab): short
-    <9a>   DW_AT_encoding    : 5	(signed)
-    <9b>   DW_AT_byte_size   : 2
- <1><9c>: Abbrev Number: 3 (DW_TAG_typedef)
-    <9d>   DW_AT_type        : <0xa7>
-    <a1>   DW_AT_name        : (indirect string, offset: 0xd0): __kernel_loff_t
-    <a5>   DW_AT_decl_file   : 2
-    <a6>   DW_AT_decl_line   : 76
- <1><a7>: Abbrev Number: 6 (DW_TAG_base_type)
-    <a8>   DW_AT_name        : (indirect string, offset: 0xc2): long long int
-    <ac>   DW_AT_encoding    : 5	(signed)
-    <ad>   DW_AT_byte_size   : 8
- <1><ae>: Abbrev Number: 3 (DW_TAG_typedef)
-    <af>   DW_AT_type        : <0xb9>
-    <b3>   DW_AT_name        : (indirect string, offset: 0xf0): __kernel_pid_t
-    <b7>   DW_AT_decl_file   : 2
-    <b8>   DW_AT_decl_line   : 33
- <1><b9>: Abbrev Number: 6 (DW_TAG_base_type)
-    <ba>   DW_AT_name        : (indirect string, offset: 0xec): int
-    <be>   DW_AT_encoding    : 5	(signed)
-    <bf>   DW_AT_byte_size   : 4
- <1><c0>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x122): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15d): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 4
+    <2a>   DW_AT_decl_line   : 36
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1e7): struct_flock64
+    <3a>   DW_AT_decl_file   : 4
+    <3b>   DW_AT_decl_line   : 34
+ <1><3c>: Abbrev Number: 3 (DW_TAG_typedef)
+    <3d>   DW_AT_type        : <0x47>
+    <41>   DW_AT_name        : (indirect string, offset: 0x1d1): struct_kernel_flock64
+    <45>   DW_AT_decl_file   : 3
+    <46>   DW_AT_decl_line   : 43
+ <1><47>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <48>   DW_AT_name        : (indirect string, offset: 0x1c9): flock64
+    <4c>   DW_AT_byte_size   : 32
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 161
+ <2><4f>: Abbrev Number: 5 (DW_TAG_member)
+    <50>   DW_AT_name        : (indirect string, offset: 0x16e): l_type
+    <54>   DW_AT_type        : <0x96>
+    <58>   DW_AT_decl_file   : 1
+    <59>   DW_AT_decl_line   : 162
+    <5a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><5d>: Abbrev Number: 5 (DW_TAG_member)
+    <5e>   DW_AT_name        : (indirect string, offset: 0x17b): l_whence
+    <62>   DW_AT_type        : <0x96>
+    <66>   DW_AT_decl_file   : 1
+    <67>   DW_AT_decl_line   : 163
+    <68>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><6b>: Abbrev Number: 5 (DW_TAG_member)
+    <6c>   DW_AT_name        : (indirect string, offset: 0x184): l_start
+    <70>   DW_AT_type        : <0x9d>
+    <74>   DW_AT_decl_file   : 1
+    <75>   DW_AT_decl_line   : 164
+    <76>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><79>: Abbrev Number: 5 (DW_TAG_member)
+    <7a>   DW_AT_name        : (indirect string, offset: 0x1aa): l_len
+    <7e>   DW_AT_type        : <0x9d>
+    <82>   DW_AT_decl_file   : 1
+    <83>   DW_AT_decl_line   : 165
+    <84>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><87>: Abbrev Number: 5 (DW_TAG_member)
+    <88>   DW_AT_name        : (indirect string, offset: 0x1b0): l_pid
+    <8c>   DW_AT_type        : <0xaf>
+    <90>   DW_AT_decl_file   : 1
+    <91>   DW_AT_decl_line   : 166
+    <92>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><95>: Abbrev Number: 0
+ <1><96>: Abbrev Number: 6 (DW_TAG_base_type)
+    <97>   DW_AT_name        : (indirect string, offset: 0x175): short
+    <9b>   DW_AT_encoding    : 5	(signed)
+    <9c>   DW_AT_byte_size   : 2
+ <1><9d>: Abbrev Number: 3 (DW_TAG_typedef)
+    <9e>   DW_AT_type        : <0xa8>
+    <a2>   DW_AT_name        : (indirect string, offset: 0x19a): __kernel_loff_t
+    <a6>   DW_AT_decl_file   : 2
+    <a7>   DW_AT_decl_line   : 76
+ <1><a8>: Abbrev Number: 6 (DW_TAG_base_type)
+    <a9>   DW_AT_name        : (indirect string, offset: 0x18c): long long int
+    <ad>   DW_AT_encoding    : 5	(signed)
+    <ae>   DW_AT_byte_size   : 8
+ <1><af>: Abbrev Number: 3 (DW_TAG_typedef)
+    <b0>   DW_AT_type        : <0xba>
+    <b4>   DW_AT_name        : (indirect string, offset: 0x1ba): __kernel_pid_t
+    <b8>   DW_AT_decl_file   : 2
+    <b9>   DW_AT_decl_line   : 33
+ <1><ba>: Abbrev Number: 6 (DW_TAG_base_type)
+    <bb>   DW_AT_name        : (indirect string, offset: 0x1b6): int
+    <bf>   DW_AT_encoding    : 5	(signed)
+    <c0>   DW_AT_byte_size   : 4
+ <1><c1>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_flock64.d2 b/mpers-m32/struct_flock64.d2
index 7313fa4..b08df0d 100644
--- a/mpers-m32/struct_flock64.d2
+++ b/mpers-m32/struct_flock64.d2
@@ -1,88 +1,88 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x93): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15d): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 36
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x11d): struct_flock64
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1e7): struct_flock64
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 34
-<1><3b>
+<1><3c>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x46>
-DW_AT_name        : (indirect string, offset: 0x107): struct_kernel_flock64
+DW_AT_type        : <0x47>
+DW_AT_name        : (indirect string, offset: 0x1d1): struct_kernel_flock64
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 43
-<1><46>
+<1><47>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xff): flock64
+DW_AT_name        : (indirect string, offset: 0x1c9): flock64
 DW_AT_byte_size   : 32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 161
-<2><4e>
+<2><4f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa4): l_type
-DW_AT_type        : <0x95>
+DW_AT_name        : (indirect string, offset: 0x16e): l_type
+DW_AT_type        : <0x96>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 162
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><5c>
+<2><5d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb1): l_whence
-DW_AT_type        : <0x95>
+DW_AT_name        : (indirect string, offset: 0x17b): l_whence
+DW_AT_type        : <0x96>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 163
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><6a>
+<2><6b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xba): l_start
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x184): l_start
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 164
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><78>
+<2><79>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe0): l_len
-DW_AT_type        : <0x9c>
+DW_AT_name        : (indirect string, offset: 0x1aa): l_len
+DW_AT_type        : <0x9d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 165
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><86>
+<2><87>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe6): l_pid
-DW_AT_type        : <0xae>
+DW_AT_name        : (indirect string, offset: 0x1b0): l_pid
+DW_AT_type        : <0xaf>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 166
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<1><95>
+<1><96>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xab): short
+DW_AT_name        : (indirect string, offset: 0x175): short
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 2
-<1><9c>
+<1><9d>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xa7>
-DW_AT_name        : (indirect string, offset: 0xd0): __kernel_loff_t
+DW_AT_type        : <0xa8>
+DW_AT_name        : (indirect string, offset: 0x19a): __kernel_loff_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 76
-<1><a7>
+<1><a8>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc2): long long int
+DW_AT_name        : (indirect string, offset: 0x18c): long long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 8
-<1><ae>
+<1><af>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xb9>
-DW_AT_name        : (indirect string, offset: 0xf0): __kernel_pid_t
+DW_AT_type        : <0xba>
+DW_AT_name        : (indirect string, offset: 0x1ba): __kernel_pid_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 33
-<1><b9>
+<1><ba>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xec): int
+DW_AT_name        : (indirect string, offset: 0x1b6): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_group_req.d1 b/mpers-m32/struct_group_req.d1
index 2c7fce1..8b01077 100644
--- a/mpers-m32/struct_group_req.d1
+++ b/mpers-m32/struct_group_req.d1
@@ -1,98 +1,99 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xc3 (32-bit)
+   Length:        0xc4 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_group_req.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_group_req.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5a): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 4
-    <29>   DW_AT_decl_line   : 37
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x136): struct_group_req
-    <39>   DW_AT_decl_file   : 4
-    <3a>   DW_AT_decl_line   : 33
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x12c): group_req
-    <40>   DW_AT_byte_size   : 132
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 163
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa6): gr_interface
-    <48>   DW_AT_type        : <0x61>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 164
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 6 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xc6): gr_group
-    <56>   DW_AT_type        : <0x73>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 165
-    <5c>   Unknown AT value: 88: 4
-    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><60>: Abbrev Number: 0
- <1><61>: Abbrev Number: 3 (DW_TAG_typedef)
-    <62>   DW_AT_type        : <0x6c>
-    <66>   DW_AT_name        : (indirect string, offset: 0xc0): __u32
-    <6a>   DW_AT_decl_file   : 1
-    <6b>   DW_AT_decl_line   : 28
- <1><6c>: Abbrev Number: 7 (DW_TAG_base_type)
-    <6d>   DW_AT_name        : (indirect string, offset: 0xb3): unsigned int
-    <71>   DW_AT_encoding    : 7	(unsigned)
-    <72>   DW_AT_byte_size   : 4
- <1><73>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <74>   DW_AT_name        : (indirect string, offset: 0x112): __kernel_sockaddr_storage
-    <78>   DW_AT_byte_size   : 128
-    <79>   DW_AT_decl_file   : 3
-    <7a>   DW_AT_decl_line   : 24
-    <7b>   Unknown AT value: 88: 4
- <2><7c>: Abbrev Number: 5 (DW_TAG_member)
-    <7d>   DW_AT_name        : (indirect string, offset: 0xcf): ss_family
-    <81>   DW_AT_type        : <0x99>
-    <85>   DW_AT_decl_file   : 3
-    <86>   DW_AT_decl_line   : 25
-    <87>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><8a>: Abbrev Number: 5 (DW_TAG_member)
-    <8b>   DW_AT_name        : (indirect string, offset: 0xfd): __data
-    <8f>   DW_AT_type        : <0xab>
-    <93>   DW_AT_decl_file   : 3
-    <94>   DW_AT_decl_line   : 26
-    <95>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><98>: Abbrev Number: 0
- <1><99>: Abbrev Number: 3 (DW_TAG_typedef)
-    <9a>   DW_AT_type        : <0xa4>
-    <9e>   DW_AT_name        : (indirect string, offset: 0xe8): __kernel_sa_family_t
-    <a2>   DW_AT_decl_file   : 3
-    <a3>   DW_AT_decl_line   : 23
- <1><a4>: Abbrev Number: 7 (DW_TAG_base_type)
-    <a5>   DW_AT_name        : (indirect string, offset: 0xd9): unsigned short
-    <a9>   DW_AT_encoding    : 7	(unsigned)
-    <aa>   DW_AT_byte_size   : 2
- <1><ab>: Abbrev Number: 9 (DW_TAG_array_type)
-    <ac>   DW_AT_type        : <0xb8>
- <2><b0>: Abbrev Number: 10 (DW_TAG_subrange_type)
-    <b1>   DW_AT_type        : <0xbf>
-    <b5>   DW_AT_lower_bound : 0
-    <b6>   DW_AT_count       : 126
- <2><b7>: Abbrev Number: 0
- <1><b8>: Abbrev Number: 7 (DW_TAG_base_type)
-    <b9>   DW_AT_name        : (indirect string, offset: 0x104): char
-    <bd>   DW_AT_encoding    : 8	(unsigned char)
-    <be>   DW_AT_byte_size   : 1
- <1><bf>: Abbrev Number: 11 (DW_TAG_base_type)
-    <c0>   DW_AT_name        : (indirect string, offset: 0x109): sizetype
-    <c4>   DW_AT_byte_size   : 8
-    <c5>   DW_AT_encoding    : 7	(unsigned)
- <1><c6>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x124): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 4
+    <2a>   DW_AT_decl_line   : 37
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1f7): struct_group_req
+    <3a>   DW_AT_decl_file   : 4
+    <3b>   DW_AT_decl_line   : 33
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1ed): group_req
+    <41>   DW_AT_byte_size   : 132
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 151
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x170): gr_interface
+    <49>   DW_AT_type        : <0x62>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 152
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 6 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x190): gr_group
+    <57>   DW_AT_type        : <0x74>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 153
+    <5d>   Unknown AT value: 88: 4
+    <5e>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><61>: Abbrev Number: 0
+ <1><62>: Abbrev Number: 3 (DW_TAG_typedef)
+    <63>   DW_AT_type        : <0x6d>
+    <67>   DW_AT_name        : (indirect string, offset: 0x18a): __u32
+    <6b>   DW_AT_decl_file   : 1
+    <6c>   DW_AT_decl_line   : 28
+ <1><6d>: Abbrev Number: 7 (DW_TAG_base_type)
+    <6e>   DW_AT_name        : (indirect string, offset: 0x17d): unsigned int
+    <72>   DW_AT_encoding    : 7	(unsigned)
+    <73>   DW_AT_byte_size   : 4
+ <1><74>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <75>   DW_AT_name        : (indirect string, offset: 0x1dc): sockaddr_storage
+    <79>   DW_AT_byte_size   : 128
+    <7a>   DW_AT_decl_file   : 3
+    <7b>   DW_AT_decl_line   : 24
+    <7c>   Unknown AT value: 88: 4
+ <2><7d>: Abbrev Number: 5 (DW_TAG_member)
+    <7e>   DW_AT_name        : (indirect string, offset: 0x199): ss_family
+    <82>   DW_AT_type        : <0x9a>
+    <86>   DW_AT_decl_file   : 3
+    <87>   DW_AT_decl_line   : 25
+    <88>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><8b>: Abbrev Number: 5 (DW_TAG_member)
+    <8c>   DW_AT_name        : (indirect string, offset: 0x1c7): __data
+    <90>   DW_AT_type        : <0xac>
+    <94>   DW_AT_decl_file   : 3
+    <95>   DW_AT_decl_line   : 26
+    <96>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><99>: Abbrev Number: 0
+ <1><9a>: Abbrev Number: 3 (DW_TAG_typedef)
+    <9b>   DW_AT_type        : <0xa5>
+    <9f>   DW_AT_name        : (indirect string, offset: 0x1b2): __kernel_sa_family_t
+    <a3>   DW_AT_decl_file   : 3
+    <a4>   DW_AT_decl_line   : 23
+ <1><a5>: Abbrev Number: 7 (DW_TAG_base_type)
+    <a6>   DW_AT_name        : (indirect string, offset: 0x1a3): unsigned short
+    <aa>   DW_AT_encoding    : 7	(unsigned)
+    <ab>   DW_AT_byte_size   : 2
+ <1><ac>: Abbrev Number: 9 (DW_TAG_array_type)
+    <ad>   DW_AT_type        : <0xb9>
+ <2><b1>: Abbrev Number: 10 (DW_TAG_subrange_type)
+    <b2>   DW_AT_type        : <0xc0>
+    <b6>   DW_AT_lower_bound : 0
+    <b7>   DW_AT_count       : 126
+ <2><b8>: Abbrev Number: 0
+ <1><b9>: Abbrev Number: 7 (DW_TAG_base_type)
+    <ba>   DW_AT_name        : (indirect string, offset: 0x1ce): char
+    <be>   DW_AT_encoding    : 8	(unsigned char)
+    <bf>   DW_AT_byte_size   : 1
+ <1><c0>: Abbrev Number: 11 (DW_TAG_base_type)
+    <c1>   DW_AT_name        : (indirect string, offset: 0x1d3): sizetype
+    <c5>   DW_AT_byte_size   : 8
+    <c6>   DW_AT_encoding    : 7	(unsigned)
+ <1><c7>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_group_req.d2 b/mpers-m32/struct_group_req.d2
index 0c8a5d8..ac2803a 100644
--- a/mpers-m32/struct_group_req.d2
+++ b/mpers-m32/struct_group_req.d2
@@ -1,96 +1,96 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 37
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x136): struct_group_req
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1f7): struct_group_req
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 33
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x12c): group_req
+DW_AT_name        : (indirect string, offset: 0x1ed): group_req
 DW_AT_byte_size   : 132
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 163
-<2><43>
+DW_AT_decl_line   : 151
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa6): gr_interface
-DW_AT_type        : <0x61>
+DW_AT_name        : (indirect string, offset: 0x170): gr_interface
+DW_AT_type        : <0x62>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 164
+DW_AT_decl_line   : 152
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 6 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc6): gr_group
-DW_AT_type        : <0x73>
+DW_AT_name        : (indirect string, offset: 0x190): gr_group
+DW_AT_type        : <0x74>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 165
+DW_AT_decl_line   : 153
 Unknown AT value: 88: 4
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><61>
+<1><62>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x6c>
-DW_AT_name        : (indirect string, offset: 0xc0): __u32
+DW_AT_type        : <0x6d>
+DW_AT_name        : (indirect string, offset: 0x18a): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><6c>
+<1><6d>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb3): unsigned int
+DW_AT_name        : (indirect string, offset: 0x17d): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><73>
+<1><74>
 Abbrev Number: 8 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x112): __kernel_sockaddr_storage
+DW_AT_name        : (indirect string, offset: 0x1dc): sockaddr_storage
 DW_AT_byte_size   : 128
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 24
 Unknown AT value: 88: 4
-<2><7c>
+<2><7d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcf): ss_family
-DW_AT_type        : <0x99>
+DW_AT_name        : (indirect string, offset: 0x199): ss_family
+DW_AT_type        : <0x9a>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><8a>
+<2><8b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfd): __data
-DW_AT_type        : <0xab>
+DW_AT_name        : (indirect string, offset: 0x1c7): __data
+DW_AT_type        : <0xac>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<1><99>
+<1><9a>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xa4>
-DW_AT_name        : (indirect string, offset: 0xe8): __kernel_sa_family_t
+DW_AT_type        : <0xa5>
+DW_AT_name        : (indirect string, offset: 0x1b2): __kernel_sa_family_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 23
-<1><a4>
+<1><a5>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xd9): unsigned short
+DW_AT_name        : (indirect string, offset: 0x1a3): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><ab>
+<1><ac>
 Abbrev Number: 9 (DW_TAG_array_type)
-DW_AT_type        : <0xb8>
-<2><b0>
+DW_AT_type        : <0xb9>
+<2><b1>
 Abbrev Number: 10 (DW_TAG_subrange_type)
-DW_AT_type        : <0xbf>
+DW_AT_type        : <0xc0>
 DW_AT_lower_bound : 0
 DW_AT_count       : 126
-<1><b8>
+<1><b9>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x104): char
+DW_AT_name        : (indirect string, offset: 0x1ce): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><bf>
+<1><c0>
 Abbrev Number: 11 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x109): sizetype
+DW_AT_name        : (indirect string, offset: 0x1d3): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
diff --git a/mpers-m32/struct_hd_geometry.d1 b/mpers-m32/struct_hd_geometry.d1
index 5fb6cfd..213e550 100644
--- a/mpers-m32/struct_hd_geometry.d1
+++ b/mpers-m32/struct_hd_geometry.d1
@@ -1,69 +1,70 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x92 (32-bit)
+   Length:        0x93 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_hd_geometry.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_hd_geometry.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5c): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 2
-    <29>   DW_AT_decl_line   : 37
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x101): struct_hd_geometry
-    <39>   DW_AT_decl_file   : 2
-    <3a>   DW_AT_decl_line   : 35
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xf5): hd_geometry
-    <40>   DW_AT_byte_size   : 8
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 255
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa8): heads
-    <48>   DW_AT_type        : <0x80>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 256
-    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><52>: Abbrev Number: 5 (DW_TAG_member)
-    <53>   DW_AT_name        : (indirect string, offset: 0xbc): sectors
-    <57>   DW_AT_type        : <0x80>
-    <5b>   DW_AT_decl_file   : 1
-    <5c>   DW_AT_decl_line   : 257
-    <5e>   DW_AT_data_member_location: 2 byte block: 23 1 	(DW_OP_plus_uconst: 1)
- <2><61>: Abbrev Number: 5 (DW_TAG_member)
-    <62>   DW_AT_name        : (indirect string, offset: 0xc4): cylinders
-    <66>   DW_AT_type        : <0x87>
-    <6a>   DW_AT_decl_file   : 1
-    <6b>   DW_AT_decl_line   : 258
-    <6d>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><70>: Abbrev Number: 5 (DW_TAG_member)
-    <71>   DW_AT_name        : (indirect string, offset: 0xdd): start
-    <75>   DW_AT_type        : <0x8e>
-    <79>   DW_AT_decl_file   : 1
-    <7a>   DW_AT_decl_line   : 259
-    <7c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><7f>: Abbrev Number: 0
- <1><80>: Abbrev Number: 6 (DW_TAG_base_type)
-    <81>   DW_AT_name        : (indirect string, offset: 0xae): unsigned char
-    <85>   DW_AT_encoding    : 8	(unsigned char)
-    <86>   DW_AT_byte_size   : 1
- <1><87>: Abbrev Number: 6 (DW_TAG_base_type)
-    <88>   DW_AT_name        : (indirect string, offset: 0xce): unsigned short
-    <8c>   DW_AT_encoding    : 7	(unsigned)
-    <8d>   DW_AT_byte_size   : 2
- <1><8e>: Abbrev Number: 6 (DW_TAG_base_type)
-    <8f>   DW_AT_name        : (indirect string, offset: 0xe3): long unsigned int
-    <93>   DW_AT_encoding    : 7	(unsigned)
-    <94>   DW_AT_byte_size   : 4
- <1><95>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x126): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 2
+    <2a>   DW_AT_decl_line   : 37
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1cb): struct_hd_geometry
+    <3a>   DW_AT_decl_file   : 2
+    <3b>   DW_AT_decl_line   : 35
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1bf): hd_geometry
+    <41>   DW_AT_byte_size   : 8
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 255
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x172): heads
+    <49>   DW_AT_type        : <0x81>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 256
+    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><53>: Abbrev Number: 5 (DW_TAG_member)
+    <54>   DW_AT_name        : (indirect string, offset: 0x186): sectors
+    <58>   DW_AT_type        : <0x81>
+    <5c>   DW_AT_decl_file   : 1
+    <5d>   DW_AT_decl_line   : 257
+    <5f>   DW_AT_data_member_location: 2 byte block: 23 1 	(DW_OP_plus_uconst: 1)
+ <2><62>: Abbrev Number: 5 (DW_TAG_member)
+    <63>   DW_AT_name        : (indirect string, offset: 0x18e): cylinders
+    <67>   DW_AT_type        : <0x88>
+    <6b>   DW_AT_decl_file   : 1
+    <6c>   DW_AT_decl_line   : 258
+    <6e>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><71>: Abbrev Number: 5 (DW_TAG_member)
+    <72>   DW_AT_name        : (indirect string, offset: 0x1a7): start
+    <76>   DW_AT_type        : <0x8f>
+    <7a>   DW_AT_decl_file   : 1
+    <7b>   DW_AT_decl_line   : 259
+    <7d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><80>: Abbrev Number: 0
+ <1><81>: Abbrev Number: 6 (DW_TAG_base_type)
+    <82>   DW_AT_name        : (indirect string, offset: 0x178): unsigned char
+    <86>   DW_AT_encoding    : 8	(unsigned char)
+    <87>   DW_AT_byte_size   : 1
+ <1><88>: Abbrev Number: 6 (DW_TAG_base_type)
+    <89>   DW_AT_name        : (indirect string, offset: 0x198): unsigned short
+    <8d>   DW_AT_encoding    : 7	(unsigned)
+    <8e>   DW_AT_byte_size   : 2
+ <1><8f>: Abbrev Number: 6 (DW_TAG_base_type)
+    <90>   DW_AT_name        : (indirect string, offset: 0x1ad): long unsigned int
+    <94>   DW_AT_encoding    : 7	(unsigned)
+    <95>   DW_AT_byte_size   : 4
+ <1><96>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_hd_geometry.d2 b/mpers-m32/struct_hd_geometry.d2
index 4deae48..6541189 100644
--- a/mpers-m32/struct_hd_geometry.d2
+++ b/mpers-m32/struct_hd_geometry.d2
@@ -1,63 +1,63 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 37
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x101): struct_hd_geometry
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1cb): struct_hd_geometry
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 35
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xf5): hd_geometry
+DW_AT_name        : (indirect string, offset: 0x1bf): hd_geometry
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 255
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa8): heads
-DW_AT_type        : <0x80>
+DW_AT_name        : (indirect string, offset: 0x172): heads
+DW_AT_type        : <0x81>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 256
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><52>
+<2><53>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xbc): sectors
-DW_AT_type        : <0x80>
+DW_AT_name        : (indirect string, offset: 0x186): sectors
+DW_AT_type        : <0x81>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 257
 DW_AT_data_member_location: 2 byte block: 23 1 	(DW_OP_plus_uconst: 1)
-<2><61>
+<2><62>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc4): cylinders
-DW_AT_type        : <0x87>
+DW_AT_name        : (indirect string, offset: 0x18e): cylinders
+DW_AT_type        : <0x88>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 258
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><70>
+<2><71>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdd): start
-DW_AT_type        : <0x8e>
+DW_AT_name        : (indirect string, offset: 0x1a7): start
+DW_AT_type        : <0x8f>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 259
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><80>
+<1><81>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xae): unsigned char
+DW_AT_name        : (indirect string, offset: 0x178): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><87>
+<1><88>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xce): unsigned short
+DW_AT_name        : (indirect string, offset: 0x198): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><8e>
+<1><8f>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe3): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1ad): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_ifconf.c b/mpers-m32/struct_ifconf.c
index d7003ac..1aa6fde 100644
--- a/mpers-m32/struct_ifconf.c
+++ b/mpers-m32/struct_ifconf.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-2017 The strace developers.
+ * Copyright (c) 1996-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/mpers-m32/struct_ifconf.d1 b/mpers-m32/struct_ifconf.d1
index 539da8e..67d4368 100644
--- a/mpers-m32/struct_ifconf.d1
+++ b/mpers-m32/struct_ifconf.d1
@@ -1,571 +1,572 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x4ae (32-bit)
+   Length:        0x4af (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_ifconf.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_ifconf.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x57): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 5
-    <29>   DW_AT_decl_line   : 44
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x359): struct_ifconf
-    <39>   DW_AT_decl_file   : 5
-    <3a>   DW_AT_decl_line   : 41
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x352): ifconf
-    <40>   DW_AT_byte_size   : 8
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 164
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa3): ifc_len
-    <48>   DW_AT_type        : <0x81>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 165
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xaf): ifc_ifcu
-    <56>   DW_AT_type        : <0x5f>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 169
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 6 (DW_TAG_union_type)
-    <60>   DW_AT_byte_size   : 4
-    <61>   DW_AT_decl_file   : 1
-    <62>   DW_AT_decl_line   : 166
- <3><63>: Abbrev Number: 5 (DW_TAG_member)
-    <64>   DW_AT_name        : (indirect string, offset: 0xb8): ifcu_buf
-    <68>   DW_AT_type        : <0x88>
-    <6c>   DW_AT_decl_file   : 1
-    <6d>   DW_AT_decl_line   : 167
-    <6e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><71>: Abbrev Number: 5 (DW_TAG_member)
-    <72>   DW_AT_name        : (indirect string, offset: 0xc6): ifcu_req
-    <76>   DW_AT_type        : <0x94>
-    <7a>   DW_AT_decl_file   : 1
-    <7b>   DW_AT_decl_line   : 168
-    <7c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><7f>: Abbrev Number: 0
- <2><80>: Abbrev Number: 0
- <1><81>: Abbrev Number: 7 (DW_TAG_base_type)
-    <82>   DW_AT_name        : (indirect string, offset: 0xab): int
-    <86>   DW_AT_encoding    : 5	(signed)
-    <87>   DW_AT_byte_size   : 4
- <1><88>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <89>   DW_AT_type        : <0x8d>
- <1><8d>: Abbrev Number: 7 (DW_TAG_base_type)
-    <8e>   DW_AT_name        : (indirect string, offset: 0xc1): char
-    <92>   DW_AT_encoding    : 8	(unsigned char)
-    <93>   DW_AT_byte_size   : 1
- <1><94>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <95>   DW_AT_type        : <0x99>
- <1><99>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <9a>   DW_AT_name        : (indirect string, offset: 0x34c): ifreq
-    <9e>   DW_AT_byte_size   : 32
-    <9f>   DW_AT_decl_file   : 1
-    <a0>   DW_AT_decl_line   : 124
- <2><a1>: Abbrev Number: 5 (DW_TAG_member)
-    <a2>   DW_AT_name        : (indirect string, offset: 0xcf): ifr_ifrn
-    <a6>   DW_AT_type        : <0xaf>
-    <aa>   DW_AT_decl_file   : 1
-    <ab>   DW_AT_decl_line   : 128
-    <ac>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><af>: Abbrev Number: 6 (DW_TAG_union_type)
-    <b0>   DW_AT_byte_size   : 16
-    <b1>   DW_AT_decl_file   : 1
-    <b2>   DW_AT_decl_line   : 126
- <3><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0xd8): ifrn_name
-    <b8>   DW_AT_type        : <0x18c>
-    <bc>   DW_AT_decl_file   : 1
-    <bd>   DW_AT_decl_line   : 127
-    <be>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><c1>: Abbrev Number: 0
- <2><c2>: Abbrev Number: 5 (DW_TAG_member)
-    <c3>   DW_AT_name        : (indirect string, offset: 0xeb): ifr_ifru
-    <c7>   DW_AT_type        : <0xd0>
-    <cb>   DW_AT_decl_file   : 1
-    <cc>   DW_AT_decl_line   : 143
-    <cd>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><d0>: Abbrev Number: 6 (DW_TAG_union_type)
-    <d1>   DW_AT_byte_size   : 16
-    <d2>   DW_AT_decl_file   : 1
-    <d3>   DW_AT_decl_line   : 129
- <3><d4>: Abbrev Number: 5 (DW_TAG_member)
-    <d5>   DW_AT_name        : (indirect string, offset: 0xf4): ifru_addr
-    <d9>   DW_AT_type        : <0x1a0>
-    <dd>   DW_AT_decl_file   : 1
-    <de>   DW_AT_decl_line   : 130
-    <df>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><e2>: Abbrev Number: 5 (DW_TAG_member)
-    <e3>   DW_AT_name        : (indirect string, offset: 0x134): ifru_dstaddr
-    <e7>   DW_AT_type        : <0x1a0>
-    <eb>   DW_AT_decl_file   : 1
-    <ec>   DW_AT_decl_line   : 131
-    <ed>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><f0>: Abbrev Number: 5 (DW_TAG_member)
-    <f1>   DW_AT_name        : (indirect string, offset: 0x141): ifru_broadaddr
-    <f5>   DW_AT_type        : <0x1a0>
-    <f9>   DW_AT_decl_file   : 1
-    <fa>   DW_AT_decl_line   : 132
-    <fb>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><fe>: Abbrev Number: 5 (DW_TAG_member)
-    <ff>   DW_AT_name        : (indirect string, offset: 0x150): ifru_netmask
-    <103>   DW_AT_type        : <0x1a0>
-    <107>   DW_AT_decl_file   : 1
-    <108>   DW_AT_decl_line   : 133
-    <109>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><10c>: Abbrev Number: 5 (DW_TAG_member)
-    <10d>   DW_AT_name        : (indirect string, offset: 0x15d): ifru_hwaddr
-    <111>   DW_AT_type        : <0x1a0>
-    <115>   DW_AT_decl_file   : 1
-    <116>   DW_AT_decl_line   : 134
-    <117>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><11a>: Abbrev Number: 5 (DW_TAG_member)
-    <11b>   DW_AT_name        : (indirect string, offset: 0x169): ifru_flags
-    <11f>   DW_AT_type        : <0x1e4>
-    <123>   DW_AT_decl_file   : 1
-    <124>   DW_AT_decl_line   : 135
-    <125>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><128>: Abbrev Number: 5 (DW_TAG_member)
-    <129>   DW_AT_name        : (indirect string, offset: 0x17a): ifru_ivalue
-    <12d>   DW_AT_type        : <0x81>
-    <131>   DW_AT_decl_file   : 1
-    <132>   DW_AT_decl_line   : 136
-    <133>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><136>: Abbrev Number: 5 (DW_TAG_member)
-    <137>   DW_AT_name        : (indirect string, offset: 0x186): ifru_mtu
-    <13b>   DW_AT_type        : <0x81>
-    <13f>   DW_AT_decl_file   : 1
-    <140>   DW_AT_decl_line   : 137
-    <141>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><144>: Abbrev Number: 5 (DW_TAG_member)
-    <145>   DW_AT_name        : (indirect string, offset: 0x18f): ifru_map
-    <149>   DW_AT_type        : <0x1eb>
-    <14d>   DW_AT_decl_file   : 1
-    <14e>   DW_AT_decl_line   : 138
-    <14f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><152>: Abbrev Number: 5 (DW_TAG_member)
-    <153>   DW_AT_name        : (indirect string, offset: 0x1e7): ifru_slave
-    <157>   DW_AT_type        : <0x18c>
-    <15b>   DW_AT_decl_file   : 1
-    <15c>   DW_AT_decl_line   : 139
-    <15d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><160>: Abbrev Number: 5 (DW_TAG_member)
-    <161>   DW_AT_name        : (indirect string, offset: 0x1f2): ifru_newname
-    <165>   DW_AT_type        : <0x18c>
-    <169>   DW_AT_decl_file   : 1
-    <16a>   DW_AT_decl_line   : 140
-    <16b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><16e>: Abbrev Number: 5 (DW_TAG_member)
-    <16f>   DW_AT_name        : (indirect string, offset: 0x1ff): ifru_data
-    <173>   DW_AT_type        : <0x256>
-    <177>   DW_AT_decl_file   : 1
-    <178>   DW_AT_decl_line   : 141
-    <179>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><17c>: Abbrev Number: 5 (DW_TAG_member)
-    <17d>   DW_AT_name        : (indirect string, offset: 0x209): ifru_settings
-    <181>   DW_AT_type        : <0x257>
-    <185>   DW_AT_decl_file   : 1
-    <186>   DW_AT_decl_line   : 142
-    <187>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><18a>: Abbrev Number: 0
- <2><18b>: Abbrev Number: 0
- <1><18c>: Abbrev Number: 9 (DW_TAG_array_type)
-    <18d>   DW_AT_type        : <0x8d>
- <2><191>: Abbrev Number: 10 (DW_TAG_subrange_type)
-    <192>   DW_AT_type        : <0x199>
-    <196>   DW_AT_lower_bound : 0
-    <197>   DW_AT_count       : 16
- <2><198>: Abbrev Number: 0
- <1><199>: Abbrev Number: 11 (DW_TAG_base_type)
-    <19a>   DW_AT_name        : (indirect string, offset: 0xe2): sizetype
-    <19e>   DW_AT_byte_size   : 8
-    <19f>   DW_AT_encoding    : 7	(unsigned)
- <1><1a0>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <1a1>   DW_AT_name        : (indirect string, offset: 0x12b): sockaddr
-    <1a5>   DW_AT_byte_size   : 16
-    <1a6>   DW_AT_decl_file   : 3
-    <1a7>   DW_AT_decl_line   : 76
- <2><1a8>: Abbrev Number: 5 (DW_TAG_member)
-    <1a9>   DW_AT_name        : (indirect string, offset: 0xfe): sa_family
-    <1ad>   DW_AT_type        : <0x1c5>
-    <1b1>   DW_AT_decl_file   : 3
-    <1b2>   DW_AT_decl_line   : 77
-    <1b3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><1b6>: Abbrev Number: 5 (DW_TAG_member)
-    <1b7>   DW_AT_name        : (indirect string, offset: 0x123): sa_data
-    <1bb>   DW_AT_type        : <0x1d7>
-    <1bf>   DW_AT_decl_file   : 3
-    <1c0>   DW_AT_decl_line   : 78
-    <1c1>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><1c4>: Abbrev Number: 0
- <1><1c5>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1c6>   DW_AT_type        : <0x1d0>
-    <1ca>   DW_AT_name        : (indirect string, offset: 0x117): sa_family_t
-    <1ce>   DW_AT_decl_file   : 2
-    <1cf>   DW_AT_decl_line   : 34
- <1><1d0>: Abbrev Number: 7 (DW_TAG_base_type)
-    <1d1>   DW_AT_name        : (indirect string, offset: 0x108): unsigned short
-    <1d5>   DW_AT_encoding    : 7	(unsigned)
-    <1d6>   DW_AT_byte_size   : 2
- <1><1d7>: Abbrev Number: 9 (DW_TAG_array_type)
-    <1d8>   DW_AT_type        : <0x8d>
- <2><1dc>: Abbrev Number: 10 (DW_TAG_subrange_type)
-    <1dd>   DW_AT_type        : <0x199>
-    <1e1>   DW_AT_lower_bound : 0
-    <1e2>   DW_AT_count       : 14
- <2><1e3>: Abbrev Number: 0
- <1><1e4>: Abbrev Number: 7 (DW_TAG_base_type)
-    <1e5>   DW_AT_name        : (indirect string, offset: 0x174): short
-    <1e9>   DW_AT_encoding    : 5	(signed)
-    <1ea>   DW_AT_byte_size   : 2
- <1><1eb>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <1ec>   DW_AT_name        : (indirect string, offset: 0x1e1): ifmap
-    <1f0>   DW_AT_byte_size   : 16
-    <1f1>   DW_AT_decl_file   : 1
-    <1f2>   DW_AT_decl_line   : 101
- <2><1f3>: Abbrev Number: 5 (DW_TAG_member)
-    <1f4>   DW_AT_name        : (indirect string, offset: 0x198): mem_start
-    <1f8>   DW_AT_type        : <0x248>
-    <1fc>   DW_AT_decl_file   : 1
-    <1fd>   DW_AT_decl_line   : 102
-    <1fe>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><201>: Abbrev Number: 5 (DW_TAG_member)
-    <202>   DW_AT_name        : (indirect string, offset: 0x1b4): mem_end
-    <206>   DW_AT_type        : <0x248>
-    <20a>   DW_AT_decl_file   : 1
-    <20b>   DW_AT_decl_line   : 103
-    <20c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><20f>: Abbrev Number: 5 (DW_TAG_member)
-    <210>   DW_AT_name        : (indirect string, offset: 0x1bc): base_addr
-    <214>   DW_AT_type        : <0x1d0>
-    <218>   DW_AT_decl_file   : 1
-    <219>   DW_AT_decl_line   : 104
-    <21a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><21d>: Abbrev Number: 5 (DW_TAG_member)
-    <21e>   DW_AT_name        : (indirect string, offset: 0x1c6): irq
-    <222>   DW_AT_type        : <0x24f>
-    <226>   DW_AT_decl_file   : 1
-    <227>   DW_AT_decl_line   : 105
-    <228>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
- <2><22b>: Abbrev Number: 5 (DW_TAG_member)
-    <22c>   DW_AT_name        : (indirect string, offset: 0x1d8): dma
-    <230>   DW_AT_type        : <0x24f>
-    <234>   DW_AT_decl_file   : 1
-    <235>   DW_AT_decl_line   : 106
-    <236>   DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
- <2><239>: Abbrev Number: 5 (DW_TAG_member)
-    <23a>   DW_AT_name        : (indirect string, offset: 0x1dc): port
-    <23e>   DW_AT_type        : <0x24f>
-    <242>   DW_AT_decl_file   : 1
-    <243>   DW_AT_decl_line   : 107
-    <244>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><247>: Abbrev Number: 0
- <1><248>: Abbrev Number: 7 (DW_TAG_base_type)
-    <249>   DW_AT_name        : (indirect string, offset: 0x1a2): long unsigned int
-    <24d>   DW_AT_encoding    : 7	(unsigned)
-    <24e>   DW_AT_byte_size   : 4
- <1><24f>: Abbrev Number: 7 (DW_TAG_base_type)
-    <250>   DW_AT_name        : (indirect string, offset: 0x1ca): unsigned char
-    <254>   DW_AT_encoding    : 8	(unsigned char)
-    <255>   DW_AT_byte_size   : 1
- <1><256>: Abbrev Number: 12 (DW_TAG_pointer_type)
- <1><257>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <258>   DW_AT_name        : (indirect string, offset: 0x340): if_settings
-    <25c>   DW_AT_byte_size   : 12
-    <25d>   DW_AT_decl_file   : 1
-    <25e>   DW_AT_decl_line   : 110
- <2><25f>: Abbrev Number: 5 (DW_TAG_member)
-    <260>   DW_AT_name        : (indirect string, offset: 0x217): type
-    <264>   DW_AT_type        : <0x2f1>
-    <268>   DW_AT_decl_file   : 1
-    <269>   DW_AT_decl_line   : 111
-    <26a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><26d>: Abbrev Number: 5 (DW_TAG_member)
-    <26e>   DW_AT_name        : (indirect string, offset: 0x229): size
-    <272>   DW_AT_type        : <0x2f1>
-    <276>   DW_AT_decl_file   : 1
-    <277>   DW_AT_decl_line   : 112
-    <278>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><27b>: Abbrev Number: 5 (DW_TAG_member)
-    <27c>   DW_AT_name        : (indirect string, offset: 0x22e): ifs_ifsu
-    <280>   DW_AT_type        : <0x289>
-    <284>   DW_AT_decl_file   : 1
-    <285>   DW_AT_decl_line   : 121
-    <286>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><289>: Abbrev Number: 6 (DW_TAG_union_type)
-    <28a>   DW_AT_byte_size   : 4
-    <28b>   DW_AT_decl_file   : 1
-    <28c>   DW_AT_decl_line   : 113
- <3><28d>: Abbrev Number: 5 (DW_TAG_member)
-    <28e>   DW_AT_name        : (indirect string, offset: 0x237): raw_hdlc
-    <292>   DW_AT_type        : <0x2f8>
-    <296>   DW_AT_decl_file   : 1
-    <297>   DW_AT_decl_line   : 114
-    <298>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><29b>: Abbrev Number: 5 (DW_TAG_member)
-    <29c>   DW_AT_name        : (indirect string, offset: 0x25f): cisco
-    <2a0>   DW_AT_type        : <0x329>
-    <2a4>   DW_AT_decl_file   : 1
-    <2a5>   DW_AT_decl_line   : 115
-    <2a6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2a9>: Abbrev Number: 5 (DW_TAG_member)
-    <2aa>   DW_AT_name        : (indirect string, offset: 0x282): fr
-    <2ae>   DW_AT_type        : <0x35a>
-    <2b2>   DW_AT_decl_file   : 1
-    <2b3>   DW_AT_decl_line   : 116
-    <2b4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2b7>: Abbrev Number: 5 (DW_TAG_member)
-    <2b8>   DW_AT_name        : (indirect string, offset: 0x2af): fr_pvc
-    <2bc>   DW_AT_type        : <0x3d1>
-    <2c0>   DW_AT_decl_file   : 1
-    <2c1>   DW_AT_decl_line   : 117
-    <2c2>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2c5>: Abbrev Number: 5 (DW_TAG_member)
-    <2c6>   DW_AT_name        : (indirect string, offset: 0x2c8): fr_pvc_info
-    <2ca>   DW_AT_type        : <0x3f4>
-    <2ce>   DW_AT_decl_file   : 1
-    <2cf>   DW_AT_decl_line   : 118
-    <2d0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2d3>: Abbrev Number: 5 (DW_TAG_member)
-    <2d4>   DW_AT_name        : (indirect string, offset: 0x2ed): sync
-    <2d8>   DW_AT_type        : <0x425>
-    <2dc>   DW_AT_decl_file   : 1
-    <2dd>   DW_AT_decl_line   : 119
-    <2de>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2e1>: Abbrev Number: 5 (DW_TAG_member)
-    <2e2>   DW_AT_name        : (indirect string, offset: 0x326): te1
-    <2e6>   DW_AT_type        : <0x464>
-    <2ea>   DW_AT_decl_file   : 1
-    <2eb>   DW_AT_decl_line   : 120
-    <2ec>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2ef>: Abbrev Number: 0
- <2><2f0>: Abbrev Number: 0
- <1><2f1>: Abbrev Number: 7 (DW_TAG_base_type)
-    <2f2>   DW_AT_name        : (indirect string, offset: 0x21c): unsigned int
-    <2f6>   DW_AT_encoding    : 7	(unsigned)
-    <2f7>   DW_AT_byte_size   : 4
- <1><2f8>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <2f9>   DW_AT_type        : <0x2fd>
- <1><2fd>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2fe>   DW_AT_type        : <0x308>
-    <302>   DW_AT_name        : (indirect string, offset: 0x250): raw_hdlc_proto
-    <306>   DW_AT_decl_file   : 4
-    <307>   DW_AT_decl_line   : 61
- <1><308>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <309>   DW_AT_byte_size   : 4
-    <30a>   DW_AT_decl_file   : 4
-    <30b>   DW_AT_decl_line   : 58
- <2><30c>: Abbrev Number: 5 (DW_TAG_member)
-    <30d>   DW_AT_name        : (indirect string, offset: 0x240): encoding
-    <311>   DW_AT_type        : <0x1d0>
-    <315>   DW_AT_decl_file   : 4
-    <316>   DW_AT_decl_line   : 59
-    <317>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><31a>: Abbrev Number: 5 (DW_TAG_member)
-    <31b>   DW_AT_name        : (indirect string, offset: 0x249): parity
-    <31f>   DW_AT_type        : <0x1d0>
-    <323>   DW_AT_decl_file   : 4
-    <324>   DW_AT_decl_line   : 60
-    <325>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><328>: Abbrev Number: 0
- <1><329>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <32a>   DW_AT_type        : <0x32e>
- <1><32e>: Abbrev Number: 3 (DW_TAG_typedef)
-    <32f>   DW_AT_type        : <0x339>
-    <333>   DW_AT_name        : (indirect string, offset: 0x276): cisco_proto
-    <337>   DW_AT_decl_file   : 4
-    <338>   DW_AT_decl_line   : 81
- <1><339>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <33a>   DW_AT_byte_size   : 8
-    <33b>   DW_AT_decl_file   : 4
-    <33c>   DW_AT_decl_line   : 78
- <2><33d>: Abbrev Number: 5 (DW_TAG_member)
-    <33e>   DW_AT_name        : (indirect string, offset: 0x265): interval
-    <342>   DW_AT_type        : <0x2f1>
-    <346>   DW_AT_decl_file   : 4
-    <347>   DW_AT_decl_line   : 79
-    <348>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><34b>: Abbrev Number: 5 (DW_TAG_member)
-    <34c>   DW_AT_name        : (indirect string, offset: 0x26e): timeout
-    <350>   DW_AT_type        : <0x2f1>
-    <354>   DW_AT_decl_file   : 4
-    <355>   DW_AT_decl_line   : 80
-    <356>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><359>: Abbrev Number: 0
- <1><35a>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <35b>   DW_AT_type        : <0x35f>
- <1><35f>: Abbrev Number: 3 (DW_TAG_typedef)
-    <360>   DW_AT_type        : <0x36a>
-    <364>   DW_AT_name        : (indirect string, offset: 0x2a6): fr_proto
-    <368>   DW_AT_decl_file   : 4
-    <369>   DW_AT_decl_line   : 70
- <1><36a>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <36b>   DW_AT_byte_size   : 24
-    <36c>   DW_AT_decl_file   : 4
-    <36d>   DW_AT_decl_line   : 62
- <2><36e>: Abbrev Number: 5 (DW_TAG_member)
-    <36f>   DW_AT_name        : (indirect string, offset: 0x285): t391
-    <373>   DW_AT_type        : <0x2f1>
-    <377>   DW_AT_decl_file   : 4
-    <378>   DW_AT_decl_line   : 63
-    <379>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><37c>: Abbrev Number: 5 (DW_TAG_member)
-    <37d>   DW_AT_name        : (indirect string, offset: 0x28a): t392
-    <381>   DW_AT_type        : <0x2f1>
-    <385>   DW_AT_decl_file   : 4
-    <386>   DW_AT_decl_line   : 64
-    <387>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><38a>: Abbrev Number: 5 (DW_TAG_member)
-    <38b>   DW_AT_name        : (indirect string, offset: 0x28f): n391
-    <38f>   DW_AT_type        : <0x2f1>
-    <393>   DW_AT_decl_file   : 4
-    <394>   DW_AT_decl_line   : 65
-    <395>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><398>: Abbrev Number: 5 (DW_TAG_member)
-    <399>   DW_AT_name        : (indirect string, offset: 0x294): n392
-    <39d>   DW_AT_type        : <0x2f1>
-    <3a1>   DW_AT_decl_file   : 4
-    <3a2>   DW_AT_decl_line   : 66
-    <3a3>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><3a6>: Abbrev Number: 5 (DW_TAG_member)
-    <3a7>   DW_AT_name        : (indirect string, offset: 0x299): n393
-    <3ab>   DW_AT_type        : <0x2f1>
-    <3af>   DW_AT_decl_file   : 4
-    <3b0>   DW_AT_decl_line   : 67
-    <3b1>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><3b4>: Abbrev Number: 5 (DW_TAG_member)
-    <3b5>   DW_AT_name        : (indirect string, offset: 0x29e): lmi
-    <3b9>   DW_AT_type        : <0x1d0>
-    <3bd>   DW_AT_decl_file   : 4
-    <3be>   DW_AT_decl_line   : 68
-    <3bf>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><3c2>: Abbrev Number: 5 (DW_TAG_member)
-    <3c3>   DW_AT_name        : (indirect string, offset: 0x2a2): dce
-    <3c7>   DW_AT_type        : <0x1d0>
-    <3cb>   DW_AT_decl_file   : 4
-    <3cc>   DW_AT_decl_line   : 69
-    <3cd>   DW_AT_data_member_location: 2 byte block: 23 16 	(DW_OP_plus_uconst: 22)
- <2><3d0>: Abbrev Number: 0
- <1><3d1>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <3d2>   DW_AT_type        : <0x3d6>
- <1><3d6>: Abbrev Number: 3 (DW_TAG_typedef)
-    <3d7>   DW_AT_type        : <0x3e1>
-    <3db>   DW_AT_name        : (indirect string, offset: 0x2bb): fr_proto_pvc
-    <3df>   DW_AT_decl_file   : 4
-    <3e0>   DW_AT_decl_line   : 73
- <1><3e1>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <3e2>   DW_AT_byte_size   : 4
-    <3e3>   DW_AT_decl_file   : 4
-    <3e4>   DW_AT_decl_line   : 71
- <2><3e5>: Abbrev Number: 5 (DW_TAG_member)
-    <3e6>   DW_AT_name        : (indirect string, offset: 0x2b6): dlci
-    <3ea>   DW_AT_type        : <0x2f1>
-    <3ee>   DW_AT_decl_file   : 4
-    <3ef>   DW_AT_decl_line   : 72
-    <3f0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><3f3>: Abbrev Number: 0
- <1><3f4>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <3f5>   DW_AT_type        : <0x3f9>
- <1><3f9>: Abbrev Number: 3 (DW_TAG_typedef)
-    <3fa>   DW_AT_type        : <0x404>
-    <3fe>   DW_AT_name        : (indirect string, offset: 0x2db): fr_proto_pvc_info
-    <402>   DW_AT_decl_file   : 4
-    <403>   DW_AT_decl_line   : 77
- <1><404>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <405>   DW_AT_byte_size   : 20
-    <406>   DW_AT_decl_file   : 4
-    <407>   DW_AT_decl_line   : 74
- <2><408>: Abbrev Number: 5 (DW_TAG_member)
-    <409>   DW_AT_name        : (indirect string, offset: 0x2b6): dlci
-    <40d>   DW_AT_type        : <0x2f1>
-    <411>   DW_AT_decl_file   : 4
-    <412>   DW_AT_decl_line   : 75
-    <413>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><416>: Abbrev Number: 5 (DW_TAG_member)
-    <417>   DW_AT_name        : (indirect string, offset: 0x2d4): master
-    <41b>   DW_AT_type        : <0x18c>
-    <41f>   DW_AT_decl_file   : 4
-    <420>   DW_AT_decl_line   : 76
-    <421>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><424>: Abbrev Number: 0
- <1><425>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <426>   DW_AT_type        : <0x42a>
- <1><42a>: Abbrev Number: 3 (DW_TAG_typedef)
-    <42b>   DW_AT_type        : <0x435>
-    <42f>   DW_AT_name        : (indirect string, offset: 0x311): sync_serial_settings
-    <433>   DW_AT_decl_file   : 4
-    <434>   DW_AT_decl_line   : 51
- <1><435>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <436>   DW_AT_byte_size   : 12
-    <437>   DW_AT_decl_file   : 4
-    <438>   DW_AT_decl_line   : 47
- <2><439>: Abbrev Number: 5 (DW_TAG_member)
-    <43a>   DW_AT_name        : (indirect string, offset: 0x2f2): clock_rate
-    <43e>   DW_AT_type        : <0x2f1>
-    <442>   DW_AT_decl_file   : 4
-    <443>   DW_AT_decl_line   : 48
-    <444>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><447>: Abbrev Number: 5 (DW_TAG_member)
-    <448>   DW_AT_name        : (indirect string, offset: 0x2fd): clock_type
-    <44c>   DW_AT_type        : <0x2f1>
-    <450>   DW_AT_decl_file   : 4
-    <451>   DW_AT_decl_line   : 49
-    <452>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><455>: Abbrev Number: 5 (DW_TAG_member)
-    <456>   DW_AT_name        : (indirect string, offset: 0x308): loopback
-    <45a>   DW_AT_type        : <0x1d0>
-    <45e>   DW_AT_decl_file   : 4
-    <45f>   DW_AT_decl_line   : 50
-    <460>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><463>: Abbrev Number: 0
- <1><464>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <465>   DW_AT_type        : <0x469>
- <1><469>: Abbrev Number: 3 (DW_TAG_typedef)
-    <46a>   DW_AT_type        : <0x474>
-    <46e>   DW_AT_name        : (indirect string, offset: 0x333): te1_settings
-    <472>   DW_AT_decl_file   : 4
-    <473>   DW_AT_decl_line   : 57
- <1><474>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <475>   DW_AT_byte_size   : 16
-    <476>   DW_AT_decl_file   : 4
-    <477>   DW_AT_decl_line   : 52
- <2><478>: Abbrev Number: 5 (DW_TAG_member)
-    <479>   DW_AT_name        : (indirect string, offset: 0x2f2): clock_rate
-    <47d>   DW_AT_type        : <0x2f1>
-    <481>   DW_AT_decl_file   : 4
-    <482>   DW_AT_decl_line   : 53
-    <483>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><486>: Abbrev Number: 5 (DW_TAG_member)
-    <487>   DW_AT_name        : (indirect string, offset: 0x2fd): clock_type
-    <48b>   DW_AT_type        : <0x2f1>
-    <48f>   DW_AT_decl_file   : 4
-    <490>   DW_AT_decl_line   : 54
-    <491>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><494>: Abbrev Number: 5 (DW_TAG_member)
-    <495>   DW_AT_name        : (indirect string, offset: 0x308): loopback
-    <499>   DW_AT_type        : <0x1d0>
-    <49d>   DW_AT_decl_file   : 4
-    <49e>   DW_AT_decl_line   : 55
-    <49f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><4a2>: Abbrev Number: 5 (DW_TAG_member)
-    <4a3>   DW_AT_name        : (indirect string, offset: 0x32a): slot_map
-    <4a7>   DW_AT_type        : <0x2f1>
-    <4ab>   DW_AT_decl_file   : 4
-    <4ac>   DW_AT_decl_line   : 56
-    <4ad>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><4b0>: Abbrev Number: 0
- <1><4b1>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x121): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 5
+    <2a>   DW_AT_decl_line   : 44
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x423): struct_ifconf
+    <3a>   DW_AT_decl_file   : 5
+    <3b>   DW_AT_decl_line   : 41
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x41c): ifconf
+    <41>   DW_AT_byte_size   : 8
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 181
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16d): ifc_len
+    <49>   DW_AT_type        : <0x82>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 182
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x179): ifc_ifcu
+    <57>   DW_AT_type        : <0x60>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 186
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 6 (DW_TAG_union_type)
+    <61>   DW_AT_byte_size   : 4
+    <62>   DW_AT_decl_file   : 1
+    <63>   DW_AT_decl_line   : 183
+ <3><64>: Abbrev Number: 5 (DW_TAG_member)
+    <65>   DW_AT_name        : (indirect string, offset: 0x182): ifcu_buf
+    <69>   DW_AT_type        : <0x89>
+    <6d>   DW_AT_decl_file   : 1
+    <6e>   DW_AT_decl_line   : 184
+    <6f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><72>: Abbrev Number: 5 (DW_TAG_member)
+    <73>   DW_AT_name        : (indirect string, offset: 0x190): ifcu_req
+    <77>   DW_AT_type        : <0x95>
+    <7b>   DW_AT_decl_file   : 1
+    <7c>   DW_AT_decl_line   : 185
+    <7d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><80>: Abbrev Number: 0
+ <2><81>: Abbrev Number: 0
+ <1><82>: Abbrev Number: 7 (DW_TAG_base_type)
+    <83>   DW_AT_name        : (indirect string, offset: 0x175): int
+    <87>   DW_AT_encoding    : 5	(signed)
+    <88>   DW_AT_byte_size   : 4
+ <1><89>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <8a>   DW_AT_type        : <0x8e>
+ <1><8e>: Abbrev Number: 7 (DW_TAG_base_type)
+    <8f>   DW_AT_name        : (indirect string, offset: 0x18b): char
+    <93>   DW_AT_encoding    : 8	(unsigned char)
+    <94>   DW_AT_byte_size   : 1
+ <1><95>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <96>   DW_AT_type        : <0x9a>
+ <1><9a>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <9b>   DW_AT_name        : (indirect string, offset: 0x416): ifreq
+    <9f>   DW_AT_byte_size   : 32
+    <a0>   DW_AT_decl_file   : 1
+    <a1>   DW_AT_decl_line   : 141
+ <2><a2>: Abbrev Number: 5 (DW_TAG_member)
+    <a3>   DW_AT_name        : (indirect string, offset: 0x199): ifr_ifrn
+    <a7>   DW_AT_type        : <0xb0>
+    <ab>   DW_AT_decl_file   : 1
+    <ac>   DW_AT_decl_line   : 145
+    <ad>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><b0>: Abbrev Number: 6 (DW_TAG_union_type)
+    <b1>   DW_AT_byte_size   : 16
+    <b2>   DW_AT_decl_file   : 1
+    <b3>   DW_AT_decl_line   : 143
+ <3><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x1a2): ifrn_name
+    <b9>   DW_AT_type        : <0x18d>
+    <bd>   DW_AT_decl_file   : 1
+    <be>   DW_AT_decl_line   : 144
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><c2>: Abbrev Number: 0
+ <2><c3>: Abbrev Number: 5 (DW_TAG_member)
+    <c4>   DW_AT_name        : (indirect string, offset: 0x1b5): ifr_ifru
+    <c8>   DW_AT_type        : <0xd1>
+    <cc>   DW_AT_decl_file   : 1
+    <cd>   DW_AT_decl_line   : 160
+    <ce>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><d1>: Abbrev Number: 6 (DW_TAG_union_type)
+    <d2>   DW_AT_byte_size   : 16
+    <d3>   DW_AT_decl_file   : 1
+    <d4>   DW_AT_decl_line   : 146
+ <3><d5>: Abbrev Number: 5 (DW_TAG_member)
+    <d6>   DW_AT_name        : (indirect string, offset: 0x1be): ifru_addr
+    <da>   DW_AT_type        : <0x1a1>
+    <de>   DW_AT_decl_file   : 1
+    <df>   DW_AT_decl_line   : 147
+    <e0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><e3>: Abbrev Number: 5 (DW_TAG_member)
+    <e4>   DW_AT_name        : (indirect string, offset: 0x1fe): ifru_dstaddr
+    <e8>   DW_AT_type        : <0x1a1>
+    <ec>   DW_AT_decl_file   : 1
+    <ed>   DW_AT_decl_line   : 148
+    <ee>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><f1>: Abbrev Number: 5 (DW_TAG_member)
+    <f2>   DW_AT_name        : (indirect string, offset: 0x20b): ifru_broadaddr
+    <f6>   DW_AT_type        : <0x1a1>
+    <fa>   DW_AT_decl_file   : 1
+    <fb>   DW_AT_decl_line   : 149
+    <fc>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><ff>: Abbrev Number: 5 (DW_TAG_member)
+    <100>   DW_AT_name        : (indirect string, offset: 0x21a): ifru_netmask
+    <104>   DW_AT_type        : <0x1a1>
+    <108>   DW_AT_decl_file   : 1
+    <109>   DW_AT_decl_line   : 150
+    <10a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><10d>: Abbrev Number: 5 (DW_TAG_member)
+    <10e>   DW_AT_name        : (indirect string, offset: 0x227): ifru_hwaddr
+    <112>   DW_AT_type        : <0x1a1>
+    <116>   DW_AT_decl_file   : 1
+    <117>   DW_AT_decl_line   : 151
+    <118>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><11b>: Abbrev Number: 5 (DW_TAG_member)
+    <11c>   DW_AT_name        : (indirect string, offset: 0x233): ifru_flags
+    <120>   DW_AT_type        : <0x1e5>
+    <124>   DW_AT_decl_file   : 1
+    <125>   DW_AT_decl_line   : 152
+    <126>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><129>: Abbrev Number: 5 (DW_TAG_member)
+    <12a>   DW_AT_name        : (indirect string, offset: 0x244): ifru_ivalue
+    <12e>   DW_AT_type        : <0x82>
+    <132>   DW_AT_decl_file   : 1
+    <133>   DW_AT_decl_line   : 153
+    <134>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><137>: Abbrev Number: 5 (DW_TAG_member)
+    <138>   DW_AT_name        : (indirect string, offset: 0x250): ifru_mtu
+    <13c>   DW_AT_type        : <0x82>
+    <140>   DW_AT_decl_file   : 1
+    <141>   DW_AT_decl_line   : 154
+    <142>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><145>: Abbrev Number: 5 (DW_TAG_member)
+    <146>   DW_AT_name        : (indirect string, offset: 0x259): ifru_map
+    <14a>   DW_AT_type        : <0x1ec>
+    <14e>   DW_AT_decl_file   : 1
+    <14f>   DW_AT_decl_line   : 155
+    <150>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><153>: Abbrev Number: 5 (DW_TAG_member)
+    <154>   DW_AT_name        : (indirect string, offset: 0x2b1): ifru_slave
+    <158>   DW_AT_type        : <0x18d>
+    <15c>   DW_AT_decl_file   : 1
+    <15d>   DW_AT_decl_line   : 156
+    <15e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><161>: Abbrev Number: 5 (DW_TAG_member)
+    <162>   DW_AT_name        : (indirect string, offset: 0x2bc): ifru_newname
+    <166>   DW_AT_type        : <0x18d>
+    <16a>   DW_AT_decl_file   : 1
+    <16b>   DW_AT_decl_line   : 157
+    <16c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><16f>: Abbrev Number: 5 (DW_TAG_member)
+    <170>   DW_AT_name        : (indirect string, offset: 0x2c9): ifru_data
+    <174>   DW_AT_type        : <0x257>
+    <178>   DW_AT_decl_file   : 1
+    <179>   DW_AT_decl_line   : 158
+    <17a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><17d>: Abbrev Number: 5 (DW_TAG_member)
+    <17e>   DW_AT_name        : (indirect string, offset: 0x2d3): ifru_settings
+    <182>   DW_AT_type        : <0x258>
+    <186>   DW_AT_decl_file   : 1
+    <187>   DW_AT_decl_line   : 159
+    <188>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><18b>: Abbrev Number: 0
+ <2><18c>: Abbrev Number: 0
+ <1><18d>: Abbrev Number: 9 (DW_TAG_array_type)
+    <18e>   DW_AT_type        : <0x8e>
+ <2><192>: Abbrev Number: 10 (DW_TAG_subrange_type)
+    <193>   DW_AT_type        : <0x19a>
+    <197>   DW_AT_lower_bound : 0
+    <198>   DW_AT_count       : 16
+ <2><199>: Abbrev Number: 0
+ <1><19a>: Abbrev Number: 11 (DW_TAG_base_type)
+    <19b>   DW_AT_name        : (indirect string, offset: 0x1ac): sizetype
+    <19f>   DW_AT_byte_size   : 8
+    <1a0>   DW_AT_encoding    : 7	(unsigned)
+ <1><1a1>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <1a2>   DW_AT_name        : (indirect string, offset: 0x1f5): sockaddr
+    <1a6>   DW_AT_byte_size   : 16
+    <1a7>   DW_AT_decl_file   : 3
+    <1a8>   DW_AT_decl_line   : 74
+ <2><1a9>: Abbrev Number: 5 (DW_TAG_member)
+    <1aa>   DW_AT_name        : (indirect string, offset: 0x1c8): sa_family
+    <1ae>   DW_AT_type        : <0x1c6>
+    <1b2>   DW_AT_decl_file   : 3
+    <1b3>   DW_AT_decl_line   : 75
+    <1b4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><1b7>: Abbrev Number: 5 (DW_TAG_member)
+    <1b8>   DW_AT_name        : (indirect string, offset: 0x1ed): sa_data
+    <1bc>   DW_AT_type        : <0x1d8>
+    <1c0>   DW_AT_decl_file   : 3
+    <1c1>   DW_AT_decl_line   : 76
+    <1c2>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><1c5>: Abbrev Number: 0
+ <1><1c6>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1c7>   DW_AT_type        : <0x1d1>
+    <1cb>   DW_AT_name        : (indirect string, offset: 0x1e1): sa_family_t
+    <1cf>   DW_AT_decl_file   : 2
+    <1d0>   DW_AT_decl_line   : 34
+ <1><1d1>: Abbrev Number: 7 (DW_TAG_base_type)
+    <1d2>   DW_AT_name        : (indirect string, offset: 0x1d2): unsigned short
+    <1d6>   DW_AT_encoding    : 7	(unsigned)
+    <1d7>   DW_AT_byte_size   : 2
+ <1><1d8>: Abbrev Number: 9 (DW_TAG_array_type)
+    <1d9>   DW_AT_type        : <0x8e>
+ <2><1dd>: Abbrev Number: 10 (DW_TAG_subrange_type)
+    <1de>   DW_AT_type        : <0x19a>
+    <1e2>   DW_AT_lower_bound : 0
+    <1e3>   DW_AT_count       : 14
+ <2><1e4>: Abbrev Number: 0
+ <1><1e5>: Abbrev Number: 7 (DW_TAG_base_type)
+    <1e6>   DW_AT_name        : (indirect string, offset: 0x23e): short
+    <1ea>   DW_AT_encoding    : 5	(signed)
+    <1eb>   DW_AT_byte_size   : 2
+ <1><1ec>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <1ed>   DW_AT_name        : (indirect string, offset: 0x2ab): ifmap
+    <1f1>   DW_AT_byte_size   : 16
+    <1f2>   DW_AT_decl_file   : 1
+    <1f3>   DW_AT_decl_line   : 118
+ <2><1f4>: Abbrev Number: 5 (DW_TAG_member)
+    <1f5>   DW_AT_name        : (indirect string, offset: 0x262): mem_start
+    <1f9>   DW_AT_type        : <0x249>
+    <1fd>   DW_AT_decl_file   : 1
+    <1fe>   DW_AT_decl_line   : 119
+    <1ff>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><202>: Abbrev Number: 5 (DW_TAG_member)
+    <203>   DW_AT_name        : (indirect string, offset: 0x27e): mem_end
+    <207>   DW_AT_type        : <0x249>
+    <20b>   DW_AT_decl_file   : 1
+    <20c>   DW_AT_decl_line   : 120
+    <20d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><210>: Abbrev Number: 5 (DW_TAG_member)
+    <211>   DW_AT_name        : (indirect string, offset: 0x286): base_addr
+    <215>   DW_AT_type        : <0x1d1>
+    <219>   DW_AT_decl_file   : 1
+    <21a>   DW_AT_decl_line   : 121
+    <21b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><21e>: Abbrev Number: 5 (DW_TAG_member)
+    <21f>   DW_AT_name        : (indirect string, offset: 0x290): irq
+    <223>   DW_AT_type        : <0x250>
+    <227>   DW_AT_decl_file   : 1
+    <228>   DW_AT_decl_line   : 122
+    <229>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+ <2><22c>: Abbrev Number: 5 (DW_TAG_member)
+    <22d>   DW_AT_name        : (indirect string, offset: 0x2a2): dma
+    <231>   DW_AT_type        : <0x250>
+    <235>   DW_AT_decl_file   : 1
+    <236>   DW_AT_decl_line   : 123
+    <237>   DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
+ <2><23a>: Abbrev Number: 5 (DW_TAG_member)
+    <23b>   DW_AT_name        : (indirect string, offset: 0x2a6): port
+    <23f>   DW_AT_type        : <0x250>
+    <243>   DW_AT_decl_file   : 1
+    <244>   DW_AT_decl_line   : 124
+    <245>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><248>: Abbrev Number: 0
+ <1><249>: Abbrev Number: 7 (DW_TAG_base_type)
+    <24a>   DW_AT_name        : (indirect string, offset: 0x26c): long unsigned int
+    <24e>   DW_AT_encoding    : 7	(unsigned)
+    <24f>   DW_AT_byte_size   : 4
+ <1><250>: Abbrev Number: 7 (DW_TAG_base_type)
+    <251>   DW_AT_name        : (indirect string, offset: 0x294): unsigned char
+    <255>   DW_AT_encoding    : 8	(unsigned char)
+    <256>   DW_AT_byte_size   : 1
+ <1><257>: Abbrev Number: 12 (DW_TAG_pointer_type)
+ <1><258>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <259>   DW_AT_name        : (indirect string, offset: 0x40a): if_settings
+    <25d>   DW_AT_byte_size   : 12
+    <25e>   DW_AT_decl_file   : 1
+    <25f>   DW_AT_decl_line   : 127
+ <2><260>: Abbrev Number: 5 (DW_TAG_member)
+    <261>   DW_AT_name        : (indirect string, offset: 0x2e1): type
+    <265>   DW_AT_type        : <0x2f2>
+    <269>   DW_AT_decl_file   : 1
+    <26a>   DW_AT_decl_line   : 128
+    <26b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><26e>: Abbrev Number: 5 (DW_TAG_member)
+    <26f>   DW_AT_name        : (indirect string, offset: 0x2f3): size
+    <273>   DW_AT_type        : <0x2f2>
+    <277>   DW_AT_decl_file   : 1
+    <278>   DW_AT_decl_line   : 129
+    <279>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><27c>: Abbrev Number: 5 (DW_TAG_member)
+    <27d>   DW_AT_name        : (indirect string, offset: 0x2f8): ifs_ifsu
+    <281>   DW_AT_type        : <0x28a>
+    <285>   DW_AT_decl_file   : 1
+    <286>   DW_AT_decl_line   : 138
+    <287>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><28a>: Abbrev Number: 6 (DW_TAG_union_type)
+    <28b>   DW_AT_byte_size   : 4
+    <28c>   DW_AT_decl_file   : 1
+    <28d>   DW_AT_decl_line   : 130
+ <3><28e>: Abbrev Number: 5 (DW_TAG_member)
+    <28f>   DW_AT_name        : (indirect string, offset: 0x301): raw_hdlc
+    <293>   DW_AT_type        : <0x2f9>
+    <297>   DW_AT_decl_file   : 1
+    <298>   DW_AT_decl_line   : 131
+    <299>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><29c>: Abbrev Number: 5 (DW_TAG_member)
+    <29d>   DW_AT_name        : (indirect string, offset: 0x329): cisco
+    <2a1>   DW_AT_type        : <0x32a>
+    <2a5>   DW_AT_decl_file   : 1
+    <2a6>   DW_AT_decl_line   : 132
+    <2a7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2aa>: Abbrev Number: 5 (DW_TAG_member)
+    <2ab>   DW_AT_name        : (indirect string, offset: 0x34c): fr
+    <2af>   DW_AT_type        : <0x35b>
+    <2b3>   DW_AT_decl_file   : 1
+    <2b4>   DW_AT_decl_line   : 133
+    <2b5>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2b8>: Abbrev Number: 5 (DW_TAG_member)
+    <2b9>   DW_AT_name        : (indirect string, offset: 0x379): fr_pvc
+    <2bd>   DW_AT_type        : <0x3d2>
+    <2c1>   DW_AT_decl_file   : 1
+    <2c2>   DW_AT_decl_line   : 134
+    <2c3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2c6>: Abbrev Number: 5 (DW_TAG_member)
+    <2c7>   DW_AT_name        : (indirect string, offset: 0x392): fr_pvc_info
+    <2cb>   DW_AT_type        : <0x3f5>
+    <2cf>   DW_AT_decl_file   : 1
+    <2d0>   DW_AT_decl_line   : 135
+    <2d1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2d4>: Abbrev Number: 5 (DW_TAG_member)
+    <2d5>   DW_AT_name        : (indirect string, offset: 0x3b7): sync
+    <2d9>   DW_AT_type        : <0x426>
+    <2dd>   DW_AT_decl_file   : 1
+    <2de>   DW_AT_decl_line   : 136
+    <2df>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2e2>: Abbrev Number: 5 (DW_TAG_member)
+    <2e3>   DW_AT_name        : (indirect string, offset: 0x3f0): te1
+    <2e7>   DW_AT_type        : <0x465>
+    <2eb>   DW_AT_decl_file   : 1
+    <2ec>   DW_AT_decl_line   : 137
+    <2ed>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2f0>: Abbrev Number: 0
+ <2><2f1>: Abbrev Number: 0
+ <1><2f2>: Abbrev Number: 7 (DW_TAG_base_type)
+    <2f3>   DW_AT_name        : (indirect string, offset: 0x2e6): unsigned int
+    <2f7>   DW_AT_encoding    : 7	(unsigned)
+    <2f8>   DW_AT_byte_size   : 4
+ <1><2f9>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <2fa>   DW_AT_type        : <0x2fe>
+ <1><2fe>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2ff>   DW_AT_type        : <0x309>
+    <303>   DW_AT_name        : (indirect string, offset: 0x31a): raw_hdlc_proto
+    <307>   DW_AT_decl_file   : 4
+    <308>   DW_AT_decl_line   : 61
+ <1><309>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <30a>   DW_AT_byte_size   : 4
+    <30b>   DW_AT_decl_file   : 4
+    <30c>   DW_AT_decl_line   : 58
+ <2><30d>: Abbrev Number: 5 (DW_TAG_member)
+    <30e>   DW_AT_name        : (indirect string, offset: 0x30a): encoding
+    <312>   DW_AT_type        : <0x1d1>
+    <316>   DW_AT_decl_file   : 4
+    <317>   DW_AT_decl_line   : 59
+    <318>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><31b>: Abbrev Number: 5 (DW_TAG_member)
+    <31c>   DW_AT_name        : (indirect string, offset: 0x313): parity
+    <320>   DW_AT_type        : <0x1d1>
+    <324>   DW_AT_decl_file   : 4
+    <325>   DW_AT_decl_line   : 60
+    <326>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><329>: Abbrev Number: 0
+ <1><32a>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <32b>   DW_AT_type        : <0x32f>
+ <1><32f>: Abbrev Number: 3 (DW_TAG_typedef)
+    <330>   DW_AT_type        : <0x33a>
+    <334>   DW_AT_name        : (indirect string, offset: 0x340): cisco_proto
+    <338>   DW_AT_decl_file   : 4
+    <339>   DW_AT_decl_line   : 81
+ <1><33a>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <33b>   DW_AT_byte_size   : 8
+    <33c>   DW_AT_decl_file   : 4
+    <33d>   DW_AT_decl_line   : 78
+ <2><33e>: Abbrev Number: 5 (DW_TAG_member)
+    <33f>   DW_AT_name        : (indirect string, offset: 0x32f): interval
+    <343>   DW_AT_type        : <0x2f2>
+    <347>   DW_AT_decl_file   : 4
+    <348>   DW_AT_decl_line   : 79
+    <349>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><34c>: Abbrev Number: 5 (DW_TAG_member)
+    <34d>   DW_AT_name        : (indirect string, offset: 0x338): timeout
+    <351>   DW_AT_type        : <0x2f2>
+    <355>   DW_AT_decl_file   : 4
+    <356>   DW_AT_decl_line   : 80
+    <357>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><35a>: Abbrev Number: 0
+ <1><35b>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <35c>   DW_AT_type        : <0x360>
+ <1><360>: Abbrev Number: 3 (DW_TAG_typedef)
+    <361>   DW_AT_type        : <0x36b>
+    <365>   DW_AT_name        : (indirect string, offset: 0x370): fr_proto
+    <369>   DW_AT_decl_file   : 4
+    <36a>   DW_AT_decl_line   : 70
+ <1><36b>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <36c>   DW_AT_byte_size   : 24
+    <36d>   DW_AT_decl_file   : 4
+    <36e>   DW_AT_decl_line   : 62
+ <2><36f>: Abbrev Number: 5 (DW_TAG_member)
+    <370>   DW_AT_name        : (indirect string, offset: 0x34f): t391
+    <374>   DW_AT_type        : <0x2f2>
+    <378>   DW_AT_decl_file   : 4
+    <379>   DW_AT_decl_line   : 63
+    <37a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><37d>: Abbrev Number: 5 (DW_TAG_member)
+    <37e>   DW_AT_name        : (indirect string, offset: 0x354): t392
+    <382>   DW_AT_type        : <0x2f2>
+    <386>   DW_AT_decl_file   : 4
+    <387>   DW_AT_decl_line   : 64
+    <388>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><38b>: Abbrev Number: 5 (DW_TAG_member)
+    <38c>   DW_AT_name        : (indirect string, offset: 0x359): n391
+    <390>   DW_AT_type        : <0x2f2>
+    <394>   DW_AT_decl_file   : 4
+    <395>   DW_AT_decl_line   : 65
+    <396>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><399>: Abbrev Number: 5 (DW_TAG_member)
+    <39a>   DW_AT_name        : (indirect string, offset: 0x35e): n392
+    <39e>   DW_AT_type        : <0x2f2>
+    <3a2>   DW_AT_decl_file   : 4
+    <3a3>   DW_AT_decl_line   : 66
+    <3a4>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><3a7>: Abbrev Number: 5 (DW_TAG_member)
+    <3a8>   DW_AT_name        : (indirect string, offset: 0x363): n393
+    <3ac>   DW_AT_type        : <0x2f2>
+    <3b0>   DW_AT_decl_file   : 4
+    <3b1>   DW_AT_decl_line   : 67
+    <3b2>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><3b5>: Abbrev Number: 5 (DW_TAG_member)
+    <3b6>   DW_AT_name        : (indirect string, offset: 0x368): lmi
+    <3ba>   DW_AT_type        : <0x1d1>
+    <3be>   DW_AT_decl_file   : 4
+    <3bf>   DW_AT_decl_line   : 68
+    <3c0>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><3c3>: Abbrev Number: 5 (DW_TAG_member)
+    <3c4>   DW_AT_name        : (indirect string, offset: 0x36c): dce
+    <3c8>   DW_AT_type        : <0x1d1>
+    <3cc>   DW_AT_decl_file   : 4
+    <3cd>   DW_AT_decl_line   : 69
+    <3ce>   DW_AT_data_member_location: 2 byte block: 23 16 	(DW_OP_plus_uconst: 22)
+ <2><3d1>: Abbrev Number: 0
+ <1><3d2>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <3d3>   DW_AT_type        : <0x3d7>
+ <1><3d7>: Abbrev Number: 3 (DW_TAG_typedef)
+    <3d8>   DW_AT_type        : <0x3e2>
+    <3dc>   DW_AT_name        : (indirect string, offset: 0x385): fr_proto_pvc
+    <3e0>   DW_AT_decl_file   : 4
+    <3e1>   DW_AT_decl_line   : 73
+ <1><3e2>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <3e3>   DW_AT_byte_size   : 4
+    <3e4>   DW_AT_decl_file   : 4
+    <3e5>   DW_AT_decl_line   : 71
+ <2><3e6>: Abbrev Number: 5 (DW_TAG_member)
+    <3e7>   DW_AT_name        : (indirect string, offset: 0x380): dlci
+    <3eb>   DW_AT_type        : <0x2f2>
+    <3ef>   DW_AT_decl_file   : 4
+    <3f0>   DW_AT_decl_line   : 72
+    <3f1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><3f4>: Abbrev Number: 0
+ <1><3f5>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <3f6>   DW_AT_type        : <0x3fa>
+ <1><3fa>: Abbrev Number: 3 (DW_TAG_typedef)
+    <3fb>   DW_AT_type        : <0x405>
+    <3ff>   DW_AT_name        : (indirect string, offset: 0x3a5): fr_proto_pvc_info
+    <403>   DW_AT_decl_file   : 4
+    <404>   DW_AT_decl_line   : 77
+ <1><405>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <406>   DW_AT_byte_size   : 20
+    <407>   DW_AT_decl_file   : 4
+    <408>   DW_AT_decl_line   : 74
+ <2><409>: Abbrev Number: 5 (DW_TAG_member)
+    <40a>   DW_AT_name        : (indirect string, offset: 0x380): dlci
+    <40e>   DW_AT_type        : <0x2f2>
+    <412>   DW_AT_decl_file   : 4
+    <413>   DW_AT_decl_line   : 75
+    <414>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><417>: Abbrev Number: 5 (DW_TAG_member)
+    <418>   DW_AT_name        : (indirect string, offset: 0x39e): master
+    <41c>   DW_AT_type        : <0x18d>
+    <420>   DW_AT_decl_file   : 4
+    <421>   DW_AT_decl_line   : 76
+    <422>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><425>: Abbrev Number: 0
+ <1><426>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <427>   DW_AT_type        : <0x42b>
+ <1><42b>: Abbrev Number: 3 (DW_TAG_typedef)
+    <42c>   DW_AT_type        : <0x436>
+    <430>   DW_AT_name        : (indirect string, offset: 0x3db): sync_serial_settings
+    <434>   DW_AT_decl_file   : 4
+    <435>   DW_AT_decl_line   : 51
+ <1><436>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <437>   DW_AT_byte_size   : 12
+    <438>   DW_AT_decl_file   : 4
+    <439>   DW_AT_decl_line   : 47
+ <2><43a>: Abbrev Number: 5 (DW_TAG_member)
+    <43b>   DW_AT_name        : (indirect string, offset: 0x3bc): clock_rate
+    <43f>   DW_AT_type        : <0x2f2>
+    <443>   DW_AT_decl_file   : 4
+    <444>   DW_AT_decl_line   : 48
+    <445>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><448>: Abbrev Number: 5 (DW_TAG_member)
+    <449>   DW_AT_name        : (indirect string, offset: 0x3c7): clock_type
+    <44d>   DW_AT_type        : <0x2f2>
+    <451>   DW_AT_decl_file   : 4
+    <452>   DW_AT_decl_line   : 49
+    <453>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><456>: Abbrev Number: 5 (DW_TAG_member)
+    <457>   DW_AT_name        : (indirect string, offset: 0x3d2): loopback
+    <45b>   DW_AT_type        : <0x1d1>
+    <45f>   DW_AT_decl_file   : 4
+    <460>   DW_AT_decl_line   : 50
+    <461>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><464>: Abbrev Number: 0
+ <1><465>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <466>   DW_AT_type        : <0x46a>
+ <1><46a>: Abbrev Number: 3 (DW_TAG_typedef)
+    <46b>   DW_AT_type        : <0x475>
+    <46f>   DW_AT_name        : (indirect string, offset: 0x3fd): te1_settings
+    <473>   DW_AT_decl_file   : 4
+    <474>   DW_AT_decl_line   : 57
+ <1><475>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <476>   DW_AT_byte_size   : 16
+    <477>   DW_AT_decl_file   : 4
+    <478>   DW_AT_decl_line   : 52
+ <2><479>: Abbrev Number: 5 (DW_TAG_member)
+    <47a>   DW_AT_name        : (indirect string, offset: 0x3bc): clock_rate
+    <47e>   DW_AT_type        : <0x2f2>
+    <482>   DW_AT_decl_file   : 4
+    <483>   DW_AT_decl_line   : 53
+    <484>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><487>: Abbrev Number: 5 (DW_TAG_member)
+    <488>   DW_AT_name        : (indirect string, offset: 0x3c7): clock_type
+    <48c>   DW_AT_type        : <0x2f2>
+    <490>   DW_AT_decl_file   : 4
+    <491>   DW_AT_decl_line   : 54
+    <492>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><495>: Abbrev Number: 5 (DW_TAG_member)
+    <496>   DW_AT_name        : (indirect string, offset: 0x3d2): loopback
+    <49a>   DW_AT_type        : <0x1d1>
+    <49e>   DW_AT_decl_file   : 4
+    <49f>   DW_AT_decl_line   : 55
+    <4a0>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><4a3>: Abbrev Number: 5 (DW_TAG_member)
+    <4a4>   DW_AT_name        : (indirect string, offset: 0x3f4): slot_map
+    <4a8>   DW_AT_type        : <0x2f2>
+    <4ac>   DW_AT_decl_file   : 4
+    <4ad>   DW_AT_decl_line   : 56
+    <4ae>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><4b1>: Abbrev Number: 0
+ <1><4b2>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_ifconf.d2 b/mpers-m32/struct_ifconf.d2
index 6f2a8c6..0ba7191 100644
--- a/mpers-m32/struct_ifconf.d2
+++ b/mpers-m32/struct_ifconf.d2
@@ -1,645 +1,645 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 44
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x359): struct_ifconf
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x423): struct_ifconf
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 41
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x352): ifconf
+DW_AT_name        : (indirect string, offset: 0x41c): ifconf
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 164
-<2><43>
+DW_AT_decl_line   : 181
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa3): ifc_len
-DW_AT_type        : <0x81>
+DW_AT_name        : (indirect string, offset: 0x16d): ifc_len
+DW_AT_type        : <0x82>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 165
+DW_AT_decl_line   : 182
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xaf): ifc_ifcu
-DW_AT_type        : <0x5f>
+DW_AT_name        : (indirect string, offset: 0x179): ifc_ifcu
+DW_AT_type        : <0x60>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 169
+DW_AT_decl_line   : 186
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 166
-<3><63>
+DW_AT_decl_line   : 183
+<3><64>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb8): ifcu_buf
-DW_AT_type        : <0x88>
+DW_AT_name        : (indirect string, offset: 0x182): ifcu_buf
+DW_AT_type        : <0x89>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 167
+DW_AT_decl_line   : 184
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><71>
+<3><72>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc6): ifcu_req
-DW_AT_type        : <0x94>
+DW_AT_name        : (indirect string, offset: 0x190): ifcu_req
+DW_AT_type        : <0x95>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 168
+DW_AT_decl_line   : 185
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><81>
+<1><82>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xab): int
+DW_AT_name        : (indirect string, offset: 0x175): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><88>
+<1><89>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x8d>
-<1><8d>
+DW_AT_type        : <0x8e>
+<1><8e>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc1): char
+DW_AT_name        : (indirect string, offset: 0x18b): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><94>
+<1><95>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x99>
-<1><99>
+DW_AT_type        : <0x9a>
+<1><9a>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x34c): ifreq
+DW_AT_name        : (indirect string, offset: 0x416): ifreq
 DW_AT_byte_size   : 32
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 124
-<2><a1>
+DW_AT_decl_line   : 141
+<2><a2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcf): ifr_ifrn
-DW_AT_type        : <0xaf>
+DW_AT_name        : (indirect string, offset: 0x199): ifr_ifrn
+DW_AT_type        : <0xb0>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 128
+DW_AT_decl_line   : 145
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><af>
+<2><b0>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 126
-<3><b3>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd8): ifrn_name
-DW_AT_type        : <0x18c>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 127
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><c2>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xeb): ifr_ifru
-DW_AT_type        : <0xd0>
-DW_AT_decl_file   : 1
 DW_AT_decl_line   : 143
+<3><b4>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1a2): ifrn_name
+DW_AT_type        : <0x18d>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 144
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><c3>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1b5): ifr_ifru
+DW_AT_type        : <0xd1>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 160
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><d0>
+<2><d1>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 129
-<3><d4>
+DW_AT_decl_line   : 146
+<3><d5>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf4): ifru_addr
-DW_AT_type        : <0x1a0>
+DW_AT_name        : (indirect string, offset: 0x1be): ifru_addr
+DW_AT_type        : <0x1a1>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 130
+DW_AT_decl_line   : 147
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><e2>
+<3><e3>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x134): ifru_dstaddr
-DW_AT_type        : <0x1a0>
+DW_AT_name        : (indirect string, offset: 0x1fe): ifru_dstaddr
+DW_AT_type        : <0x1a1>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 131
+DW_AT_decl_line   : 148
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><f0>
+<3><f1>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x141): ifru_broadaddr
-DW_AT_type        : <0x1a0>
+DW_AT_name        : (indirect string, offset: 0x20b): ifru_broadaddr
+DW_AT_type        : <0x1a1>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 132
+DW_AT_decl_line   : 149
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><fe>
+<3><ff>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x150): ifru_netmask
-DW_AT_type        : <0x1a0>
+DW_AT_name        : (indirect string, offset: 0x21a): ifru_netmask
+DW_AT_type        : <0x1a1>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 133
+DW_AT_decl_line   : 150
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><10c>
+<3><10d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15d): ifru_hwaddr
-DW_AT_type        : <0x1a0>
+DW_AT_name        : (indirect string, offset: 0x227): ifru_hwaddr
+DW_AT_type        : <0x1a1>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 134
+DW_AT_decl_line   : 151
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><11a>
+<3><11b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x169): ifru_flags
-DW_AT_type        : <0x1e4>
+DW_AT_name        : (indirect string, offset: 0x233): ifru_flags
+DW_AT_type        : <0x1e5>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 135
+DW_AT_decl_line   : 152
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><128>
+<3><129>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17a): ifru_ivalue
-DW_AT_type        : <0x81>
+DW_AT_name        : (indirect string, offset: 0x244): ifru_ivalue
+DW_AT_type        : <0x82>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 136
+DW_AT_decl_line   : 153
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><136>
+<3><137>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x186): ifru_mtu
-DW_AT_type        : <0x81>
+DW_AT_name        : (indirect string, offset: 0x250): ifru_mtu
+DW_AT_type        : <0x82>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 137
+DW_AT_decl_line   : 154
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><144>
+<3><145>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x18f): ifru_map
-DW_AT_type        : <0x1eb>
+DW_AT_name        : (indirect string, offset: 0x259): ifru_map
+DW_AT_type        : <0x1ec>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 138
+DW_AT_decl_line   : 155
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><152>
+<3><153>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1e7): ifru_slave
-DW_AT_type        : <0x18c>
+DW_AT_name        : (indirect string, offset: 0x2b1): ifru_slave
+DW_AT_type        : <0x18d>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 139
+DW_AT_decl_line   : 156
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><160>
+<3><161>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f2): ifru_newname
-DW_AT_type        : <0x18c>
+DW_AT_name        : (indirect string, offset: 0x2bc): ifru_newname
+DW_AT_type        : <0x18d>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 140
+DW_AT_decl_line   : 157
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><16e>
+<3><16f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1ff): ifru_data
-DW_AT_type        : <0x256>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 141
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><17c>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x209): ifru_settings
+DW_AT_name        : (indirect string, offset: 0x2c9): ifru_data
 DW_AT_type        : <0x257>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 142
+DW_AT_decl_line   : 158
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><18c>
+<3><17d>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2d3): ifru_settings
+DW_AT_type        : <0x258>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 159
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><18d>
 Abbrev Number: 9 (DW_TAG_array_type)
-DW_AT_type        : <0x8d>
-<2><191>
+DW_AT_type        : <0x8e>
+<2><192>
 Abbrev Number: 10 (DW_TAG_subrange_type)
-DW_AT_type        : <0x199>
+DW_AT_type        : <0x19a>
 DW_AT_lower_bound : 0
 DW_AT_count       : 16
-<1><199>
+<1><19a>
 Abbrev Number: 11 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe2): sizetype
+DW_AT_name        : (indirect string, offset: 0x1ac): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><1a0>
+<1><1a1>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x12b): sockaddr
+DW_AT_name        : (indirect string, offset: 0x1f5): sockaddr
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 3
+DW_AT_decl_line   : 74
+<2><1a9>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1c8): sa_family
+DW_AT_type        : <0x1c6>
+DW_AT_decl_file   : 3
+DW_AT_decl_line   : 75
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><1b7>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ed): sa_data
+DW_AT_type        : <0x1d8>
+DW_AT_decl_file   : 3
 DW_AT_decl_line   : 76
-<2><1a8>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfe): sa_family
-DW_AT_type        : <0x1c5>
-DW_AT_decl_file   : 3
-DW_AT_decl_line   : 77
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><1b6>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x123): sa_data
-DW_AT_type        : <0x1d7>
-DW_AT_decl_file   : 3
-DW_AT_decl_line   : 78
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<1><1c5>
+<1><1c6>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x1d0>
-DW_AT_name        : (indirect string, offset: 0x117): sa_family_t
+DW_AT_type        : <0x1d1>
+DW_AT_name        : (indirect string, offset: 0x1e1): sa_family_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 34
-<1><1d0>
+<1><1d1>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x108): unsigned short
+DW_AT_name        : (indirect string, offset: 0x1d2): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><1d7>
+<1><1d8>
 Abbrev Number: 9 (DW_TAG_array_type)
-DW_AT_type        : <0x8d>
-<2><1dc>
+DW_AT_type        : <0x8e>
+<2><1dd>
 Abbrev Number: 10 (DW_TAG_subrange_type)
-DW_AT_type        : <0x199>
+DW_AT_type        : <0x19a>
 DW_AT_lower_bound : 0
 DW_AT_count       : 14
-<1><1e4>
+<1><1e5>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x174): short
+DW_AT_name        : (indirect string, offset: 0x23e): short
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 2
-<1><1eb>
+<1><1ec>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1e1): ifmap
+DW_AT_name        : (indirect string, offset: 0x2ab): ifmap
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 101
-<2><1f3>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x198): mem_start
-DW_AT_type        : <0x248>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 102
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><201>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1b4): mem_end
-DW_AT_type        : <0x248>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 103
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><20f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1bc): base_addr
-DW_AT_type        : <0x1d0>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 104
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><21d>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1c6): irq
-DW_AT_type        : <0x24f>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 105
-DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
-<2><22b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d8): dma
-DW_AT_type        : <0x24f>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 106
-DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
-<2><239>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1dc): port
-DW_AT_type        : <0x24f>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 107
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><248>
-Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1a2): long unsigned int
-DW_AT_encoding    : 7	(unsigned)
-DW_AT_byte_size   : 4
-<1><24f>
-Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1ca): unsigned char
-DW_AT_encoding    : 8	(unsigned char)
-DW_AT_byte_size   : 1
-<1><256>
-Abbrev Number: 12 (DW_TAG_pointer_type)
-<1><257>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x340): if_settings
-DW_AT_byte_size   : 12
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 110
-<2><25f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x217): type
-DW_AT_type        : <0x2f1>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 111
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><26d>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x229): size
-DW_AT_type        : <0x2f1>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 112
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><27b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x22e): ifs_ifsu
-DW_AT_type        : <0x289>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 121
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><289>
-Abbrev Number: 6 (DW_TAG_union_type)
-DW_AT_byte_size   : 4
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 113
-<3><28d>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x237): raw_hdlc
-DW_AT_type        : <0x2f8>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 114
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><29b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x25f): cisco
-DW_AT_type        : <0x329>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 115
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><2a9>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x282): fr
-DW_AT_type        : <0x35a>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 116
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><2b7>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2af): fr_pvc
-DW_AT_type        : <0x3d1>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 117
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><2c5>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2c8): fr_pvc_info
-DW_AT_type        : <0x3f4>
-DW_AT_decl_file   : 1
 DW_AT_decl_line   : 118
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><2d3>
+<2><1f4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2ed): sync
-DW_AT_type        : <0x425>
+DW_AT_name        : (indirect string, offset: 0x262): mem_start
+DW_AT_type        : <0x249>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 119
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><2e1>
+<2><202>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x326): te1
-DW_AT_type        : <0x464>
+DW_AT_name        : (indirect string, offset: 0x27e): mem_end
+DW_AT_type        : <0x249>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 120
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><2f1>
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><210>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x286): base_addr
+DW_AT_type        : <0x1d1>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 121
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><21e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x290): irq
+DW_AT_type        : <0x250>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 122
+DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+<2><22c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2a2): dma
+DW_AT_type        : <0x250>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 123
+DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
+<2><23a>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2a6): port
+DW_AT_type        : <0x250>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 124
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<1><249>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x21c): unsigned int
+DW_AT_name        : (indirect string, offset: 0x26c): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><2f8>
+<1><250>
+Abbrev Number: 7 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x294): unsigned char
+DW_AT_encoding    : 8	(unsigned char)
+DW_AT_byte_size   : 1
+<1><257>
+Abbrev Number: 12 (DW_TAG_pointer_type)
+<1><258>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x40a): if_settings
+DW_AT_byte_size   : 12
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 127
+<2><260>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2e1): type
+DW_AT_type        : <0x2f2>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 128
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><26e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2f3): size
+DW_AT_type        : <0x2f2>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 129
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><27c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2f8): ifs_ifsu
+DW_AT_type        : <0x28a>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 138
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><28a>
+Abbrev Number: 6 (DW_TAG_union_type)
+DW_AT_byte_size   : 4
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 130
+<3><28e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x301): raw_hdlc
+DW_AT_type        : <0x2f9>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 131
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><29c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x329): cisco
+DW_AT_type        : <0x32a>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 132
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><2aa>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x34c): fr
+DW_AT_type        : <0x35b>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 133
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><2b8>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x379): fr_pvc
+DW_AT_type        : <0x3d2>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 134
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><2c6>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x392): fr_pvc_info
+DW_AT_type        : <0x3f5>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 135
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><2d4>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3b7): sync
+DW_AT_type        : <0x426>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 136
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><2e2>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3f0): te1
+DW_AT_type        : <0x465>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 137
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><2f2>
+Abbrev Number: 7 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x2e6): unsigned int
+DW_AT_encoding    : 7	(unsigned)
+DW_AT_byte_size   : 4
+<1><2f9>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x2fd>
-<1><2fd>
+DW_AT_type        : <0x2fe>
+<1><2fe>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x308>
-DW_AT_name        : (indirect string, offset: 0x250): raw_hdlc_proto
+DW_AT_type        : <0x309>
+DW_AT_name        : (indirect string, offset: 0x31a): raw_hdlc_proto
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 61
-<1><308>
+<1><309>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 58
-<2><30c>
+<2><30d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x240): encoding
-DW_AT_type        : <0x1d0>
+DW_AT_name        : (indirect string, offset: 0x30a): encoding
+DW_AT_type        : <0x1d1>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 59
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><31a>
+<2><31b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x249): parity
-DW_AT_type        : <0x1d0>
+DW_AT_name        : (indirect string, offset: 0x313): parity
+DW_AT_type        : <0x1d1>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 60
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<1><329>
+<1><32a>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x32e>
-<1><32e>
+DW_AT_type        : <0x32f>
+<1><32f>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x339>
-DW_AT_name        : (indirect string, offset: 0x276): cisco_proto
+DW_AT_type        : <0x33a>
+DW_AT_name        : (indirect string, offset: 0x340): cisco_proto
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 81
-<1><339>
+<1><33a>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 78
-<2><33d>
+<2><33e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x265): interval
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x32f): interval
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 79
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><34b>
+<2><34c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x26e): timeout
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x338): timeout
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 80
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><35a>
+<1><35b>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x35f>
-<1><35f>
+DW_AT_type        : <0x360>
+<1><360>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x36a>
-DW_AT_name        : (indirect string, offset: 0x2a6): fr_proto
+DW_AT_type        : <0x36b>
+DW_AT_name        : (indirect string, offset: 0x370): fr_proto
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 70
-<1><36a>
+<1><36b>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 24
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 62
-<2><36e>
+<2><36f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x285): t391
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x34f): t391
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 63
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><37c>
+<2><37d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x28a): t392
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x354): t392
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 64
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><38a>
+<2><38b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x28f): n391
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x359): n391
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 65
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><398>
+<2><399>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x294): n392
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x35e): n392
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 66
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><3a6>
+<2><3a7>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x299): n393
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x363): n393
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 67
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><3b4>
+<2><3b5>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x29e): lmi
-DW_AT_type        : <0x1d0>
+DW_AT_name        : (indirect string, offset: 0x368): lmi
+DW_AT_type        : <0x1d1>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 68
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><3c2>
+<2><3c3>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2a2): dce
-DW_AT_type        : <0x1d0>
+DW_AT_name        : (indirect string, offset: 0x36c): dce
+DW_AT_type        : <0x1d1>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 69
 DW_AT_data_member_location: 2 byte block: 23 16 	(DW_OP_plus_uconst: 22)
-<1><3d1>
+<1><3d2>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x3d6>
-<1><3d6>
+DW_AT_type        : <0x3d7>
+<1><3d7>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3e1>
-DW_AT_name        : (indirect string, offset: 0x2bb): fr_proto_pvc
+DW_AT_type        : <0x3e2>
+DW_AT_name        : (indirect string, offset: 0x385): fr_proto_pvc
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 73
-<1><3e1>
+<1><3e2>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 71
-<2><3e5>
+<2><3e6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2b6): dlci
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x380): dlci
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 72
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><3f4>
+<1><3f5>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x3f9>
-<1><3f9>
+DW_AT_type        : <0x3fa>
+<1><3fa>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x404>
-DW_AT_name        : (indirect string, offset: 0x2db): fr_proto_pvc_info
+DW_AT_type        : <0x405>
+DW_AT_name        : (indirect string, offset: 0x3a5): fr_proto_pvc_info
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 77
-<1><404>
+<1><405>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 20
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 74
-<2><408>
+<2><409>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2b6): dlci
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x380): dlci
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 75
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><416>
+<2><417>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2d4): master
-DW_AT_type        : <0x18c>
+DW_AT_name        : (indirect string, offset: 0x39e): master
+DW_AT_type        : <0x18d>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 76
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><425>
+<1><426>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x42a>
-<1><42a>
+DW_AT_type        : <0x42b>
+<1><42b>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x435>
-DW_AT_name        : (indirect string, offset: 0x311): sync_serial_settings
+DW_AT_type        : <0x436>
+DW_AT_name        : (indirect string, offset: 0x3db): sync_serial_settings
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 51
-<1><435>
+<1><436>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 47
-<2><439>
+<2><43a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2f2): clock_rate
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x3bc): clock_rate
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 48
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><447>
+<2><448>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2fd): clock_type
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x3c7): clock_type
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 49
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><455>
+<2><456>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x308): loopback
-DW_AT_type        : <0x1d0>
+DW_AT_name        : (indirect string, offset: 0x3d2): loopback
+DW_AT_type        : <0x1d1>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 50
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><464>
+<1><465>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x469>
-<1><469>
+DW_AT_type        : <0x46a>
+<1><46a>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x474>
-DW_AT_name        : (indirect string, offset: 0x333): te1_settings
+DW_AT_type        : <0x475>
+DW_AT_name        : (indirect string, offset: 0x3fd): te1_settings
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 57
-<1><474>
+<1><475>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 52
-<2><478>
+<2><479>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2f2): clock_rate
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x3bc): clock_rate
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 53
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><486>
+<2><487>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2fd): clock_type
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x3c7): clock_type
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 54
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><494>
+<2><495>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x308): loopback
-DW_AT_type        : <0x1d0>
+DW_AT_name        : (indirect string, offset: 0x3d2): loopback
+DW_AT_type        : <0x1d1>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 55
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><4a2>
+<2><4a3>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x32a): slot_map
-DW_AT_type        : <0x2f1>
+DW_AT_name        : (indirect string, offset: 0x3f4): slot_map
+DW_AT_type        : <0x2f2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 56
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
diff --git a/mpers-m32/struct_ifreq.c b/mpers-m32/struct_ifreq.c
index 2a1795c..ece6d49 100644
--- a/mpers-m32/struct_ifreq.c
+++ b/mpers-m32/struct_ifreq.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-2017 The strace developers.
+ * Copyright (c) 1996-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/mpers-m32/struct_ifreq.d1 b/mpers-m32/struct_ifreq.d1
index f49f830..3c8d0b8 100644
--- a/mpers-m32/struct_ifreq.d1
+++ b/mpers-m32/struct_ifreq.d1
@@ -1,532 +1,533 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x45e (32-bit)
+   Length:        0x45f (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_ifreq.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_ifreq.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x56): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x91): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 5
-    <29>   DW_AT_decl_line   : 44
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x32e): struct_ifreq
-    <39>   DW_AT_decl_file   : 5
-    <3a>   DW_AT_decl_line   : 42
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x328): ifreq
-    <40>   DW_AT_byte_size   : 32
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 124
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa2): ifr_ifrn
-    <48>   DW_AT_type        : <0x51>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 128
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 6 (DW_TAG_union_type)
-    <52>   DW_AT_byte_size   : 16
-    <53>   DW_AT_decl_file   : 1
-    <54>   DW_AT_decl_line   : 126
- <3><55>: Abbrev Number: 5 (DW_TAG_member)
-    <56>   DW_AT_name        : (indirect string, offset: 0xab): ifrn_name
-    <5a>   DW_AT_type        : <0x12e>
-    <5e>   DW_AT_decl_file   : 1
-    <5f>   DW_AT_decl_line   : 127
-    <60>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><63>: Abbrev Number: 0
- <2><64>: Abbrev Number: 5 (DW_TAG_member)
-    <65>   DW_AT_name        : (indirect string, offset: 0xc3): ifr_ifru
-    <69>   DW_AT_type        : <0x72>
-    <6d>   DW_AT_decl_file   : 1
-    <6e>   DW_AT_decl_line   : 143
-    <6f>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><72>: Abbrev Number: 6 (DW_TAG_union_type)
-    <73>   DW_AT_byte_size   : 16
-    <74>   DW_AT_decl_file   : 1
-    <75>   DW_AT_decl_line   : 129
- <3><76>: Abbrev Number: 5 (DW_TAG_member)
-    <77>   DW_AT_name        : (indirect string, offset: 0xcc): ifru_addr
-    <7b>   DW_AT_type        : <0x149>
-    <7f>   DW_AT_decl_file   : 1
-    <80>   DW_AT_decl_line   : 130
-    <81>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><84>: Abbrev Number: 5 (DW_TAG_member)
-    <85>   DW_AT_name        : (indirect string, offset: 0x10c): ifru_dstaddr
-    <89>   DW_AT_type        : <0x149>
-    <8d>   DW_AT_decl_file   : 1
-    <8e>   DW_AT_decl_line   : 131
-    <8f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><92>: Abbrev Number: 5 (DW_TAG_member)
-    <93>   DW_AT_name        : (indirect string, offset: 0x119): ifru_broadaddr
-    <97>   DW_AT_type        : <0x149>
-    <9b>   DW_AT_decl_file   : 1
-    <9c>   DW_AT_decl_line   : 132
-    <9d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><a0>: Abbrev Number: 5 (DW_TAG_member)
-    <a1>   DW_AT_name        : (indirect string, offset: 0x128): ifru_netmask
-    <a5>   DW_AT_type        : <0x149>
-    <a9>   DW_AT_decl_file   : 1
-    <aa>   DW_AT_decl_line   : 133
-    <ab>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><ae>: Abbrev Number: 5 (DW_TAG_member)
-    <af>   DW_AT_name        : (indirect string, offset: 0x135): ifru_hwaddr
-    <b3>   DW_AT_type        : <0x149>
-    <b7>   DW_AT_decl_file   : 1
-    <b8>   DW_AT_decl_line   : 134
-    <b9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><bc>: Abbrev Number: 5 (DW_TAG_member)
-    <bd>   DW_AT_name        : (indirect string, offset: 0x141): ifru_flags
-    <c1>   DW_AT_type        : <0x18d>
-    <c5>   DW_AT_decl_file   : 1
-    <c6>   DW_AT_decl_line   : 135
-    <c7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><ca>: Abbrev Number: 5 (DW_TAG_member)
-    <cb>   DW_AT_name        : (indirect string, offset: 0x152): ifru_ivalue
-    <cf>   DW_AT_type        : <0x194>
-    <d3>   DW_AT_decl_file   : 1
-    <d4>   DW_AT_decl_line   : 136
-    <d5>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><d8>: Abbrev Number: 5 (DW_TAG_member)
-    <d9>   DW_AT_name        : (indirect string, offset: 0x162): ifru_mtu
-    <dd>   DW_AT_type        : <0x194>
-    <e1>   DW_AT_decl_file   : 1
-    <e2>   DW_AT_decl_line   : 137
-    <e3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><e6>: Abbrev Number: 5 (DW_TAG_member)
-    <e7>   DW_AT_name        : (indirect string, offset: 0x16b): ifru_map
-    <eb>   DW_AT_type        : <0x19b>
-    <ef>   DW_AT_decl_file   : 1
-    <f0>   DW_AT_decl_line   : 138
-    <f1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><f4>: Abbrev Number: 5 (DW_TAG_member)
-    <f5>   DW_AT_name        : (indirect string, offset: 0x1c3): ifru_slave
-    <f9>   DW_AT_type        : <0x12e>
-    <fd>   DW_AT_decl_file   : 1
-    <fe>   DW_AT_decl_line   : 139
-    <ff>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><102>: Abbrev Number: 5 (DW_TAG_member)
-    <103>   DW_AT_name        : (indirect string, offset: 0x1ce): ifru_newname
-    <107>   DW_AT_type        : <0x12e>
-    <10b>   DW_AT_decl_file   : 1
-    <10c>   DW_AT_decl_line   : 140
-    <10d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><110>: Abbrev Number: 5 (DW_TAG_member)
-    <111>   DW_AT_name        : (indirect string, offset: 0x1db): ifru_data
-    <115>   DW_AT_type        : <0x206>
-    <119>   DW_AT_decl_file   : 1
-    <11a>   DW_AT_decl_line   : 141
-    <11b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><11e>: Abbrev Number: 5 (DW_TAG_member)
-    <11f>   DW_AT_name        : (indirect string, offset: 0x1e5): ifru_settings
-    <123>   DW_AT_type        : <0x207>
-    <127>   DW_AT_decl_file   : 1
-    <128>   DW_AT_decl_line   : 142
-    <129>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><12c>: Abbrev Number: 0
- <2><12d>: Abbrev Number: 0
- <1><12e>: Abbrev Number: 7 (DW_TAG_array_type)
-    <12f>   DW_AT_type        : <0x13b>
- <2><133>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <134>   DW_AT_type        : <0x142>
-    <138>   DW_AT_lower_bound : 0
-    <139>   DW_AT_count       : 16
- <2><13a>: Abbrev Number: 0
- <1><13b>: Abbrev Number: 9 (DW_TAG_base_type)
-    <13c>   DW_AT_name        : (indirect string, offset: 0xb5): char
-    <140>   DW_AT_encoding    : 8	(unsigned char)
-    <141>   DW_AT_byte_size   : 1
- <1><142>: Abbrev Number: 10 (DW_TAG_base_type)
-    <143>   DW_AT_name        : (indirect string, offset: 0xba): sizetype
-    <147>   DW_AT_byte_size   : 8
-    <148>   DW_AT_encoding    : 7	(unsigned)
- <1><149>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <14a>   DW_AT_name        : (indirect string, offset: 0x103): sockaddr
-    <14e>   DW_AT_byte_size   : 16
-    <14f>   DW_AT_decl_file   : 3
-    <150>   DW_AT_decl_line   : 76
- <2><151>: Abbrev Number: 5 (DW_TAG_member)
-    <152>   DW_AT_name        : (indirect string, offset: 0xd6): sa_family
-    <156>   DW_AT_type        : <0x16e>
-    <15a>   DW_AT_decl_file   : 3
-    <15b>   DW_AT_decl_line   : 77
-    <15c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><15f>: Abbrev Number: 5 (DW_TAG_member)
-    <160>   DW_AT_name        : (indirect string, offset: 0xfb): sa_data
-    <164>   DW_AT_type        : <0x180>
-    <168>   DW_AT_decl_file   : 3
-    <169>   DW_AT_decl_line   : 78
-    <16a>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><16d>: Abbrev Number: 0
- <1><16e>: Abbrev Number: 3 (DW_TAG_typedef)
-    <16f>   DW_AT_type        : <0x179>
-    <173>   DW_AT_name        : (indirect string, offset: 0xef): sa_family_t
-    <177>   DW_AT_decl_file   : 2
-    <178>   DW_AT_decl_line   : 34
- <1><179>: Abbrev Number: 9 (DW_TAG_base_type)
-    <17a>   DW_AT_name        : (indirect string, offset: 0xe0): unsigned short
-    <17e>   DW_AT_encoding    : 7	(unsigned)
-    <17f>   DW_AT_byte_size   : 2
- <1><180>: Abbrev Number: 7 (DW_TAG_array_type)
-    <181>   DW_AT_type        : <0x13b>
- <2><185>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <186>   DW_AT_type        : <0x142>
-    <18a>   DW_AT_lower_bound : 0
-    <18b>   DW_AT_count       : 14
- <2><18c>: Abbrev Number: 0
- <1><18d>: Abbrev Number: 9 (DW_TAG_base_type)
-    <18e>   DW_AT_name        : (indirect string, offset: 0x14c): short
-    <192>   DW_AT_encoding    : 5	(signed)
-    <193>   DW_AT_byte_size   : 2
- <1><194>: Abbrev Number: 9 (DW_TAG_base_type)
-    <195>   DW_AT_name        : (indirect string, offset: 0x15e): int
-    <199>   DW_AT_encoding    : 5	(signed)
-    <19a>   DW_AT_byte_size   : 4
- <1><19b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <19c>   DW_AT_name        : (indirect string, offset: 0x1bd): ifmap
-    <1a0>   DW_AT_byte_size   : 16
-    <1a1>   DW_AT_decl_file   : 1
-    <1a2>   DW_AT_decl_line   : 101
- <2><1a3>: Abbrev Number: 5 (DW_TAG_member)
-    <1a4>   DW_AT_name        : (indirect string, offset: 0x174): mem_start
-    <1a8>   DW_AT_type        : <0x1f8>
-    <1ac>   DW_AT_decl_file   : 1
-    <1ad>   DW_AT_decl_line   : 102
-    <1ae>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><1b1>: Abbrev Number: 5 (DW_TAG_member)
-    <1b2>   DW_AT_name        : (indirect string, offset: 0x190): mem_end
-    <1b6>   DW_AT_type        : <0x1f8>
-    <1ba>   DW_AT_decl_file   : 1
-    <1bb>   DW_AT_decl_line   : 103
-    <1bc>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><1bf>: Abbrev Number: 5 (DW_TAG_member)
-    <1c0>   DW_AT_name        : (indirect string, offset: 0x198): base_addr
-    <1c4>   DW_AT_type        : <0x179>
-    <1c8>   DW_AT_decl_file   : 1
-    <1c9>   DW_AT_decl_line   : 104
-    <1ca>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><1cd>: Abbrev Number: 5 (DW_TAG_member)
-    <1ce>   DW_AT_name        : (indirect string, offset: 0x1a2): irq
-    <1d2>   DW_AT_type        : <0x1ff>
-    <1d6>   DW_AT_decl_file   : 1
-    <1d7>   DW_AT_decl_line   : 105
-    <1d8>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
- <2><1db>: Abbrev Number: 5 (DW_TAG_member)
-    <1dc>   DW_AT_name        : (indirect string, offset: 0x1b4): dma
-    <1e0>   DW_AT_type        : <0x1ff>
-    <1e4>   DW_AT_decl_file   : 1
-    <1e5>   DW_AT_decl_line   : 106
-    <1e6>   DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
- <2><1e9>: Abbrev Number: 5 (DW_TAG_member)
-    <1ea>   DW_AT_name        : (indirect string, offset: 0x1b8): port
-    <1ee>   DW_AT_type        : <0x1ff>
-    <1f2>   DW_AT_decl_file   : 1
-    <1f3>   DW_AT_decl_line   : 107
-    <1f4>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><1f7>: Abbrev Number: 0
- <1><1f8>: Abbrev Number: 9 (DW_TAG_base_type)
-    <1f9>   DW_AT_name        : (indirect string, offset: 0x17e): long unsigned int
-    <1fd>   DW_AT_encoding    : 7	(unsigned)
-    <1fe>   DW_AT_byte_size   : 4
- <1><1ff>: Abbrev Number: 9 (DW_TAG_base_type)
-    <200>   DW_AT_name        : (indirect string, offset: 0x1a6): unsigned char
-    <204>   DW_AT_encoding    : 8	(unsigned char)
-    <205>   DW_AT_byte_size   : 1
- <1><206>: Abbrev Number: 11 (DW_TAG_pointer_type)
- <1><207>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <208>   DW_AT_name        : (indirect string, offset: 0x31c): if_settings
-    <20c>   DW_AT_byte_size   : 12
-    <20d>   DW_AT_decl_file   : 1
-    <20e>   DW_AT_decl_line   : 110
- <2><20f>: Abbrev Number: 5 (DW_TAG_member)
-    <210>   DW_AT_name        : (indirect string, offset: 0x1f3): type
-    <214>   DW_AT_type        : <0x2a1>
-    <218>   DW_AT_decl_file   : 1
-    <219>   DW_AT_decl_line   : 111
-    <21a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><21d>: Abbrev Number: 5 (DW_TAG_member)
-    <21e>   DW_AT_name        : (indirect string, offset: 0x205): size
-    <222>   DW_AT_type        : <0x2a1>
-    <226>   DW_AT_decl_file   : 1
-    <227>   DW_AT_decl_line   : 112
-    <228>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><22b>: Abbrev Number: 5 (DW_TAG_member)
-    <22c>   DW_AT_name        : (indirect string, offset: 0x20a): ifs_ifsu
-    <230>   DW_AT_type        : <0x239>
-    <234>   DW_AT_decl_file   : 1
-    <235>   DW_AT_decl_line   : 121
-    <236>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><239>: Abbrev Number: 6 (DW_TAG_union_type)
-    <23a>   DW_AT_byte_size   : 4
-    <23b>   DW_AT_decl_file   : 1
-    <23c>   DW_AT_decl_line   : 113
- <3><23d>: Abbrev Number: 5 (DW_TAG_member)
-    <23e>   DW_AT_name        : (indirect string, offset: 0x213): raw_hdlc
-    <242>   DW_AT_type        : <0x2a8>
-    <246>   DW_AT_decl_file   : 1
-    <247>   DW_AT_decl_line   : 114
-    <248>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><24b>: Abbrev Number: 5 (DW_TAG_member)
-    <24c>   DW_AT_name        : (indirect string, offset: 0x23b): cisco
-    <250>   DW_AT_type        : <0x2d9>
-    <254>   DW_AT_decl_file   : 1
-    <255>   DW_AT_decl_line   : 115
-    <256>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><259>: Abbrev Number: 5 (DW_TAG_member)
-    <25a>   DW_AT_name        : (indirect string, offset: 0x25e): fr
-    <25e>   DW_AT_type        : <0x30a>
-    <262>   DW_AT_decl_file   : 1
-    <263>   DW_AT_decl_line   : 116
-    <264>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><267>: Abbrev Number: 5 (DW_TAG_member)
-    <268>   DW_AT_name        : (indirect string, offset: 0x28b): fr_pvc
-    <26c>   DW_AT_type        : <0x381>
-    <270>   DW_AT_decl_file   : 1
-    <271>   DW_AT_decl_line   : 117
-    <272>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><275>: Abbrev Number: 5 (DW_TAG_member)
-    <276>   DW_AT_name        : (indirect string, offset: 0x2a4): fr_pvc_info
-    <27a>   DW_AT_type        : <0x3a4>
-    <27e>   DW_AT_decl_file   : 1
-    <27f>   DW_AT_decl_line   : 118
-    <280>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><283>: Abbrev Number: 5 (DW_TAG_member)
-    <284>   DW_AT_name        : (indirect string, offset: 0x2c9): sync
-    <288>   DW_AT_type        : <0x3d5>
-    <28c>   DW_AT_decl_file   : 1
-    <28d>   DW_AT_decl_line   : 119
-    <28e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><291>: Abbrev Number: 5 (DW_TAG_member)
-    <292>   DW_AT_name        : (indirect string, offset: 0x302): te1
-    <296>   DW_AT_type        : <0x414>
-    <29a>   DW_AT_decl_file   : 1
-    <29b>   DW_AT_decl_line   : 120
-    <29c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><29f>: Abbrev Number: 0
- <2><2a0>: Abbrev Number: 0
- <1><2a1>: Abbrev Number: 9 (DW_TAG_base_type)
-    <2a2>   DW_AT_name        : (indirect string, offset: 0x1f8): unsigned int
-    <2a6>   DW_AT_encoding    : 7	(unsigned)
-    <2a7>   DW_AT_byte_size   : 4
- <1><2a8>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <2a9>   DW_AT_type        : <0x2ad>
- <1><2ad>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2ae>   DW_AT_type        : <0x2b8>
-    <2b2>   DW_AT_name        : (indirect string, offset: 0x22c): raw_hdlc_proto
-    <2b6>   DW_AT_decl_file   : 4
-    <2b7>   DW_AT_decl_line   : 61
- <1><2b8>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <2b9>   DW_AT_byte_size   : 4
-    <2ba>   DW_AT_decl_file   : 4
-    <2bb>   DW_AT_decl_line   : 58
- <2><2bc>: Abbrev Number: 5 (DW_TAG_member)
-    <2bd>   DW_AT_name        : (indirect string, offset: 0x21c): encoding
-    <2c1>   DW_AT_type        : <0x179>
-    <2c5>   DW_AT_decl_file   : 4
-    <2c6>   DW_AT_decl_line   : 59
-    <2c7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><2ca>: Abbrev Number: 5 (DW_TAG_member)
-    <2cb>   DW_AT_name        : (indirect string, offset: 0x225): parity
-    <2cf>   DW_AT_type        : <0x179>
-    <2d3>   DW_AT_decl_file   : 4
-    <2d4>   DW_AT_decl_line   : 60
-    <2d5>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><2d8>: Abbrev Number: 0
- <1><2d9>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <2da>   DW_AT_type        : <0x2de>
- <1><2de>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2df>   DW_AT_type        : <0x2e9>
-    <2e3>   DW_AT_name        : (indirect string, offset: 0x252): cisco_proto
-    <2e7>   DW_AT_decl_file   : 4
-    <2e8>   DW_AT_decl_line   : 81
- <1><2e9>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <2ea>   DW_AT_byte_size   : 8
-    <2eb>   DW_AT_decl_file   : 4
-    <2ec>   DW_AT_decl_line   : 78
- <2><2ed>: Abbrev Number: 5 (DW_TAG_member)
-    <2ee>   DW_AT_name        : (indirect string, offset: 0x241): interval
-    <2f2>   DW_AT_type        : <0x2a1>
-    <2f6>   DW_AT_decl_file   : 4
-    <2f7>   DW_AT_decl_line   : 79
-    <2f8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><2fb>: Abbrev Number: 5 (DW_TAG_member)
-    <2fc>   DW_AT_name        : (indirect string, offset: 0x24a): timeout
-    <300>   DW_AT_type        : <0x2a1>
-    <304>   DW_AT_decl_file   : 4
-    <305>   DW_AT_decl_line   : 80
-    <306>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><309>: Abbrev Number: 0
- <1><30a>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <30b>   DW_AT_type        : <0x30f>
- <1><30f>: Abbrev Number: 3 (DW_TAG_typedef)
-    <310>   DW_AT_type        : <0x31a>
-    <314>   DW_AT_name        : (indirect string, offset: 0x282): fr_proto
-    <318>   DW_AT_decl_file   : 4
-    <319>   DW_AT_decl_line   : 70
- <1><31a>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <31b>   DW_AT_byte_size   : 24
-    <31c>   DW_AT_decl_file   : 4
-    <31d>   DW_AT_decl_line   : 62
- <2><31e>: Abbrev Number: 5 (DW_TAG_member)
-    <31f>   DW_AT_name        : (indirect string, offset: 0x261): t391
-    <323>   DW_AT_type        : <0x2a1>
-    <327>   DW_AT_decl_file   : 4
-    <328>   DW_AT_decl_line   : 63
-    <329>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><32c>: Abbrev Number: 5 (DW_TAG_member)
-    <32d>   DW_AT_name        : (indirect string, offset: 0x266): t392
-    <331>   DW_AT_type        : <0x2a1>
-    <335>   DW_AT_decl_file   : 4
-    <336>   DW_AT_decl_line   : 64
-    <337>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><33a>: Abbrev Number: 5 (DW_TAG_member)
-    <33b>   DW_AT_name        : (indirect string, offset: 0x26b): n391
-    <33f>   DW_AT_type        : <0x2a1>
-    <343>   DW_AT_decl_file   : 4
-    <344>   DW_AT_decl_line   : 65
-    <345>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><348>: Abbrev Number: 5 (DW_TAG_member)
-    <349>   DW_AT_name        : (indirect string, offset: 0x270): n392
-    <34d>   DW_AT_type        : <0x2a1>
-    <351>   DW_AT_decl_file   : 4
-    <352>   DW_AT_decl_line   : 66
-    <353>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><356>: Abbrev Number: 5 (DW_TAG_member)
-    <357>   DW_AT_name        : (indirect string, offset: 0x275): n393
-    <35b>   DW_AT_type        : <0x2a1>
-    <35f>   DW_AT_decl_file   : 4
-    <360>   DW_AT_decl_line   : 67
-    <361>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><364>: Abbrev Number: 5 (DW_TAG_member)
-    <365>   DW_AT_name        : (indirect string, offset: 0x27a): lmi
-    <369>   DW_AT_type        : <0x179>
-    <36d>   DW_AT_decl_file   : 4
-    <36e>   DW_AT_decl_line   : 68
-    <36f>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><372>: Abbrev Number: 5 (DW_TAG_member)
-    <373>   DW_AT_name        : (indirect string, offset: 0x27e): dce
-    <377>   DW_AT_type        : <0x179>
-    <37b>   DW_AT_decl_file   : 4
-    <37c>   DW_AT_decl_line   : 69
-    <37d>   DW_AT_data_member_location: 2 byte block: 23 16 	(DW_OP_plus_uconst: 22)
- <2><380>: Abbrev Number: 0
- <1><381>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <382>   DW_AT_type        : <0x386>
- <1><386>: Abbrev Number: 3 (DW_TAG_typedef)
-    <387>   DW_AT_type        : <0x391>
-    <38b>   DW_AT_name        : (indirect string, offset: 0x297): fr_proto_pvc
-    <38f>   DW_AT_decl_file   : 4
-    <390>   DW_AT_decl_line   : 73
- <1><391>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <392>   DW_AT_byte_size   : 4
-    <393>   DW_AT_decl_file   : 4
-    <394>   DW_AT_decl_line   : 71
- <2><395>: Abbrev Number: 5 (DW_TAG_member)
-    <396>   DW_AT_name        : (indirect string, offset: 0x292): dlci
-    <39a>   DW_AT_type        : <0x2a1>
-    <39e>   DW_AT_decl_file   : 4
-    <39f>   DW_AT_decl_line   : 72
-    <3a0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><3a3>: Abbrev Number: 0
- <1><3a4>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <3a5>   DW_AT_type        : <0x3a9>
- <1><3a9>: Abbrev Number: 3 (DW_TAG_typedef)
-    <3aa>   DW_AT_type        : <0x3b4>
-    <3ae>   DW_AT_name        : (indirect string, offset: 0x2b7): fr_proto_pvc_info
-    <3b2>   DW_AT_decl_file   : 4
-    <3b3>   DW_AT_decl_line   : 77
- <1><3b4>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <3b5>   DW_AT_byte_size   : 20
-    <3b6>   DW_AT_decl_file   : 4
-    <3b7>   DW_AT_decl_line   : 74
- <2><3b8>: Abbrev Number: 5 (DW_TAG_member)
-    <3b9>   DW_AT_name        : (indirect string, offset: 0x292): dlci
-    <3bd>   DW_AT_type        : <0x2a1>
-    <3c1>   DW_AT_decl_file   : 4
-    <3c2>   DW_AT_decl_line   : 75
-    <3c3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><3c6>: Abbrev Number: 5 (DW_TAG_member)
-    <3c7>   DW_AT_name        : (indirect string, offset: 0x2b0): master
-    <3cb>   DW_AT_type        : <0x12e>
-    <3cf>   DW_AT_decl_file   : 4
-    <3d0>   DW_AT_decl_line   : 76
-    <3d1>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><3d4>: Abbrev Number: 0
- <1><3d5>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <3d6>   DW_AT_type        : <0x3da>
- <1><3da>: Abbrev Number: 3 (DW_TAG_typedef)
-    <3db>   DW_AT_type        : <0x3e5>
-    <3df>   DW_AT_name        : (indirect string, offset: 0x2ed): sync_serial_settings
-    <3e3>   DW_AT_decl_file   : 4
-    <3e4>   DW_AT_decl_line   : 51
- <1><3e5>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <3e6>   DW_AT_byte_size   : 12
-    <3e7>   DW_AT_decl_file   : 4
-    <3e8>   DW_AT_decl_line   : 47
- <2><3e9>: Abbrev Number: 5 (DW_TAG_member)
-    <3ea>   DW_AT_name        : (indirect string, offset: 0x2ce): clock_rate
-    <3ee>   DW_AT_type        : <0x2a1>
-    <3f2>   DW_AT_decl_file   : 4
-    <3f3>   DW_AT_decl_line   : 48
-    <3f4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><3f7>: Abbrev Number: 5 (DW_TAG_member)
-    <3f8>   DW_AT_name        : (indirect string, offset: 0x2d9): clock_type
-    <3fc>   DW_AT_type        : <0x2a1>
-    <400>   DW_AT_decl_file   : 4
-    <401>   DW_AT_decl_line   : 49
-    <402>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><405>: Abbrev Number: 5 (DW_TAG_member)
-    <406>   DW_AT_name        : (indirect string, offset: 0x2e4): loopback
-    <40a>   DW_AT_type        : <0x179>
-    <40e>   DW_AT_decl_file   : 4
-    <40f>   DW_AT_decl_line   : 50
-    <410>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><413>: Abbrev Number: 0
- <1><414>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <415>   DW_AT_type        : <0x419>
- <1><419>: Abbrev Number: 3 (DW_TAG_typedef)
-    <41a>   DW_AT_type        : <0x424>
-    <41e>   DW_AT_name        : (indirect string, offset: 0x30f): te1_settings
-    <422>   DW_AT_decl_file   : 4
-    <423>   DW_AT_decl_line   : 57
- <1><424>: Abbrev Number: 13 (DW_TAG_structure_type)
-    <425>   DW_AT_byte_size   : 16
-    <426>   DW_AT_decl_file   : 4
-    <427>   DW_AT_decl_line   : 52
- <2><428>: Abbrev Number: 5 (DW_TAG_member)
-    <429>   DW_AT_name        : (indirect string, offset: 0x2ce): clock_rate
-    <42d>   DW_AT_type        : <0x2a1>
-    <431>   DW_AT_decl_file   : 4
-    <432>   DW_AT_decl_line   : 53
-    <433>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><436>: Abbrev Number: 5 (DW_TAG_member)
-    <437>   DW_AT_name        : (indirect string, offset: 0x2d9): clock_type
-    <43b>   DW_AT_type        : <0x2a1>
-    <43f>   DW_AT_decl_file   : 4
-    <440>   DW_AT_decl_line   : 54
-    <441>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><444>: Abbrev Number: 5 (DW_TAG_member)
-    <445>   DW_AT_name        : (indirect string, offset: 0x2e4): loopback
-    <449>   DW_AT_type        : <0x179>
-    <44d>   DW_AT_decl_file   : 4
-    <44e>   DW_AT_decl_line   : 55
-    <44f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><452>: Abbrev Number: 5 (DW_TAG_member)
-    <453>   DW_AT_name        : (indirect string, offset: 0x306): slot_map
-    <457>   DW_AT_type        : <0x2a1>
-    <45b>   DW_AT_decl_file   : 4
-    <45c>   DW_AT_decl_line   : 56
-    <45d>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><460>: Abbrev Number: 0
- <1><461>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x120): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15b): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 5
+    <2a>   DW_AT_decl_line   : 44
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x3f8): struct_ifreq
+    <3a>   DW_AT_decl_file   : 5
+    <3b>   DW_AT_decl_line   : 42
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x3f2): ifreq
+    <41>   DW_AT_byte_size   : 32
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 141
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16c): ifr_ifrn
+    <49>   DW_AT_type        : <0x52>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 145
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 6 (DW_TAG_union_type)
+    <53>   DW_AT_byte_size   : 16
+    <54>   DW_AT_decl_file   : 1
+    <55>   DW_AT_decl_line   : 143
+ <3><56>: Abbrev Number: 5 (DW_TAG_member)
+    <57>   DW_AT_name        : (indirect string, offset: 0x175): ifrn_name
+    <5b>   DW_AT_type        : <0x12f>
+    <5f>   DW_AT_decl_file   : 1
+    <60>   DW_AT_decl_line   : 144
+    <61>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><64>: Abbrev Number: 0
+ <2><65>: Abbrev Number: 5 (DW_TAG_member)
+    <66>   DW_AT_name        : (indirect string, offset: 0x18d): ifr_ifru
+    <6a>   DW_AT_type        : <0x73>
+    <6e>   DW_AT_decl_file   : 1
+    <6f>   DW_AT_decl_line   : 160
+    <70>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><73>: Abbrev Number: 6 (DW_TAG_union_type)
+    <74>   DW_AT_byte_size   : 16
+    <75>   DW_AT_decl_file   : 1
+    <76>   DW_AT_decl_line   : 146
+ <3><77>: Abbrev Number: 5 (DW_TAG_member)
+    <78>   DW_AT_name        : (indirect string, offset: 0x196): ifru_addr
+    <7c>   DW_AT_type        : <0x14a>
+    <80>   DW_AT_decl_file   : 1
+    <81>   DW_AT_decl_line   : 147
+    <82>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><85>: Abbrev Number: 5 (DW_TAG_member)
+    <86>   DW_AT_name        : (indirect string, offset: 0x1d6): ifru_dstaddr
+    <8a>   DW_AT_type        : <0x14a>
+    <8e>   DW_AT_decl_file   : 1
+    <8f>   DW_AT_decl_line   : 148
+    <90>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><93>: Abbrev Number: 5 (DW_TAG_member)
+    <94>   DW_AT_name        : (indirect string, offset: 0x1e3): ifru_broadaddr
+    <98>   DW_AT_type        : <0x14a>
+    <9c>   DW_AT_decl_file   : 1
+    <9d>   DW_AT_decl_line   : 149
+    <9e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><a1>: Abbrev Number: 5 (DW_TAG_member)
+    <a2>   DW_AT_name        : (indirect string, offset: 0x1f2): ifru_netmask
+    <a6>   DW_AT_type        : <0x14a>
+    <aa>   DW_AT_decl_file   : 1
+    <ab>   DW_AT_decl_line   : 150
+    <ac>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><af>: Abbrev Number: 5 (DW_TAG_member)
+    <b0>   DW_AT_name        : (indirect string, offset: 0x1ff): ifru_hwaddr
+    <b4>   DW_AT_type        : <0x14a>
+    <b8>   DW_AT_decl_file   : 1
+    <b9>   DW_AT_decl_line   : 151
+    <ba>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><bd>: Abbrev Number: 5 (DW_TAG_member)
+    <be>   DW_AT_name        : (indirect string, offset: 0x20b): ifru_flags
+    <c2>   DW_AT_type        : <0x18e>
+    <c6>   DW_AT_decl_file   : 1
+    <c7>   DW_AT_decl_line   : 152
+    <c8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><cb>: Abbrev Number: 5 (DW_TAG_member)
+    <cc>   DW_AT_name        : (indirect string, offset: 0x21c): ifru_ivalue
+    <d0>   DW_AT_type        : <0x195>
+    <d4>   DW_AT_decl_file   : 1
+    <d5>   DW_AT_decl_line   : 153
+    <d6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><d9>: Abbrev Number: 5 (DW_TAG_member)
+    <da>   DW_AT_name        : (indirect string, offset: 0x22c): ifru_mtu
+    <de>   DW_AT_type        : <0x195>
+    <e2>   DW_AT_decl_file   : 1
+    <e3>   DW_AT_decl_line   : 154
+    <e4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><e7>: Abbrev Number: 5 (DW_TAG_member)
+    <e8>   DW_AT_name        : (indirect string, offset: 0x235): ifru_map
+    <ec>   DW_AT_type        : <0x19c>
+    <f0>   DW_AT_decl_file   : 1
+    <f1>   DW_AT_decl_line   : 155
+    <f2>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><f5>: Abbrev Number: 5 (DW_TAG_member)
+    <f6>   DW_AT_name        : (indirect string, offset: 0x28d): ifru_slave
+    <fa>   DW_AT_type        : <0x12f>
+    <fe>   DW_AT_decl_file   : 1
+    <ff>   DW_AT_decl_line   : 156
+    <100>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><103>: Abbrev Number: 5 (DW_TAG_member)
+    <104>   DW_AT_name        : (indirect string, offset: 0x298): ifru_newname
+    <108>   DW_AT_type        : <0x12f>
+    <10c>   DW_AT_decl_file   : 1
+    <10d>   DW_AT_decl_line   : 157
+    <10e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><111>: Abbrev Number: 5 (DW_TAG_member)
+    <112>   DW_AT_name        : (indirect string, offset: 0x2a5): ifru_data
+    <116>   DW_AT_type        : <0x207>
+    <11a>   DW_AT_decl_file   : 1
+    <11b>   DW_AT_decl_line   : 158
+    <11c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><11f>: Abbrev Number: 5 (DW_TAG_member)
+    <120>   DW_AT_name        : (indirect string, offset: 0x2af): ifru_settings
+    <124>   DW_AT_type        : <0x208>
+    <128>   DW_AT_decl_file   : 1
+    <129>   DW_AT_decl_line   : 159
+    <12a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><12d>: Abbrev Number: 0
+ <2><12e>: Abbrev Number: 0
+ <1><12f>: Abbrev Number: 7 (DW_TAG_array_type)
+    <130>   DW_AT_type        : <0x13c>
+ <2><134>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <135>   DW_AT_type        : <0x143>
+    <139>   DW_AT_lower_bound : 0
+    <13a>   DW_AT_count       : 16
+ <2><13b>: Abbrev Number: 0
+ <1><13c>: Abbrev Number: 9 (DW_TAG_base_type)
+    <13d>   DW_AT_name        : (indirect string, offset: 0x17f): char
+    <141>   DW_AT_encoding    : 8	(unsigned char)
+    <142>   DW_AT_byte_size   : 1
+ <1><143>: Abbrev Number: 10 (DW_TAG_base_type)
+    <144>   DW_AT_name        : (indirect string, offset: 0x184): sizetype
+    <148>   DW_AT_byte_size   : 8
+    <149>   DW_AT_encoding    : 7	(unsigned)
+ <1><14a>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <14b>   DW_AT_name        : (indirect string, offset: 0x1cd): sockaddr
+    <14f>   DW_AT_byte_size   : 16
+    <150>   DW_AT_decl_file   : 3
+    <151>   DW_AT_decl_line   : 74
+ <2><152>: Abbrev Number: 5 (DW_TAG_member)
+    <153>   DW_AT_name        : (indirect string, offset: 0x1a0): sa_family
+    <157>   DW_AT_type        : <0x16f>
+    <15b>   DW_AT_decl_file   : 3
+    <15c>   DW_AT_decl_line   : 75
+    <15d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><160>: Abbrev Number: 5 (DW_TAG_member)
+    <161>   DW_AT_name        : (indirect string, offset: 0x1c5): sa_data
+    <165>   DW_AT_type        : <0x181>
+    <169>   DW_AT_decl_file   : 3
+    <16a>   DW_AT_decl_line   : 76
+    <16b>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><16e>: Abbrev Number: 0
+ <1><16f>: Abbrev Number: 3 (DW_TAG_typedef)
+    <170>   DW_AT_type        : <0x17a>
+    <174>   DW_AT_name        : (indirect string, offset: 0x1b9): sa_family_t
+    <178>   DW_AT_decl_file   : 2
+    <179>   DW_AT_decl_line   : 34
+ <1><17a>: Abbrev Number: 9 (DW_TAG_base_type)
+    <17b>   DW_AT_name        : (indirect string, offset: 0x1aa): unsigned short
+    <17f>   DW_AT_encoding    : 7	(unsigned)
+    <180>   DW_AT_byte_size   : 2
+ <1><181>: Abbrev Number: 7 (DW_TAG_array_type)
+    <182>   DW_AT_type        : <0x13c>
+ <2><186>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <187>   DW_AT_type        : <0x143>
+    <18b>   DW_AT_lower_bound : 0
+    <18c>   DW_AT_count       : 14
+ <2><18d>: Abbrev Number: 0
+ <1><18e>: Abbrev Number: 9 (DW_TAG_base_type)
+    <18f>   DW_AT_name        : (indirect string, offset: 0x216): short
+    <193>   DW_AT_encoding    : 5	(signed)
+    <194>   DW_AT_byte_size   : 2
+ <1><195>: Abbrev Number: 9 (DW_TAG_base_type)
+    <196>   DW_AT_name        : (indirect string, offset: 0x228): int
+    <19a>   DW_AT_encoding    : 5	(signed)
+    <19b>   DW_AT_byte_size   : 4
+ <1><19c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <19d>   DW_AT_name        : (indirect string, offset: 0x287): ifmap
+    <1a1>   DW_AT_byte_size   : 16
+    <1a2>   DW_AT_decl_file   : 1
+    <1a3>   DW_AT_decl_line   : 118
+ <2><1a4>: Abbrev Number: 5 (DW_TAG_member)
+    <1a5>   DW_AT_name        : (indirect string, offset: 0x23e): mem_start
+    <1a9>   DW_AT_type        : <0x1f9>
+    <1ad>   DW_AT_decl_file   : 1
+    <1ae>   DW_AT_decl_line   : 119
+    <1af>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><1b2>: Abbrev Number: 5 (DW_TAG_member)
+    <1b3>   DW_AT_name        : (indirect string, offset: 0x25a): mem_end
+    <1b7>   DW_AT_type        : <0x1f9>
+    <1bb>   DW_AT_decl_file   : 1
+    <1bc>   DW_AT_decl_line   : 120
+    <1bd>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><1c0>: Abbrev Number: 5 (DW_TAG_member)
+    <1c1>   DW_AT_name        : (indirect string, offset: 0x262): base_addr
+    <1c5>   DW_AT_type        : <0x17a>
+    <1c9>   DW_AT_decl_file   : 1
+    <1ca>   DW_AT_decl_line   : 121
+    <1cb>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><1ce>: Abbrev Number: 5 (DW_TAG_member)
+    <1cf>   DW_AT_name        : (indirect string, offset: 0x26c): irq
+    <1d3>   DW_AT_type        : <0x200>
+    <1d7>   DW_AT_decl_file   : 1
+    <1d8>   DW_AT_decl_line   : 122
+    <1d9>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+ <2><1dc>: Abbrev Number: 5 (DW_TAG_member)
+    <1dd>   DW_AT_name        : (indirect string, offset: 0x27e): dma
+    <1e1>   DW_AT_type        : <0x200>
+    <1e5>   DW_AT_decl_file   : 1
+    <1e6>   DW_AT_decl_line   : 123
+    <1e7>   DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
+ <2><1ea>: Abbrev Number: 5 (DW_TAG_member)
+    <1eb>   DW_AT_name        : (indirect string, offset: 0x282): port
+    <1ef>   DW_AT_type        : <0x200>
+    <1f3>   DW_AT_decl_file   : 1
+    <1f4>   DW_AT_decl_line   : 124
+    <1f5>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><1f8>: Abbrev Number: 0
+ <1><1f9>: Abbrev Number: 9 (DW_TAG_base_type)
+    <1fa>   DW_AT_name        : (indirect string, offset: 0x248): long unsigned int
+    <1fe>   DW_AT_encoding    : 7	(unsigned)
+    <1ff>   DW_AT_byte_size   : 4
+ <1><200>: Abbrev Number: 9 (DW_TAG_base_type)
+    <201>   DW_AT_name        : (indirect string, offset: 0x270): unsigned char
+    <205>   DW_AT_encoding    : 8	(unsigned char)
+    <206>   DW_AT_byte_size   : 1
+ <1><207>: Abbrev Number: 11 (DW_TAG_pointer_type)
+ <1><208>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <209>   DW_AT_name        : (indirect string, offset: 0x3e6): if_settings
+    <20d>   DW_AT_byte_size   : 12
+    <20e>   DW_AT_decl_file   : 1
+    <20f>   DW_AT_decl_line   : 127
+ <2><210>: Abbrev Number: 5 (DW_TAG_member)
+    <211>   DW_AT_name        : (indirect string, offset: 0x2bd): type
+    <215>   DW_AT_type        : <0x2a2>
+    <219>   DW_AT_decl_file   : 1
+    <21a>   DW_AT_decl_line   : 128
+    <21b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><21e>: Abbrev Number: 5 (DW_TAG_member)
+    <21f>   DW_AT_name        : (indirect string, offset: 0x2cf): size
+    <223>   DW_AT_type        : <0x2a2>
+    <227>   DW_AT_decl_file   : 1
+    <228>   DW_AT_decl_line   : 129
+    <229>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><22c>: Abbrev Number: 5 (DW_TAG_member)
+    <22d>   DW_AT_name        : (indirect string, offset: 0x2d4): ifs_ifsu
+    <231>   DW_AT_type        : <0x23a>
+    <235>   DW_AT_decl_file   : 1
+    <236>   DW_AT_decl_line   : 138
+    <237>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><23a>: Abbrev Number: 6 (DW_TAG_union_type)
+    <23b>   DW_AT_byte_size   : 4
+    <23c>   DW_AT_decl_file   : 1
+    <23d>   DW_AT_decl_line   : 130
+ <3><23e>: Abbrev Number: 5 (DW_TAG_member)
+    <23f>   DW_AT_name        : (indirect string, offset: 0x2dd): raw_hdlc
+    <243>   DW_AT_type        : <0x2a9>
+    <247>   DW_AT_decl_file   : 1
+    <248>   DW_AT_decl_line   : 131
+    <249>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><24c>: Abbrev Number: 5 (DW_TAG_member)
+    <24d>   DW_AT_name        : (indirect string, offset: 0x305): cisco
+    <251>   DW_AT_type        : <0x2da>
+    <255>   DW_AT_decl_file   : 1
+    <256>   DW_AT_decl_line   : 132
+    <257>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><25a>: Abbrev Number: 5 (DW_TAG_member)
+    <25b>   DW_AT_name        : (indirect string, offset: 0x328): fr
+    <25f>   DW_AT_type        : <0x30b>
+    <263>   DW_AT_decl_file   : 1
+    <264>   DW_AT_decl_line   : 133
+    <265>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><268>: Abbrev Number: 5 (DW_TAG_member)
+    <269>   DW_AT_name        : (indirect string, offset: 0x355): fr_pvc
+    <26d>   DW_AT_type        : <0x382>
+    <271>   DW_AT_decl_file   : 1
+    <272>   DW_AT_decl_line   : 134
+    <273>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><276>: Abbrev Number: 5 (DW_TAG_member)
+    <277>   DW_AT_name        : (indirect string, offset: 0x36e): fr_pvc_info
+    <27b>   DW_AT_type        : <0x3a5>
+    <27f>   DW_AT_decl_file   : 1
+    <280>   DW_AT_decl_line   : 135
+    <281>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><284>: Abbrev Number: 5 (DW_TAG_member)
+    <285>   DW_AT_name        : (indirect string, offset: 0x393): sync
+    <289>   DW_AT_type        : <0x3d6>
+    <28d>   DW_AT_decl_file   : 1
+    <28e>   DW_AT_decl_line   : 136
+    <28f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><292>: Abbrev Number: 5 (DW_TAG_member)
+    <293>   DW_AT_name        : (indirect string, offset: 0x3cc): te1
+    <297>   DW_AT_type        : <0x415>
+    <29b>   DW_AT_decl_file   : 1
+    <29c>   DW_AT_decl_line   : 137
+    <29d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2a0>: Abbrev Number: 0
+ <2><2a1>: Abbrev Number: 0
+ <1><2a2>: Abbrev Number: 9 (DW_TAG_base_type)
+    <2a3>   DW_AT_name        : (indirect string, offset: 0x2c2): unsigned int
+    <2a7>   DW_AT_encoding    : 7	(unsigned)
+    <2a8>   DW_AT_byte_size   : 4
+ <1><2a9>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <2aa>   DW_AT_type        : <0x2ae>
+ <1><2ae>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2af>   DW_AT_type        : <0x2b9>
+    <2b3>   DW_AT_name        : (indirect string, offset: 0x2f6): raw_hdlc_proto
+    <2b7>   DW_AT_decl_file   : 4
+    <2b8>   DW_AT_decl_line   : 61
+ <1><2b9>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <2ba>   DW_AT_byte_size   : 4
+    <2bb>   DW_AT_decl_file   : 4
+    <2bc>   DW_AT_decl_line   : 58
+ <2><2bd>: Abbrev Number: 5 (DW_TAG_member)
+    <2be>   DW_AT_name        : (indirect string, offset: 0x2e6): encoding
+    <2c2>   DW_AT_type        : <0x17a>
+    <2c6>   DW_AT_decl_file   : 4
+    <2c7>   DW_AT_decl_line   : 59
+    <2c8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><2cb>: Abbrev Number: 5 (DW_TAG_member)
+    <2cc>   DW_AT_name        : (indirect string, offset: 0x2ef): parity
+    <2d0>   DW_AT_type        : <0x17a>
+    <2d4>   DW_AT_decl_file   : 4
+    <2d5>   DW_AT_decl_line   : 60
+    <2d6>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><2d9>: Abbrev Number: 0
+ <1><2da>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <2db>   DW_AT_type        : <0x2df>
+ <1><2df>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2e0>   DW_AT_type        : <0x2ea>
+    <2e4>   DW_AT_name        : (indirect string, offset: 0x31c): cisco_proto
+    <2e8>   DW_AT_decl_file   : 4
+    <2e9>   DW_AT_decl_line   : 81
+ <1><2ea>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <2eb>   DW_AT_byte_size   : 8
+    <2ec>   DW_AT_decl_file   : 4
+    <2ed>   DW_AT_decl_line   : 78
+ <2><2ee>: Abbrev Number: 5 (DW_TAG_member)
+    <2ef>   DW_AT_name        : (indirect string, offset: 0x30b): interval
+    <2f3>   DW_AT_type        : <0x2a2>
+    <2f7>   DW_AT_decl_file   : 4
+    <2f8>   DW_AT_decl_line   : 79
+    <2f9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><2fc>: Abbrev Number: 5 (DW_TAG_member)
+    <2fd>   DW_AT_name        : (indirect string, offset: 0x314): timeout
+    <301>   DW_AT_type        : <0x2a2>
+    <305>   DW_AT_decl_file   : 4
+    <306>   DW_AT_decl_line   : 80
+    <307>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><30a>: Abbrev Number: 0
+ <1><30b>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <30c>   DW_AT_type        : <0x310>
+ <1><310>: Abbrev Number: 3 (DW_TAG_typedef)
+    <311>   DW_AT_type        : <0x31b>
+    <315>   DW_AT_name        : (indirect string, offset: 0x34c): fr_proto
+    <319>   DW_AT_decl_file   : 4
+    <31a>   DW_AT_decl_line   : 70
+ <1><31b>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <31c>   DW_AT_byte_size   : 24
+    <31d>   DW_AT_decl_file   : 4
+    <31e>   DW_AT_decl_line   : 62
+ <2><31f>: Abbrev Number: 5 (DW_TAG_member)
+    <320>   DW_AT_name        : (indirect string, offset: 0x32b): t391
+    <324>   DW_AT_type        : <0x2a2>
+    <328>   DW_AT_decl_file   : 4
+    <329>   DW_AT_decl_line   : 63
+    <32a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><32d>: Abbrev Number: 5 (DW_TAG_member)
+    <32e>   DW_AT_name        : (indirect string, offset: 0x330): t392
+    <332>   DW_AT_type        : <0x2a2>
+    <336>   DW_AT_decl_file   : 4
+    <337>   DW_AT_decl_line   : 64
+    <338>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><33b>: Abbrev Number: 5 (DW_TAG_member)
+    <33c>   DW_AT_name        : (indirect string, offset: 0x335): n391
+    <340>   DW_AT_type        : <0x2a2>
+    <344>   DW_AT_decl_file   : 4
+    <345>   DW_AT_decl_line   : 65
+    <346>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><349>: Abbrev Number: 5 (DW_TAG_member)
+    <34a>   DW_AT_name        : (indirect string, offset: 0x33a): n392
+    <34e>   DW_AT_type        : <0x2a2>
+    <352>   DW_AT_decl_file   : 4
+    <353>   DW_AT_decl_line   : 66
+    <354>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><357>: Abbrev Number: 5 (DW_TAG_member)
+    <358>   DW_AT_name        : (indirect string, offset: 0x33f): n393
+    <35c>   DW_AT_type        : <0x2a2>
+    <360>   DW_AT_decl_file   : 4
+    <361>   DW_AT_decl_line   : 67
+    <362>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><365>: Abbrev Number: 5 (DW_TAG_member)
+    <366>   DW_AT_name        : (indirect string, offset: 0x344): lmi
+    <36a>   DW_AT_type        : <0x17a>
+    <36e>   DW_AT_decl_file   : 4
+    <36f>   DW_AT_decl_line   : 68
+    <370>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><373>: Abbrev Number: 5 (DW_TAG_member)
+    <374>   DW_AT_name        : (indirect string, offset: 0x348): dce
+    <378>   DW_AT_type        : <0x17a>
+    <37c>   DW_AT_decl_file   : 4
+    <37d>   DW_AT_decl_line   : 69
+    <37e>   DW_AT_data_member_location: 2 byte block: 23 16 	(DW_OP_plus_uconst: 22)
+ <2><381>: Abbrev Number: 0
+ <1><382>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <383>   DW_AT_type        : <0x387>
+ <1><387>: Abbrev Number: 3 (DW_TAG_typedef)
+    <388>   DW_AT_type        : <0x392>
+    <38c>   DW_AT_name        : (indirect string, offset: 0x361): fr_proto_pvc
+    <390>   DW_AT_decl_file   : 4
+    <391>   DW_AT_decl_line   : 73
+ <1><392>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <393>   DW_AT_byte_size   : 4
+    <394>   DW_AT_decl_file   : 4
+    <395>   DW_AT_decl_line   : 71
+ <2><396>: Abbrev Number: 5 (DW_TAG_member)
+    <397>   DW_AT_name        : (indirect string, offset: 0x35c): dlci
+    <39b>   DW_AT_type        : <0x2a2>
+    <39f>   DW_AT_decl_file   : 4
+    <3a0>   DW_AT_decl_line   : 72
+    <3a1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><3a4>: Abbrev Number: 0
+ <1><3a5>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <3a6>   DW_AT_type        : <0x3aa>
+ <1><3aa>: Abbrev Number: 3 (DW_TAG_typedef)
+    <3ab>   DW_AT_type        : <0x3b5>
+    <3af>   DW_AT_name        : (indirect string, offset: 0x381): fr_proto_pvc_info
+    <3b3>   DW_AT_decl_file   : 4
+    <3b4>   DW_AT_decl_line   : 77
+ <1><3b5>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <3b6>   DW_AT_byte_size   : 20
+    <3b7>   DW_AT_decl_file   : 4
+    <3b8>   DW_AT_decl_line   : 74
+ <2><3b9>: Abbrev Number: 5 (DW_TAG_member)
+    <3ba>   DW_AT_name        : (indirect string, offset: 0x35c): dlci
+    <3be>   DW_AT_type        : <0x2a2>
+    <3c2>   DW_AT_decl_file   : 4
+    <3c3>   DW_AT_decl_line   : 75
+    <3c4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><3c7>: Abbrev Number: 5 (DW_TAG_member)
+    <3c8>   DW_AT_name        : (indirect string, offset: 0x37a): master
+    <3cc>   DW_AT_type        : <0x12f>
+    <3d0>   DW_AT_decl_file   : 4
+    <3d1>   DW_AT_decl_line   : 76
+    <3d2>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><3d5>: Abbrev Number: 0
+ <1><3d6>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <3d7>   DW_AT_type        : <0x3db>
+ <1><3db>: Abbrev Number: 3 (DW_TAG_typedef)
+    <3dc>   DW_AT_type        : <0x3e6>
+    <3e0>   DW_AT_name        : (indirect string, offset: 0x3b7): sync_serial_settings
+    <3e4>   DW_AT_decl_file   : 4
+    <3e5>   DW_AT_decl_line   : 51
+ <1><3e6>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <3e7>   DW_AT_byte_size   : 12
+    <3e8>   DW_AT_decl_file   : 4
+    <3e9>   DW_AT_decl_line   : 47
+ <2><3ea>: Abbrev Number: 5 (DW_TAG_member)
+    <3eb>   DW_AT_name        : (indirect string, offset: 0x398): clock_rate
+    <3ef>   DW_AT_type        : <0x2a2>
+    <3f3>   DW_AT_decl_file   : 4
+    <3f4>   DW_AT_decl_line   : 48
+    <3f5>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><3f8>: Abbrev Number: 5 (DW_TAG_member)
+    <3f9>   DW_AT_name        : (indirect string, offset: 0x3a3): clock_type
+    <3fd>   DW_AT_type        : <0x2a2>
+    <401>   DW_AT_decl_file   : 4
+    <402>   DW_AT_decl_line   : 49
+    <403>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><406>: Abbrev Number: 5 (DW_TAG_member)
+    <407>   DW_AT_name        : (indirect string, offset: 0x3ae): loopback
+    <40b>   DW_AT_type        : <0x17a>
+    <40f>   DW_AT_decl_file   : 4
+    <410>   DW_AT_decl_line   : 50
+    <411>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><414>: Abbrev Number: 0
+ <1><415>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <416>   DW_AT_type        : <0x41a>
+ <1><41a>: Abbrev Number: 3 (DW_TAG_typedef)
+    <41b>   DW_AT_type        : <0x425>
+    <41f>   DW_AT_name        : (indirect string, offset: 0x3d9): te1_settings
+    <423>   DW_AT_decl_file   : 4
+    <424>   DW_AT_decl_line   : 57
+ <1><425>: Abbrev Number: 13 (DW_TAG_structure_type)
+    <426>   DW_AT_byte_size   : 16
+    <427>   DW_AT_decl_file   : 4
+    <428>   DW_AT_decl_line   : 52
+ <2><429>: Abbrev Number: 5 (DW_TAG_member)
+    <42a>   DW_AT_name        : (indirect string, offset: 0x398): clock_rate
+    <42e>   DW_AT_type        : <0x2a2>
+    <432>   DW_AT_decl_file   : 4
+    <433>   DW_AT_decl_line   : 53
+    <434>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><437>: Abbrev Number: 5 (DW_TAG_member)
+    <438>   DW_AT_name        : (indirect string, offset: 0x3a3): clock_type
+    <43c>   DW_AT_type        : <0x2a2>
+    <440>   DW_AT_decl_file   : 4
+    <441>   DW_AT_decl_line   : 54
+    <442>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><445>: Abbrev Number: 5 (DW_TAG_member)
+    <446>   DW_AT_name        : (indirect string, offset: 0x3ae): loopback
+    <44a>   DW_AT_type        : <0x17a>
+    <44e>   DW_AT_decl_file   : 4
+    <44f>   DW_AT_decl_line   : 55
+    <450>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><453>: Abbrev Number: 5 (DW_TAG_member)
+    <454>   DW_AT_name        : (indirect string, offset: 0x3d0): slot_map
+    <458>   DW_AT_type        : <0x2a2>
+    <45c>   DW_AT_decl_file   : 4
+    <45d>   DW_AT_decl_line   : 56
+    <45e>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><461>: Abbrev Number: 0
+ <1><462>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_ifreq.d2 b/mpers-m32/struct_ifreq.d2
index d55ecdf..b5eba19 100644
--- a/mpers-m32/struct_ifreq.d2
+++ b/mpers-m32/struct_ifreq.d2
@@ -1,600 +1,600 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x91): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15b): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 44
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x32e): struct_ifreq
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x3f8): struct_ifreq
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 42
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x328): ifreq
+DW_AT_name        : (indirect string, offset: 0x3f2): ifreq
 DW_AT_byte_size   : 32
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 124
-<2><43>
+DW_AT_decl_line   : 141
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa2): ifr_ifrn
-DW_AT_type        : <0x51>
+DW_AT_name        : (indirect string, offset: 0x16c): ifr_ifrn
+DW_AT_type        : <0x52>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 128
+DW_AT_decl_line   : 145
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 126
-<3><55>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xab): ifrn_name
-DW_AT_type        : <0x12e>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 127
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><64>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc3): ifr_ifru
-DW_AT_type        : <0x72>
-DW_AT_decl_file   : 1
 DW_AT_decl_line   : 143
+<3><56>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x175): ifrn_name
+DW_AT_type        : <0x12f>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 144
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><65>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x18d): ifr_ifru
+DW_AT_type        : <0x73>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 160
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><72>
+<2><73>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 129
-<3><76>
+DW_AT_decl_line   : 146
+<3><77>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcc): ifru_addr
-DW_AT_type        : <0x149>
+DW_AT_name        : (indirect string, offset: 0x196): ifru_addr
+DW_AT_type        : <0x14a>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 130
+DW_AT_decl_line   : 147
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><84>
+<3><85>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10c): ifru_dstaddr
-DW_AT_type        : <0x149>
+DW_AT_name        : (indirect string, offset: 0x1d6): ifru_dstaddr
+DW_AT_type        : <0x14a>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 131
+DW_AT_decl_line   : 148
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><92>
+<3><93>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x119): ifru_broadaddr
-DW_AT_type        : <0x149>
+DW_AT_name        : (indirect string, offset: 0x1e3): ifru_broadaddr
+DW_AT_type        : <0x14a>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 132
+DW_AT_decl_line   : 149
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><a0>
+<3><a1>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x128): ifru_netmask
-DW_AT_type        : <0x149>
+DW_AT_name        : (indirect string, offset: 0x1f2): ifru_netmask
+DW_AT_type        : <0x14a>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 133
+DW_AT_decl_line   : 150
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><ae>
+<3><af>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x135): ifru_hwaddr
-DW_AT_type        : <0x149>
+DW_AT_name        : (indirect string, offset: 0x1ff): ifru_hwaddr
+DW_AT_type        : <0x14a>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 134
+DW_AT_decl_line   : 151
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><bc>
+<3><bd>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x141): ifru_flags
-DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x20b): ifru_flags
+DW_AT_type        : <0x18e>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 135
+DW_AT_decl_line   : 152
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><ca>
+<3><cb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x152): ifru_ivalue
-DW_AT_type        : <0x194>
+DW_AT_name        : (indirect string, offset: 0x21c): ifru_ivalue
+DW_AT_type        : <0x195>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 136
+DW_AT_decl_line   : 153
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><d8>
+<3><d9>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x162): ifru_mtu
-DW_AT_type        : <0x194>
+DW_AT_name        : (indirect string, offset: 0x22c): ifru_mtu
+DW_AT_type        : <0x195>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 137
+DW_AT_decl_line   : 154
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><e6>
+<3><e7>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x16b): ifru_map
-DW_AT_type        : <0x19b>
+DW_AT_name        : (indirect string, offset: 0x235): ifru_map
+DW_AT_type        : <0x19c>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 138
+DW_AT_decl_line   : 155
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><f4>
+<3><f5>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1c3): ifru_slave
-DW_AT_type        : <0x12e>
+DW_AT_name        : (indirect string, offset: 0x28d): ifru_slave
+DW_AT_type        : <0x12f>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 139
+DW_AT_decl_line   : 156
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><102>
+<3><103>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1ce): ifru_newname
-DW_AT_type        : <0x12e>
+DW_AT_name        : (indirect string, offset: 0x298): ifru_newname
+DW_AT_type        : <0x12f>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 140
+DW_AT_decl_line   : 157
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><110>
+<3><111>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1db): ifru_data
-DW_AT_type        : <0x206>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 141
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><11e>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1e5): ifru_settings
+DW_AT_name        : (indirect string, offset: 0x2a5): ifru_data
 DW_AT_type        : <0x207>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 142
+DW_AT_decl_line   : 158
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><12e>
+<3><11f>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2af): ifru_settings
+DW_AT_type        : <0x208>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 159
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><12f>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x13b>
-<2><133>
+DW_AT_type        : <0x13c>
+<2><134>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x142>
+DW_AT_type        : <0x143>
 DW_AT_lower_bound : 0
 DW_AT_count       : 16
-<1><13b>
+<1><13c>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb5): char
+DW_AT_name        : (indirect string, offset: 0x17f): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><142>
+<1><143>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xba): sizetype
+DW_AT_name        : (indirect string, offset: 0x184): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><149>
+<1><14a>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x103): sockaddr
+DW_AT_name        : (indirect string, offset: 0x1cd): sockaddr
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 3
+DW_AT_decl_line   : 74
+<2><152>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1a0): sa_family
+DW_AT_type        : <0x16f>
+DW_AT_decl_file   : 3
+DW_AT_decl_line   : 75
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><160>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1c5): sa_data
+DW_AT_type        : <0x181>
+DW_AT_decl_file   : 3
 DW_AT_decl_line   : 76
-<2><151>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd6): sa_family
-DW_AT_type        : <0x16e>
-DW_AT_decl_file   : 3
-DW_AT_decl_line   : 77
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><15f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfb): sa_data
-DW_AT_type        : <0x180>
-DW_AT_decl_file   : 3
-DW_AT_decl_line   : 78
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<1><16e>
+<1><16f>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x179>
-DW_AT_name        : (indirect string, offset: 0xef): sa_family_t
+DW_AT_type        : <0x17a>
+DW_AT_name        : (indirect string, offset: 0x1b9): sa_family_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 34
-<1><179>
+<1><17a>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe0): unsigned short
+DW_AT_name        : (indirect string, offset: 0x1aa): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><180>
+<1><181>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x13b>
-<2><185>
+DW_AT_type        : <0x13c>
+<2><186>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x142>
+DW_AT_type        : <0x143>
 DW_AT_lower_bound : 0
 DW_AT_count       : 14
-<1><18d>
+<1><18e>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x14c): short
+DW_AT_name        : (indirect string, offset: 0x216): short
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 2
-<1><194>
+<1><195>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x15e): int
+DW_AT_name        : (indirect string, offset: 0x228): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><19b>
+<1><19c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1bd): ifmap
+DW_AT_name        : (indirect string, offset: 0x287): ifmap
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 101
-<2><1a3>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x174): mem_start
-DW_AT_type        : <0x1f8>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 102
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><1b1>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x190): mem_end
-DW_AT_type        : <0x1f8>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 103
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><1bf>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x198): base_addr
-DW_AT_type        : <0x179>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 104
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><1cd>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1a2): irq
-DW_AT_type        : <0x1ff>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 105
-DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
-<2><1db>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1b4): dma
-DW_AT_type        : <0x1ff>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 106
-DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
-<2><1e9>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1b8): port
-DW_AT_type        : <0x1ff>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 107
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><1f8>
-Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x17e): long unsigned int
-DW_AT_encoding    : 7	(unsigned)
-DW_AT_byte_size   : 4
-<1><1ff>
-Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1a6): unsigned char
-DW_AT_encoding    : 8	(unsigned char)
-DW_AT_byte_size   : 1
-<1><206>
-Abbrev Number: 11 (DW_TAG_pointer_type)
-<1><207>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x31c): if_settings
-DW_AT_byte_size   : 12
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 110
-<2><20f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f3): type
-DW_AT_type        : <0x2a1>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 111
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><21d>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x205): size
-DW_AT_type        : <0x2a1>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 112
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><22b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x20a): ifs_ifsu
-DW_AT_type        : <0x239>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 121
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><239>
-Abbrev Number: 6 (DW_TAG_union_type)
-DW_AT_byte_size   : 4
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 113
-<3><23d>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x213): raw_hdlc
-DW_AT_type        : <0x2a8>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 114
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><24b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x23b): cisco
-DW_AT_type        : <0x2d9>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 115
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><259>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x25e): fr
-DW_AT_type        : <0x30a>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 116
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><267>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x28b): fr_pvc
-DW_AT_type        : <0x381>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 117
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><275>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2a4): fr_pvc_info
-DW_AT_type        : <0x3a4>
-DW_AT_decl_file   : 1
 DW_AT_decl_line   : 118
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><283>
+<2><1a4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2c9): sync
-DW_AT_type        : <0x3d5>
+DW_AT_name        : (indirect string, offset: 0x23e): mem_start
+DW_AT_type        : <0x1f9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 119
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><291>
+<2><1b2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x302): te1
-DW_AT_type        : <0x414>
+DW_AT_name        : (indirect string, offset: 0x25a): mem_end
+DW_AT_type        : <0x1f9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 120
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><2a1>
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><1c0>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x262): base_addr
+DW_AT_type        : <0x17a>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 121
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><1ce>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x26c): irq
+DW_AT_type        : <0x200>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 122
+DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+<2><1dc>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x27e): dma
+DW_AT_type        : <0x200>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 123
+DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
+<2><1ea>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x282): port
+DW_AT_type        : <0x200>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 124
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<1><1f9>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1f8): unsigned int
+DW_AT_name        : (indirect string, offset: 0x248): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><2a8>
+<1><200>
+Abbrev Number: 9 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x270): unsigned char
+DW_AT_encoding    : 8	(unsigned char)
+DW_AT_byte_size   : 1
+<1><207>
+Abbrev Number: 11 (DW_TAG_pointer_type)
+<1><208>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x3e6): if_settings
+DW_AT_byte_size   : 12
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 127
+<2><210>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2bd): type
+DW_AT_type        : <0x2a2>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 128
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><21e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2cf): size
+DW_AT_type        : <0x2a2>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 129
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><22c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2d4): ifs_ifsu
+DW_AT_type        : <0x23a>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 138
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><23a>
+Abbrev Number: 6 (DW_TAG_union_type)
+DW_AT_byte_size   : 4
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 130
+<3><23e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2dd): raw_hdlc
+DW_AT_type        : <0x2a9>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 131
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><24c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x305): cisco
+DW_AT_type        : <0x2da>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 132
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><25a>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x328): fr
+DW_AT_type        : <0x30b>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 133
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><268>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x355): fr_pvc
+DW_AT_type        : <0x382>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 134
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><276>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x36e): fr_pvc_info
+DW_AT_type        : <0x3a5>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 135
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><284>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x393): sync
+DW_AT_type        : <0x3d6>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 136
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><292>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3cc): te1
+DW_AT_type        : <0x415>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 137
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><2a2>
+Abbrev Number: 9 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x2c2): unsigned int
+DW_AT_encoding    : 7	(unsigned)
+DW_AT_byte_size   : 4
+<1><2a9>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x2ad>
-<1><2ad>
+DW_AT_type        : <0x2ae>
+<1><2ae>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2b8>
-DW_AT_name        : (indirect string, offset: 0x22c): raw_hdlc_proto
+DW_AT_type        : <0x2b9>
+DW_AT_name        : (indirect string, offset: 0x2f6): raw_hdlc_proto
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 61
-<1><2b8>
+<1><2b9>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 58
-<2><2bc>
+<2><2bd>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x21c): encoding
-DW_AT_type        : <0x179>
+DW_AT_name        : (indirect string, offset: 0x2e6): encoding
+DW_AT_type        : <0x17a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 59
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><2ca>
+<2><2cb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x225): parity
-DW_AT_type        : <0x179>
+DW_AT_name        : (indirect string, offset: 0x2ef): parity
+DW_AT_type        : <0x17a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 60
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<1><2d9>
+<1><2da>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x2de>
-<1><2de>
+DW_AT_type        : <0x2df>
+<1><2df>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2e9>
-DW_AT_name        : (indirect string, offset: 0x252): cisco_proto
+DW_AT_type        : <0x2ea>
+DW_AT_name        : (indirect string, offset: 0x31c): cisco_proto
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 81
-<1><2e9>
+<1><2ea>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 78
-<2><2ed>
+<2><2ee>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x241): interval
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x30b): interval
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 79
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><2fb>
+<2><2fc>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x24a): timeout
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x314): timeout
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 80
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><30a>
+<1><30b>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x30f>
-<1><30f>
+DW_AT_type        : <0x310>
+<1><310>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x31a>
-DW_AT_name        : (indirect string, offset: 0x282): fr_proto
+DW_AT_type        : <0x31b>
+DW_AT_name        : (indirect string, offset: 0x34c): fr_proto
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 70
-<1><31a>
+<1><31b>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 24
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 62
-<2><31e>
+<2><31f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x261): t391
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x32b): t391
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 63
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><32c>
+<2><32d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x266): t392
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x330): t392
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 64
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><33a>
+<2><33b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x26b): n391
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x335): n391
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 65
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><348>
+<2><349>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x270): n392
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x33a): n392
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 66
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><356>
+<2><357>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x275): n393
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x33f): n393
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 67
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><364>
+<2><365>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x27a): lmi
-DW_AT_type        : <0x179>
+DW_AT_name        : (indirect string, offset: 0x344): lmi
+DW_AT_type        : <0x17a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 68
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><372>
+<2><373>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x27e): dce
-DW_AT_type        : <0x179>
+DW_AT_name        : (indirect string, offset: 0x348): dce
+DW_AT_type        : <0x17a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 69
 DW_AT_data_member_location: 2 byte block: 23 16 	(DW_OP_plus_uconst: 22)
-<1><381>
+<1><382>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x386>
-<1><386>
+DW_AT_type        : <0x387>
+<1><387>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x391>
-DW_AT_name        : (indirect string, offset: 0x297): fr_proto_pvc
+DW_AT_type        : <0x392>
+DW_AT_name        : (indirect string, offset: 0x361): fr_proto_pvc
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 73
-<1><391>
+<1><392>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 71
-<2><395>
+<2><396>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x292): dlci
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x35c): dlci
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 72
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><3a4>
+<1><3a5>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x3a9>
-<1><3a9>
+DW_AT_type        : <0x3aa>
+<1><3aa>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b4>
-DW_AT_name        : (indirect string, offset: 0x2b7): fr_proto_pvc_info
+DW_AT_type        : <0x3b5>
+DW_AT_name        : (indirect string, offset: 0x381): fr_proto_pvc_info
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 77
-<1><3b4>
+<1><3b5>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 20
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 74
-<2><3b8>
+<2><3b9>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x292): dlci
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x35c): dlci
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 75
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><3c6>
+<2><3c7>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2b0): master
-DW_AT_type        : <0x12e>
+DW_AT_name        : (indirect string, offset: 0x37a): master
+DW_AT_type        : <0x12f>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 76
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><3d5>
+<1><3d6>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x3da>
-<1><3da>
+DW_AT_type        : <0x3db>
+<1><3db>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3e5>
-DW_AT_name        : (indirect string, offset: 0x2ed): sync_serial_settings
+DW_AT_type        : <0x3e6>
+DW_AT_name        : (indirect string, offset: 0x3b7): sync_serial_settings
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 51
-<1><3e5>
+<1><3e6>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 47
-<2><3e9>
+<2><3ea>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2ce): clock_rate
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x398): clock_rate
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 48
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><3f7>
+<2><3f8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2d9): clock_type
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x3a3): clock_type
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 49
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><405>
+<2><406>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2e4): loopback
-DW_AT_type        : <0x179>
+DW_AT_name        : (indirect string, offset: 0x3ae): loopback
+DW_AT_type        : <0x17a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 50
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><414>
+<1><415>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x419>
-<1><419>
+DW_AT_type        : <0x41a>
+<1><41a>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x424>
-DW_AT_name        : (indirect string, offset: 0x30f): te1_settings
+DW_AT_type        : <0x425>
+DW_AT_name        : (indirect string, offset: 0x3d9): te1_settings
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 57
-<1><424>
+<1><425>
 Abbrev Number: 13 (DW_TAG_structure_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 52
-<2><428>
+<2><429>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2ce): clock_rate
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x398): clock_rate
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 53
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><436>
+<2><437>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2d9): clock_type
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x3a3): clock_type
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 54
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><444>
+<2><445>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2e4): loopback
-DW_AT_type        : <0x179>
+DW_AT_name        : (indirect string, offset: 0x3ae): loopback
+DW_AT_type        : <0x17a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 55
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><452>
+<2><453>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x306): slot_map
-DW_AT_type        : <0x2a1>
+DW_AT_name        : (indirect string, offset: 0x3d0): slot_map
+DW_AT_type        : <0x2a2>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 56
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
diff --git a/mpers-m32/struct_keyctl_kdf_params.d1 b/mpers-m32/struct_keyctl_kdf_params.d1
index d1c68fb..aa93a7b 100644
--- a/mpers-m32/struct_keyctl_kdf_params.d1
+++ b/mpers-m32/struct_keyctl_kdf_params.d1
@@ -1,88 +1,89 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xb6 (32-bit)
+   Length:        0xb7 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_keyctl_kdf_params.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_keyctl_kdf_params.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x62): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x9d): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 7
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x117): struct_keyctl_kdf_params
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 5
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x105): keyctl_kdf_params
-    <40>   DW_AT_byte_size   : 44
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 13
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xae): hashname
-    <48>   DW_AT_type        : <0x7c>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 14
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xbc): otherinfo
-    <56>   DW_AT_type        : <0x7c>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 15
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xc6): otherinfolen
-    <64>   DW_AT_type        : <0x88>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 16
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xf4): __spare
-    <72>   DW_AT_type        : <0xa5>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 17
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 0
- <1><7c>: Abbrev Number: 6 (DW_TAG_pointer_type)
-    <7d>   DW_AT_type        : <0x81>
- <1><81>: Abbrev Number: 7 (DW_TAG_base_type)
-    <82>   DW_AT_name        : (indirect string, offset: 0xb7): char
-    <86>   DW_AT_encoding    : 8	(unsigned char)
-    <87>   DW_AT_byte_size   : 1
- <1><88>: Abbrev Number: 3 (DW_TAG_typedef)
-    <89>   DW_AT_type        : <0x93>
-    <8d>   DW_AT_name        : (indirect string, offset: 0xeb): uint32_t
-    <91>   DW_AT_decl_file   : 2
-    <92>   DW_AT_decl_line   : 65
- <1><93>: Abbrev Number: 3 (DW_TAG_typedef)
-    <94>   DW_AT_type        : <0x9e>
-    <98>   DW_AT_name        : (indirect string, offset: 0xe0): __uint32_t
-    <9c>   DW_AT_decl_file   : 2
-    <9d>   DW_AT_decl_line   : 41
- <1><9e>: Abbrev Number: 7 (DW_TAG_base_type)
-    <9f>   DW_AT_name        : (indirect string, offset: 0xd3): unsigned int
-    <a3>   DW_AT_encoding    : 7	(unsigned)
-    <a4>   DW_AT_byte_size   : 4
- <1><a5>: Abbrev Number: 8 (DW_TAG_array_type)
-    <a6>   DW_AT_type        : <0x88>
- <2><aa>: Abbrev Number: 9 (DW_TAG_subrange_type)
-    <ab>   DW_AT_type        : <0xb2>
-    <af>   DW_AT_lower_bound : 0
-    <b0>   DW_AT_count       : 8
- <2><b1>: Abbrev Number: 0
- <1><b2>: Abbrev Number: 10 (DW_TAG_base_type)
-    <b3>   DW_AT_name        : (indirect string, offset: 0xfc): sizetype
-    <b7>   DW_AT_byte_size   : 8
-    <b8>   DW_AT_encoding    : 7	(unsigned)
- <1><b9>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x12c): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x167): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 7
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1e1): struct_keyctl_kdf_params
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 5
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1cf): keyctl_kdf_params
+    <41>   DW_AT_byte_size   : 44
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 13
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x178): hashname
+    <49>   DW_AT_type        : <0x7d>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 14
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x186): otherinfo
+    <57>   DW_AT_type        : <0x7d>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 15
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x190): otherinfolen
+    <65>   DW_AT_type        : <0x89>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 16
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1be): __spare
+    <73>   DW_AT_type        : <0xa6>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 17
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 0
+ <1><7d>: Abbrev Number: 6 (DW_TAG_pointer_type)
+    <7e>   DW_AT_type        : <0x82>
+ <1><82>: Abbrev Number: 7 (DW_TAG_base_type)
+    <83>   DW_AT_name        : (indirect string, offset: 0x181): char
+    <87>   DW_AT_encoding    : 8	(unsigned char)
+    <88>   DW_AT_byte_size   : 1
+ <1><89>: Abbrev Number: 3 (DW_TAG_typedef)
+    <8a>   DW_AT_type        : <0x94>
+    <8e>   DW_AT_name        : (indirect string, offset: 0x1b5): uint32_t
+    <92>   DW_AT_decl_file   : 2
+    <93>   DW_AT_decl_line   : 65
+ <1><94>: Abbrev Number: 3 (DW_TAG_typedef)
+    <95>   DW_AT_type        : <0x9f>
+    <99>   DW_AT_name        : (indirect string, offset: 0x1aa): __uint32_t
+    <9d>   DW_AT_decl_file   : 2
+    <9e>   DW_AT_decl_line   : 41
+ <1><9f>: Abbrev Number: 7 (DW_TAG_base_type)
+    <a0>   DW_AT_name        : (indirect string, offset: 0x19d): unsigned int
+    <a4>   DW_AT_encoding    : 7	(unsigned)
+    <a5>   DW_AT_byte_size   : 4
+ <1><a6>: Abbrev Number: 8 (DW_TAG_array_type)
+    <a7>   DW_AT_type        : <0x89>
+ <2><ab>: Abbrev Number: 9 (DW_TAG_subrange_type)
+    <ac>   DW_AT_type        : <0xb3>
+    <b0>   DW_AT_lower_bound : 0
+    <b1>   DW_AT_count       : 8
+ <2><b2>: Abbrev Number: 0
+ <1><b3>: Abbrev Number: 10 (DW_TAG_base_type)
+    <b4>   DW_AT_name        : (indirect string, offset: 0x1c6): sizetype
+    <b8>   DW_AT_byte_size   : 8
+    <b9>   DW_AT_encoding    : 7	(unsigned)
+ <1><ba>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_keyctl_kdf_params.d2 b/mpers-m32/struct_keyctl_kdf_params.d2
index 172fa0f..6000a87 100644
--- a/mpers-m32/struct_keyctl_kdf_params.d2
+++ b/mpers-m32/struct_keyctl_kdf_params.d2
@@ -1,86 +1,86 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x9d): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x167): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 7
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x117): struct_keyctl_kdf_params
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1e1): struct_keyctl_kdf_params
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 5
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x105): keyctl_kdf_params
+DW_AT_name        : (indirect string, offset: 0x1cf): keyctl_kdf_params
 DW_AT_byte_size   : 44
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 13
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xae): hashname
-DW_AT_type        : <0x7c>
+DW_AT_name        : (indirect string, offset: 0x178): hashname
+DW_AT_type        : <0x7d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 14
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xbc): otherinfo
-DW_AT_type        : <0x7c>
+DW_AT_name        : (indirect string, offset: 0x186): otherinfo
+DW_AT_type        : <0x7d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 15
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc6): otherinfolen
-DW_AT_type        : <0x88>
+DW_AT_name        : (indirect string, offset: 0x190): otherinfolen
+DW_AT_type        : <0x89>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 16
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf4): __spare
-DW_AT_type        : <0xa5>
+DW_AT_name        : (indirect string, offset: 0x1be): __spare
+DW_AT_type        : <0xa6>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 17
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><7c>
+<1><7d>
 Abbrev Number: 6 (DW_TAG_pointer_type)
-DW_AT_type        : <0x81>
-<1><81>
+DW_AT_type        : <0x82>
+<1><82>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb7): char
+DW_AT_name        : (indirect string, offset: 0x181): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><88>
+<1><89>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x93>
-DW_AT_name        : (indirect string, offset: 0xeb): uint32_t
+DW_AT_type        : <0x94>
+DW_AT_name        : (indirect string, offset: 0x1b5): uint32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 65
-<1><93>
+<1><94>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x9e>
-DW_AT_name        : (indirect string, offset: 0xe0): __uint32_t
+DW_AT_type        : <0x9f>
+DW_AT_name        : (indirect string, offset: 0x1aa): __uint32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 41
-<1><9e>
+<1><9f>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xd3): unsigned int
+DW_AT_name        : (indirect string, offset: 0x19d): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><a5>
+<1><a6>
 Abbrev Number: 8 (DW_TAG_array_type)
-DW_AT_type        : <0x88>
-<2><aa>
+DW_AT_type        : <0x89>
+<2><ab>
 Abbrev Number: 9 (DW_TAG_subrange_type)
-DW_AT_type        : <0xb2>
+DW_AT_type        : <0xb3>
 DW_AT_lower_bound : 0
 DW_AT_count       : 8
-<1><b2>
+<1><b3>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xfc): sizetype
+DW_AT_name        : (indirect string, offset: 0x1c6): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
diff --git a/mpers-m32/struct_loop_info.d1 b/mpers-m32/struct_loop_info.d1
index 8a8beb1..149f47e 100644
--- a/mpers-m32/struct_loop_info.d1
+++ b/mpers-m32/struct_loop_info.d1
@@ -1,162 +1,163 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x154 (32-bit)
+   Length:        0x155 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_loop_info.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_loop_info.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5a): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 36
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x189): struct_loop_info
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 33
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x17f): loop_info
-    <40>   DW_AT_byte_size   : 140
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 31
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa6): lo_number
-    <48>   DW_AT_type        : <0xee>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 32
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xb4): lo_device
-    <56>   DW_AT_type        : <0xf5>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 33
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xde): lo_inode
-    <64>   DW_AT_type        : <0x107>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 34
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xf9): lo_rdevice
-    <72>   DW_AT_type        : <0xf5>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 35
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0x104): lo_offset
-    <80>   DW_AT_type        : <0xee>
-    <84>   DW_AT_decl_file   : 1
-    <85>   DW_AT_decl_line   : 36
-    <86>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x10e): lo_encrypt_type
-    <8e>   DW_AT_type        : <0xee>
-    <92>   DW_AT_decl_file   : 1
-    <93>   DW_AT_decl_line   : 37
-    <94>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0x11e): lo_encrypt_key_size
-    <9c>   DW_AT_type        : <0xee>
-    <a0>   DW_AT_decl_file   : 1
-    <a1>   DW_AT_decl_line   : 38
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0x132): lo_flags
-    <aa>   DW_AT_type        : <0xee>
-    <ae>   DW_AT_decl_file   : 1
-    <af>   DW_AT_decl_line   : 39
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0x13b): lo_name
-    <b8>   DW_AT_type        : <0x10e>
-    <bc>   DW_AT_decl_file   : 1
-    <bd>   DW_AT_decl_line   : 40
-    <be>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x151): lo_encrypt_key
-    <c6>   DW_AT_type        : <0x129>
-    <ca>   DW_AT_decl_file   : 1
-    <cb>   DW_AT_decl_line   : 41
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 60 	(DW_OP_plus_uconst: 96)
- <2><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0x16e): lo_init
-    <d4>   DW_AT_type        : <0x13d>
-    <d8>   DW_AT_decl_file   : 1
-    <d9>   DW_AT_decl_line   : 42
-    <da>   DW_AT_data_member_location: 3 byte block: 23 80 1 	(DW_OP_plus_uconst: 128)
- <2><de>: Abbrev Number: 5 (DW_TAG_member)
-    <df>   DW_AT_name        : (indirect string, offset: 0x176): reserved
-    <e3>   DW_AT_type        : <0x14a>
-    <e7>   DW_AT_decl_file   : 1
-    <e8>   DW_AT_decl_line   : 43
-    <e9>   DW_AT_data_member_location: 3 byte block: 23 88 1 	(DW_OP_plus_uconst: 136)
- <2><ed>: Abbrev Number: 0
- <1><ee>: Abbrev Number: 6 (DW_TAG_base_type)
-    <ef>   DW_AT_name        : (indirect string, offset: 0xb0): int
-    <f3>   DW_AT_encoding    : 5	(signed)
-    <f4>   DW_AT_byte_size   : 4
- <1><f5>: Abbrev Number: 3 (DW_TAG_typedef)
-    <f6>   DW_AT_type        : <0x100>
-    <fa>   DW_AT_name        : (indirect string, offset: 0xcb): __kernel_old_dev_t
-    <fe>   DW_AT_decl_file   : 2
-    <ff>   DW_AT_decl_line   : 57
- <1><100>: Abbrev Number: 6 (DW_TAG_base_type)
-    <101>   DW_AT_name        : (indirect string, offset: 0xbe): unsigned int
-    <105>   DW_AT_encoding    : 7	(unsigned)
-    <106>   DW_AT_byte_size   : 4
- <1><107>: Abbrev Number: 6 (DW_TAG_base_type)
-    <108>   DW_AT_name        : (indirect string, offset: 0xe7): long unsigned int
-    <10c>   DW_AT_encoding    : 7	(unsigned)
-    <10d>   DW_AT_byte_size   : 4
- <1><10e>: Abbrev Number: 7 (DW_TAG_array_type)
-    <10f>   DW_AT_type        : <0x11b>
- <2><113>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <114>   DW_AT_type        : <0x122>
-    <118>   DW_AT_lower_bound : 0
-    <119>   DW_AT_count       : 64
- <2><11a>: Abbrev Number: 0
- <1><11b>: Abbrev Number: 6 (DW_TAG_base_type)
-    <11c>   DW_AT_name        : (indirect string, offset: 0x143): char
-    <120>   DW_AT_encoding    : 8	(unsigned char)
-    <121>   DW_AT_byte_size   : 1
- <1><122>: Abbrev Number: 9 (DW_TAG_base_type)
-    <123>   DW_AT_name        : (indirect string, offset: 0x148): sizetype
-    <127>   DW_AT_byte_size   : 8
-    <128>   DW_AT_encoding    : 7	(unsigned)
- <1><129>: Abbrev Number: 7 (DW_TAG_array_type)
-    <12a>   DW_AT_type        : <0x136>
- <2><12e>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <12f>   DW_AT_type        : <0x122>
-    <133>   DW_AT_lower_bound : 0
-    <134>   DW_AT_count       : 32
- <2><135>: Abbrev Number: 0
- <1><136>: Abbrev Number: 6 (DW_TAG_base_type)
-    <137>   DW_AT_name        : (indirect string, offset: 0x160): unsigned char
-    <13b>   DW_AT_encoding    : 8	(unsigned char)
-    <13c>   DW_AT_byte_size   : 1
- <1><13d>: Abbrev Number: 7 (DW_TAG_array_type)
-    <13e>   DW_AT_type        : <0x107>
- <2><142>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <143>   DW_AT_type        : <0x122>
-    <147>   DW_AT_lower_bound : 0
-    <148>   DW_AT_count       : 2
- <2><149>: Abbrev Number: 0
- <1><14a>: Abbrev Number: 7 (DW_TAG_array_type)
-    <14b>   DW_AT_type        : <0x11b>
- <2><14f>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <150>   DW_AT_type        : <0x122>
-    <154>   DW_AT_lower_bound : 0
-    <155>   DW_AT_count       : 4
- <2><156>: Abbrev Number: 0
- <1><157>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x124): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 36
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x253): struct_loop_info
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 33
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x249): loop_info
+    <41>   DW_AT_byte_size   : 140
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 31
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x170): lo_number
+    <49>   DW_AT_type        : <0xef>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 32
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x17e): lo_device
+    <57>   DW_AT_type        : <0xf6>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 33
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x1a8): lo_inode
+    <65>   DW_AT_type        : <0x108>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 34
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1c3): lo_rdevice
+    <73>   DW_AT_type        : <0xf6>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 35
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1ce): lo_offset
+    <81>   DW_AT_type        : <0xef>
+    <85>   DW_AT_decl_file   : 1
+    <86>   DW_AT_decl_line   : 36
+    <87>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1d8): lo_encrypt_type
+    <8f>   DW_AT_type        : <0xef>
+    <93>   DW_AT_decl_file   : 1
+    <94>   DW_AT_decl_line   : 37
+    <95>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1e8): lo_encrypt_key_size
+    <9d>   DW_AT_type        : <0xef>
+    <a1>   DW_AT_decl_file   : 1
+    <a2>   DW_AT_decl_line   : 38
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1fc): lo_flags
+    <ab>   DW_AT_type        : <0xef>
+    <af>   DW_AT_decl_file   : 1
+    <b0>   DW_AT_decl_line   : 39
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x205): lo_name
+    <b9>   DW_AT_type        : <0x10f>
+    <bd>   DW_AT_decl_file   : 1
+    <be>   DW_AT_decl_line   : 40
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x21b): lo_encrypt_key
+    <c7>   DW_AT_type        : <0x12a>
+    <cb>   DW_AT_decl_file   : 1
+    <cc>   DW_AT_decl_line   : 41
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 60 	(DW_OP_plus_uconst: 96)
+ <2><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x238): lo_init
+    <d5>   DW_AT_type        : <0x13e>
+    <d9>   DW_AT_decl_file   : 1
+    <da>   DW_AT_decl_line   : 42
+    <db>   DW_AT_data_member_location: 3 byte block: 23 80 1 	(DW_OP_plus_uconst: 128)
+ <2><df>: Abbrev Number: 5 (DW_TAG_member)
+    <e0>   DW_AT_name        : (indirect string, offset: 0x240): reserved
+    <e4>   DW_AT_type        : <0x14b>
+    <e8>   DW_AT_decl_file   : 1
+    <e9>   DW_AT_decl_line   : 43
+    <ea>   DW_AT_data_member_location: 3 byte block: 23 88 1 	(DW_OP_plus_uconst: 136)
+ <2><ee>: Abbrev Number: 0
+ <1><ef>: Abbrev Number: 6 (DW_TAG_base_type)
+    <f0>   DW_AT_name        : (indirect string, offset: 0x17a): int
+    <f4>   DW_AT_encoding    : 5	(signed)
+    <f5>   DW_AT_byte_size   : 4
+ <1><f6>: Abbrev Number: 3 (DW_TAG_typedef)
+    <f7>   DW_AT_type        : <0x101>
+    <fb>   DW_AT_name        : (indirect string, offset: 0x195): __kernel_old_dev_t
+    <ff>   DW_AT_decl_file   : 2
+    <100>   DW_AT_decl_line   : 57
+ <1><101>: Abbrev Number: 6 (DW_TAG_base_type)
+    <102>   DW_AT_name        : (indirect string, offset: 0x188): unsigned int
+    <106>   DW_AT_encoding    : 7	(unsigned)
+    <107>   DW_AT_byte_size   : 4
+ <1><108>: Abbrev Number: 6 (DW_TAG_base_type)
+    <109>   DW_AT_name        : (indirect string, offset: 0x1b1): long unsigned int
+    <10d>   DW_AT_encoding    : 7	(unsigned)
+    <10e>   DW_AT_byte_size   : 4
+ <1><10f>: Abbrev Number: 7 (DW_TAG_array_type)
+    <110>   DW_AT_type        : <0x11c>
+ <2><114>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <115>   DW_AT_type        : <0x123>
+    <119>   DW_AT_lower_bound : 0
+    <11a>   DW_AT_count       : 64
+ <2><11b>: Abbrev Number: 0
+ <1><11c>: Abbrev Number: 6 (DW_TAG_base_type)
+    <11d>   DW_AT_name        : (indirect string, offset: 0x20d): char
+    <121>   DW_AT_encoding    : 8	(unsigned char)
+    <122>   DW_AT_byte_size   : 1
+ <1><123>: Abbrev Number: 9 (DW_TAG_base_type)
+    <124>   DW_AT_name        : (indirect string, offset: 0x212): sizetype
+    <128>   DW_AT_byte_size   : 8
+    <129>   DW_AT_encoding    : 7	(unsigned)
+ <1><12a>: Abbrev Number: 7 (DW_TAG_array_type)
+    <12b>   DW_AT_type        : <0x137>
+ <2><12f>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <130>   DW_AT_type        : <0x123>
+    <134>   DW_AT_lower_bound : 0
+    <135>   DW_AT_count       : 32
+ <2><136>: Abbrev Number: 0
+ <1><137>: Abbrev Number: 6 (DW_TAG_base_type)
+    <138>   DW_AT_name        : (indirect string, offset: 0x22a): unsigned char
+    <13c>   DW_AT_encoding    : 8	(unsigned char)
+    <13d>   DW_AT_byte_size   : 1
+ <1><13e>: Abbrev Number: 7 (DW_TAG_array_type)
+    <13f>   DW_AT_type        : <0x108>
+ <2><143>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <144>   DW_AT_type        : <0x123>
+    <148>   DW_AT_lower_bound : 0
+    <149>   DW_AT_count       : 2
+ <2><14a>: Abbrev Number: 0
+ <1><14b>: Abbrev Number: 7 (DW_TAG_array_type)
+    <14c>   DW_AT_type        : <0x11c>
+ <2><150>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <151>   DW_AT_type        : <0x123>
+    <155>   DW_AT_lower_bound : 0
+    <156>   DW_AT_count       : 4
+ <2><157>: Abbrev Number: 0
+ <1><158>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_loop_info.d2 b/mpers-m32/struct_loop_info.d2
index ac955a5..43f54c0 100644
--- a/mpers-m32/struct_loop_info.d2
+++ b/mpers-m32/struct_loop_info.d2
@@ -1,172 +1,172 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 36
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x189): struct_loop_info
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x253): struct_loop_info
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 33
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x17f): loop_info
+DW_AT_name        : (indirect string, offset: 0x249): loop_info
 DW_AT_byte_size   : 140
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa6): lo_number
-DW_AT_type        : <0xee>
+DW_AT_name        : (indirect string, offset: 0x170): lo_number
+DW_AT_type        : <0xef>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb4): lo_device
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x17e): lo_device
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xde): lo_inode
-DW_AT_type        : <0x107>
+DW_AT_name        : (indirect string, offset: 0x1a8): lo_inode
+DW_AT_type        : <0x108>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf9): lo_rdevice
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1c3): lo_rdevice
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 35
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x104): lo_offset
-DW_AT_type        : <0xee>
+DW_AT_name        : (indirect string, offset: 0x1ce): lo_offset
+DW_AT_type        : <0xef>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10e): lo_encrypt_type
-DW_AT_type        : <0xee>
+DW_AT_name        : (indirect string, offset: 0x1d8): lo_encrypt_type
+DW_AT_type        : <0xef>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11e): lo_encrypt_key_size
-DW_AT_type        : <0xee>
+DW_AT_name        : (indirect string, offset: 0x1e8): lo_encrypt_key_size
+DW_AT_type        : <0xef>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x132): lo_flags
-DW_AT_type        : <0xee>
+DW_AT_name        : (indirect string, offset: 0x1fc): lo_flags
+DW_AT_type        : <0xef>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13b): lo_name
-DW_AT_type        : <0x10e>
+DW_AT_name        : (indirect string, offset: 0x205): lo_name
+DW_AT_type        : <0x10f>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x151): lo_encrypt_key
-DW_AT_type        : <0x129>
+DW_AT_name        : (indirect string, offset: 0x21b): lo_encrypt_key
+DW_AT_type        : <0x12a>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 60 	(DW_OP_plus_uconst: 96)
-<2><cf>
+<2><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x16e): lo_init
-DW_AT_type        : <0x13d>
+DW_AT_name        : (indirect string, offset: 0x238): lo_init
+DW_AT_type        : <0x13e>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 42
 DW_AT_data_member_location: 3 byte block: 23 80 1 	(DW_OP_plus_uconst: 128)
-<2><de>
+<2><df>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x176): reserved
-DW_AT_type        : <0x14a>
+DW_AT_name        : (indirect string, offset: 0x240): reserved
+DW_AT_type        : <0x14b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 43
 DW_AT_data_member_location: 3 byte block: 23 88 1 	(DW_OP_plus_uconst: 136)
-<1><ee>
+<1><ef>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb0): int
+DW_AT_name        : (indirect string, offset: 0x17a): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><f5>
+<1><f6>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x100>
-DW_AT_name        : (indirect string, offset: 0xcb): __kernel_old_dev_t
+DW_AT_type        : <0x101>
+DW_AT_name        : (indirect string, offset: 0x195): __kernel_old_dev_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 57
-<1><100>
+<1><101>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xbe): unsigned int
+DW_AT_name        : (indirect string, offset: 0x188): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><107>
+<1><108>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe7): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1b1): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><10e>
+<1><10f>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x11b>
-<2><113>
+DW_AT_type        : <0x11c>
+<2><114>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x122>
+DW_AT_type        : <0x123>
 DW_AT_lower_bound : 0
 DW_AT_count       : 64
-<1><11b>
+<1><11c>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x143): char
+DW_AT_name        : (indirect string, offset: 0x20d): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><122>
+<1><123>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x148): sizetype
+DW_AT_name        : (indirect string, offset: 0x212): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><129>
+<1><12a>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x136>
-<2><12e>
+DW_AT_type        : <0x137>
+<2><12f>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x122>
+DW_AT_type        : <0x123>
 DW_AT_lower_bound : 0
 DW_AT_count       : 32
-<1><136>
+<1><137>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x160): unsigned char
+DW_AT_name        : (indirect string, offset: 0x22a): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><13d>
+<1><13e>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x107>
-<2><142>
+DW_AT_type        : <0x108>
+<2><143>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x122>
+DW_AT_type        : <0x123>
 DW_AT_lower_bound : 0
 DW_AT_count       : 2
-<1><14a>
+<1><14b>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x11b>
-<2><14f>
+DW_AT_type        : <0x11c>
+<2><150>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x122>
+DW_AT_type        : <0x123>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4
diff --git a/mpers-m32/struct_mmsghdr.d1 b/mpers-m32/struct_mmsghdr.d1
index 0fc9f73..fa162a1 100644
--- a/mpers-m32/struct_mmsghdr.d1
+++ b/mpers-m32/struct_mmsghdr.d1
@@ -1,161 +1,162 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x155 (32-bit)
+   Length:        0x156 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_mmsghdr.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_mmsghdr.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x58): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x93): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 7
-    <29>   DW_AT_decl_line   : 34
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x19a): struct_mmsghdr
-    <39>   DW_AT_decl_file   : 7
-    <3a>   DW_AT_decl_line   : 32
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x192): mmsghdr
-    <40>   DW_AT_byte_size   : 32
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 96
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa4): msg_hdr
-    <48>   DW_AT_type        : <0x60>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 97
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0x18a): msg_len
-    <56>   DW_AT_type        : <0x151>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 98
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><5f>: Abbrev Number: 0
- <1><60>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <61>   DW_AT_name        : (indirect string, offset: 0x183): msghdr
-    <65>   DW_AT_byte_size   : 28
-    <66>   DW_AT_decl_file   : 1
-    <67>   DW_AT_decl_line   : 86
- <2><68>: Abbrev Number: 5 (DW_TAG_member)
-    <69>   DW_AT_name        : (indirect string, offset: 0xac): msg_name
-    <6d>   DW_AT_type        : <0xcb>
-    <71>   DW_AT_decl_file   : 1
-    <72>   DW_AT_decl_line   : 87
-    <73>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><76>: Abbrev Number: 5 (DW_TAG_member)
-    <77>   DW_AT_name        : (indirect string, offset: 0xb5): msg_namelen
-    <7b>   DW_AT_type        : <0xcc>
-    <7f>   DW_AT_decl_file   : 1
-    <80>   DW_AT_decl_line   : 88
-    <81>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><84>: Abbrev Number: 5 (DW_TAG_member)
-    <85>   DW_AT_name        : (indirect string, offset: 0xed): msg_iov
-    <89>   DW_AT_type        : <0xff>
-    <8d>   DW_AT_decl_file   : 1
-    <8e>   DW_AT_decl_line   : 89
-    <8f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><92>: Abbrev Number: 5 (DW_TAG_member)
-    <93>   DW_AT_name        : (indirect string, offset: 0x13f): msg_iovlen
-    <97>   DW_AT_type        : <0x146>
-    <9b>   DW_AT_decl_file   : 1
-    <9c>   DW_AT_decl_line   : 90
-    <9d>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><a0>: Abbrev Number: 5 (DW_TAG_member)
-    <a1>   DW_AT_name        : (indirect string, offset: 0x15e): msg_control
-    <a5>   DW_AT_type        : <0xcb>
-    <a9>   DW_AT_decl_file   : 1
-    <aa>   DW_AT_decl_line   : 91
-    <ab>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><ae>: Abbrev Number: 5 (DW_TAG_member)
-    <af>   DW_AT_name        : (indirect string, offset: 0x16a): msg_controllen
-    <b3>   DW_AT_type        : <0x146>
-    <b7>   DW_AT_decl_file   : 1
-    <b8>   DW_AT_decl_line   : 92
-    <b9>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><bc>: Abbrev Number: 5 (DW_TAG_member)
-    <bd>   DW_AT_name        : (indirect string, offset: 0x179): msg_flags
-    <c1>   DW_AT_type        : <0xf8>
-    <c5>   DW_AT_decl_file   : 1
-    <c6>   DW_AT_decl_line   : 93
-    <c7>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><ca>: Abbrev Number: 0
- <1><cb>: Abbrev Number: 6 (DW_TAG_pointer_type)
- <1><cc>: Abbrev Number: 3 (DW_TAG_typedef)
-    <cd>   DW_AT_type        : <0xd7>
-    <d1>   DW_AT_name        : (indirect string, offset: 0xe3): socklen_t
-    <d5>   DW_AT_decl_file   : 3
-    <d6>   DW_AT_decl_line   : 116
- <1><d7>: Abbrev Number: 3 (DW_TAG_typedef)
-    <d8>   DW_AT_type        : <0xe2>
-    <dc>   DW_AT_name        : (indirect string, offset: 0xd7): __socklen_t
-    <e0>   DW_AT_decl_file   : 3
-    <e1>   DW_AT_decl_line   : 111
- <1><e2>: Abbrev Number: 3 (DW_TAG_typedef)
-    <e3>   DW_AT_type        : <0xed>
-    <e7>   DW_AT_name        : (indirect string, offset: 0xcf): int32_t
-    <eb>   DW_AT_decl_file   : 2
-    <ec>   DW_AT_decl_line   : 64
- <1><ed>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ee>   DW_AT_type        : <0xf8>
-    <f2>   DW_AT_name        : (indirect string, offset: 0xc5): __int32_t
-    <f6>   DW_AT_decl_file   : 2
-    <f7>   DW_AT_decl_line   : 40
- <1><f8>: Abbrev Number: 7 (DW_TAG_base_type)
-    <f9>   DW_AT_name        : (indirect string, offset: 0xc1): int
-    <fd>   DW_AT_encoding    : 5	(signed)
-    <fe>   DW_AT_byte_size   : 4
- <1><ff>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <100>   DW_AT_type        : <0x104>
- <1><104>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <105>   DW_AT_name        : (indirect string, offset: 0x139): iovec
-    <109>   DW_AT_byte_size   : 8
-    <10a>   DW_AT_decl_file   : 4
-    <10b>   DW_AT_decl_line   : 23
- <2><10c>: Abbrev Number: 5 (DW_TAG_member)
-    <10d>   DW_AT_name        : (indirect string, offset: 0xf5): iov_base
-    <111>   DW_AT_type        : <0xcb>
-    <115>   DW_AT_decl_file   : 4
-    <116>   DW_AT_decl_line   : 24
-    <117>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><11a>: Abbrev Number: 5 (DW_TAG_member)
-    <11b>   DW_AT_name        : (indirect string, offset: 0xfe): iov_len
-    <11f>   DW_AT_type        : <0x129>
-    <123>   DW_AT_decl_file   : 4
-    <124>   DW_AT_decl_line   : 25
-    <125>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><128>: Abbrev Number: 0
- <1><129>: Abbrev Number: 3 (DW_TAG_typedef)
-    <12a>   DW_AT_type        : <0x134>
-    <12e>   DW_AT_name        : (indirect string, offset: 0x129): __kernel_size_t
-    <132>   DW_AT_decl_file   : 5
-    <133>   DW_AT_decl_line   : 65
- <1><134>: Abbrev Number: 3 (DW_TAG_typedef)
-    <135>   DW_AT_type        : <0x13f>
-    <139>   DW_AT_name        : (indirect string, offset: 0x118): __kernel_ulong_t
-    <13d>   DW_AT_decl_file   : 5
-    <13e>   DW_AT_decl_line   : 24
- <1><13f>: Abbrev Number: 7 (DW_TAG_base_type)
-    <140>   DW_AT_name        : (indirect string, offset: 0x106): long unsigned int
-    <144>   DW_AT_encoding    : 7	(unsigned)
-    <145>   DW_AT_byte_size   : 4
- <1><146>: Abbrev Number: 3 (DW_TAG_typedef)
-    <147>   DW_AT_type        : <0x151>
-    <14b>   DW_AT_name        : (indirect string, offset: 0x157): size_t
-    <14f>   DW_AT_decl_file   : 6
-    <150>   DW_AT_decl_line   : 62
- <1><151>: Abbrev Number: 7 (DW_TAG_base_type)
-    <152>   DW_AT_name        : (indirect string, offset: 0x14a): unsigned int
-    <156>   DW_AT_encoding    : 7	(unsigned)
-    <157>   DW_AT_byte_size   : 4
- <1><158>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x122): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15d): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 7
+    <2a>   DW_AT_decl_line   : 34
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x264): struct_mmsghdr
+    <3a>   DW_AT_decl_file   : 7
+    <3b>   DW_AT_decl_line   : 32
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x25c): mmsghdr
+    <41>   DW_AT_byte_size   : 32
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 94
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16e): msg_hdr
+    <49>   DW_AT_type        : <0x61>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 95
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x254): msg_len
+    <57>   DW_AT_type        : <0x152>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 96
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><60>: Abbrev Number: 0
+ <1><61>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <62>   DW_AT_name        : (indirect string, offset: 0x24d): msghdr
+    <66>   DW_AT_byte_size   : 28
+    <67>   DW_AT_decl_file   : 1
+    <68>   DW_AT_decl_line   : 84
+ <2><69>: Abbrev Number: 5 (DW_TAG_member)
+    <6a>   DW_AT_name        : (indirect string, offset: 0x176): msg_name
+    <6e>   DW_AT_type        : <0xcc>
+    <72>   DW_AT_decl_file   : 1
+    <73>   DW_AT_decl_line   : 85
+    <74>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><77>: Abbrev Number: 5 (DW_TAG_member)
+    <78>   DW_AT_name        : (indirect string, offset: 0x17f): msg_namelen
+    <7c>   DW_AT_type        : <0xcd>
+    <80>   DW_AT_decl_file   : 1
+    <81>   DW_AT_decl_line   : 86
+    <82>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><85>: Abbrev Number: 5 (DW_TAG_member)
+    <86>   DW_AT_name        : (indirect string, offset: 0x1b7): msg_iov
+    <8a>   DW_AT_type        : <0x100>
+    <8e>   DW_AT_decl_file   : 1
+    <8f>   DW_AT_decl_line   : 87
+    <90>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><93>: Abbrev Number: 5 (DW_TAG_member)
+    <94>   DW_AT_name        : (indirect string, offset: 0x209): msg_iovlen
+    <98>   DW_AT_type        : <0x147>
+    <9c>   DW_AT_decl_file   : 1
+    <9d>   DW_AT_decl_line   : 88
+    <9e>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><a1>: Abbrev Number: 5 (DW_TAG_member)
+    <a2>   DW_AT_name        : (indirect string, offset: 0x228): msg_control
+    <a6>   DW_AT_type        : <0xcc>
+    <aa>   DW_AT_decl_file   : 1
+    <ab>   DW_AT_decl_line   : 89
+    <ac>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><af>: Abbrev Number: 5 (DW_TAG_member)
+    <b0>   DW_AT_name        : (indirect string, offset: 0x234): msg_controllen
+    <b4>   DW_AT_type        : <0x147>
+    <b8>   DW_AT_decl_file   : 1
+    <b9>   DW_AT_decl_line   : 90
+    <ba>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><bd>: Abbrev Number: 5 (DW_TAG_member)
+    <be>   DW_AT_name        : (indirect string, offset: 0x243): msg_flags
+    <c2>   DW_AT_type        : <0xf9>
+    <c6>   DW_AT_decl_file   : 1
+    <c7>   DW_AT_decl_line   : 91
+    <c8>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><cb>: Abbrev Number: 0
+ <1><cc>: Abbrev Number: 6 (DW_TAG_pointer_type)
+ <1><cd>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ce>   DW_AT_type        : <0xd8>
+    <d2>   DW_AT_name        : (indirect string, offset: 0x1ad): socklen_t
+    <d6>   DW_AT_decl_file   : 3
+    <d7>   DW_AT_decl_line   : 117
+ <1><d8>: Abbrev Number: 3 (DW_TAG_typedef)
+    <d9>   DW_AT_type        : <0xe3>
+    <dd>   DW_AT_name        : (indirect string, offset: 0x1a1): __socklen_t
+    <e1>   DW_AT_decl_file   : 3
+    <e2>   DW_AT_decl_line   : 112
+ <1><e3>: Abbrev Number: 3 (DW_TAG_typedef)
+    <e4>   DW_AT_type        : <0xee>
+    <e8>   DW_AT_name        : (indirect string, offset: 0x199): int32_t
+    <ec>   DW_AT_decl_file   : 2
+    <ed>   DW_AT_decl_line   : 64
+ <1><ee>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ef>   DW_AT_type        : <0xf9>
+    <f3>   DW_AT_name        : (indirect string, offset: 0x18f): __int32_t
+    <f7>   DW_AT_decl_file   : 2
+    <f8>   DW_AT_decl_line   : 40
+ <1><f9>: Abbrev Number: 7 (DW_TAG_base_type)
+    <fa>   DW_AT_name        : (indirect string, offset: 0x18b): int
+    <fe>   DW_AT_encoding    : 5	(signed)
+    <ff>   DW_AT_byte_size   : 4
+ <1><100>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <101>   DW_AT_type        : <0x105>
+ <1><105>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <106>   DW_AT_name        : (indirect string, offset: 0x203): iovec
+    <10a>   DW_AT_byte_size   : 8
+    <10b>   DW_AT_decl_file   : 4
+    <10c>   DW_AT_decl_line   : 23
+ <2><10d>: Abbrev Number: 5 (DW_TAG_member)
+    <10e>   DW_AT_name        : (indirect string, offset: 0x1bf): iov_base
+    <112>   DW_AT_type        : <0xcc>
+    <116>   DW_AT_decl_file   : 4
+    <117>   DW_AT_decl_line   : 24
+    <118>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><11b>: Abbrev Number: 5 (DW_TAG_member)
+    <11c>   DW_AT_name        : (indirect string, offset: 0x1c8): iov_len
+    <120>   DW_AT_type        : <0x12a>
+    <124>   DW_AT_decl_file   : 4
+    <125>   DW_AT_decl_line   : 25
+    <126>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><129>: Abbrev Number: 0
+ <1><12a>: Abbrev Number: 3 (DW_TAG_typedef)
+    <12b>   DW_AT_type        : <0x135>
+    <12f>   DW_AT_name        : (indirect string, offset: 0x1f3): __kernel_size_t
+    <133>   DW_AT_decl_file   : 5
+    <134>   DW_AT_decl_line   : 65
+ <1><135>: Abbrev Number: 3 (DW_TAG_typedef)
+    <136>   DW_AT_type        : <0x140>
+    <13a>   DW_AT_name        : (indirect string, offset: 0x1e2): __kernel_ulong_t
+    <13e>   DW_AT_decl_file   : 5
+    <13f>   DW_AT_decl_line   : 24
+ <1><140>: Abbrev Number: 7 (DW_TAG_base_type)
+    <141>   DW_AT_name        : (indirect string, offset: 0x1d0): long unsigned int
+    <145>   DW_AT_encoding    : 7	(unsigned)
+    <146>   DW_AT_byte_size   : 4
+ <1><147>: Abbrev Number: 3 (DW_TAG_typedef)
+    <148>   DW_AT_type        : <0x152>
+    <14c>   DW_AT_name        : (indirect string, offset: 0x221): size_t
+    <150>   DW_AT_decl_file   : 6
+    <151>   DW_AT_decl_line   : 62
+ <1><152>: Abbrev Number: 7 (DW_TAG_base_type)
+    <153>   DW_AT_name        : (indirect string, offset: 0x214): unsigned int
+    <157>   DW_AT_encoding    : 7	(unsigned)
+    <158>   DW_AT_byte_size   : 4
+ <1><159>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_mmsghdr.d2 b/mpers-m32/struct_mmsghdr.d2
index 3606642..85f3de4 100644
--- a/mpers-m32/struct_mmsghdr.d2
+++ b/mpers-m32/struct_mmsghdr.d2
@@ -1,171 +1,171 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x93): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15d): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 7
 DW_AT_decl_line   : 34
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x19a): struct_mmsghdr
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x264): struct_mmsghdr
 DW_AT_decl_file   : 7
 DW_AT_decl_line   : 32
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x192): mmsghdr
+DW_AT_name        : (indirect string, offset: 0x25c): mmsghdr
 DW_AT_byte_size   : 32
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 96
-<2><43>
+DW_AT_decl_line   : 94
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa4): msg_hdr
-DW_AT_type        : <0x60>
+DW_AT_name        : (indirect string, offset: 0x16e): msg_hdr
+DW_AT_type        : <0x61>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 97
+DW_AT_decl_line   : 95
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x18a): msg_len
-DW_AT_type        : <0x151>
+DW_AT_name        : (indirect string, offset: 0x254): msg_len
+DW_AT_type        : <0x152>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 98
+DW_AT_decl_line   : 96
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<1><60>
+<1><61>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x183): msghdr
+DW_AT_name        : (indirect string, offset: 0x24d): msghdr
 DW_AT_byte_size   : 28
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 86
-<2><68>
+DW_AT_decl_line   : 84
+<2><69>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xac): msg_name
-DW_AT_type        : <0xcb>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 87
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><76>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb5): msg_namelen
+DW_AT_name        : (indirect string, offset: 0x176): msg_name
 DW_AT_type        : <0xcc>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 88
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><84>
+DW_AT_decl_line   : 85
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><77>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xed): msg_iov
-DW_AT_type        : <0xff>
+DW_AT_name        : (indirect string, offset: 0x17f): msg_namelen
+DW_AT_type        : <0xcd>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 86
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><85>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1b7): msg_iov
+DW_AT_type        : <0x100>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 87
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><93>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x209): msg_iovlen
+DW_AT_type        : <0x147>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 88
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><a1>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x228): msg_control
+DW_AT_type        : <0xcc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 89
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><92>
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><af>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13f): msg_iovlen
-DW_AT_type        : <0x146>
+DW_AT_name        : (indirect string, offset: 0x234): msg_controllen
+DW_AT_type        : <0x147>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 90
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><a0>
+DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+<2><bd>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15e): msg_control
-DW_AT_type        : <0xcb>
+DW_AT_name        : (indirect string, offset: 0x243): msg_flags
+DW_AT_type        : <0xf9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 91
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><ae>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x16a): msg_controllen
-DW_AT_type        : <0x146>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 92
-DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><bc>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x179): msg_flags
-DW_AT_type        : <0xf8>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 93
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<1><cb>
-Abbrev Number: 6 (DW_TAG_pointer_type)
 <1><cc>
+Abbrev Number: 6 (DW_TAG_pointer_type)
+<1><cd>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xd7>
-DW_AT_name        : (indirect string, offset: 0xe3): socklen_t
+DW_AT_type        : <0xd8>
+DW_AT_name        : (indirect string, offset: 0x1ad): socklen_t
 DW_AT_decl_file   : 3
-DW_AT_decl_line   : 116
-<1><d7>
+DW_AT_decl_line   : 117
+<1><d8>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xe2>
-DW_AT_name        : (indirect string, offset: 0xd7): __socklen_t
+DW_AT_type        : <0xe3>
+DW_AT_name        : (indirect string, offset: 0x1a1): __socklen_t
 DW_AT_decl_file   : 3
-DW_AT_decl_line   : 111
-<1><e2>
+DW_AT_decl_line   : 112
+<1><e3>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xed>
-DW_AT_name        : (indirect string, offset: 0xcf): int32_t
+DW_AT_type        : <0xee>
+DW_AT_name        : (indirect string, offset: 0x199): int32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 64
-<1><ed>
+<1><ee>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xf8>
-DW_AT_name        : (indirect string, offset: 0xc5): __int32_t
+DW_AT_type        : <0xf9>
+DW_AT_name        : (indirect string, offset: 0x18f): __int32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 40
-<1><f8>
+<1><f9>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc1): int
+DW_AT_name        : (indirect string, offset: 0x18b): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><ff>
+<1><100>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x104>
-<1><104>
+DW_AT_type        : <0x105>
+<1><105>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x139): iovec
+DW_AT_name        : (indirect string, offset: 0x203): iovec
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 23
-<2><10c>
+<2><10d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf5): iov_base
-DW_AT_type        : <0xcb>
+DW_AT_name        : (indirect string, offset: 0x1bf): iov_base
+DW_AT_type        : <0xcc>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><11a>
+<2><11b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfe): iov_len
-DW_AT_type        : <0x129>
+DW_AT_name        : (indirect string, offset: 0x1c8): iov_len
+DW_AT_type        : <0x12a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><129>
+<1><12a>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x134>
-DW_AT_name        : (indirect string, offset: 0x129): __kernel_size_t
+DW_AT_type        : <0x135>
+DW_AT_name        : (indirect string, offset: 0x1f3): __kernel_size_t
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 65
-<1><134>
+<1><135>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x13f>
-DW_AT_name        : (indirect string, offset: 0x118): __kernel_ulong_t
+DW_AT_type        : <0x140>
+DW_AT_name        : (indirect string, offset: 0x1e2): __kernel_ulong_t
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 24
-<1><13f>
+<1><140>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x106): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1d0): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><146>
+<1><147>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x151>
-DW_AT_name        : (indirect string, offset: 0x157): size_t
+DW_AT_type        : <0x152>
+DW_AT_name        : (indirect string, offset: 0x221): size_t
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 62
-<1><151>
+<1><152>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x14a): unsigned int
+DW_AT_name        : (indirect string, offset: 0x214): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_msghdr.d1 b/mpers-m32/struct_msghdr.d1
index 493444f..d2b6ba3 100644
--- a/mpers-m32/struct_msghdr.d1
+++ b/mpers-m32/struct_msghdr.d1
@@ -1,143 +1,144 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x130 (32-bit)
+   Length:        0x131 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_msghdr.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_msghdr.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x57): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 7
-    <29>   DW_AT_decl_line   : 34
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x181): struct_msghdr
-    <39>   DW_AT_decl_file   : 7
-    <3a>   DW_AT_decl_line   : 32
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x17a): msghdr
-    <40>   DW_AT_byte_size   : 28
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 86
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa3): msg_name
-    <48>   DW_AT_type        : <0xa6>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 87
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xac): msg_namelen
-    <56>   DW_AT_type        : <0xa7>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 88
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xe4): msg_iov
-    <64>   DW_AT_type        : <0xda>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 89
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0x136): msg_iovlen
-    <72>   DW_AT_type        : <0x121>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 90
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0x155): msg_control
-    <80>   DW_AT_type        : <0xa6>
-    <84>   DW_AT_decl_file   : 1
-    <85>   DW_AT_decl_line   : 91
-    <86>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x161): msg_controllen
-    <8e>   DW_AT_type        : <0x121>
-    <92>   DW_AT_decl_file   : 1
-    <93>   DW_AT_decl_line   : 92
-    <94>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0x170): msg_flags
-    <9c>   DW_AT_type        : <0xd3>
-    <a0>   DW_AT_decl_file   : 1
-    <a1>   DW_AT_decl_line   : 93
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><a5>: Abbrev Number: 0
- <1><a6>: Abbrev Number: 6 (DW_TAG_pointer_type)
- <1><a7>: Abbrev Number: 3 (DW_TAG_typedef)
-    <a8>   DW_AT_type        : <0xb2>
-    <ac>   DW_AT_name        : (indirect string, offset: 0xda): socklen_t
-    <b0>   DW_AT_decl_file   : 3
-    <b1>   DW_AT_decl_line   : 116
- <1><b2>: Abbrev Number: 3 (DW_TAG_typedef)
-    <b3>   DW_AT_type        : <0xbd>
-    <b7>   DW_AT_name        : (indirect string, offset: 0xce): __socklen_t
-    <bb>   DW_AT_decl_file   : 3
-    <bc>   DW_AT_decl_line   : 111
- <1><bd>: Abbrev Number: 3 (DW_TAG_typedef)
-    <be>   DW_AT_type        : <0xc8>
-    <c2>   DW_AT_name        : (indirect string, offset: 0xc6): int32_t
-    <c6>   DW_AT_decl_file   : 2
-    <c7>   DW_AT_decl_line   : 64
- <1><c8>: Abbrev Number: 3 (DW_TAG_typedef)
-    <c9>   DW_AT_type        : <0xd3>
-    <cd>   DW_AT_name        : (indirect string, offset: 0xbc): __int32_t
-    <d1>   DW_AT_decl_file   : 2
-    <d2>   DW_AT_decl_line   : 40
- <1><d3>: Abbrev Number: 7 (DW_TAG_base_type)
-    <d4>   DW_AT_name        : (indirect string, offset: 0xb8): int
-    <d8>   DW_AT_encoding    : 5	(signed)
-    <d9>   DW_AT_byte_size   : 4
- <1><da>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <db>   DW_AT_type        : <0xdf>
- <1><df>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <e0>   DW_AT_name        : (indirect string, offset: 0x130): iovec
-    <e4>   DW_AT_byte_size   : 8
-    <e5>   DW_AT_decl_file   : 4
-    <e6>   DW_AT_decl_line   : 23
- <2><e7>: Abbrev Number: 5 (DW_TAG_member)
-    <e8>   DW_AT_name        : (indirect string, offset: 0xec): iov_base
-    <ec>   DW_AT_type        : <0xa6>
-    <f0>   DW_AT_decl_file   : 4
-    <f1>   DW_AT_decl_line   : 24
-    <f2>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><f5>: Abbrev Number: 5 (DW_TAG_member)
-    <f6>   DW_AT_name        : (indirect string, offset: 0xf5): iov_len
-    <fa>   DW_AT_type        : <0x104>
-    <fe>   DW_AT_decl_file   : 4
-    <ff>   DW_AT_decl_line   : 25
-    <100>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><103>: Abbrev Number: 0
- <1><104>: Abbrev Number: 3 (DW_TAG_typedef)
-    <105>   DW_AT_type        : <0x10f>
-    <109>   DW_AT_name        : (indirect string, offset: 0x120): __kernel_size_t
-    <10d>   DW_AT_decl_file   : 5
-    <10e>   DW_AT_decl_line   : 65
- <1><10f>: Abbrev Number: 3 (DW_TAG_typedef)
-    <110>   DW_AT_type        : <0x11a>
-    <114>   DW_AT_name        : (indirect string, offset: 0x10f): __kernel_ulong_t
-    <118>   DW_AT_decl_file   : 5
-    <119>   DW_AT_decl_line   : 24
- <1><11a>: Abbrev Number: 7 (DW_TAG_base_type)
-    <11b>   DW_AT_name        : (indirect string, offset: 0xfd): long unsigned int
-    <11f>   DW_AT_encoding    : 7	(unsigned)
-    <120>   DW_AT_byte_size   : 4
- <1><121>: Abbrev Number: 3 (DW_TAG_typedef)
-    <122>   DW_AT_type        : <0x12c>
-    <126>   DW_AT_name        : (indirect string, offset: 0x14e): size_t
-    <12a>   DW_AT_decl_file   : 6
-    <12b>   DW_AT_decl_line   : 62
- <1><12c>: Abbrev Number: 7 (DW_TAG_base_type)
-    <12d>   DW_AT_name        : (indirect string, offset: 0x141): unsigned int
-    <131>   DW_AT_encoding    : 7	(unsigned)
-    <132>   DW_AT_byte_size   : 4
- <1><133>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x121): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 7
+    <2a>   DW_AT_decl_line   : 34
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x24b): struct_msghdr
+    <3a>   DW_AT_decl_file   : 7
+    <3b>   DW_AT_decl_line   : 32
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x244): msghdr
+    <41>   DW_AT_byte_size   : 28
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 84
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16d): msg_name
+    <49>   DW_AT_type        : <0xa7>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 85
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x176): msg_namelen
+    <57>   DW_AT_type        : <0xa8>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 86
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x1ae): msg_iov
+    <65>   DW_AT_type        : <0xdb>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 87
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x200): msg_iovlen
+    <73>   DW_AT_type        : <0x122>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 88
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x21f): msg_control
+    <81>   DW_AT_type        : <0xa7>
+    <85>   DW_AT_decl_file   : 1
+    <86>   DW_AT_decl_line   : 89
+    <87>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x22b): msg_controllen
+    <8f>   DW_AT_type        : <0x122>
+    <93>   DW_AT_decl_file   : 1
+    <94>   DW_AT_decl_line   : 90
+    <95>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x23a): msg_flags
+    <9d>   DW_AT_type        : <0xd4>
+    <a1>   DW_AT_decl_file   : 1
+    <a2>   DW_AT_decl_line   : 91
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><a6>: Abbrev Number: 0
+ <1><a7>: Abbrev Number: 6 (DW_TAG_pointer_type)
+ <1><a8>: Abbrev Number: 3 (DW_TAG_typedef)
+    <a9>   DW_AT_type        : <0xb3>
+    <ad>   DW_AT_name        : (indirect string, offset: 0x1a4): socklen_t
+    <b1>   DW_AT_decl_file   : 3
+    <b2>   DW_AT_decl_line   : 117
+ <1><b3>: Abbrev Number: 3 (DW_TAG_typedef)
+    <b4>   DW_AT_type        : <0xbe>
+    <b8>   DW_AT_name        : (indirect string, offset: 0x198): __socklen_t
+    <bc>   DW_AT_decl_file   : 3
+    <bd>   DW_AT_decl_line   : 112
+ <1><be>: Abbrev Number: 3 (DW_TAG_typedef)
+    <bf>   DW_AT_type        : <0xc9>
+    <c3>   DW_AT_name        : (indirect string, offset: 0x190): int32_t
+    <c7>   DW_AT_decl_file   : 2
+    <c8>   DW_AT_decl_line   : 64
+ <1><c9>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ca>   DW_AT_type        : <0xd4>
+    <ce>   DW_AT_name        : (indirect string, offset: 0x186): __int32_t
+    <d2>   DW_AT_decl_file   : 2
+    <d3>   DW_AT_decl_line   : 40
+ <1><d4>: Abbrev Number: 7 (DW_TAG_base_type)
+    <d5>   DW_AT_name        : (indirect string, offset: 0x182): int
+    <d9>   DW_AT_encoding    : 5	(signed)
+    <da>   DW_AT_byte_size   : 4
+ <1><db>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <dc>   DW_AT_type        : <0xe0>
+ <1><e0>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <e1>   DW_AT_name        : (indirect string, offset: 0x1fa): iovec
+    <e5>   DW_AT_byte_size   : 8
+    <e6>   DW_AT_decl_file   : 4
+    <e7>   DW_AT_decl_line   : 23
+ <2><e8>: Abbrev Number: 5 (DW_TAG_member)
+    <e9>   DW_AT_name        : (indirect string, offset: 0x1b6): iov_base
+    <ed>   DW_AT_type        : <0xa7>
+    <f1>   DW_AT_decl_file   : 4
+    <f2>   DW_AT_decl_line   : 24
+    <f3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><f6>: Abbrev Number: 5 (DW_TAG_member)
+    <f7>   DW_AT_name        : (indirect string, offset: 0x1bf): iov_len
+    <fb>   DW_AT_type        : <0x105>
+    <ff>   DW_AT_decl_file   : 4
+    <100>   DW_AT_decl_line   : 25
+    <101>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><104>: Abbrev Number: 0
+ <1><105>: Abbrev Number: 3 (DW_TAG_typedef)
+    <106>   DW_AT_type        : <0x110>
+    <10a>   DW_AT_name        : (indirect string, offset: 0x1ea): __kernel_size_t
+    <10e>   DW_AT_decl_file   : 5
+    <10f>   DW_AT_decl_line   : 65
+ <1><110>: Abbrev Number: 3 (DW_TAG_typedef)
+    <111>   DW_AT_type        : <0x11b>
+    <115>   DW_AT_name        : (indirect string, offset: 0x1d9): __kernel_ulong_t
+    <119>   DW_AT_decl_file   : 5
+    <11a>   DW_AT_decl_line   : 24
+ <1><11b>: Abbrev Number: 7 (DW_TAG_base_type)
+    <11c>   DW_AT_name        : (indirect string, offset: 0x1c7): long unsigned int
+    <120>   DW_AT_encoding    : 7	(unsigned)
+    <121>   DW_AT_byte_size   : 4
+ <1><122>: Abbrev Number: 3 (DW_TAG_typedef)
+    <123>   DW_AT_type        : <0x12d>
+    <127>   DW_AT_name        : (indirect string, offset: 0x218): size_t
+    <12b>   DW_AT_decl_file   : 6
+    <12c>   DW_AT_decl_line   : 62
+ <1><12d>: Abbrev Number: 7 (DW_TAG_base_type)
+    <12e>   DW_AT_name        : (indirect string, offset: 0x20b): unsigned int
+    <132>   DW_AT_encoding    : 7	(unsigned)
+    <133>   DW_AT_byte_size   : 4
+ <1><134>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_msghdr.d2 b/mpers-m32/struct_msghdr.d2
index b7009ec..4a18839 100644
--- a/mpers-m32/struct_msghdr.d2
+++ b/mpers-m32/struct_msghdr.d2
@@ -1,151 +1,151 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 7
 DW_AT_decl_line   : 34
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x181): struct_msghdr
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x24b): struct_msghdr
 DW_AT_decl_file   : 7
 DW_AT_decl_line   : 32
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x17a): msghdr
+DW_AT_name        : (indirect string, offset: 0x244): msghdr
 DW_AT_byte_size   : 28
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 86
-<2><43>
+DW_AT_decl_line   : 84
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa3): msg_name
-DW_AT_type        : <0xa6>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 87
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xac): msg_namelen
+DW_AT_name        : (indirect string, offset: 0x16d): msg_name
 DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 1
-DW_AT_decl_line   : 88
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+DW_AT_decl_line   : 85
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe4): msg_iov
-DW_AT_type        : <0xda>
+DW_AT_name        : (indirect string, offset: 0x176): msg_namelen
+DW_AT_type        : <0xa8>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 86
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><60>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ae): msg_iov
+DW_AT_type        : <0xdb>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 87
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><6e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x200): msg_iovlen
+DW_AT_type        : <0x122>
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 88
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><7c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x21f): msg_control
+DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 89
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x136): msg_iovlen
-DW_AT_type        : <0x121>
+DW_AT_name        : (indirect string, offset: 0x22b): msg_controllen
+DW_AT_type        : <0x122>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 90
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><7b>
+DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x155): msg_control
-DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x23a): msg_flags
+DW_AT_type        : <0xd4>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 91
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><89>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x161): msg_controllen
-DW_AT_type        : <0x121>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 92
-DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><97>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x170): msg_flags
-DW_AT_type        : <0xd3>
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 93
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<1><a6>
-Abbrev Number: 6 (DW_TAG_pointer_type)
 <1><a7>
+Abbrev Number: 6 (DW_TAG_pointer_type)
+<1><a8>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xb2>
-DW_AT_name        : (indirect string, offset: 0xda): socklen_t
+DW_AT_type        : <0xb3>
+DW_AT_name        : (indirect string, offset: 0x1a4): socklen_t
 DW_AT_decl_file   : 3
-DW_AT_decl_line   : 116
-<1><b2>
+DW_AT_decl_line   : 117
+<1><b3>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xbd>
-DW_AT_name        : (indirect string, offset: 0xce): __socklen_t
+DW_AT_type        : <0xbe>
+DW_AT_name        : (indirect string, offset: 0x198): __socklen_t
 DW_AT_decl_file   : 3
-DW_AT_decl_line   : 111
-<1><bd>
+DW_AT_decl_line   : 112
+<1><be>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xc8>
-DW_AT_name        : (indirect string, offset: 0xc6): int32_t
+DW_AT_type        : <0xc9>
+DW_AT_name        : (indirect string, offset: 0x190): int32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 64
-<1><c8>
+<1><c9>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xd3>
-DW_AT_name        : (indirect string, offset: 0xbc): __int32_t
+DW_AT_type        : <0xd4>
+DW_AT_name        : (indirect string, offset: 0x186): __int32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 40
-<1><d3>
+<1><d4>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb8): int
+DW_AT_name        : (indirect string, offset: 0x182): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><da>
+<1><db>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0xdf>
-<1><df>
+DW_AT_type        : <0xe0>
+<1><e0>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x130): iovec
+DW_AT_name        : (indirect string, offset: 0x1fa): iovec
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 23
-<2><e7>
+<2><e8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xec): iov_base
-DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x1b6): iov_base
+DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><f5>
+<2><f6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf5): iov_len
-DW_AT_type        : <0x104>
+DW_AT_name        : (indirect string, offset: 0x1bf): iov_len
+DW_AT_type        : <0x105>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><104>
+<1><105>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x10f>
-DW_AT_name        : (indirect string, offset: 0x120): __kernel_size_t
+DW_AT_type        : <0x110>
+DW_AT_name        : (indirect string, offset: 0x1ea): __kernel_size_t
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 65
-<1><10f>
+<1><110>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x11a>
-DW_AT_name        : (indirect string, offset: 0x10f): __kernel_ulong_t
+DW_AT_type        : <0x11b>
+DW_AT_name        : (indirect string, offset: 0x1d9): __kernel_ulong_t
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 24
-<1><11a>
+<1><11b>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xfd): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1c7): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><121>
+<1><122>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x12c>
-DW_AT_name        : (indirect string, offset: 0x14e): size_t
+DW_AT_type        : <0x12d>
+DW_AT_name        : (indirect string, offset: 0x218): size_t
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 62
-<1><12c>
+<1><12d>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x141): unsigned int
+DW_AT_name        : (indirect string, offset: 0x20b): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_mtd_oob_buf.d1 b/mpers-m32/struct_mtd_oob_buf.d1
index 4f8fac7..c8ec359 100644
--- a/mpers-m32/struct_mtd_oob_buf.d1
+++ b/mpers-m32/struct_mtd_oob_buf.d1
@@ -1,66 +1,67 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x89 (32-bit)
+   Length:        0x8a (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_mtd_oob_buf.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_mtd_oob_buf.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5c): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 40
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xe6): struct_mtd_oob_buf
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 36
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xda): mtd_oob_buf
-    <40>   DW_AT_byte_size   : 12
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 30
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa8): start
-    <48>   DW_AT_type        : <0x6e>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 31
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xc1): length
-    <56>   DW_AT_type        : <0x6e>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 32
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xc8): ptr
-    <64>   DW_AT_type        : <0x80>
-    <68>   DW_AT_decl_file   : 2
-    <69>   DW_AT_decl_line   : 33
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 0
- <1><6e>: Abbrev Number: 3 (DW_TAG_typedef)
-    <6f>   DW_AT_type        : <0x79>
-    <73>   DW_AT_name        : (indirect string, offset: 0xbb): __u32
-    <77>   DW_AT_decl_file   : 1
-    <78>   DW_AT_decl_line   : 28
- <1><79>: Abbrev Number: 6 (DW_TAG_base_type)
-    <7a>   DW_AT_name        : (indirect string, offset: 0xae): unsigned int
-    <7e>   DW_AT_encoding    : 7	(unsigned)
-    <7f>   DW_AT_byte_size   : 4
- <1><80>: Abbrev Number: 7 (DW_TAG_pointer_type)
-    <81>   DW_AT_type        : <0x85>
- <1><85>: Abbrev Number: 6 (DW_TAG_base_type)
-    <86>   DW_AT_name        : (indirect string, offset: 0xcc): unsigned char
-    <8a>   DW_AT_encoding    : 8	(unsigned char)
-    <8b>   DW_AT_byte_size   : 1
- <1><8c>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x126): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 40
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1b0): struct_mtd_oob_buf
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 36
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1a4): mtd_oob_buf
+    <41>   DW_AT_byte_size   : 12
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 30
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x172): start
+    <49>   DW_AT_type        : <0x6f>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 31
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x18b): length
+    <57>   DW_AT_type        : <0x6f>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 32
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x192): ptr
+    <65>   DW_AT_type        : <0x81>
+    <69>   DW_AT_decl_file   : 2
+    <6a>   DW_AT_decl_line   : 33
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 0
+ <1><6f>: Abbrev Number: 3 (DW_TAG_typedef)
+    <70>   DW_AT_type        : <0x7a>
+    <74>   DW_AT_name        : (indirect string, offset: 0x185): __u32
+    <78>   DW_AT_decl_file   : 1
+    <79>   DW_AT_decl_line   : 28
+ <1><7a>: Abbrev Number: 6 (DW_TAG_base_type)
+    <7b>   DW_AT_name        : (indirect string, offset: 0x178): unsigned int
+    <7f>   DW_AT_encoding    : 7	(unsigned)
+    <80>   DW_AT_byte_size   : 4
+ <1><81>: Abbrev Number: 7 (DW_TAG_pointer_type)
+    <82>   DW_AT_type        : <0x86>
+ <1><86>: Abbrev Number: 6 (DW_TAG_base_type)
+    <87>   DW_AT_name        : (indirect string, offset: 0x196): unsigned char
+    <8b>   DW_AT_encoding    : 8	(unsigned char)
+    <8c>   DW_AT_byte_size   : 1
+ <1><8d>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_mtd_oob_buf.d2 b/mpers-m32/struct_mtd_oob_buf.d2
index cd1b356..0d0c4a4 100644
--- a/mpers-m32/struct_mtd_oob_buf.d2
+++ b/mpers-m32/struct_mtd_oob_buf.d2
@@ -1,60 +1,60 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 40
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xe6): struct_mtd_oob_buf
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1b0): struct_mtd_oob_buf
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 36
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xda): mtd_oob_buf
+DW_AT_name        : (indirect string, offset: 0x1a4): mtd_oob_buf
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 30
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa8): start
-DW_AT_type        : <0x6e>
+DW_AT_name        : (indirect string, offset: 0x172): start
+DW_AT_type        : <0x6f>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc1): length
-DW_AT_type        : <0x6e>
+DW_AT_name        : (indirect string, offset: 0x18b): length
+DW_AT_type        : <0x6f>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc8): ptr
-DW_AT_type        : <0x80>
+DW_AT_name        : (indirect string, offset: 0x192): ptr
+DW_AT_type        : <0x81>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><6e>
+<1><6f>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x79>
-DW_AT_name        : (indirect string, offset: 0xbb): __u32
+DW_AT_type        : <0x7a>
+DW_AT_name        : (indirect string, offset: 0x185): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><79>
+<1><7a>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xae): unsigned int
+DW_AT_name        : (indirect string, offset: 0x178): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><80>
+<1><81>
 Abbrev Number: 7 (DW_TAG_pointer_type)
-DW_AT_type        : <0x85>
-<1><85>
+DW_AT_type        : <0x86>
+<1><86>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xcc): unsigned char
+DW_AT_name        : (indirect string, offset: 0x196): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
diff --git a/mpers-m32/struct_rt_sigframe.d1 b/mpers-m32/struct_rt_sigframe.d1
index 41b38a7..030bf97 100644
--- a/mpers-m32/struct_rt_sigframe.d1
+++ b/mpers-m32/struct_rt_sigframe.d1
@@ -1,657 +1,707 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x55d (32-bit)
+   Length:        0x5b4 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_rt_sigframe.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_rt_sigframe.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5c): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 10
-    <29>   DW_AT_decl_line   : 33
-    <2a>   DW_AT_location    : 5 byte block: 3 10 0 0 0 	(DW_OP_addr: 10)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x3a4): struct_rt_sigframe
-    <39>   DW_AT_decl_file   : 4
-    <3a>   DW_AT_decl_line   : 39
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_byte_size   : 5184
-    <3e>   DW_AT_decl_file   : 4
-    <3f>   DW_AT_decl_line   : 35
- <2><40>: Abbrev Number: 5 (DW_TAG_member)
-    <41>   DW_AT_name        : (indirect string, offset: 0xa8): info
-    <45>   DW_AT_type        : <0x5e>
-    <49>   DW_AT_decl_file   : 4
-    <4a>   DW_AT_decl_line   : 36
-    <4b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><4e>: Abbrev Number: 5 (DW_TAG_member)
-    <4f>   DW_AT_name        : (indirect string, offset: 0x25c): uc
-    <53>   DW_AT_type        : <0x379>
-    <57>   DW_AT_decl_file   : 4
-    <58>   DW_AT_decl_line   : 37
-    <59>   DW_AT_data_member_location: 3 byte block: 23 80 1 	(DW_OP_plus_uconst: 128)
- <2><5d>: Abbrev Number: 0
- <1><5e>: Abbrev Number: 3 (DW_TAG_typedef)
-    <5f>   DW_AT_type        : <0x69>
-    <63>   DW_AT_name        : (indirect string, offset: 0x252): siginfo_t
-    <67>   DW_AT_decl_file   : 1
-    <68>   DW_AT_decl_line   : 100
- <1><69>: Abbrev Number: 6 (DW_TAG_structure_type)
-    <6a>   DW_AT_name        : (indirect string, offset: 0x24a): siginfo
-    <6e>   DW_AT_byte_size   : 124
-    <6f>   DW_AT_decl_file   : 1
-    <70>   DW_AT_decl_line   : 47
- <2><71>: Abbrev Number: 5 (DW_TAG_member)
-    <72>   DW_AT_name        : (indirect string, offset: 0xad): si_signo
-    <76>   DW_AT_type        : <0x2c2>
-    <7a>   DW_AT_decl_file   : 1
-    <7b>   DW_AT_decl_line   : 48
-    <7c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><7f>: Abbrev Number: 5 (DW_TAG_member)
-    <80>   DW_AT_name        : (indirect string, offset: 0xba): si_errno
-    <84>   DW_AT_type        : <0x2c2>
-    <88>   DW_AT_decl_file   : 1
-    <89>   DW_AT_decl_line   : 49
-    <8a>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><8d>: Abbrev Number: 5 (DW_TAG_member)
-    <8e>   DW_AT_name        : (indirect string, offset: 0xc3): si_code
-    <92>   DW_AT_type        : <0x2c2>
-    <96>   DW_AT_decl_file   : 1
-    <97>   DW_AT_decl_line   : 50
-    <98>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><9b>: Abbrev Number: 5 (DW_TAG_member)
-    <9c>   DW_AT_name        : (indirect string, offset: 0xcb): _sifields
-    <a0>   DW_AT_type        : <0xa9>
-    <a4>   DW_AT_decl_file   : 1
-    <a5>   DW_AT_decl_line   : 99
-    <a6>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><a9>: Abbrev Number: 7 (DW_TAG_union_type)
-    <aa>   DW_AT_byte_size   : 112
-    <ab>   DW_AT_decl_file   : 1
-    <ac>   DW_AT_decl_line   : 51
- <3><ad>: Abbrev Number: 5 (DW_TAG_member)
-    <ae>   DW_AT_name        : (indirect string, offset: 0xd5): _pad
-    <b2>   DW_AT_type        : <0x2c9>
-    <b6>   DW_AT_decl_file   : 1
-    <b7>   DW_AT_decl_line   : 52
-    <b8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><bb>: Abbrev Number: 5 (DW_TAG_member)
-    <bc>   DW_AT_name        : (indirect string, offset: 0xe3): _kill
-    <c0>   DW_AT_type        : <0xc9>
-    <c4>   DW_AT_decl_file   : 1
-    <c5>   DW_AT_decl_line   : 56
-    <c6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><c9>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <ca>   DW_AT_byte_size   : 8
-    <cb>   DW_AT_decl_file   : 1
-    <cc>   DW_AT_decl_line   : 53
- <4><cd>: Abbrev Number: 5 (DW_TAG_member)
-    <ce>   DW_AT_name        : (indirect string, offset: 0xe9): _pid
-    <d2>   DW_AT_type        : <0x2dd>
-    <d6>   DW_AT_decl_file   : 1
-    <d7>   DW_AT_decl_line   : 54
-    <d8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><db>: Abbrev Number: 5 (DW_TAG_member)
-    <dc>   DW_AT_name        : (indirect string, offset: 0xfd): _uid
-    <e0>   DW_AT_type        : <0x2e8>
-    <e4>   DW_AT_decl_file   : 1
-    <e5>   DW_AT_decl_line   : 55
-    <e6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><e9>: Abbrev Number: 0
- <3><ea>: Abbrev Number: 5 (DW_TAG_member)
-    <eb>   DW_AT_name        : (indirect string, offset: 0x120): _timer
-    <ef>   DW_AT_type        : <0xf8>
-    <f3>   DW_AT_decl_file   : 1
-    <f4>   DW_AT_decl_line   : 63
-    <f5>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><f8>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <f9>   DW_AT_byte_size   : 16
-    <fa>   DW_AT_decl_file   : 1
-    <fb>   DW_AT_decl_line   : 57
- <4><fc>: Abbrev Number: 5 (DW_TAG_member)
-    <fd>   DW_AT_name        : (indirect string, offset: 0x127): _tid
-    <101>   DW_AT_type        : <0x2fa>
-    <105>   DW_AT_decl_file   : 1
-    <106>   DW_AT_decl_line   : 58
-    <107>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><10a>: Abbrev Number: 5 (DW_TAG_member)
-    <10b>   DW_AT_name        : (indirect string, offset: 0x13d): _overrun
-    <10f>   DW_AT_type        : <0x2c2>
-    <113>   DW_AT_decl_file   : 1
-    <114>   DW_AT_decl_line   : 59
-    <115>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><118>: Abbrev Number: 5 (DW_TAG_member)
-    <119>   DW_AT_name        : (indirect string, offset: 0xd5): _pad
-    <11d>   DW_AT_type        : <0x305>
-    <121>   DW_AT_decl_file   : 1
-    <122>   DW_AT_decl_line   : 60
-    <123>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><126>: Abbrev Number: 5 (DW_TAG_member)
-    <127>   DW_AT_name        : (indirect string, offset: 0x14b): _sigval
-    <12b>   DW_AT_type        : <0x319>
-    <12f>   DW_AT_decl_file   : 1
-    <130>   DW_AT_decl_line   : 61
-    <131>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><134>: Abbrev Number: 5 (DW_TAG_member)
-    <135>   DW_AT_name        : (indirect string, offset: 0x177): _sys_private
-    <139>   DW_AT_type        : <0x2c2>
-    <13d>   DW_AT_decl_file   : 1
-    <13e>   DW_AT_decl_line   : 62
-    <13f>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <4><142>: Abbrev Number: 0
- <3><143>: Abbrev Number: 5 (DW_TAG_member)
-    <144>   DW_AT_name        : (indirect string, offset: 0x184): _rt
-    <148>   DW_AT_type        : <0x151>
-    <14c>   DW_AT_decl_file   : 1
-    <14d>   DW_AT_decl_line   : 68
-    <14e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><151>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <152>   DW_AT_byte_size   : 12
-    <153>   DW_AT_decl_file   : 1
-    <154>   DW_AT_decl_line   : 64
- <4><155>: Abbrev Number: 5 (DW_TAG_member)
-    <156>   DW_AT_name        : (indirect string, offset: 0xe9): _pid
-    <15a>   DW_AT_type        : <0x2dd>
-    <15e>   DW_AT_decl_file   : 1
-    <15f>   DW_AT_decl_line   : 65
-    <160>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><163>: Abbrev Number: 5 (DW_TAG_member)
-    <164>   DW_AT_name        : (indirect string, offset: 0xfd): _uid
-    <168>   DW_AT_type        : <0x2e8>
-    <16c>   DW_AT_decl_file   : 1
-    <16d>   DW_AT_decl_line   : 66
-    <16e>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><171>: Abbrev Number: 5 (DW_TAG_member)
-    <172>   DW_AT_name        : (indirect string, offset: 0x14b): _sigval
-    <176>   DW_AT_type        : <0x319>
-    <17a>   DW_AT_decl_file   : 1
-    <17b>   DW_AT_decl_line   : 67
-    <17c>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><17f>: Abbrev Number: 0
- <3><180>: Abbrev Number: 5 (DW_TAG_member)
-    <181>   DW_AT_name        : (indirect string, offset: 0x188): _sigchld
-    <185>   DW_AT_type        : <0x18e>
-    <189>   DW_AT_decl_file   : 1
-    <18a>   DW_AT_decl_line   : 75
-    <18b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><18e>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <18f>   DW_AT_byte_size   : 20
-    <190>   DW_AT_decl_file   : 1
-    <191>   DW_AT_decl_line   : 69
- <4><192>: Abbrev Number: 5 (DW_TAG_member)
-    <193>   DW_AT_name        : (indirect string, offset: 0xe9): _pid
-    <197>   DW_AT_type        : <0x2dd>
-    <19b>   DW_AT_decl_file   : 1
-    <19c>   DW_AT_decl_line   : 70
-    <19d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><1a0>: Abbrev Number: 5 (DW_TAG_member)
-    <1a1>   DW_AT_name        : (indirect string, offset: 0xfd): _uid
-    <1a5>   DW_AT_type        : <0x2e8>
-    <1a9>   DW_AT_decl_file   : 1
-    <1aa>   DW_AT_decl_line   : 71
-    <1ab>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><1ae>: Abbrev Number: 5 (DW_TAG_member)
-    <1af>   DW_AT_name        : (indirect string, offset: 0x191): _status
-    <1b3>   DW_AT_type        : <0x2c2>
-    <1b7>   DW_AT_decl_file   : 1
-    <1b8>   DW_AT_decl_line   : 72
-    <1b9>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><1bc>: Abbrev Number: 5 (DW_TAG_member)
-    <1bd>   DW_AT_name        : (indirect string, offset: 0x199): _utime
-    <1c1>   DW_AT_type        : <0x34a>
-    <1c5>   DW_AT_decl_file   : 1
-    <1c6>   DW_AT_decl_line   : 73
-    <1c7>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <4><1ca>: Abbrev Number: 5 (DW_TAG_member)
-    <1cb>   DW_AT_name        : (indirect string, offset: 0x1ca): _stime
-    <1cf>   DW_AT_type        : <0x34a>
-    <1d3>   DW_AT_decl_file   : 1
-    <1d4>   DW_AT_decl_line   : 74
-    <1d5>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <4><1d8>: Abbrev Number: 0
- <3><1d9>: Abbrev Number: 5 (DW_TAG_member)
-    <1da>   DW_AT_name        : (indirect string, offset: 0x1d1): _sigfault
-    <1de>   DW_AT_type        : <0x1e7>
-    <1e2>   DW_AT_decl_file   : 1
-    <1e3>   DW_AT_decl_line   : 89
-    <1e4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><1e7>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <1e8>   DW_AT_byte_size   : 16
-    <1e9>   DW_AT_decl_file   : 1
-    <1ea>   DW_AT_decl_line   : 76
- <4><1eb>: Abbrev Number: 5 (DW_TAG_member)
-    <1ec>   DW_AT_name        : (indirect string, offset: 0x1db): _addr
-    <1f0>   DW_AT_type        : <0x349>
-    <1f4>   DW_AT_decl_file   : 1
-    <1f5>   DW_AT_decl_line   : 77
-    <1f6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><1f9>: Abbrev Number: 5 (DW_TAG_member)
-    <1fa>   DW_AT_name        : (indirect string, offset: 0x1e1): _addr_lsb
-    <1fe>   DW_AT_type        : <0x367>
-    <202>   DW_AT_decl_file   : 1
-    <203>   DW_AT_decl_line   : 81
-    <204>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><207>: Abbrev Number: 9 (DW_TAG_member)
-    <208>   DW_AT_type        : <0x211>
-    <20c>   DW_AT_decl_file   : 1
-    <20d>   DW_AT_decl_line   : 82
-    <20e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><211>: Abbrev Number: 7 (DW_TAG_union_type)
-    <212>   DW_AT_byte_size   : 8
-    <213>   DW_AT_decl_file   : 1
-    <214>   DW_AT_decl_line   : 82
- <5><215>: Abbrev Number: 5 (DW_TAG_member)
-    <216>   DW_AT_name        : (indirect string, offset: 0x1f1): _addr_bnd
-    <21a>   DW_AT_type        : <0x223>
-    <21e>   DW_AT_decl_file   : 1
-    <21f>   DW_AT_decl_line   : 86
-    <220>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <5><223>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <224>   DW_AT_byte_size   : 8
-    <225>   DW_AT_decl_file   : 1
-    <226>   DW_AT_decl_line   : 83
- <6><227>: Abbrev Number: 5 (DW_TAG_member)
-    <228>   DW_AT_name        : (indirect string, offset: 0x1fb): _lower
-    <22c>   DW_AT_type        : <0x349>
-    <230>   DW_AT_decl_file   : 1
-    <231>   DW_AT_decl_line   : 84
-    <232>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <6><235>: Abbrev Number: 5 (DW_TAG_member)
-    <236>   DW_AT_name        : (indirect string, offset: 0x202): _upper
-    <23a>   DW_AT_type        : <0x349>
-    <23e>   DW_AT_decl_file   : 1
-    <23f>   DW_AT_decl_line   : 85
-    <240>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <6><243>: Abbrev Number: 0
- <5><244>: Abbrev Number: 5 (DW_TAG_member)
-    <245>   DW_AT_name        : (indirect string, offset: 0x209): _pkey
-    <249>   DW_AT_type        : <0x36e>
-    <24d>   DW_AT_decl_file   : 1
-    <24e>   DW_AT_decl_line   : 87
-    <24f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <5><252>: Abbrev Number: 0
- <4><253>: Abbrev Number: 0
- <3><254>: Abbrev Number: 5 (DW_TAG_member)
-    <255>   DW_AT_name        : (indirect string, offset: 0x215): _sigpoll
-    <259>   DW_AT_type        : <0x262>
-    <25d>   DW_AT_decl_file   : 1
-    <25e>   DW_AT_decl_line   : 93
-    <25f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><262>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <263>   DW_AT_byte_size   : 8
-    <264>   DW_AT_decl_file   : 1
-    <265>   DW_AT_decl_line   : 90
- <4><266>: Abbrev Number: 5 (DW_TAG_member)
-    <267>   DW_AT_name        : (indirect string, offset: 0x21e): _band
-    <26b>   DW_AT_type        : <0x360>
-    <26f>   DW_AT_decl_file   : 1
-    <270>   DW_AT_decl_line   : 91
-    <271>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><274>: Abbrev Number: 5 (DW_TAG_member)
-    <275>   DW_AT_name        : (indirect string, offset: 0x224): _fd
-    <279>   DW_AT_type        : <0x2c2>
-    <27d>   DW_AT_decl_file   : 1
-    <27e>   DW_AT_decl_line   : 92
-    <27f>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><282>: Abbrev Number: 0
- <3><283>: Abbrev Number: 5 (DW_TAG_member)
-    <284>   DW_AT_name        : (indirect string, offset: 0x228): _sigsys
-    <288>   DW_AT_type        : <0x291>
-    <28c>   DW_AT_decl_file   : 1
-    <28d>   DW_AT_decl_line   : 98
-    <28e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><291>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <292>   DW_AT_byte_size   : 12
-    <293>   DW_AT_decl_file   : 1
-    <294>   DW_AT_decl_line   : 94
- <4><295>: Abbrev Number: 5 (DW_TAG_member)
-    <296>   DW_AT_name        : (indirect string, offset: 0x230): _call_addr
-    <29a>   DW_AT_type        : <0x349>
-    <29e>   DW_AT_decl_file   : 1
-    <29f>   DW_AT_decl_line   : 95
-    <2a0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><2a3>: Abbrev Number: 5 (DW_TAG_member)
-    <2a4>   DW_AT_name        : (indirect string, offset: 0x23b): _syscall
-    <2a8>   DW_AT_type        : <0x2c2>
-    <2ac>   DW_AT_decl_file   : 1
-    <2ad>   DW_AT_decl_line   : 96
-    <2ae>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><2b1>: Abbrev Number: 5 (DW_TAG_member)
-    <2b2>   DW_AT_name        : (indirect string, offset: 0x244): _arch
-    <2b6>   DW_AT_type        : <0x2f3>
-    <2ba>   DW_AT_decl_file   : 1
-    <2bb>   DW_AT_decl_line   : 97
-    <2bc>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <4><2bf>: Abbrev Number: 0
- <3><2c0>: Abbrev Number: 0
- <2><2c1>: Abbrev Number: 0
- <1><2c2>: Abbrev Number: 10 (DW_TAG_base_type)
-    <2c3>   DW_AT_name        : (indirect string, offset: 0xb6): int
-    <2c7>   DW_AT_encoding    : 5	(signed)
-    <2c8>   DW_AT_byte_size   : 4
- <1><2c9>: Abbrev Number: 11 (DW_TAG_array_type)
-    <2ca>   DW_AT_type        : <0x2c2>
- <2><2ce>: Abbrev Number: 12 (DW_TAG_subrange_type)
-    <2cf>   DW_AT_type        : <0x2d6>
-    <2d3>   DW_AT_lower_bound : 0
-    <2d4>   DW_AT_count       : 28
- <2><2d5>: Abbrev Number: 0
- <1><2d6>: Abbrev Number: 13 (DW_TAG_base_type)
-    <2d7>   DW_AT_name        : (indirect string, offset: 0xda): sizetype
-    <2db>   DW_AT_byte_size   : 8
-    <2dc>   DW_AT_encoding    : 7	(unsigned)
- <1><2dd>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2de>   DW_AT_type        : <0x2c2>
-    <2e2>   DW_AT_name        : (indirect string, offset: 0xee): __kernel_pid_t
-    <2e6>   DW_AT_decl_file   : 2
-    <2e7>   DW_AT_decl_line   : 33
- <1><2e8>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2e9>   DW_AT_type        : <0x2f3>
-    <2ed>   DW_AT_name        : (indirect string, offset: 0x10f): __kernel_uid32_t
-    <2f1>   DW_AT_decl_file   : 2
-    <2f2>   DW_AT_decl_line   : 49
- <1><2f3>: Abbrev Number: 10 (DW_TAG_base_type)
-    <2f4>   DW_AT_name        : (indirect string, offset: 0x102): unsigned int
-    <2f8>   DW_AT_encoding    : 7	(unsigned)
-    <2f9>   DW_AT_byte_size   : 4
- <1><2fa>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2fb>   DW_AT_type        : <0x2c2>
-    <2ff>   DW_AT_name        : (indirect string, offset: 0x12c): __kernel_timer_t
-    <303>   DW_AT_decl_file   : 2
-    <304>   DW_AT_decl_line   : 79
- <1><305>: Abbrev Number: 11 (DW_TAG_array_type)
-    <306>   DW_AT_type        : <0x312>
- <2><30a>: Abbrev Number: 12 (DW_TAG_subrange_type)
-    <30b>   DW_AT_type        : <0x2d6>
-    <30f>   DW_AT_lower_bound : 0
-    <310>   DW_AT_count       : 0
- <2><311>: Abbrev Number: 0
- <1><312>: Abbrev Number: 10 (DW_TAG_base_type)
-    <313>   DW_AT_name        : (indirect string, offset: 0x146): char
-    <317>   DW_AT_encoding    : 8	(unsigned char)
-    <318>   DW_AT_byte_size   : 1
- <1><319>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31a>   DW_AT_type        : <0x324>
-    <31e>   DW_AT_name        : (indirect string, offset: 0x16e): sigval_t
-    <322>   DW_AT_decl_file   : 1
-    <323>   DW_AT_decl_line   : 26
- <1><324>: Abbrev Number: 14 (DW_TAG_union_type)
-    <325>   DW_AT_name        : (indirect string, offset: 0x167): sigval
-    <329>   DW_AT_byte_size   : 4
-    <32a>   DW_AT_decl_file   : 1
-    <32b>   DW_AT_decl_line   : 23
- <2><32c>: Abbrev Number: 5 (DW_TAG_member)
-    <32d>   DW_AT_name        : (indirect string, offset: 0x153): sival_int
-    <331>   DW_AT_type        : <0x2c2>
-    <335>   DW_AT_decl_file   : 1
-    <336>   DW_AT_decl_line   : 24
-    <337>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><33a>: Abbrev Number: 5 (DW_TAG_member)
-    <33b>   DW_AT_name        : (indirect string, offset: 0x15d): sival_ptr
-    <33f>   DW_AT_type        : <0x349>
-    <343>   DW_AT_decl_file   : 1
-    <344>   DW_AT_decl_line   : 25
-    <345>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><348>: Abbrev Number: 0
- <1><349>: Abbrev Number: 15 (DW_TAG_pointer_type)
- <1><34a>: Abbrev Number: 3 (DW_TAG_typedef)
-    <34b>   DW_AT_type        : <0x355>
-    <34f>   DW_AT_name        : (indirect string, offset: 0x1b9): __kernel_clock_t
-    <353>   DW_AT_decl_file   : 2
-    <354>   DW_AT_decl_line   : 78
- <1><355>: Abbrev Number: 3 (DW_TAG_typedef)
-    <356>   DW_AT_type        : <0x360>
-    <35a>   DW_AT_name        : (indirect string, offset: 0x1a9): __kernel_long_t
-    <35e>   DW_AT_decl_file   : 2
-    <35f>   DW_AT_decl_line   : 23
- <1><360>: Abbrev Number: 10 (DW_TAG_base_type)
-    <361>   DW_AT_name        : (indirect string, offset: 0x1a0): long int
-    <365>   DW_AT_encoding    : 5	(signed)
-    <366>   DW_AT_byte_size   : 4
- <1><367>: Abbrev Number: 10 (DW_TAG_base_type)
-    <368>   DW_AT_name        : (indirect string, offset: 0x1eb): short
-    <36c>   DW_AT_encoding    : 5	(signed)
-    <36d>   DW_AT_byte_size   : 2
- <1><36e>: Abbrev Number: 3 (DW_TAG_typedef)
-    <36f>   DW_AT_type        : <0x2f3>
-    <373>   DW_AT_name        : (indirect string, offset: 0x20f): __u32
-    <377>   DW_AT_decl_file   : 3
-    <378>   DW_AT_decl_line   : 28
- <1><379>: Abbrev Number: 3 (DW_TAG_typedef)
-    <37a>   DW_AT_type        : <0x384>
-    <37e>   DW_AT_name        : (indirect string, offset: 0x399): ucontext_t
-    <382>   DW_AT_decl_file   : 5
-    <383>   DW_AT_decl_line   : 96
- <1><384>: Abbrev Number: 16 (DW_TAG_structure_type)
-    <385>   DW_AT_name        : (indirect string, offset: 0x390): ucontext
-    <389>   DW_AT_byte_size   : 5056
-    <38b>   DW_AT_decl_file   : 5
-    <38c>   DW_AT_decl_line   : 85
- <2><38d>: Abbrev Number: 5 (DW_TAG_member)
-    <38e>   DW_AT_name        : (indirect string, offset: 0x25f): uc_flags
-    <392>   DW_AT_type        : <0x403>
-    <396>   DW_AT_decl_file   : 5
-    <397>   DW_AT_decl_line   : 86
-    <398>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><39b>: Abbrev Number: 5 (DW_TAG_member)
-    <39c>   DW_AT_name        : (indirect string, offset: 0x27a): uc_link
-    <3a0>   DW_AT_type        : <0x40a>
-    <3a4>   DW_AT_decl_file   : 5
-    <3a5>   DW_AT_decl_line   : 87
-    <3a6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><3a9>: Abbrev Number: 5 (DW_TAG_member)
-    <3aa>   DW_AT_name        : (indirect string, offset: 0x282): uc_stack
-    <3ae>   DW_AT_type        : <0x40f>
-    <3b2>   DW_AT_decl_file   : 5
-    <3b3>   DW_AT_decl_line   : 88
-    <3b4>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><3b7>: Abbrev Number: 5 (DW_TAG_member)
-    <3b8>   DW_AT_name        : (indirect string, offset: 0x2bd): uc_mcontext
-    <3bc>   DW_AT_type        : <0x458>
-    <3c0>   DW_AT_decl_file   : 5
-    <3c1>   DW_AT_decl_line   : 89
-    <3c2>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><3c5>: Abbrev Number: 5 (DW_TAG_member)
-    <3c6>   DW_AT_name        : (indirect string, offset: 0x33a): uc_sigmask
-    <3ca>   DW_AT_type        : <0x505>
-    <3ce>   DW_AT_decl_file   : 5
-    <3cf>   DW_AT_decl_line   : 90
-    <3d0>   DW_AT_data_member_location: 3 byte block: 23 c0 22 	(DW_OP_plus_uconst: 4416)
- <2><3d4>: Abbrev Number: 5 (DW_TAG_member)
-    <3d5>   DW_AT_name        : (indirect string, offset: 0x352): __padding_rt_sigset
-    <3d9>   DW_AT_type        : <0x530>
-    <3dd>   DW_AT_decl_file   : 5
-    <3de>   DW_AT_decl_line   : 92
-    <3df>   DW_AT_data_member_location: 3 byte block: 23 c4 22 	(DW_OP_plus_uconst: 4420)
- <2><3e3>: Abbrev Number: 5 (DW_TAG_member)
-    <3e4>   DW_AT_name        : (indirect string, offset: 0x37a): __padding
-    <3e8>   DW_AT_type        : <0x546>
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x126): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 11
+    <2a>   DW_AT_decl_line   : 33
+    <2b>   DW_AT_location    : 5 byte block: 3 10 0 0 0 	(DW_OP_addr: 10)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x48d): struct_rt_sigframe
+    <3a>   DW_AT_decl_file   : 4
+    <3b>   DW_AT_decl_line   : 39
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_byte_size   : 5184
+    <3f>   DW_AT_decl_file   : 4
+    <40>   DW_AT_decl_line   : 35
+ <2><41>: Abbrev Number: 5 (DW_TAG_member)
+    <42>   DW_AT_name        : (indirect string, offset: 0x172): info
+    <46>   DW_AT_type        : <0x5f>
+    <4a>   DW_AT_decl_file   : 4
+    <4b>   DW_AT_decl_line   : 36
+    <4c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><4f>: Abbrev Number: 5 (DW_TAG_member)
+    <50>   DW_AT_name        : (indirect string, offset: 0x326): uc
+    <54>   DW_AT_type        : <0x37a>
+    <58>   DW_AT_decl_file   : 4
+    <59>   DW_AT_decl_line   : 37
+    <5a>   DW_AT_data_member_location: 3 byte block: 23 80 1 	(DW_OP_plus_uconst: 128)
+ <2><5e>: Abbrev Number: 0
+ <1><5f>: Abbrev Number: 3 (DW_TAG_typedef)
+    <60>   DW_AT_type        : <0x6a>
+    <64>   DW_AT_name        : (indirect string, offset: 0x31c): siginfo_t
+    <68>   DW_AT_decl_file   : 1
+    <69>   DW_AT_decl_line   : 100
+ <1><6a>: Abbrev Number: 6 (DW_TAG_structure_type)
+    <6b>   DW_AT_name        : (indirect string, offset: 0x314): siginfo
+    <6f>   DW_AT_byte_size   : 124
+    <70>   DW_AT_decl_file   : 1
+    <71>   DW_AT_decl_line   : 47
+ <2><72>: Abbrev Number: 5 (DW_TAG_member)
+    <73>   DW_AT_name        : (indirect string, offset: 0x177): si_signo
+    <77>   DW_AT_type        : <0x2c3>
+    <7b>   DW_AT_decl_file   : 1
+    <7c>   DW_AT_decl_line   : 48
+    <7d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><80>: Abbrev Number: 5 (DW_TAG_member)
+    <81>   DW_AT_name        : (indirect string, offset: 0x184): si_errno
+    <85>   DW_AT_type        : <0x2c3>
+    <89>   DW_AT_decl_file   : 1
+    <8a>   DW_AT_decl_line   : 49
+    <8b>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><8e>: Abbrev Number: 5 (DW_TAG_member)
+    <8f>   DW_AT_name        : (indirect string, offset: 0x18d): si_code
+    <93>   DW_AT_type        : <0x2c3>
+    <97>   DW_AT_decl_file   : 1
+    <98>   DW_AT_decl_line   : 50
+    <99>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><9c>: Abbrev Number: 5 (DW_TAG_member)
+    <9d>   DW_AT_name        : (indirect string, offset: 0x195): _sifields
+    <a1>   DW_AT_type        : <0xaa>
+    <a5>   DW_AT_decl_file   : 1
+    <a6>   DW_AT_decl_line   : 99
+    <a7>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><aa>: Abbrev Number: 7 (DW_TAG_union_type)
+    <ab>   DW_AT_byte_size   : 112
+    <ac>   DW_AT_decl_file   : 1
+    <ad>   DW_AT_decl_line   : 51
+ <3><ae>: Abbrev Number: 5 (DW_TAG_member)
+    <af>   DW_AT_name        : (indirect string, offset: 0x19f): _pad
+    <b3>   DW_AT_type        : <0x2ca>
+    <b7>   DW_AT_decl_file   : 1
+    <b8>   DW_AT_decl_line   : 52
+    <b9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><bc>: Abbrev Number: 5 (DW_TAG_member)
+    <bd>   DW_AT_name        : (indirect string, offset: 0x1ad): _kill
+    <c1>   DW_AT_type        : <0xca>
+    <c5>   DW_AT_decl_file   : 1
+    <c6>   DW_AT_decl_line   : 56
+    <c7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><ca>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <cb>   DW_AT_byte_size   : 8
+    <cc>   DW_AT_decl_file   : 1
+    <cd>   DW_AT_decl_line   : 53
+ <4><ce>: Abbrev Number: 5 (DW_TAG_member)
+    <cf>   DW_AT_name        : (indirect string, offset: 0x1b3): _pid
+    <d3>   DW_AT_type        : <0x2de>
+    <d7>   DW_AT_decl_file   : 1
+    <d8>   DW_AT_decl_line   : 54
+    <d9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><dc>: Abbrev Number: 5 (DW_TAG_member)
+    <dd>   DW_AT_name        : (indirect string, offset: 0x1c7): _uid
+    <e1>   DW_AT_type        : <0x2e9>
+    <e5>   DW_AT_decl_file   : 1
+    <e6>   DW_AT_decl_line   : 55
+    <e7>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><ea>: Abbrev Number: 0
+ <3><eb>: Abbrev Number: 5 (DW_TAG_member)
+    <ec>   DW_AT_name        : (indirect string, offset: 0x1ea): _timer
+    <f0>   DW_AT_type        : <0xf9>
+    <f4>   DW_AT_decl_file   : 1
+    <f5>   DW_AT_decl_line   : 63
+    <f6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><f9>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <fa>   DW_AT_byte_size   : 16
+    <fb>   DW_AT_decl_file   : 1
+    <fc>   DW_AT_decl_line   : 57
+ <4><fd>: Abbrev Number: 5 (DW_TAG_member)
+    <fe>   DW_AT_name        : (indirect string, offset: 0x1f1): _tid
+    <102>   DW_AT_type        : <0x2fb>
+    <106>   DW_AT_decl_file   : 1
+    <107>   DW_AT_decl_line   : 58
+    <108>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><10b>: Abbrev Number: 5 (DW_TAG_member)
+    <10c>   DW_AT_name        : (indirect string, offset: 0x207): _overrun
+    <110>   DW_AT_type        : <0x2c3>
+    <114>   DW_AT_decl_file   : 1
+    <115>   DW_AT_decl_line   : 59
+    <116>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><119>: Abbrev Number: 5 (DW_TAG_member)
+    <11a>   DW_AT_name        : (indirect string, offset: 0x19f): _pad
+    <11e>   DW_AT_type        : <0x306>
+    <122>   DW_AT_decl_file   : 1
+    <123>   DW_AT_decl_line   : 60
+    <124>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><127>: Abbrev Number: 5 (DW_TAG_member)
+    <128>   DW_AT_name        : (indirect string, offset: 0x215): _sigval
+    <12c>   DW_AT_type        : <0x31a>
+    <130>   DW_AT_decl_file   : 1
+    <131>   DW_AT_decl_line   : 61
+    <132>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><135>: Abbrev Number: 5 (DW_TAG_member)
+    <136>   DW_AT_name        : (indirect string, offset: 0x241): _sys_private
+    <13a>   DW_AT_type        : <0x2c3>
+    <13e>   DW_AT_decl_file   : 1
+    <13f>   DW_AT_decl_line   : 62
+    <140>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <4><143>: Abbrev Number: 0
+ <3><144>: Abbrev Number: 5 (DW_TAG_member)
+    <145>   DW_AT_name        : (indirect string, offset: 0x24e): _rt
+    <149>   DW_AT_type        : <0x152>
+    <14d>   DW_AT_decl_file   : 1
+    <14e>   DW_AT_decl_line   : 68
+    <14f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><152>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <153>   DW_AT_byte_size   : 12
+    <154>   DW_AT_decl_file   : 1
+    <155>   DW_AT_decl_line   : 64
+ <4><156>: Abbrev Number: 5 (DW_TAG_member)
+    <157>   DW_AT_name        : (indirect string, offset: 0x1b3): _pid
+    <15b>   DW_AT_type        : <0x2de>
+    <15f>   DW_AT_decl_file   : 1
+    <160>   DW_AT_decl_line   : 65
+    <161>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><164>: Abbrev Number: 5 (DW_TAG_member)
+    <165>   DW_AT_name        : (indirect string, offset: 0x1c7): _uid
+    <169>   DW_AT_type        : <0x2e9>
+    <16d>   DW_AT_decl_file   : 1
+    <16e>   DW_AT_decl_line   : 66
+    <16f>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><172>: Abbrev Number: 5 (DW_TAG_member)
+    <173>   DW_AT_name        : (indirect string, offset: 0x215): _sigval
+    <177>   DW_AT_type        : <0x31a>
+    <17b>   DW_AT_decl_file   : 1
+    <17c>   DW_AT_decl_line   : 67
+    <17d>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><180>: Abbrev Number: 0
+ <3><181>: Abbrev Number: 5 (DW_TAG_member)
+    <182>   DW_AT_name        : (indirect string, offset: 0x252): _sigchld
+    <186>   DW_AT_type        : <0x18f>
+    <18a>   DW_AT_decl_file   : 1
+    <18b>   DW_AT_decl_line   : 75
+    <18c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><18f>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <190>   DW_AT_byte_size   : 20
+    <191>   DW_AT_decl_file   : 1
+    <192>   DW_AT_decl_line   : 69
+ <4><193>: Abbrev Number: 5 (DW_TAG_member)
+    <194>   DW_AT_name        : (indirect string, offset: 0x1b3): _pid
+    <198>   DW_AT_type        : <0x2de>
+    <19c>   DW_AT_decl_file   : 1
+    <19d>   DW_AT_decl_line   : 70
+    <19e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><1a1>: Abbrev Number: 5 (DW_TAG_member)
+    <1a2>   DW_AT_name        : (indirect string, offset: 0x1c7): _uid
+    <1a6>   DW_AT_type        : <0x2e9>
+    <1aa>   DW_AT_decl_file   : 1
+    <1ab>   DW_AT_decl_line   : 71
+    <1ac>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><1af>: Abbrev Number: 5 (DW_TAG_member)
+    <1b0>   DW_AT_name        : (indirect string, offset: 0x25b): _status
+    <1b4>   DW_AT_type        : <0x2c3>
+    <1b8>   DW_AT_decl_file   : 1
+    <1b9>   DW_AT_decl_line   : 72
+    <1ba>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><1bd>: Abbrev Number: 5 (DW_TAG_member)
+    <1be>   DW_AT_name        : (indirect string, offset: 0x263): _utime
+    <1c2>   DW_AT_type        : <0x34b>
+    <1c6>   DW_AT_decl_file   : 1
+    <1c7>   DW_AT_decl_line   : 73
+    <1c8>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <4><1cb>: Abbrev Number: 5 (DW_TAG_member)
+    <1cc>   DW_AT_name        : (indirect string, offset: 0x294): _stime
+    <1d0>   DW_AT_type        : <0x34b>
+    <1d4>   DW_AT_decl_file   : 1
+    <1d5>   DW_AT_decl_line   : 74
+    <1d6>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <4><1d9>: Abbrev Number: 0
+ <3><1da>: Abbrev Number: 5 (DW_TAG_member)
+    <1db>   DW_AT_name        : (indirect string, offset: 0x29b): _sigfault
+    <1df>   DW_AT_type        : <0x1e8>
+    <1e3>   DW_AT_decl_file   : 1
+    <1e4>   DW_AT_decl_line   : 89
+    <1e5>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><1e8>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <1e9>   DW_AT_byte_size   : 16
+    <1ea>   DW_AT_decl_file   : 1
+    <1eb>   DW_AT_decl_line   : 76
+ <4><1ec>: Abbrev Number: 5 (DW_TAG_member)
+    <1ed>   DW_AT_name        : (indirect string, offset: 0x2a5): _addr
+    <1f1>   DW_AT_type        : <0x34a>
+    <1f5>   DW_AT_decl_file   : 1
+    <1f6>   DW_AT_decl_line   : 77
+    <1f7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><1fa>: Abbrev Number: 5 (DW_TAG_member)
+    <1fb>   DW_AT_name        : (indirect string, offset: 0x2ab): _addr_lsb
+    <1ff>   DW_AT_type        : <0x368>
+    <203>   DW_AT_decl_file   : 1
+    <204>   DW_AT_decl_line   : 81
+    <205>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><208>: Abbrev Number: 9 (DW_TAG_member)
+    <209>   DW_AT_type        : <0x212>
+    <20d>   DW_AT_decl_file   : 1
+    <20e>   DW_AT_decl_line   : 82
+    <20f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><212>: Abbrev Number: 7 (DW_TAG_union_type)
+    <213>   DW_AT_byte_size   : 8
+    <214>   DW_AT_decl_file   : 1
+    <215>   DW_AT_decl_line   : 82
+ <5><216>: Abbrev Number: 5 (DW_TAG_member)
+    <217>   DW_AT_name        : (indirect string, offset: 0x2bb): _addr_bnd
+    <21b>   DW_AT_type        : <0x224>
+    <21f>   DW_AT_decl_file   : 1
+    <220>   DW_AT_decl_line   : 86
+    <221>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <5><224>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <225>   DW_AT_byte_size   : 8
+    <226>   DW_AT_decl_file   : 1
+    <227>   DW_AT_decl_line   : 83
+ <6><228>: Abbrev Number: 5 (DW_TAG_member)
+    <229>   DW_AT_name        : (indirect string, offset: 0x2c5): _lower
+    <22d>   DW_AT_type        : <0x34a>
+    <231>   DW_AT_decl_file   : 1
+    <232>   DW_AT_decl_line   : 84
+    <233>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <6><236>: Abbrev Number: 5 (DW_TAG_member)
+    <237>   DW_AT_name        : (indirect string, offset: 0x2cc): _upper
+    <23b>   DW_AT_type        : <0x34a>
+    <23f>   DW_AT_decl_file   : 1
+    <240>   DW_AT_decl_line   : 85
+    <241>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <6><244>: Abbrev Number: 0
+ <5><245>: Abbrev Number: 5 (DW_TAG_member)
+    <246>   DW_AT_name        : (indirect string, offset: 0x2d3): _pkey
+    <24a>   DW_AT_type        : <0x36f>
+    <24e>   DW_AT_decl_file   : 1
+    <24f>   DW_AT_decl_line   : 87
+    <250>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <5><253>: Abbrev Number: 0
+ <4><254>: Abbrev Number: 0
+ <3><255>: Abbrev Number: 5 (DW_TAG_member)
+    <256>   DW_AT_name        : (indirect string, offset: 0x2df): _sigpoll
+    <25a>   DW_AT_type        : <0x263>
+    <25e>   DW_AT_decl_file   : 1
+    <25f>   DW_AT_decl_line   : 93
+    <260>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><263>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <264>   DW_AT_byte_size   : 8
+    <265>   DW_AT_decl_file   : 1
+    <266>   DW_AT_decl_line   : 90
+ <4><267>: Abbrev Number: 5 (DW_TAG_member)
+    <268>   DW_AT_name        : (indirect string, offset: 0x2e8): _band
+    <26c>   DW_AT_type        : <0x361>
+    <270>   DW_AT_decl_file   : 1
+    <271>   DW_AT_decl_line   : 91
+    <272>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><275>: Abbrev Number: 5 (DW_TAG_member)
+    <276>   DW_AT_name        : (indirect string, offset: 0x2ee): _fd
+    <27a>   DW_AT_type        : <0x2c3>
+    <27e>   DW_AT_decl_file   : 1
+    <27f>   DW_AT_decl_line   : 92
+    <280>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><283>: Abbrev Number: 0
+ <3><284>: Abbrev Number: 5 (DW_TAG_member)
+    <285>   DW_AT_name        : (indirect string, offset: 0x2f2): _sigsys
+    <289>   DW_AT_type        : <0x292>
+    <28d>   DW_AT_decl_file   : 1
+    <28e>   DW_AT_decl_line   : 98
+    <28f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><292>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <293>   DW_AT_byte_size   : 12
+    <294>   DW_AT_decl_file   : 1
+    <295>   DW_AT_decl_line   : 94
+ <4><296>: Abbrev Number: 5 (DW_TAG_member)
+    <297>   DW_AT_name        : (indirect string, offset: 0x2fa): _call_addr
+    <29b>   DW_AT_type        : <0x34a>
+    <29f>   DW_AT_decl_file   : 1
+    <2a0>   DW_AT_decl_line   : 95
+    <2a1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><2a4>: Abbrev Number: 5 (DW_TAG_member)
+    <2a5>   DW_AT_name        : (indirect string, offset: 0x305): _syscall
+    <2a9>   DW_AT_type        : <0x2c3>
+    <2ad>   DW_AT_decl_file   : 1
+    <2ae>   DW_AT_decl_line   : 96
+    <2af>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><2b2>: Abbrev Number: 5 (DW_TAG_member)
+    <2b3>   DW_AT_name        : (indirect string, offset: 0x30e): _arch
+    <2b7>   DW_AT_type        : <0x2f4>
+    <2bb>   DW_AT_decl_file   : 1
+    <2bc>   DW_AT_decl_line   : 97
+    <2bd>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <4><2c0>: Abbrev Number: 0
+ <3><2c1>: Abbrev Number: 0
+ <2><2c2>: Abbrev Number: 0
+ <1><2c3>: Abbrev Number: 10 (DW_TAG_base_type)
+    <2c4>   DW_AT_name        : (indirect string, offset: 0x180): int
+    <2c8>   DW_AT_encoding    : 5	(signed)
+    <2c9>   DW_AT_byte_size   : 4
+ <1><2ca>: Abbrev Number: 11 (DW_TAG_array_type)
+    <2cb>   DW_AT_type        : <0x2c3>
+ <2><2cf>: Abbrev Number: 12 (DW_TAG_subrange_type)
+    <2d0>   DW_AT_type        : <0x2d7>
+    <2d4>   DW_AT_lower_bound : 0
+    <2d5>   DW_AT_count       : 28
+ <2><2d6>: Abbrev Number: 0
+ <1><2d7>: Abbrev Number: 13 (DW_TAG_base_type)
+    <2d8>   DW_AT_name        : (indirect string, offset: 0x1a4): sizetype
+    <2dc>   DW_AT_byte_size   : 8
+    <2dd>   DW_AT_encoding    : 7	(unsigned)
+ <1><2de>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2df>   DW_AT_type        : <0x2c3>
+    <2e3>   DW_AT_name        : (indirect string, offset: 0x1b8): __kernel_pid_t
+    <2e7>   DW_AT_decl_file   : 2
+    <2e8>   DW_AT_decl_line   : 33
+ <1><2e9>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2ea>   DW_AT_type        : <0x2f4>
+    <2ee>   DW_AT_name        : (indirect string, offset: 0x1d9): __kernel_uid32_t
+    <2f2>   DW_AT_decl_file   : 2
+    <2f3>   DW_AT_decl_line   : 49
+ <1><2f4>: Abbrev Number: 10 (DW_TAG_base_type)
+    <2f5>   DW_AT_name        : (indirect string, offset: 0x1cc): unsigned int
+    <2f9>   DW_AT_encoding    : 7	(unsigned)
+    <2fa>   DW_AT_byte_size   : 4
+ <1><2fb>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2fc>   DW_AT_type        : <0x2c3>
+    <300>   DW_AT_name        : (indirect string, offset: 0x1f6): __kernel_timer_t
+    <304>   DW_AT_decl_file   : 2
+    <305>   DW_AT_decl_line   : 79
+ <1><306>: Abbrev Number: 11 (DW_TAG_array_type)
+    <307>   DW_AT_type        : <0x313>
+ <2><30b>: Abbrev Number: 12 (DW_TAG_subrange_type)
+    <30c>   DW_AT_type        : <0x2d7>
+    <310>   DW_AT_lower_bound : 0
+    <311>   DW_AT_count       : 0
+ <2><312>: Abbrev Number: 0
+ <1><313>: Abbrev Number: 10 (DW_TAG_base_type)
+    <314>   DW_AT_name        : (indirect string, offset: 0x210): char
+    <318>   DW_AT_encoding    : 8	(unsigned char)
+    <319>   DW_AT_byte_size   : 1
+ <1><31a>: Abbrev Number: 3 (DW_TAG_typedef)
+    <31b>   DW_AT_type        : <0x325>
+    <31f>   DW_AT_name        : (indirect string, offset: 0x238): sigval_t
+    <323>   DW_AT_decl_file   : 1
+    <324>   DW_AT_decl_line   : 26
+ <1><325>: Abbrev Number: 14 (DW_TAG_union_type)
+    <326>   DW_AT_name        : (indirect string, offset: 0x231): sigval
+    <32a>   DW_AT_byte_size   : 4
+    <32b>   DW_AT_decl_file   : 1
+    <32c>   DW_AT_decl_line   : 23
+ <2><32d>: Abbrev Number: 5 (DW_TAG_member)
+    <32e>   DW_AT_name        : (indirect string, offset: 0x21d): sival_int
+    <332>   DW_AT_type        : <0x2c3>
+    <336>   DW_AT_decl_file   : 1
+    <337>   DW_AT_decl_line   : 24
+    <338>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><33b>: Abbrev Number: 5 (DW_TAG_member)
+    <33c>   DW_AT_name        : (indirect string, offset: 0x227): sival_ptr
+    <340>   DW_AT_type        : <0x34a>
+    <344>   DW_AT_decl_file   : 1
+    <345>   DW_AT_decl_line   : 25
+    <346>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><349>: Abbrev Number: 0
+ <1><34a>: Abbrev Number: 15 (DW_TAG_pointer_type)
+ <1><34b>: Abbrev Number: 3 (DW_TAG_typedef)
+    <34c>   DW_AT_type        : <0x356>
+    <350>   DW_AT_name        : (indirect string, offset: 0x283): __kernel_clock_t
+    <354>   DW_AT_decl_file   : 2
+    <355>   DW_AT_decl_line   : 78
+ <1><356>: Abbrev Number: 3 (DW_TAG_typedef)
+    <357>   DW_AT_type        : <0x361>
+    <35b>   DW_AT_name        : (indirect string, offset: 0x273): __kernel_long_t
+    <35f>   DW_AT_decl_file   : 2
+    <360>   DW_AT_decl_line   : 23
+ <1><361>: Abbrev Number: 10 (DW_TAG_base_type)
+    <362>   DW_AT_name        : (indirect string, offset: 0x26a): long int
+    <366>   DW_AT_encoding    : 5	(signed)
+    <367>   DW_AT_byte_size   : 4
+ <1><368>: Abbrev Number: 10 (DW_TAG_base_type)
+    <369>   DW_AT_name        : (indirect string, offset: 0x2b5): short
+    <36d>   DW_AT_encoding    : 5	(signed)
+    <36e>   DW_AT_byte_size   : 2
+ <1><36f>: Abbrev Number: 3 (DW_TAG_typedef)
+    <370>   DW_AT_type        : <0x2f4>
+    <374>   DW_AT_name        : (indirect string, offset: 0x2d9): __u32
+    <378>   DW_AT_decl_file   : 3
+    <379>   DW_AT_decl_line   : 28
+ <1><37a>: Abbrev Number: 3 (DW_TAG_typedef)
+    <37b>   DW_AT_type        : <0x385>
+    <37f>   DW_AT_name        : (indirect string, offset: 0x482): ucontext_t
+    <383>   DW_AT_decl_file   : 5
+    <384>   DW_AT_decl_line   : 101
+ <1><385>: Abbrev Number: 16 (DW_TAG_structure_type)
+    <386>   DW_AT_name        : (indirect string, offset: 0x479): ucontext
+    <38a>   DW_AT_byte_size   : 5056
+    <38c>   DW_AT_decl_file   : 5
+    <38d>   DW_AT_decl_line   : 85
+ <2><38e>: Abbrev Number: 5 (DW_TAG_member)
+    <38f>   DW_AT_name        : (indirect string, offset: 0x329): uc_flags
+    <393>   DW_AT_type        : <0x42f>
+    <397>   DW_AT_decl_file   : 5
+    <398>   DW_AT_decl_line   : 86
+    <399>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><39c>: Abbrev Number: 5 (DW_TAG_member)
+    <39d>   DW_AT_name        : (indirect string, offset: 0x344): uc_link
+    <3a1>   DW_AT_type        : <0x436>
+    <3a5>   DW_AT_decl_file   : 5
+    <3a6>   DW_AT_decl_line   : 87
+    <3a7>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><3aa>: Abbrev Number: 5 (DW_TAG_member)
+    <3ab>   DW_AT_name        : (indirect string, offset: 0x34c): uc_stack
+    <3af>   DW_AT_type        : <0x43b>
+    <3b3>   DW_AT_decl_file   : 5
+    <3b4>   DW_AT_decl_line   : 88
+    <3b5>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><3b8>: Abbrev Number: 5 (DW_TAG_member)
+    <3b9>   DW_AT_name        : (indirect string, offset: 0x387): uc_mcontext
+    <3bd>   DW_AT_type        : <0x484>
+    <3c1>   DW_AT_decl_file   : 5
+    <3c2>   DW_AT_decl_line   : 89
+    <3c3>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><3c6>: Abbrev Number: 9 (DW_TAG_member)
+    <3c7>   DW_AT_type        : <0x3d1>
+    <3cb>   DW_AT_decl_file   : 5
+    <3cc>   DW_AT_decl_line   : 90
+    <3cd>   DW_AT_data_member_location: 3 byte block: 23 c0 22 	(DW_OP_plus_uconst: 4416)
+ <2><3d1>: Abbrev Number: 7 (DW_TAG_union_type)
+    <3d2>   DW_AT_byte_size   : 8
+    <3d3>   DW_AT_decl_file   : 5
+    <3d4>   DW_AT_decl_line   : 90
+ <3><3d5>: Abbrev Number: 9 (DW_TAG_member)
+    <3d6>   DW_AT_type        : <0x3df>
+    <3da>   DW_AT_decl_file   : 5
+    <3db>   DW_AT_decl_line   : 91
+    <3dc>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><3df>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <3e0>   DW_AT_byte_size   : 8
+    <3e1>   DW_AT_decl_file   : 5
+    <3e2>   DW_AT_decl_line   : 91
+ <4><3e3>: Abbrev Number: 5 (DW_TAG_member)
+    <3e4>   DW_AT_name        : (indirect string, offset: 0x404): uc_sigmask
+    <3e8>   DW_AT_type        : <0x531>
     <3ec>   DW_AT_decl_file   : 5
-    <3ed>   DW_AT_decl_line   : 94
-    <3ee>   DW_AT_data_member_location: 3 byte block: 23 c8 22 	(DW_OP_plus_uconst: 4424)
- <2><3f2>: Abbrev Number: 17 (DW_TAG_member)
-    <3f3>   DW_AT_name        : (indirect string, offset: 0x384): uc_regspace
-    <3f7>   DW_AT_type        : <0x553>
-    <3fb>   DW_AT_decl_file   : 5
-    <3fc>   DW_AT_decl_line   : 95
-    <3fd>   Unknown AT value: 88: 8
-    <3fe>   DW_AT_data_member_location: 3 byte block: 23 c0 23 	(DW_OP_plus_uconst: 4544)
- <2><402>: Abbrev Number: 0
- <1><403>: Abbrev Number: 10 (DW_TAG_base_type)
-    <404>   DW_AT_name        : (indirect string, offset: 0x268): long unsigned int
-    <408>   DW_AT_encoding    : 7	(unsigned)
-    <409>   DW_AT_byte_size   : 4
- <1><40a>: Abbrev Number: 18 (DW_TAG_pointer_type)
-    <40b>   DW_AT_type        : <0x384>
- <1><40f>: Abbrev Number: 3 (DW_TAG_typedef)
-    <410>   DW_AT_type        : <0x41a>
-    <414>   DW_AT_name        : (indirect string, offset: 0x2b5): stack_t
-    <418>   DW_AT_decl_file   : 6
-    <419>   DW_AT_decl_line   : 97
- <1><41a>: Abbrev Number: 6 (DW_TAG_structure_type)
-    <41b>   DW_AT_name        : (indirect string, offset: 0x2a9): sigaltstack
-    <41f>   DW_AT_byte_size   : 12
-    <420>   DW_AT_decl_file   : 6
-    <421>   DW_AT_decl_line   : 93
- <2><422>: Abbrev Number: 5 (DW_TAG_member)
-    <423>   DW_AT_name        : (indirect string, offset: 0x28b): ss_sp
-    <427>   DW_AT_type        : <0x349>
-    <42b>   DW_AT_decl_file   : 6
-    <42c>   DW_AT_decl_line   : 94
-    <42d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><430>: Abbrev Number: 5 (DW_TAG_member)
-    <431>   DW_AT_name        : (indirect string, offset: 0x291): ss_flags
-    <435>   DW_AT_type        : <0x2c2>
-    <439>   DW_AT_decl_file   : 6
-    <43a>   DW_AT_decl_line   : 95
-    <43b>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><43e>: Abbrev Number: 5 (DW_TAG_member)
-    <43f>   DW_AT_name        : (indirect string, offset: 0x29a): ss_size
-    <443>   DW_AT_type        : <0x44d>
-    <447>   DW_AT_decl_file   : 6
-    <448>   DW_AT_decl_line   : 96
-    <449>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><44c>: Abbrev Number: 0
- <1><44d>: Abbrev Number: 3 (DW_TAG_typedef)
-    <44e>   DW_AT_type        : <0x2f3>
-    <452>   DW_AT_name        : (indirect string, offset: 0x2a2): size_t
-    <456>   DW_AT_decl_file   : 7
-    <457>   DW_AT_decl_line   : 62
- <1><458>: Abbrev Number: 3 (DW_TAG_typedef)
-    <459>   DW_AT_type        : <0x463>
-    <45d>   DW_AT_name        : (indirect string, offset: 0x32f): mcontext_t
-    <461>   DW_AT_decl_file   : 5
-    <462>   DW_AT_decl_line   : 83
- <1><463>: Abbrev Number: 16 (DW_TAG_structure_type)
-    <464>   DW_AT_name        : (indirect string, offset: 0x324): sigcontext
-    <468>   DW_AT_byte_size   : 4384
-    <46a>   DW_AT_decl_file   : 8
-    <46b>   DW_AT_decl_line   : 22
- <2><46c>: Abbrev Number: 5 (DW_TAG_member)
-    <46d>   DW_AT_name        : (indirect string, offset: 0x2c9): fault_address
-    <471>   DW_AT_type        : <0x4c6>
-    <475>   DW_AT_decl_file   : 8
-    <476>   DW_AT_decl_line   : 23
-    <477>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><47a>: Abbrev Number: 5 (DW_TAG_member)
-    <47b>   DW_AT_name        : (indirect string, offset: 0x2f4): regs
-    <47f>   DW_AT_type        : <0x4d8>
-    <483>   DW_AT_decl_file   : 8
-    <484>   DW_AT_decl_line   : 24
-    <485>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><488>: Abbrev Number: 5 (DW_TAG_member)
-    <489>   DW_AT_name        : (indirect string, offset: 0x2f9): sp
-    <48d>   DW_AT_type        : <0x4c6>
-    <491>   DW_AT_decl_file   : 8
-    <492>   DW_AT_decl_line   : 25
-    <493>   DW_AT_data_member_location: 3 byte block: 23 80 2 	(DW_OP_plus_uconst: 256)
- <2><497>: Abbrev Number: 5 (DW_TAG_member)
-    <498>   DW_AT_name        : (indirect string, offset: 0x2fc): pc
-    <49c>   DW_AT_type        : <0x4c6>
-    <4a0>   DW_AT_decl_file   : 8
-    <4a1>   DW_AT_decl_line   : 26
-    <4a2>   DW_AT_data_member_location: 3 byte block: 23 88 2 	(DW_OP_plus_uconst: 264)
+    <3ed>   DW_AT_decl_line   : 92
+    <3ee>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><3f1>: Abbrev Number: 5 (DW_TAG_member)
+    <3f2>   DW_AT_name        : (indirect string, offset: 0x41c): __padding_rt_sigset
+    <3f6>   DW_AT_type        : <0x55c>
+    <3fa>   DW_AT_decl_file   : 5
+    <3fb>   DW_AT_decl_line   : 94
+    <3fc>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><3ff>: Abbrev Number: 0
+ <3><400>: Abbrev Number: 5 (DW_TAG_member)
+    <401>   DW_AT_name        : (indirect string, offset: 0x444): uc_sigmask64
+    <405>   DW_AT_type        : <0x572>
+    <409>   DW_AT_decl_file   : 5
+    <40a>   DW_AT_decl_line   : 96
+    <40b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><40e>: Abbrev Number: 0
+ <2><40f>: Abbrev Number: 5 (DW_TAG_member)
+    <410>   DW_AT_name        : (indirect string, offset: 0x463): __padding
+    <414>   DW_AT_type        : <0x59d>
+    <418>   DW_AT_decl_file   : 5
+    <419>   DW_AT_decl_line   : 99
+    <41a>   DW_AT_data_member_location: 3 byte block: 23 c8 22 	(DW_OP_plus_uconst: 4424)
+ <2><41e>: Abbrev Number: 17 (DW_TAG_member)
+    <41f>   DW_AT_name        : (indirect string, offset: 0x46d): uc_regspace
+    <423>   DW_AT_type        : <0x5aa>
+    <427>   DW_AT_decl_file   : 5
+    <428>   DW_AT_decl_line   : 100
+    <429>   Unknown AT value: 88: 8
+    <42a>   DW_AT_data_member_location: 3 byte block: 23 c0 23 	(DW_OP_plus_uconst: 4544)
+ <2><42e>: Abbrev Number: 0
+ <1><42f>: Abbrev Number: 10 (DW_TAG_base_type)
+    <430>   DW_AT_name        : (indirect string, offset: 0x332): long unsigned int
+    <434>   DW_AT_encoding    : 7	(unsigned)
+    <435>   DW_AT_byte_size   : 4
+ <1><436>: Abbrev Number: 18 (DW_TAG_pointer_type)
+    <437>   DW_AT_type        : <0x385>
+ <1><43b>: Abbrev Number: 3 (DW_TAG_typedef)
+    <43c>   DW_AT_type        : <0x446>
+    <440>   DW_AT_name        : (indirect string, offset: 0x37f): stack_t
+    <444>   DW_AT_decl_file   : 6
+    <445>   DW_AT_decl_line   : 97
+ <1><446>: Abbrev Number: 6 (DW_TAG_structure_type)
+    <447>   DW_AT_name        : (indirect string, offset: 0x373): sigaltstack
+    <44b>   DW_AT_byte_size   : 12
+    <44c>   DW_AT_decl_file   : 6
+    <44d>   DW_AT_decl_line   : 93
+ <2><44e>: Abbrev Number: 5 (DW_TAG_member)
+    <44f>   DW_AT_name        : (indirect string, offset: 0x355): ss_sp
+    <453>   DW_AT_type        : <0x34a>
+    <457>   DW_AT_decl_file   : 6
+    <458>   DW_AT_decl_line   : 94
+    <459>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><45c>: Abbrev Number: 5 (DW_TAG_member)
+    <45d>   DW_AT_name        : (indirect string, offset: 0x35b): ss_flags
+    <461>   DW_AT_type        : <0x2c3>
+    <465>   DW_AT_decl_file   : 6
+    <466>   DW_AT_decl_line   : 95
+    <467>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><46a>: Abbrev Number: 5 (DW_TAG_member)
+    <46b>   DW_AT_name        : (indirect string, offset: 0x364): ss_size
+    <46f>   DW_AT_type        : <0x479>
+    <473>   DW_AT_decl_file   : 6
+    <474>   DW_AT_decl_line   : 96
+    <475>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><478>: Abbrev Number: 0
+ <1><479>: Abbrev Number: 3 (DW_TAG_typedef)
+    <47a>   DW_AT_type        : <0x2f4>
+    <47e>   DW_AT_name        : (indirect string, offset: 0x36c): size_t
+    <482>   DW_AT_decl_file   : 7
+    <483>   DW_AT_decl_line   : 62
+ <1><484>: Abbrev Number: 3 (DW_TAG_typedef)
+    <485>   DW_AT_type        : <0x48f>
+    <489>   DW_AT_name        : (indirect string, offset: 0x3f9): mcontext_t
+    <48d>   DW_AT_decl_file   : 5
+    <48e>   DW_AT_decl_line   : 83
+ <1><48f>: Abbrev Number: 16 (DW_TAG_structure_type)
+    <490>   DW_AT_name        : (indirect string, offset: 0x3ee): sigcontext
+    <494>   DW_AT_byte_size   : 4384
+    <496>   DW_AT_decl_file   : 8
+    <497>   DW_AT_decl_line   : 23
+ <2><498>: Abbrev Number: 5 (DW_TAG_member)
+    <499>   DW_AT_name        : (indirect string, offset: 0x393): fault_address
+    <49d>   DW_AT_type        : <0x4f2>
+    <4a1>   DW_AT_decl_file   : 8
+    <4a2>   DW_AT_decl_line   : 24
+    <4a3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
  <2><4a6>: Abbrev Number: 5 (DW_TAG_member)
-    <4a7>   DW_AT_name        : (indirect string, offset: 0x2ff): pstate
-    <4ab>   DW_AT_type        : <0x4c6>
+    <4a7>   DW_AT_name        : (indirect string, offset: 0x3be): regs
+    <4ab>   DW_AT_type        : <0x504>
     <4af>   DW_AT_decl_file   : 8
-    <4b0>   DW_AT_decl_line   : 27
-    <4b1>   DW_AT_data_member_location: 3 byte block: 23 90 2 	(DW_OP_plus_uconst: 272)
- <2><4b5>: Abbrev Number: 17 (DW_TAG_member)
-    <4b6>   DW_AT_name        : (indirect string, offset: 0x306): __reserved
-    <4ba>   DW_AT_type        : <0x4e5>
-    <4be>   DW_AT_decl_file   : 8
-    <4bf>   DW_AT_decl_line   : 28
-    <4c0>   Unknown AT value: 88: 16
-    <4c1>   DW_AT_data_member_location: 3 byte block: 23 a0 2 	(DW_OP_plus_uconst: 288)
- <2><4c5>: Abbrev Number: 0
- <1><4c6>: Abbrev Number: 3 (DW_TAG_typedef)
-    <4c7>   DW_AT_type        : <0x4d1>
-    <4cb>   DW_AT_name        : (indirect string, offset: 0x2ee): __u64
-    <4cf>   DW_AT_decl_file   : 3
-    <4d0>   DW_AT_decl_line   : 31
- <1><4d1>: Abbrev Number: 10 (DW_TAG_base_type)
-    <4d2>   DW_AT_name        : (indirect string, offset: 0x2d7): long long unsigned int
-    <4d6>   DW_AT_encoding    : 7	(unsigned)
-    <4d7>   DW_AT_byte_size   : 8
- <1><4d8>: Abbrev Number: 11 (DW_TAG_array_type)
-    <4d9>   DW_AT_type        : <0x4c6>
- <2><4dd>: Abbrev Number: 12 (DW_TAG_subrange_type)
-    <4de>   DW_AT_type        : <0x2d6>
-    <4e2>   DW_AT_lower_bound : 0
-    <4e3>   DW_AT_count       : 31
- <2><4e4>: Abbrev Number: 0
- <1><4e5>: Abbrev Number: 11 (DW_TAG_array_type)
-    <4e6>   DW_AT_type        : <0x4f3>
- <2><4ea>: Abbrev Number: 19 (DW_TAG_subrange_type)
-    <4eb>   DW_AT_type        : <0x2d6>
-    <4ef>   DW_AT_lower_bound : 0
-    <4f0>   DW_AT_count       : 4096
- <2><4f2>: Abbrev Number: 0
- <1><4f3>: Abbrev Number: 3 (DW_TAG_typedef)
-    <4f4>   DW_AT_type        : <0x4fe>
-    <4f8>   DW_AT_name        : (indirect string, offset: 0x31f): __u8
-    <4fc>   DW_AT_decl_file   : 3
-    <4fd>   DW_AT_decl_line   : 24
- <1><4fe>: Abbrev Number: 10 (DW_TAG_base_type)
-    <4ff>   DW_AT_name        : (indirect string, offset: 0x311): unsigned char
-    <503>   DW_AT_encoding    : 8	(unsigned char)
-    <504>   DW_AT_byte_size   : 1
- <1><505>: Abbrev Number: 3 (DW_TAG_typedef)
-    <506>   DW_AT_type        : <0x510>
-    <50a>   DW_AT_name        : (indirect string, offset: 0x349): sigset_t
-    <50e>   DW_AT_decl_file   : 6
-    <50f>   DW_AT_decl_line   : 79
- <1><510>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <511>   DW_AT_byte_size   : 4
-    <512>   DW_AT_decl_file   : 6
-    <513>   DW_AT_decl_line   : 77
- <2><514>: Abbrev Number: 5 (DW_TAG_member)
-    <515>   DW_AT_name        : (indirect string, offset: 0x345): sig
-    <519>   DW_AT_type        : <0x523>
-    <51d>   DW_AT_decl_file   : 6
-    <51e>   DW_AT_decl_line   : 78
-    <51f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><522>: Abbrev Number: 0
- <1><523>: Abbrev Number: 11 (DW_TAG_array_type)
-    <524>   DW_AT_type        : <0x403>
- <2><528>: Abbrev Number: 12 (DW_TAG_subrange_type)
-    <529>   DW_AT_type        : <0x2d6>
-    <52d>   DW_AT_lower_bound : 0
-    <52e>   DW_AT_count       : 1
- <2><52f>: Abbrev Number: 0
- <1><530>: Abbrev Number: 3 (DW_TAG_typedef)
-    <531>   DW_AT_type        : <0x53b>
-    <535>   DW_AT_name        : (indirect string, offset: 0x371): uint32_t
-    <539>   DW_AT_decl_file   : 9
-    <53a>   DW_AT_decl_line   : 65
- <1><53b>: Abbrev Number: 3 (DW_TAG_typedef)
-    <53c>   DW_AT_type        : <0x2f3>
-    <540>   DW_AT_name        : (indirect string, offset: 0x366): __uint32_t
-    <544>   DW_AT_decl_file   : 9
-    <545>   DW_AT_decl_line   : 41
- <1><546>: Abbrev Number: 11 (DW_TAG_array_type)
-    <547>   DW_AT_type        : <0x312>
- <2><54b>: Abbrev Number: 12 (DW_TAG_subrange_type)
-    <54c>   DW_AT_type        : <0x2d6>
-    <550>   DW_AT_lower_bound : 0
-    <551>   DW_AT_count       : 120
- <2><552>: Abbrev Number: 0
- <1><553>: Abbrev Number: 11 (DW_TAG_array_type)
-    <554>   DW_AT_type        : <0x403>
- <2><558>: Abbrev Number: 12 (DW_TAG_subrange_type)
-    <559>   DW_AT_type        : <0x2d6>
-    <55d>   DW_AT_lower_bound : 0
-    <55e>   DW_AT_count       : 128
- <2><55f>: Abbrev Number: 0
- <1><560>: Abbrev Number: 0
+    <4b0>   DW_AT_decl_line   : 25
+    <4b1>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><4b4>: Abbrev Number: 5 (DW_TAG_member)
+    <4b5>   DW_AT_name        : (indirect string, offset: 0x3c3): sp
+    <4b9>   DW_AT_type        : <0x4f2>
+    <4bd>   DW_AT_decl_file   : 8
+    <4be>   DW_AT_decl_line   : 26
+    <4bf>   DW_AT_data_member_location: 3 byte block: 23 80 2 	(DW_OP_plus_uconst: 256)
+ <2><4c3>: Abbrev Number: 5 (DW_TAG_member)
+    <4c4>   DW_AT_name        : (indirect string, offset: 0x3c6): pc
+    <4c8>   DW_AT_type        : <0x4f2>
+    <4cc>   DW_AT_decl_file   : 8
+    <4cd>   DW_AT_decl_line   : 27
+    <4ce>   DW_AT_data_member_location: 3 byte block: 23 88 2 	(DW_OP_plus_uconst: 264)
+ <2><4d2>: Abbrev Number: 5 (DW_TAG_member)
+    <4d3>   DW_AT_name        : (indirect string, offset: 0x3c9): pstate
+    <4d7>   DW_AT_type        : <0x4f2>
+    <4db>   DW_AT_decl_file   : 8
+    <4dc>   DW_AT_decl_line   : 28
+    <4dd>   DW_AT_data_member_location: 3 byte block: 23 90 2 	(DW_OP_plus_uconst: 272)
+ <2><4e1>: Abbrev Number: 17 (DW_TAG_member)
+    <4e2>   DW_AT_name        : (indirect string, offset: 0x3d0): __reserved
+    <4e6>   DW_AT_type        : <0x511>
+    <4ea>   DW_AT_decl_file   : 8
+    <4eb>   DW_AT_decl_line   : 29
+    <4ec>   Unknown AT value: 88: 16
+    <4ed>   DW_AT_data_member_location: 3 byte block: 23 a0 2 	(DW_OP_plus_uconst: 288)
+ <2><4f1>: Abbrev Number: 0
+ <1><4f2>: Abbrev Number: 3 (DW_TAG_typedef)
+    <4f3>   DW_AT_type        : <0x4fd>
+    <4f7>   DW_AT_name        : (indirect string, offset: 0x3b8): __u64
+    <4fb>   DW_AT_decl_file   : 3
+    <4fc>   DW_AT_decl_line   : 31
+ <1><4fd>: Abbrev Number: 10 (DW_TAG_base_type)
+    <4fe>   DW_AT_name        : (indirect string, offset: 0x3a1): long long unsigned int
+    <502>   DW_AT_encoding    : 7	(unsigned)
+    <503>   DW_AT_byte_size   : 8
+ <1><504>: Abbrev Number: 11 (DW_TAG_array_type)
+    <505>   DW_AT_type        : <0x4f2>
+ <2><509>: Abbrev Number: 12 (DW_TAG_subrange_type)
+    <50a>   DW_AT_type        : <0x2d7>
+    <50e>   DW_AT_lower_bound : 0
+    <50f>   DW_AT_count       : 31
+ <2><510>: Abbrev Number: 0
+ <1><511>: Abbrev Number: 11 (DW_TAG_array_type)
+    <512>   DW_AT_type        : <0x51f>
+ <2><516>: Abbrev Number: 19 (DW_TAG_subrange_type)
+    <517>   DW_AT_type        : <0x2d7>
+    <51b>   DW_AT_lower_bound : 0
+    <51c>   DW_AT_count       : 4096
+ <2><51e>: Abbrev Number: 0
+ <1><51f>: Abbrev Number: 3 (DW_TAG_typedef)
+    <520>   DW_AT_type        : <0x52a>
+    <524>   DW_AT_name        : (indirect string, offset: 0x3e9): __u8
+    <528>   DW_AT_decl_file   : 3
+    <529>   DW_AT_decl_line   : 24
+ <1><52a>: Abbrev Number: 10 (DW_TAG_base_type)
+    <52b>   DW_AT_name        : (indirect string, offset: 0x3db): unsigned char
+    <52f>   DW_AT_encoding    : 8	(unsigned char)
+    <530>   DW_AT_byte_size   : 1
+ <1><531>: Abbrev Number: 3 (DW_TAG_typedef)
+    <532>   DW_AT_type        : <0x53c>
+    <536>   DW_AT_name        : (indirect string, offset: 0x413): sigset_t
+    <53a>   DW_AT_decl_file   : 6
+    <53b>   DW_AT_decl_line   : 79
+ <1><53c>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <53d>   DW_AT_byte_size   : 4
+    <53e>   DW_AT_decl_file   : 6
+    <53f>   DW_AT_decl_line   : 77
+ <2><540>: Abbrev Number: 5 (DW_TAG_member)
+    <541>   DW_AT_name        : (indirect string, offset: 0x40f): sig
+    <545>   DW_AT_type        : <0x54f>
+    <549>   DW_AT_decl_file   : 6
+    <54a>   DW_AT_decl_line   : 78
+    <54b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54e>: Abbrev Number: 0
+ <1><54f>: Abbrev Number: 11 (DW_TAG_array_type)
+    <550>   DW_AT_type        : <0x42f>
+ <2><554>: Abbrev Number: 12 (DW_TAG_subrange_type)
+    <555>   DW_AT_type        : <0x2d7>
+    <559>   DW_AT_lower_bound : 0
+    <55a>   DW_AT_count       : 1
+ <2><55b>: Abbrev Number: 0
+ <1><55c>: Abbrev Number: 3 (DW_TAG_typedef)
+    <55d>   DW_AT_type        : <0x567>
+    <561>   DW_AT_name        : (indirect string, offset: 0x43b): uint32_t
+    <565>   DW_AT_decl_file   : 9
+    <566>   DW_AT_decl_line   : 65
+ <1><567>: Abbrev Number: 3 (DW_TAG_typedef)
+    <568>   DW_AT_type        : <0x2f4>
+    <56c>   DW_AT_name        : (indirect string, offset: 0x430): __uint32_t
+    <570>   DW_AT_decl_file   : 9
+    <571>   DW_AT_decl_line   : 41
+ <1><572>: Abbrev Number: 3 (DW_TAG_typedef)
+    <573>   DW_AT_type        : <0x57d>
+    <577>   DW_AT_name        : (indirect string, offset: 0x458): sigset64_t
+    <57b>   DW_AT_decl_file   : 10
+    <57c>   DW_AT_decl_line   : 67
+ <1><57d>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <57e>   DW_AT_byte_size   : 8
+    <57f>   DW_AT_decl_file   : 10
+    <580>   DW_AT_decl_line   : 67
+ <2><581>: Abbrev Number: 5 (DW_TAG_member)
+    <582>   DW_AT_name        : (indirect string, offset: 0x451): __bits
+    <586>   DW_AT_type        : <0x590>
+    <58a>   DW_AT_decl_file   : 10
+    <58b>   DW_AT_decl_line   : 67
+    <58c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><58f>: Abbrev Number: 0
+ <1><590>: Abbrev Number: 11 (DW_TAG_array_type)
+    <591>   DW_AT_type        : <0x42f>
+ <2><595>: Abbrev Number: 12 (DW_TAG_subrange_type)
+    <596>   DW_AT_type        : <0x2d7>
+    <59a>   DW_AT_lower_bound : 0
+    <59b>   DW_AT_count       : 2
+ <2><59c>: Abbrev Number: 0
+ <1><59d>: Abbrev Number: 11 (DW_TAG_array_type)
+    <59e>   DW_AT_type        : <0x313>
+ <2><5a2>: Abbrev Number: 12 (DW_TAG_subrange_type)
+    <5a3>   DW_AT_type        : <0x2d7>
+    <5a7>   DW_AT_lower_bound : 0
+    <5a8>   DW_AT_count       : 120
+ <2><5a9>: Abbrev Number: 0
+ <1><5aa>: Abbrev Number: 11 (DW_TAG_array_type)
+    <5ab>   DW_AT_type        : <0x42f>
+ <2><5af>: Abbrev Number: 12 (DW_TAG_subrange_type)
+    <5b0>   DW_AT_type        : <0x2d7>
+    <5b4>   DW_AT_lower_bound : 0
+    <5b5>   DW_AT_count       : 128
+ <2><5b6>: Abbrev Number: 0
+ <1><5b7>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_rt_sigframe.d2 b/mpers-m32/struct_rt_sigframe.d2
index 847ed69..e4d5aed 100644
--- a/mpers-m32/struct_rt_sigframe.d2
+++ b/mpers-m32/struct_rt_sigframe.d2
@@ -1,740 +1,795 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
-DW_AT_decl_file   : 10
+DW_AT_decl_file   : 11
 DW_AT_decl_line   : 33
 DW_AT_location    : 5 byte block: 3 10 0 0 0 	(DW_OP_addr: 10)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x3a4): struct_rt_sigframe
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x48d): struct_rt_sigframe
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 39
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
 DW_AT_byte_size   : 5184
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 35
-<2><40>
+<2><41>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa8): info
-DW_AT_type        : <0x5e>
+DW_AT_name        : (indirect string, offset: 0x172): info
+DW_AT_type        : <0x5f>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><4e>
+<2><4f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x25c): uc
-DW_AT_type        : <0x379>
+DW_AT_name        : (indirect string, offset: 0x326): uc
+DW_AT_type        : <0x37a>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 3 byte block: 23 80 1 	(DW_OP_plus_uconst: 128)
-<1><5e>
+<1><5f>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x69>
-DW_AT_name        : (indirect string, offset: 0x252): siginfo_t
+DW_AT_type        : <0x6a>
+DW_AT_name        : (indirect string, offset: 0x31c): siginfo_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 100
-<1><69>
+<1><6a>
 Abbrev Number: 6 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x24a): siginfo
+DW_AT_name        : (indirect string, offset: 0x314): siginfo
 DW_AT_byte_size   : 124
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 47
-<2><71>
+<2><72>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xad): si_signo
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x177): si_signo
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 48
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><7f>
+<2><80>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xba): si_errno
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x184): si_errno
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 49
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><8d>
+<2><8e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc3): si_code
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x18d): si_code
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 50
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><9b>
+<2><9c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcb): _sifields
-DW_AT_type        : <0xa9>
+DW_AT_name        : (indirect string, offset: 0x195): _sifields
+DW_AT_type        : <0xaa>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 99
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><a9>
+<2><aa>
 Abbrev Number: 7 (DW_TAG_union_type)
 DW_AT_byte_size   : 112
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 51
-<3><ad>
+<3><ae>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd5): _pad
-DW_AT_type        : <0x2c9>
+DW_AT_name        : (indirect string, offset: 0x19f): _pad
+DW_AT_type        : <0x2ca>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 52
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><bb>
+<3><bc>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe3): _kill
-DW_AT_type        : <0xc9>
+DW_AT_name        : (indirect string, offset: 0x1ad): _kill
+DW_AT_type        : <0xca>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 56
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><c9>
+<3><ca>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 53
-<4><cd>
+<4><ce>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe9): _pid
-DW_AT_type        : <0x2dd>
+DW_AT_name        : (indirect string, offset: 0x1b3): _pid
+DW_AT_type        : <0x2de>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 54
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><db>
+<4><dc>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfd): _uid
-DW_AT_type        : <0x2e8>
+DW_AT_name        : (indirect string, offset: 0x1c7): _uid
+DW_AT_type        : <0x2e9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 55
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<3><ea>
+<3><eb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x120): _timer
-DW_AT_type        : <0xf8>
+DW_AT_name        : (indirect string, offset: 0x1ea): _timer
+DW_AT_type        : <0xf9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 63
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><f8>
+<3><f9>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 57
-<4><fc>
+<4><fd>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x127): _tid
-DW_AT_type        : <0x2fa>
+DW_AT_name        : (indirect string, offset: 0x1f1): _tid
+DW_AT_type        : <0x2fb>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 58
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><10a>
+<4><10b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13d): _overrun
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x207): _overrun
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 59
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><118>
+<4><119>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd5): _pad
-DW_AT_type        : <0x305>
+DW_AT_name        : (indirect string, offset: 0x19f): _pad
+DW_AT_type        : <0x306>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 60
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<4><126>
+<4><127>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14b): _sigval
-DW_AT_type        : <0x319>
+DW_AT_name        : (indirect string, offset: 0x215): _sigval
+DW_AT_type        : <0x31a>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 61
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<4><134>
+<4><135>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x177): _sys_private
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x241): _sys_private
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 62
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<3><143>
+<3><144>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x184): _rt
-DW_AT_type        : <0x151>
+DW_AT_name        : (indirect string, offset: 0x24e): _rt
+DW_AT_type        : <0x152>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 68
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><151>
+<3><152>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 64
-<4><155>
+<4><156>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe9): _pid
-DW_AT_type        : <0x2dd>
+DW_AT_name        : (indirect string, offset: 0x1b3): _pid
+DW_AT_type        : <0x2de>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 65
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><163>
+<4><164>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfd): _uid
-DW_AT_type        : <0x2e8>
+DW_AT_name        : (indirect string, offset: 0x1c7): _uid
+DW_AT_type        : <0x2e9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 66
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><171>
+<4><172>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14b): _sigval
-DW_AT_type        : <0x319>
+DW_AT_name        : (indirect string, offset: 0x215): _sigval
+DW_AT_type        : <0x31a>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 67
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<3><180>
+<3><181>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x188): _sigchld
-DW_AT_type        : <0x18e>
+DW_AT_name        : (indirect string, offset: 0x252): _sigchld
+DW_AT_type        : <0x18f>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 75
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><18e>
+<3><18f>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 20
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 69
-<4><192>
+<4><193>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe9): _pid
-DW_AT_type        : <0x2dd>
+DW_AT_name        : (indirect string, offset: 0x1b3): _pid
+DW_AT_type        : <0x2de>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 70
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><1a0>
+<4><1a1>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfd): _uid
-DW_AT_type        : <0x2e8>
+DW_AT_name        : (indirect string, offset: 0x1c7): _uid
+DW_AT_type        : <0x2e9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 71
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><1ae>
+<4><1af>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x191): _status
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x25b): _status
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 72
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<4><1bc>
+<4><1bd>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x199): _utime
-DW_AT_type        : <0x34a>
+DW_AT_name        : (indirect string, offset: 0x263): _utime
+DW_AT_type        : <0x34b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 73
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<4><1ca>
+<4><1cb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1ca): _stime
-DW_AT_type        : <0x34a>
+DW_AT_name        : (indirect string, offset: 0x294): _stime
+DW_AT_type        : <0x34b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 74
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<3><1d9>
+<3><1da>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d1): _sigfault
-DW_AT_type        : <0x1e7>
+DW_AT_name        : (indirect string, offset: 0x29b): _sigfault
+DW_AT_type        : <0x1e8>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 89
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><1e7>
+<3><1e8>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 76
-<4><1eb>
+<4><1ec>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1db): _addr
-DW_AT_type        : <0x349>
+DW_AT_name        : (indirect string, offset: 0x2a5): _addr
+DW_AT_type        : <0x34a>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 77
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><1f9>
+<4><1fa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1e1): _addr_lsb
-DW_AT_type        : <0x367>
+DW_AT_name        : (indirect string, offset: 0x2ab): _addr_lsb
+DW_AT_type        : <0x368>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 81
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><207>
+<4><208>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_type        : <0x211>
+DW_AT_type        : <0x212>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 82
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<4><211>
+<4><212>
 Abbrev Number: 7 (DW_TAG_union_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 82
-<5><215>
+<5><216>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f1): _addr_bnd
-DW_AT_type        : <0x223>
+DW_AT_name        : (indirect string, offset: 0x2bb): _addr_bnd
+DW_AT_type        : <0x224>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 86
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<5><223>
+<5><224>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 83
-<6><227>
+<6><228>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1fb): _lower
-DW_AT_type        : <0x349>
+DW_AT_name        : (indirect string, offset: 0x2c5): _lower
+DW_AT_type        : <0x34a>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 84
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<6><235>
+<6><236>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x202): _upper
-DW_AT_type        : <0x349>
+DW_AT_name        : (indirect string, offset: 0x2cc): _upper
+DW_AT_type        : <0x34a>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 85
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<5><244>
+<5><245>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x209): _pkey
-DW_AT_type        : <0x36e>
+DW_AT_name        : (indirect string, offset: 0x2d3): _pkey
+DW_AT_type        : <0x36f>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 87
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><254>
+<3><255>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x215): _sigpoll
-DW_AT_type        : <0x262>
+DW_AT_name        : (indirect string, offset: 0x2df): _sigpoll
+DW_AT_type        : <0x263>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 93
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><262>
+<3><263>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 90
-<4><266>
+<4><267>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x21e): _band
-DW_AT_type        : <0x360>
+DW_AT_name        : (indirect string, offset: 0x2e8): _band
+DW_AT_type        : <0x361>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 91
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><274>
+<4><275>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x224): _fd
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x2ee): _fd
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 92
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<3><283>
+<3><284>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x228): _sigsys
-DW_AT_type        : <0x291>
+DW_AT_name        : (indirect string, offset: 0x2f2): _sigsys
+DW_AT_type        : <0x292>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 98
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><291>
+<3><292>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 94
-<4><295>
+<4><296>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x230): _call_addr
-DW_AT_type        : <0x349>
+DW_AT_name        : (indirect string, offset: 0x2fa): _call_addr
+DW_AT_type        : <0x34a>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 95
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><2a3>
+<4><2a4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x23b): _syscall
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x305): _syscall
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 96
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<4><2b1>
+<4><2b2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x244): _arch
-DW_AT_type        : <0x2f3>
+DW_AT_name        : (indirect string, offset: 0x30e): _arch
+DW_AT_type        : <0x2f4>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 97
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><2c2>
+<1><2c3>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb6): int
+DW_AT_name        : (indirect string, offset: 0x180): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><2c9>
+<1><2ca>
 Abbrev Number: 11 (DW_TAG_array_type)
-DW_AT_type        : <0x2c2>
-<2><2ce>
+DW_AT_type        : <0x2c3>
+<2><2cf>
 Abbrev Number: 12 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2d6>
+DW_AT_type        : <0x2d7>
 DW_AT_lower_bound : 0
 DW_AT_count       : 28
-<1><2d6>
+<1><2d7>
 Abbrev Number: 13 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xda): sizetype
+DW_AT_name        : (indirect string, offset: 0x1a4): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><2dd>
+<1><2de>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2c2>
-DW_AT_name        : (indirect string, offset: 0xee): __kernel_pid_t
+DW_AT_type        : <0x2c3>
+DW_AT_name        : (indirect string, offset: 0x1b8): __kernel_pid_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 33
-<1><2e8>
+<1><2e9>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2f3>
-DW_AT_name        : (indirect string, offset: 0x10f): __kernel_uid32_t
+DW_AT_type        : <0x2f4>
+DW_AT_name        : (indirect string, offset: 0x1d9): __kernel_uid32_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 49
-<1><2f3>
+<1><2f4>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x102): unsigned int
+DW_AT_name        : (indirect string, offset: 0x1cc): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><2fa>
+<1><2fb>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2c2>
-DW_AT_name        : (indirect string, offset: 0x12c): __kernel_timer_t
+DW_AT_type        : <0x2c3>
+DW_AT_name        : (indirect string, offset: 0x1f6): __kernel_timer_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 79
-<1><305>
+<1><306>
 Abbrev Number: 11 (DW_TAG_array_type)
-DW_AT_type        : <0x312>
-<2><30a>
+DW_AT_type        : <0x313>
+<2><30b>
 Abbrev Number: 12 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2d6>
+DW_AT_type        : <0x2d7>
 DW_AT_lower_bound : 0
 DW_AT_count       : 0
-<1><312>
+<1><313>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x146): char
+DW_AT_name        : (indirect string, offset: 0x210): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><319>
+<1><31a>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x324>
-DW_AT_name        : (indirect string, offset: 0x16e): sigval_t
+DW_AT_type        : <0x325>
+DW_AT_name        : (indirect string, offset: 0x238): sigval_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
-<1><324>
+<1><325>
 Abbrev Number: 14 (DW_TAG_union_type)
-DW_AT_name        : (indirect string, offset: 0x167): sigval
+DW_AT_name        : (indirect string, offset: 0x231): sigval
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<2><32c>
+<2><32d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x153): sival_int
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x21d): sival_int
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><33a>
+<2><33b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15d): sival_ptr
-DW_AT_type        : <0x349>
+DW_AT_name        : (indirect string, offset: 0x227): sival_ptr
+DW_AT_type        : <0x34a>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><349>
-Abbrev Number: 15 (DW_TAG_pointer_type)
 <1><34a>
+Abbrev Number: 15 (DW_TAG_pointer_type)
+<1><34b>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x355>
-DW_AT_name        : (indirect string, offset: 0x1b9): __kernel_clock_t
+DW_AT_type        : <0x356>
+DW_AT_name        : (indirect string, offset: 0x283): __kernel_clock_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 78
-<1><355>
+<1><356>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x360>
-DW_AT_name        : (indirect string, offset: 0x1a9): __kernel_long_t
+DW_AT_type        : <0x361>
+DW_AT_name        : (indirect string, offset: 0x273): __kernel_long_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 23
-<1><360>
+<1><361>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1a0): long int
+DW_AT_name        : (indirect string, offset: 0x26a): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><367>
+<1><368>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1eb): short
+DW_AT_name        : (indirect string, offset: 0x2b5): short
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 2
-<1><36e>
+<1><36f>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2f3>
-DW_AT_name        : (indirect string, offset: 0x20f): __u32
+DW_AT_type        : <0x2f4>
+DW_AT_name        : (indirect string, offset: 0x2d9): __u32
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 28
-<1><379>
+<1><37a>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x384>
-DW_AT_name        : (indirect string, offset: 0x399): ucontext_t
+DW_AT_type        : <0x385>
+DW_AT_name        : (indirect string, offset: 0x482): ucontext_t
 DW_AT_decl_file   : 5
-DW_AT_decl_line   : 96
-<1><384>
+DW_AT_decl_line   : 101
+<1><385>
 Abbrev Number: 16 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x390): ucontext
+DW_AT_name        : (indirect string, offset: 0x479): ucontext
 DW_AT_byte_size   : 5056
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 85
-<2><38d>
+<2><38e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x25f): uc_flags
-DW_AT_type        : <0x403>
+DW_AT_name        : (indirect string, offset: 0x329): uc_flags
+DW_AT_type        : <0x42f>
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 86
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><39b>
+<2><39c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x27a): uc_link
-DW_AT_type        : <0x40a>
+DW_AT_name        : (indirect string, offset: 0x344): uc_link
+DW_AT_type        : <0x436>
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 87
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><3a9>
+<2><3aa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x282): uc_stack
-DW_AT_type        : <0x40f>
+DW_AT_name        : (indirect string, offset: 0x34c): uc_stack
+DW_AT_type        : <0x43b>
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 88
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><3b7>
+<2><3b8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2bd): uc_mcontext
-DW_AT_type        : <0x458>
+DW_AT_name        : (indirect string, offset: 0x387): uc_mcontext
+DW_AT_type        : <0x484>
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 89
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><3c5>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x33a): uc_sigmask
-DW_AT_type        : <0x505>
+<2><3c6>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_type        : <0x3d1>
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 90
 DW_AT_data_member_location: 3 byte block: 23 c0 22 	(DW_OP_plus_uconst: 4416)
-<2><3d4>
+<2><3d1>
+Abbrev Number: 7 (DW_TAG_union_type)
+DW_AT_byte_size   : 8
+DW_AT_decl_file   : 5
+DW_AT_decl_line   : 90
+<3><3d5>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_type        : <0x3df>
+DW_AT_decl_file   : 5
+DW_AT_decl_line   : 91
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><3df>
+Abbrev Number: 8 (DW_TAG_structure_type)
+DW_AT_byte_size   : 8
+DW_AT_decl_file   : 5
+DW_AT_decl_line   : 91
+<4><3e3>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x352): __padding_rt_sigset
-DW_AT_type        : <0x530>
+DW_AT_name        : (indirect string, offset: 0x404): uc_sigmask
+DW_AT_type        : <0x531>
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 92
-DW_AT_data_member_location: 3 byte block: 23 c4 22 	(DW_OP_plus_uconst: 4420)
-<2><3e3>
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<4><3f1>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x37a): __padding
-DW_AT_type        : <0x546>
+DW_AT_name        : (indirect string, offset: 0x41c): __padding_rt_sigset
+DW_AT_type        : <0x55c>
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 94
-DW_AT_data_member_location: 3 byte block: 23 c8 22 	(DW_OP_plus_uconst: 4424)
-<2><3f2>
-Abbrev Number: 17 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x384): uc_regspace
-DW_AT_type        : <0x553>
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<3><400>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x444): uc_sigmask64
+DW_AT_type        : <0x572>
 DW_AT_decl_file   : 5
-DW_AT_decl_line   : 95
+DW_AT_decl_line   : 96
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><40f>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x463): __padding
+DW_AT_type        : <0x59d>
+DW_AT_decl_file   : 5
+DW_AT_decl_line   : 99
+DW_AT_data_member_location: 3 byte block: 23 c8 22 	(DW_OP_plus_uconst: 4424)
+<2><41e>
+Abbrev Number: 17 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x46d): uc_regspace
+DW_AT_type        : <0x5aa>
+DW_AT_decl_file   : 5
+DW_AT_decl_line   : 100
 Unknown AT value: 88: 8
 DW_AT_data_member_location: 3 byte block: 23 c0 23 	(DW_OP_plus_uconst: 4544)
-<1><403>
+<1><42f>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x268): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x332): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><40a>
+<1><436>
 Abbrev Number: 18 (DW_TAG_pointer_type)
-DW_AT_type        : <0x384>
-<1><40f>
+DW_AT_type        : <0x385>
+<1><43b>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x41a>
-DW_AT_name        : (indirect string, offset: 0x2b5): stack_t
+DW_AT_type        : <0x446>
+DW_AT_name        : (indirect string, offset: 0x37f): stack_t
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 97
-<1><41a>
+<1><446>
 Abbrev Number: 6 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x2a9): sigaltstack
+DW_AT_name        : (indirect string, offset: 0x373): sigaltstack
 DW_AT_byte_size   : 12
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 93
-<2><422>
+<2><44e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x28b): ss_sp
-DW_AT_type        : <0x349>
+DW_AT_name        : (indirect string, offset: 0x355): ss_sp
+DW_AT_type        : <0x34a>
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 94
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><430>
+<2><45c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x291): ss_flags
-DW_AT_type        : <0x2c2>
+DW_AT_name        : (indirect string, offset: 0x35b): ss_flags
+DW_AT_type        : <0x2c3>
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 95
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><43e>
+<2><46a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x29a): ss_size
-DW_AT_type        : <0x44d>
+DW_AT_name        : (indirect string, offset: 0x364): ss_size
+DW_AT_type        : <0x479>
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 96
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><44d>
+<1><479>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2f3>
-DW_AT_name        : (indirect string, offset: 0x2a2): size_t
+DW_AT_type        : <0x2f4>
+DW_AT_name        : (indirect string, offset: 0x36c): size_t
 DW_AT_decl_file   : 7
 DW_AT_decl_line   : 62
-<1><458>
+<1><484>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x463>
-DW_AT_name        : (indirect string, offset: 0x32f): mcontext_t
+DW_AT_type        : <0x48f>
+DW_AT_name        : (indirect string, offset: 0x3f9): mcontext_t
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 83
-<1><463>
+<1><48f>
 Abbrev Number: 16 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x324): sigcontext
+DW_AT_name        : (indirect string, offset: 0x3ee): sigcontext
 DW_AT_byte_size   : 4384
 DW_AT_decl_file   : 8
-DW_AT_decl_line   : 22
-<2><46c>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2c9): fault_address
-DW_AT_type        : <0x4c6>
-DW_AT_decl_file   : 8
 DW_AT_decl_line   : 23
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><47a>
+<2><498>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2f4): regs
-DW_AT_type        : <0x4d8>
+DW_AT_name        : (indirect string, offset: 0x393): fault_address
+DW_AT_type        : <0x4f2>
 DW_AT_decl_file   : 8
 DW_AT_decl_line   : 24
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><488>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2f9): sp
-DW_AT_type        : <0x4c6>
-DW_AT_decl_file   : 8
-DW_AT_decl_line   : 25
-DW_AT_data_member_location: 3 byte block: 23 80 2 	(DW_OP_plus_uconst: 256)
-<2><497>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2fc): pc
-DW_AT_type        : <0x4c6>
-DW_AT_decl_file   : 8
-DW_AT_decl_line   : 26
-DW_AT_data_member_location: 3 byte block: 23 88 2 	(DW_OP_plus_uconst: 264)
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
 <2><4a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2ff): pstate
-DW_AT_type        : <0x4c6>
+DW_AT_name        : (indirect string, offset: 0x3be): regs
+DW_AT_type        : <0x504>
+DW_AT_decl_file   : 8
+DW_AT_decl_line   : 25
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><4b4>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3c3): sp
+DW_AT_type        : <0x4f2>
+DW_AT_decl_file   : 8
+DW_AT_decl_line   : 26
+DW_AT_data_member_location: 3 byte block: 23 80 2 	(DW_OP_plus_uconst: 256)
+<2><4c3>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3c6): pc
+DW_AT_type        : <0x4f2>
 DW_AT_decl_file   : 8
 DW_AT_decl_line   : 27
-DW_AT_data_member_location: 3 byte block: 23 90 2 	(DW_OP_plus_uconst: 272)
-<2><4b5>
-Abbrev Number: 17 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x306): __reserved
-DW_AT_type        : <0x4e5>
+DW_AT_data_member_location: 3 byte block: 23 88 2 	(DW_OP_plus_uconst: 264)
+<2><4d2>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3c9): pstate
+DW_AT_type        : <0x4f2>
 DW_AT_decl_file   : 8
 DW_AT_decl_line   : 28
+DW_AT_data_member_location: 3 byte block: 23 90 2 	(DW_OP_plus_uconst: 272)
+<2><4e1>
+Abbrev Number: 17 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3d0): __reserved
+DW_AT_type        : <0x511>
+DW_AT_decl_file   : 8
+DW_AT_decl_line   : 29
 Unknown AT value: 88: 16
 DW_AT_data_member_location: 3 byte block: 23 a0 2 	(DW_OP_plus_uconst: 288)
-<1><4c6>
+<1><4f2>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x4d1>
-DW_AT_name        : (indirect string, offset: 0x2ee): __u64
+DW_AT_type        : <0x4fd>
+DW_AT_name        : (indirect string, offset: 0x3b8): __u64
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 31
-<1><4d1>
+<1><4fd>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x2d7): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x3a1): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
-<1><4d8>
+<1><504>
 Abbrev Number: 11 (DW_TAG_array_type)
-DW_AT_type        : <0x4c6>
-<2><4dd>
+DW_AT_type        : <0x4f2>
+<2><509>
 Abbrev Number: 12 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2d6>
+DW_AT_type        : <0x2d7>
 DW_AT_lower_bound : 0
 DW_AT_count       : 31
-<1><4e5>
+<1><511>
 Abbrev Number: 11 (DW_TAG_array_type)
-DW_AT_type        : <0x4f3>
-<2><4ea>
+DW_AT_type        : <0x51f>
+<2><516>
 Abbrev Number: 19 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2d6>
+DW_AT_type        : <0x2d7>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4096
-<1><4f3>
+<1><51f>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x4fe>
-DW_AT_name        : (indirect string, offset: 0x31f): __u8
+DW_AT_type        : <0x52a>
+DW_AT_name        : (indirect string, offset: 0x3e9): __u8
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 24
-<1><4fe>
+<1><52a>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x311): unsigned char
+DW_AT_name        : (indirect string, offset: 0x3db): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><505>
+<1><531>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x510>
-DW_AT_name        : (indirect string, offset: 0x349): sigset_t
+DW_AT_type        : <0x53c>
+DW_AT_name        : (indirect string, offset: 0x413): sigset_t
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 79
-<1><510>
+<1><53c>
 Abbrev Number: 8 (DW_TAG_structure_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 77
-<2><514>
+<2><540>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x345): sig
-DW_AT_type        : <0x523>
+DW_AT_name        : (indirect string, offset: 0x40f): sig
+DW_AT_type        : <0x54f>
 DW_AT_decl_file   : 6
 DW_AT_decl_line   : 78
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><523>
+<1><54f>
 Abbrev Number: 11 (DW_TAG_array_type)
-DW_AT_type        : <0x403>
-<2><528>
+DW_AT_type        : <0x42f>
+<2><554>
 Abbrev Number: 12 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2d6>
+DW_AT_type        : <0x2d7>
 DW_AT_lower_bound : 0
 DW_AT_count       : 1
-<1><530>
+<1><55c>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x53b>
-DW_AT_name        : (indirect string, offset: 0x371): uint32_t
+DW_AT_type        : <0x567>
+DW_AT_name        : (indirect string, offset: 0x43b): uint32_t
 DW_AT_decl_file   : 9
 DW_AT_decl_line   : 65
-<1><53b>
+<1><567>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2f3>
-DW_AT_name        : (indirect string, offset: 0x366): __uint32_t
+DW_AT_type        : <0x2f4>
+DW_AT_name        : (indirect string, offset: 0x430): __uint32_t
 DW_AT_decl_file   : 9
 DW_AT_decl_line   : 41
-<1><546>
+<1><572>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0x57d>
+DW_AT_name        : (indirect string, offset: 0x458): sigset64_t
+DW_AT_decl_file   : 10
+DW_AT_decl_line   : 67
+<1><57d>
+Abbrev Number: 8 (DW_TAG_structure_type)
+DW_AT_byte_size   : 8
+DW_AT_decl_file   : 10
+DW_AT_decl_line   : 67
+<2><581>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x451): __bits
+DW_AT_type        : <0x590>
+DW_AT_decl_file   : 10
+DW_AT_decl_line   : 67
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><590>
 Abbrev Number: 11 (DW_TAG_array_type)
-DW_AT_type        : <0x312>
-<2><54b>
+DW_AT_type        : <0x42f>
+<2><595>
 Abbrev Number: 12 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2d6>
+DW_AT_type        : <0x2d7>
+DW_AT_lower_bound : 0
+DW_AT_count       : 2
+<1><59d>
+Abbrev Number: 11 (DW_TAG_array_type)
+DW_AT_type        : <0x313>
+<2><5a2>
+Abbrev Number: 12 (DW_TAG_subrange_type)
+DW_AT_type        : <0x2d7>
 DW_AT_lower_bound : 0
 DW_AT_count       : 120
-<1><553>
+<1><5aa>
 Abbrev Number: 11 (DW_TAG_array_type)
-DW_AT_type        : <0x403>
-<2><558>
+DW_AT_type        : <0x42f>
+<2><5af>
 Abbrev Number: 12 (DW_TAG_subrange_type)
-DW_AT_type        : <0x2d6>
+DW_AT_type        : <0x2d7>
 DW_AT_lower_bound : 0
 DW_AT_count       : 128
diff --git a/mpers-m32/struct_rt_sigframe.h b/mpers-m32/struct_rt_sigframe.h
index c9e2985..30f64f4 100644
--- a/mpers-m32/struct_rt_sigframe.h
+++ b/mpers-m32/struct_rt_sigframe.h
@@ -82,10 +82,17 @@
 unsigned char mpers_filler_4[8];
 unsigned char __reserved[4096];
 } ATTRIBUTE_PACKED uc_mcontext;
+union {
+struct {
 struct {
 uint32_t sig[1];
 } ATTRIBUTE_PACKED uc_sigmask;
 uint32_t __padding_rt_sigset;
+} ATTRIBUTE_PACKED ;
+struct {
+uint32_t __bits[2];
+} ATTRIBUTE_PACKED uc_sigmask64;
+} ;
 char __padding[120];
 uint32_t uc_regspace[128];
 } ATTRIBUTE_PACKED uc;
diff --git a/mpers-m32/struct_rtc_pll_info.d1 b/mpers-m32/struct_rtc_pll_info.d1
index 3f5a75a..fe744c5 100644
--- a/mpers-m32/struct_rtc_pll_info.d1
+++ b/mpers-m32/struct_rtc_pll_info.d1
@@ -1,83 +1,84 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xb1 (32-bit)
+   Length:        0xb2 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_rtc_pll_info.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_rtc_pll_info.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5d): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x98): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 2
-    <29>   DW_AT_decl_line   : 38
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x108): struct_rtc_pll_info
-    <39>   DW_AT_decl_file   : 2
-    <3a>   DW_AT_decl_line   : 36
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xfb): rtc_pll_info
-    <40>   DW_AT_byte_size   : 28
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 37
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa9): pll_ctrl
-    <48>   DW_AT_type        : <0xa6>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 38
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xb6): pll_value
-    <56>   DW_AT_type        : <0xa6>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 39
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xc0): pll_max
-    <64>   DW_AT_type        : <0xa6>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 40
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xc8): pll_min
-    <72>   DW_AT_type        : <0xa6>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 41
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0xd0): pll_posmult
-    <80>   DW_AT_type        : <0xa6>
-    <84>   DW_AT_decl_file   : 1
-    <85>   DW_AT_decl_line   : 42
-    <86>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0xdc): pll_negmult
-    <8e>   DW_AT_type        : <0xa6>
-    <92>   DW_AT_decl_file   : 1
-    <93>   DW_AT_decl_line   : 43
-    <94>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0xe8): pll_clock
-    <9c>   DW_AT_type        : <0xad>
-    <a0>   DW_AT_decl_file   : 1
-    <a1>   DW_AT_decl_line   : 44
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><a5>: Abbrev Number: 0
- <1><a6>: Abbrev Number: 6 (DW_TAG_base_type)
-    <a7>   DW_AT_name        : (indirect string, offset: 0xb2): int
-    <ab>   DW_AT_encoding    : 5	(signed)
-    <ac>   DW_AT_byte_size   : 4
- <1><ad>: Abbrev Number: 6 (DW_TAG_base_type)
-    <ae>   DW_AT_name        : (indirect string, offset: 0xf2): long int
-    <b2>   DW_AT_encoding    : 5	(signed)
-    <b3>   DW_AT_byte_size   : 4
- <1><b4>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x127): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x162): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 2
+    <2a>   DW_AT_decl_line   : 38
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1d2): struct_rtc_pll_info
+    <3a>   DW_AT_decl_file   : 2
+    <3b>   DW_AT_decl_line   : 36
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1c5): rtc_pll_info
+    <41>   DW_AT_byte_size   : 28
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 37
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x173): pll_ctrl
+    <49>   DW_AT_type        : <0xa7>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 38
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x180): pll_value
+    <57>   DW_AT_type        : <0xa7>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 39
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x18a): pll_max
+    <65>   DW_AT_type        : <0xa7>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 40
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x192): pll_min
+    <73>   DW_AT_type        : <0xa7>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 41
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x19a): pll_posmult
+    <81>   DW_AT_type        : <0xa7>
+    <85>   DW_AT_decl_file   : 1
+    <86>   DW_AT_decl_line   : 42
+    <87>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1a6): pll_negmult
+    <8f>   DW_AT_type        : <0xa7>
+    <93>   DW_AT_decl_file   : 1
+    <94>   DW_AT_decl_line   : 43
+    <95>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1b2): pll_clock
+    <9d>   DW_AT_type        : <0xae>
+    <a1>   DW_AT_decl_file   : 1
+    <a2>   DW_AT_decl_line   : 44
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><a6>: Abbrev Number: 0
+ <1><a7>: Abbrev Number: 6 (DW_TAG_base_type)
+    <a8>   DW_AT_name        : (indirect string, offset: 0x17c): int
+    <ac>   DW_AT_encoding    : 5	(signed)
+    <ad>   DW_AT_byte_size   : 4
+ <1><ae>: Abbrev Number: 6 (DW_TAG_base_type)
+    <af>   DW_AT_name        : (indirect string, offset: 0x1bc): long int
+    <b3>   DW_AT_encoding    : 5	(signed)
+    <b4>   DW_AT_byte_size   : 4
+ <1><b5>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_rtc_pll_info.d2 b/mpers-m32/struct_rtc_pll_info.d2
index 539a972..7ba6a7e 100644
--- a/mpers-m32/struct_rtc_pll_info.d2
+++ b/mpers-m32/struct_rtc_pll_info.d2
@@ -1,79 +1,79 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x98): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x162): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 38
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x108): struct_rtc_pll_info
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1d2): struct_rtc_pll_info
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 36
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xfb): rtc_pll_info
+DW_AT_name        : (indirect string, offset: 0x1c5): rtc_pll_info
 DW_AT_byte_size   : 28
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 37
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa9): pll_ctrl
-DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x173): pll_ctrl
+DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb6): pll_value
-DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x180): pll_value
+DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc0): pll_max
-DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x18a): pll_max
+DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc8): pll_min
-DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x192): pll_min
+DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd0): pll_posmult
-DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x19a): pll_posmult
+DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 42
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdc): pll_negmult
-DW_AT_type        : <0xa6>
+DW_AT_name        : (indirect string, offset: 0x1a6): pll_negmult
+DW_AT_type        : <0xa7>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 43
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe8): pll_clock
-DW_AT_type        : <0xad>
+DW_AT_name        : (indirect string, offset: 0x1b2): pll_clock
+DW_AT_type        : <0xae>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 44
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<1><a6>
+<1><a7>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb2): int
+DW_AT_name        : (indirect string, offset: 0x17c): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><ad>
+<1><ae>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xf2): long int
+DW_AT_name        : (indirect string, offset: 0x1bc): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_sg_io_hdr.d1 b/mpers-m32/struct_sg_io_hdr.d1
index a373de4..3b8e63a 100644
--- a/mpers-m32/struct_sg_io_hdr.d1
+++ b/mpers-m32/struct_sg_io_hdr.d1
@@ -1,184 +1,185 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x197 (32-bit)
+   Length:        0x198 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_sg_io_hdr.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_sg_io_hdr.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5a): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 2
-    <29>   DW_AT_decl_line   : 41
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x1a9): struct_sg_io_hdr
-    <39>   DW_AT_decl_file   : 2
-    <3a>   DW_AT_decl_line   : 37
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x19f): sg_io_hdr
-    <40>   DW_AT_byte_size   : 64
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 26
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa6): interface_id
-    <48>   DW_AT_type        : <0x178>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 27
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xb7): dxfer_direction
-    <56>   DW_AT_type        : <0x178>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 28
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xc7): cmd_len
-    <64>   DW_AT_type        : <0x17f>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 29
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xdd): mx_sb_len
-    <72>   DW_AT_type        : <0x17f>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 30
-    <78>   DW_AT_data_member_location: 2 byte block: 23 9 	(DW_OP_plus_uconst: 9)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0xe7): iovec_count
-    <80>   DW_AT_type        : <0x186>
-    <84>   DW_AT_decl_file   : 1
-    <85>   DW_AT_decl_line   : 31
-    <86>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x102): dxfer_len
-    <8e>   DW_AT_type        : <0x18d>
-    <92>   DW_AT_decl_file   : 1
-    <93>   DW_AT_decl_line   : 32
-    <94>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0x119): dxferp
-    <9c>   DW_AT_type        : <0x194>
-    <a0>   DW_AT_decl_file   : 1
-    <a1>   DW_AT_decl_line   : 33
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0x120): cmdp
-    <aa>   DW_AT_type        : <0x195>
-    <ae>   DW_AT_decl_file   : 1
-    <af>   DW_AT_decl_line   : 34
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0x125): sbp
-    <b8>   DW_AT_type        : <0x194>
-    <bc>   DW_AT_decl_file   : 1
-    <bd>   DW_AT_decl_line   : 35
-    <be>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x129): timeout
-    <c6>   DW_AT_type        : <0x18d>
-    <ca>   DW_AT_decl_file   : 1
-    <cb>   DW_AT_decl_line   : 36
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0x131): flags
-    <d4>   DW_AT_type        : <0x18d>
-    <d8>   DW_AT_decl_file   : 1
-    <d9>   DW_AT_decl_line   : 37
-    <da>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><dd>: Abbrev Number: 5 (DW_TAG_member)
-    <de>   DW_AT_name        : (indirect string, offset: 0x137): pack_id
-    <e2>   DW_AT_type        : <0x178>
-    <e6>   DW_AT_decl_file   : 1
-    <e7>   DW_AT_decl_line   : 38
-    <e8>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><eb>: Abbrev Number: 5 (DW_TAG_member)
-    <ec>   DW_AT_name        : (indirect string, offset: 0x13f): usr_ptr
-    <f0>   DW_AT_type        : <0x194>
-    <f4>   DW_AT_decl_file   : 1
-    <f5>   DW_AT_decl_line   : 39
-    <f6>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><f9>: Abbrev Number: 5 (DW_TAG_member)
-    <fa>   DW_AT_name        : (indirect string, offset: 0x147): status
-    <fe>   DW_AT_type        : <0x17f>
-    <102>   DW_AT_decl_file   : 1
-    <103>   DW_AT_decl_line   : 40
-    <104>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><107>: Abbrev Number: 5 (DW_TAG_member)
-    <108>   DW_AT_name        : (indirect string, offset: 0x14e): masked_status
-    <10c>   DW_AT_type        : <0x17f>
-    <110>   DW_AT_decl_file   : 1
-    <111>   DW_AT_decl_line   : 41
-    <112>   DW_AT_data_member_location: 2 byte block: 23 2d 	(DW_OP_plus_uconst: 45)
- <2><115>: Abbrev Number: 5 (DW_TAG_member)
-    <116>   DW_AT_name        : (indirect string, offset: 0x15c): msg_status
-    <11a>   DW_AT_type        : <0x17f>
-    <11e>   DW_AT_decl_file   : 1
-    <11f>   DW_AT_decl_line   : 42
-    <120>   DW_AT_data_member_location: 2 byte block: 23 2e 	(DW_OP_plus_uconst: 46)
- <2><123>: Abbrev Number: 5 (DW_TAG_member)
-    <124>   DW_AT_name        : (indirect string, offset: 0x167): sb_len_wr
-    <128>   DW_AT_type        : <0x17f>
-    <12c>   DW_AT_decl_file   : 1
-    <12d>   DW_AT_decl_line   : 43
-    <12e>   DW_AT_data_member_location: 2 byte block: 23 2f 	(DW_OP_plus_uconst: 47)
- <2><131>: Abbrev Number: 5 (DW_TAG_member)
-    <132>   DW_AT_name        : (indirect string, offset: 0x171): host_status
-    <136>   DW_AT_type        : <0x186>
-    <13a>   DW_AT_decl_file   : 1
-    <13b>   DW_AT_decl_line   : 44
-    <13c>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><13f>: Abbrev Number: 5 (DW_TAG_member)
-    <140>   DW_AT_name        : (indirect string, offset: 0x17d): driver_status
-    <144>   DW_AT_type        : <0x186>
-    <148>   DW_AT_decl_file   : 1
-    <149>   DW_AT_decl_line   : 45
-    <14a>   DW_AT_data_member_location: 2 byte block: 23 32 	(DW_OP_plus_uconst: 50)
- <2><14d>: Abbrev Number: 5 (DW_TAG_member)
-    <14e>   DW_AT_name        : (indirect string, offset: 0x18b): resid
-    <152>   DW_AT_type        : <0x178>
-    <156>   DW_AT_decl_file   : 1
-    <157>   DW_AT_decl_line   : 46
-    <158>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <2><15b>: Abbrev Number: 5 (DW_TAG_member)
-    <15c>   DW_AT_name        : (indirect string, offset: 0x191): duration
-    <160>   DW_AT_type        : <0x18d>
-    <164>   DW_AT_decl_file   : 1
-    <165>   DW_AT_decl_line   : 47
-    <166>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><169>: Abbrev Number: 5 (DW_TAG_member)
-    <16a>   DW_AT_name        : (indirect string, offset: 0x19a): info
-    <16e>   DW_AT_type        : <0x18d>
-    <172>   DW_AT_decl_file   : 1
-    <173>   DW_AT_decl_line   : 48
-    <174>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
- <2><177>: Abbrev Number: 0
- <1><178>: Abbrev Number: 6 (DW_TAG_base_type)
-    <179>   DW_AT_name        : (indirect string, offset: 0xb3): int
-    <17d>   DW_AT_encoding    : 5	(signed)
-    <17e>   DW_AT_byte_size   : 4
- <1><17f>: Abbrev Number: 6 (DW_TAG_base_type)
-    <180>   DW_AT_name        : (indirect string, offset: 0xcf): unsigned char
-    <184>   DW_AT_encoding    : 8	(unsigned char)
-    <185>   DW_AT_byte_size   : 1
- <1><186>: Abbrev Number: 6 (DW_TAG_base_type)
-    <187>   DW_AT_name        : (indirect string, offset: 0xf3): unsigned short
-    <18b>   DW_AT_encoding    : 7	(unsigned)
-    <18c>   DW_AT_byte_size   : 2
- <1><18d>: Abbrev Number: 6 (DW_TAG_base_type)
-    <18e>   DW_AT_name        : (indirect string, offset: 0x10c): unsigned int
-    <192>   DW_AT_encoding    : 7	(unsigned)
-    <193>   DW_AT_byte_size   : 4
- <1><194>: Abbrev Number: 7 (DW_TAG_pointer_type)
- <1><195>: Abbrev Number: 8 (DW_TAG_pointer_type)
-    <196>   DW_AT_type        : <0x17f>
- <1><19a>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x124): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 2
+    <2a>   DW_AT_decl_line   : 41
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x273): struct_sg_io_hdr
+    <3a>   DW_AT_decl_file   : 2
+    <3b>   DW_AT_decl_line   : 37
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x269): sg_io_hdr
+    <41>   DW_AT_byte_size   : 64
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 26
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x170): interface_id
+    <49>   DW_AT_type        : <0x179>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 27
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x181): dxfer_direction
+    <57>   DW_AT_type        : <0x179>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 28
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x191): cmd_len
+    <65>   DW_AT_type        : <0x180>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 29
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1a7): mx_sb_len
+    <73>   DW_AT_type        : <0x180>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 30
+    <79>   DW_AT_data_member_location: 2 byte block: 23 9 	(DW_OP_plus_uconst: 9)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1b1): iovec_count
+    <81>   DW_AT_type        : <0x187>
+    <85>   DW_AT_decl_file   : 1
+    <86>   DW_AT_decl_line   : 31
+    <87>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1cc): dxfer_len
+    <8f>   DW_AT_type        : <0x18e>
+    <93>   DW_AT_decl_file   : 1
+    <94>   DW_AT_decl_line   : 32
+    <95>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1e3): dxferp
+    <9d>   DW_AT_type        : <0x195>
+    <a1>   DW_AT_decl_file   : 1
+    <a2>   DW_AT_decl_line   : 33
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1ea): cmdp
+    <ab>   DW_AT_type        : <0x196>
+    <af>   DW_AT_decl_file   : 1
+    <b0>   DW_AT_decl_line   : 34
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x1ef): sbp
+    <b9>   DW_AT_type        : <0x195>
+    <bd>   DW_AT_decl_file   : 1
+    <be>   DW_AT_decl_line   : 35
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x1f3): timeout
+    <c7>   DW_AT_type        : <0x18e>
+    <cb>   DW_AT_decl_file   : 1
+    <cc>   DW_AT_decl_line   : 36
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x1fb): flags
+    <d5>   DW_AT_type        : <0x18e>
+    <d9>   DW_AT_decl_file   : 1
+    <da>   DW_AT_decl_line   : 37
+    <db>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><de>: Abbrev Number: 5 (DW_TAG_member)
+    <df>   DW_AT_name        : (indirect string, offset: 0x201): pack_id
+    <e3>   DW_AT_type        : <0x179>
+    <e7>   DW_AT_decl_file   : 1
+    <e8>   DW_AT_decl_line   : 38
+    <e9>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><ec>: Abbrev Number: 5 (DW_TAG_member)
+    <ed>   DW_AT_name        : (indirect string, offset: 0x209): usr_ptr
+    <f1>   DW_AT_type        : <0x195>
+    <f5>   DW_AT_decl_file   : 1
+    <f6>   DW_AT_decl_line   : 39
+    <f7>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><fa>: Abbrev Number: 5 (DW_TAG_member)
+    <fb>   DW_AT_name        : (indirect string, offset: 0x211): status
+    <ff>   DW_AT_type        : <0x180>
+    <103>   DW_AT_decl_file   : 1
+    <104>   DW_AT_decl_line   : 40
+    <105>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><108>: Abbrev Number: 5 (DW_TAG_member)
+    <109>   DW_AT_name        : (indirect string, offset: 0x218): masked_status
+    <10d>   DW_AT_type        : <0x180>
+    <111>   DW_AT_decl_file   : 1
+    <112>   DW_AT_decl_line   : 41
+    <113>   DW_AT_data_member_location: 2 byte block: 23 2d 	(DW_OP_plus_uconst: 45)
+ <2><116>: Abbrev Number: 5 (DW_TAG_member)
+    <117>   DW_AT_name        : (indirect string, offset: 0x226): msg_status
+    <11b>   DW_AT_type        : <0x180>
+    <11f>   DW_AT_decl_file   : 1
+    <120>   DW_AT_decl_line   : 42
+    <121>   DW_AT_data_member_location: 2 byte block: 23 2e 	(DW_OP_plus_uconst: 46)
+ <2><124>: Abbrev Number: 5 (DW_TAG_member)
+    <125>   DW_AT_name        : (indirect string, offset: 0x231): sb_len_wr
+    <129>   DW_AT_type        : <0x180>
+    <12d>   DW_AT_decl_file   : 1
+    <12e>   DW_AT_decl_line   : 43
+    <12f>   DW_AT_data_member_location: 2 byte block: 23 2f 	(DW_OP_plus_uconst: 47)
+ <2><132>: Abbrev Number: 5 (DW_TAG_member)
+    <133>   DW_AT_name        : (indirect string, offset: 0x23b): host_status
+    <137>   DW_AT_type        : <0x187>
+    <13b>   DW_AT_decl_file   : 1
+    <13c>   DW_AT_decl_line   : 44
+    <13d>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><140>: Abbrev Number: 5 (DW_TAG_member)
+    <141>   DW_AT_name        : (indirect string, offset: 0x247): driver_status
+    <145>   DW_AT_type        : <0x187>
+    <149>   DW_AT_decl_file   : 1
+    <14a>   DW_AT_decl_line   : 45
+    <14b>   DW_AT_data_member_location: 2 byte block: 23 32 	(DW_OP_plus_uconst: 50)
+ <2><14e>: Abbrev Number: 5 (DW_TAG_member)
+    <14f>   DW_AT_name        : (indirect string, offset: 0x255): resid
+    <153>   DW_AT_type        : <0x179>
+    <157>   DW_AT_decl_file   : 1
+    <158>   DW_AT_decl_line   : 46
+    <159>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <2><15c>: Abbrev Number: 5 (DW_TAG_member)
+    <15d>   DW_AT_name        : (indirect string, offset: 0x25b): duration
+    <161>   DW_AT_type        : <0x18e>
+    <165>   DW_AT_decl_file   : 1
+    <166>   DW_AT_decl_line   : 47
+    <167>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><16a>: Abbrev Number: 5 (DW_TAG_member)
+    <16b>   DW_AT_name        : (indirect string, offset: 0x264): info
+    <16f>   DW_AT_type        : <0x18e>
+    <173>   DW_AT_decl_file   : 1
+    <174>   DW_AT_decl_line   : 48
+    <175>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+ <2><178>: Abbrev Number: 0
+ <1><179>: Abbrev Number: 6 (DW_TAG_base_type)
+    <17a>   DW_AT_name        : (indirect string, offset: 0x17d): int
+    <17e>   DW_AT_encoding    : 5	(signed)
+    <17f>   DW_AT_byte_size   : 4
+ <1><180>: Abbrev Number: 6 (DW_TAG_base_type)
+    <181>   DW_AT_name        : (indirect string, offset: 0x199): unsigned char
+    <185>   DW_AT_encoding    : 8	(unsigned char)
+    <186>   DW_AT_byte_size   : 1
+ <1><187>: Abbrev Number: 6 (DW_TAG_base_type)
+    <188>   DW_AT_name        : (indirect string, offset: 0x1bd): unsigned short
+    <18c>   DW_AT_encoding    : 7	(unsigned)
+    <18d>   DW_AT_byte_size   : 2
+ <1><18e>: Abbrev Number: 6 (DW_TAG_base_type)
+    <18f>   DW_AT_name        : (indirect string, offset: 0x1d6): unsigned int
+    <193>   DW_AT_encoding    : 7	(unsigned)
+    <194>   DW_AT_byte_size   : 4
+ <1><195>: Abbrev Number: 7 (DW_TAG_pointer_type)
+ <1><196>: Abbrev Number: 8 (DW_TAG_pointer_type)
+    <197>   DW_AT_type        : <0x180>
+ <1><19b>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_sg_io_hdr.d2 b/mpers-m32/struct_sg_io_hdr.d2
index 34a80b4..03dbaee 100644
--- a/mpers-m32/struct_sg_io_hdr.d2
+++ b/mpers-m32/struct_sg_io_hdr.d2
@@ -1,199 +1,199 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 41
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x1a9): struct_sg_io_hdr
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x273): struct_sg_io_hdr
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 37
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x19f): sg_io_hdr
+DW_AT_name        : (indirect string, offset: 0x269): sg_io_hdr
 DW_AT_byte_size   : 64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa6): interface_id
-DW_AT_type        : <0x178>
+DW_AT_name        : (indirect string, offset: 0x170): interface_id
+DW_AT_type        : <0x179>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 27
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb7): dxfer_direction
-DW_AT_type        : <0x178>
+DW_AT_name        : (indirect string, offset: 0x181): dxfer_direction
+DW_AT_type        : <0x179>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc7): cmd_len
-DW_AT_type        : <0x17f>
+DW_AT_name        : (indirect string, offset: 0x191): cmd_len
+DW_AT_type        : <0x180>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdd): mx_sb_len
-DW_AT_type        : <0x17f>
+DW_AT_name        : (indirect string, offset: 0x1a7): mx_sb_len
+DW_AT_type        : <0x180>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 9 	(DW_OP_plus_uconst: 9)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe7): iovec_count
-DW_AT_type        : <0x186>
+DW_AT_name        : (indirect string, offset: 0x1b1): iovec_count
+DW_AT_type        : <0x187>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x102): dxfer_len
-DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x1cc): dxfer_len
+DW_AT_type        : <0x18e>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x119): dxferp
-DW_AT_type        : <0x194>
+DW_AT_name        : (indirect string, offset: 0x1e3): dxferp
+DW_AT_type        : <0x195>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x120): cmdp
-DW_AT_type        : <0x195>
+DW_AT_name        : (indirect string, offset: 0x1ea): cmdp
+DW_AT_type        : <0x196>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x125): sbp
-DW_AT_type        : <0x194>
+DW_AT_name        : (indirect string, offset: 0x1ef): sbp
+DW_AT_type        : <0x195>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 35
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x129): timeout
-DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x1f3): timeout
+DW_AT_type        : <0x18e>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><cf>
+<2><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x131): flags
-DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x1fb): flags
+DW_AT_type        : <0x18e>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><dd>
+<2><de>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x137): pack_id
-DW_AT_type        : <0x178>
+DW_AT_name        : (indirect string, offset: 0x201): pack_id
+DW_AT_type        : <0x179>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><eb>
+<2><ec>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13f): usr_ptr
-DW_AT_type        : <0x194>
+DW_AT_name        : (indirect string, offset: 0x209): usr_ptr
+DW_AT_type        : <0x195>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><f9>
+<2><fa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x147): status
-DW_AT_type        : <0x17f>
+DW_AT_name        : (indirect string, offset: 0x211): status
+DW_AT_type        : <0x180>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><107>
+<2><108>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14e): masked_status
-DW_AT_type        : <0x17f>
+DW_AT_name        : (indirect string, offset: 0x218): masked_status
+DW_AT_type        : <0x180>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 2d 	(DW_OP_plus_uconst: 45)
-<2><115>
+<2><116>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15c): msg_status
-DW_AT_type        : <0x17f>
+DW_AT_name        : (indirect string, offset: 0x226): msg_status
+DW_AT_type        : <0x180>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 42
 DW_AT_data_member_location: 2 byte block: 23 2e 	(DW_OP_plus_uconst: 46)
-<2><123>
+<2><124>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x167): sb_len_wr
-DW_AT_type        : <0x17f>
+DW_AT_name        : (indirect string, offset: 0x231): sb_len_wr
+DW_AT_type        : <0x180>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 43
 DW_AT_data_member_location: 2 byte block: 23 2f 	(DW_OP_plus_uconst: 47)
-<2><131>
+<2><132>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x171): host_status
-DW_AT_type        : <0x186>
+DW_AT_name        : (indirect string, offset: 0x23b): host_status
+DW_AT_type        : <0x187>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 44
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><13f>
+<2><140>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17d): driver_status
-DW_AT_type        : <0x186>
+DW_AT_name        : (indirect string, offset: 0x247): driver_status
+DW_AT_type        : <0x187>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 45
 DW_AT_data_member_location: 2 byte block: 23 32 	(DW_OP_plus_uconst: 50)
-<2><14d>
+<2><14e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x18b): resid
-DW_AT_type        : <0x178>
+DW_AT_name        : (indirect string, offset: 0x255): resid
+DW_AT_type        : <0x179>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 46
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<2><15b>
+<2><15c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x191): duration
-DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x25b): duration
+DW_AT_type        : <0x18e>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 47
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><169>
+<2><16a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x19a): info
-DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x264): info
+DW_AT_type        : <0x18e>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 48
 DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
-<1><178>
+<1><179>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb3): int
+DW_AT_name        : (indirect string, offset: 0x17d): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><17f>
+<1><180>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xcf): unsigned char
+DW_AT_name        : (indirect string, offset: 0x199): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><186>
+<1><187>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xf3): unsigned short
+DW_AT_name        : (indirect string, offset: 0x1bd): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><18d>
+<1><18e>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x10c): unsigned int
+DW_AT_name        : (indirect string, offset: 0x1d6): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><194>
-Abbrev Number: 7 (DW_TAG_pointer_type)
 <1><195>
+Abbrev Number: 7 (DW_TAG_pointer_type)
+<1><196>
 Abbrev Number: 8 (DW_TAG_pointer_type)
-DW_AT_type        : <0x17f>
+DW_AT_type        : <0x180>
diff --git a/mpers-m32/struct_sg_req_info.d1 b/mpers-m32/struct_sg_req_info.d1
index bfca2af..09a511d 100644
--- a/mpers-m32/struct_sg_req_info.d1
+++ b/mpers-m32/struct_sg_req_info.d1
@@ -1,94 +1,95 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xc7 (32-bit)
+   Length:        0xc8 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_sg_req_info.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_sg_req_info.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5c): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 2
-    <29>   DW_AT_decl_line   : 41
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x10f): struct_sg_req_info
-    <39>   DW_AT_decl_file   : 2
-    <3a>   DW_AT_decl_line   : 37
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x103): sg_req_info
-    <40>   DW_AT_byte_size   : 20
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 79
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa8): req_state
-    <48>   DW_AT_type        : <0xb4>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 80
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xb7): orphan
-    <56>   DW_AT_type        : <0xb4>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 81
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 1 	(DW_OP_plus_uconst: 1)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xbe): sg_io_owned
-    <64>   DW_AT_type        : <0xb4>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 82
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xca): problem
-    <72>   DW_AT_type        : <0xb4>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 83
-    <78>   DW_AT_data_member_location: 2 byte block: 23 3 	(DW_OP_plus_uconst: 3)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0xd2): pack_id
-    <80>   DW_AT_type        : <0xbb>
-    <84>   DW_AT_decl_file   : 1
-    <85>   DW_AT_decl_line   : 84
-    <86>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0xde): usr_ptr
-    <8e>   DW_AT_type        : <0xc2>
-    <92>   DW_AT_decl_file   : 1
-    <93>   DW_AT_decl_line   : 85
-    <94>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0xe6): duration
-    <9c>   DW_AT_type        : <0xc3>
-    <a0>   DW_AT_decl_file   : 1
-    <a1>   DW_AT_decl_line   : 86
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0xfc): unused
-    <aa>   DW_AT_type        : <0xbb>
-    <ae>   DW_AT_decl_file   : 1
-    <af>   DW_AT_decl_line   : 87
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><b3>: Abbrev Number: 0
- <1><b4>: Abbrev Number: 6 (DW_TAG_base_type)
-    <b5>   DW_AT_name        : (indirect string, offset: 0xb2): char
-    <b9>   DW_AT_encoding    : 8	(unsigned char)
-    <ba>   DW_AT_byte_size   : 1
- <1><bb>: Abbrev Number: 6 (DW_TAG_base_type)
-    <bc>   DW_AT_name        : (indirect string, offset: 0xda): int
-    <c0>   DW_AT_encoding    : 5	(signed)
-    <c1>   DW_AT_byte_size   : 4
- <1><c2>: Abbrev Number: 7 (DW_TAG_pointer_type)
- <1><c3>: Abbrev Number: 6 (DW_TAG_base_type)
-    <c4>   DW_AT_name        : (indirect string, offset: 0xef): unsigned int
-    <c8>   DW_AT_encoding    : 7	(unsigned)
-    <c9>   DW_AT_byte_size   : 4
- <1><ca>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x126): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 2
+    <2a>   DW_AT_decl_line   : 41
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1d9): struct_sg_req_info
+    <3a>   DW_AT_decl_file   : 2
+    <3b>   DW_AT_decl_line   : 37
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1cd): sg_req_info
+    <41>   DW_AT_byte_size   : 20
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 79
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x172): req_state
+    <49>   DW_AT_type        : <0xb5>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 80
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x181): orphan
+    <57>   DW_AT_type        : <0xb5>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 81
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 1 	(DW_OP_plus_uconst: 1)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x188): sg_io_owned
+    <65>   DW_AT_type        : <0xb5>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 82
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x194): problem
+    <73>   DW_AT_type        : <0xb5>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 83
+    <79>   DW_AT_data_member_location: 2 byte block: 23 3 	(DW_OP_plus_uconst: 3)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x19c): pack_id
+    <81>   DW_AT_type        : <0xbc>
+    <85>   DW_AT_decl_file   : 1
+    <86>   DW_AT_decl_line   : 84
+    <87>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1a8): usr_ptr
+    <8f>   DW_AT_type        : <0xc3>
+    <93>   DW_AT_decl_file   : 1
+    <94>   DW_AT_decl_line   : 85
+    <95>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1b0): duration
+    <9d>   DW_AT_type        : <0xc4>
+    <a1>   DW_AT_decl_file   : 1
+    <a2>   DW_AT_decl_line   : 86
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1c6): unused
+    <ab>   DW_AT_type        : <0xbc>
+    <af>   DW_AT_decl_file   : 1
+    <b0>   DW_AT_decl_line   : 87
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><b4>: Abbrev Number: 0
+ <1><b5>: Abbrev Number: 6 (DW_TAG_base_type)
+    <b6>   DW_AT_name        : (indirect string, offset: 0x17c): char
+    <ba>   DW_AT_encoding    : 8	(unsigned char)
+    <bb>   DW_AT_byte_size   : 1
+ <1><bc>: Abbrev Number: 6 (DW_TAG_base_type)
+    <bd>   DW_AT_name        : (indirect string, offset: 0x1a4): int
+    <c1>   DW_AT_encoding    : 5	(signed)
+    <c2>   DW_AT_byte_size   : 4
+ <1><c3>: Abbrev Number: 7 (DW_TAG_pointer_type)
+ <1><c4>: Abbrev Number: 6 (DW_TAG_base_type)
+    <c5>   DW_AT_name        : (indirect string, offset: 0x1b9): unsigned int
+    <c9>   DW_AT_encoding    : 7	(unsigned)
+    <ca>   DW_AT_byte_size   : 4
+ <1><cb>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_sg_req_info.d2 b/mpers-m32/struct_sg_req_info.d2
index ff6f83f..cf4defb 100644
--- a/mpers-m32/struct_sg_req_info.d2
+++ b/mpers-m32/struct_sg_req_info.d2
@@ -1,93 +1,93 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 41
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x10f): struct_sg_req_info
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1d9): struct_sg_req_info
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 37
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x103): sg_req_info
+DW_AT_name        : (indirect string, offset: 0x1cd): sg_req_info
 DW_AT_byte_size   : 20
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 79
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa8): req_state
-DW_AT_type        : <0xb4>
+DW_AT_name        : (indirect string, offset: 0x172): req_state
+DW_AT_type        : <0xb5>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 80
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb7): orphan
-DW_AT_type        : <0xb4>
+DW_AT_name        : (indirect string, offset: 0x181): orphan
+DW_AT_type        : <0xb5>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 81
 DW_AT_data_member_location: 2 byte block: 23 1 	(DW_OP_plus_uconst: 1)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xbe): sg_io_owned
-DW_AT_type        : <0xb4>
+DW_AT_name        : (indirect string, offset: 0x188): sg_io_owned
+DW_AT_type        : <0xb5>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 82
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xca): problem
-DW_AT_type        : <0xb4>
+DW_AT_name        : (indirect string, offset: 0x194): problem
+DW_AT_type        : <0xb5>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 83
 DW_AT_data_member_location: 2 byte block: 23 3 	(DW_OP_plus_uconst: 3)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd2): pack_id
-DW_AT_type        : <0xbb>
+DW_AT_name        : (indirect string, offset: 0x19c): pack_id
+DW_AT_type        : <0xbc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 84
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xde): usr_ptr
-DW_AT_type        : <0xc2>
+DW_AT_name        : (indirect string, offset: 0x1a8): usr_ptr
+DW_AT_type        : <0xc3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 85
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe6): duration
-DW_AT_type        : <0xc3>
+DW_AT_name        : (indirect string, offset: 0x1b0): duration
+DW_AT_type        : <0xc4>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 86
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfc): unused
-DW_AT_type        : <0xbb>
+DW_AT_name        : (indirect string, offset: 0x1c6): unused
+DW_AT_type        : <0xbc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 87
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<1><b4>
+<1><b5>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb2): char
+DW_AT_name        : (indirect string, offset: 0x17c): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><bb>
+<1><bc>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xda): int
+DW_AT_name        : (indirect string, offset: 0x1a4): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><c2>
-Abbrev Number: 7 (DW_TAG_pointer_type)
 <1><c3>
+Abbrev Number: 7 (DW_TAG_pointer_type)
+<1><c4>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xef): unsigned int
+DW_AT_name        : (indirect string, offset: 0x1b9): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_sigevent.d1 b/mpers-m32/struct_sigevent.d1
index 454afcc..0068da8 100644
--- a/mpers-m32/struct_sigevent.d1
+++ b/mpers-m32/struct_sigevent.d1
@@ -1,115 +1,116 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xe6 (32-bit)
+   Length:        0xe7 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_sigevent.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_sigevent.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x59): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x94): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 2
-    <29>   DW_AT_decl_line   : 32
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x121): struct_sigevent
-    <39>   DW_AT_decl_file   : 1
-    <3a>   DW_AT_decl_line   : 45
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_byte_size   : 20
-    <3d>   DW_AT_decl_file   : 1
-    <3e>   DW_AT_decl_line   : 31
- <2><3f>: Abbrev Number: 5 (DW_TAG_member)
-    <40>   DW_AT_name        : (indirect string, offset: 0xa5): sigev_value
-    <44>   DW_AT_type        : <0x4d>
-    <48>   DW_AT_decl_file   : 1
-    <49>   DW_AT_decl_line   : 35
-    <4a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><4d>: Abbrev Number: 6 (DW_TAG_union_type)
-    <4e>   DW_AT_byte_size   : 4
-    <4f>   DW_AT_decl_file   : 1
-    <50>   DW_AT_decl_line   : 32
- <3><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xb1): sival_int
-    <56>   DW_AT_type        : <0xdb>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 33
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xbf): sival_ptr
-    <64>   DW_AT_type        : <0xe2>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 34
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><6d>: Abbrev Number: 0
- <2><6e>: Abbrev Number: 5 (DW_TAG_member)
-    <6f>   DW_AT_name        : (indirect string, offset: 0xdb): sigev_signo
-    <73>   DW_AT_type        : <0xdb>
-    <77>   DW_AT_decl_file   : 1
-    <78>   DW_AT_decl_line   : 36
-    <79>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><7c>: Abbrev Number: 5 (DW_TAG_member)
-    <7d>   DW_AT_name        : (indirect string, offset: 0xe7): sigev_notify
-    <81>   DW_AT_type        : <0xdb>
-    <85>   DW_AT_decl_file   : 1
-    <86>   DW_AT_decl_line   : 37
-    <87>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><8a>: Abbrev Number: 5 (DW_TAG_member)
-    <8b>   DW_AT_name        : (indirect string, offset: 0xf4): sigev_un
-    <8f>   DW_AT_type        : <0x98>
-    <93>   DW_AT_decl_file   : 1
-    <94>   DW_AT_decl_line   : 44
-    <95>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><98>: Abbrev Number: 6 (DW_TAG_union_type)
-    <99>   DW_AT_byte_size   : 8
-    <9a>   DW_AT_decl_file   : 1
-    <9b>   DW_AT_decl_line   : 38
- <3><9c>: Abbrev Number: 5 (DW_TAG_member)
-    <9d>   DW_AT_name        : (indirect string, offset: 0xfd): tid
-    <a1>   DW_AT_type        : <0xdb>
-    <a5>   DW_AT_decl_file   : 1
-    <a6>   DW_AT_decl_line   : 39
-    <a7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><aa>: Abbrev Number: 5 (DW_TAG_member)
-    <ab>   DW_AT_name        : (indirect string, offset: 0x101): sigev_thread
-    <af>   DW_AT_type        : <0xb8>
-    <b3>   DW_AT_decl_file   : 1
-    <b4>   DW_AT_decl_line   : 43
-    <b5>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><b8>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <b9>   DW_AT_byte_size   : 8
-    <ba>   DW_AT_decl_file   : 1
-    <bb>   DW_AT_decl_line   : 40
- <4><bc>: Abbrev Number: 5 (DW_TAG_member)
-    <bd>   DW_AT_name        : (indirect string, offset: 0x10e): function
-    <c1>   DW_AT_type        : <0xe2>
-    <c5>   DW_AT_decl_file   : 1
-    <c6>   DW_AT_decl_line   : 41
-    <c7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <4><ca>: Abbrev Number: 5 (DW_TAG_member)
-    <cb>   DW_AT_name        : (indirect string, offset: 0x117): attribute
-    <cf>   DW_AT_type        : <0xe2>
-    <d3>   DW_AT_decl_file   : 1
-    <d4>   DW_AT_decl_line   : 42
-    <d5>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <4><d8>: Abbrev Number: 0
- <3><d9>: Abbrev Number: 0
- <2><da>: Abbrev Number: 0
- <1><db>: Abbrev Number: 7 (DW_TAG_base_type)
-    <dc>   DW_AT_name        : (indirect string, offset: 0xbb): int
-    <e0>   DW_AT_encoding    : 5	(signed)
-    <e1>   DW_AT_byte_size   : 4
- <1><e2>: Abbrev Number: 7 (DW_TAG_base_type)
-    <e3>   DW_AT_name        : (indirect string, offset: 0xc9): long unsigned int
-    <e7>   DW_AT_encoding    : 7	(unsigned)
-    <e8>   DW_AT_byte_size   : 4
- <1><e9>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x123): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15e): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 2
+    <2a>   DW_AT_decl_line   : 32
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1eb): struct_sigevent
+    <3a>   DW_AT_decl_file   : 1
+    <3b>   DW_AT_decl_line   : 45
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_byte_size   : 20
+    <3e>   DW_AT_decl_file   : 1
+    <3f>   DW_AT_decl_line   : 31
+ <2><40>: Abbrev Number: 5 (DW_TAG_member)
+    <41>   DW_AT_name        : (indirect string, offset: 0x16f): sigev_value
+    <45>   DW_AT_type        : <0x4e>
+    <49>   DW_AT_decl_file   : 1
+    <4a>   DW_AT_decl_line   : 35
+    <4b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><4e>: Abbrev Number: 6 (DW_TAG_union_type)
+    <4f>   DW_AT_byte_size   : 4
+    <50>   DW_AT_decl_file   : 1
+    <51>   DW_AT_decl_line   : 32
+ <3><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x17b): sival_int
+    <57>   DW_AT_type        : <0xdc>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 33
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x189): sival_ptr
+    <65>   DW_AT_type        : <0xe3>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 34
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><6e>: Abbrev Number: 0
+ <2><6f>: Abbrev Number: 5 (DW_TAG_member)
+    <70>   DW_AT_name        : (indirect string, offset: 0x1a5): sigev_signo
+    <74>   DW_AT_type        : <0xdc>
+    <78>   DW_AT_decl_file   : 1
+    <79>   DW_AT_decl_line   : 36
+    <7a>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><7d>: Abbrev Number: 5 (DW_TAG_member)
+    <7e>   DW_AT_name        : (indirect string, offset: 0x1b1): sigev_notify
+    <82>   DW_AT_type        : <0xdc>
+    <86>   DW_AT_decl_file   : 1
+    <87>   DW_AT_decl_line   : 37
+    <88>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><8b>: Abbrev Number: 5 (DW_TAG_member)
+    <8c>   DW_AT_name        : (indirect string, offset: 0x1be): sigev_un
+    <90>   DW_AT_type        : <0x99>
+    <94>   DW_AT_decl_file   : 1
+    <95>   DW_AT_decl_line   : 44
+    <96>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><99>: Abbrev Number: 6 (DW_TAG_union_type)
+    <9a>   DW_AT_byte_size   : 8
+    <9b>   DW_AT_decl_file   : 1
+    <9c>   DW_AT_decl_line   : 38
+ <3><9d>: Abbrev Number: 5 (DW_TAG_member)
+    <9e>   DW_AT_name        : (indirect string, offset: 0x1c7): tid
+    <a2>   DW_AT_type        : <0xdc>
+    <a6>   DW_AT_decl_file   : 1
+    <a7>   DW_AT_decl_line   : 39
+    <a8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><ab>: Abbrev Number: 5 (DW_TAG_member)
+    <ac>   DW_AT_name        : (indirect string, offset: 0x1cb): sigev_thread
+    <b0>   DW_AT_type        : <0xb9>
+    <b4>   DW_AT_decl_file   : 1
+    <b5>   DW_AT_decl_line   : 43
+    <b6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><b9>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <ba>   DW_AT_byte_size   : 8
+    <bb>   DW_AT_decl_file   : 1
+    <bc>   DW_AT_decl_line   : 40
+ <4><bd>: Abbrev Number: 5 (DW_TAG_member)
+    <be>   DW_AT_name        : (indirect string, offset: 0x1d8): function
+    <c2>   DW_AT_type        : <0xe3>
+    <c6>   DW_AT_decl_file   : 1
+    <c7>   DW_AT_decl_line   : 41
+    <c8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <4><cb>: Abbrev Number: 5 (DW_TAG_member)
+    <cc>   DW_AT_name        : (indirect string, offset: 0x1e1): attribute
+    <d0>   DW_AT_type        : <0xe3>
+    <d4>   DW_AT_decl_file   : 1
+    <d5>   DW_AT_decl_line   : 42
+    <d6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <4><d9>: Abbrev Number: 0
+ <3><da>: Abbrev Number: 0
+ <2><db>: Abbrev Number: 0
+ <1><dc>: Abbrev Number: 7 (DW_TAG_base_type)
+    <dd>   DW_AT_name        : (indirect string, offset: 0x185): int
+    <e1>   DW_AT_encoding    : 5	(signed)
+    <e2>   DW_AT_byte_size   : 4
+ <1><e3>: Abbrev Number: 7 (DW_TAG_base_type)
+    <e4>   DW_AT_name        : (indirect string, offset: 0x193): long unsigned int
+    <e8>   DW_AT_encoding    : 7	(unsigned)
+    <e9>   DW_AT_byte_size   : 4
+ <1><ea>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_sigevent.d2 b/mpers-m32/struct_sigevent.d2
index 5942408..1a21037 100644
--- a/mpers-m32/struct_sigevent.d2
+++ b/mpers-m32/struct_sigevent.d2
@@ -1,114 +1,114 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x94): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15e): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 32
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x121): struct_sigevent
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1eb): struct_sigevent
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 45
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
 DW_AT_byte_size   : 20
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
-<2><3f>
+<2><40>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa5): sigev_value
-DW_AT_type        : <0x4d>
+DW_AT_name        : (indirect string, offset: 0x16f): sigev_value
+DW_AT_type        : <0x4e>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 35
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><4d>
+<2><4e>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 32
-<3><51>
+<3><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb1): sival_int
-DW_AT_type        : <0xdb>
+DW_AT_name        : (indirect string, offset: 0x17b): sival_int
+DW_AT_type        : <0xdc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><5f>
+<3><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xbf): sival_ptr
-DW_AT_type        : <0xe2>
+DW_AT_name        : (indirect string, offset: 0x189): sival_ptr
+DW_AT_type        : <0xe3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><6e>
+<2><6f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdb): sigev_signo
-DW_AT_type        : <0xdb>
+DW_AT_name        : (indirect string, offset: 0x1a5): sigev_signo
+DW_AT_type        : <0xdc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><7c>
+<2><7d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe7): sigev_notify
-DW_AT_type        : <0xdb>
+DW_AT_name        : (indirect string, offset: 0x1b1): sigev_notify
+DW_AT_type        : <0xdc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><8a>
+<2><8b>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf4): sigev_un
-DW_AT_type        : <0x98>
+DW_AT_name        : (indirect string, offset: 0x1be): sigev_un
+DW_AT_type        : <0x99>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 44
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><98>
+<2><99>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 38
-<3><9c>
+<3><9d>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfd): tid
-DW_AT_type        : <0xdb>
+DW_AT_name        : (indirect string, offset: 0x1c7): tid
+DW_AT_type        : <0xdc>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><aa>
+<3><ab>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x101): sigev_thread
-DW_AT_type        : <0xb8>
+DW_AT_name        : (indirect string, offset: 0x1cb): sigev_thread
+DW_AT_type        : <0xb9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 43
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><b8>
+<3><b9>
 Abbrev Number: 4 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 40
-<4><bc>
+<4><bd>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10e): function
-DW_AT_type        : <0xe2>
+DW_AT_name        : (indirect string, offset: 0x1d8): function
+DW_AT_type        : <0xe3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<4><ca>
+<4><cb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x117): attribute
-DW_AT_type        : <0xe2>
+DW_AT_name        : (indirect string, offset: 0x1e1): attribute
+DW_AT_type        : <0xe3>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 42
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><db>
+<1><dc>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xbb): int
+DW_AT_name        : (indirect string, offset: 0x185): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><e2>
+<1><e3>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc9): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x193): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_sock_fprog.d1 b/mpers-m32/struct_sock_fprog.d1
index db720c2..f7472ca 100644
--- a/mpers-m32/struct_sock_fprog.d1
+++ b/mpers-m32/struct_sock_fprog.d1
@@ -1,104 +1,105 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xd9 (32-bit)
+   Length:        0xda (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_sock_fprog.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_sock_fprog.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5b): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x96): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 34
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x111): struct_sock_fprog
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 32
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x106): sock_fprog
-    <40>   DW_AT_byte_size   : 8
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 32
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa7): len
-    <48>   DW_AT_type        : <0x60>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 33
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xba): filter
-    <56>   DW_AT_type        : <0x67>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 34
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 0
- <1><60>: Abbrev Number: 6 (DW_TAG_base_type)
-    <61>   DW_AT_name        : (indirect string, offset: 0xab): unsigned short
-    <65>   DW_AT_encoding    : 7	(unsigned)
-    <66>   DW_AT_byte_size   : 2
- <1><67>: Abbrev Number: 7 (DW_TAG_pointer_type)
-    <68>   DW_AT_type        : <0x6c>
- <1><6c>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <6d>   DW_AT_name        : (indirect string, offset: 0xfa): sock_filter
-    <71>   DW_AT_byte_size   : 8
-    <72>   DW_AT_decl_file   : 1
-    <73>   DW_AT_decl_line   : 26
- <2><74>: Abbrev Number: 5 (DW_TAG_member)
-    <75>   DW_AT_name        : (indirect string, offset: 0xc1): code
-    <79>   DW_AT_type        : <0xad>
-    <7d>   DW_AT_decl_file   : 1
-    <7e>   DW_AT_decl_line   : 27
-    <7f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><82>: Abbrev Number: 5 (DW_TAG_member)
-    <83>   DW_AT_name        : (indirect string, offset: 0xcc): jt
-    <87>   DW_AT_type        : <0xb8>
-    <8b>   DW_AT_decl_file   : 1
-    <8c>   DW_AT_decl_line   : 28
-    <8d>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><90>: Abbrev Number: 5 (DW_TAG_member)
-    <91>   DW_AT_name        : (indirect string, offset: 0xe2): jf
-    <95>   DW_AT_type        : <0xb8>
-    <99>   DW_AT_decl_file   : 1
-    <9a>   DW_AT_decl_line   : 29
-    <9b>   DW_AT_data_member_location: 2 byte block: 23 3 	(DW_OP_plus_uconst: 3)
- <2><9e>: Abbrev Number: 5 (DW_TAG_member)
-    <9f>   DW_AT_name        : (indirect string, offset: 0xe5): k
-    <a3>   DW_AT_type        : <0xca>
-    <a7>   DW_AT_decl_file   : 1
-    <a8>   DW_AT_decl_line   : 30
-    <a9>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><ac>: Abbrev Number: 0
- <1><ad>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ae>   DW_AT_type        : <0x60>
-    <b2>   DW_AT_name        : (indirect string, offset: 0xc6): __u16
-    <b6>   DW_AT_decl_file   : 2
-    <b7>   DW_AT_decl_line   : 26
- <1><b8>: Abbrev Number: 3 (DW_TAG_typedef)
-    <b9>   DW_AT_type        : <0xc3>
-    <bd>   DW_AT_name        : (indirect string, offset: 0xdd): __u8
-    <c1>   DW_AT_decl_file   : 2
-    <c2>   DW_AT_decl_line   : 24
- <1><c3>: Abbrev Number: 6 (DW_TAG_base_type)
-    <c4>   DW_AT_name        : (indirect string, offset: 0xcf): unsigned char
-    <c8>   DW_AT_encoding    : 8	(unsigned char)
-    <c9>   DW_AT_byte_size   : 1
- <1><ca>: Abbrev Number: 3 (DW_TAG_typedef)
-    <cb>   DW_AT_type        : <0xd5>
-    <cf>   DW_AT_name        : (indirect string, offset: 0xf4): __u32
-    <d3>   DW_AT_decl_file   : 2
-    <d4>   DW_AT_decl_line   : 28
- <1><d5>: Abbrev Number: 6 (DW_TAG_base_type)
-    <d6>   DW_AT_name        : (indirect string, offset: 0xe7): unsigned int
-    <da>   DW_AT_encoding    : 7	(unsigned)
-    <db>   DW_AT_byte_size   : 4
- <1><dc>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x125): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x160): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 34
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1db): struct_sock_fprog
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 32
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1d0): sock_fprog
+    <41>   DW_AT_byte_size   : 8
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 32
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x171): len
+    <49>   DW_AT_type        : <0x61>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 33
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x184): filter
+    <57>   DW_AT_type        : <0x68>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 34
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 0
+ <1><61>: Abbrev Number: 6 (DW_TAG_base_type)
+    <62>   DW_AT_name        : (indirect string, offset: 0x175): unsigned short
+    <66>   DW_AT_encoding    : 7	(unsigned)
+    <67>   DW_AT_byte_size   : 2
+ <1><68>: Abbrev Number: 7 (DW_TAG_pointer_type)
+    <69>   DW_AT_type        : <0x6d>
+ <1><6d>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <6e>   DW_AT_name        : (indirect string, offset: 0x1c4): sock_filter
+    <72>   DW_AT_byte_size   : 8
+    <73>   DW_AT_decl_file   : 1
+    <74>   DW_AT_decl_line   : 26
+ <2><75>: Abbrev Number: 5 (DW_TAG_member)
+    <76>   DW_AT_name        : (indirect string, offset: 0x18b): code
+    <7a>   DW_AT_type        : <0xae>
+    <7e>   DW_AT_decl_file   : 1
+    <7f>   DW_AT_decl_line   : 27
+    <80>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><83>: Abbrev Number: 5 (DW_TAG_member)
+    <84>   DW_AT_name        : (indirect string, offset: 0x196): jt
+    <88>   DW_AT_type        : <0xb9>
+    <8c>   DW_AT_decl_file   : 1
+    <8d>   DW_AT_decl_line   : 28
+    <8e>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><91>: Abbrev Number: 5 (DW_TAG_member)
+    <92>   DW_AT_name        : (indirect string, offset: 0x1ac): jf
+    <96>   DW_AT_type        : <0xb9>
+    <9a>   DW_AT_decl_file   : 1
+    <9b>   DW_AT_decl_line   : 29
+    <9c>   DW_AT_data_member_location: 2 byte block: 23 3 	(DW_OP_plus_uconst: 3)
+ <2><9f>: Abbrev Number: 5 (DW_TAG_member)
+    <a0>   DW_AT_name        : (indirect string, offset: 0x1af): k
+    <a4>   DW_AT_type        : <0xcb>
+    <a8>   DW_AT_decl_file   : 1
+    <a9>   DW_AT_decl_line   : 30
+    <aa>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><ad>: Abbrev Number: 0
+ <1><ae>: Abbrev Number: 3 (DW_TAG_typedef)
+    <af>   DW_AT_type        : <0x61>
+    <b3>   DW_AT_name        : (indirect string, offset: 0x190): __u16
+    <b7>   DW_AT_decl_file   : 2
+    <b8>   DW_AT_decl_line   : 26
+ <1><b9>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ba>   DW_AT_type        : <0xc4>
+    <be>   DW_AT_name        : (indirect string, offset: 0x1a7): __u8
+    <c2>   DW_AT_decl_file   : 2
+    <c3>   DW_AT_decl_line   : 24
+ <1><c4>: Abbrev Number: 6 (DW_TAG_base_type)
+    <c5>   DW_AT_name        : (indirect string, offset: 0x199): unsigned char
+    <c9>   DW_AT_encoding    : 8	(unsigned char)
+    <ca>   DW_AT_byte_size   : 1
+ <1><cb>: Abbrev Number: 3 (DW_TAG_typedef)
+    <cc>   DW_AT_type        : <0xd6>
+    <d0>   DW_AT_name        : (indirect string, offset: 0x1be): __u32
+    <d4>   DW_AT_decl_file   : 2
+    <d5>   DW_AT_decl_line   : 28
+ <1><d6>: Abbrev Number: 6 (DW_TAG_base_type)
+    <d7>   DW_AT_name        : (indirect string, offset: 0x1b1): unsigned int
+    <db>   DW_AT_encoding    : 7	(unsigned)
+    <dc>   DW_AT_byte_size   : 4
+ <1><dd>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_sock_fprog.d2 b/mpers-m32/struct_sock_fprog.d2
index 64b071e..1e39302 100644
--- a/mpers-m32/struct_sock_fprog.d2
+++ b/mpers-m32/struct_sock_fprog.d2
@@ -1,104 +1,104 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x96): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x160): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 34
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x111): struct_sock_fprog
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1db): struct_sock_fprog
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 32
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x106): sock_fprog
+DW_AT_name        : (indirect string, offset: 0x1d0): sock_fprog
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 32
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa7): len
-DW_AT_type        : <0x60>
+DW_AT_name        : (indirect string, offset: 0x171): len
+DW_AT_type        : <0x61>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xba): filter
-DW_AT_type        : <0x67>
+DW_AT_name        : (indirect string, offset: 0x184): filter
+DW_AT_type        : <0x68>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><60>
+<1><61>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xab): unsigned short
+DW_AT_name        : (indirect string, offset: 0x175): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><67>
+<1><68>
 Abbrev Number: 7 (DW_TAG_pointer_type)
-DW_AT_type        : <0x6c>
-<1><6c>
+DW_AT_type        : <0x6d>
+<1><6d>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xfa): sock_filter
+DW_AT_name        : (indirect string, offset: 0x1c4): sock_filter
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
-<2><74>
+<2><75>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc1): code
-DW_AT_type        : <0xad>
+DW_AT_name        : (indirect string, offset: 0x18b): code
+DW_AT_type        : <0xae>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 27
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><82>
+<2><83>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcc): jt
-DW_AT_type        : <0xb8>
+DW_AT_name        : (indirect string, offset: 0x196): jt
+DW_AT_type        : <0xb9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><90>
+<2><91>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe2): jf
-DW_AT_type        : <0xb8>
+DW_AT_name        : (indirect string, offset: 0x1ac): jf
+DW_AT_type        : <0xb9>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 3 	(DW_OP_plus_uconst: 3)
-<2><9e>
+<2><9f>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe5): k
-DW_AT_type        : <0xca>
+DW_AT_name        : (indirect string, offset: 0x1af): k
+DW_AT_type        : <0xcb>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><ad>
+<1><ae>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x60>
-DW_AT_name        : (indirect string, offset: 0xc6): __u16
+DW_AT_type        : <0x61>
+DW_AT_name        : (indirect string, offset: 0x190): __u16
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 26
-<1><b8>
+<1><b9>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xc3>
-DW_AT_name        : (indirect string, offset: 0xdd): __u8
+DW_AT_type        : <0xc4>
+DW_AT_name        : (indirect string, offset: 0x1a7): __u8
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 24
-<1><c3>
+<1><c4>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xcf): unsigned char
+DW_AT_name        : (indirect string, offset: 0x199): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><ca>
+<1><cb>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xd5>
-DW_AT_name        : (indirect string, offset: 0xf4): __u32
+DW_AT_type        : <0xd6>
+DW_AT_name        : (indirect string, offset: 0x1be): __u32
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 28
-<1><d5>
+<1><d6>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe7): unsigned int
+DW_AT_name        : (indirect string, offset: 0x1b1): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_stat.d1 b/mpers-m32/struct_stat.d1
index 167827c..a4ab06c 100644
--- a/mpers-m32/struct_stat.d1
+++ b/mpers-m32/struct_stat.d1
@@ -1,169 +1,170 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x175 (32-bit)
+   Length:        0x176 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_stat.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_stat.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x55): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x90): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 2
-    <29>   DW_AT_decl_line   : 62
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x18b): struct_stat
-    <39>   DW_AT_decl_file   : 2
-    <3a>   DW_AT_decl_line   : 60
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x186): stat
-    <40>   DW_AT_byte_size   : 80
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 23
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa1): st_dev
-    <48>   DW_AT_type        : <0x15c>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 24
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xba): st_ino
-    <56>   DW_AT_type        : <0x15c>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 25
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xc1): st_mode
-    <64>   DW_AT_type        : <0x163>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 26
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xd6): st_nlink
-    <72>   DW_AT_type        : <0x163>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 27
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0xdf): st_uid
-    <80>   DW_AT_type        : <0x163>
-    <84>   DW_AT_decl_file   : 1
-    <85>   DW_AT_decl_line   : 28
-    <86>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0xe6): st_gid
-    <8e>   DW_AT_type        : <0x163>
-    <92>   DW_AT_decl_file   : 1
-    <93>   DW_AT_decl_line   : 29
-    <94>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0xed): st_rdev
-    <9c>   DW_AT_type        : <0x15c>
-    <a0>   DW_AT_decl_file   : 1
-    <a1>   DW_AT_decl_line   : 30
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0xf5): __pad1
-    <aa>   DW_AT_type        : <0x15c>
-    <ae>   DW_AT_decl_file   : 1
-    <af>   DW_AT_decl_line   : 31
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0xfc): st_size
-    <b8>   DW_AT_type        : <0x16a>
-    <bc>   DW_AT_decl_file   : 1
-    <bd>   DW_AT_decl_line   : 32
-    <be>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x10d): st_blksize
-    <c6>   DW_AT_type        : <0x171>
-    <ca>   DW_AT_decl_file   : 1
-    <cb>   DW_AT_decl_line   : 33
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0x11c): __pad2
-    <d4>   DW_AT_type        : <0x171>
-    <d8>   DW_AT_decl_file   : 1
-    <d9>   DW_AT_decl_line   : 34
-    <da>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><dd>: Abbrev Number: 5 (DW_TAG_member)
-    <de>   DW_AT_name        : (indirect string, offset: 0x123): st_blocks
-    <e2>   DW_AT_type        : <0x16a>
-    <e6>   DW_AT_decl_file   : 1
-    <e7>   DW_AT_decl_line   : 35
-    <e8>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><eb>: Abbrev Number: 5 (DW_TAG_member)
-    <ec>   DW_AT_name        : (indirect string, offset: 0x12d): st_atime
-    <f0>   DW_AT_type        : <0x16a>
-    <f4>   DW_AT_decl_file   : 1
-    <f5>   DW_AT_decl_line   : 36
-    <f6>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><f9>: Abbrev Number: 5 (DW_TAG_member)
-    <fa>   DW_AT_name        : (indirect string, offset: 0x136): st_atime_nsec
-    <fe>   DW_AT_type        : <0x15c>
-    <102>   DW_AT_decl_file   : 1
-    <103>   DW_AT_decl_line   : 37
-    <104>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <2><107>: Abbrev Number: 5 (DW_TAG_member)
-    <108>   DW_AT_name        : (indirect string, offset: 0x144): st_mtime
-    <10c>   DW_AT_type        : <0x16a>
-    <110>   DW_AT_decl_file   : 1
-    <111>   DW_AT_decl_line   : 38
-    <112>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><115>: Abbrev Number: 5 (DW_TAG_member)
-    <116>   DW_AT_name        : (indirect string, offset: 0x14d): st_mtime_nsec
-    <11a>   DW_AT_type        : <0x15c>
-    <11e>   DW_AT_decl_file   : 1
-    <11f>   DW_AT_decl_line   : 39
-    <120>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
- <2><123>: Abbrev Number: 5 (DW_TAG_member)
-    <124>   DW_AT_name        : (indirect string, offset: 0x15b): st_ctime
-    <128>   DW_AT_type        : <0x16a>
-    <12c>   DW_AT_decl_file   : 1
-    <12d>   DW_AT_decl_line   : 40
-    <12e>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><131>: Abbrev Number: 5 (DW_TAG_member)
-    <132>   DW_AT_name        : (indirect string, offset: 0x164): st_ctime_nsec
-    <136>   DW_AT_type        : <0x15c>
-    <13a>   DW_AT_decl_file   : 1
-    <13b>   DW_AT_decl_line   : 41
-    <13c>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
- <2><13f>: Abbrev Number: 5 (DW_TAG_member)
-    <140>   DW_AT_name        : (indirect string, offset: 0x172): __unused4
-    <144>   DW_AT_type        : <0x163>
-    <148>   DW_AT_decl_file   : 1
-    <149>   DW_AT_decl_line   : 42
-    <14a>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
- <2><14d>: Abbrev Number: 5 (DW_TAG_member)
-    <14e>   DW_AT_name        : (indirect string, offset: 0x17c): __unused5
-    <152>   DW_AT_type        : <0x163>
-    <156>   DW_AT_decl_file   : 1
-    <157>   DW_AT_decl_line   : 43
-    <158>   DW_AT_data_member_location: 2 byte block: 23 4c 	(DW_OP_plus_uconst: 76)
- <2><15b>: Abbrev Number: 0
- <1><15c>: Abbrev Number: 6 (DW_TAG_base_type)
-    <15d>   DW_AT_name        : (indirect string, offset: 0xa8): long unsigned int
-    <161>   DW_AT_encoding    : 7	(unsigned)
-    <162>   DW_AT_byte_size   : 4
- <1><163>: Abbrev Number: 6 (DW_TAG_base_type)
-    <164>   DW_AT_name        : (indirect string, offset: 0xc9): unsigned int
-    <168>   DW_AT_encoding    : 7	(unsigned)
-    <169>   DW_AT_byte_size   : 4
- <1><16a>: Abbrev Number: 6 (DW_TAG_base_type)
-    <16b>   DW_AT_name        : (indirect string, offset: 0x104): long int
-    <16f>   DW_AT_encoding    : 5	(signed)
-    <170>   DW_AT_byte_size   : 4
- <1><171>: Abbrev Number: 6 (DW_TAG_base_type)
-    <172>   DW_AT_name        : (indirect string, offset: 0x118): int
-    <176>   DW_AT_encoding    : 5	(signed)
-    <177>   DW_AT_byte_size   : 4
- <1><178>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11f): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15a): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 2
+    <2a>   DW_AT_decl_line   : 62
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x255): struct_stat
+    <3a>   DW_AT_decl_file   : 2
+    <3b>   DW_AT_decl_line   : 60
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x250): stat
+    <41>   DW_AT_byte_size   : 80
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 23
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16b): st_dev
+    <49>   DW_AT_type        : <0x15d>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 24
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x184): st_ino
+    <57>   DW_AT_type        : <0x15d>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 25
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x18b): st_mode
+    <65>   DW_AT_type        : <0x164>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 26
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1a0): st_nlink
+    <73>   DW_AT_type        : <0x164>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 27
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1a9): st_uid
+    <81>   DW_AT_type        : <0x164>
+    <85>   DW_AT_decl_file   : 1
+    <86>   DW_AT_decl_line   : 28
+    <87>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1b0): st_gid
+    <8f>   DW_AT_type        : <0x164>
+    <93>   DW_AT_decl_file   : 1
+    <94>   DW_AT_decl_line   : 29
+    <95>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1b7): st_rdev
+    <9d>   DW_AT_type        : <0x15d>
+    <a1>   DW_AT_decl_file   : 1
+    <a2>   DW_AT_decl_line   : 30
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1bf): __pad1
+    <ab>   DW_AT_type        : <0x15d>
+    <af>   DW_AT_decl_file   : 1
+    <b0>   DW_AT_decl_line   : 31
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x1c6): st_size
+    <b9>   DW_AT_type        : <0x16b>
+    <bd>   DW_AT_decl_file   : 1
+    <be>   DW_AT_decl_line   : 32
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x1d7): st_blksize
+    <c7>   DW_AT_type        : <0x172>
+    <cb>   DW_AT_decl_file   : 1
+    <cc>   DW_AT_decl_line   : 33
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x1e6): __pad2
+    <d5>   DW_AT_type        : <0x172>
+    <d9>   DW_AT_decl_file   : 1
+    <da>   DW_AT_decl_line   : 34
+    <db>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><de>: Abbrev Number: 5 (DW_TAG_member)
+    <df>   DW_AT_name        : (indirect string, offset: 0x1ed): st_blocks
+    <e3>   DW_AT_type        : <0x16b>
+    <e7>   DW_AT_decl_file   : 1
+    <e8>   DW_AT_decl_line   : 35
+    <e9>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><ec>: Abbrev Number: 5 (DW_TAG_member)
+    <ed>   DW_AT_name        : (indirect string, offset: 0x1f7): st_atime
+    <f1>   DW_AT_type        : <0x16b>
+    <f5>   DW_AT_decl_file   : 1
+    <f6>   DW_AT_decl_line   : 36
+    <f7>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><fa>: Abbrev Number: 5 (DW_TAG_member)
+    <fb>   DW_AT_name        : (indirect string, offset: 0x200): st_atime_nsec
+    <ff>   DW_AT_type        : <0x15d>
+    <103>   DW_AT_decl_file   : 1
+    <104>   DW_AT_decl_line   : 37
+    <105>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <2><108>: Abbrev Number: 5 (DW_TAG_member)
+    <109>   DW_AT_name        : (indirect string, offset: 0x20e): st_mtime
+    <10d>   DW_AT_type        : <0x16b>
+    <111>   DW_AT_decl_file   : 1
+    <112>   DW_AT_decl_line   : 38
+    <113>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><116>: Abbrev Number: 5 (DW_TAG_member)
+    <117>   DW_AT_name        : (indirect string, offset: 0x217): st_mtime_nsec
+    <11b>   DW_AT_type        : <0x15d>
+    <11f>   DW_AT_decl_file   : 1
+    <120>   DW_AT_decl_line   : 39
+    <121>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+ <2><124>: Abbrev Number: 5 (DW_TAG_member)
+    <125>   DW_AT_name        : (indirect string, offset: 0x225): st_ctime
+    <129>   DW_AT_type        : <0x16b>
+    <12d>   DW_AT_decl_file   : 1
+    <12e>   DW_AT_decl_line   : 40
+    <12f>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><132>: Abbrev Number: 5 (DW_TAG_member)
+    <133>   DW_AT_name        : (indirect string, offset: 0x22e): st_ctime_nsec
+    <137>   DW_AT_type        : <0x15d>
+    <13b>   DW_AT_decl_file   : 1
+    <13c>   DW_AT_decl_line   : 41
+    <13d>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
+ <2><140>: Abbrev Number: 5 (DW_TAG_member)
+    <141>   DW_AT_name        : (indirect string, offset: 0x23c): __unused4
+    <145>   DW_AT_type        : <0x164>
+    <149>   DW_AT_decl_file   : 1
+    <14a>   DW_AT_decl_line   : 42
+    <14b>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
+ <2><14e>: Abbrev Number: 5 (DW_TAG_member)
+    <14f>   DW_AT_name        : (indirect string, offset: 0x246): __unused5
+    <153>   DW_AT_type        : <0x164>
+    <157>   DW_AT_decl_file   : 1
+    <158>   DW_AT_decl_line   : 43
+    <159>   DW_AT_data_member_location: 2 byte block: 23 4c 	(DW_OP_plus_uconst: 76)
+ <2><15c>: Abbrev Number: 0
+ <1><15d>: Abbrev Number: 6 (DW_TAG_base_type)
+    <15e>   DW_AT_name        : (indirect string, offset: 0x172): long unsigned int
+    <162>   DW_AT_encoding    : 7	(unsigned)
+    <163>   DW_AT_byte_size   : 4
+ <1><164>: Abbrev Number: 6 (DW_TAG_base_type)
+    <165>   DW_AT_name        : (indirect string, offset: 0x193): unsigned int
+    <169>   DW_AT_encoding    : 7	(unsigned)
+    <16a>   DW_AT_byte_size   : 4
+ <1><16b>: Abbrev Number: 6 (DW_TAG_base_type)
+    <16c>   DW_AT_name        : (indirect string, offset: 0x1ce): long int
+    <170>   DW_AT_encoding    : 5	(signed)
+    <171>   DW_AT_byte_size   : 4
+ <1><172>: Abbrev Number: 6 (DW_TAG_base_type)
+    <173>   DW_AT_name        : (indirect string, offset: 0x1e2): int
+    <177>   DW_AT_encoding    : 5	(signed)
+    <178>   DW_AT_byte_size   : 4
+ <1><179>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_stat.d2 b/mpers-m32/struct_stat.d2
index c159023..94ec8b3 100644
--- a/mpers-m32/struct_stat.d2
+++ b/mpers-m32/struct_stat.d2
@@ -1,180 +1,180 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x90): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15a): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 62
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x18b): struct_stat
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x255): struct_stat
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 60
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x186): stat
+DW_AT_name        : (indirect string, offset: 0x250): stat
 DW_AT_byte_size   : 80
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa1): st_dev
-DW_AT_type        : <0x15c>
+DW_AT_name        : (indirect string, offset: 0x16b): st_dev
+DW_AT_type        : <0x15d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xba): st_ino
-DW_AT_type        : <0x15c>
+DW_AT_name        : (indirect string, offset: 0x184): st_ino
+DW_AT_type        : <0x15d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc1): st_mode
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x18b): st_mode
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd6): st_nlink
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x1a0): st_nlink
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 27
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdf): st_uid
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x1a9): st_uid
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe6): st_gid
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x1b0): st_gid
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xed): st_rdev
-DW_AT_type        : <0x15c>
+DW_AT_name        : (indirect string, offset: 0x1b7): st_rdev
+DW_AT_type        : <0x15d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf5): __pad1
-DW_AT_type        : <0x15c>
+DW_AT_name        : (indirect string, offset: 0x1bf): __pad1
+DW_AT_type        : <0x15d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfc): st_size
-DW_AT_type        : <0x16a>
+DW_AT_name        : (indirect string, offset: 0x1c6): st_size
+DW_AT_type        : <0x16b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10d): st_blksize
-DW_AT_type        : <0x171>
+DW_AT_name        : (indirect string, offset: 0x1d7): st_blksize
+DW_AT_type        : <0x172>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><cf>
+<2><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11c): __pad2
-DW_AT_type        : <0x171>
+DW_AT_name        : (indirect string, offset: 0x1e6): __pad2
+DW_AT_type        : <0x172>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><dd>
+<2><de>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x123): st_blocks
-DW_AT_type        : <0x16a>
+DW_AT_name        : (indirect string, offset: 0x1ed): st_blocks
+DW_AT_type        : <0x16b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 35
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><eb>
+<2><ec>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12d): st_atime
-DW_AT_type        : <0x16a>
+DW_AT_name        : (indirect string, offset: 0x1f7): st_atime
+DW_AT_type        : <0x16b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><f9>
+<2><fa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x136): st_atime_nsec
-DW_AT_type        : <0x15c>
+DW_AT_name        : (indirect string, offset: 0x200): st_atime_nsec
+DW_AT_type        : <0x15d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<2><107>
+<2><108>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x144): st_mtime
-DW_AT_type        : <0x16a>
+DW_AT_name        : (indirect string, offset: 0x20e): st_mtime
+DW_AT_type        : <0x16b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><115>
+<2><116>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14d): st_mtime_nsec
-DW_AT_type        : <0x15c>
+DW_AT_name        : (indirect string, offset: 0x217): st_mtime_nsec
+DW_AT_type        : <0x15d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
-<2><123>
+<2><124>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15b): st_ctime
-DW_AT_type        : <0x16a>
+DW_AT_name        : (indirect string, offset: 0x225): st_ctime
+DW_AT_type        : <0x16b>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<2><131>
+<2><132>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x164): st_ctime_nsec
-DW_AT_type        : <0x15c>
+DW_AT_name        : (indirect string, offset: 0x22e): st_ctime_nsec
+DW_AT_type        : <0x15d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
-<2><13f>
+<2><140>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x172): __unused4
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x23c): __unused4
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 42
 DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
-<2><14d>
+<2><14e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17c): __unused5
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x246): __unused5
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 43
 DW_AT_data_member_location: 2 byte block: 23 4c 	(DW_OP_plus_uconst: 76)
-<1><15c>
+<1><15d>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa8): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x172): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><163>
+<1><164>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc9): unsigned int
+DW_AT_name        : (indirect string, offset: 0x193): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><16a>
+<1><16b>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x104): long int
+DW_AT_name        : (indirect string, offset: 0x1ce): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><171>
+<1><172>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x118): int
+DW_AT_name        : (indirect string, offset: 0x1e2): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/struct_stat64.d1 b/mpers-m32/struct_stat64.d1
index ad9b963..7759d1d 100644
--- a/mpers-m32/struct_stat64.d1
+++ b/mpers-m32/struct_stat64.d1
@@ -1,32 +1,33 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x40 (32-bit)
+   Length:        0x41 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_stat64.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_stat64.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x57): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 1
-    <29>   DW_AT_decl_line   : 60
-    <2a>   DW_AT_location    : 5 byte block: 3 1 0 0 0 	(DW_OP_addr: 1)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xaa): struct_stat64
-    <39>   DW_AT_decl_file   : 1
-    <3a>   DW_AT_decl_line   : 58
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xa3): stat64
-    <40>   DW_AT_byte_size   : 0
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 55
- <1><43>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x121): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 1
+    <2a>   DW_AT_decl_line   : 60
+    <2b>   DW_AT_location    : 5 byte block: 3 1 0 0 0 	(DW_OP_addr: 1)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x174): struct_stat64
+    <3a>   DW_AT_decl_file   : 1
+    <3b>   DW_AT_decl_line   : 58
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x16d): stat64
+    <41>   DW_AT_byte_size   : 0
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 55
+ <1><44>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_stat64.d2 b/mpers-m32/struct_stat64.d2
index b7c54c5..ea8acd0 100644
--- a/mpers-m32/struct_stat64.d2
+++ b/mpers-m32/struct_stat64.d2
@@ -1,20 +1,20 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 60
 DW_AT_location    : 5 byte block: 3 1 0 0 0 	(DW_OP_addr: 1)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xaa): struct_stat64
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x174): struct_stat64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 58
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xa3): stat64
+DW_AT_name        : (indirect string, offset: 0x16d): stat64
 DW_AT_byte_size   : 0
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 55
diff --git a/mpers-m32/struct_statfs.d1 b/mpers-m32/struct_statfs.d1
index 5ab912f..c53f6b8 100644
--- a/mpers-m32/struct_statfs.d1
+++ b/mpers-m32/struct_statfs.d1
@@ -1,152 +1,153 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x141 (32-bit)
+   Length:        0x142 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_statfs.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_statfs.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x57): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 37
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x147): struct_statfs
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 34
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x140): statfs
-    <40>   DW_AT_byte_size   : 64
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 29
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa3): f_type
-    <48>   DW_AT_type        : <0xec>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 30
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xc3): f_bsize
-    <56>   DW_AT_type        : <0xec>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 31
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xcb): f_blocks
-    <64>   DW_AT_type        : <0xec>
-    <68>   DW_AT_decl_file   : 2
-    <69>   DW_AT_decl_line   : 32
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xd4): f_bfree
-    <72>   DW_AT_type        : <0xec>
-    <76>   DW_AT_decl_file   : 2
-    <77>   DW_AT_decl_line   : 33
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0xdc): f_bavail
-    <80>   DW_AT_type        : <0xec>
-    <84>   DW_AT_decl_file   : 2
-    <85>   DW_AT_decl_line   : 34
-    <86>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0xe5): f_files
-    <8e>   DW_AT_type        : <0xec>
-    <92>   DW_AT_decl_file   : 2
-    <93>   DW_AT_decl_line   : 35
-    <94>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0xed): f_ffree
-    <9c>   DW_AT_type        : <0xec>
-    <a0>   DW_AT_decl_file   : 2
-    <a1>   DW_AT_decl_line   : 36
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0xf5): f_fsid
-    <aa>   DW_AT_type        : <0xfe>
-    <ae>   DW_AT_decl_file   : 2
-    <af>   DW_AT_decl_line   : 37
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0x11d): f_namelen
-    <b8>   DW_AT_type        : <0xec>
-    <bc>   DW_AT_decl_file   : 2
-    <bd>   DW_AT_decl_line   : 38
-    <be>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x127): f_frsize
-    <c6>   DW_AT_type        : <0xec>
-    <ca>   DW_AT_decl_file   : 2
-    <cb>   DW_AT_decl_line   : 39
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0x130): f_flags
-    <d4>   DW_AT_type        : <0xec>
-    <d8>   DW_AT_decl_file   : 2
-    <d9>   DW_AT_decl_line   : 40
-    <da>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><dd>: Abbrev Number: 5 (DW_TAG_member)
-    <de>   DW_AT_name        : (indirect string, offset: 0x138): f_spare
-    <e2>   DW_AT_type        : <0x137>
-    <e6>   DW_AT_decl_file   : 2
-    <e7>   DW_AT_decl_line   : 41
-    <e8>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><eb>: Abbrev Number: 0
- <1><ec>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ed>   DW_AT_type        : <0xf7>
-    <f1>   DW_AT_name        : (indirect string, offset: 0xb3): __kernel_long_t
-    <f5>   DW_AT_decl_file   : 1
-    <f6>   DW_AT_decl_line   : 23
- <1><f7>: Abbrev Number: 6 (DW_TAG_base_type)
-    <f8>   DW_AT_name        : (indirect string, offset: 0xaa): long int
-    <fc>   DW_AT_encoding    : 5	(signed)
-    <fd>   DW_AT_byte_size   : 4
- <1><fe>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ff>   DW_AT_type        : <0x109>
-    <103>   DW_AT_name        : (indirect string, offset: 0x10d): __kernel_fsid_t
-    <107>   DW_AT_decl_file   : 1
-    <108>   DW_AT_decl_line   : 73
- <1><109>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <10a>   DW_AT_byte_size   : 8
-    <10b>   DW_AT_decl_file   : 1
-    <10c>   DW_AT_decl_line   : 71
- <2><10d>: Abbrev Number: 5 (DW_TAG_member)
-    <10e>   DW_AT_name        : (indirect string, offset: 0xfc): val
-    <112>   DW_AT_type        : <0x11c>
-    <116>   DW_AT_decl_file   : 1
-    <117>   DW_AT_decl_line   : 72
-    <118>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><11b>: Abbrev Number: 0
- <1><11c>: Abbrev Number: 8 (DW_TAG_array_type)
-    <11d>   DW_AT_type        : <0x129>
- <2><121>: Abbrev Number: 9 (DW_TAG_subrange_type)
-    <122>   DW_AT_type        : <0x130>
-    <126>   DW_AT_lower_bound : 0
-    <127>   DW_AT_count       : 2
- <2><128>: Abbrev Number: 0
- <1><129>: Abbrev Number: 6 (DW_TAG_base_type)
-    <12a>   DW_AT_name        : (indirect string, offset: 0x100): int
-    <12e>   DW_AT_encoding    : 5	(signed)
-    <12f>   DW_AT_byte_size   : 4
- <1><130>: Abbrev Number: 10 (DW_TAG_base_type)
-    <131>   DW_AT_name        : (indirect string, offset: 0x104): sizetype
-    <135>   DW_AT_byte_size   : 8
-    <136>   DW_AT_encoding    : 7	(unsigned)
- <1><137>: Abbrev Number: 8 (DW_TAG_array_type)
-    <138>   DW_AT_type        : <0xec>
- <2><13c>: Abbrev Number: 9 (DW_TAG_subrange_type)
-    <13d>   DW_AT_type        : <0x130>
-    <141>   DW_AT_lower_bound : 0
-    <142>   DW_AT_count       : 4
- <2><143>: Abbrev Number: 0
- <1><144>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x121): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 37
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x211): struct_statfs
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 34
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x20a): statfs
+    <41>   DW_AT_byte_size   : 64
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 29
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16d): f_type
+    <49>   DW_AT_type        : <0xed>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 30
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x18d): f_bsize
+    <57>   DW_AT_type        : <0xed>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 31
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x195): f_blocks
+    <65>   DW_AT_type        : <0xed>
+    <69>   DW_AT_decl_file   : 2
+    <6a>   DW_AT_decl_line   : 32
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x19e): f_bfree
+    <73>   DW_AT_type        : <0xed>
+    <77>   DW_AT_decl_file   : 2
+    <78>   DW_AT_decl_line   : 33
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1a6): f_bavail
+    <81>   DW_AT_type        : <0xed>
+    <85>   DW_AT_decl_file   : 2
+    <86>   DW_AT_decl_line   : 34
+    <87>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1af): f_files
+    <8f>   DW_AT_type        : <0xed>
+    <93>   DW_AT_decl_file   : 2
+    <94>   DW_AT_decl_line   : 35
+    <95>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1b7): f_ffree
+    <9d>   DW_AT_type        : <0xed>
+    <a1>   DW_AT_decl_file   : 2
+    <a2>   DW_AT_decl_line   : 36
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1bf): f_fsid
+    <ab>   DW_AT_type        : <0xff>
+    <af>   DW_AT_decl_file   : 2
+    <b0>   DW_AT_decl_line   : 37
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x1e7): f_namelen
+    <b9>   DW_AT_type        : <0xed>
+    <bd>   DW_AT_decl_file   : 2
+    <be>   DW_AT_decl_line   : 38
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x1f1): f_frsize
+    <c7>   DW_AT_type        : <0xed>
+    <cb>   DW_AT_decl_file   : 2
+    <cc>   DW_AT_decl_line   : 39
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x1fa): f_flags
+    <d5>   DW_AT_type        : <0xed>
+    <d9>   DW_AT_decl_file   : 2
+    <da>   DW_AT_decl_line   : 40
+    <db>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><de>: Abbrev Number: 5 (DW_TAG_member)
+    <df>   DW_AT_name        : (indirect string, offset: 0x202): f_spare
+    <e3>   DW_AT_type        : <0x138>
+    <e7>   DW_AT_decl_file   : 2
+    <e8>   DW_AT_decl_line   : 41
+    <e9>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><ec>: Abbrev Number: 0
+ <1><ed>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ee>   DW_AT_type        : <0xf8>
+    <f2>   DW_AT_name        : (indirect string, offset: 0x17d): __kernel_long_t
+    <f6>   DW_AT_decl_file   : 1
+    <f7>   DW_AT_decl_line   : 23
+ <1><f8>: Abbrev Number: 6 (DW_TAG_base_type)
+    <f9>   DW_AT_name        : (indirect string, offset: 0x174): long int
+    <fd>   DW_AT_encoding    : 5	(signed)
+    <fe>   DW_AT_byte_size   : 4
+ <1><ff>: Abbrev Number: 3 (DW_TAG_typedef)
+    <100>   DW_AT_type        : <0x10a>
+    <104>   DW_AT_name        : (indirect string, offset: 0x1d7): __kernel_fsid_t
+    <108>   DW_AT_decl_file   : 1
+    <109>   DW_AT_decl_line   : 73
+ <1><10a>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <10b>   DW_AT_byte_size   : 8
+    <10c>   DW_AT_decl_file   : 1
+    <10d>   DW_AT_decl_line   : 71
+ <2><10e>: Abbrev Number: 5 (DW_TAG_member)
+    <10f>   DW_AT_name        : (indirect string, offset: 0x1c6): val
+    <113>   DW_AT_type        : <0x11d>
+    <117>   DW_AT_decl_file   : 1
+    <118>   DW_AT_decl_line   : 72
+    <119>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><11c>: Abbrev Number: 0
+ <1><11d>: Abbrev Number: 8 (DW_TAG_array_type)
+    <11e>   DW_AT_type        : <0x12a>
+ <2><122>: Abbrev Number: 9 (DW_TAG_subrange_type)
+    <123>   DW_AT_type        : <0x131>
+    <127>   DW_AT_lower_bound : 0
+    <128>   DW_AT_count       : 2
+ <2><129>: Abbrev Number: 0
+ <1><12a>: Abbrev Number: 6 (DW_TAG_base_type)
+    <12b>   DW_AT_name        : (indirect string, offset: 0x1ca): int
+    <12f>   DW_AT_encoding    : 5	(signed)
+    <130>   DW_AT_byte_size   : 4
+ <1><131>: Abbrev Number: 10 (DW_TAG_base_type)
+    <132>   DW_AT_name        : (indirect string, offset: 0x1ce): sizetype
+    <136>   DW_AT_byte_size   : 8
+    <137>   DW_AT_encoding    : 7	(unsigned)
+ <1><138>: Abbrev Number: 8 (DW_TAG_array_type)
+    <139>   DW_AT_type        : <0xed>
+ <2><13d>: Abbrev Number: 9 (DW_TAG_subrange_type)
+    <13e>   DW_AT_type        : <0x131>
+    <142>   DW_AT_lower_bound : 0
+    <143>   DW_AT_count       : 4
+ <2><144>: Abbrev Number: 0
+ <1><145>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_statfs.d2 b/mpers-m32/struct_statfs.d2
index 64612ab..a5db16c 100644
--- a/mpers-m32/struct_statfs.d2
+++ b/mpers-m32/struct_statfs.d2
@@ -1,159 +1,159 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x92): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15c): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 37
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x147): struct_statfs
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x211): struct_statfs
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 34
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x140): statfs
+DW_AT_name        : (indirect string, offset: 0x20a): statfs
 DW_AT_byte_size   : 64
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 29
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa3): f_type
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x16d): f_type
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc3): f_bsize
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x18d): f_bsize
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcb): f_blocks
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x195): f_blocks
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd4): f_bfree
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x19e): f_bfree
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdc): f_bavail
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x1a6): f_bavail
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe5): f_files
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x1af): f_files
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 35
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xed): f_ffree
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x1b7): f_ffree
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf5): f_fsid
-DW_AT_type        : <0xfe>
+DW_AT_name        : (indirect string, offset: 0x1bf): f_fsid
+DW_AT_type        : <0xff>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11d): f_namelen
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x1e7): f_namelen
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x127): f_frsize
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x1f1): f_frsize
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><cf>
+<2><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x130): f_flags
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x1fa): f_flags
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><dd>
+<2><de>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x138): f_spare
-DW_AT_type        : <0x137>
+DW_AT_name        : (indirect string, offset: 0x202): f_spare
+DW_AT_type        : <0x138>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<1><ec>
+<1><ed>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xf7>
-DW_AT_name        : (indirect string, offset: 0xb3): __kernel_long_t
+DW_AT_type        : <0xf8>
+DW_AT_name        : (indirect string, offset: 0x17d): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><f7>
+<1><f8>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xaa): long int
+DW_AT_name        : (indirect string, offset: 0x174): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><fe>
+<1><ff>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x109>
-DW_AT_name        : (indirect string, offset: 0x10d): __kernel_fsid_t
+DW_AT_type        : <0x10a>
+DW_AT_name        : (indirect string, offset: 0x1d7): __kernel_fsid_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 73
-<1><109>
+<1><10a>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 71
-<2><10d>
+<2><10e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfc): val
-DW_AT_type        : <0x11c>
+DW_AT_name        : (indirect string, offset: 0x1c6): val
+DW_AT_type        : <0x11d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 72
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><11c>
+<1><11d>
 Abbrev Number: 8 (DW_TAG_array_type)
-DW_AT_type        : <0x129>
-<2><121>
+DW_AT_type        : <0x12a>
+<2><122>
 Abbrev Number: 9 (DW_TAG_subrange_type)
-DW_AT_type        : <0x130>
+DW_AT_type        : <0x131>
 DW_AT_lower_bound : 0
 DW_AT_count       : 2
-<1><129>
+<1><12a>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x100): int
+DW_AT_name        : (indirect string, offset: 0x1ca): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><130>
+<1><131>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x104): sizetype
+DW_AT_name        : (indirect string, offset: 0x1ce): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><137>
+<1><138>
 Abbrev Number: 8 (DW_TAG_array_type)
-DW_AT_type        : <0xec>
-<2><13c>
+DW_AT_type        : <0xed>
+<2><13d>
 Abbrev Number: 9 (DW_TAG_subrange_type)
-DW_AT_type        : <0x130>
+DW_AT_type        : <0x131>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4
diff --git a/mpers-m32/struct_statfs64.d1 b/mpers-m32/struct_statfs64.d1
index b14caf7..9291229 100644
--- a/mpers-m32/struct_statfs64.d1
+++ b/mpers-m32/struct_statfs64.d1
@@ -1,161 +1,162 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x153 (32-bit)
+   Length:        0x154 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_statfs64.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_statfs64.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x59): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x94): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 4
-    <29>   DW_AT_decl_line   : 37
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x168): struct_statfs64
-    <39>   DW_AT_decl_file   : 4
-    <3a>   DW_AT_decl_line   : 35
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x15f): statfs64
-    <40>   DW_AT_byte_size   : 88
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 46
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa5): f_type
-    <48>   DW_AT_type        : <0xec>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 47
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xc5): f_bsize
-    <56>   DW_AT_type        : <0xec>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 48
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xcd): f_blocks
-    <64>   DW_AT_type        : <0xfe>
-    <68>   DW_AT_decl_file   : 2
-    <69>   DW_AT_decl_line   : 49
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xf3): f_bfree
-    <72>   DW_AT_type        : <0xfe>
-    <76>   DW_AT_decl_file   : 2
-    <77>   DW_AT_decl_line   : 50
-    <78>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0xfb): f_bavail
-    <80>   DW_AT_type        : <0xfe>
-    <84>   DW_AT_decl_file   : 2
-    <85>   DW_AT_decl_line   : 51
-    <86>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x104): f_files
-    <8e>   DW_AT_type        : <0xfe>
-    <92>   DW_AT_decl_file   : 2
-    <93>   DW_AT_decl_line   : 52
-    <94>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0x10c): f_ffree
-    <9c>   DW_AT_type        : <0xfe>
-    <a0>   DW_AT_decl_file   : 2
-    <a1>   DW_AT_decl_line   : 53
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0x114): f_fsid
-    <aa>   DW_AT_type        : <0x110>
-    <ae>   DW_AT_decl_file   : 2
-    <af>   DW_AT_decl_line   : 54
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0x13c): f_namelen
-    <b8>   DW_AT_type        : <0xec>
-    <bc>   DW_AT_decl_file   : 2
-    <bd>   DW_AT_decl_line   : 55
-    <be>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x146): f_frsize
-    <c6>   DW_AT_type        : <0xec>
-    <ca>   DW_AT_decl_file   : 2
-    <cb>   DW_AT_decl_line   : 56
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
- <2><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0x14f): f_flags
-    <d4>   DW_AT_type        : <0xec>
-    <d8>   DW_AT_decl_file   : 2
-    <d9>   DW_AT_decl_line   : 57
-    <da>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><dd>: Abbrev Number: 5 (DW_TAG_member)
-    <de>   DW_AT_name        : (indirect string, offset: 0x157): f_spare
-    <e2>   DW_AT_type        : <0x149>
-    <e6>   DW_AT_decl_file   : 2
-    <e7>   DW_AT_decl_line   : 58
-    <e8>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
- <2><eb>: Abbrev Number: 0
- <1><ec>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ed>   DW_AT_type        : <0xf7>
-    <f1>   DW_AT_name        : (indirect string, offset: 0xb5): __kernel_long_t
-    <f5>   DW_AT_decl_file   : 1
-    <f6>   DW_AT_decl_line   : 23
- <1><f7>: Abbrev Number: 6 (DW_TAG_base_type)
-    <f8>   DW_AT_name        : (indirect string, offset: 0xac): long int
-    <fc>   DW_AT_encoding    : 5	(signed)
-    <fd>   DW_AT_byte_size   : 4
- <1><fe>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ff>   DW_AT_type        : <0x109>
-    <103>   DW_AT_name        : (indirect string, offset: 0xed): __u64
-    <107>   DW_AT_decl_file   : 3
-    <108>   DW_AT_decl_line   : 31
- <1><109>: Abbrev Number: 6 (DW_TAG_base_type)
-    <10a>   DW_AT_name        : (indirect string, offset: 0xd6): long long unsigned int
-    <10e>   DW_AT_encoding    : 7	(unsigned)
-    <10f>   DW_AT_byte_size   : 8
- <1><110>: Abbrev Number: 3 (DW_TAG_typedef)
-    <111>   DW_AT_type        : <0x11b>
-    <115>   DW_AT_name        : (indirect string, offset: 0x12c): __kernel_fsid_t
-    <119>   DW_AT_decl_file   : 1
-    <11a>   DW_AT_decl_line   : 73
- <1><11b>: Abbrev Number: 7 (DW_TAG_structure_type)
-    <11c>   DW_AT_byte_size   : 8
-    <11d>   DW_AT_decl_file   : 1
-    <11e>   DW_AT_decl_line   : 71
- <2><11f>: Abbrev Number: 5 (DW_TAG_member)
-    <120>   DW_AT_name        : (indirect string, offset: 0x11b): val
-    <124>   DW_AT_type        : <0x12e>
-    <128>   DW_AT_decl_file   : 1
-    <129>   DW_AT_decl_line   : 72
-    <12a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><12d>: Abbrev Number: 0
- <1><12e>: Abbrev Number: 8 (DW_TAG_array_type)
-    <12f>   DW_AT_type        : <0x13b>
- <2><133>: Abbrev Number: 9 (DW_TAG_subrange_type)
-    <134>   DW_AT_type        : <0x142>
-    <138>   DW_AT_lower_bound : 0
-    <139>   DW_AT_count       : 2
- <2><13a>: Abbrev Number: 0
- <1><13b>: Abbrev Number: 6 (DW_TAG_base_type)
-    <13c>   DW_AT_name        : (indirect string, offset: 0x11f): int
-    <140>   DW_AT_encoding    : 5	(signed)
-    <141>   DW_AT_byte_size   : 4
- <1><142>: Abbrev Number: 10 (DW_TAG_base_type)
-    <143>   DW_AT_name        : (indirect string, offset: 0x123): sizetype
-    <147>   DW_AT_byte_size   : 8
-    <148>   DW_AT_encoding    : 7	(unsigned)
- <1><149>: Abbrev Number: 8 (DW_TAG_array_type)
-    <14a>   DW_AT_type        : <0xec>
- <2><14e>: Abbrev Number: 9 (DW_TAG_subrange_type)
-    <14f>   DW_AT_type        : <0x142>
-    <153>   DW_AT_lower_bound : 0
-    <154>   DW_AT_count       : 4
- <2><155>: Abbrev Number: 0
- <1><156>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x123): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15e): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 4
+    <2a>   DW_AT_decl_line   : 37
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x232): struct_statfs64
+    <3a>   DW_AT_decl_file   : 4
+    <3b>   DW_AT_decl_line   : 35
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x229): statfs64
+    <41>   DW_AT_byte_size   : 88
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 46
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16f): f_type
+    <49>   DW_AT_type        : <0xed>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 47
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x18f): f_bsize
+    <57>   DW_AT_type        : <0xed>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 48
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x197): f_blocks
+    <65>   DW_AT_type        : <0xff>
+    <69>   DW_AT_decl_file   : 2
+    <6a>   DW_AT_decl_line   : 49
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1bd): f_bfree
+    <73>   DW_AT_type        : <0xff>
+    <77>   DW_AT_decl_file   : 2
+    <78>   DW_AT_decl_line   : 50
+    <79>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1c5): f_bavail
+    <81>   DW_AT_type        : <0xff>
+    <85>   DW_AT_decl_file   : 2
+    <86>   DW_AT_decl_line   : 51
+    <87>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1ce): f_files
+    <8f>   DW_AT_type        : <0xff>
+    <93>   DW_AT_decl_file   : 2
+    <94>   DW_AT_decl_line   : 52
+    <95>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1d6): f_ffree
+    <9d>   DW_AT_type        : <0xff>
+    <a1>   DW_AT_decl_file   : 2
+    <a2>   DW_AT_decl_line   : 53
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1de): f_fsid
+    <ab>   DW_AT_type        : <0x111>
+    <af>   DW_AT_decl_file   : 2
+    <b0>   DW_AT_decl_line   : 54
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x206): f_namelen
+    <b9>   DW_AT_type        : <0xed>
+    <bd>   DW_AT_decl_file   : 2
+    <be>   DW_AT_decl_line   : 55
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x210): f_frsize
+    <c7>   DW_AT_type        : <0xed>
+    <cb>   DW_AT_decl_file   : 2
+    <cc>   DW_AT_decl_line   : 56
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+ <2><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x219): f_flags
+    <d5>   DW_AT_type        : <0xed>
+    <d9>   DW_AT_decl_file   : 2
+    <da>   DW_AT_decl_line   : 57
+    <db>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><de>: Abbrev Number: 5 (DW_TAG_member)
+    <df>   DW_AT_name        : (indirect string, offset: 0x221): f_spare
+    <e3>   DW_AT_type        : <0x14a>
+    <e7>   DW_AT_decl_file   : 2
+    <e8>   DW_AT_decl_line   : 58
+    <e9>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
+ <2><ec>: Abbrev Number: 0
+ <1><ed>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ee>   DW_AT_type        : <0xf8>
+    <f2>   DW_AT_name        : (indirect string, offset: 0x17f): __kernel_long_t
+    <f6>   DW_AT_decl_file   : 1
+    <f7>   DW_AT_decl_line   : 23
+ <1><f8>: Abbrev Number: 6 (DW_TAG_base_type)
+    <f9>   DW_AT_name        : (indirect string, offset: 0x176): long int
+    <fd>   DW_AT_encoding    : 5	(signed)
+    <fe>   DW_AT_byte_size   : 4
+ <1><ff>: Abbrev Number: 3 (DW_TAG_typedef)
+    <100>   DW_AT_type        : <0x10a>
+    <104>   DW_AT_name        : (indirect string, offset: 0x1b7): __u64
+    <108>   DW_AT_decl_file   : 3
+    <109>   DW_AT_decl_line   : 31
+ <1><10a>: Abbrev Number: 6 (DW_TAG_base_type)
+    <10b>   DW_AT_name        : (indirect string, offset: 0x1a0): long long unsigned int
+    <10f>   DW_AT_encoding    : 7	(unsigned)
+    <110>   DW_AT_byte_size   : 8
+ <1><111>: Abbrev Number: 3 (DW_TAG_typedef)
+    <112>   DW_AT_type        : <0x11c>
+    <116>   DW_AT_name        : (indirect string, offset: 0x1f6): __kernel_fsid_t
+    <11a>   DW_AT_decl_file   : 1
+    <11b>   DW_AT_decl_line   : 73
+ <1><11c>: Abbrev Number: 7 (DW_TAG_structure_type)
+    <11d>   DW_AT_byte_size   : 8
+    <11e>   DW_AT_decl_file   : 1
+    <11f>   DW_AT_decl_line   : 71
+ <2><120>: Abbrev Number: 5 (DW_TAG_member)
+    <121>   DW_AT_name        : (indirect string, offset: 0x1e5): val
+    <125>   DW_AT_type        : <0x12f>
+    <129>   DW_AT_decl_file   : 1
+    <12a>   DW_AT_decl_line   : 72
+    <12b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><12e>: Abbrev Number: 0
+ <1><12f>: Abbrev Number: 8 (DW_TAG_array_type)
+    <130>   DW_AT_type        : <0x13c>
+ <2><134>: Abbrev Number: 9 (DW_TAG_subrange_type)
+    <135>   DW_AT_type        : <0x143>
+    <139>   DW_AT_lower_bound : 0
+    <13a>   DW_AT_count       : 2
+ <2><13b>: Abbrev Number: 0
+ <1><13c>: Abbrev Number: 6 (DW_TAG_base_type)
+    <13d>   DW_AT_name        : (indirect string, offset: 0x1e9): int
+    <141>   DW_AT_encoding    : 5	(signed)
+    <142>   DW_AT_byte_size   : 4
+ <1><143>: Abbrev Number: 10 (DW_TAG_base_type)
+    <144>   DW_AT_name        : (indirect string, offset: 0x1ed): sizetype
+    <148>   DW_AT_byte_size   : 8
+    <149>   DW_AT_encoding    : 7	(unsigned)
+ <1><14a>: Abbrev Number: 8 (DW_TAG_array_type)
+    <14b>   DW_AT_type        : <0xed>
+ <2><14f>: Abbrev Number: 9 (DW_TAG_subrange_type)
+    <150>   DW_AT_type        : <0x143>
+    <154>   DW_AT_lower_bound : 0
+    <155>   DW_AT_count       : 4
+ <2><156>: Abbrev Number: 0
+ <1><157>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_statfs64.d2 b/mpers-m32/struct_statfs64.d2
index ccfb573..5c41192 100644
--- a/mpers-m32/struct_statfs64.d2
+++ b/mpers-m32/struct_statfs64.d2
@@ -1,170 +1,170 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x94): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15e): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 37
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x168): struct_statfs64
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x232): struct_statfs64
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 35
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x15f): statfs64
+DW_AT_name        : (indirect string, offset: 0x229): statfs64
 DW_AT_byte_size   : 88
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 46
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa5): f_type
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x16f): f_type
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 47
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc5): f_bsize
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x18f): f_bsize
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 48
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcd): f_blocks
-DW_AT_type        : <0xfe>
+DW_AT_name        : (indirect string, offset: 0x197): f_blocks
+DW_AT_type        : <0xff>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 49
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf3): f_bfree
-DW_AT_type        : <0xfe>
+DW_AT_name        : (indirect string, offset: 0x1bd): f_bfree
+DW_AT_type        : <0xff>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 50
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfb): f_bavail
-DW_AT_type        : <0xfe>
+DW_AT_name        : (indirect string, offset: 0x1c5): f_bavail
+DW_AT_type        : <0xff>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 51
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x104): f_files
-DW_AT_type        : <0xfe>
+DW_AT_name        : (indirect string, offset: 0x1ce): f_files
+DW_AT_type        : <0xff>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 52
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10c): f_ffree
-DW_AT_type        : <0xfe>
+DW_AT_name        : (indirect string, offset: 0x1d6): f_ffree
+DW_AT_type        : <0xff>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 53
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x114): f_fsid
-DW_AT_type        : <0x110>
+DW_AT_name        : (indirect string, offset: 0x1de): f_fsid
+DW_AT_type        : <0x111>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 54
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13c): f_namelen
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x206): f_namelen
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 55
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x146): f_frsize
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x210): f_frsize
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 56
 DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
-<2><cf>
+<2><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14f): f_flags
-DW_AT_type        : <0xec>
+DW_AT_name        : (indirect string, offset: 0x219): f_flags
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 57
 DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<2><dd>
+<2><de>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x157): f_spare
-DW_AT_type        : <0x149>
+DW_AT_name        : (indirect string, offset: 0x221): f_spare
+DW_AT_type        : <0x14a>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 58
 DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
-<1><ec>
+<1><ed>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xf7>
-DW_AT_name        : (indirect string, offset: 0xb5): __kernel_long_t
+DW_AT_type        : <0xf8>
+DW_AT_name        : (indirect string, offset: 0x17f): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><f7>
+<1><f8>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xac): long int
+DW_AT_name        : (indirect string, offset: 0x176): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><fe>
+<1><ff>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x109>
-DW_AT_name        : (indirect string, offset: 0xed): __u64
+DW_AT_type        : <0x10a>
+DW_AT_name        : (indirect string, offset: 0x1b7): __u64
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 31
-<1><109>
+<1><10a>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xd6): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1a0): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
-<1><110>
+<1><111>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x11b>
-DW_AT_name        : (indirect string, offset: 0x12c): __kernel_fsid_t
+DW_AT_type        : <0x11c>
+DW_AT_name        : (indirect string, offset: 0x1f6): __kernel_fsid_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 73
-<1><11b>
+<1><11c>
 Abbrev Number: 7 (DW_TAG_structure_type)
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 71
-<2><11f>
+<2><120>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11b): val
-DW_AT_type        : <0x12e>
+DW_AT_name        : (indirect string, offset: 0x1e5): val
+DW_AT_type        : <0x12f>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 72
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><12e>
+<1><12f>
 Abbrev Number: 8 (DW_TAG_array_type)
-DW_AT_type        : <0x13b>
-<2><133>
+DW_AT_type        : <0x13c>
+<2><134>
 Abbrev Number: 9 (DW_TAG_subrange_type)
-DW_AT_type        : <0x142>
+DW_AT_type        : <0x143>
 DW_AT_lower_bound : 0
 DW_AT_count       : 2
-<1><13b>
+<1><13c>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x11f): int
+DW_AT_name        : (indirect string, offset: 0x1e9): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><142>
+<1><143>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x123): sizetype
+DW_AT_name        : (indirect string, offset: 0x1ed): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><149>
+<1><14a>
 Abbrev Number: 8 (DW_TAG_array_type)
-DW_AT_type        : <0xec>
-<2><14e>
+DW_AT_type        : <0xed>
+<2><14f>
 Abbrev Number: 9 (DW_TAG_subrange_type)
-DW_AT_type        : <0x142>
+DW_AT_type        : <0x143>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4
diff --git a/mpers-m32/struct_timex.d1 b/mpers-m32/struct_timex.d1
index e6c5968..7782867 100644
--- a/mpers-m32/struct_timex.d1
+++ b/mpers-m32/struct_timex.d1
@@ -1,198 +1,199 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x1b4 (32-bit)
+   Length:        0x1b5 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_timex.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_timex.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x56): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x91): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 4
-    <29>   DW_AT_decl_line   : 38
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x19c): struct_timex
-    <39>   DW_AT_decl_file   : 4
-    <3a>   DW_AT_decl_line   : 36
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x196): timex
-    <40>   DW_AT_byte_size   : 128
-    <41>   DW_AT_decl_file   : 1
-    <42>   DW_AT_decl_line   : 23
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa2): modes
-    <48>   DW_AT_type        : <0x15c>
-    <4c>   DW_AT_decl_file   : 1
-    <4d>   DW_AT_decl_line   : 24
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xb5): offset
-    <56>   DW_AT_type        : <0x163>
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 25
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xd5): freq
-    <64>   DW_AT_type        : <0x163>
-    <68>   DW_AT_decl_file   : 1
-    <69>   DW_AT_decl_line   : 26
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xda): maxerror
-    <72>   DW_AT_type        : <0x163>
-    <76>   DW_AT_decl_file   : 1
-    <77>   DW_AT_decl_line   : 27
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0xe3): esterror
-    <80>   DW_AT_type        : <0x163>
-    <84>   DW_AT_decl_file   : 1
-    <85>   DW_AT_decl_line   : 28
-    <86>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0xec): status
-    <8e>   DW_AT_type        : <0x175>
-    <92>   DW_AT_decl_file   : 1
-    <93>   DW_AT_decl_line   : 29
-    <94>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0xf7): constant
-    <9c>   DW_AT_type        : <0x163>
-    <a0>   DW_AT_decl_file   : 1
-    <a1>   DW_AT_decl_line   : 30
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0x100): precision
-    <aa>   DW_AT_type        : <0x163>
-    <ae>   DW_AT_decl_file   : 1
-    <af>   DW_AT_decl_line   : 31
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0x10a): tolerance
-    <b8>   DW_AT_type        : <0x163>
-    <bc>   DW_AT_decl_file   : 1
-    <bd>   DW_AT_decl_line   : 32
-    <be>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x114): time
-    <c6>   DW_AT_type        : <0x17c>
-    <ca>   DW_AT_decl_file   : 1
-    <cb>   DW_AT_decl_line   : 33
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0x155): tick
-    <d4>   DW_AT_type        : <0x163>
-    <d8>   DW_AT_decl_file   : 1
-    <d9>   DW_AT_decl_line   : 34
-    <da>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><dd>: Abbrev Number: 5 (DW_TAG_member)
-    <de>   DW_AT_name        : (indirect string, offset: 0x15a): ppsfreq
-    <e2>   DW_AT_type        : <0x163>
-    <e6>   DW_AT_decl_file   : 1
-    <e7>   DW_AT_decl_line   : 35
-    <e8>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><eb>: Abbrev Number: 5 (DW_TAG_member)
-    <ec>   DW_AT_name        : (indirect string, offset: 0x162): jitter
-    <f0>   DW_AT_type        : <0x163>
-    <f4>   DW_AT_decl_file   : 1
-    <f5>   DW_AT_decl_line   : 36
-    <f6>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <2><f9>: Abbrev Number: 5 (DW_TAG_member)
-    <fa>   DW_AT_name        : (indirect string, offset: 0x169): shift
-    <fe>   DW_AT_type        : <0x175>
-    <102>   DW_AT_decl_file   : 1
-    <103>   DW_AT_decl_line   : 37
-    <104>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><107>: Abbrev Number: 5 (DW_TAG_member)
-    <108>   DW_AT_name        : (indirect string, offset: 0x16f): stabil
-    <10c>   DW_AT_type        : <0x163>
-    <110>   DW_AT_decl_file   : 1
-    <111>   DW_AT_decl_line   : 38
-    <112>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
- <2><115>: Abbrev Number: 5 (DW_TAG_member)
-    <116>   DW_AT_name        : (indirect string, offset: 0x176): jitcnt
-    <11a>   DW_AT_type        : <0x163>
-    <11e>   DW_AT_decl_file   : 1
-    <11f>   DW_AT_decl_line   : 39
-    <120>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><123>: Abbrev Number: 5 (DW_TAG_member)
-    <124>   DW_AT_name        : (indirect string, offset: 0x17d): calcnt
-    <128>   DW_AT_type        : <0x163>
-    <12c>   DW_AT_decl_file   : 1
-    <12d>   DW_AT_decl_line   : 40
-    <12e>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
- <2><131>: Abbrev Number: 5 (DW_TAG_member)
-    <132>   DW_AT_name        : (indirect string, offset: 0x184): errcnt
-    <136>   DW_AT_type        : <0x163>
-    <13a>   DW_AT_decl_file   : 1
-    <13b>   DW_AT_decl_line   : 41
-    <13c>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
- <2><13f>: Abbrev Number: 5 (DW_TAG_member)
-    <140>   DW_AT_name        : (indirect string, offset: 0x18b): stbcnt
-    <144>   DW_AT_type        : <0x163>
-    <148>   DW_AT_decl_file   : 1
-    <149>   DW_AT_decl_line   : 42
-    <14a>   DW_AT_data_member_location: 2 byte block: 23 4c 	(DW_OP_plus_uconst: 76)
- <2><14d>: Abbrev Number: 5 (DW_TAG_member)
-    <14e>   DW_AT_name        : (indirect string, offset: 0x192): tai
-    <152>   DW_AT_type        : <0x175>
-    <156>   DW_AT_decl_file   : 1
-    <157>   DW_AT_decl_line   : 43
-    <158>   DW_AT_data_member_location: 2 byte block: 23 50 	(DW_OP_plus_uconst: 80)
- <2><15b>: Abbrev Number: 0
- <1><15c>: Abbrev Number: 6 (DW_TAG_base_type)
-    <15d>   DW_AT_name        : (indirect string, offset: 0xa8): unsigned int
-    <161>   DW_AT_encoding    : 7	(unsigned)
-    <162>   DW_AT_byte_size   : 4
- <1><163>: Abbrev Number: 3 (DW_TAG_typedef)
-    <164>   DW_AT_type        : <0x16e>
-    <168>   DW_AT_name        : (indirect string, offset: 0xc5): __kernel_long_t
-    <16c>   DW_AT_decl_file   : 2
-    <16d>   DW_AT_decl_line   : 23
- <1><16e>: Abbrev Number: 6 (DW_TAG_base_type)
-    <16f>   DW_AT_name        : (indirect string, offset: 0xbc): long int
-    <173>   DW_AT_encoding    : 5	(signed)
-    <174>   DW_AT_byte_size   : 4
- <1><175>: Abbrev Number: 6 (DW_TAG_base_type)
-    <176>   DW_AT_name        : (indirect string, offset: 0xf3): int
-    <17a>   DW_AT_encoding    : 5	(signed)
-    <17b>   DW_AT_byte_size   : 4
- <1><17c>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <17d>   DW_AT_name        : (indirect string, offset: 0x14d): timeval
-    <181>   DW_AT_byte_size   : 8
-    <182>   DW_AT_decl_file   : 3
-    <183>   DW_AT_decl_line   : 29
- <2><184>: Abbrev Number: 5 (DW_TAG_member)
-    <185>   DW_AT_name        : (indirect string, offset: 0x119): tv_sec
-    <189>   DW_AT_type        : <0x1a1>
-    <18d>   DW_AT_decl_file   : 3
-    <18e>   DW_AT_decl_line   : 30
-    <18f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><192>: Abbrev Number: 5 (DW_TAG_member)
-    <193>   DW_AT_name        : (indirect string, offset: 0x130): tv_usec
-    <197>   DW_AT_type        : <0x1ac>
-    <19b>   DW_AT_decl_file   : 3
-    <19c>   DW_AT_decl_line   : 31
-    <19d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><1a0>: Abbrev Number: 0
- <1><1a1>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1a2>   DW_AT_type        : <0x163>
-    <1a6>   DW_AT_name        : (indirect string, offset: 0x120): __kernel_time_t
-    <1aa>   DW_AT_decl_file   : 2
-    <1ab>   DW_AT_decl_line   : 77
- <1><1ac>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1ad>   DW_AT_type        : <0x163>
-    <1b1>   DW_AT_name        : (indirect string, offset: 0x138): __kernel_suseconds_t
-    <1b5>   DW_AT_decl_file   : 2
-    <1b6>   DW_AT_decl_line   : 43
- <1><1b7>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x120): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15b): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 4
+    <2a>   DW_AT_decl_line   : 38
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x266): struct_timex
+    <3a>   DW_AT_decl_file   : 4
+    <3b>   DW_AT_decl_line   : 36
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x260): timex
+    <41>   DW_AT_byte_size   : 128
+    <42>   DW_AT_decl_file   : 1
+    <43>   DW_AT_decl_line   : 23
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16c): modes
+    <49>   DW_AT_type        : <0x15d>
+    <4d>   DW_AT_decl_file   : 1
+    <4e>   DW_AT_decl_line   : 24
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x17f): offset
+    <57>   DW_AT_type        : <0x164>
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 25
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x19f): freq
+    <65>   DW_AT_type        : <0x164>
+    <69>   DW_AT_decl_file   : 1
+    <6a>   DW_AT_decl_line   : 26
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1a4): maxerror
+    <73>   DW_AT_type        : <0x164>
+    <77>   DW_AT_decl_file   : 1
+    <78>   DW_AT_decl_line   : 27
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1ad): esterror
+    <81>   DW_AT_type        : <0x164>
+    <85>   DW_AT_decl_file   : 1
+    <86>   DW_AT_decl_line   : 28
+    <87>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1b6): status
+    <8f>   DW_AT_type        : <0x176>
+    <93>   DW_AT_decl_file   : 1
+    <94>   DW_AT_decl_line   : 29
+    <95>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1c1): constant
+    <9d>   DW_AT_type        : <0x164>
+    <a1>   DW_AT_decl_file   : 1
+    <a2>   DW_AT_decl_line   : 30
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1ca): precision
+    <ab>   DW_AT_type        : <0x164>
+    <af>   DW_AT_decl_file   : 1
+    <b0>   DW_AT_decl_line   : 31
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x1d4): tolerance
+    <b9>   DW_AT_type        : <0x164>
+    <bd>   DW_AT_decl_file   : 1
+    <be>   DW_AT_decl_line   : 32
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x1de): time
+    <c7>   DW_AT_type        : <0x17d>
+    <cb>   DW_AT_decl_file   : 1
+    <cc>   DW_AT_decl_line   : 33
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x21f): tick
+    <d5>   DW_AT_type        : <0x164>
+    <d9>   DW_AT_decl_file   : 1
+    <da>   DW_AT_decl_line   : 34
+    <db>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><de>: Abbrev Number: 5 (DW_TAG_member)
+    <df>   DW_AT_name        : (indirect string, offset: 0x224): ppsfreq
+    <e3>   DW_AT_type        : <0x164>
+    <e7>   DW_AT_decl_file   : 1
+    <e8>   DW_AT_decl_line   : 35
+    <e9>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><ec>: Abbrev Number: 5 (DW_TAG_member)
+    <ed>   DW_AT_name        : (indirect string, offset: 0x22c): jitter
+    <f1>   DW_AT_type        : <0x164>
+    <f5>   DW_AT_decl_file   : 1
+    <f6>   DW_AT_decl_line   : 36
+    <f7>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <2><fa>: Abbrev Number: 5 (DW_TAG_member)
+    <fb>   DW_AT_name        : (indirect string, offset: 0x233): shift
+    <ff>   DW_AT_type        : <0x176>
+    <103>   DW_AT_decl_file   : 1
+    <104>   DW_AT_decl_line   : 37
+    <105>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><108>: Abbrev Number: 5 (DW_TAG_member)
+    <109>   DW_AT_name        : (indirect string, offset: 0x239): stabil
+    <10d>   DW_AT_type        : <0x164>
+    <111>   DW_AT_decl_file   : 1
+    <112>   DW_AT_decl_line   : 38
+    <113>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+ <2><116>: Abbrev Number: 5 (DW_TAG_member)
+    <117>   DW_AT_name        : (indirect string, offset: 0x240): jitcnt
+    <11b>   DW_AT_type        : <0x164>
+    <11f>   DW_AT_decl_file   : 1
+    <120>   DW_AT_decl_line   : 39
+    <121>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><124>: Abbrev Number: 5 (DW_TAG_member)
+    <125>   DW_AT_name        : (indirect string, offset: 0x247): calcnt
+    <129>   DW_AT_type        : <0x164>
+    <12d>   DW_AT_decl_file   : 1
+    <12e>   DW_AT_decl_line   : 40
+    <12f>   DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
+ <2><132>: Abbrev Number: 5 (DW_TAG_member)
+    <133>   DW_AT_name        : (indirect string, offset: 0x24e): errcnt
+    <137>   DW_AT_type        : <0x164>
+    <13b>   DW_AT_decl_file   : 1
+    <13c>   DW_AT_decl_line   : 41
+    <13d>   DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
+ <2><140>: Abbrev Number: 5 (DW_TAG_member)
+    <141>   DW_AT_name        : (indirect string, offset: 0x255): stbcnt
+    <145>   DW_AT_type        : <0x164>
+    <149>   DW_AT_decl_file   : 1
+    <14a>   DW_AT_decl_line   : 42
+    <14b>   DW_AT_data_member_location: 2 byte block: 23 4c 	(DW_OP_plus_uconst: 76)
+ <2><14e>: Abbrev Number: 5 (DW_TAG_member)
+    <14f>   DW_AT_name        : (indirect string, offset: 0x25c): tai
+    <153>   DW_AT_type        : <0x176>
+    <157>   DW_AT_decl_file   : 1
+    <158>   DW_AT_decl_line   : 43
+    <159>   DW_AT_data_member_location: 2 byte block: 23 50 	(DW_OP_plus_uconst: 80)
+ <2><15c>: Abbrev Number: 0
+ <1><15d>: Abbrev Number: 6 (DW_TAG_base_type)
+    <15e>   DW_AT_name        : (indirect string, offset: 0x172): unsigned int
+    <162>   DW_AT_encoding    : 7	(unsigned)
+    <163>   DW_AT_byte_size   : 4
+ <1><164>: Abbrev Number: 3 (DW_TAG_typedef)
+    <165>   DW_AT_type        : <0x16f>
+    <169>   DW_AT_name        : (indirect string, offset: 0x18f): __kernel_long_t
+    <16d>   DW_AT_decl_file   : 2
+    <16e>   DW_AT_decl_line   : 23
+ <1><16f>: Abbrev Number: 6 (DW_TAG_base_type)
+    <170>   DW_AT_name        : (indirect string, offset: 0x186): long int
+    <174>   DW_AT_encoding    : 5	(signed)
+    <175>   DW_AT_byte_size   : 4
+ <1><176>: Abbrev Number: 6 (DW_TAG_base_type)
+    <177>   DW_AT_name        : (indirect string, offset: 0x1bd): int
+    <17b>   DW_AT_encoding    : 5	(signed)
+    <17c>   DW_AT_byte_size   : 4
+ <1><17d>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <17e>   DW_AT_name        : (indirect string, offset: 0x217): timeval
+    <182>   DW_AT_byte_size   : 8
+    <183>   DW_AT_decl_file   : 3
+    <184>   DW_AT_decl_line   : 29
+ <2><185>: Abbrev Number: 5 (DW_TAG_member)
+    <186>   DW_AT_name        : (indirect string, offset: 0x1e3): tv_sec
+    <18a>   DW_AT_type        : <0x1a2>
+    <18e>   DW_AT_decl_file   : 3
+    <18f>   DW_AT_decl_line   : 30
+    <190>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><193>: Abbrev Number: 5 (DW_TAG_member)
+    <194>   DW_AT_name        : (indirect string, offset: 0x1fa): tv_usec
+    <198>   DW_AT_type        : <0x1ad>
+    <19c>   DW_AT_decl_file   : 3
+    <19d>   DW_AT_decl_line   : 31
+    <19e>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><1a1>: Abbrev Number: 0
+ <1><1a2>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1a3>   DW_AT_type        : <0x164>
+    <1a7>   DW_AT_name        : (indirect string, offset: 0x1ea): __kernel_time_t
+    <1ab>   DW_AT_decl_file   : 2
+    <1ac>   DW_AT_decl_line   : 77
+ <1><1ad>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1ae>   DW_AT_type        : <0x164>
+    <1b2>   DW_AT_name        : (indirect string, offset: 0x202): __kernel_suseconds_t
+    <1b6>   DW_AT_decl_file   : 2
+    <1b7>   DW_AT_decl_line   : 43
+ <1><1b8>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_timex.d2 b/mpers-m32/struct_timex.d2
index eb99903..f5d8915 100644
--- a/mpers-m32/struct_timex.d2
+++ b/mpers-m32/struct_timex.d2
@@ -1,213 +1,213 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x91): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15b): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 38
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x19c): struct_timex
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x266): struct_timex
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 36
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x196): timex
+DW_AT_name        : (indirect string, offset: 0x260): timex
 DW_AT_byte_size   : 128
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa2): modes
-DW_AT_type        : <0x15c>
+DW_AT_name        : (indirect string, offset: 0x16c): modes
+DW_AT_type        : <0x15d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb5): offset
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x17f): offset
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd5): freq
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x19f): freq
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xda): maxerror
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x1a4): maxerror
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 27
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe3): esterror
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x1ad): esterror
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xec): status
-DW_AT_type        : <0x175>
+DW_AT_name        : (indirect string, offset: 0x1b6): status
+DW_AT_type        : <0x176>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf7): constant
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x1c1): constant
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x100): precision
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x1ca): precision
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10a): tolerance
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x1d4): tolerance
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x114): time
-DW_AT_type        : <0x17c>
+DW_AT_name        : (indirect string, offset: 0x1de): time
+DW_AT_type        : <0x17d>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><cf>
+<2><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x155): tick
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x21f): tick
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><dd>
+<2><de>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15a): ppsfreq
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x224): ppsfreq
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 35
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><eb>
+<2><ec>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x162): jitter
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x22c): jitter
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<2><f9>
+<2><fa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x169): shift
-DW_AT_type        : <0x175>
+DW_AT_name        : (indirect string, offset: 0x233): shift
+DW_AT_type        : <0x176>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><107>
+<2><108>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x16f): stabil
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x239): stabil
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 38
 DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
-<2><115>
+<2><116>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x176): jitcnt
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x240): jitcnt
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 39
 DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<2><123>
+<2><124>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17d): calcnt
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x247): calcnt
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 40
 DW_AT_data_member_location: 2 byte block: 23 44 	(DW_OP_plus_uconst: 68)
-<2><131>
+<2><132>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x184): errcnt
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x24e): errcnt
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 41
 DW_AT_data_member_location: 2 byte block: 23 48 	(DW_OP_plus_uconst: 72)
-<2><13f>
+<2><140>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x18b): stbcnt
-DW_AT_type        : <0x163>
+DW_AT_name        : (indirect string, offset: 0x255): stbcnt
+DW_AT_type        : <0x164>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 42
 DW_AT_data_member_location: 2 byte block: 23 4c 	(DW_OP_plus_uconst: 76)
-<2><14d>
+<2><14e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x192): tai
-DW_AT_type        : <0x175>
+DW_AT_name        : (indirect string, offset: 0x25c): tai
+DW_AT_type        : <0x176>
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 43
 DW_AT_data_member_location: 2 byte block: 23 50 	(DW_OP_plus_uconst: 80)
-<1><15c>
+<1><15d>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa8): unsigned int
+DW_AT_name        : (indirect string, offset: 0x172): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><163>
+<1><164>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x16e>
-DW_AT_name        : (indirect string, offset: 0xc5): __kernel_long_t
+DW_AT_type        : <0x16f>
+DW_AT_name        : (indirect string, offset: 0x18f): __kernel_long_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 23
-<1><16e>
+<1><16f>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xbc): long int
+DW_AT_name        : (indirect string, offset: 0x186): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><175>
+<1><176>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xf3): int
+DW_AT_name        : (indirect string, offset: 0x1bd): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><17c>
+<1><17d>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x14d): timeval
+DW_AT_name        : (indirect string, offset: 0x217): timeval
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 29
-<2><184>
+<2><185>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x119): tv_sec
-DW_AT_type        : <0x1a1>
+DW_AT_name        : (indirect string, offset: 0x1e3): tv_sec
+DW_AT_type        : <0x1a2>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><192>
+<2><193>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x130): tv_usec
-DW_AT_type        : <0x1ac>
+DW_AT_name        : (indirect string, offset: 0x1fa): tv_usec
+DW_AT_type        : <0x1ad>
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><1a1>
+<1><1a2>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x163>
-DW_AT_name        : (indirect string, offset: 0x120): __kernel_time_t
+DW_AT_type        : <0x164>
+DW_AT_name        : (indirect string, offset: 0x1ea): __kernel_time_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 77
-<1><1ac>
+<1><1ad>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x163>
-DW_AT_name        : (indirect string, offset: 0x138): __kernel_suseconds_t
+DW_AT_type        : <0x164>
+DW_AT_name        : (indirect string, offset: 0x202): __kernel_suseconds_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 43
diff --git a/mpers-m32/struct_v4l2_buffer.d1 b/mpers-m32/struct_v4l2_buffer.d1
index cb106cf..8720e24 100644
--- a/mpers-m32/struct_v4l2_buffer.d1
+++ b/mpers-m32/struct_v4l2_buffer.d1
@@ -1,335 +1,336 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x2f2 (32-bit)
+   Length:        0x2f3 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_v4l2_buffer.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_v4l2_buffer.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5c): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 5
-    <29>   DW_AT_decl_line   : 53
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x223): struct_v4l2_buffer
-    <39>   DW_AT_decl_file   : 5
-    <3a>   DW_AT_decl_line   : 41
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x217): v4l2_buffer
-    <40>   DW_AT_byte_size   : 68
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 466
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xa8): index
-    <49>   DW_AT_type        : <0x14a>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 467
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xc1): type
-    <58>   DW_AT_type        : <0x14a>
-    <5c>   DW_AT_decl_file   : 2
-    <5d>   DW_AT_decl_line   : 468
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><62>: Abbrev Number: 5 (DW_TAG_member)
-    <63>   DW_AT_name        : (indirect string, offset: 0xc6): bytesused
-    <67>   DW_AT_type        : <0x14a>
-    <6b>   DW_AT_decl_file   : 2
-    <6c>   DW_AT_decl_line   : 469
-    <6e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><71>: Abbrev Number: 5 (DW_TAG_member)
-    <72>   DW_AT_name        : (indirect string, offset: 0xd0): flags
-    <76>   DW_AT_type        : <0x14a>
-    <7a>   DW_AT_decl_file   : 2
-    <7b>   DW_AT_decl_line   : 470
-    <7d>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><80>: Abbrev Number: 5 (DW_TAG_member)
-    <81>   DW_AT_name        : (indirect string, offset: 0xd6): field
-    <85>   DW_AT_type        : <0x14a>
-    <89>   DW_AT_decl_file   : 2
-    <8a>   DW_AT_decl_line   : 471
-    <8c>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><8f>: Abbrev Number: 5 (DW_TAG_member)
-    <90>   DW_AT_name        : (indirect string, offset: 0xdc): timestamp
-    <94>   DW_AT_type        : <0x15c>
-    <98>   DW_AT_decl_file   : 2
-    <99>   DW_AT_decl_line   : 472
-    <9b>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><9e>: Abbrev Number: 5 (DW_TAG_member)
-    <9f>   DW_AT_name        : (indirect string, offset: 0x13b): timecode
-    <a3>   DW_AT_type        : <0x1a9>
-    <a7>   DW_AT_decl_file   : 2
-    <a8>   DW_AT_decl_line   : 473
-    <aa>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><ad>: Abbrev Number: 5 (DW_TAG_member)
-    <ae>   DW_AT_name        : (indirect string, offset: 0x194): sequence
-    <b2>   DW_AT_type        : <0x14a>
-    <b6>   DW_AT_decl_file   : 2
-    <b7>   DW_AT_decl_line   : 474
-    <b9>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><bc>: Abbrev Number: 5 (DW_TAG_member)
-    <bd>   DW_AT_name        : (indirect string, offset: 0x19d): memory
-    <c1>   DW_AT_type        : <0x14a>
-    <c5>   DW_AT_decl_file   : 2
-    <c6>   DW_AT_decl_line   : 475
-    <c8>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><cb>: Abbrev Number: 5 (DW_TAG_member)
-    <cc>   DW_AT_name        : (indirect string, offset: 0x1a4): m
-    <d0>   DW_AT_type        : <0xda>
-    <d4>   DW_AT_decl_file   : 2
-    <d5>   DW_AT_decl_line   : 481
-    <d7>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <2><da>: Abbrev Number: 6 (DW_TAG_union_type)
-    <db>   DW_AT_byte_size   : 4
-    <dc>   DW_AT_decl_file   : 2
-    <dd>   DW_AT_decl_line   : 476
- <3><df>: Abbrev Number: 5 (DW_TAG_member)
-    <e0>   DW_AT_name        : (indirect string, offset: 0x1a6): offset
-    <e4>   DW_AT_type        : <0x14a>
-    <e8>   DW_AT_decl_file   : 2
-    <e9>   DW_AT_decl_line   : 477
-    <eb>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><ee>: Abbrev Number: 5 (DW_TAG_member)
-    <ef>   DW_AT_name        : (indirect string, offset: 0x1ad): userptr
-    <f3>   DW_AT_type        : <0x242>
-    <f7>   DW_AT_decl_file   : 2
-    <f8>   DW_AT_decl_line   : 478
-    <fa>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><fd>: Abbrev Number: 5 (DW_TAG_member)
-    <fe>   DW_AT_name        : (indirect string, offset: 0x1c7): planes
-    <102>   DW_AT_type        : <0x249>
-    <106>   DW_AT_decl_file   : 2
-    <107>   DW_AT_decl_line   : 479
-    <109>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><10c>: Abbrev Number: 5 (DW_TAG_member)
-    <10d>   DW_AT_name        : (indirect string, offset: 0x1e0): fd
-    <111>   DW_AT_type        : <0x2d6>
-    <115>   DW_AT_decl_file   : 2
-    <116>   DW_AT_decl_line   : 480
-    <118>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><11b>: Abbrev Number: 0
- <2><11c>: Abbrev Number: 5 (DW_TAG_member)
-    <11d>   DW_AT_name        : (indirect string, offset: 0x1ce): length
-    <121>   DW_AT_type        : <0x14a>
-    <125>   DW_AT_decl_file   : 2
-    <126>   DW_AT_decl_line   : 482
-    <128>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><12b>: Abbrev Number: 5 (DW_TAG_member)
-    <12c>   DW_AT_name        : (indirect string, offset: 0x20d): reserved2
-    <130>   DW_AT_type        : <0x14a>
-    <134>   DW_AT_decl_file   : 2
-    <135>   DW_AT_decl_line   : 483
-    <137>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
- <2><13a>: Abbrev Number: 5 (DW_TAG_member)
-    <13b>   DW_AT_name        : (indirect string, offset: 0x1f9): reserved
-    <13f>   DW_AT_type        : <0x14a>
-    <143>   DW_AT_decl_file   : 2
-    <144>   DW_AT_decl_line   : 484
-    <146>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><149>: Abbrev Number: 0
- <1><14a>: Abbrev Number: 3 (DW_TAG_typedef)
-    <14b>   DW_AT_type        : <0x155>
-    <14f>   DW_AT_name        : (indirect string, offset: 0xbb): __u32
-    <153>   DW_AT_decl_file   : 1
-    <154>   DW_AT_decl_line   : 28
- <1><155>: Abbrev Number: 7 (DW_TAG_base_type)
-    <156>   DW_AT_name        : (indirect string, offset: 0xae): unsigned int
-    <15a>   DW_AT_encoding    : 7	(unsigned)
-    <15b>   DW_AT_byte_size   : 4
- <1><15c>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <15d>   DW_AT_name        : (indirect string, offset: 0x133): timeval
-    <161>   DW_AT_byte_size   : 8
-    <162>   DW_AT_decl_file   : 4
-    <163>   DW_AT_decl_line   : 29
- <2><164>: Abbrev Number: 9 (DW_TAG_member)
-    <165>   DW_AT_name        : (indirect string, offset: 0xe6): tv_sec
-    <169>   DW_AT_type        : <0x181>
-    <16d>   DW_AT_decl_file   : 4
-    <16e>   DW_AT_decl_line   : 30
-    <16f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><172>: Abbrev Number: 9 (DW_TAG_member)
-    <173>   DW_AT_name        : (indirect string, offset: 0x116): tv_usec
-    <177>   DW_AT_type        : <0x19e>
-    <17b>   DW_AT_decl_file   : 4
-    <17c>   DW_AT_decl_line   : 31
-    <17d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><180>: Abbrev Number: 0
- <1><181>: Abbrev Number: 3 (DW_TAG_typedef)
-    <182>   DW_AT_type        : <0x18c>
-    <186>   DW_AT_name        : (indirect string, offset: 0x106): __kernel_time_t
-    <18a>   DW_AT_decl_file   : 3
-    <18b>   DW_AT_decl_line   : 77
- <1><18c>: Abbrev Number: 3 (DW_TAG_typedef)
-    <18d>   DW_AT_type        : <0x197>
-    <191>   DW_AT_name        : (indirect string, offset: 0xf6): __kernel_long_t
-    <195>   DW_AT_decl_file   : 3
-    <196>   DW_AT_decl_line   : 23
- <1><197>: Abbrev Number: 7 (DW_TAG_base_type)
-    <198>   DW_AT_name        : (indirect string, offset: 0xed): long int
-    <19c>   DW_AT_encoding    : 5	(signed)
-    <19d>   DW_AT_byte_size   : 4
- <1><19e>: Abbrev Number: 3 (DW_TAG_typedef)
-    <19f>   DW_AT_type        : <0x18c>
-    <1a3>   DW_AT_name        : (indirect string, offset: 0x11e): __kernel_suseconds_t
-    <1a7>   DW_AT_decl_file   : 3
-    <1a8>   DW_AT_decl_line   : 43
- <1><1a9>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <1aa>   DW_AT_name        : (indirect string, offset: 0x186): v4l2_timecode
-    <1ae>   DW_AT_byte_size   : 16
-    <1af>   DW_AT_decl_file   : 2
-    <1b0>   DW_AT_decl_line   : 416
- <2><1b2>: Abbrev Number: 5 (DW_TAG_member)
-    <1b3>   DW_AT_name        : (indirect string, offset: 0xc1): type
-    <1b7>   DW_AT_type        : <0x14a>
-    <1bb>   DW_AT_decl_file   : 2
-    <1bc>   DW_AT_decl_line   : 417
-    <1be>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><1c1>: Abbrev Number: 5 (DW_TAG_member)
-    <1c2>   DW_AT_name        : (indirect string, offset: 0xd0): flags
-    <1c6>   DW_AT_type        : <0x14a>
-    <1ca>   DW_AT_decl_file   : 2
-    <1cb>   DW_AT_decl_line   : 418
-    <1cd>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><1d0>: Abbrev Number: 5 (DW_TAG_member)
-    <1d1>   DW_AT_name        : (indirect string, offset: 0x144): frames
-    <1d5>   DW_AT_type        : <0x21c>
-    <1d9>   DW_AT_decl_file   : 2
-    <1da>   DW_AT_decl_line   : 419
-    <1dc>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><1df>: Abbrev Number: 5 (DW_TAG_member)
-    <1e0>   DW_AT_name        : (indirect string, offset: 0x15e): seconds
-    <1e4>   DW_AT_type        : <0x21c>
-    <1e8>   DW_AT_decl_file   : 2
-    <1e9>   DW_AT_decl_line   : 420
-    <1eb>   DW_AT_data_member_location: 2 byte block: 23 9 	(DW_OP_plus_uconst: 9)
- <2><1ee>: Abbrev Number: 5 (DW_TAG_member)
-    <1ef>   DW_AT_name        : (indirect string, offset: 0x166): minutes
-    <1f3>   DW_AT_type        : <0x21c>
-    <1f7>   DW_AT_decl_file   : 2
-    <1f8>   DW_AT_decl_line   : 421
-    <1fa>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
- <2><1fd>: Abbrev Number: 5 (DW_TAG_member)
-    <1fe>   DW_AT_name        : (indirect string, offset: 0x16e): hours
-    <202>   DW_AT_type        : <0x21c>
-    <206>   DW_AT_decl_file   : 2
-    <207>   DW_AT_decl_line   : 422
-    <209>   DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
- <2><20c>: Abbrev Number: 5 (DW_TAG_member)
-    <20d>   DW_AT_name        : (indirect string, offset: 0x174): userbits
-    <211>   DW_AT_type        : <0x22e>
-    <215>   DW_AT_decl_file   : 2
-    <216>   DW_AT_decl_line   : 423
-    <218>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><21b>: Abbrev Number: 0
- <1><21c>: Abbrev Number: 3 (DW_TAG_typedef)
-    <21d>   DW_AT_type        : <0x227>
-    <221>   DW_AT_name        : (indirect string, offset: 0x159): __u8
-    <225>   DW_AT_decl_file   : 1
-    <226>   DW_AT_decl_line   : 24
- <1><227>: Abbrev Number: 7 (DW_TAG_base_type)
-    <228>   DW_AT_name        : (indirect string, offset: 0x14b): unsigned char
-    <22c>   DW_AT_encoding    : 8	(unsigned char)
-    <22d>   DW_AT_byte_size   : 1
- <1><22e>: Abbrev Number: 10 (DW_TAG_array_type)
-    <22f>   DW_AT_type        : <0x21c>
- <2><233>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <234>   DW_AT_type        : <0x23b>
-    <238>   DW_AT_lower_bound : 0
-    <239>   DW_AT_count       : 4
- <2><23a>: Abbrev Number: 0
- <1><23b>: Abbrev Number: 12 (DW_TAG_base_type)
-    <23c>   DW_AT_name        : (indirect string, offset: 0x17d): sizetype
-    <240>   DW_AT_byte_size   : 8
-    <241>   DW_AT_encoding    : 7	(unsigned)
- <1><242>: Abbrev Number: 7 (DW_TAG_base_type)
-    <243>   DW_AT_name        : (indirect string, offset: 0x1b5): long unsigned int
-    <247>   DW_AT_encoding    : 7	(unsigned)
-    <248>   DW_AT_byte_size   : 4
- <1><249>: Abbrev Number: 13 (DW_TAG_pointer_type)
-    <24a>   DW_AT_type        : <0x24e>
- <1><24e>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <24f>   DW_AT_name        : (indirect string, offset: 0x202): v4l2_plane
-    <253>   DW_AT_byte_size   : 60
-    <254>   DW_AT_decl_file   : 2
-    <255>   DW_AT_decl_line   : 455
- <2><257>: Abbrev Number: 5 (DW_TAG_member)
-    <258>   DW_AT_name        : (indirect string, offset: 0xc6): bytesused
-    <25c>   DW_AT_type        : <0x14a>
-    <260>   DW_AT_decl_file   : 2
-    <261>   DW_AT_decl_line   : 456
-    <263>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><266>: Abbrev Number: 5 (DW_TAG_member)
-    <267>   DW_AT_name        : (indirect string, offset: 0x1ce): length
-    <26b>   DW_AT_type        : <0x14a>
-    <26f>   DW_AT_decl_file   : 2
-    <270>   DW_AT_decl_line   : 457
-    <272>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><275>: Abbrev Number: 5 (DW_TAG_member)
-    <276>   DW_AT_name        : (indirect string, offset: 0x1a4): m
-    <27a>   DW_AT_type        : <0x284>
-    <27e>   DW_AT_decl_file   : 2
-    <27f>   DW_AT_decl_line   : 462
-    <281>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><284>: Abbrev Number: 6 (DW_TAG_union_type)
-    <285>   DW_AT_byte_size   : 4
-    <286>   DW_AT_decl_file   : 2
-    <287>   DW_AT_decl_line   : 458
- <3><289>: Abbrev Number: 5 (DW_TAG_member)
-    <28a>   DW_AT_name        : (indirect string, offset: 0x1d5): mem_offset
-    <28e>   DW_AT_type        : <0x14a>
-    <292>   DW_AT_decl_file   : 2
-    <293>   DW_AT_decl_line   : 459
-    <295>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><298>: Abbrev Number: 5 (DW_TAG_member)
-    <299>   DW_AT_name        : (indirect string, offset: 0x1ad): userptr
-    <29d>   DW_AT_type        : <0x242>
-    <2a1>   DW_AT_decl_file   : 2
-    <2a2>   DW_AT_decl_line   : 460
-    <2a4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2a7>: Abbrev Number: 5 (DW_TAG_member)
-    <2a8>   DW_AT_name        : (indirect string, offset: 0x1e0): fd
-    <2ac>   DW_AT_type        : <0x2d6>
-    <2b0>   DW_AT_decl_file   : 2
-    <2b1>   DW_AT_decl_line   : 461
-    <2b3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2b6>: Abbrev Number: 0
- <2><2b7>: Abbrev Number: 5 (DW_TAG_member)
-    <2b8>   DW_AT_name        : (indirect string, offset: 0x1ed): data_offset
-    <2bc>   DW_AT_type        : <0x14a>
-    <2c0>   DW_AT_decl_file   : 2
-    <2c1>   DW_AT_decl_line   : 463
-    <2c3>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><2c6>: Abbrev Number: 5 (DW_TAG_member)
-    <2c7>   DW_AT_name        : (indirect string, offset: 0x1f9): reserved
-    <2cb>   DW_AT_type        : <0x2e8>
-    <2cf>   DW_AT_decl_file   : 2
-    <2d0>   DW_AT_decl_line   : 464
-    <2d2>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><2d5>: Abbrev Number: 0
- <1><2d6>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2d7>   DW_AT_type        : <0x2e1>
-    <2db>   DW_AT_name        : (indirect string, offset: 0x1e7): __s32
-    <2df>   DW_AT_decl_file   : 1
-    <2e0>   DW_AT_decl_line   : 27
- <1><2e1>: Abbrev Number: 7 (DW_TAG_base_type)
-    <2e2>   DW_AT_name        : (indirect string, offset: 0x1e3): int
-    <2e6>   DW_AT_encoding    : 5	(signed)
-    <2e7>   DW_AT_byte_size   : 4
- <1><2e8>: Abbrev Number: 10 (DW_TAG_array_type)
-    <2e9>   DW_AT_type        : <0x14a>
- <2><2ed>: Abbrev Number: 11 (DW_TAG_subrange_type)
-    <2ee>   DW_AT_type        : <0x23b>
-    <2f2>   DW_AT_lower_bound : 0
-    <2f3>   DW_AT_count       : 11
- <2><2f4>: Abbrev Number: 0
- <1><2f5>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x126): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 5
+    <2a>   DW_AT_decl_line   : 53
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x2ed): struct_v4l2_buffer
+    <3a>   DW_AT_decl_file   : 5
+    <3b>   DW_AT_decl_line   : 41
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x2e1): v4l2_buffer
+    <41>   DW_AT_byte_size   : 68
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 473
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x172): index
+    <4a>   DW_AT_type        : <0x14b>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 474
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x18b): type
+    <59>   DW_AT_type        : <0x14b>
+    <5d>   DW_AT_decl_file   : 2
+    <5e>   DW_AT_decl_line   : 475
+    <60>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><63>: Abbrev Number: 5 (DW_TAG_member)
+    <64>   DW_AT_name        : (indirect string, offset: 0x190): bytesused
+    <68>   DW_AT_type        : <0x14b>
+    <6c>   DW_AT_decl_file   : 2
+    <6d>   DW_AT_decl_line   : 476
+    <6f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><72>: Abbrev Number: 5 (DW_TAG_member)
+    <73>   DW_AT_name        : (indirect string, offset: 0x19a): flags
+    <77>   DW_AT_type        : <0x14b>
+    <7b>   DW_AT_decl_file   : 2
+    <7c>   DW_AT_decl_line   : 477
+    <7e>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><81>: Abbrev Number: 5 (DW_TAG_member)
+    <82>   DW_AT_name        : (indirect string, offset: 0x1a0): field
+    <86>   DW_AT_type        : <0x14b>
+    <8a>   DW_AT_decl_file   : 2
+    <8b>   DW_AT_decl_line   : 478
+    <8d>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><90>: Abbrev Number: 5 (DW_TAG_member)
+    <91>   DW_AT_name        : (indirect string, offset: 0x1a6): timestamp
+    <95>   DW_AT_type        : <0x15d>
+    <99>   DW_AT_decl_file   : 2
+    <9a>   DW_AT_decl_line   : 479
+    <9c>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><9f>: Abbrev Number: 5 (DW_TAG_member)
+    <a0>   DW_AT_name        : (indirect string, offset: 0x205): timecode
+    <a4>   DW_AT_type        : <0x1aa>
+    <a8>   DW_AT_decl_file   : 2
+    <a9>   DW_AT_decl_line   : 480
+    <ab>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><ae>: Abbrev Number: 5 (DW_TAG_member)
+    <af>   DW_AT_name        : (indirect string, offset: 0x25e): sequence
+    <b3>   DW_AT_type        : <0x14b>
+    <b7>   DW_AT_decl_file   : 2
+    <b8>   DW_AT_decl_line   : 481
+    <ba>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><bd>: Abbrev Number: 5 (DW_TAG_member)
+    <be>   DW_AT_name        : (indirect string, offset: 0x267): memory
+    <c2>   DW_AT_type        : <0x14b>
+    <c6>   DW_AT_decl_file   : 2
+    <c7>   DW_AT_decl_line   : 482
+    <c9>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><cc>: Abbrev Number: 5 (DW_TAG_member)
+    <cd>   DW_AT_name        : (indirect string, offset: 0x26e): m
+    <d1>   DW_AT_type        : <0xdb>
+    <d5>   DW_AT_decl_file   : 2
+    <d6>   DW_AT_decl_line   : 488
+    <d8>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <2><db>: Abbrev Number: 6 (DW_TAG_union_type)
+    <dc>   DW_AT_byte_size   : 4
+    <dd>   DW_AT_decl_file   : 2
+    <de>   DW_AT_decl_line   : 483
+ <3><e0>: Abbrev Number: 5 (DW_TAG_member)
+    <e1>   DW_AT_name        : (indirect string, offset: 0x270): offset
+    <e5>   DW_AT_type        : <0x14b>
+    <e9>   DW_AT_decl_file   : 2
+    <ea>   DW_AT_decl_line   : 484
+    <ec>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><ef>: Abbrev Number: 5 (DW_TAG_member)
+    <f0>   DW_AT_name        : (indirect string, offset: 0x277): userptr
+    <f4>   DW_AT_type        : <0x243>
+    <f8>   DW_AT_decl_file   : 2
+    <f9>   DW_AT_decl_line   : 485
+    <fb>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><fe>: Abbrev Number: 5 (DW_TAG_member)
+    <ff>   DW_AT_name        : (indirect string, offset: 0x291): planes
+    <103>   DW_AT_type        : <0x24a>
+    <107>   DW_AT_decl_file   : 2
+    <108>   DW_AT_decl_line   : 486
+    <10a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><10d>: Abbrev Number: 5 (DW_TAG_member)
+    <10e>   DW_AT_name        : (indirect string, offset: 0x2aa): fd
+    <112>   DW_AT_type        : <0x2d7>
+    <116>   DW_AT_decl_file   : 2
+    <117>   DW_AT_decl_line   : 487
+    <119>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><11c>: Abbrev Number: 0
+ <2><11d>: Abbrev Number: 5 (DW_TAG_member)
+    <11e>   DW_AT_name        : (indirect string, offset: 0x298): length
+    <122>   DW_AT_type        : <0x14b>
+    <126>   DW_AT_decl_file   : 2
+    <127>   DW_AT_decl_line   : 489
+    <129>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><12c>: Abbrev Number: 5 (DW_TAG_member)
+    <12d>   DW_AT_name        : (indirect string, offset: 0x2d7): reserved2
+    <131>   DW_AT_type        : <0x14b>
+    <135>   DW_AT_decl_file   : 2
+    <136>   DW_AT_decl_line   : 490
+    <138>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+ <2><13b>: Abbrev Number: 5 (DW_TAG_member)
+    <13c>   DW_AT_name        : (indirect string, offset: 0x2c3): reserved
+    <140>   DW_AT_type        : <0x14b>
+    <144>   DW_AT_decl_file   : 2
+    <145>   DW_AT_decl_line   : 491
+    <147>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><14a>: Abbrev Number: 0
+ <1><14b>: Abbrev Number: 3 (DW_TAG_typedef)
+    <14c>   DW_AT_type        : <0x156>
+    <150>   DW_AT_name        : (indirect string, offset: 0x185): __u32
+    <154>   DW_AT_decl_file   : 1
+    <155>   DW_AT_decl_line   : 28
+ <1><156>: Abbrev Number: 7 (DW_TAG_base_type)
+    <157>   DW_AT_name        : (indirect string, offset: 0x178): unsigned int
+    <15b>   DW_AT_encoding    : 7	(unsigned)
+    <15c>   DW_AT_byte_size   : 4
+ <1><15d>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <15e>   DW_AT_name        : (indirect string, offset: 0x1fd): timeval
+    <162>   DW_AT_byte_size   : 8
+    <163>   DW_AT_decl_file   : 4
+    <164>   DW_AT_decl_line   : 29
+ <2><165>: Abbrev Number: 9 (DW_TAG_member)
+    <166>   DW_AT_name        : (indirect string, offset: 0x1b0): tv_sec
+    <16a>   DW_AT_type        : <0x182>
+    <16e>   DW_AT_decl_file   : 4
+    <16f>   DW_AT_decl_line   : 30
+    <170>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><173>: Abbrev Number: 9 (DW_TAG_member)
+    <174>   DW_AT_name        : (indirect string, offset: 0x1e0): tv_usec
+    <178>   DW_AT_type        : <0x19f>
+    <17c>   DW_AT_decl_file   : 4
+    <17d>   DW_AT_decl_line   : 31
+    <17e>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><181>: Abbrev Number: 0
+ <1><182>: Abbrev Number: 3 (DW_TAG_typedef)
+    <183>   DW_AT_type        : <0x18d>
+    <187>   DW_AT_name        : (indirect string, offset: 0x1d0): __kernel_time_t
+    <18b>   DW_AT_decl_file   : 3
+    <18c>   DW_AT_decl_line   : 77
+ <1><18d>: Abbrev Number: 3 (DW_TAG_typedef)
+    <18e>   DW_AT_type        : <0x198>
+    <192>   DW_AT_name        : (indirect string, offset: 0x1c0): __kernel_long_t
+    <196>   DW_AT_decl_file   : 3
+    <197>   DW_AT_decl_line   : 23
+ <1><198>: Abbrev Number: 7 (DW_TAG_base_type)
+    <199>   DW_AT_name        : (indirect string, offset: 0x1b7): long int
+    <19d>   DW_AT_encoding    : 5	(signed)
+    <19e>   DW_AT_byte_size   : 4
+ <1><19f>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1a0>   DW_AT_type        : <0x18d>
+    <1a4>   DW_AT_name        : (indirect string, offset: 0x1e8): __kernel_suseconds_t
+    <1a8>   DW_AT_decl_file   : 3
+    <1a9>   DW_AT_decl_line   : 43
+ <1><1aa>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <1ab>   DW_AT_name        : (indirect string, offset: 0x250): v4l2_timecode
+    <1af>   DW_AT_byte_size   : 16
+    <1b0>   DW_AT_decl_file   : 2
+    <1b1>   DW_AT_decl_line   : 423
+ <2><1b3>: Abbrev Number: 5 (DW_TAG_member)
+    <1b4>   DW_AT_name        : (indirect string, offset: 0x18b): type
+    <1b8>   DW_AT_type        : <0x14b>
+    <1bc>   DW_AT_decl_file   : 2
+    <1bd>   DW_AT_decl_line   : 424
+    <1bf>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><1c2>: Abbrev Number: 5 (DW_TAG_member)
+    <1c3>   DW_AT_name        : (indirect string, offset: 0x19a): flags
+    <1c7>   DW_AT_type        : <0x14b>
+    <1cb>   DW_AT_decl_file   : 2
+    <1cc>   DW_AT_decl_line   : 425
+    <1ce>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><1d1>: Abbrev Number: 5 (DW_TAG_member)
+    <1d2>   DW_AT_name        : (indirect string, offset: 0x20e): frames
+    <1d6>   DW_AT_type        : <0x21d>
+    <1da>   DW_AT_decl_file   : 2
+    <1db>   DW_AT_decl_line   : 426
+    <1dd>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><1e0>: Abbrev Number: 5 (DW_TAG_member)
+    <1e1>   DW_AT_name        : (indirect string, offset: 0x228): seconds
+    <1e5>   DW_AT_type        : <0x21d>
+    <1e9>   DW_AT_decl_file   : 2
+    <1ea>   DW_AT_decl_line   : 427
+    <1ec>   DW_AT_data_member_location: 2 byte block: 23 9 	(DW_OP_plus_uconst: 9)
+ <2><1ef>: Abbrev Number: 5 (DW_TAG_member)
+    <1f0>   DW_AT_name        : (indirect string, offset: 0x230): minutes
+    <1f4>   DW_AT_type        : <0x21d>
+    <1f8>   DW_AT_decl_file   : 2
+    <1f9>   DW_AT_decl_line   : 428
+    <1fb>   DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+ <2><1fe>: Abbrev Number: 5 (DW_TAG_member)
+    <1ff>   DW_AT_name        : (indirect string, offset: 0x238): hours
+    <203>   DW_AT_type        : <0x21d>
+    <207>   DW_AT_decl_file   : 2
+    <208>   DW_AT_decl_line   : 429
+    <20a>   DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
+ <2><20d>: Abbrev Number: 5 (DW_TAG_member)
+    <20e>   DW_AT_name        : (indirect string, offset: 0x23e): userbits
+    <212>   DW_AT_type        : <0x22f>
+    <216>   DW_AT_decl_file   : 2
+    <217>   DW_AT_decl_line   : 430
+    <219>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><21c>: Abbrev Number: 0
+ <1><21d>: Abbrev Number: 3 (DW_TAG_typedef)
+    <21e>   DW_AT_type        : <0x228>
+    <222>   DW_AT_name        : (indirect string, offset: 0x223): __u8
+    <226>   DW_AT_decl_file   : 1
+    <227>   DW_AT_decl_line   : 24
+ <1><228>: Abbrev Number: 7 (DW_TAG_base_type)
+    <229>   DW_AT_name        : (indirect string, offset: 0x215): unsigned char
+    <22d>   DW_AT_encoding    : 8	(unsigned char)
+    <22e>   DW_AT_byte_size   : 1
+ <1><22f>: Abbrev Number: 10 (DW_TAG_array_type)
+    <230>   DW_AT_type        : <0x21d>
+ <2><234>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <235>   DW_AT_type        : <0x23c>
+    <239>   DW_AT_lower_bound : 0
+    <23a>   DW_AT_count       : 4
+ <2><23b>: Abbrev Number: 0
+ <1><23c>: Abbrev Number: 12 (DW_TAG_base_type)
+    <23d>   DW_AT_name        : (indirect string, offset: 0x247): sizetype
+    <241>   DW_AT_byte_size   : 8
+    <242>   DW_AT_encoding    : 7	(unsigned)
+ <1><243>: Abbrev Number: 7 (DW_TAG_base_type)
+    <244>   DW_AT_name        : (indirect string, offset: 0x27f): long unsigned int
+    <248>   DW_AT_encoding    : 7	(unsigned)
+    <249>   DW_AT_byte_size   : 4
+ <1><24a>: Abbrev Number: 13 (DW_TAG_pointer_type)
+    <24b>   DW_AT_type        : <0x24f>
+ <1><24f>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <250>   DW_AT_name        : (indirect string, offset: 0x2cc): v4l2_plane
+    <254>   DW_AT_byte_size   : 60
+    <255>   DW_AT_decl_file   : 2
+    <256>   DW_AT_decl_line   : 462
+ <2><258>: Abbrev Number: 5 (DW_TAG_member)
+    <259>   DW_AT_name        : (indirect string, offset: 0x190): bytesused
+    <25d>   DW_AT_type        : <0x14b>
+    <261>   DW_AT_decl_file   : 2
+    <262>   DW_AT_decl_line   : 463
+    <264>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><267>: Abbrev Number: 5 (DW_TAG_member)
+    <268>   DW_AT_name        : (indirect string, offset: 0x298): length
+    <26c>   DW_AT_type        : <0x14b>
+    <270>   DW_AT_decl_file   : 2
+    <271>   DW_AT_decl_line   : 464
+    <273>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><276>: Abbrev Number: 5 (DW_TAG_member)
+    <277>   DW_AT_name        : (indirect string, offset: 0x26e): m
+    <27b>   DW_AT_type        : <0x285>
+    <27f>   DW_AT_decl_file   : 2
+    <280>   DW_AT_decl_line   : 469
+    <282>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><285>: Abbrev Number: 6 (DW_TAG_union_type)
+    <286>   DW_AT_byte_size   : 4
+    <287>   DW_AT_decl_file   : 2
+    <288>   DW_AT_decl_line   : 465
+ <3><28a>: Abbrev Number: 5 (DW_TAG_member)
+    <28b>   DW_AT_name        : (indirect string, offset: 0x29f): mem_offset
+    <28f>   DW_AT_type        : <0x14b>
+    <293>   DW_AT_decl_file   : 2
+    <294>   DW_AT_decl_line   : 466
+    <296>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><299>: Abbrev Number: 5 (DW_TAG_member)
+    <29a>   DW_AT_name        : (indirect string, offset: 0x277): userptr
+    <29e>   DW_AT_type        : <0x243>
+    <2a2>   DW_AT_decl_file   : 2
+    <2a3>   DW_AT_decl_line   : 467
+    <2a5>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2a8>: Abbrev Number: 5 (DW_TAG_member)
+    <2a9>   DW_AT_name        : (indirect string, offset: 0x2aa): fd
+    <2ad>   DW_AT_type        : <0x2d7>
+    <2b1>   DW_AT_decl_file   : 2
+    <2b2>   DW_AT_decl_line   : 468
+    <2b4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2b7>: Abbrev Number: 0
+ <2><2b8>: Abbrev Number: 5 (DW_TAG_member)
+    <2b9>   DW_AT_name        : (indirect string, offset: 0x2b7): data_offset
+    <2bd>   DW_AT_type        : <0x14b>
+    <2c1>   DW_AT_decl_file   : 2
+    <2c2>   DW_AT_decl_line   : 470
+    <2c4>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><2c7>: Abbrev Number: 5 (DW_TAG_member)
+    <2c8>   DW_AT_name        : (indirect string, offset: 0x2c3): reserved
+    <2cc>   DW_AT_type        : <0x2e9>
+    <2d0>   DW_AT_decl_file   : 2
+    <2d1>   DW_AT_decl_line   : 471
+    <2d3>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><2d6>: Abbrev Number: 0
+ <1><2d7>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2d8>   DW_AT_type        : <0x2e2>
+    <2dc>   DW_AT_name        : (indirect string, offset: 0x2b1): __s32
+    <2e0>   DW_AT_decl_file   : 1
+    <2e1>   DW_AT_decl_line   : 27
+ <1><2e2>: Abbrev Number: 7 (DW_TAG_base_type)
+    <2e3>   DW_AT_name        : (indirect string, offset: 0x2ad): int
+    <2e7>   DW_AT_encoding    : 5	(signed)
+    <2e8>   DW_AT_byte_size   : 4
+ <1><2e9>: Abbrev Number: 10 (DW_TAG_array_type)
+    <2ea>   DW_AT_type        : <0x14b>
+ <2><2ee>: Abbrev Number: 11 (DW_TAG_subrange_type)
+    <2ef>   DW_AT_type        : <0x23c>
+    <2f3>   DW_AT_lower_bound : 0
+    <2f4>   DW_AT_count       : 11
+ <2><2f5>: Abbrev Number: 0
+ <1><2f6>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_v4l2_buffer.d2 b/mpers-m32/struct_v4l2_buffer.d2
index a7985eb..4509c92 100644
--- a/mpers-m32/struct_v4l2_buffer.d2
+++ b/mpers-m32/struct_v4l2_buffer.d2
@@ -1,371 +1,371 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 53
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x223): struct_v4l2_buffer
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x2ed): struct_v4l2_buffer
 DW_AT_decl_file   : 5
 DW_AT_decl_line   : 41
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x217): v4l2_buffer
+DW_AT_name        : (indirect string, offset: 0x2e1): v4l2_buffer
 DW_AT_byte_size   : 68
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 466
-<2><44>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa8): index
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 467
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc1): type
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 468
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><62>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc6): bytesused
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 469
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><71>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd0): flags
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 470
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><80>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd6): field
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 471
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><8f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdc): timestamp
-DW_AT_type        : <0x15c>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 472
-DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><9e>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13b): timecode
-DW_AT_type        : <0x1a9>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 473
-DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><ad>
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x194): sequence
-DW_AT_type        : <0x14a>
+DW_AT_name        : (indirect string, offset: 0x172): index
+DW_AT_type        : <0x14b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 474
-DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><bc>
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x19d): memory
-DW_AT_type        : <0x14a>
+DW_AT_name        : (indirect string, offset: 0x18b): type
+DW_AT_type        : <0x14b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 475
-DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><cb>
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><63>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1a4): m
-DW_AT_type        : <0xda>
+DW_AT_name        : (indirect string, offset: 0x190): bytesused
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 476
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><72>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x19a): flags
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 477
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><81>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1a0): field
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 478
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><90>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1a6): timestamp
+DW_AT_type        : <0x15d>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 479
+DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+<2><9f>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x205): timecode
+DW_AT_type        : <0x1aa>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 480
+DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+<2><ae>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x25e): sequence
+DW_AT_type        : <0x14b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 481
+DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+<2><bd>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x267): memory
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 482
+DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+<2><cc>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x26e): m
+DW_AT_type        : <0xdb>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 488
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<2><da>
+<2><db>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 476
-<3><df>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1a6): offset
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 477
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><ee>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1ad): userptr
-DW_AT_type        : <0x242>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 478
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><fd>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1c7): planes
-DW_AT_type        : <0x249>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 479
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><10c>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1e0): fd
-DW_AT_type        : <0x2d6>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 480
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><11c>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1ce): length
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 482
-DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><12b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x20d): reserved2
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 483
-DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
-<2><13a>
+<3><e0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f9): reserved
-DW_AT_type        : <0x14a>
+DW_AT_name        : (indirect string, offset: 0x270): offset
+DW_AT_type        : <0x14b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 484
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><ef>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x277): userptr
+DW_AT_type        : <0x243>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 485
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><fe>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x291): planes
+DW_AT_type        : <0x24a>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 486
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><10d>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2aa): fd
+DW_AT_type        : <0x2d7>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 487
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><11d>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x298): length
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 489
+DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+<2><12c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2d7): reserved2
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 490
+DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+<2><13b>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2c3): reserved
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 491
 DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<1><14a>
+<1><14b>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x155>
-DW_AT_name        : (indirect string, offset: 0xbb): __u32
+DW_AT_type        : <0x156>
+DW_AT_name        : (indirect string, offset: 0x185): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><155>
+<1><156>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xae): unsigned int
+DW_AT_name        : (indirect string, offset: 0x178): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><15c>
+<1><15d>
 Abbrev Number: 8 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x133): timeval
+DW_AT_name        : (indirect string, offset: 0x1fd): timeval
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 29
-<2><164>
+<2><165>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe6): tv_sec
-DW_AT_type        : <0x181>
+DW_AT_name        : (indirect string, offset: 0x1b0): tv_sec
+DW_AT_type        : <0x182>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><172>
+<2><173>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x116): tv_usec
-DW_AT_type        : <0x19e>
+DW_AT_name        : (indirect string, offset: 0x1e0): tv_usec
+DW_AT_type        : <0x19f>
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><181>
+<1><182>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x18c>
-DW_AT_name        : (indirect string, offset: 0x106): __kernel_time_t
+DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x1d0): __kernel_time_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 77
-<1><18c>
+<1><18d>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x197>
-DW_AT_name        : (indirect string, offset: 0xf6): __kernel_long_t
+DW_AT_type        : <0x198>
+DW_AT_name        : (indirect string, offset: 0x1c0): __kernel_long_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 23
-<1><197>
+<1><198>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xed): long int
+DW_AT_name        : (indirect string, offset: 0x1b7): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><19e>
+<1><19f>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x18c>
-DW_AT_name        : (indirect string, offset: 0x11e): __kernel_suseconds_t
+DW_AT_type        : <0x18d>
+DW_AT_name        : (indirect string, offset: 0x1e8): __kernel_suseconds_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 43
-<1><1a9>
+<1><1aa>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x186): v4l2_timecode
+DW_AT_name        : (indirect string, offset: 0x250): v4l2_timecode
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 416
-<2><1b2>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc1): type
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 417
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><1c1>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd0): flags
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 418
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><1d0>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x144): frames
-DW_AT_type        : <0x21c>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 419
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><1df>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15e): seconds
-DW_AT_type        : <0x21c>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 420
-DW_AT_data_member_location: 2 byte block: 23 9 	(DW_OP_plus_uconst: 9)
-<2><1ee>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x166): minutes
-DW_AT_type        : <0x21c>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 421
-DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
-<2><1fd>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x16e): hours
-DW_AT_type        : <0x21c>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 422
-DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
-<2><20c>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x174): userbits
-DW_AT_type        : <0x22e>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 423
+<2><1b3>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x18b): type
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 424
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><1c2>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x19a): flags
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 425
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><1d1>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x20e): frames
+DW_AT_type        : <0x21d>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 426
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><1e0>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x228): seconds
+DW_AT_type        : <0x21d>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 427
+DW_AT_data_member_location: 2 byte block: 23 9 	(DW_OP_plus_uconst: 9)
+<2><1ef>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x230): minutes
+DW_AT_type        : <0x21d>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 428
+DW_AT_data_member_location: 2 byte block: 23 a 	(DW_OP_plus_uconst: 10)
+<2><1fe>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x238): hours
+DW_AT_type        : <0x21d>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 429
+DW_AT_data_member_location: 2 byte block: 23 b 	(DW_OP_plus_uconst: 11)
+<2><20d>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x23e): userbits
+DW_AT_type        : <0x22f>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 430
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><21c>
+<1><21d>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x227>
-DW_AT_name        : (indirect string, offset: 0x159): __u8
+DW_AT_type        : <0x228>
+DW_AT_name        : (indirect string, offset: 0x223): __u8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
-<1><227>
+<1><228>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x14b): unsigned char
+DW_AT_name        : (indirect string, offset: 0x215): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><22e>
+<1><22f>
 Abbrev Number: 10 (DW_TAG_array_type)
-DW_AT_type        : <0x21c>
-<2><233>
+DW_AT_type        : <0x21d>
+<2><234>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x23b>
+DW_AT_type        : <0x23c>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4
-<1><23b>
+<1><23c>
 Abbrev Number: 12 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x17d): sizetype
+DW_AT_name        : (indirect string, offset: 0x247): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><242>
+<1><243>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1b5): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x27f): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><249>
+<1><24a>
 Abbrev Number: 13 (DW_TAG_pointer_type)
-DW_AT_type        : <0x24e>
-<1><24e>
+DW_AT_type        : <0x24f>
+<1><24f>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x202): v4l2_plane
+DW_AT_name        : (indirect string, offset: 0x2cc): v4l2_plane
 DW_AT_byte_size   : 60
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 455
-<2><257>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc6): bytesused
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 456
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><266>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1ce): length
-DW_AT_type        : <0x14a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 457
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><275>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1a4): m
-DW_AT_type        : <0x284>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 462
+<2><258>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x190): bytesused
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 463
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><267>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x298): length
+DW_AT_type        : <0x14b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 464
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><276>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x26e): m
+DW_AT_type        : <0x285>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 469
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><284>
+<2><285>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 458
-<3><289>
+DW_AT_decl_line   : 465
+<3><28a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d5): mem_offset
-DW_AT_type        : <0x14a>
+DW_AT_name        : (indirect string, offset: 0x29f): mem_offset
+DW_AT_type        : <0x14b>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 459
+DW_AT_decl_line   : 466
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><298>
+<3><299>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1ad): userptr
-DW_AT_type        : <0x242>
+DW_AT_name        : (indirect string, offset: 0x277): userptr
+DW_AT_type        : <0x243>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 460
+DW_AT_decl_line   : 467
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><2a7>
+<3><2a8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1e0): fd
-DW_AT_type        : <0x2d6>
+DW_AT_name        : (indirect string, offset: 0x2aa): fd
+DW_AT_type        : <0x2d7>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 461
+DW_AT_decl_line   : 468
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><2b7>
+<2><2b8>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1ed): data_offset
-DW_AT_type        : <0x14a>
+DW_AT_name        : (indirect string, offset: 0x2b7): data_offset
+DW_AT_type        : <0x14b>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 463
+DW_AT_decl_line   : 470
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><2c6>
+<2><2c7>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f9): reserved
-DW_AT_type        : <0x2e8>
+DW_AT_name        : (indirect string, offset: 0x2c3): reserved
+DW_AT_type        : <0x2e9>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 464
+DW_AT_decl_line   : 471
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<1><2d6>
+<1><2d7>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x2e1>
-DW_AT_name        : (indirect string, offset: 0x1e7): __s32
+DW_AT_type        : <0x2e2>
+DW_AT_name        : (indirect string, offset: 0x2b1): __s32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 27
-<1><2e1>
+<1><2e2>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1e3): int
+DW_AT_name        : (indirect string, offset: 0x2ad): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><2e8>
+<1><2e9>
 Abbrev Number: 10 (DW_TAG_array_type)
-DW_AT_type        : <0x14a>
-<2><2ed>
+DW_AT_type        : <0x14b>
+<2><2ee>
 Abbrev Number: 11 (DW_TAG_subrange_type)
-DW_AT_type        : <0x23b>
+DW_AT_type        : <0x23c>
 DW_AT_lower_bound : 0
 DW_AT_count       : 11
diff --git a/mpers-m32/struct_v4l2_clip.d1 b/mpers-m32/struct_v4l2_clip.d1
index 7d5b725..b8eff5a 100644
--- a/mpers-m32/struct_v4l2_clip.d1
+++ b/mpers-m32/struct_v4l2_clip.d1
@@ -1,95 +1,96 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0xca (32-bit)
+   Length:        0xcb (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_v4l2_clip.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_v4l2_clip.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5a): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 53
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xf4): struct_v4l2_clip
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 42
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xea): v4l2_clip
-    <40>   DW_AT_byte_size   : 20
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 543
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xa6): c
-    <49>   DW_AT_type        : <0x63>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 544
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xe5): next
-    <58>   DW_AT_type        : <0xc8>
-    <5c>   DW_AT_decl_file   : 2
-    <5d>   DW_AT_decl_line   : 545
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><62>: Abbrev Number: 0
- <1><63>: Abbrev Number: 6 (DW_TAG_structure_type)
-    <64>   DW_AT_name        : (indirect string, offset: 0xdb): v4l2_rect
-    <68>   DW_AT_byte_size   : 16
-    <69>   DW_AT_decl_file   : 2
-    <6a>   DW_AT_decl_line   : 135
- <2><6b>: Abbrev Number: 7 (DW_TAG_member)
-    <6c>   DW_AT_name        : (indirect string, offset: 0xa8): left
-    <70>   DW_AT_type        : <0xa4>
-    <74>   DW_AT_decl_file   : 2
-    <75>   DW_AT_decl_line   : 136
-    <76>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><79>: Abbrev Number: 7 (DW_TAG_member)
-    <7a>   DW_AT_name        : (indirect string, offset: 0xb7): top
-    <7e>   DW_AT_type        : <0xa4>
-    <82>   DW_AT_decl_file   : 2
-    <83>   DW_AT_decl_line   : 137
-    <84>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><87>: Abbrev Number: 7 (DW_TAG_member)
-    <88>   DW_AT_name        : (indirect string, offset: 0xbb): width
-    <8c>   DW_AT_type        : <0xb6>
-    <90>   DW_AT_decl_file   : 2
-    <91>   DW_AT_decl_line   : 138
-    <92>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><95>: Abbrev Number: 7 (DW_TAG_member)
-    <96>   DW_AT_name        : (indirect string, offset: 0xd4): height
-    <9a>   DW_AT_type        : <0xb6>
-    <9e>   DW_AT_decl_file   : 2
-    <9f>   DW_AT_decl_line   : 139
-    <a0>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><a3>: Abbrev Number: 0
- <1><a4>: Abbrev Number: 3 (DW_TAG_typedef)
-    <a5>   DW_AT_type        : <0xaf>
-    <a9>   DW_AT_name        : (indirect string, offset: 0xb1): __s32
-    <ad>   DW_AT_decl_file   : 1
-    <ae>   DW_AT_decl_line   : 27
- <1><af>: Abbrev Number: 8 (DW_TAG_base_type)
-    <b0>   DW_AT_name        : (indirect string, offset: 0xad): int
-    <b4>   DW_AT_encoding    : 5	(signed)
-    <b5>   DW_AT_byte_size   : 4
- <1><b6>: Abbrev Number: 3 (DW_TAG_typedef)
-    <b7>   DW_AT_type        : <0xc1>
-    <bb>   DW_AT_name        : (indirect string, offset: 0xce): __u32
-    <bf>   DW_AT_decl_file   : 1
-    <c0>   DW_AT_decl_line   : 28
- <1><c1>: Abbrev Number: 8 (DW_TAG_base_type)
-    <c2>   DW_AT_name        : (indirect string, offset: 0xc1): unsigned int
-    <c6>   DW_AT_encoding    : 7	(unsigned)
-    <c7>   DW_AT_byte_size   : 4
- <1><c8>: Abbrev Number: 9 (DW_TAG_pointer_type)
-    <c9>   DW_AT_type        : <0x3b>
- <1><cd>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x124): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 53
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1be): struct_v4l2_clip
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 42
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1b4): v4l2_clip
+    <41>   DW_AT_byte_size   : 20
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 550
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x170): c
+    <4a>   DW_AT_type        : <0x64>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 551
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x1af): next
+    <59>   DW_AT_type        : <0xc9>
+    <5d>   DW_AT_decl_file   : 2
+    <5e>   DW_AT_decl_line   : 552
+    <60>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><63>: Abbrev Number: 0
+ <1><64>: Abbrev Number: 6 (DW_TAG_structure_type)
+    <65>   DW_AT_name        : (indirect string, offset: 0x1a5): v4l2_rect
+    <69>   DW_AT_byte_size   : 16
+    <6a>   DW_AT_decl_file   : 2
+    <6b>   DW_AT_decl_line   : 135
+ <2><6c>: Abbrev Number: 7 (DW_TAG_member)
+    <6d>   DW_AT_name        : (indirect string, offset: 0x172): left
+    <71>   DW_AT_type        : <0xa5>
+    <75>   DW_AT_decl_file   : 2
+    <76>   DW_AT_decl_line   : 136
+    <77>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><7a>: Abbrev Number: 7 (DW_TAG_member)
+    <7b>   DW_AT_name        : (indirect string, offset: 0x181): top
+    <7f>   DW_AT_type        : <0xa5>
+    <83>   DW_AT_decl_file   : 2
+    <84>   DW_AT_decl_line   : 137
+    <85>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><88>: Abbrev Number: 7 (DW_TAG_member)
+    <89>   DW_AT_name        : (indirect string, offset: 0x185): width
+    <8d>   DW_AT_type        : <0xb7>
+    <91>   DW_AT_decl_file   : 2
+    <92>   DW_AT_decl_line   : 138
+    <93>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><96>: Abbrev Number: 7 (DW_TAG_member)
+    <97>   DW_AT_name        : (indirect string, offset: 0x19e): height
+    <9b>   DW_AT_type        : <0xb7>
+    <9f>   DW_AT_decl_file   : 2
+    <a0>   DW_AT_decl_line   : 139
+    <a1>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><a4>: Abbrev Number: 0
+ <1><a5>: Abbrev Number: 3 (DW_TAG_typedef)
+    <a6>   DW_AT_type        : <0xb0>
+    <aa>   DW_AT_name        : (indirect string, offset: 0x17b): __s32
+    <ae>   DW_AT_decl_file   : 1
+    <af>   DW_AT_decl_line   : 27
+ <1><b0>: Abbrev Number: 8 (DW_TAG_base_type)
+    <b1>   DW_AT_name        : (indirect string, offset: 0x177): int
+    <b5>   DW_AT_encoding    : 5	(signed)
+    <b6>   DW_AT_byte_size   : 4
+ <1><b7>: Abbrev Number: 3 (DW_TAG_typedef)
+    <b8>   DW_AT_type        : <0xc2>
+    <bc>   DW_AT_name        : (indirect string, offset: 0x198): __u32
+    <c0>   DW_AT_decl_file   : 1
+    <c1>   DW_AT_decl_line   : 28
+ <1><c2>: Abbrev Number: 8 (DW_TAG_base_type)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x18b): unsigned int
+    <c7>   DW_AT_encoding    : 7	(unsigned)
+    <c8>   DW_AT_byte_size   : 4
+ <1><c9>: Abbrev Number: 9 (DW_TAG_pointer_type)
+    <ca>   DW_AT_type        : <0x3c>
+ <1><ce>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_v4l2_clip.d2 b/mpers-m32/struct_v4l2_clip.d2
index 2274f93..1b5c8fc 100644
--- a/mpers-m32/struct_v4l2_clip.d2
+++ b/mpers-m32/struct_v4l2_clip.d2
@@ -1,93 +1,93 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x95): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x15f): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 53
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xf4): struct_v4l2_clip
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1be): struct_v4l2_clip
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 42
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xea): v4l2_clip
+DW_AT_name        : (indirect string, offset: 0x1b4): v4l2_clip
 DW_AT_byte_size   : 20
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 543
-<2><44>
+DW_AT_decl_line   : 550
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa6): c
-DW_AT_type        : <0x63>
+DW_AT_name        : (indirect string, offset: 0x170): c
+DW_AT_type        : <0x64>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 544
+DW_AT_decl_line   : 551
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe5): next
-DW_AT_type        : <0xc8>
+DW_AT_name        : (indirect string, offset: 0x1af): next
+DW_AT_type        : <0xc9>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 545
+DW_AT_decl_line   : 552
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<1><63>
+<1><64>
 Abbrev Number: 6 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xdb): v4l2_rect
+DW_AT_name        : (indirect string, offset: 0x1a5): v4l2_rect
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 135
-<2><6b>
+<2><6c>
 Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa8): left
-DW_AT_type        : <0xa4>
+DW_AT_name        : (indirect string, offset: 0x172): left
+DW_AT_type        : <0xa5>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 136
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><79>
+<2><7a>
 Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb7): top
-DW_AT_type        : <0xa4>
+DW_AT_name        : (indirect string, offset: 0x181): top
+DW_AT_type        : <0xa5>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 137
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><87>
+<2><88>
 Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xbb): width
-DW_AT_type        : <0xb6>
+DW_AT_name        : (indirect string, offset: 0x185): width
+DW_AT_type        : <0xb7>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 138
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><95>
+<2><96>
 Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd4): height
-DW_AT_type        : <0xb6>
+DW_AT_name        : (indirect string, offset: 0x19e): height
+DW_AT_type        : <0xb7>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 139
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><a4>
+<1><a5>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xaf>
-DW_AT_name        : (indirect string, offset: 0xb1): __s32
+DW_AT_type        : <0xb0>
+DW_AT_name        : (indirect string, offset: 0x17b): __s32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 27
-<1><af>
+<1><b0>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xad): int
+DW_AT_name        : (indirect string, offset: 0x177): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><b6>
+<1><b7>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xc1>
-DW_AT_name        : (indirect string, offset: 0xce): __u32
+DW_AT_type        : <0xc2>
+DW_AT_name        : (indirect string, offset: 0x198): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><c1>
+<1><c2>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc1): unsigned int
+DW_AT_name        : (indirect string, offset: 0x18b): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><c8>
+<1><c9>
 Abbrev Number: 9 (DW_TAG_pointer_type)
-DW_AT_type        : <0x3b>
+DW_AT_type        : <0x3c>
diff --git a/mpers-m32/struct_v4l2_create_buffers.d1 b/mpers-m32/struct_v4l2_create_buffers.d1
index b9c1f97..339249f 100644
--- a/mpers-m32/struct_v4l2_create_buffers.d1
+++ b/mpers-m32/struct_v4l2_create_buffers.d1
@@ -1,678 +1,679 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x5f1 (32-bit)
+   Length:        0x5f2 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_v4l2_create_buffers.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_v4l2_create_buffers.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x64): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x9f): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 53
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x357): struct_v4l2_create_buffers
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 44
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x343): v4l2_create_buffers
-    <40>   DW_AT_byte_size   : 248
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 1253
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xb0): index
-    <49>   DW_AT_type        : <0x91>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 1254
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xc9): count
-    <58>   DW_AT_type        : <0x91>
-    <5c>   DW_AT_decl_file   : 2
-    <5d>   DW_AT_decl_line   : 1255
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><62>: Abbrev Number: 5 (DW_TAG_member)
-    <63>   DW_AT_name        : (indirect string, offset: 0xcf): memory
-    <67>   DW_AT_type        : <0x91>
-    <6b>   DW_AT_decl_file   : 2
-    <6c>   DW_AT_decl_line   : 1256
-    <6e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><71>: Abbrev Number: 5 (DW_TAG_member)
-    <72>   DW_AT_name        : (indirect string, offset: 0xd6): format
-    <76>   DW_AT_type        : <0xa3>
-    <7a>   DW_AT_decl_file   : 2
-    <7b>   DW_AT_decl_line   : 1257
-    <7d>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><80>: Abbrev Number: 5 (DW_TAG_member)
-    <81>   DW_AT_name        : (indirect string, offset: 0x180): reserved
-    <85>   DW_AT_type        : <0x5e7>
-    <89>   DW_AT_decl_file   : 2
-    <8a>   DW_AT_decl_line   : 1258
-    <8c>   DW_AT_data_member_location: 3 byte block: 23 d8 1 	(DW_OP_plus_uconst: 216)
- <2><90>: Abbrev Number: 0
- <1><91>: Abbrev Number: 3 (DW_TAG_typedef)
-    <92>   DW_AT_type        : <0x9c>
-    <96>   DW_AT_name        : (indirect string, offset: 0xc3): __u32
-    <9a>   DW_AT_decl_file   : 1
-    <9b>   DW_AT_decl_line   : 28
- <1><9c>: Abbrev Number: 6 (DW_TAG_base_type)
-    <9d>   DW_AT_name        : (indirect string, offset: 0xb6): unsigned int
-    <a1>   DW_AT_encoding    : 7	(unsigned)
-    <a2>   DW_AT_byte_size   : 4
- <1><a3>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <a4>   DW_AT_name        : (indirect string, offset: 0x337): v4l2_format
-    <a8>   DW_AT_byte_size   : 204
-    <a9>   DW_AT_decl_file   : 2
-    <aa>   DW_AT_decl_line   : 1141
- <2><ac>: Abbrev Number: 5 (DW_TAG_member)
-    <ad>   DW_AT_name        : (indirect string, offset: 0xdd): type
-    <b1>   DW_AT_type        : <0x91>
-    <b5>   DW_AT_decl_file   : 2
-    <b6>   DW_AT_decl_line   : 1142
-    <b8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><bb>: Abbrev Number: 5 (DW_TAG_member)
-    <bc>   DW_AT_name        : (indirect string, offset: 0xe2): fmt
-    <c0>   DW_AT_type        : <0xca>
-    <c4>   DW_AT_decl_file   : 2
-    <c5>   DW_AT_decl_line   : 1152
-    <c7>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><ca>: Abbrev Number: 7 (DW_TAG_union_type)
-    <cb>   DW_AT_byte_size   : 200
-    <cc>   DW_AT_decl_file   : 2
-    <cd>   DW_AT_decl_line   : 1143
- <3><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0xe6): pix
-    <d4>   DW_AT_type        : <0x149>
-    <d8>   DW_AT_decl_file   : 2
-    <d9>   DW_AT_decl_line   : 1144
-    <db>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><de>: Abbrev Number: 5 (DW_TAG_member)
-    <df>   DW_AT_name        : (indirect string, offset: 0x16f): pix_mp
-    <e3>   DW_AT_type        : <0x217>
-    <e7>   DW_AT_decl_file   : 2
-    <e8>   DW_AT_decl_line   : 1145
-    <ea>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><ed>: Abbrev Number: 5 (DW_TAG_member)
-    <ee>   DW_AT_name        : (indirect string, offset: 0x1f2): win
-    <f2>   DW_AT_type        : <0x384>
-    <f6>   DW_AT_decl_file   : 2
-    <f7>   DW_AT_decl_line   : 1146
-    <f9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><fc>: Abbrev Number: 5 (DW_TAG_member)
-    <fd>   DW_AT_name        : (indirect string, offset: 0x260): vbi
-    <101>   DW_AT_type        : <0x478>
-    <105>   DW_AT_decl_file   : 2
-    <106>   DW_AT_decl_line   : 1147
-    <108>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><10b>: Abbrev Number: 5 (DW_TAG_member)
-    <10c>   DW_AT_name        : (indirect string, offset: 0x2ae): sliced
-    <110>   DW_AT_type        : <0x514>
-    <114>   DW_AT_decl_file   : 2
-    <115>   DW_AT_decl_line   : 1148
-    <117>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><11a>: Abbrev Number: 5 (DW_TAG_member)
-    <11b>   DW_AT_name        : (indirect string, offset: 0x2ee): sdr
-    <11f>   DW_AT_type        : <0x56e>
-    <123>   DW_AT_decl_file   : 2
-    <124>   DW_AT_decl_line   : 1149
-    <126>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><129>: Abbrev Number: 5 (DW_TAG_member)
-    <12a>   DW_AT_name        : (indirect string, offset: 0x30d): meta
-    <12e>   DW_AT_type        : <0x5b2>
-    <132>   DW_AT_decl_file   : 2
-    <133>   DW_AT_decl_line   : 1150
-    <135>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><138>: Abbrev Number: 5 (DW_TAG_member)
-    <139>   DW_AT_name        : (indirect string, offset: 0x32e): raw_data
-    <13d>   DW_AT_type        : <0x5da>
-    <141>   DW_AT_decl_file   : 2
-    <142>   DW_AT_decl_line   : 1151
-    <144>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><147>: Abbrev Number: 0
- <2><148>: Abbrev Number: 0
- <1><149>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <14a>   DW_AT_name        : (indirect string, offset: 0x15f): v4l2_pix_format
-    <14e>   DW_AT_byte_size   : 48
-    <14f>   DW_AT_decl_file   : 2
-    <150>   DW_AT_decl_line   : 182
- <2><151>: Abbrev Number: 9 (DW_TAG_member)
-    <152>   DW_AT_name        : (indirect string, offset: 0xea): width
-    <156>   DW_AT_type        : <0x91>
-    <15a>   DW_AT_decl_file   : 2
-    <15b>   DW_AT_decl_line   : 183
-    <15c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><15f>: Abbrev Number: 9 (DW_TAG_member)
-    <160>   DW_AT_name        : (indirect string, offset: 0xf0): height
-    <164>   DW_AT_type        : <0x91>
-    <168>   DW_AT_decl_file   : 2
-    <169>   DW_AT_decl_line   : 184
-    <16a>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><16d>: Abbrev Number: 9 (DW_TAG_member)
-    <16e>   DW_AT_name        : (indirect string, offset: 0xf7): pixelformat
-    <172>   DW_AT_type        : <0x91>
-    <176>   DW_AT_decl_file   : 2
-    <177>   DW_AT_decl_line   : 185
-    <178>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><17b>: Abbrev Number: 9 (DW_TAG_member)
-    <17c>   DW_AT_name        : (indirect string, offset: 0x103): field
-    <180>   DW_AT_type        : <0x91>
-    <184>   DW_AT_decl_file   : 2
-    <185>   DW_AT_decl_line   : 186
-    <186>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><189>: Abbrev Number: 9 (DW_TAG_member)
-    <18a>   DW_AT_name        : (indirect string, offset: 0x109): bytesperline
-    <18e>   DW_AT_type        : <0x91>
-    <192>   DW_AT_decl_file   : 2
-    <193>   DW_AT_decl_line   : 187
-    <194>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><197>: Abbrev Number: 9 (DW_TAG_member)
-    <198>   DW_AT_name        : (indirect string, offset: 0x116): sizeimage
-    <19c>   DW_AT_type        : <0x91>
-    <1a0>   DW_AT_decl_file   : 2
-    <1a1>   DW_AT_decl_line   : 188
-    <1a2>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><1a5>: Abbrev Number: 9 (DW_TAG_member)
-    <1a6>   DW_AT_name        : (indirect string, offset: 0x120): colorspace
-    <1aa>   DW_AT_type        : <0x91>
-    <1ae>   DW_AT_decl_file   : 2
-    <1af>   DW_AT_decl_line   : 189
-    <1b0>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><1b3>: Abbrev Number: 9 (DW_TAG_member)
-    <1b4>   DW_AT_name        : (indirect string, offset: 0x12b): priv
-    <1b8>   DW_AT_type        : <0x91>
-    <1bc>   DW_AT_decl_file   : 2
-    <1bd>   DW_AT_decl_line   : 190
-    <1be>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><1c1>: Abbrev Number: 9 (DW_TAG_member)
-    <1c2>   DW_AT_name        : (indirect string, offset: 0x130): flags
-    <1c6>   DW_AT_type        : <0x91>
-    <1ca>   DW_AT_decl_file   : 2
-    <1cb>   DW_AT_decl_line   : 191
-    <1cc>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><1cf>: Abbrev Number: 10 (DW_TAG_member)
-    <1d0>   DW_AT_type        : <0x1d9>
-    <1d4>   DW_AT_decl_file   : 2
-    <1d5>   DW_AT_decl_line   : 192
-    <1d6>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><1d9>: Abbrev Number: 11 (DW_TAG_union_type)
-    <1da>   DW_AT_byte_size   : 4
-    <1db>   DW_AT_decl_file   : 2
-    <1dc>   DW_AT_decl_line   : 192
- <3><1dd>: Abbrev Number: 9 (DW_TAG_member)
-    <1de>   DW_AT_name        : (indirect string, offset: 0x136): ycbcr_enc
-    <1e2>   DW_AT_type        : <0x91>
-    <1e6>   DW_AT_decl_file   : 2
-    <1e7>   DW_AT_decl_line   : 193
-    <1e8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><1eb>: Abbrev Number: 9 (DW_TAG_member)
-    <1ec>   DW_AT_name        : (indirect string, offset: 0x140): hsv_enc
-    <1f0>   DW_AT_type        : <0x91>
-    <1f4>   DW_AT_decl_file   : 2
-    <1f5>   DW_AT_decl_line   : 194
-    <1f6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><1f9>: Abbrev Number: 0
- <2><1fa>: Abbrev Number: 9 (DW_TAG_member)
-    <1fb>   DW_AT_name        : (indirect string, offset: 0x148): quantization
-    <1ff>   DW_AT_type        : <0x91>
-    <203>   DW_AT_decl_file   : 2
-    <204>   DW_AT_decl_line   : 196
-    <205>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><208>: Abbrev Number: 9 (DW_TAG_member)
-    <209>   DW_AT_name        : (indirect string, offset: 0x155): xfer_func
-    <20d>   DW_AT_type        : <0x91>
-    <211>   DW_AT_decl_file   : 2
-    <212>   DW_AT_decl_line   : 197
-    <213>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><216>: Abbrev Number: 0
- <1><217>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <218>   DW_AT_name        : (indirect string, offset: 0x1db): v4l2_pix_format_mplane
-    <21c>   DW_AT_byte_size   : 192
-    <21d>   DW_AT_decl_file   : 2
-    <21e>   DW_AT_decl_line   : 1115
- <2><220>: Abbrev Number: 5 (DW_TAG_member)
-    <221>   DW_AT_name        : (indirect string, offset: 0xea): width
-    <225>   DW_AT_type        : <0x91>
-    <229>   DW_AT_decl_file   : 2
-    <22a>   DW_AT_decl_line   : 1116
-    <22c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><22f>: Abbrev Number: 5 (DW_TAG_member)
-    <230>   DW_AT_name        : (indirect string, offset: 0xf0): height
-    <234>   DW_AT_type        : <0x91>
-    <238>   DW_AT_decl_file   : 2
-    <239>   DW_AT_decl_line   : 1117
-    <23b>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><23e>: Abbrev Number: 5 (DW_TAG_member)
-    <23f>   DW_AT_name        : (indirect string, offset: 0xf7): pixelformat
-    <243>   DW_AT_type        : <0x91>
-    <247>   DW_AT_decl_file   : 2
-    <248>   DW_AT_decl_line   : 1118
-    <24a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><24d>: Abbrev Number: 5 (DW_TAG_member)
-    <24e>   DW_AT_name        : (indirect string, offset: 0x103): field
-    <252>   DW_AT_type        : <0x91>
-    <256>   DW_AT_decl_file   : 2
-    <257>   DW_AT_decl_line   : 1119
-    <259>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><25c>: Abbrev Number: 5 (DW_TAG_member)
-    <25d>   DW_AT_name        : (indirect string, offset: 0x120): colorspace
-    <261>   DW_AT_type        : <0x91>
-    <265>   DW_AT_decl_file   : 2
-    <266>   DW_AT_decl_line   : 1120
-    <268>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><26b>: Abbrev Number: 5 (DW_TAG_member)
-    <26c>   DW_AT_name        : (indirect string, offset: 0x176): plane_fmt
-    <270>   DW_AT_type        : <0x2fb>
-    <274>   DW_AT_decl_file   : 2
-    <275>   DW_AT_decl_line   : 1121
-    <277>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><27a>: Abbrev Number: 5 (DW_TAG_member)
-    <27b>   DW_AT_name        : (indirect string, offset: 0x1bd): num_planes
-    <27f>   DW_AT_type        : <0x365>
-    <283>   DW_AT_decl_file   : 2
-    <284>   DW_AT_decl_line   : 1122
-    <286>   DW_AT_data_member_location: 3 byte block: 23 b4 1 	(DW_OP_plus_uconst: 180)
- <2><28a>: Abbrev Number: 5 (DW_TAG_member)
-    <28b>   DW_AT_name        : (indirect string, offset: 0x130): flags
-    <28f>   DW_AT_type        : <0x365>
-    <293>   DW_AT_decl_file   : 2
-    <294>   DW_AT_decl_line   : 1123
-    <296>   DW_AT_data_member_location: 3 byte block: 23 b5 1 	(DW_OP_plus_uconst: 181)
- <2><29a>: Abbrev Number: 12 (DW_TAG_member)
-    <29b>   DW_AT_type        : <0x2a6>
-    <29f>   DW_AT_decl_file   : 2
-    <2a0>   DW_AT_decl_line   : 1124
-    <2a2>   DW_AT_data_member_location: 3 byte block: 23 b6 1 	(DW_OP_plus_uconst: 182)
- <2><2a6>: Abbrev Number: 7 (DW_TAG_union_type)
-    <2a7>   DW_AT_byte_size   : 1
-    <2a8>   DW_AT_decl_file   : 2
-    <2a9>   DW_AT_decl_line   : 1124
- <3><2ab>: Abbrev Number: 5 (DW_TAG_member)
-    <2ac>   DW_AT_name        : (indirect string, offset: 0x136): ycbcr_enc
-    <2b0>   DW_AT_type        : <0x365>
-    <2b4>   DW_AT_decl_file   : 2
-    <2b5>   DW_AT_decl_line   : 1125
-    <2b7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2ba>: Abbrev Number: 5 (DW_TAG_member)
-    <2bb>   DW_AT_name        : (indirect string, offset: 0x140): hsv_enc
-    <2bf>   DW_AT_type        : <0x365>
-    <2c3>   DW_AT_decl_file   : 2
-    <2c4>   DW_AT_decl_line   : 1126
-    <2c6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><2c9>: Abbrev Number: 0
- <2><2ca>: Abbrev Number: 5 (DW_TAG_member)
-    <2cb>   DW_AT_name        : (indirect string, offset: 0x148): quantization
-    <2cf>   DW_AT_type        : <0x365>
-    <2d3>   DW_AT_decl_file   : 2
-    <2d4>   DW_AT_decl_line   : 1128
-    <2d6>   DW_AT_data_member_location: 3 byte block: 23 b7 1 	(DW_OP_plus_uconst: 183)
- <2><2da>: Abbrev Number: 5 (DW_TAG_member)
-    <2db>   DW_AT_name        : (indirect string, offset: 0x155): xfer_func
-    <2df>   DW_AT_type        : <0x365>
-    <2e3>   DW_AT_decl_file   : 2
-    <2e4>   DW_AT_decl_line   : 1129
-    <2e6>   DW_AT_data_member_location: 3 byte block: 23 b8 1 	(DW_OP_plus_uconst: 184)
- <2><2ea>: Abbrev Number: 5 (DW_TAG_member)
-    <2eb>   DW_AT_name        : (indirect string, offset: 0x180): reserved
-    <2ef>   DW_AT_type        : <0x377>
-    <2f3>   DW_AT_decl_file   : 2
-    <2f4>   DW_AT_decl_line   : 1130
-    <2f6>   DW_AT_data_member_location: 3 byte block: 23 b9 1 	(DW_OP_plus_uconst: 185)
- <2><2fa>: Abbrev Number: 0
- <1><2fb>: Abbrev Number: 13 (DW_TAG_array_type)
-    <2fc>   DW_AT_type        : <0x308>
- <2><300>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <301>   DW_AT_type        : <0x35e>
-    <305>   DW_AT_lower_bound : 0
-    <306>   DW_AT_count       : 8
- <2><307>: Abbrev Number: 0
- <1><308>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <309>   DW_AT_name        : (indirect string, offset: 0x1a7): v4l2_plane_pix_format
-    <30d>   DW_AT_byte_size   : 20
-    <30e>   DW_AT_decl_file   : 2
-    <30f>   DW_AT_decl_line   : 1110
- <2><311>: Abbrev Number: 5 (DW_TAG_member)
-    <312>   DW_AT_name        : (indirect string, offset: 0x116): sizeimage
-    <316>   DW_AT_type        : <0x91>
-    <31a>   DW_AT_decl_file   : 2
-    <31b>   DW_AT_decl_line   : 1111
-    <31d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><320>: Abbrev Number: 5 (DW_TAG_member)
-    <321>   DW_AT_name        : (indirect string, offset: 0x109): bytesperline
-    <325>   DW_AT_type        : <0x91>
-    <329>   DW_AT_decl_file   : 2
-    <32a>   DW_AT_decl_line   : 1112
-    <32c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><32f>: Abbrev Number: 5 (DW_TAG_member)
-    <330>   DW_AT_name        : (indirect string, offset: 0x180): reserved
-    <334>   DW_AT_type        : <0x33f>
-    <338>   DW_AT_decl_file   : 2
-    <339>   DW_AT_decl_line   : 1113
-    <33b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><33e>: Abbrev Number: 0
- <1><33f>: Abbrev Number: 13 (DW_TAG_array_type)
-    <340>   DW_AT_type        : <0x34c>
- <2><344>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <345>   DW_AT_type        : <0x35e>
-    <349>   DW_AT_lower_bound : 0
-    <34a>   DW_AT_count       : 6
- <2><34b>: Abbrev Number: 0
- <1><34c>: Abbrev Number: 3 (DW_TAG_typedef)
-    <34d>   DW_AT_type        : <0x357>
-    <351>   DW_AT_name        : (indirect string, offset: 0x198): __u16
-    <355>   DW_AT_decl_file   : 1
-    <356>   DW_AT_decl_line   : 26
- <1><357>: Abbrev Number: 6 (DW_TAG_base_type)
-    <358>   DW_AT_name        : (indirect string, offset: 0x189): unsigned short
-    <35c>   DW_AT_encoding    : 7	(unsigned)
-    <35d>   DW_AT_byte_size   : 2
- <1><35e>: Abbrev Number: 15 (DW_TAG_base_type)
-    <35f>   DW_AT_name        : (indirect string, offset: 0x19e): sizetype
-    <363>   DW_AT_byte_size   : 8
-    <364>   DW_AT_encoding    : 7	(unsigned)
- <1><365>: Abbrev Number: 3 (DW_TAG_typedef)
-    <366>   DW_AT_type        : <0x370>
-    <36a>   DW_AT_name        : (indirect string, offset: 0x1d6): __u8
-    <36e>   DW_AT_decl_file   : 1
-    <36f>   DW_AT_decl_line   : 24
- <1><370>: Abbrev Number: 6 (DW_TAG_base_type)
-    <371>   DW_AT_name        : (indirect string, offset: 0x1c8): unsigned char
-    <375>   DW_AT_encoding    : 8	(unsigned char)
-    <376>   DW_AT_byte_size   : 1
- <1><377>: Abbrev Number: 13 (DW_TAG_array_type)
-    <378>   DW_AT_type        : <0x365>
- <2><37c>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <37d>   DW_AT_type        : <0x35e>
-    <381>   DW_AT_lower_bound : 0
-    <382>   DW_AT_count       : 7
- <2><383>: Abbrev Number: 0
- <1><384>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <385>   DW_AT_name        : (indirect string, offset: 0x254): v4l2_window
-    <389>   DW_AT_byte_size   : 40
-    <38a>   DW_AT_decl_file   : 2
-    <38b>   DW_AT_decl_line   : 547
- <2><38d>: Abbrev Number: 5 (DW_TAG_member)
-    <38e>   DW_AT_name        : (indirect string, offset: 0x1f6): w
-    <392>   DW_AT_type        : <0x3f7>
-    <396>   DW_AT_decl_file   : 2
-    <397>   DW_AT_decl_line   : 548
-    <399>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><39c>: Abbrev Number: 5 (DW_TAG_member)
-    <39d>   DW_AT_name        : (indirect string, offset: 0x103): field
-    <3a1>   DW_AT_type        : <0x91>
-    <3a5>   DW_AT_decl_file   : 2
-    <3a6>   DW_AT_decl_line   : 549
-    <3a8>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><3ab>: Abbrev Number: 5 (DW_TAG_member)
-    <3ac>   DW_AT_name        : (indirect string, offset: 0x215): chromakey
-    <3b0>   DW_AT_type        : <0x91>
-    <3b4>   DW_AT_decl_file   : 2
-    <3b5>   DW_AT_decl_line   : 550
-    <3b7>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><3ba>: Abbrev Number: 5 (DW_TAG_member)
-    <3bb>   DW_AT_name        : (indirect string, offset: 0x21f): clips
-    <3bf>   DW_AT_type        : <0x44a>
-    <3c3>   DW_AT_decl_file   : 2
-    <3c4>   DW_AT_decl_line   : 551
-    <3c6>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><3c9>: Abbrev Number: 5 (DW_TAG_member)
-    <3ca>   DW_AT_name        : (indirect string, offset: 0x236): clipcount
-    <3ce>   DW_AT_type        : <0x91>
-    <3d2>   DW_AT_decl_file   : 2
-    <3d3>   DW_AT_decl_line   : 552
-    <3d5>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><3d8>: Abbrev Number: 5 (DW_TAG_member)
-    <3d9>   DW_AT_name        : (indirect string, offset: 0x240): bitmap
-    <3dd>   DW_AT_type        : <0x477>
-    <3e1>   DW_AT_decl_file   : 2
-    <3e2>   DW_AT_decl_line   : 553
-    <3e4>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><3e7>: Abbrev Number: 5 (DW_TAG_member)
-    <3e8>   DW_AT_name        : (indirect string, offset: 0x247): global_alpha
-    <3ec>   DW_AT_type        : <0x365>
-    <3f0>   DW_AT_decl_file   : 2
-    <3f1>   DW_AT_decl_line   : 554
-    <3f3>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><3f6>: Abbrev Number: 0
- <1><3f7>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <3f8>   DW_AT_name        : (indirect string, offset: 0x20b): v4l2_rect
-    <3fc>   DW_AT_byte_size   : 16
-    <3fd>   DW_AT_decl_file   : 2
-    <3fe>   DW_AT_decl_line   : 135
- <2><3ff>: Abbrev Number: 9 (DW_TAG_member)
-    <400>   DW_AT_name        : (indirect string, offset: 0x1f8): left
-    <404>   DW_AT_type        : <0x438>
-    <408>   DW_AT_decl_file   : 2
-    <409>   DW_AT_decl_line   : 136
-    <40a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><40d>: Abbrev Number: 9 (DW_TAG_member)
-    <40e>   DW_AT_name        : (indirect string, offset: 0x207): top
-    <412>   DW_AT_type        : <0x438>
-    <416>   DW_AT_decl_file   : 2
-    <417>   DW_AT_decl_line   : 137
-    <418>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><41b>: Abbrev Number: 9 (DW_TAG_member)
-    <41c>   DW_AT_name        : (indirect string, offset: 0xea): width
-    <420>   DW_AT_type        : <0x91>
-    <424>   DW_AT_decl_file   : 2
-    <425>   DW_AT_decl_line   : 138
-    <426>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><429>: Abbrev Number: 9 (DW_TAG_member)
-    <42a>   DW_AT_name        : (indirect string, offset: 0xf0): height
-    <42e>   DW_AT_type        : <0x91>
-    <432>   DW_AT_decl_file   : 2
-    <433>   DW_AT_decl_line   : 139
-    <434>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><437>: Abbrev Number: 0
- <1><438>: Abbrev Number: 3 (DW_TAG_typedef)
-    <439>   DW_AT_type        : <0x443>
-    <43d>   DW_AT_name        : (indirect string, offset: 0x201): __s32
-    <441>   DW_AT_decl_file   : 1
-    <442>   DW_AT_decl_line   : 27
- <1><443>: Abbrev Number: 6 (DW_TAG_base_type)
-    <444>   DW_AT_name        : (indirect string, offset: 0x1fd): int
-    <448>   DW_AT_encoding    : 5	(signed)
-    <449>   DW_AT_byte_size   : 4
- <1><44a>: Abbrev Number: 16 (DW_TAG_pointer_type)
-    <44b>   DW_AT_type        : <0x44f>
- <1><44f>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <450>   DW_AT_name        : (indirect string, offset: 0x22c): v4l2_clip
-    <454>   DW_AT_byte_size   : 20
-    <455>   DW_AT_decl_file   : 2
-    <456>   DW_AT_decl_line   : 543
- <2><458>: Abbrev Number: 5 (DW_TAG_member)
-    <459>   DW_AT_name        : (indirect string, offset: 0x225): c
-    <45d>   DW_AT_type        : <0x3f7>
-    <461>   DW_AT_decl_file   : 2
-    <462>   DW_AT_decl_line   : 544
-    <464>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><467>: Abbrev Number: 5 (DW_TAG_member)
-    <468>   DW_AT_name        : (indirect string, offset: 0x227): next
-    <46c>   DW_AT_type        : <0x44a>
-    <470>   DW_AT_decl_file   : 2
-    <471>   DW_AT_decl_line   : 545
-    <473>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><476>: Abbrev Number: 0
- <1><477>: Abbrev Number: 17 (DW_TAG_pointer_type)
- <1><478>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <479>   DW_AT_name        : (indirect string, offset: 0x29e): v4l2_vbi_format
-    <47d>   DW_AT_byte_size   : 44
-    <47e>   DW_AT_decl_file   : 2
-    <47f>   DW_AT_decl_line   : 1045
- <2><481>: Abbrev Number: 5 (DW_TAG_member)
-    <482>   DW_AT_name        : (indirect string, offset: 0x264): sampling_rate
-    <486>   DW_AT_type        : <0x91>
-    <48a>   DW_AT_decl_file   : 2
-    <48b>   DW_AT_decl_line   : 1046
-    <48d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><490>: Abbrev Number: 5 (DW_TAG_member)
-    <491>   DW_AT_name        : (indirect string, offset: 0x272): offset
-    <495>   DW_AT_type        : <0x91>
-    <499>   DW_AT_decl_file   : 2
-    <49a>   DW_AT_decl_line   : 1047
-    <49c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><49f>: Abbrev Number: 5 (DW_TAG_member)
-    <4a0>   DW_AT_name        : (indirect string, offset: 0x279): samples_per_line
-    <4a4>   DW_AT_type        : <0x91>
-    <4a8>   DW_AT_decl_file   : 2
-    <4a9>   DW_AT_decl_line   : 1048
-    <4ab>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><4ae>: Abbrev Number: 5 (DW_TAG_member)
-    <4af>   DW_AT_name        : (indirect string, offset: 0x28a): sample_format
-    <4b3>   DW_AT_type        : <0x91>
-    <4b7>   DW_AT_decl_file   : 2
-    <4b8>   DW_AT_decl_line   : 1049
-    <4ba>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><4bd>: Abbrev Number: 5 (DW_TAG_member)
-    <4be>   DW_AT_name        : (indirect string, offset: 0x298): start
-    <4c2>   DW_AT_type        : <0x4fa>
-    <4c6>   DW_AT_decl_file   : 2
-    <4c7>   DW_AT_decl_line   : 1050
-    <4c9>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><4cc>: Abbrev Number: 5 (DW_TAG_member)
-    <4cd>   DW_AT_name        : (indirect string, offset: 0xc9): count
-    <4d1>   DW_AT_type        : <0x507>
-    <4d5>   DW_AT_decl_file   : 2
-    <4d6>   DW_AT_decl_line   : 1051
-    <4d8>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><4db>: Abbrev Number: 5 (DW_TAG_member)
-    <4dc>   DW_AT_name        : (indirect string, offset: 0x130): flags
-    <4e0>   DW_AT_type        : <0x91>
-    <4e4>   DW_AT_decl_file   : 2
-    <4e5>   DW_AT_decl_line   : 1052
-    <4e7>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><4ea>: Abbrev Number: 5 (DW_TAG_member)
-    <4eb>   DW_AT_name        : (indirect string, offset: 0x180): reserved
-    <4ef>   DW_AT_type        : <0x507>
-    <4f3>   DW_AT_decl_file   : 2
-    <4f4>   DW_AT_decl_line   : 1053
-    <4f6>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><4f9>: Abbrev Number: 0
- <1><4fa>: Abbrev Number: 13 (DW_TAG_array_type)
-    <4fb>   DW_AT_type        : <0x438>
- <2><4ff>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <500>   DW_AT_type        : <0x35e>
-    <504>   DW_AT_lower_bound : 0
-    <505>   DW_AT_count       : 2
- <2><506>: Abbrev Number: 0
- <1><507>: Abbrev Number: 13 (DW_TAG_array_type)
-    <508>   DW_AT_type        : <0x91>
- <2><50c>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <50d>   DW_AT_type        : <0x35e>
-    <511>   DW_AT_lower_bound : 0
-    <512>   DW_AT_count       : 2
- <2><513>: Abbrev Number: 0
- <1><514>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <515>   DW_AT_name        : (indirect string, offset: 0x2d7): v4l2_sliced_vbi_format
-    <519>   DW_AT_byte_size   : 112
-    <51a>   DW_AT_decl_file   : 2
-    <51b>   DW_AT_decl_line   : 1061
- <2><51d>: Abbrev Number: 5 (DW_TAG_member)
-    <51e>   DW_AT_name        : (indirect string, offset: 0x2b5): service_set
-    <522>   DW_AT_type        : <0x34c>
-    <526>   DW_AT_decl_file   : 2
-    <527>   DW_AT_decl_line   : 1062
-    <529>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><52c>: Abbrev Number: 5 (DW_TAG_member)
-    <52d>   DW_AT_name        : (indirect string, offset: 0x2c1): service_lines
-    <531>   DW_AT_type        : <0x55a>
-    <535>   DW_AT_decl_file   : 2
-    <536>   DW_AT_decl_line   : 1063
-    <538>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><53b>: Abbrev Number: 5 (DW_TAG_member)
-    <53c>   DW_AT_name        : (indirect string, offset: 0x2cf): io_size
-    <540>   DW_AT_type        : <0x91>
-    <544>   DW_AT_decl_file   : 2
-    <545>   DW_AT_decl_line   : 1064
-    <547>   DW_AT_data_member_location: 2 byte block: 23 64 	(DW_OP_plus_uconst: 100)
- <2><54a>: Abbrev Number: 5 (DW_TAG_member)
-    <54b>   DW_AT_name        : (indirect string, offset: 0x180): reserved
-    <54f>   DW_AT_type        : <0x507>
-    <553>   DW_AT_decl_file   : 2
-    <554>   DW_AT_decl_line   : 1065
-    <556>   DW_AT_data_member_location: 2 byte block: 23 68 	(DW_OP_plus_uconst: 104)
- <2><559>: Abbrev Number: 0
- <1><55a>: Abbrev Number: 13 (DW_TAG_array_type)
-    <55b>   DW_AT_type        : <0x34c>
- <2><55f>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <560>   DW_AT_type        : <0x35e>
-    <564>   DW_AT_lower_bound : 0
-    <565>   DW_AT_count       : 2
- <2><566>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <567>   DW_AT_type        : <0x35e>
-    <56b>   DW_AT_lower_bound : 0
-    <56c>   DW_AT_count       : 24
- <2><56d>: Abbrev Number: 0
- <1><56e>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <56f>   DW_AT_name        : (indirect string, offset: 0x2fd): v4l2_sdr_format
-    <573>   DW_AT_byte_size   : 32
-    <574>   DW_AT_decl_file   : 2
-    <575>   DW_AT_decl_line   : 1132
- <2><577>: Abbrev Number: 5 (DW_TAG_member)
-    <578>   DW_AT_name        : (indirect string, offset: 0xf7): pixelformat
-    <57c>   DW_AT_type        : <0x91>
-    <580>   DW_AT_decl_file   : 2
-    <581>   DW_AT_decl_line   : 1133
-    <583>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><586>: Abbrev Number: 5 (DW_TAG_member)
-    <587>   DW_AT_name        : (indirect string, offset: 0x2f2): buffersize
-    <58b>   DW_AT_type        : <0x91>
-    <58f>   DW_AT_decl_file   : 2
-    <590>   DW_AT_decl_line   : 1134
-    <592>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><595>: Abbrev Number: 5 (DW_TAG_member)
-    <596>   DW_AT_name        : (indirect string, offset: 0x180): reserved
-    <59a>   DW_AT_type        : <0x5a5>
-    <59e>   DW_AT_decl_file   : 2
-    <59f>   DW_AT_decl_line   : 1135
-    <5a1>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><5a4>: Abbrev Number: 0
- <1><5a5>: Abbrev Number: 13 (DW_TAG_array_type)
-    <5a6>   DW_AT_type        : <0x365>
- <2><5aa>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <5ab>   DW_AT_type        : <0x35e>
-    <5af>   DW_AT_lower_bound : 0
-    <5b0>   DW_AT_count       : 24
- <2><5b1>: Abbrev Number: 0
- <1><5b2>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <5b3>   DW_AT_name        : (indirect string, offset: 0x31d): v4l2_meta_format
-    <5b7>   DW_AT_byte_size   : 8
-    <5b8>   DW_AT_decl_file   : 2
-    <5b9>   DW_AT_decl_line   : 1137
- <2><5bb>: Abbrev Number: 5 (DW_TAG_member)
-    <5bc>   DW_AT_name        : (indirect string, offset: 0x312): dataformat
-    <5c0>   DW_AT_type        : <0x91>
-    <5c4>   DW_AT_decl_file   : 2
-    <5c5>   DW_AT_decl_line   : 1138
-    <5c7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><5ca>: Abbrev Number: 5 (DW_TAG_member)
-    <5cb>   DW_AT_name        : (indirect string, offset: 0x2f2): buffersize
-    <5cf>   DW_AT_type        : <0x91>
-    <5d3>   DW_AT_decl_file   : 2
-    <5d4>   DW_AT_decl_line   : 1139
-    <5d6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5d9>: Abbrev Number: 0
- <1><5da>: Abbrev Number: 13 (DW_TAG_array_type)
-    <5db>   DW_AT_type        : <0x365>
- <2><5df>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <5e0>   DW_AT_type        : <0x35e>
-    <5e4>   DW_AT_lower_bound : 0
-    <5e5>   DW_AT_count       : 200
- <2><5e6>: Abbrev Number: 0
- <1><5e7>: Abbrev Number: 13 (DW_TAG_array_type)
-    <5e8>   DW_AT_type        : <0x91>
- <2><5ec>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <5ed>   DW_AT_type        : <0x35e>
-    <5f1>   DW_AT_lower_bound : 0
-    <5f2>   DW_AT_count       : 8
- <2><5f3>: Abbrev Number: 0
- <1><5f4>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x12e): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x169): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 53
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x421): struct_v4l2_create_buffers
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 44
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x40d): v4l2_create_buffers
+    <41>   DW_AT_byte_size   : 248
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 1260
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x17a): index
+    <4a>   DW_AT_type        : <0x92>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 1261
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x193): count
+    <59>   DW_AT_type        : <0x92>
+    <5d>   DW_AT_decl_file   : 2
+    <5e>   DW_AT_decl_line   : 1262
+    <60>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><63>: Abbrev Number: 5 (DW_TAG_member)
+    <64>   DW_AT_name        : (indirect string, offset: 0x199): memory
+    <68>   DW_AT_type        : <0x92>
+    <6c>   DW_AT_decl_file   : 2
+    <6d>   DW_AT_decl_line   : 1263
+    <6f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><72>: Abbrev Number: 5 (DW_TAG_member)
+    <73>   DW_AT_name        : (indirect string, offset: 0x1a0): format
+    <77>   DW_AT_type        : <0xa4>
+    <7b>   DW_AT_decl_file   : 2
+    <7c>   DW_AT_decl_line   : 1264
+    <7e>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><81>: Abbrev Number: 5 (DW_TAG_member)
+    <82>   DW_AT_name        : (indirect string, offset: 0x24a): reserved
+    <86>   DW_AT_type        : <0x5e8>
+    <8a>   DW_AT_decl_file   : 2
+    <8b>   DW_AT_decl_line   : 1265
+    <8d>   DW_AT_data_member_location: 3 byte block: 23 d8 1 	(DW_OP_plus_uconst: 216)
+ <2><91>: Abbrev Number: 0
+ <1><92>: Abbrev Number: 3 (DW_TAG_typedef)
+    <93>   DW_AT_type        : <0x9d>
+    <97>   DW_AT_name        : (indirect string, offset: 0x18d): __u32
+    <9b>   DW_AT_decl_file   : 1
+    <9c>   DW_AT_decl_line   : 28
+ <1><9d>: Abbrev Number: 6 (DW_TAG_base_type)
+    <9e>   DW_AT_name        : (indirect string, offset: 0x180): unsigned int
+    <a2>   DW_AT_encoding    : 7	(unsigned)
+    <a3>   DW_AT_byte_size   : 4
+ <1><a4>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <a5>   DW_AT_name        : (indirect string, offset: 0x401): v4l2_format
+    <a9>   DW_AT_byte_size   : 204
+    <aa>   DW_AT_decl_file   : 2
+    <ab>   DW_AT_decl_line   : 1148
+ <2><ad>: Abbrev Number: 5 (DW_TAG_member)
+    <ae>   DW_AT_name        : (indirect string, offset: 0x1a7): type
+    <b2>   DW_AT_type        : <0x92>
+    <b6>   DW_AT_decl_file   : 2
+    <b7>   DW_AT_decl_line   : 1149
+    <b9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><bc>: Abbrev Number: 5 (DW_TAG_member)
+    <bd>   DW_AT_name        : (indirect string, offset: 0x1ac): fmt
+    <c1>   DW_AT_type        : <0xcb>
+    <c5>   DW_AT_decl_file   : 2
+    <c6>   DW_AT_decl_line   : 1159
+    <c8>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><cb>: Abbrev Number: 7 (DW_TAG_union_type)
+    <cc>   DW_AT_byte_size   : 200
+    <cd>   DW_AT_decl_file   : 2
+    <ce>   DW_AT_decl_line   : 1150
+ <3><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x1b0): pix
+    <d5>   DW_AT_type        : <0x14a>
+    <d9>   DW_AT_decl_file   : 2
+    <da>   DW_AT_decl_line   : 1151
+    <dc>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><df>: Abbrev Number: 5 (DW_TAG_member)
+    <e0>   DW_AT_name        : (indirect string, offset: 0x239): pix_mp
+    <e4>   DW_AT_type        : <0x218>
+    <e8>   DW_AT_decl_file   : 2
+    <e9>   DW_AT_decl_line   : 1152
+    <eb>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><ee>: Abbrev Number: 5 (DW_TAG_member)
+    <ef>   DW_AT_name        : (indirect string, offset: 0x2bc): win
+    <f3>   DW_AT_type        : <0x385>
+    <f7>   DW_AT_decl_file   : 2
+    <f8>   DW_AT_decl_line   : 1153
+    <fa>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><fd>: Abbrev Number: 5 (DW_TAG_member)
+    <fe>   DW_AT_name        : (indirect string, offset: 0x32a): vbi
+    <102>   DW_AT_type        : <0x479>
+    <106>   DW_AT_decl_file   : 2
+    <107>   DW_AT_decl_line   : 1154
+    <109>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><10c>: Abbrev Number: 5 (DW_TAG_member)
+    <10d>   DW_AT_name        : (indirect string, offset: 0x378): sliced
+    <111>   DW_AT_type        : <0x515>
+    <115>   DW_AT_decl_file   : 2
+    <116>   DW_AT_decl_line   : 1155
+    <118>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><11b>: Abbrev Number: 5 (DW_TAG_member)
+    <11c>   DW_AT_name        : (indirect string, offset: 0x3b8): sdr
+    <120>   DW_AT_type        : <0x56f>
+    <124>   DW_AT_decl_file   : 2
+    <125>   DW_AT_decl_line   : 1156
+    <127>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><12a>: Abbrev Number: 5 (DW_TAG_member)
+    <12b>   DW_AT_name        : (indirect string, offset: 0x3d7): meta
+    <12f>   DW_AT_type        : <0x5b3>
+    <133>   DW_AT_decl_file   : 2
+    <134>   DW_AT_decl_line   : 1157
+    <136>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><139>: Abbrev Number: 5 (DW_TAG_member)
+    <13a>   DW_AT_name        : (indirect string, offset: 0x3f8): raw_data
+    <13e>   DW_AT_type        : <0x5db>
+    <142>   DW_AT_decl_file   : 2
+    <143>   DW_AT_decl_line   : 1158
+    <145>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><148>: Abbrev Number: 0
+ <2><149>: Abbrev Number: 0
+ <1><14a>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <14b>   DW_AT_name        : (indirect string, offset: 0x229): v4l2_pix_format
+    <14f>   DW_AT_byte_size   : 48
+    <150>   DW_AT_decl_file   : 2
+    <151>   DW_AT_decl_line   : 182
+ <2><152>: Abbrev Number: 9 (DW_TAG_member)
+    <153>   DW_AT_name        : (indirect string, offset: 0x1b4): width
+    <157>   DW_AT_type        : <0x92>
+    <15b>   DW_AT_decl_file   : 2
+    <15c>   DW_AT_decl_line   : 183
+    <15d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><160>: Abbrev Number: 9 (DW_TAG_member)
+    <161>   DW_AT_name        : (indirect string, offset: 0x1ba): height
+    <165>   DW_AT_type        : <0x92>
+    <169>   DW_AT_decl_file   : 2
+    <16a>   DW_AT_decl_line   : 184
+    <16b>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><16e>: Abbrev Number: 9 (DW_TAG_member)
+    <16f>   DW_AT_name        : (indirect string, offset: 0x1c1): pixelformat
+    <173>   DW_AT_type        : <0x92>
+    <177>   DW_AT_decl_file   : 2
+    <178>   DW_AT_decl_line   : 185
+    <179>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><17c>: Abbrev Number: 9 (DW_TAG_member)
+    <17d>   DW_AT_name        : (indirect string, offset: 0x1cd): field
+    <181>   DW_AT_type        : <0x92>
+    <185>   DW_AT_decl_file   : 2
+    <186>   DW_AT_decl_line   : 186
+    <187>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><18a>: Abbrev Number: 9 (DW_TAG_member)
+    <18b>   DW_AT_name        : (indirect string, offset: 0x1d3): bytesperline
+    <18f>   DW_AT_type        : <0x92>
+    <193>   DW_AT_decl_file   : 2
+    <194>   DW_AT_decl_line   : 187
+    <195>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><198>: Abbrev Number: 9 (DW_TAG_member)
+    <199>   DW_AT_name        : (indirect string, offset: 0x1e0): sizeimage
+    <19d>   DW_AT_type        : <0x92>
+    <1a1>   DW_AT_decl_file   : 2
+    <1a2>   DW_AT_decl_line   : 188
+    <1a3>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><1a6>: Abbrev Number: 9 (DW_TAG_member)
+    <1a7>   DW_AT_name        : (indirect string, offset: 0x1ea): colorspace
+    <1ab>   DW_AT_type        : <0x92>
+    <1af>   DW_AT_decl_file   : 2
+    <1b0>   DW_AT_decl_line   : 189
+    <1b1>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><1b4>: Abbrev Number: 9 (DW_TAG_member)
+    <1b5>   DW_AT_name        : (indirect string, offset: 0x1f5): priv
+    <1b9>   DW_AT_type        : <0x92>
+    <1bd>   DW_AT_decl_file   : 2
+    <1be>   DW_AT_decl_line   : 190
+    <1bf>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><1c2>: Abbrev Number: 9 (DW_TAG_member)
+    <1c3>   DW_AT_name        : (indirect string, offset: 0x1fa): flags
+    <1c7>   DW_AT_type        : <0x92>
+    <1cb>   DW_AT_decl_file   : 2
+    <1cc>   DW_AT_decl_line   : 191
+    <1cd>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><1d0>: Abbrev Number: 10 (DW_TAG_member)
+    <1d1>   DW_AT_type        : <0x1da>
+    <1d5>   DW_AT_decl_file   : 2
+    <1d6>   DW_AT_decl_line   : 192
+    <1d7>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><1da>: Abbrev Number: 11 (DW_TAG_union_type)
+    <1db>   DW_AT_byte_size   : 4
+    <1dc>   DW_AT_decl_file   : 2
+    <1dd>   DW_AT_decl_line   : 192
+ <3><1de>: Abbrev Number: 9 (DW_TAG_member)
+    <1df>   DW_AT_name        : (indirect string, offset: 0x200): ycbcr_enc
+    <1e3>   DW_AT_type        : <0x92>
+    <1e7>   DW_AT_decl_file   : 2
+    <1e8>   DW_AT_decl_line   : 193
+    <1e9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><1ec>: Abbrev Number: 9 (DW_TAG_member)
+    <1ed>   DW_AT_name        : (indirect string, offset: 0x20a): hsv_enc
+    <1f1>   DW_AT_type        : <0x92>
+    <1f5>   DW_AT_decl_file   : 2
+    <1f6>   DW_AT_decl_line   : 194
+    <1f7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><1fa>: Abbrev Number: 0
+ <2><1fb>: Abbrev Number: 9 (DW_TAG_member)
+    <1fc>   DW_AT_name        : (indirect string, offset: 0x212): quantization
+    <200>   DW_AT_type        : <0x92>
+    <204>   DW_AT_decl_file   : 2
+    <205>   DW_AT_decl_line   : 196
+    <206>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><209>: Abbrev Number: 9 (DW_TAG_member)
+    <20a>   DW_AT_name        : (indirect string, offset: 0x21f): xfer_func
+    <20e>   DW_AT_type        : <0x92>
+    <212>   DW_AT_decl_file   : 2
+    <213>   DW_AT_decl_line   : 197
+    <214>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><217>: Abbrev Number: 0
+ <1><218>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <219>   DW_AT_name        : (indirect string, offset: 0x2a5): v4l2_pix_format_mplane
+    <21d>   DW_AT_byte_size   : 192
+    <21e>   DW_AT_decl_file   : 2
+    <21f>   DW_AT_decl_line   : 1122
+ <2><221>: Abbrev Number: 5 (DW_TAG_member)
+    <222>   DW_AT_name        : (indirect string, offset: 0x1b4): width
+    <226>   DW_AT_type        : <0x92>
+    <22a>   DW_AT_decl_file   : 2
+    <22b>   DW_AT_decl_line   : 1123
+    <22d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><230>: Abbrev Number: 5 (DW_TAG_member)
+    <231>   DW_AT_name        : (indirect string, offset: 0x1ba): height
+    <235>   DW_AT_type        : <0x92>
+    <239>   DW_AT_decl_file   : 2
+    <23a>   DW_AT_decl_line   : 1124
+    <23c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><23f>: Abbrev Number: 5 (DW_TAG_member)
+    <240>   DW_AT_name        : (indirect string, offset: 0x1c1): pixelformat
+    <244>   DW_AT_type        : <0x92>
+    <248>   DW_AT_decl_file   : 2
+    <249>   DW_AT_decl_line   : 1125
+    <24b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><24e>: Abbrev Number: 5 (DW_TAG_member)
+    <24f>   DW_AT_name        : (indirect string, offset: 0x1cd): field
+    <253>   DW_AT_type        : <0x92>
+    <257>   DW_AT_decl_file   : 2
+    <258>   DW_AT_decl_line   : 1126
+    <25a>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><25d>: Abbrev Number: 5 (DW_TAG_member)
+    <25e>   DW_AT_name        : (indirect string, offset: 0x1ea): colorspace
+    <262>   DW_AT_type        : <0x92>
+    <266>   DW_AT_decl_file   : 2
+    <267>   DW_AT_decl_line   : 1127
+    <269>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><26c>: Abbrev Number: 5 (DW_TAG_member)
+    <26d>   DW_AT_name        : (indirect string, offset: 0x240): plane_fmt
+    <271>   DW_AT_type        : <0x2fc>
+    <275>   DW_AT_decl_file   : 2
+    <276>   DW_AT_decl_line   : 1128
+    <278>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><27b>: Abbrev Number: 5 (DW_TAG_member)
+    <27c>   DW_AT_name        : (indirect string, offset: 0x287): num_planes
+    <280>   DW_AT_type        : <0x366>
+    <284>   DW_AT_decl_file   : 2
+    <285>   DW_AT_decl_line   : 1129
+    <287>   DW_AT_data_member_location: 3 byte block: 23 b4 1 	(DW_OP_plus_uconst: 180)
+ <2><28b>: Abbrev Number: 5 (DW_TAG_member)
+    <28c>   DW_AT_name        : (indirect string, offset: 0x1fa): flags
+    <290>   DW_AT_type        : <0x366>
+    <294>   DW_AT_decl_file   : 2
+    <295>   DW_AT_decl_line   : 1130
+    <297>   DW_AT_data_member_location: 3 byte block: 23 b5 1 	(DW_OP_plus_uconst: 181)
+ <2><29b>: Abbrev Number: 12 (DW_TAG_member)
+    <29c>   DW_AT_type        : <0x2a7>
+    <2a0>   DW_AT_decl_file   : 2
+    <2a1>   DW_AT_decl_line   : 1131
+    <2a3>   DW_AT_data_member_location: 3 byte block: 23 b6 1 	(DW_OP_plus_uconst: 182)
+ <2><2a7>: Abbrev Number: 7 (DW_TAG_union_type)
+    <2a8>   DW_AT_byte_size   : 1
+    <2a9>   DW_AT_decl_file   : 2
+    <2aa>   DW_AT_decl_line   : 1131
+ <3><2ac>: Abbrev Number: 5 (DW_TAG_member)
+    <2ad>   DW_AT_name        : (indirect string, offset: 0x200): ycbcr_enc
+    <2b1>   DW_AT_type        : <0x366>
+    <2b5>   DW_AT_decl_file   : 2
+    <2b6>   DW_AT_decl_line   : 1132
+    <2b8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2bb>: Abbrev Number: 5 (DW_TAG_member)
+    <2bc>   DW_AT_name        : (indirect string, offset: 0x20a): hsv_enc
+    <2c0>   DW_AT_type        : <0x366>
+    <2c4>   DW_AT_decl_file   : 2
+    <2c5>   DW_AT_decl_line   : 1133
+    <2c7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><2ca>: Abbrev Number: 0
+ <2><2cb>: Abbrev Number: 5 (DW_TAG_member)
+    <2cc>   DW_AT_name        : (indirect string, offset: 0x212): quantization
+    <2d0>   DW_AT_type        : <0x366>
+    <2d4>   DW_AT_decl_file   : 2
+    <2d5>   DW_AT_decl_line   : 1135
+    <2d7>   DW_AT_data_member_location: 3 byte block: 23 b7 1 	(DW_OP_plus_uconst: 183)
+ <2><2db>: Abbrev Number: 5 (DW_TAG_member)
+    <2dc>   DW_AT_name        : (indirect string, offset: 0x21f): xfer_func
+    <2e0>   DW_AT_type        : <0x366>
+    <2e4>   DW_AT_decl_file   : 2
+    <2e5>   DW_AT_decl_line   : 1136
+    <2e7>   DW_AT_data_member_location: 3 byte block: 23 b8 1 	(DW_OP_plus_uconst: 184)
+ <2><2eb>: Abbrev Number: 5 (DW_TAG_member)
+    <2ec>   DW_AT_name        : (indirect string, offset: 0x24a): reserved
+    <2f0>   DW_AT_type        : <0x378>
+    <2f4>   DW_AT_decl_file   : 2
+    <2f5>   DW_AT_decl_line   : 1137
+    <2f7>   DW_AT_data_member_location: 3 byte block: 23 b9 1 	(DW_OP_plus_uconst: 185)
+ <2><2fb>: Abbrev Number: 0
+ <1><2fc>: Abbrev Number: 13 (DW_TAG_array_type)
+    <2fd>   DW_AT_type        : <0x309>
+ <2><301>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <302>   DW_AT_type        : <0x35f>
+    <306>   DW_AT_lower_bound : 0
+    <307>   DW_AT_count       : 8
+ <2><308>: Abbrev Number: 0
+ <1><309>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <30a>   DW_AT_name        : (indirect string, offset: 0x271): v4l2_plane_pix_format
+    <30e>   DW_AT_byte_size   : 20
+    <30f>   DW_AT_decl_file   : 2
+    <310>   DW_AT_decl_line   : 1117
+ <2><312>: Abbrev Number: 5 (DW_TAG_member)
+    <313>   DW_AT_name        : (indirect string, offset: 0x1e0): sizeimage
+    <317>   DW_AT_type        : <0x92>
+    <31b>   DW_AT_decl_file   : 2
+    <31c>   DW_AT_decl_line   : 1118
+    <31e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><321>: Abbrev Number: 5 (DW_TAG_member)
+    <322>   DW_AT_name        : (indirect string, offset: 0x1d3): bytesperline
+    <326>   DW_AT_type        : <0x92>
+    <32a>   DW_AT_decl_file   : 2
+    <32b>   DW_AT_decl_line   : 1119
+    <32d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><330>: Abbrev Number: 5 (DW_TAG_member)
+    <331>   DW_AT_name        : (indirect string, offset: 0x24a): reserved
+    <335>   DW_AT_type        : <0x340>
+    <339>   DW_AT_decl_file   : 2
+    <33a>   DW_AT_decl_line   : 1120
+    <33c>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><33f>: Abbrev Number: 0
+ <1><340>: Abbrev Number: 13 (DW_TAG_array_type)
+    <341>   DW_AT_type        : <0x34d>
+ <2><345>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <346>   DW_AT_type        : <0x35f>
+    <34a>   DW_AT_lower_bound : 0
+    <34b>   DW_AT_count       : 6
+ <2><34c>: Abbrev Number: 0
+ <1><34d>: Abbrev Number: 3 (DW_TAG_typedef)
+    <34e>   DW_AT_type        : <0x358>
+    <352>   DW_AT_name        : (indirect string, offset: 0x262): __u16
+    <356>   DW_AT_decl_file   : 1
+    <357>   DW_AT_decl_line   : 26
+ <1><358>: Abbrev Number: 6 (DW_TAG_base_type)
+    <359>   DW_AT_name        : (indirect string, offset: 0x253): unsigned short
+    <35d>   DW_AT_encoding    : 7	(unsigned)
+    <35e>   DW_AT_byte_size   : 2
+ <1><35f>: Abbrev Number: 15 (DW_TAG_base_type)
+    <360>   DW_AT_name        : (indirect string, offset: 0x268): sizetype
+    <364>   DW_AT_byte_size   : 8
+    <365>   DW_AT_encoding    : 7	(unsigned)
+ <1><366>: Abbrev Number: 3 (DW_TAG_typedef)
+    <367>   DW_AT_type        : <0x371>
+    <36b>   DW_AT_name        : (indirect string, offset: 0x2a0): __u8
+    <36f>   DW_AT_decl_file   : 1
+    <370>   DW_AT_decl_line   : 24
+ <1><371>: Abbrev Number: 6 (DW_TAG_base_type)
+    <372>   DW_AT_name        : (indirect string, offset: 0x292): unsigned char
+    <376>   DW_AT_encoding    : 8	(unsigned char)
+    <377>   DW_AT_byte_size   : 1
+ <1><378>: Abbrev Number: 13 (DW_TAG_array_type)
+    <379>   DW_AT_type        : <0x366>
+ <2><37d>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <37e>   DW_AT_type        : <0x35f>
+    <382>   DW_AT_lower_bound : 0
+    <383>   DW_AT_count       : 7
+ <2><384>: Abbrev Number: 0
+ <1><385>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <386>   DW_AT_name        : (indirect string, offset: 0x31e): v4l2_window
+    <38a>   DW_AT_byte_size   : 40
+    <38b>   DW_AT_decl_file   : 2
+    <38c>   DW_AT_decl_line   : 554
+ <2><38e>: Abbrev Number: 5 (DW_TAG_member)
+    <38f>   DW_AT_name        : (indirect string, offset: 0x2c0): w
+    <393>   DW_AT_type        : <0x3f8>
+    <397>   DW_AT_decl_file   : 2
+    <398>   DW_AT_decl_line   : 555
+    <39a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><39d>: Abbrev Number: 5 (DW_TAG_member)
+    <39e>   DW_AT_name        : (indirect string, offset: 0x1cd): field
+    <3a2>   DW_AT_type        : <0x92>
+    <3a6>   DW_AT_decl_file   : 2
+    <3a7>   DW_AT_decl_line   : 556
+    <3a9>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><3ac>: Abbrev Number: 5 (DW_TAG_member)
+    <3ad>   DW_AT_name        : (indirect string, offset: 0x2df): chromakey
+    <3b1>   DW_AT_type        : <0x92>
+    <3b5>   DW_AT_decl_file   : 2
+    <3b6>   DW_AT_decl_line   : 557
+    <3b8>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><3bb>: Abbrev Number: 5 (DW_TAG_member)
+    <3bc>   DW_AT_name        : (indirect string, offset: 0x2e9): clips
+    <3c0>   DW_AT_type        : <0x44b>
+    <3c4>   DW_AT_decl_file   : 2
+    <3c5>   DW_AT_decl_line   : 558
+    <3c7>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><3ca>: Abbrev Number: 5 (DW_TAG_member)
+    <3cb>   DW_AT_name        : (indirect string, offset: 0x300): clipcount
+    <3cf>   DW_AT_type        : <0x92>
+    <3d3>   DW_AT_decl_file   : 2
+    <3d4>   DW_AT_decl_line   : 559
+    <3d6>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><3d9>: Abbrev Number: 5 (DW_TAG_member)
+    <3da>   DW_AT_name        : (indirect string, offset: 0x30a): bitmap
+    <3de>   DW_AT_type        : <0x478>
+    <3e2>   DW_AT_decl_file   : 2
+    <3e3>   DW_AT_decl_line   : 560
+    <3e5>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><3e8>: Abbrev Number: 5 (DW_TAG_member)
+    <3e9>   DW_AT_name        : (indirect string, offset: 0x311): global_alpha
+    <3ed>   DW_AT_type        : <0x366>
+    <3f1>   DW_AT_decl_file   : 2
+    <3f2>   DW_AT_decl_line   : 561
+    <3f4>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><3f7>: Abbrev Number: 0
+ <1><3f8>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <3f9>   DW_AT_name        : (indirect string, offset: 0x2d5): v4l2_rect
+    <3fd>   DW_AT_byte_size   : 16
+    <3fe>   DW_AT_decl_file   : 2
+    <3ff>   DW_AT_decl_line   : 135
+ <2><400>: Abbrev Number: 9 (DW_TAG_member)
+    <401>   DW_AT_name        : (indirect string, offset: 0x2c2): left
+    <405>   DW_AT_type        : <0x439>
+    <409>   DW_AT_decl_file   : 2
+    <40a>   DW_AT_decl_line   : 136
+    <40b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><40e>: Abbrev Number: 9 (DW_TAG_member)
+    <40f>   DW_AT_name        : (indirect string, offset: 0x2d1): top
+    <413>   DW_AT_type        : <0x439>
+    <417>   DW_AT_decl_file   : 2
+    <418>   DW_AT_decl_line   : 137
+    <419>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><41c>: Abbrev Number: 9 (DW_TAG_member)
+    <41d>   DW_AT_name        : (indirect string, offset: 0x1b4): width
+    <421>   DW_AT_type        : <0x92>
+    <425>   DW_AT_decl_file   : 2
+    <426>   DW_AT_decl_line   : 138
+    <427>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><42a>: Abbrev Number: 9 (DW_TAG_member)
+    <42b>   DW_AT_name        : (indirect string, offset: 0x1ba): height
+    <42f>   DW_AT_type        : <0x92>
+    <433>   DW_AT_decl_file   : 2
+    <434>   DW_AT_decl_line   : 139
+    <435>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><438>: Abbrev Number: 0
+ <1><439>: Abbrev Number: 3 (DW_TAG_typedef)
+    <43a>   DW_AT_type        : <0x444>
+    <43e>   DW_AT_name        : (indirect string, offset: 0x2cb): __s32
+    <442>   DW_AT_decl_file   : 1
+    <443>   DW_AT_decl_line   : 27
+ <1><444>: Abbrev Number: 6 (DW_TAG_base_type)
+    <445>   DW_AT_name        : (indirect string, offset: 0x2c7): int
+    <449>   DW_AT_encoding    : 5	(signed)
+    <44a>   DW_AT_byte_size   : 4
+ <1><44b>: Abbrev Number: 16 (DW_TAG_pointer_type)
+    <44c>   DW_AT_type        : <0x450>
+ <1><450>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <451>   DW_AT_name        : (indirect string, offset: 0x2f6): v4l2_clip
+    <455>   DW_AT_byte_size   : 20
+    <456>   DW_AT_decl_file   : 2
+    <457>   DW_AT_decl_line   : 550
+ <2><459>: Abbrev Number: 5 (DW_TAG_member)
+    <45a>   DW_AT_name        : (indirect string, offset: 0x2ef): c
+    <45e>   DW_AT_type        : <0x3f8>
+    <462>   DW_AT_decl_file   : 2
+    <463>   DW_AT_decl_line   : 551
+    <465>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><468>: Abbrev Number: 5 (DW_TAG_member)
+    <469>   DW_AT_name        : (indirect string, offset: 0x2f1): next
+    <46d>   DW_AT_type        : <0x44b>
+    <471>   DW_AT_decl_file   : 2
+    <472>   DW_AT_decl_line   : 552
+    <474>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><477>: Abbrev Number: 0
+ <1><478>: Abbrev Number: 17 (DW_TAG_pointer_type)
+ <1><479>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <47a>   DW_AT_name        : (indirect string, offset: 0x368): v4l2_vbi_format
+    <47e>   DW_AT_byte_size   : 44
+    <47f>   DW_AT_decl_file   : 2
+    <480>   DW_AT_decl_line   : 1052
+ <2><482>: Abbrev Number: 5 (DW_TAG_member)
+    <483>   DW_AT_name        : (indirect string, offset: 0x32e): sampling_rate
+    <487>   DW_AT_type        : <0x92>
+    <48b>   DW_AT_decl_file   : 2
+    <48c>   DW_AT_decl_line   : 1053
+    <48e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><491>: Abbrev Number: 5 (DW_TAG_member)
+    <492>   DW_AT_name        : (indirect string, offset: 0x33c): offset
+    <496>   DW_AT_type        : <0x92>
+    <49a>   DW_AT_decl_file   : 2
+    <49b>   DW_AT_decl_line   : 1054
+    <49d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><4a0>: Abbrev Number: 5 (DW_TAG_member)
+    <4a1>   DW_AT_name        : (indirect string, offset: 0x343): samples_per_line
+    <4a5>   DW_AT_type        : <0x92>
+    <4a9>   DW_AT_decl_file   : 2
+    <4aa>   DW_AT_decl_line   : 1055
+    <4ac>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><4af>: Abbrev Number: 5 (DW_TAG_member)
+    <4b0>   DW_AT_name        : (indirect string, offset: 0x354): sample_format
+    <4b4>   DW_AT_type        : <0x92>
+    <4b8>   DW_AT_decl_file   : 2
+    <4b9>   DW_AT_decl_line   : 1056
+    <4bb>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><4be>: Abbrev Number: 5 (DW_TAG_member)
+    <4bf>   DW_AT_name        : (indirect string, offset: 0x362): start
+    <4c3>   DW_AT_type        : <0x4fb>
+    <4c7>   DW_AT_decl_file   : 2
+    <4c8>   DW_AT_decl_line   : 1057
+    <4ca>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><4cd>: Abbrev Number: 5 (DW_TAG_member)
+    <4ce>   DW_AT_name        : (indirect string, offset: 0x193): count
+    <4d2>   DW_AT_type        : <0x508>
+    <4d6>   DW_AT_decl_file   : 2
+    <4d7>   DW_AT_decl_line   : 1058
+    <4d9>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><4dc>: Abbrev Number: 5 (DW_TAG_member)
+    <4dd>   DW_AT_name        : (indirect string, offset: 0x1fa): flags
+    <4e1>   DW_AT_type        : <0x92>
+    <4e5>   DW_AT_decl_file   : 2
+    <4e6>   DW_AT_decl_line   : 1059
+    <4e8>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><4eb>: Abbrev Number: 5 (DW_TAG_member)
+    <4ec>   DW_AT_name        : (indirect string, offset: 0x24a): reserved
+    <4f0>   DW_AT_type        : <0x508>
+    <4f4>   DW_AT_decl_file   : 2
+    <4f5>   DW_AT_decl_line   : 1060
+    <4f7>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><4fa>: Abbrev Number: 0
+ <1><4fb>: Abbrev Number: 13 (DW_TAG_array_type)
+    <4fc>   DW_AT_type        : <0x439>
+ <2><500>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <501>   DW_AT_type        : <0x35f>
+    <505>   DW_AT_lower_bound : 0
+    <506>   DW_AT_count       : 2
+ <2><507>: Abbrev Number: 0
+ <1><508>: Abbrev Number: 13 (DW_TAG_array_type)
+    <509>   DW_AT_type        : <0x92>
+ <2><50d>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <50e>   DW_AT_type        : <0x35f>
+    <512>   DW_AT_lower_bound : 0
+    <513>   DW_AT_count       : 2
+ <2><514>: Abbrev Number: 0
+ <1><515>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <516>   DW_AT_name        : (indirect string, offset: 0x3a1): v4l2_sliced_vbi_format
+    <51a>   DW_AT_byte_size   : 112
+    <51b>   DW_AT_decl_file   : 2
+    <51c>   DW_AT_decl_line   : 1068
+ <2><51e>: Abbrev Number: 5 (DW_TAG_member)
+    <51f>   DW_AT_name        : (indirect string, offset: 0x37f): service_set
+    <523>   DW_AT_type        : <0x34d>
+    <527>   DW_AT_decl_file   : 2
+    <528>   DW_AT_decl_line   : 1069
+    <52a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52d>: Abbrev Number: 5 (DW_TAG_member)
+    <52e>   DW_AT_name        : (indirect string, offset: 0x38b): service_lines
+    <532>   DW_AT_type        : <0x55b>
+    <536>   DW_AT_decl_file   : 2
+    <537>   DW_AT_decl_line   : 1070
+    <539>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><53c>: Abbrev Number: 5 (DW_TAG_member)
+    <53d>   DW_AT_name        : (indirect string, offset: 0x399): io_size
+    <541>   DW_AT_type        : <0x92>
+    <545>   DW_AT_decl_file   : 2
+    <546>   DW_AT_decl_line   : 1071
+    <548>   DW_AT_data_member_location: 2 byte block: 23 64 	(DW_OP_plus_uconst: 100)
+ <2><54b>: Abbrev Number: 5 (DW_TAG_member)
+    <54c>   DW_AT_name        : (indirect string, offset: 0x24a): reserved
+    <550>   DW_AT_type        : <0x508>
+    <554>   DW_AT_decl_file   : 2
+    <555>   DW_AT_decl_line   : 1072
+    <557>   DW_AT_data_member_location: 2 byte block: 23 68 	(DW_OP_plus_uconst: 104)
+ <2><55a>: Abbrev Number: 0
+ <1><55b>: Abbrev Number: 13 (DW_TAG_array_type)
+    <55c>   DW_AT_type        : <0x34d>
+ <2><560>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <561>   DW_AT_type        : <0x35f>
+    <565>   DW_AT_lower_bound : 0
+    <566>   DW_AT_count       : 2
+ <2><567>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <568>   DW_AT_type        : <0x35f>
+    <56c>   DW_AT_lower_bound : 0
+    <56d>   DW_AT_count       : 24
+ <2><56e>: Abbrev Number: 0
+ <1><56f>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <570>   DW_AT_name        : (indirect string, offset: 0x3c7): v4l2_sdr_format
+    <574>   DW_AT_byte_size   : 32
+    <575>   DW_AT_decl_file   : 2
+    <576>   DW_AT_decl_line   : 1139
+ <2><578>: Abbrev Number: 5 (DW_TAG_member)
+    <579>   DW_AT_name        : (indirect string, offset: 0x1c1): pixelformat
+    <57d>   DW_AT_type        : <0x92>
+    <581>   DW_AT_decl_file   : 2
+    <582>   DW_AT_decl_line   : 1140
+    <584>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><587>: Abbrev Number: 5 (DW_TAG_member)
+    <588>   DW_AT_name        : (indirect string, offset: 0x3bc): buffersize
+    <58c>   DW_AT_type        : <0x92>
+    <590>   DW_AT_decl_file   : 2
+    <591>   DW_AT_decl_line   : 1141
+    <593>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><596>: Abbrev Number: 5 (DW_TAG_member)
+    <597>   DW_AT_name        : (indirect string, offset: 0x24a): reserved
+    <59b>   DW_AT_type        : <0x5a6>
+    <59f>   DW_AT_decl_file   : 2
+    <5a0>   DW_AT_decl_line   : 1142
+    <5a2>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><5a5>: Abbrev Number: 0
+ <1><5a6>: Abbrev Number: 13 (DW_TAG_array_type)
+    <5a7>   DW_AT_type        : <0x366>
+ <2><5ab>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <5ac>   DW_AT_type        : <0x35f>
+    <5b0>   DW_AT_lower_bound : 0
+    <5b1>   DW_AT_count       : 24
+ <2><5b2>: Abbrev Number: 0
+ <1><5b3>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <5b4>   DW_AT_name        : (indirect string, offset: 0x3e7): v4l2_meta_format
+    <5b8>   DW_AT_byte_size   : 8
+    <5b9>   DW_AT_decl_file   : 2
+    <5ba>   DW_AT_decl_line   : 1144
+ <2><5bc>: Abbrev Number: 5 (DW_TAG_member)
+    <5bd>   DW_AT_name        : (indirect string, offset: 0x3dc): dataformat
+    <5c1>   DW_AT_type        : <0x92>
+    <5c5>   DW_AT_decl_file   : 2
+    <5c6>   DW_AT_decl_line   : 1145
+    <5c8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><5cb>: Abbrev Number: 5 (DW_TAG_member)
+    <5cc>   DW_AT_name        : (indirect string, offset: 0x3bc): buffersize
+    <5d0>   DW_AT_type        : <0x92>
+    <5d4>   DW_AT_decl_file   : 2
+    <5d5>   DW_AT_decl_line   : 1146
+    <5d7>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><5da>: Abbrev Number: 0
+ <1><5db>: Abbrev Number: 13 (DW_TAG_array_type)
+    <5dc>   DW_AT_type        : <0x366>
+ <2><5e0>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <5e1>   DW_AT_type        : <0x35f>
+    <5e5>   DW_AT_lower_bound : 0
+    <5e6>   DW_AT_count       : 200
+ <2><5e7>: Abbrev Number: 0
+ <1><5e8>: Abbrev Number: 13 (DW_TAG_array_type)
+    <5e9>   DW_AT_type        : <0x92>
+ <2><5ed>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <5ee>   DW_AT_type        : <0x35f>
+    <5f2>   DW_AT_lower_bound : 0
+    <5f3>   DW_AT_count       : 8
+ <2><5f4>: Abbrev Number: 0
+ <1><5f5>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_v4l2_create_buffers.d2 b/mpers-m32/struct_v4l2_create_buffers.d2
index c71641d..29d8b0a 100644
--- a/mpers-m32/struct_v4l2_create_buffers.d2
+++ b/mpers-m32/struct_v4l2_create_buffers.d2
@@ -1,762 +1,762 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x9f): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x169): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 53
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x357): struct_v4l2_create_buffers
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x421): struct_v4l2_create_buffers
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 44
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x343): v4l2_create_buffers
+DW_AT_name        : (indirect string, offset: 0x40d): v4l2_create_buffers
 DW_AT_byte_size   : 248
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1253
-<2><44>
+DW_AT_decl_line   : 1260
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xb0): index
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x17a): index
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1254
+DW_AT_decl_line   : 1261
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc9): count
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x193): count
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1255
+DW_AT_decl_line   : 1262
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><62>
+<2><63>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcf): memory
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x199): memory
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1256
+DW_AT_decl_line   : 1263
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><71>
+<2><72>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd6): format
-DW_AT_type        : <0xa3>
+DW_AT_name        : (indirect string, offset: 0x1a0): format
+DW_AT_type        : <0xa4>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1257
+DW_AT_decl_line   : 1264
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><80>
+<2><81>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x180): reserved
-DW_AT_type        : <0x5e7>
+DW_AT_name        : (indirect string, offset: 0x24a): reserved
+DW_AT_type        : <0x5e8>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1258
+DW_AT_decl_line   : 1265
 DW_AT_data_member_location: 3 byte block: 23 d8 1 	(DW_OP_plus_uconst: 216)
-<1><91>
+<1><92>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x9c>
-DW_AT_name        : (indirect string, offset: 0xc3): __u32
+DW_AT_type        : <0x9d>
+DW_AT_name        : (indirect string, offset: 0x18d): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><9c>
+<1><9d>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb6): unsigned int
+DW_AT_name        : (indirect string, offset: 0x180): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><a3>
+<1><a4>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x337): v4l2_format
+DW_AT_name        : (indirect string, offset: 0x401): v4l2_format
 DW_AT_byte_size   : 204
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1141
-<2><ac>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdd): type
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1142
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><bb>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe2): fmt
-DW_AT_type        : <0xca>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1152
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><ca>
-Abbrev Number: 7 (DW_TAG_union_type)
-DW_AT_byte_size   : 200
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1143
-<3><cf>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe6): pix
-DW_AT_type        : <0x149>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1144
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><de>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x16f): pix_mp
-DW_AT_type        : <0x217>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1145
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><ed>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f2): win
-DW_AT_type        : <0x384>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1146
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><fc>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x260): vbi
-DW_AT_type        : <0x478>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1147
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><10b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2ae): sliced
-DW_AT_type        : <0x514>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1148
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><11a>
+<2><ad>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2ee): sdr
-DW_AT_type        : <0x56e>
+DW_AT_name        : (indirect string, offset: 0x1a7): type
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1149
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><129>
+<2><bc>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x30d): meta
-DW_AT_type        : <0x5b2>
+DW_AT_name        : (indirect string, offset: 0x1ac): fmt
+DW_AT_type        : <0xcb>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1159
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><cb>
+Abbrev Number: 7 (DW_TAG_union_type)
+DW_AT_byte_size   : 200
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1150
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><138>
+<3><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x32e): raw_data
-DW_AT_type        : <0x5da>
+DW_AT_name        : (indirect string, offset: 0x1b0): pix
+DW_AT_type        : <0x14a>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1151
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><149>
+<3><df>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x239): pix_mp
+DW_AT_type        : <0x218>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1152
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><ee>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2bc): win
+DW_AT_type        : <0x385>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1153
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><fd>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x32a): vbi
+DW_AT_type        : <0x479>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1154
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><10c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x378): sliced
+DW_AT_type        : <0x515>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1155
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><11b>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3b8): sdr
+DW_AT_type        : <0x56f>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1156
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><12a>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3d7): meta
+DW_AT_type        : <0x5b3>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1157
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><139>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3f8): raw_data
+DW_AT_type        : <0x5db>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1158
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><14a>
 Abbrev Number: 8 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x15f): v4l2_pix_format
+DW_AT_name        : (indirect string, offset: 0x229): v4l2_pix_format
 DW_AT_byte_size   : 48
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 182
-<2><151>
+<2><152>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xea): width
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1b4): width
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 183
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><15f>
+<2><160>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf0): height
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1ba): height
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 184
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><16d>
+<2><16e>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf7): pixelformat
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1c1): pixelformat
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 185
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><17b>
+<2><17c>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x103): field
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1cd): field
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 186
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><189>
+<2><18a>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x109): bytesperline
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1d3): bytesperline
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 187
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><197>
+<2><198>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x116): sizeimage
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1e0): sizeimage
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 188
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><1a5>
+<2><1a6>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x120): colorspace
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1ea): colorspace
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 189
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><1b3>
+<2><1b4>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12b): priv
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1f5): priv
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 190
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><1c1>
+<2><1c2>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x130): flags
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1fa): flags
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 191
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><1cf>
+<2><1d0>
 Abbrev Number: 10 (DW_TAG_member)
-DW_AT_type        : <0x1d9>
+DW_AT_type        : <0x1da>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 192
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><1d9>
+<2><1da>
 Abbrev Number: 11 (DW_TAG_union_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 192
-<3><1dd>
+<3><1de>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x136): ycbcr_enc
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x200): ycbcr_enc
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 193
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><1eb>
+<3><1ec>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x140): hsv_enc
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x20a): hsv_enc
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 194
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><1fa>
+<2><1fb>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x148): quantization
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x212): quantization
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 196
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><208>
+<2><209>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x155): xfer_func
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x21f): xfer_func
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 197
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<1><217>
+<1><218>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1db): v4l2_pix_format_mplane
+DW_AT_name        : (indirect string, offset: 0x2a5): v4l2_pix_format_mplane
 DW_AT_byte_size   : 192
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1115
-<2><220>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xea): width
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1116
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><22f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf0): height
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1117
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><23e>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf7): pixelformat
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1118
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><24d>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x103): field
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1119
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><25c>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x120): colorspace
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1120
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><26b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x176): plane_fmt
-DW_AT_type        : <0x2fb>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1121
-DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><27a>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1bd): num_planes
-DW_AT_type        : <0x365>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1122
-DW_AT_data_member_location: 3 byte block: 23 b4 1 	(DW_OP_plus_uconst: 180)
-<2><28a>
+<2><221>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x130): flags
-DW_AT_type        : <0x365>
+DW_AT_name        : (indirect string, offset: 0x1b4): width
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1123
-DW_AT_data_member_location: 3 byte block: 23 b5 1 	(DW_OP_plus_uconst: 181)
-<2><29a>
-Abbrev Number: 12 (DW_TAG_member)
-DW_AT_type        : <0x2a6>
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><230>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ba): height
+DW_AT_type        : <0x92>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1124
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><23f>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1c1): pixelformat
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1125
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><24e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1cd): field
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1126
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><25d>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ea): colorspace
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1127
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><26c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x240): plane_fmt
+DW_AT_type        : <0x2fc>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1128
+DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+<2><27b>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x287): num_planes
+DW_AT_type        : <0x366>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1129
+DW_AT_data_member_location: 3 byte block: 23 b4 1 	(DW_OP_plus_uconst: 180)
+<2><28b>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1fa): flags
+DW_AT_type        : <0x366>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1130
+DW_AT_data_member_location: 3 byte block: 23 b5 1 	(DW_OP_plus_uconst: 181)
+<2><29b>
+Abbrev Number: 12 (DW_TAG_member)
+DW_AT_type        : <0x2a7>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1131
 DW_AT_data_member_location: 3 byte block: 23 b6 1 	(DW_OP_plus_uconst: 182)
-<2><2a6>
+<2><2a7>
 Abbrev Number: 7 (DW_TAG_union_type)
 DW_AT_byte_size   : 1
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1124
-<3><2ab>
+DW_AT_decl_line   : 1131
+<3><2ac>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x136): ycbcr_enc
-DW_AT_type        : <0x365>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1125
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><2ba>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x140): hsv_enc
-DW_AT_type        : <0x365>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1126
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><2ca>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x148): quantization
-DW_AT_type        : <0x365>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1128
-DW_AT_data_member_location: 3 byte block: 23 b7 1 	(DW_OP_plus_uconst: 183)
-<2><2da>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x155): xfer_func
-DW_AT_type        : <0x365>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1129
-DW_AT_data_member_location: 3 byte block: 23 b8 1 	(DW_OP_plus_uconst: 184)
-<2><2ea>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x180): reserved
-DW_AT_type        : <0x377>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1130
-DW_AT_data_member_location: 3 byte block: 23 b9 1 	(DW_OP_plus_uconst: 185)
-<1><2fb>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x308>
-<2><300>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
-DW_AT_lower_bound : 0
-DW_AT_count       : 8
-<1><308>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1a7): v4l2_plane_pix_format
-DW_AT_byte_size   : 20
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1110
-<2><311>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x116): sizeimage
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1111
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><320>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x109): bytesperline
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1112
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><32f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x180): reserved
-DW_AT_type        : <0x33f>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1113
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><33f>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x34c>
-<2><344>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
-DW_AT_lower_bound : 0
-DW_AT_count       : 6
-<1><34c>
-Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x357>
-DW_AT_name        : (indirect string, offset: 0x198): __u16
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 26
-<1><357>
-Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x189): unsigned short
-DW_AT_encoding    : 7	(unsigned)
-DW_AT_byte_size   : 2
-<1><35e>
-Abbrev Number: 15 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x19e): sizetype
-DW_AT_byte_size   : 8
-DW_AT_encoding    : 7	(unsigned)
-<1><365>
-Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x370>
-DW_AT_name        : (indirect string, offset: 0x1d6): __u8
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 24
-<1><370>
-Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1c8): unsigned char
-DW_AT_encoding    : 8	(unsigned char)
-DW_AT_byte_size   : 1
-<1><377>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x365>
-<2><37c>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
-DW_AT_lower_bound : 0
-DW_AT_count       : 7
-<1><384>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x254): v4l2_window
-DW_AT_byte_size   : 40
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 547
-<2><38d>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f6): w
-DW_AT_type        : <0x3f7>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 548
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><39c>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x103): field
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 549
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><3ab>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x215): chromakey
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 550
-DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><3ba>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x21f): clips
-DW_AT_type        : <0x44a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 551
-DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><3c9>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x236): clipcount
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 552
-DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><3d8>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x240): bitmap
-DW_AT_type        : <0x477>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 553
-DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><3e7>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x247): global_alpha
-DW_AT_type        : <0x365>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 554
-DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<1><3f7>
-Abbrev Number: 8 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x20b): v4l2_rect
-DW_AT_byte_size   : 16
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 135
-<2><3ff>
-Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f8): left
-DW_AT_type        : <0x438>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 136
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><40d>
-Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x207): top
-DW_AT_type        : <0x438>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 137
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><41b>
-Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xea): width
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 138
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><429>
-Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf0): height
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 139
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><438>
-Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x443>
-DW_AT_name        : (indirect string, offset: 0x201): __s32
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 27
-<1><443>
-Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1fd): int
-DW_AT_encoding    : 5	(signed)
-DW_AT_byte_size   : 4
-<1><44a>
-Abbrev Number: 16 (DW_TAG_pointer_type)
-DW_AT_type        : <0x44f>
-<1><44f>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x22c): v4l2_clip
-DW_AT_byte_size   : 20
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 543
-<2><458>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x225): c
-DW_AT_type        : <0x3f7>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 544
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><467>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x227): next
-DW_AT_type        : <0x44a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 545
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<1><477>
-Abbrev Number: 17 (DW_TAG_pointer_type)
-<1><478>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x29e): v4l2_vbi_format
-DW_AT_byte_size   : 44
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1045
-<2><481>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x264): sampling_rate
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1046
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><490>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x272): offset
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1047
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><49f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x279): samples_per_line
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1048
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><4ae>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x28a): sample_format
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1049
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><4bd>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x298): start
-DW_AT_type        : <0x4fa>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1050
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><4cc>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc9): count
-DW_AT_type        : <0x507>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1051
-DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><4db>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x130): flags
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1052
-DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><4ea>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x180): reserved
-DW_AT_type        : <0x507>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1053
-DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<1><4fa>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x438>
-<2><4ff>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
-DW_AT_lower_bound : 0
-DW_AT_count       : 2
-<1><507>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x91>
-<2><50c>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
-DW_AT_lower_bound : 0
-DW_AT_count       : 2
-<1><514>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x2d7): v4l2_sliced_vbi_format
-DW_AT_byte_size   : 112
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1061
-<2><51d>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2b5): service_set
-DW_AT_type        : <0x34c>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1062
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><52c>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2c1): service_lines
-DW_AT_type        : <0x55a>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1063
-DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><53b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2cf): io_size
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1064
-DW_AT_data_member_location: 2 byte block: 23 64 	(DW_OP_plus_uconst: 100)
-<2><54a>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x180): reserved
-DW_AT_type        : <0x507>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1065
-DW_AT_data_member_location: 2 byte block: 23 68 	(DW_OP_plus_uconst: 104)
-<1><55a>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x34c>
-<2><55f>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
-DW_AT_lower_bound : 0
-DW_AT_count       : 2
-<2><566>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
-DW_AT_lower_bound : 0
-DW_AT_count       : 24
-<1><56e>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x2fd): v4l2_sdr_format
-DW_AT_byte_size   : 32
+DW_AT_name        : (indirect string, offset: 0x200): ycbcr_enc
+DW_AT_type        : <0x366>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1132
-<2><577>
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><2bb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf7): pixelformat
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x20a): hsv_enc
+DW_AT_type        : <0x366>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1133
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><586>
+<2><2cb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2f2): buffersize
-DW_AT_type        : <0x91>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1134
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><595>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x180): reserved
-DW_AT_type        : <0x5a5>
+DW_AT_name        : (indirect string, offset: 0x212): quantization
+DW_AT_type        : <0x366>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1135
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><5a5>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x365>
-<2><5aa>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
-DW_AT_lower_bound : 0
-DW_AT_count       : 24
-<1><5b2>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x31d): v4l2_meta_format
-DW_AT_byte_size   : 8
+DW_AT_data_member_location: 3 byte block: 23 b7 1 	(DW_OP_plus_uconst: 183)
+<2><2db>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x21f): xfer_func
+DW_AT_type        : <0x366>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1136
+DW_AT_data_member_location: 3 byte block: 23 b8 1 	(DW_OP_plus_uconst: 184)
+<2><2eb>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x24a): reserved
+DW_AT_type        : <0x378>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1137
-<2><5bb>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x312): dataformat
-DW_AT_type        : <0x91>
+DW_AT_data_member_location: 3 byte block: 23 b9 1 	(DW_OP_plus_uconst: 185)
+<1><2fc>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x309>
+<2><301>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x35f>
+DW_AT_lower_bound : 0
+DW_AT_count       : 8
+<1><309>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x271): v4l2_plane_pix_format
+DW_AT_byte_size   : 20
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1138
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><5ca>
+DW_AT_decl_line   : 1117
+<2><312>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2f2): buffersize
-DW_AT_type        : <0x91>
+DW_AT_name        : (indirect string, offset: 0x1e0): sizeimage
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1118
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><321>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1d3): bytesperline
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1119
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><330>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x24a): reserved
+DW_AT_type        : <0x340>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1120
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<1><340>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x34d>
+<2><345>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x35f>
+DW_AT_lower_bound : 0
+DW_AT_count       : 6
+<1><34d>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0x358>
+DW_AT_name        : (indirect string, offset: 0x262): __u16
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 26
+<1><358>
+Abbrev Number: 6 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x253): unsigned short
+DW_AT_encoding    : 7	(unsigned)
+DW_AT_byte_size   : 2
+<1><35f>
+Abbrev Number: 15 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x268): sizetype
+DW_AT_byte_size   : 8
+DW_AT_encoding    : 7	(unsigned)
+<1><366>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0x371>
+DW_AT_name        : (indirect string, offset: 0x2a0): __u8
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 24
+<1><371>
+Abbrev Number: 6 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x292): unsigned char
+DW_AT_encoding    : 8	(unsigned char)
+DW_AT_byte_size   : 1
+<1><378>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x366>
+<2><37d>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x35f>
+DW_AT_lower_bound : 0
+DW_AT_count       : 7
+<1><385>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x31e): v4l2_window
+DW_AT_byte_size   : 40
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 554
+<2><38e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2c0): w
+DW_AT_type        : <0x3f8>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 555
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><39d>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1cd): field
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 556
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><3ac>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2df): chromakey
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 557
+DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+<2><3bb>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2e9): clips
+DW_AT_type        : <0x44b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 558
+DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+<2><3ca>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x300): clipcount
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 559
+DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+<2><3d9>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x30a): bitmap
+DW_AT_type        : <0x478>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 560
+DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+<2><3e8>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x311): global_alpha
+DW_AT_type        : <0x366>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 561
+DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+<1><3f8>
+Abbrev Number: 8 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x2d5): v4l2_rect
+DW_AT_byte_size   : 16
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 135
+<2><400>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2c2): left
+DW_AT_type        : <0x439>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 136
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><40e>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2d1): top
+DW_AT_type        : <0x439>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 137
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><41c>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1b4): width
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 138
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><42a>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ba): height
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 139
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<1><439>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0x444>
+DW_AT_name        : (indirect string, offset: 0x2cb): __s32
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 27
+<1><444>
+Abbrev Number: 6 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x2c7): int
+DW_AT_encoding    : 5	(signed)
+DW_AT_byte_size   : 4
+<1><44b>
+Abbrev Number: 16 (DW_TAG_pointer_type)
+DW_AT_type        : <0x450>
+<1><450>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x2f6): v4l2_clip
+DW_AT_byte_size   : 20
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 550
+<2><459>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2ef): c
+DW_AT_type        : <0x3f8>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 551
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><468>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2f1): next
+DW_AT_type        : <0x44b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 552
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<1><478>
+Abbrev Number: 17 (DW_TAG_pointer_type)
+<1><479>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x368): v4l2_vbi_format
+DW_AT_byte_size   : 44
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1052
+<2><482>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x32e): sampling_rate
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1053
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><491>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x33c): offset
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1054
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><4a0>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x343): samples_per_line
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1055
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><4af>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x354): sample_format
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1056
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><4be>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x362): start
+DW_AT_type        : <0x4fb>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1057
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><4cd>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x193): count
+DW_AT_type        : <0x508>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1058
+DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+<2><4dc>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1fa): flags
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1059
+DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+<2><4eb>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x24a): reserved
+DW_AT_type        : <0x508>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1060
+DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+<1><4fb>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x439>
+<2><500>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x35f>
+DW_AT_lower_bound : 0
+DW_AT_count       : 2
+<1><508>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x92>
+<2><50d>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x35f>
+DW_AT_lower_bound : 0
+DW_AT_count       : 2
+<1><515>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x3a1): v4l2_sliced_vbi_format
+DW_AT_byte_size   : 112
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1068
+<2><51e>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x37f): service_set
+DW_AT_type        : <0x34d>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1069
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><52d>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x38b): service_lines
+DW_AT_type        : <0x55b>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1070
+DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+<2><53c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x399): io_size
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1071
+DW_AT_data_member_location: 2 byte block: 23 64 	(DW_OP_plus_uconst: 100)
+<2><54b>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x24a): reserved
+DW_AT_type        : <0x508>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1072
+DW_AT_data_member_location: 2 byte block: 23 68 	(DW_OP_plus_uconst: 104)
+<1><55b>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x34d>
+<2><560>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x35f>
+DW_AT_lower_bound : 0
+DW_AT_count       : 2
+<2><567>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x35f>
+DW_AT_lower_bound : 0
+DW_AT_count       : 24
+<1><56f>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x3c7): v4l2_sdr_format
+DW_AT_byte_size   : 32
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1139
+<2><578>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1c1): pixelformat
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1140
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><587>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3bc): buffersize
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1141
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><5da>
+<2><596>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x24a): reserved
+DW_AT_type        : <0x5a6>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1142
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<1><5a6>
 Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x365>
-<2><5df>
+DW_AT_type        : <0x366>
+<2><5ab>
 Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
+DW_AT_type        : <0x35f>
+DW_AT_lower_bound : 0
+DW_AT_count       : 24
+<1><5b3>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x3e7): v4l2_meta_format
+DW_AT_byte_size   : 8
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1144
+<2><5bc>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3dc): dataformat
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1145
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><5cb>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3bc): buffersize
+DW_AT_type        : <0x92>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1146
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<1><5db>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x366>
+<2><5e0>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x35f>
 DW_AT_lower_bound : 0
 DW_AT_count       : 200
-<1><5e7>
+<1><5e8>
 Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x91>
-<2><5ec>
+DW_AT_type        : <0x92>
+<2><5ed>
 Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x35e>
+DW_AT_type        : <0x35f>
 DW_AT_lower_bound : 0
 DW_AT_count       : 8
diff --git a/mpers-m32/struct_v4l2_ext_control.d1 b/mpers-m32/struct_v4l2_ext_control.d1
index 5ebcc89..8333df7 100644
--- a/mpers-m32/struct_v4l2_ext_control.d1
+++ b/mpers-m32/struct_v4l2_ext_control.d1
@@ -1,172 +1,173 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x173 (32-bit)
+   Length:        0x174 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_v4l2_ext_control.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_v4l2_ext_control.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x61): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x9c): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 53
-    <2a>   DW_AT_location    : 5 byte block: 3 1 0 0 0 	(DW_OP_addr: 1)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x161): struct_v4l2_ext_control
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 46
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x150): v4l2_ext_control
-    <40>   DW_AT_byte_size   : 20
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 782
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xad): id
-    <49>   DW_AT_type        : <0xec>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 783
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xc3): size
-    <58>   DW_AT_type        : <0xec>
-    <5c>   DW_AT_decl_file   : 2
-    <5d>   DW_AT_decl_line   : 784
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><62>: Abbrev Number: 5 (DW_TAG_member)
-    <63>   DW_AT_name        : (indirect string, offset: 0xc8): reserved2
-    <67>   DW_AT_type        : <0xfe>
-    <6b>   DW_AT_decl_file   : 2
-    <6c>   DW_AT_decl_line   : 785
-    <6e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><71>: Abbrev Number: 6 (DW_TAG_member)
-    <72>   DW_AT_type        : <0x7c>
-    <76>   DW_AT_decl_file   : 2
-    <77>   DW_AT_decl_line   : 786
-    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7c>: Abbrev Number: 7 (DW_TAG_union_type)
-    <7d>   DW_AT_byte_size   : 8
-    <7e>   DW_AT_decl_file   : 2
-    <7f>   DW_AT_decl_line   : 786
- <3><81>: Abbrev Number: 5 (DW_TAG_member)
-    <82>   DW_AT_name        : (indirect string, offset: 0xdb): value
-    <86>   DW_AT_type        : <0x112>
-    <8a>   DW_AT_decl_file   : 2
-    <8b>   DW_AT_decl_line   : 787
-    <8d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><90>: Abbrev Number: 5 (DW_TAG_member)
-    <91>   DW_AT_name        : (indirect string, offset: 0xeb): value64
-    <95>   DW_AT_type        : <0x124>
-    <99>   DW_AT_decl_file   : 2
-    <9a>   DW_AT_decl_line   : 788
-    <9c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><9f>: Abbrev Number: 5 (DW_TAG_member)
-    <a0>   DW_AT_name        : (indirect string, offset: 0x107): string
-    <a4>   DW_AT_type        : <0x136>
-    <a8>   DW_AT_decl_file   : 2
-    <a9>   DW_AT_decl_line   : 789
-    <ab>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><ae>: Abbrev Number: 5 (DW_TAG_member)
-    <af>   DW_AT_name        : (indirect string, offset: 0x113): p_u8
-    <b3>   DW_AT_type        : <0x142>
-    <b7>   DW_AT_decl_file   : 2
-    <b8>   DW_AT_decl_line   : 790
-    <ba>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><bd>: Abbrev Number: 5 (DW_TAG_member)
-    <be>   DW_AT_name        : (indirect string, offset: 0x12b): p_u16
-    <c2>   DW_AT_type        : <0x159>
-    <c6>   DW_AT_decl_file   : 2
-    <c7>   DW_AT_decl_line   : 791
-    <c9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><cc>: Abbrev Number: 5 (DW_TAG_member)
-    <cd>   DW_AT_name        : (indirect string, offset: 0x146): p_u32
-    <d1>   DW_AT_type        : <0x170>
-    <d5>   DW_AT_decl_file   : 2
-    <d6>   DW_AT_decl_line   : 792
-    <d8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><db>: Abbrev Number: 5 (DW_TAG_member)
-    <dc>   DW_AT_name        : (indirect string, offset: 0x14c): ptr
-    <e0>   DW_AT_type        : <0x175>
-    <e4>   DW_AT_decl_file   : 2
-    <e5>   DW_AT_decl_line   : 793
-    <e7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><ea>: Abbrev Number: 0
- <2><eb>: Abbrev Number: 0
- <1><ec>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ed>   DW_AT_type        : <0xf7>
-    <f1>   DW_AT_name        : (indirect string, offset: 0xbd): __u32
-    <f5>   DW_AT_decl_file   : 1
-    <f6>   DW_AT_decl_line   : 28
- <1><f7>: Abbrev Number: 8 (DW_TAG_base_type)
-    <f8>   DW_AT_name        : (indirect string, offset: 0xb0): unsigned int
-    <fc>   DW_AT_encoding    : 7	(unsigned)
-    <fd>   DW_AT_byte_size   : 4
- <1><fe>: Abbrev Number: 9 (DW_TAG_array_type)
-    <ff>   DW_AT_type        : <0xec>
- <2><103>: Abbrev Number: 10 (DW_TAG_subrange_type)
-    <104>   DW_AT_type        : <0x10b>
-    <108>   DW_AT_lower_bound : 0
-    <109>   DW_AT_count       : 1
- <2><10a>: Abbrev Number: 0
- <1><10b>: Abbrev Number: 11 (DW_TAG_base_type)
-    <10c>   DW_AT_name        : (indirect string, offset: 0xd2): sizetype
-    <110>   DW_AT_byte_size   : 8
-    <111>   DW_AT_encoding    : 7	(unsigned)
- <1><112>: Abbrev Number: 3 (DW_TAG_typedef)
-    <113>   DW_AT_type        : <0x11d>
-    <117>   DW_AT_name        : (indirect string, offset: 0xe5): __s32
-    <11b>   DW_AT_decl_file   : 1
-    <11c>   DW_AT_decl_line   : 27
- <1><11d>: Abbrev Number: 8 (DW_TAG_base_type)
-    <11e>   DW_AT_name        : (indirect string, offset: 0xe1): int
-    <122>   DW_AT_encoding    : 5	(signed)
-    <123>   DW_AT_byte_size   : 4
- <1><124>: Abbrev Number: 3 (DW_TAG_typedef)
-    <125>   DW_AT_type        : <0x12f>
-    <129>   DW_AT_name        : (indirect string, offset: 0x101): __s64
-    <12d>   DW_AT_decl_file   : 1
-    <12e>   DW_AT_decl_line   : 30
- <1><12f>: Abbrev Number: 8 (DW_TAG_base_type)
-    <130>   DW_AT_name        : (indirect string, offset: 0xf3): long long int
-    <134>   DW_AT_encoding    : 5	(signed)
-    <135>   DW_AT_byte_size   : 8
- <1><136>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <137>   DW_AT_type        : <0x13b>
- <1><13b>: Abbrev Number: 8 (DW_TAG_base_type)
-    <13c>   DW_AT_name        : (indirect string, offset: 0x10e): char
-    <140>   DW_AT_encoding    : 8	(unsigned char)
-    <141>   DW_AT_byte_size   : 1
- <1><142>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <143>   DW_AT_type        : <0x147>
- <1><147>: Abbrev Number: 3 (DW_TAG_typedef)
-    <148>   DW_AT_type        : <0x152>
-    <14c>   DW_AT_name        : (indirect string, offset: 0x126): __u8
-    <150>   DW_AT_decl_file   : 1
-    <151>   DW_AT_decl_line   : 24
- <1><152>: Abbrev Number: 8 (DW_TAG_base_type)
-    <153>   DW_AT_name        : (indirect string, offset: 0x118): unsigned char
-    <157>   DW_AT_encoding    : 8	(unsigned char)
-    <158>   DW_AT_byte_size   : 1
- <1><159>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <15a>   DW_AT_type        : <0x15e>
- <1><15e>: Abbrev Number: 3 (DW_TAG_typedef)
-    <15f>   DW_AT_type        : <0x169>
-    <163>   DW_AT_name        : (indirect string, offset: 0x140): __u16
-    <167>   DW_AT_decl_file   : 1
-    <168>   DW_AT_decl_line   : 26
- <1><169>: Abbrev Number: 8 (DW_TAG_base_type)
-    <16a>   DW_AT_name        : (indirect string, offset: 0x131): unsigned short
-    <16e>   DW_AT_encoding    : 7	(unsigned)
-    <16f>   DW_AT_byte_size   : 2
- <1><170>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <171>   DW_AT_type        : <0xec>
- <1><175>: Abbrev Number: 13 (DW_TAG_pointer_type)
- <1><176>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x12b): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x166): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 53
+    <2b>   DW_AT_location    : 5 byte block: 3 1 0 0 0 	(DW_OP_addr: 1)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x22b): struct_v4l2_ext_control
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 46
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x21a): v4l2_ext_control
+    <41>   DW_AT_byte_size   : 20
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 789
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x177): id
+    <4a>   DW_AT_type        : <0xed>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 790
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x18d): size
+    <59>   DW_AT_type        : <0xed>
+    <5d>   DW_AT_decl_file   : 2
+    <5e>   DW_AT_decl_line   : 791
+    <60>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><63>: Abbrev Number: 5 (DW_TAG_member)
+    <64>   DW_AT_name        : (indirect string, offset: 0x192): reserved2
+    <68>   DW_AT_type        : <0xff>
+    <6c>   DW_AT_decl_file   : 2
+    <6d>   DW_AT_decl_line   : 792
+    <6f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><72>: Abbrev Number: 6 (DW_TAG_member)
+    <73>   DW_AT_type        : <0x7d>
+    <77>   DW_AT_decl_file   : 2
+    <78>   DW_AT_decl_line   : 793
+    <7a>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7d>: Abbrev Number: 7 (DW_TAG_union_type)
+    <7e>   DW_AT_byte_size   : 8
+    <7f>   DW_AT_decl_file   : 2
+    <80>   DW_AT_decl_line   : 793
+ <3><82>: Abbrev Number: 5 (DW_TAG_member)
+    <83>   DW_AT_name        : (indirect string, offset: 0x1a5): value
+    <87>   DW_AT_type        : <0x113>
+    <8b>   DW_AT_decl_file   : 2
+    <8c>   DW_AT_decl_line   : 794
+    <8e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><91>: Abbrev Number: 5 (DW_TAG_member)
+    <92>   DW_AT_name        : (indirect string, offset: 0x1b5): value64
+    <96>   DW_AT_type        : <0x125>
+    <9a>   DW_AT_decl_file   : 2
+    <9b>   DW_AT_decl_line   : 795
+    <9d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><a0>: Abbrev Number: 5 (DW_TAG_member)
+    <a1>   DW_AT_name        : (indirect string, offset: 0x1d1): string
+    <a5>   DW_AT_type        : <0x137>
+    <a9>   DW_AT_decl_file   : 2
+    <aa>   DW_AT_decl_line   : 796
+    <ac>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><af>: Abbrev Number: 5 (DW_TAG_member)
+    <b0>   DW_AT_name        : (indirect string, offset: 0x1dd): p_u8
+    <b4>   DW_AT_type        : <0x143>
+    <b8>   DW_AT_decl_file   : 2
+    <b9>   DW_AT_decl_line   : 797
+    <bb>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><be>: Abbrev Number: 5 (DW_TAG_member)
+    <bf>   DW_AT_name        : (indirect string, offset: 0x1f5): p_u16
+    <c3>   DW_AT_type        : <0x15a>
+    <c7>   DW_AT_decl_file   : 2
+    <c8>   DW_AT_decl_line   : 798
+    <ca>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><cd>: Abbrev Number: 5 (DW_TAG_member)
+    <ce>   DW_AT_name        : (indirect string, offset: 0x210): p_u32
+    <d2>   DW_AT_type        : <0x171>
+    <d6>   DW_AT_decl_file   : 2
+    <d7>   DW_AT_decl_line   : 799
+    <d9>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><dc>: Abbrev Number: 5 (DW_TAG_member)
+    <dd>   DW_AT_name        : (indirect string, offset: 0x216): ptr
+    <e1>   DW_AT_type        : <0x176>
+    <e5>   DW_AT_decl_file   : 2
+    <e6>   DW_AT_decl_line   : 800
+    <e8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><eb>: Abbrev Number: 0
+ <2><ec>: Abbrev Number: 0
+ <1><ed>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ee>   DW_AT_type        : <0xf8>
+    <f2>   DW_AT_name        : (indirect string, offset: 0x187): __u32
+    <f6>   DW_AT_decl_file   : 1
+    <f7>   DW_AT_decl_line   : 28
+ <1><f8>: Abbrev Number: 8 (DW_TAG_base_type)
+    <f9>   DW_AT_name        : (indirect string, offset: 0x17a): unsigned int
+    <fd>   DW_AT_encoding    : 7	(unsigned)
+    <fe>   DW_AT_byte_size   : 4
+ <1><ff>: Abbrev Number: 9 (DW_TAG_array_type)
+    <100>   DW_AT_type        : <0xed>
+ <2><104>: Abbrev Number: 10 (DW_TAG_subrange_type)
+    <105>   DW_AT_type        : <0x10c>
+    <109>   DW_AT_lower_bound : 0
+    <10a>   DW_AT_count       : 1
+ <2><10b>: Abbrev Number: 0
+ <1><10c>: Abbrev Number: 11 (DW_TAG_base_type)
+    <10d>   DW_AT_name        : (indirect string, offset: 0x19c): sizetype
+    <111>   DW_AT_byte_size   : 8
+    <112>   DW_AT_encoding    : 7	(unsigned)
+ <1><113>: Abbrev Number: 3 (DW_TAG_typedef)
+    <114>   DW_AT_type        : <0x11e>
+    <118>   DW_AT_name        : (indirect string, offset: 0x1af): __s32
+    <11c>   DW_AT_decl_file   : 1
+    <11d>   DW_AT_decl_line   : 27
+ <1><11e>: Abbrev Number: 8 (DW_TAG_base_type)
+    <11f>   DW_AT_name        : (indirect string, offset: 0x1ab): int
+    <123>   DW_AT_encoding    : 5	(signed)
+    <124>   DW_AT_byte_size   : 4
+ <1><125>: Abbrev Number: 3 (DW_TAG_typedef)
+    <126>   DW_AT_type        : <0x130>
+    <12a>   DW_AT_name        : (indirect string, offset: 0x1cb): __s64
+    <12e>   DW_AT_decl_file   : 1
+    <12f>   DW_AT_decl_line   : 30
+ <1><130>: Abbrev Number: 8 (DW_TAG_base_type)
+    <131>   DW_AT_name        : (indirect string, offset: 0x1bd): long long int
+    <135>   DW_AT_encoding    : 5	(signed)
+    <136>   DW_AT_byte_size   : 8
+ <1><137>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <138>   DW_AT_type        : <0x13c>
+ <1><13c>: Abbrev Number: 8 (DW_TAG_base_type)
+    <13d>   DW_AT_name        : (indirect string, offset: 0x1d8): char
+    <141>   DW_AT_encoding    : 8	(unsigned char)
+    <142>   DW_AT_byte_size   : 1
+ <1><143>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <144>   DW_AT_type        : <0x148>
+ <1><148>: Abbrev Number: 3 (DW_TAG_typedef)
+    <149>   DW_AT_type        : <0x153>
+    <14d>   DW_AT_name        : (indirect string, offset: 0x1f0): __u8
+    <151>   DW_AT_decl_file   : 1
+    <152>   DW_AT_decl_line   : 24
+ <1><153>: Abbrev Number: 8 (DW_TAG_base_type)
+    <154>   DW_AT_name        : (indirect string, offset: 0x1e2): unsigned char
+    <158>   DW_AT_encoding    : 8	(unsigned char)
+    <159>   DW_AT_byte_size   : 1
+ <1><15a>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <15b>   DW_AT_type        : <0x15f>
+ <1><15f>: Abbrev Number: 3 (DW_TAG_typedef)
+    <160>   DW_AT_type        : <0x16a>
+    <164>   DW_AT_name        : (indirect string, offset: 0x20a): __u16
+    <168>   DW_AT_decl_file   : 1
+    <169>   DW_AT_decl_line   : 26
+ <1><16a>: Abbrev Number: 8 (DW_TAG_base_type)
+    <16b>   DW_AT_name        : (indirect string, offset: 0x1fb): unsigned short
+    <16f>   DW_AT_encoding    : 7	(unsigned)
+    <170>   DW_AT_byte_size   : 2
+ <1><171>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <172>   DW_AT_type        : <0xed>
+ <1><176>: Abbrev Number: 13 (DW_TAG_pointer_type)
+ <1><177>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_v4l2_ext_control.d2 b/mpers-m32/struct_v4l2_ext_control.d2
index cd2dc1e..4ef90f1 100644
--- a/mpers-m32/struct_v4l2_ext_control.d2
+++ b/mpers-m32/struct_v4l2_ext_control.d2
@@ -1,188 +1,188 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x9c): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x166): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 53
 DW_AT_location    : 5 byte block: 3 1 0 0 0 	(DW_OP_addr: 1)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x161): struct_v4l2_ext_control
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x22b): struct_v4l2_ext_control
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 46
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x150): v4l2_ext_control
+DW_AT_name        : (indirect string, offset: 0x21a): v4l2_ext_control
 DW_AT_byte_size   : 20
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 782
-<2><44>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xad): id
-DW_AT_type        : <0xec>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 783
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc3): size
-DW_AT_type        : <0xec>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 784
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><62>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc8): reserved2
-DW_AT_type        : <0xfe>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 785
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><71>
-Abbrev Number: 6 (DW_TAG_member)
-DW_AT_type        : <0x7c>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 786
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><7c>
-Abbrev Number: 7 (DW_TAG_union_type)
-DW_AT_byte_size   : 8
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 786
-<3><81>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xdb): value
-DW_AT_type        : <0x112>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 787
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><90>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xeb): value64
-DW_AT_type        : <0x124>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 788
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><9f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x107): string
-DW_AT_type        : <0x136>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 789
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><ae>
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x113): p_u8
-DW_AT_type        : <0x142>
+DW_AT_name        : (indirect string, offset: 0x177): id
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 790
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><bd>
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x12b): p_u16
-DW_AT_type        : <0x159>
+DW_AT_name        : (indirect string, offset: 0x18d): size
+DW_AT_type        : <0xed>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 791
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><cc>
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><63>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x146): p_u32
-DW_AT_type        : <0x170>
+DW_AT_name        : (indirect string, offset: 0x192): reserved2
+DW_AT_type        : <0xff>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 792
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><db>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14c): ptr
-DW_AT_type        : <0x175>
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><72>
+Abbrev Number: 6 (DW_TAG_member)
+DW_AT_type        : <0x7d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 793
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><7d>
+Abbrev Number: 7 (DW_TAG_union_type)
+DW_AT_byte_size   : 8
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 793
+<3><82>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1a5): value
+DW_AT_type        : <0x113>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 794
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><ec>
+<3><91>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1b5): value64
+DW_AT_type        : <0x125>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 795
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><a0>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1d1): string
+DW_AT_type        : <0x137>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 796
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><af>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1dd): p_u8
+DW_AT_type        : <0x143>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 797
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><be>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1f5): p_u16
+DW_AT_type        : <0x15a>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 798
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><cd>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x210): p_u32
+DW_AT_type        : <0x171>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 799
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><dc>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x216): ptr
+DW_AT_type        : <0x176>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 800
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><ed>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xf7>
-DW_AT_name        : (indirect string, offset: 0xbd): __u32
+DW_AT_type        : <0xf8>
+DW_AT_name        : (indirect string, offset: 0x187): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><f7>
+<1><f8>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb0): unsigned int
+DW_AT_name        : (indirect string, offset: 0x17a): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><fe>
+<1><ff>
 Abbrev Number: 9 (DW_TAG_array_type)
-DW_AT_type        : <0xec>
-<2><103>
+DW_AT_type        : <0xed>
+<2><104>
 Abbrev Number: 10 (DW_TAG_subrange_type)
-DW_AT_type        : <0x10b>
+DW_AT_type        : <0x10c>
 DW_AT_lower_bound : 0
 DW_AT_count       : 1
-<1><10b>
+<1><10c>
 Abbrev Number: 11 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xd2): sizetype
+DW_AT_name        : (indirect string, offset: 0x19c): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><112>
+<1><113>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x11d>
-DW_AT_name        : (indirect string, offset: 0xe5): __s32
+DW_AT_type        : <0x11e>
+DW_AT_name        : (indirect string, offset: 0x1af): __s32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 27
-<1><11d>
+<1><11e>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe1): int
+DW_AT_name        : (indirect string, offset: 0x1ab): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><124>
+<1><125>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x12f>
-DW_AT_name        : (indirect string, offset: 0x101): __s64
+DW_AT_type        : <0x130>
+DW_AT_name        : (indirect string, offset: 0x1cb): __s64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 30
-<1><12f>
+<1><130>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xf3): long long int
+DW_AT_name        : (indirect string, offset: 0x1bd): long long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 8
-<1><136>
+<1><137>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x13b>
-<1><13b>
+DW_AT_type        : <0x13c>
+<1><13c>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x10e): char
+DW_AT_name        : (indirect string, offset: 0x1d8): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><142>
+<1><143>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x147>
-<1><147>
+DW_AT_type        : <0x148>
+<1><148>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x152>
-DW_AT_name        : (indirect string, offset: 0x126): __u8
+DW_AT_type        : <0x153>
+DW_AT_name        : (indirect string, offset: 0x1f0): __u8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
-<1><152>
+<1><153>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x118): unsigned char
+DW_AT_name        : (indirect string, offset: 0x1e2): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><159>
+<1><15a>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x15e>
-<1><15e>
+DW_AT_type        : <0x15f>
+<1><15f>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x169>
-DW_AT_name        : (indirect string, offset: 0x140): __u16
+DW_AT_type        : <0x16a>
+DW_AT_name        : (indirect string, offset: 0x20a): __u16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
-<1><169>
+<1><16a>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x131): unsigned short
+DW_AT_name        : (indirect string, offset: 0x1fb): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><170>
+<1><171>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0xec>
-<1><175>
+DW_AT_type        : <0xed>
+<1><176>
 Abbrev Number: 13 (DW_TAG_pointer_type)
diff --git a/mpers-m32/struct_v4l2_ext_controls.d1 b/mpers-m32/struct_v4l2_ext_controls.d1
index e6501f2..379ea63 100644
--- a/mpers-m32/struct_v4l2_ext_controls.d1
+++ b/mpers-m32/struct_v4l2_ext_controls.d1
@@ -1,233 +1,234 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x1fa (32-bit)
+   Length:        0x1fb (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_v4l2_ext_controls.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_v4l2_ext_controls.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x62): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x9d): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 53
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x1a7): struct_v4l2_ext_controls
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 47
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x195): v4l2_ext_controls
-    <40>   DW_AT_byte_size   : 24
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 796
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_type        : <0x4f>
-    <49>   DW_AT_decl_file   : 2
-    <4a>   DW_AT_decl_line   : 797
-    <4c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><4f>: Abbrev Number: 6 (DW_TAG_union_type)
-    <50>   DW_AT_byte_size   : 4
-    <51>   DW_AT_decl_file   : 2
-    <52>   DW_AT_decl_line   : 797
- <3><54>: Abbrev Number: 7 (DW_TAG_member)
-    <55>   DW_AT_name        : (indirect string, offset: 0xae): ctrl_class
-    <59>   DW_AT_type        : <0xb0>
-    <5d>   DW_AT_decl_file   : 2
-    <5e>   DW_AT_decl_line   : 798
-    <60>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><63>: Abbrev Number: 7 (DW_TAG_member)
-    <64>   DW_AT_name        : (indirect string, offset: 0xcc): which
-    <68>   DW_AT_type        : <0xb0>
-    <6c>   DW_AT_decl_file   : 2
-    <6d>   DW_AT_decl_line   : 799
-    <6f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><72>: Abbrev Number: 0
- <2><73>: Abbrev Number: 7 (DW_TAG_member)
-    <74>   DW_AT_name        : (indirect string, offset: 0xd2): count
-    <78>   DW_AT_type        : <0xb0>
-    <7c>   DW_AT_decl_file   : 2
-    <7d>   DW_AT_decl_line   : 801
-    <7f>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><82>: Abbrev Number: 7 (DW_TAG_member)
-    <83>   DW_AT_name        : (indirect string, offset: 0xd8): error_idx
-    <87>   DW_AT_type        : <0xb0>
-    <8b>   DW_AT_decl_file   : 2
-    <8c>   DW_AT_decl_line   : 802
-    <8e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><91>: Abbrev Number: 7 (DW_TAG_member)
-    <92>   DW_AT_name        : (indirect string, offset: 0xe2): reserved
-    <96>   DW_AT_type        : <0xc2>
-    <9a>   DW_AT_decl_file   : 2
-    <9b>   DW_AT_decl_line   : 803
-    <9d>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><a0>: Abbrev Number: 7 (DW_TAG_member)
-    <a1>   DW_AT_name        : (indirect string, offset: 0xf4): controls
-    <a5>   DW_AT_type        : <0xd6>
-    <a9>   DW_AT_decl_file   : 2
-    <aa>   DW_AT_decl_line   : 804
-    <ac>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><af>: Abbrev Number: 0
- <1><b0>: Abbrev Number: 3 (DW_TAG_typedef)
-    <b1>   DW_AT_type        : <0xbb>
-    <b5>   DW_AT_name        : (indirect string, offset: 0xc6): __u32
-    <b9>   DW_AT_decl_file   : 1
-    <ba>   DW_AT_decl_line   : 28
- <1><bb>: Abbrev Number: 8 (DW_TAG_base_type)
-    <bc>   DW_AT_name        : (indirect string, offset: 0xb9): unsigned int
-    <c0>   DW_AT_encoding    : 7	(unsigned)
-    <c1>   DW_AT_byte_size   : 4
- <1><c2>: Abbrev Number: 9 (DW_TAG_array_type)
-    <c3>   DW_AT_type        : <0xb0>
- <2><c7>: Abbrev Number: 10 (DW_TAG_subrange_type)
-    <c8>   DW_AT_type        : <0xcf>
-    <cc>   DW_AT_lower_bound : 0
-    <cd>   DW_AT_count       : 2
- <2><ce>: Abbrev Number: 0
- <1><cf>: Abbrev Number: 11 (DW_TAG_base_type)
-    <d0>   DW_AT_name        : (indirect string, offset: 0xeb): sizetype
-    <d4>   DW_AT_byte_size   : 8
-    <d5>   DW_AT_encoding    : 7	(unsigned)
- <1><d6>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <d7>   DW_AT_type        : <0xdb>
- <1><db>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <dc>   DW_AT_name        : (indirect string, offset: 0x184): v4l2_ext_control
-    <e0>   DW_AT_byte_size   : 20
-    <e1>   DW_AT_decl_file   : 2
-    <e2>   DW_AT_decl_line   : 782
- <2><e4>: Abbrev Number: 7 (DW_TAG_member)
-    <e5>   DW_AT_name        : (indirect string, offset: 0xfd): id
-    <e9>   DW_AT_type        : <0xb0>
-    <ed>   DW_AT_decl_file   : 2
-    <ee>   DW_AT_decl_line   : 783
-    <f0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><f3>: Abbrev Number: 7 (DW_TAG_member)
-    <f4>   DW_AT_name        : (indirect string, offset: 0x100): size
-    <f8>   DW_AT_type        : <0xb0>
-    <fc>   DW_AT_decl_file   : 2
-    <fd>   DW_AT_decl_line   : 784
-    <ff>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><102>: Abbrev Number: 7 (DW_TAG_member)
-    <103>   DW_AT_name        : (indirect string, offset: 0x105): reserved2
-    <107>   DW_AT_type        : <0x18c>
-    <10b>   DW_AT_decl_file   : 2
-    <10c>   DW_AT_decl_line   : 785
-    <10e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><111>: Abbrev Number: 5 (DW_TAG_member)
-    <112>   DW_AT_type        : <0x11c>
-    <116>   DW_AT_decl_file   : 2
-    <117>   DW_AT_decl_line   : 786
-    <119>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><11c>: Abbrev Number: 6 (DW_TAG_union_type)
-    <11d>   DW_AT_byte_size   : 8
-    <11e>   DW_AT_decl_file   : 2
-    <11f>   DW_AT_decl_line   : 786
- <3><121>: Abbrev Number: 7 (DW_TAG_member)
-    <122>   DW_AT_name        : (indirect string, offset: 0x10f): value
-    <126>   DW_AT_type        : <0x199>
-    <12a>   DW_AT_decl_file   : 2
-    <12b>   DW_AT_decl_line   : 787
-    <12d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><130>: Abbrev Number: 7 (DW_TAG_member)
-    <131>   DW_AT_name        : (indirect string, offset: 0x11f): value64
-    <135>   DW_AT_type        : <0x1ab>
-    <139>   DW_AT_decl_file   : 2
-    <13a>   DW_AT_decl_line   : 788
-    <13c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><13f>: Abbrev Number: 7 (DW_TAG_member)
-    <140>   DW_AT_name        : (indirect string, offset: 0x13b): string
-    <144>   DW_AT_type        : <0x1bd>
-    <148>   DW_AT_decl_file   : 2
-    <149>   DW_AT_decl_line   : 789
-    <14b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><14e>: Abbrev Number: 7 (DW_TAG_member)
-    <14f>   DW_AT_name        : (indirect string, offset: 0x147): p_u8
-    <153>   DW_AT_type        : <0x1c9>
-    <157>   DW_AT_decl_file   : 2
-    <158>   DW_AT_decl_line   : 790
-    <15a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><15d>: Abbrev Number: 7 (DW_TAG_member)
-    <15e>   DW_AT_name        : (indirect string, offset: 0x15f): p_u16
-    <162>   DW_AT_type        : <0x1e0>
-    <166>   DW_AT_decl_file   : 2
-    <167>   DW_AT_decl_line   : 791
-    <169>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><16c>: Abbrev Number: 7 (DW_TAG_member)
-    <16d>   DW_AT_name        : (indirect string, offset: 0x17a): p_u32
-    <171>   DW_AT_type        : <0x1f7>
-    <175>   DW_AT_decl_file   : 2
-    <176>   DW_AT_decl_line   : 792
-    <178>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><17b>: Abbrev Number: 7 (DW_TAG_member)
-    <17c>   DW_AT_name        : (indirect string, offset: 0x180): ptr
-    <180>   DW_AT_type        : <0x1fc>
-    <184>   DW_AT_decl_file   : 2
-    <185>   DW_AT_decl_line   : 793
-    <187>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><18a>: Abbrev Number: 0
- <2><18b>: Abbrev Number: 0
- <1><18c>: Abbrev Number: 9 (DW_TAG_array_type)
-    <18d>   DW_AT_type        : <0xb0>
- <2><191>: Abbrev Number: 10 (DW_TAG_subrange_type)
-    <192>   DW_AT_type        : <0xcf>
-    <196>   DW_AT_lower_bound : 0
-    <197>   DW_AT_count       : 1
- <2><198>: Abbrev Number: 0
- <1><199>: Abbrev Number: 3 (DW_TAG_typedef)
-    <19a>   DW_AT_type        : <0x1a4>
-    <19e>   DW_AT_name        : (indirect string, offset: 0x119): __s32
-    <1a2>   DW_AT_decl_file   : 1
-    <1a3>   DW_AT_decl_line   : 27
- <1><1a4>: Abbrev Number: 8 (DW_TAG_base_type)
-    <1a5>   DW_AT_name        : (indirect string, offset: 0x115): int
-    <1a9>   DW_AT_encoding    : 5	(signed)
-    <1aa>   DW_AT_byte_size   : 4
- <1><1ab>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1ac>   DW_AT_type        : <0x1b6>
-    <1b0>   DW_AT_name        : (indirect string, offset: 0x135): __s64
-    <1b4>   DW_AT_decl_file   : 1
-    <1b5>   DW_AT_decl_line   : 30
- <1><1b6>: Abbrev Number: 8 (DW_TAG_base_type)
-    <1b7>   DW_AT_name        : (indirect string, offset: 0x127): long long int
-    <1bb>   DW_AT_encoding    : 5	(signed)
-    <1bc>   DW_AT_byte_size   : 8
- <1><1bd>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <1be>   DW_AT_type        : <0x1c2>
- <1><1c2>: Abbrev Number: 8 (DW_TAG_base_type)
-    <1c3>   DW_AT_name        : (indirect string, offset: 0x142): char
-    <1c7>   DW_AT_encoding    : 8	(unsigned char)
-    <1c8>   DW_AT_byte_size   : 1
- <1><1c9>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <1ca>   DW_AT_type        : <0x1ce>
- <1><1ce>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1cf>   DW_AT_type        : <0x1d9>
-    <1d3>   DW_AT_name        : (indirect string, offset: 0x15a): __u8
-    <1d7>   DW_AT_decl_file   : 1
-    <1d8>   DW_AT_decl_line   : 24
- <1><1d9>: Abbrev Number: 8 (DW_TAG_base_type)
-    <1da>   DW_AT_name        : (indirect string, offset: 0x14c): unsigned char
-    <1de>   DW_AT_encoding    : 8	(unsigned char)
-    <1df>   DW_AT_byte_size   : 1
- <1><1e0>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <1e1>   DW_AT_type        : <0x1e5>
- <1><1e5>: Abbrev Number: 3 (DW_TAG_typedef)
-    <1e6>   DW_AT_type        : <0x1f0>
-    <1ea>   DW_AT_name        : (indirect string, offset: 0x174): __u16
-    <1ee>   DW_AT_decl_file   : 1
-    <1ef>   DW_AT_decl_line   : 26
- <1><1f0>: Abbrev Number: 8 (DW_TAG_base_type)
-    <1f1>   DW_AT_name        : (indirect string, offset: 0x165): unsigned short
-    <1f5>   DW_AT_encoding    : 7	(unsigned)
-    <1f6>   DW_AT_byte_size   : 2
- <1><1f7>: Abbrev Number: 12 (DW_TAG_pointer_type)
-    <1f8>   DW_AT_type        : <0xb0>
- <1><1fc>: Abbrev Number: 13 (DW_TAG_pointer_type)
- <1><1fd>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x12c): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x167): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 53
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x271): struct_v4l2_ext_controls
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 47
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x25f): v4l2_ext_controls
+    <41>   DW_AT_byte_size   : 24
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 803
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_type        : <0x50>
+    <4a>   DW_AT_decl_file   : 2
+    <4b>   DW_AT_decl_line   : 804
+    <4d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><50>: Abbrev Number: 6 (DW_TAG_union_type)
+    <51>   DW_AT_byte_size   : 4
+    <52>   DW_AT_decl_file   : 2
+    <53>   DW_AT_decl_line   : 804
+ <3><55>: Abbrev Number: 7 (DW_TAG_member)
+    <56>   DW_AT_name        : (indirect string, offset: 0x178): ctrl_class
+    <5a>   DW_AT_type        : <0xb1>
+    <5e>   DW_AT_decl_file   : 2
+    <5f>   DW_AT_decl_line   : 805
+    <61>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><64>: Abbrev Number: 7 (DW_TAG_member)
+    <65>   DW_AT_name        : (indirect string, offset: 0x196): which
+    <69>   DW_AT_type        : <0xb1>
+    <6d>   DW_AT_decl_file   : 2
+    <6e>   DW_AT_decl_line   : 806
+    <70>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><73>: Abbrev Number: 0
+ <2><74>: Abbrev Number: 7 (DW_TAG_member)
+    <75>   DW_AT_name        : (indirect string, offset: 0x19c): count
+    <79>   DW_AT_type        : <0xb1>
+    <7d>   DW_AT_decl_file   : 2
+    <7e>   DW_AT_decl_line   : 808
+    <80>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><83>: Abbrev Number: 7 (DW_TAG_member)
+    <84>   DW_AT_name        : (indirect string, offset: 0x1a2): error_idx
+    <88>   DW_AT_type        : <0xb1>
+    <8c>   DW_AT_decl_file   : 2
+    <8d>   DW_AT_decl_line   : 809
+    <8f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><92>: Abbrev Number: 7 (DW_TAG_member)
+    <93>   DW_AT_name        : (indirect string, offset: 0x1ac): reserved
+    <97>   DW_AT_type        : <0xc3>
+    <9b>   DW_AT_decl_file   : 2
+    <9c>   DW_AT_decl_line   : 810
+    <9e>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><a1>: Abbrev Number: 7 (DW_TAG_member)
+    <a2>   DW_AT_name        : (indirect string, offset: 0x1be): controls
+    <a6>   DW_AT_type        : <0xd7>
+    <aa>   DW_AT_decl_file   : 2
+    <ab>   DW_AT_decl_line   : 811
+    <ad>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><b0>: Abbrev Number: 0
+ <1><b1>: Abbrev Number: 3 (DW_TAG_typedef)
+    <b2>   DW_AT_type        : <0xbc>
+    <b6>   DW_AT_name        : (indirect string, offset: 0x190): __u32
+    <ba>   DW_AT_decl_file   : 1
+    <bb>   DW_AT_decl_line   : 28
+ <1><bc>: Abbrev Number: 8 (DW_TAG_base_type)
+    <bd>   DW_AT_name        : (indirect string, offset: 0x183): unsigned int
+    <c1>   DW_AT_encoding    : 7	(unsigned)
+    <c2>   DW_AT_byte_size   : 4
+ <1><c3>: Abbrev Number: 9 (DW_TAG_array_type)
+    <c4>   DW_AT_type        : <0xb1>
+ <2><c8>: Abbrev Number: 10 (DW_TAG_subrange_type)
+    <c9>   DW_AT_type        : <0xd0>
+    <cd>   DW_AT_lower_bound : 0
+    <ce>   DW_AT_count       : 2
+ <2><cf>: Abbrev Number: 0
+ <1><d0>: Abbrev Number: 11 (DW_TAG_base_type)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x1b5): sizetype
+    <d5>   DW_AT_byte_size   : 8
+    <d6>   DW_AT_encoding    : 7	(unsigned)
+ <1><d7>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <d8>   DW_AT_type        : <0xdc>
+ <1><dc>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <dd>   DW_AT_name        : (indirect string, offset: 0x24e): v4l2_ext_control
+    <e1>   DW_AT_byte_size   : 20
+    <e2>   DW_AT_decl_file   : 2
+    <e3>   DW_AT_decl_line   : 789
+ <2><e5>: Abbrev Number: 7 (DW_TAG_member)
+    <e6>   DW_AT_name        : (indirect string, offset: 0x1c7): id
+    <ea>   DW_AT_type        : <0xb1>
+    <ee>   DW_AT_decl_file   : 2
+    <ef>   DW_AT_decl_line   : 790
+    <f1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><f4>: Abbrev Number: 7 (DW_TAG_member)
+    <f5>   DW_AT_name        : (indirect string, offset: 0x1ca): size
+    <f9>   DW_AT_type        : <0xb1>
+    <fd>   DW_AT_decl_file   : 2
+    <fe>   DW_AT_decl_line   : 791
+    <100>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><103>: Abbrev Number: 7 (DW_TAG_member)
+    <104>   DW_AT_name        : (indirect string, offset: 0x1cf): reserved2
+    <108>   DW_AT_type        : <0x18d>
+    <10c>   DW_AT_decl_file   : 2
+    <10d>   DW_AT_decl_line   : 792
+    <10f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><112>: Abbrev Number: 5 (DW_TAG_member)
+    <113>   DW_AT_type        : <0x11d>
+    <117>   DW_AT_decl_file   : 2
+    <118>   DW_AT_decl_line   : 793
+    <11a>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><11d>: Abbrev Number: 6 (DW_TAG_union_type)
+    <11e>   DW_AT_byte_size   : 8
+    <11f>   DW_AT_decl_file   : 2
+    <120>   DW_AT_decl_line   : 793
+ <3><122>: Abbrev Number: 7 (DW_TAG_member)
+    <123>   DW_AT_name        : (indirect string, offset: 0x1d9): value
+    <127>   DW_AT_type        : <0x19a>
+    <12b>   DW_AT_decl_file   : 2
+    <12c>   DW_AT_decl_line   : 794
+    <12e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><131>: Abbrev Number: 7 (DW_TAG_member)
+    <132>   DW_AT_name        : (indirect string, offset: 0x1e9): value64
+    <136>   DW_AT_type        : <0x1ac>
+    <13a>   DW_AT_decl_file   : 2
+    <13b>   DW_AT_decl_line   : 795
+    <13d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><140>: Abbrev Number: 7 (DW_TAG_member)
+    <141>   DW_AT_name        : (indirect string, offset: 0x205): string
+    <145>   DW_AT_type        : <0x1be>
+    <149>   DW_AT_decl_file   : 2
+    <14a>   DW_AT_decl_line   : 796
+    <14c>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><14f>: Abbrev Number: 7 (DW_TAG_member)
+    <150>   DW_AT_name        : (indirect string, offset: 0x211): p_u8
+    <154>   DW_AT_type        : <0x1ca>
+    <158>   DW_AT_decl_file   : 2
+    <159>   DW_AT_decl_line   : 797
+    <15b>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><15e>: Abbrev Number: 7 (DW_TAG_member)
+    <15f>   DW_AT_name        : (indirect string, offset: 0x229): p_u16
+    <163>   DW_AT_type        : <0x1e1>
+    <167>   DW_AT_decl_file   : 2
+    <168>   DW_AT_decl_line   : 798
+    <16a>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><16d>: Abbrev Number: 7 (DW_TAG_member)
+    <16e>   DW_AT_name        : (indirect string, offset: 0x244): p_u32
+    <172>   DW_AT_type        : <0x1f8>
+    <176>   DW_AT_decl_file   : 2
+    <177>   DW_AT_decl_line   : 799
+    <179>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><17c>: Abbrev Number: 7 (DW_TAG_member)
+    <17d>   DW_AT_name        : (indirect string, offset: 0x24a): ptr
+    <181>   DW_AT_type        : <0x1fd>
+    <185>   DW_AT_decl_file   : 2
+    <186>   DW_AT_decl_line   : 800
+    <188>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><18b>: Abbrev Number: 0
+ <2><18c>: Abbrev Number: 0
+ <1><18d>: Abbrev Number: 9 (DW_TAG_array_type)
+    <18e>   DW_AT_type        : <0xb1>
+ <2><192>: Abbrev Number: 10 (DW_TAG_subrange_type)
+    <193>   DW_AT_type        : <0xd0>
+    <197>   DW_AT_lower_bound : 0
+    <198>   DW_AT_count       : 1
+ <2><199>: Abbrev Number: 0
+ <1><19a>: Abbrev Number: 3 (DW_TAG_typedef)
+    <19b>   DW_AT_type        : <0x1a5>
+    <19f>   DW_AT_name        : (indirect string, offset: 0x1e3): __s32
+    <1a3>   DW_AT_decl_file   : 1
+    <1a4>   DW_AT_decl_line   : 27
+ <1><1a5>: Abbrev Number: 8 (DW_TAG_base_type)
+    <1a6>   DW_AT_name        : (indirect string, offset: 0x1df): int
+    <1aa>   DW_AT_encoding    : 5	(signed)
+    <1ab>   DW_AT_byte_size   : 4
+ <1><1ac>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1ad>   DW_AT_type        : <0x1b7>
+    <1b1>   DW_AT_name        : (indirect string, offset: 0x1ff): __s64
+    <1b5>   DW_AT_decl_file   : 1
+    <1b6>   DW_AT_decl_line   : 30
+ <1><1b7>: Abbrev Number: 8 (DW_TAG_base_type)
+    <1b8>   DW_AT_name        : (indirect string, offset: 0x1f1): long long int
+    <1bc>   DW_AT_encoding    : 5	(signed)
+    <1bd>   DW_AT_byte_size   : 8
+ <1><1be>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <1bf>   DW_AT_type        : <0x1c3>
+ <1><1c3>: Abbrev Number: 8 (DW_TAG_base_type)
+    <1c4>   DW_AT_name        : (indirect string, offset: 0x20c): char
+    <1c8>   DW_AT_encoding    : 8	(unsigned char)
+    <1c9>   DW_AT_byte_size   : 1
+ <1><1ca>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <1cb>   DW_AT_type        : <0x1cf>
+ <1><1cf>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1d0>   DW_AT_type        : <0x1da>
+    <1d4>   DW_AT_name        : (indirect string, offset: 0x224): __u8
+    <1d8>   DW_AT_decl_file   : 1
+    <1d9>   DW_AT_decl_line   : 24
+ <1><1da>: Abbrev Number: 8 (DW_TAG_base_type)
+    <1db>   DW_AT_name        : (indirect string, offset: 0x216): unsigned char
+    <1df>   DW_AT_encoding    : 8	(unsigned char)
+    <1e0>   DW_AT_byte_size   : 1
+ <1><1e1>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <1e2>   DW_AT_type        : <0x1e6>
+ <1><1e6>: Abbrev Number: 3 (DW_TAG_typedef)
+    <1e7>   DW_AT_type        : <0x1f1>
+    <1eb>   DW_AT_name        : (indirect string, offset: 0x23e): __u16
+    <1ef>   DW_AT_decl_file   : 1
+    <1f0>   DW_AT_decl_line   : 26
+ <1><1f1>: Abbrev Number: 8 (DW_TAG_base_type)
+    <1f2>   DW_AT_name        : (indirect string, offset: 0x22f): unsigned short
+    <1f6>   DW_AT_encoding    : 7	(unsigned)
+    <1f7>   DW_AT_byte_size   : 2
+ <1><1f8>: Abbrev Number: 12 (DW_TAG_pointer_type)
+    <1f9>   DW_AT_type        : <0xb1>
+ <1><1fd>: Abbrev Number: 13 (DW_TAG_pointer_type)
+ <1><1fe>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_v4l2_ext_controls.d2 b/mpers-m32/struct_v4l2_ext_controls.d2
index 9d81543..2157d5e 100644
--- a/mpers-m32/struct_v4l2_ext_controls.d2
+++ b/mpers-m32/struct_v4l2_ext_controls.d2
@@ -1,258 +1,258 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x9d): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x167): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 53
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x1a7): struct_v4l2_ext_controls
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x271): struct_v4l2_ext_controls
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 47
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x195): v4l2_ext_controls
+DW_AT_name        : (indirect string, offset: 0x25f): v4l2_ext_controls
 DW_AT_byte_size   : 24
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 796
-<2><44>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_type        : <0x4f>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 797
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><4f>
-Abbrev Number: 6 (DW_TAG_union_type)
-DW_AT_byte_size   : 4
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 797
-<3><54>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xae): ctrl_class
-DW_AT_type        : <0xb0>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 798
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><63>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcc): which
-DW_AT_type        : <0xb0>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 799
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><73>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd2): count
-DW_AT_type        : <0xb0>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 801
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><82>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd8): error_idx
-DW_AT_type        : <0xb0>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 802
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><91>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe2): reserved
-DW_AT_type        : <0xc2>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 803
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><a0>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf4): controls
-DW_AT_type        : <0xd6>
+<2><45>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_type        : <0x50>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 804
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><50>
+Abbrev Number: 6 (DW_TAG_union_type)
+DW_AT_byte_size   : 4
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 804
+<3><55>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x178): ctrl_class
+DW_AT_type        : <0xb1>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 805
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><64>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x196): which
+DW_AT_type        : <0xb1>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 806
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><74>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x19c): count
+DW_AT_type        : <0xb1>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 808
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><83>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1a2): error_idx
+DW_AT_type        : <0xb1>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 809
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><92>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ac): reserved
+DW_AT_type        : <0xc3>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 810
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><a1>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1be): controls
+DW_AT_type        : <0xd7>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 811
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<1><b0>
+<1><b1>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xbb>
-DW_AT_name        : (indirect string, offset: 0xc6): __u32
+DW_AT_type        : <0xbc>
+DW_AT_name        : (indirect string, offset: 0x190): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><bb>
+<1><bc>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb9): unsigned int
+DW_AT_name        : (indirect string, offset: 0x183): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><c2>
+<1><c3>
 Abbrev Number: 9 (DW_TAG_array_type)
-DW_AT_type        : <0xb0>
-<2><c7>
+DW_AT_type        : <0xb1>
+<2><c8>
 Abbrev Number: 10 (DW_TAG_subrange_type)
-DW_AT_type        : <0xcf>
+DW_AT_type        : <0xd0>
 DW_AT_lower_bound : 0
 DW_AT_count       : 2
-<1><cf>
+<1><d0>
 Abbrev Number: 11 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xeb): sizetype
+DW_AT_name        : (indirect string, offset: 0x1b5): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><d6>
+<1><d7>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0xdb>
-<1><db>
+DW_AT_type        : <0xdc>
+<1><dc>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x184): v4l2_ext_control
+DW_AT_name        : (indirect string, offset: 0x24e): v4l2_ext_control
 DW_AT_byte_size   : 20
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 782
-<2><e4>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfd): id
-DW_AT_type        : <0xb0>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 783
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><f3>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x100): size
-DW_AT_type        : <0xb0>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 784
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><102>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x105): reserved2
-DW_AT_type        : <0x18c>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 785
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><111>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_type        : <0x11c>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 786
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><11c>
-Abbrev Number: 6 (DW_TAG_union_type)
-DW_AT_byte_size   : 8
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 786
-<3><121>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10f): value
-DW_AT_type        : <0x199>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 787
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><130>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11f): value64
-DW_AT_type        : <0x1ab>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 788
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><13f>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13b): string
-DW_AT_type        : <0x1bd>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 789
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><14e>
+<2><e5>
 Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x147): p_u8
-DW_AT_type        : <0x1c9>
+DW_AT_name        : (indirect string, offset: 0x1c7): id
+DW_AT_type        : <0xb1>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 790
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><15d>
+<2><f4>
 Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15f): p_u16
-DW_AT_type        : <0x1e0>
+DW_AT_name        : (indirect string, offset: 0x1ca): size
+DW_AT_type        : <0xb1>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 791
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><16c>
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><103>
 Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x17a): p_u32
-DW_AT_type        : <0x1f7>
+DW_AT_name        : (indirect string, offset: 0x1cf): reserved2
+DW_AT_type        : <0x18d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 792
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><17b>
-Abbrev Number: 7 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x180): ptr
-DW_AT_type        : <0x1fc>
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><112>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_type        : <0x11d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 793
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><11d>
+Abbrev Number: 6 (DW_TAG_union_type)
+DW_AT_byte_size   : 8
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 793
+<3><122>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1d9): value
+DW_AT_type        : <0x19a>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 794
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><18c>
+<3><131>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1e9): value64
+DW_AT_type        : <0x1ac>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 795
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><140>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x205): string
+DW_AT_type        : <0x1be>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 796
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><14f>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x211): p_u8
+DW_AT_type        : <0x1ca>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 797
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><15e>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x229): p_u16
+DW_AT_type        : <0x1e1>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 798
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><16d>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x244): p_u32
+DW_AT_type        : <0x1f8>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 799
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><17c>
+Abbrev Number: 7 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x24a): ptr
+DW_AT_type        : <0x1fd>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 800
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><18d>
 Abbrev Number: 9 (DW_TAG_array_type)
-DW_AT_type        : <0xb0>
-<2><191>
+DW_AT_type        : <0xb1>
+<2><192>
 Abbrev Number: 10 (DW_TAG_subrange_type)
-DW_AT_type        : <0xcf>
+DW_AT_type        : <0xd0>
 DW_AT_lower_bound : 0
 DW_AT_count       : 1
-<1><199>
+<1><19a>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x1a4>
-DW_AT_name        : (indirect string, offset: 0x119): __s32
+DW_AT_type        : <0x1a5>
+DW_AT_name        : (indirect string, offset: 0x1e3): __s32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 27
-<1><1a4>
+<1><1a5>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x115): int
+DW_AT_name        : (indirect string, offset: 0x1df): int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><1ab>
+<1><1ac>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x1b6>
-DW_AT_name        : (indirect string, offset: 0x135): __s64
+DW_AT_type        : <0x1b7>
+DW_AT_name        : (indirect string, offset: 0x1ff): __s64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 30
-<1><1b6>
+<1><1b7>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x127): long long int
+DW_AT_name        : (indirect string, offset: 0x1f1): long long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 8
-<1><1bd>
+<1><1be>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x1c2>
-<1><1c2>
+DW_AT_type        : <0x1c3>
+<1><1c3>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x142): char
+DW_AT_name        : (indirect string, offset: 0x20c): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><1c9>
+<1><1ca>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x1ce>
-<1><1ce>
+DW_AT_type        : <0x1cf>
+<1><1cf>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x1d9>
-DW_AT_name        : (indirect string, offset: 0x15a): __u8
+DW_AT_type        : <0x1da>
+DW_AT_name        : (indirect string, offset: 0x224): __u8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
-<1><1d9>
+<1><1da>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x14c): unsigned char
+DW_AT_name        : (indirect string, offset: 0x216): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><1e0>
+<1><1e1>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0x1e5>
-<1><1e5>
+DW_AT_type        : <0x1e6>
+<1><1e6>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x1f0>
-DW_AT_name        : (indirect string, offset: 0x174): __u16
+DW_AT_type        : <0x1f1>
+DW_AT_name        : (indirect string, offset: 0x23e): __u16
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 26
-<1><1f0>
+<1><1f1>
 Abbrev Number: 8 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x165): unsigned short
+DW_AT_name        : (indirect string, offset: 0x22f): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><1f7>
+<1><1f8>
 Abbrev Number: 12 (DW_TAG_pointer_type)
-DW_AT_type        : <0xb0>
-<1><1fc>
+DW_AT_type        : <0xb1>
+<1><1fd>
 Abbrev Number: 13 (DW_TAG_pointer_type)
diff --git a/mpers-m32/struct_v4l2_format.d1 b/mpers-m32/struct_v4l2_format.d1
index 684527f..5afff8f 100644
--- a/mpers-m32/struct_v4l2_format.d1
+++ b/mpers-m32/struct_v4l2_format.d1
@@ -1,635 +1,636 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x58e (32-bit)
+   Length:        0x58f (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_v4l2_format.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_v4l2_format.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5c): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 53
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x327): struct_v4l2_format
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 48
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x31b): v4l2_format
-    <40>   DW_AT_byte_size   : 204
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 1141
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xa8): type
-    <49>   DW_AT_type        : <0xe1>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 1142
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xc0): fmt
-    <58>   DW_AT_type        : <0x62>
-    <5c>   DW_AT_decl_file   : 2
-    <5d>   DW_AT_decl_line   : 1152
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><62>: Abbrev Number: 6 (DW_TAG_union_type)
-    <63>   DW_AT_byte_size   : 200
-    <64>   DW_AT_decl_file   : 2
-    <65>   DW_AT_decl_line   : 1143
- <3><67>: Abbrev Number: 5 (DW_TAG_member)
-    <68>   DW_AT_name        : (indirect string, offset: 0xc4): pix
-    <6c>   DW_AT_type        : <0xf3>
-    <70>   DW_AT_decl_file   : 2
-    <71>   DW_AT_decl_line   : 1144
-    <73>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><76>: Abbrev Number: 5 (DW_TAG_member)
-    <77>   DW_AT_name        : (indirect string, offset: 0x14d): pix_mp
-    <7b>   DW_AT_type        : <0x1c1>
-    <7f>   DW_AT_decl_file   : 2
-    <80>   DW_AT_decl_line   : 1145
-    <82>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><85>: Abbrev Number: 5 (DW_TAG_member)
-    <86>   DW_AT_name        : (indirect string, offset: 0x1d0): win
-    <8a>   DW_AT_type        : <0x32e>
-    <8e>   DW_AT_decl_file   : 2
-    <8f>   DW_AT_decl_line   : 1146
-    <91>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><94>: Abbrev Number: 5 (DW_TAG_member)
-    <95>   DW_AT_name        : (indirect string, offset: 0x23e): vbi
-    <99>   DW_AT_type        : <0x422>
-    <9d>   DW_AT_decl_file   : 2
-    <9e>   DW_AT_decl_line   : 1147
-    <a0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><a3>: Abbrev Number: 5 (DW_TAG_member)
-    <a4>   DW_AT_name        : (indirect string, offset: 0x292): sliced
-    <a8>   DW_AT_type        : <0x4be>
-    <ac>   DW_AT_decl_file   : 2
-    <ad>   DW_AT_decl_line   : 1148
-    <af>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><b2>: Abbrev Number: 5 (DW_TAG_member)
-    <b3>   DW_AT_name        : (indirect string, offset: 0x2d2): sdr
-    <b7>   DW_AT_type        : <0x518>
-    <bb>   DW_AT_decl_file   : 2
-    <bc>   DW_AT_decl_line   : 1149
-    <be>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x2f1): meta
-    <c6>   DW_AT_type        : <0x55c>
-    <ca>   DW_AT_decl_file   : 2
-    <cb>   DW_AT_decl_line   : 1150
-    <cd>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><d0>: Abbrev Number: 5 (DW_TAG_member)
-    <d1>   DW_AT_name        : (indirect string, offset: 0x312): raw_data
-    <d5>   DW_AT_type        : <0x584>
-    <d9>   DW_AT_decl_file   : 2
-    <da>   DW_AT_decl_line   : 1151
-    <dc>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><df>: Abbrev Number: 0
- <2><e0>: Abbrev Number: 0
- <1><e1>: Abbrev Number: 3 (DW_TAG_typedef)
-    <e2>   DW_AT_type        : <0xec>
-    <e6>   DW_AT_name        : (indirect string, offset: 0xba): __u32
-    <ea>   DW_AT_decl_file   : 1
-    <eb>   DW_AT_decl_line   : 28
- <1><ec>: Abbrev Number: 7 (DW_TAG_base_type)
-    <ed>   DW_AT_name        : (indirect string, offset: 0xad): unsigned int
-    <f1>   DW_AT_encoding    : 7	(unsigned)
-    <f2>   DW_AT_byte_size   : 4
- <1><f3>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <f4>   DW_AT_name        : (indirect string, offset: 0x13d): v4l2_pix_format
-    <f8>   DW_AT_byte_size   : 48
-    <f9>   DW_AT_decl_file   : 2
-    <fa>   DW_AT_decl_line   : 182
- <2><fb>: Abbrev Number: 9 (DW_TAG_member)
-    <fc>   DW_AT_name        : (indirect string, offset: 0xc8): width
-    <100>   DW_AT_type        : <0xe1>
-    <104>   DW_AT_decl_file   : 2
-    <105>   DW_AT_decl_line   : 183
-    <106>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><109>: Abbrev Number: 9 (DW_TAG_member)
-    <10a>   DW_AT_name        : (indirect string, offset: 0xce): height
-    <10e>   DW_AT_type        : <0xe1>
-    <112>   DW_AT_decl_file   : 2
-    <113>   DW_AT_decl_line   : 184
-    <114>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><117>: Abbrev Number: 9 (DW_TAG_member)
-    <118>   DW_AT_name        : (indirect string, offset: 0xd5): pixelformat
-    <11c>   DW_AT_type        : <0xe1>
-    <120>   DW_AT_decl_file   : 2
-    <121>   DW_AT_decl_line   : 185
-    <122>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><125>: Abbrev Number: 9 (DW_TAG_member)
-    <126>   DW_AT_name        : (indirect string, offset: 0xe1): field
-    <12a>   DW_AT_type        : <0xe1>
-    <12e>   DW_AT_decl_file   : 2
-    <12f>   DW_AT_decl_line   : 186
-    <130>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><133>: Abbrev Number: 9 (DW_TAG_member)
-    <134>   DW_AT_name        : (indirect string, offset: 0xe7): bytesperline
-    <138>   DW_AT_type        : <0xe1>
-    <13c>   DW_AT_decl_file   : 2
-    <13d>   DW_AT_decl_line   : 187
-    <13e>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><141>: Abbrev Number: 9 (DW_TAG_member)
-    <142>   DW_AT_name        : (indirect string, offset: 0xf4): sizeimage
-    <146>   DW_AT_type        : <0xe1>
-    <14a>   DW_AT_decl_file   : 2
-    <14b>   DW_AT_decl_line   : 188
-    <14c>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><14f>: Abbrev Number: 9 (DW_TAG_member)
-    <150>   DW_AT_name        : (indirect string, offset: 0xfe): colorspace
-    <154>   DW_AT_type        : <0xe1>
-    <158>   DW_AT_decl_file   : 2
-    <159>   DW_AT_decl_line   : 189
-    <15a>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><15d>: Abbrev Number: 9 (DW_TAG_member)
-    <15e>   DW_AT_name        : (indirect string, offset: 0x109): priv
-    <162>   DW_AT_type        : <0xe1>
-    <166>   DW_AT_decl_file   : 2
-    <167>   DW_AT_decl_line   : 190
-    <168>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><16b>: Abbrev Number: 9 (DW_TAG_member)
-    <16c>   DW_AT_name        : (indirect string, offset: 0x10e): flags
-    <170>   DW_AT_type        : <0xe1>
-    <174>   DW_AT_decl_file   : 2
-    <175>   DW_AT_decl_line   : 191
-    <176>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><179>: Abbrev Number: 10 (DW_TAG_member)
-    <17a>   DW_AT_type        : <0x183>
-    <17e>   DW_AT_decl_file   : 2
-    <17f>   DW_AT_decl_line   : 192
-    <180>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><183>: Abbrev Number: 11 (DW_TAG_union_type)
-    <184>   DW_AT_byte_size   : 4
-    <185>   DW_AT_decl_file   : 2
-    <186>   DW_AT_decl_line   : 192
- <3><187>: Abbrev Number: 9 (DW_TAG_member)
-    <188>   DW_AT_name        : (indirect string, offset: 0x114): ycbcr_enc
-    <18c>   DW_AT_type        : <0xe1>
-    <190>   DW_AT_decl_file   : 2
-    <191>   DW_AT_decl_line   : 193
-    <192>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><195>: Abbrev Number: 9 (DW_TAG_member)
-    <196>   DW_AT_name        : (indirect string, offset: 0x11e): hsv_enc
-    <19a>   DW_AT_type        : <0xe1>
-    <19e>   DW_AT_decl_file   : 2
-    <19f>   DW_AT_decl_line   : 194
-    <1a0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><1a3>: Abbrev Number: 0
- <2><1a4>: Abbrev Number: 9 (DW_TAG_member)
-    <1a5>   DW_AT_name        : (indirect string, offset: 0x126): quantization
-    <1a9>   DW_AT_type        : <0xe1>
-    <1ad>   DW_AT_decl_file   : 2
-    <1ae>   DW_AT_decl_line   : 196
-    <1af>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><1b2>: Abbrev Number: 9 (DW_TAG_member)
-    <1b3>   DW_AT_name        : (indirect string, offset: 0x133): xfer_func
-    <1b7>   DW_AT_type        : <0xe1>
-    <1bb>   DW_AT_decl_file   : 2
-    <1bc>   DW_AT_decl_line   : 197
-    <1bd>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><1c0>: Abbrev Number: 0
- <1><1c1>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <1c2>   DW_AT_name        : (indirect string, offset: 0x1b9): v4l2_pix_format_mplane
-    <1c6>   DW_AT_byte_size   : 192
-    <1c7>   DW_AT_decl_file   : 2
-    <1c8>   DW_AT_decl_line   : 1115
- <2><1ca>: Abbrev Number: 5 (DW_TAG_member)
-    <1cb>   DW_AT_name        : (indirect string, offset: 0xc8): width
-    <1cf>   DW_AT_type        : <0xe1>
-    <1d3>   DW_AT_decl_file   : 2
-    <1d4>   DW_AT_decl_line   : 1116
-    <1d6>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><1d9>: Abbrev Number: 5 (DW_TAG_member)
-    <1da>   DW_AT_name        : (indirect string, offset: 0xce): height
-    <1de>   DW_AT_type        : <0xe1>
-    <1e2>   DW_AT_decl_file   : 2
-    <1e3>   DW_AT_decl_line   : 1117
-    <1e5>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><1e8>: Abbrev Number: 5 (DW_TAG_member)
-    <1e9>   DW_AT_name        : (indirect string, offset: 0xd5): pixelformat
-    <1ed>   DW_AT_type        : <0xe1>
-    <1f1>   DW_AT_decl_file   : 2
-    <1f2>   DW_AT_decl_line   : 1118
-    <1f4>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><1f7>: Abbrev Number: 5 (DW_TAG_member)
-    <1f8>   DW_AT_name        : (indirect string, offset: 0xe1): field
-    <1fc>   DW_AT_type        : <0xe1>
-    <200>   DW_AT_decl_file   : 2
-    <201>   DW_AT_decl_line   : 1119
-    <203>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><206>: Abbrev Number: 5 (DW_TAG_member)
-    <207>   DW_AT_name        : (indirect string, offset: 0xfe): colorspace
-    <20b>   DW_AT_type        : <0xe1>
-    <20f>   DW_AT_decl_file   : 2
-    <210>   DW_AT_decl_line   : 1120
-    <212>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><215>: Abbrev Number: 5 (DW_TAG_member)
-    <216>   DW_AT_name        : (indirect string, offset: 0x154): plane_fmt
-    <21a>   DW_AT_type        : <0x2a5>
-    <21e>   DW_AT_decl_file   : 2
-    <21f>   DW_AT_decl_line   : 1121
-    <221>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><224>: Abbrev Number: 5 (DW_TAG_member)
-    <225>   DW_AT_name        : (indirect string, offset: 0x19b): num_planes
-    <229>   DW_AT_type        : <0x30f>
-    <22d>   DW_AT_decl_file   : 2
-    <22e>   DW_AT_decl_line   : 1122
-    <230>   DW_AT_data_member_location: 3 byte block: 23 b4 1 	(DW_OP_plus_uconst: 180)
- <2><234>: Abbrev Number: 5 (DW_TAG_member)
-    <235>   DW_AT_name        : (indirect string, offset: 0x10e): flags
-    <239>   DW_AT_type        : <0x30f>
-    <23d>   DW_AT_decl_file   : 2
-    <23e>   DW_AT_decl_line   : 1123
-    <240>   DW_AT_data_member_location: 3 byte block: 23 b5 1 	(DW_OP_plus_uconst: 181)
- <2><244>: Abbrev Number: 12 (DW_TAG_member)
-    <245>   DW_AT_type        : <0x250>
-    <249>   DW_AT_decl_file   : 2
-    <24a>   DW_AT_decl_line   : 1124
-    <24c>   DW_AT_data_member_location: 3 byte block: 23 b6 1 	(DW_OP_plus_uconst: 182)
- <2><250>: Abbrev Number: 6 (DW_TAG_union_type)
-    <251>   DW_AT_byte_size   : 1
-    <252>   DW_AT_decl_file   : 2
-    <253>   DW_AT_decl_line   : 1124
- <3><255>: Abbrev Number: 5 (DW_TAG_member)
-    <256>   DW_AT_name        : (indirect string, offset: 0x114): ycbcr_enc
-    <25a>   DW_AT_type        : <0x30f>
-    <25e>   DW_AT_decl_file   : 2
-    <25f>   DW_AT_decl_line   : 1125
-    <261>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><264>: Abbrev Number: 5 (DW_TAG_member)
-    <265>   DW_AT_name        : (indirect string, offset: 0x11e): hsv_enc
-    <269>   DW_AT_type        : <0x30f>
-    <26d>   DW_AT_decl_file   : 2
-    <26e>   DW_AT_decl_line   : 1126
-    <270>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><273>: Abbrev Number: 0
- <2><274>: Abbrev Number: 5 (DW_TAG_member)
-    <275>   DW_AT_name        : (indirect string, offset: 0x126): quantization
-    <279>   DW_AT_type        : <0x30f>
-    <27d>   DW_AT_decl_file   : 2
-    <27e>   DW_AT_decl_line   : 1128
-    <280>   DW_AT_data_member_location: 3 byte block: 23 b7 1 	(DW_OP_plus_uconst: 183)
- <2><284>: Abbrev Number: 5 (DW_TAG_member)
-    <285>   DW_AT_name        : (indirect string, offset: 0x133): xfer_func
-    <289>   DW_AT_type        : <0x30f>
-    <28d>   DW_AT_decl_file   : 2
-    <28e>   DW_AT_decl_line   : 1129
-    <290>   DW_AT_data_member_location: 3 byte block: 23 b8 1 	(DW_OP_plus_uconst: 184)
- <2><294>: Abbrev Number: 5 (DW_TAG_member)
-    <295>   DW_AT_name        : (indirect string, offset: 0x15e): reserved
-    <299>   DW_AT_type        : <0x321>
-    <29d>   DW_AT_decl_file   : 2
-    <29e>   DW_AT_decl_line   : 1130
-    <2a0>   DW_AT_data_member_location: 3 byte block: 23 b9 1 	(DW_OP_plus_uconst: 185)
- <2><2a4>: Abbrev Number: 0
- <1><2a5>: Abbrev Number: 13 (DW_TAG_array_type)
-    <2a6>   DW_AT_type        : <0x2b2>
- <2><2aa>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <2ab>   DW_AT_type        : <0x308>
-    <2af>   DW_AT_lower_bound : 0
-    <2b0>   DW_AT_count       : 8
- <2><2b1>: Abbrev Number: 0
- <1><2b2>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <2b3>   DW_AT_name        : (indirect string, offset: 0x185): v4l2_plane_pix_format
-    <2b7>   DW_AT_byte_size   : 20
-    <2b8>   DW_AT_decl_file   : 2
-    <2b9>   DW_AT_decl_line   : 1110
- <2><2bb>: Abbrev Number: 5 (DW_TAG_member)
-    <2bc>   DW_AT_name        : (indirect string, offset: 0xf4): sizeimage
-    <2c0>   DW_AT_type        : <0xe1>
-    <2c4>   DW_AT_decl_file   : 2
-    <2c5>   DW_AT_decl_line   : 1111
-    <2c7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><2ca>: Abbrev Number: 5 (DW_TAG_member)
-    <2cb>   DW_AT_name        : (indirect string, offset: 0xe7): bytesperline
-    <2cf>   DW_AT_type        : <0xe1>
-    <2d3>   DW_AT_decl_file   : 2
-    <2d4>   DW_AT_decl_line   : 1112
-    <2d6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><2d9>: Abbrev Number: 5 (DW_TAG_member)
-    <2da>   DW_AT_name        : (indirect string, offset: 0x15e): reserved
-    <2de>   DW_AT_type        : <0x2e9>
-    <2e2>   DW_AT_decl_file   : 2
-    <2e3>   DW_AT_decl_line   : 1113
-    <2e5>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><2e8>: Abbrev Number: 0
- <1><2e9>: Abbrev Number: 13 (DW_TAG_array_type)
-    <2ea>   DW_AT_type        : <0x2f6>
- <2><2ee>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <2ef>   DW_AT_type        : <0x308>
-    <2f3>   DW_AT_lower_bound : 0
-    <2f4>   DW_AT_count       : 6
- <2><2f5>: Abbrev Number: 0
- <1><2f6>: Abbrev Number: 3 (DW_TAG_typedef)
-    <2f7>   DW_AT_type        : <0x301>
-    <2fb>   DW_AT_name        : (indirect string, offset: 0x176): __u16
-    <2ff>   DW_AT_decl_file   : 1
-    <300>   DW_AT_decl_line   : 26
- <1><301>: Abbrev Number: 7 (DW_TAG_base_type)
-    <302>   DW_AT_name        : (indirect string, offset: 0x167): unsigned short
-    <306>   DW_AT_encoding    : 7	(unsigned)
-    <307>   DW_AT_byte_size   : 2
- <1><308>: Abbrev Number: 15 (DW_TAG_base_type)
-    <309>   DW_AT_name        : (indirect string, offset: 0x17c): sizetype
-    <30d>   DW_AT_byte_size   : 8
-    <30e>   DW_AT_encoding    : 7	(unsigned)
- <1><30f>: Abbrev Number: 3 (DW_TAG_typedef)
-    <310>   DW_AT_type        : <0x31a>
-    <314>   DW_AT_name        : (indirect string, offset: 0x1b4): __u8
-    <318>   DW_AT_decl_file   : 1
-    <319>   DW_AT_decl_line   : 24
- <1><31a>: Abbrev Number: 7 (DW_TAG_base_type)
-    <31b>   DW_AT_name        : (indirect string, offset: 0x1a6): unsigned char
-    <31f>   DW_AT_encoding    : 8	(unsigned char)
-    <320>   DW_AT_byte_size   : 1
- <1><321>: Abbrev Number: 13 (DW_TAG_array_type)
-    <322>   DW_AT_type        : <0x30f>
- <2><326>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <327>   DW_AT_type        : <0x308>
-    <32b>   DW_AT_lower_bound : 0
-    <32c>   DW_AT_count       : 7
- <2><32d>: Abbrev Number: 0
- <1><32e>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <32f>   DW_AT_name        : (indirect string, offset: 0x232): v4l2_window
-    <333>   DW_AT_byte_size   : 40
-    <334>   DW_AT_decl_file   : 2
-    <335>   DW_AT_decl_line   : 547
- <2><337>: Abbrev Number: 5 (DW_TAG_member)
-    <338>   DW_AT_name        : (indirect string, offset: 0x1d4): w
-    <33c>   DW_AT_type        : <0x3a1>
-    <340>   DW_AT_decl_file   : 2
-    <341>   DW_AT_decl_line   : 548
-    <343>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><346>: Abbrev Number: 5 (DW_TAG_member)
-    <347>   DW_AT_name        : (indirect string, offset: 0xe1): field
-    <34b>   DW_AT_type        : <0xe1>
-    <34f>   DW_AT_decl_file   : 2
-    <350>   DW_AT_decl_line   : 549
-    <352>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><355>: Abbrev Number: 5 (DW_TAG_member)
-    <356>   DW_AT_name        : (indirect string, offset: 0x1f3): chromakey
-    <35a>   DW_AT_type        : <0xe1>
-    <35e>   DW_AT_decl_file   : 2
-    <35f>   DW_AT_decl_line   : 550
-    <361>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><364>: Abbrev Number: 5 (DW_TAG_member)
-    <365>   DW_AT_name        : (indirect string, offset: 0x1fd): clips
-    <369>   DW_AT_type        : <0x3f4>
-    <36d>   DW_AT_decl_file   : 2
-    <36e>   DW_AT_decl_line   : 551
-    <370>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><373>: Abbrev Number: 5 (DW_TAG_member)
-    <374>   DW_AT_name        : (indirect string, offset: 0x214): clipcount
-    <378>   DW_AT_type        : <0xe1>
-    <37c>   DW_AT_decl_file   : 2
-    <37d>   DW_AT_decl_line   : 552
-    <37f>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><382>: Abbrev Number: 5 (DW_TAG_member)
-    <383>   DW_AT_name        : (indirect string, offset: 0x21e): bitmap
-    <387>   DW_AT_type        : <0x421>
-    <38b>   DW_AT_decl_file   : 2
-    <38c>   DW_AT_decl_line   : 553
-    <38e>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><391>: Abbrev Number: 5 (DW_TAG_member)
-    <392>   DW_AT_name        : (indirect string, offset: 0x225): global_alpha
-    <396>   DW_AT_type        : <0x30f>
-    <39a>   DW_AT_decl_file   : 2
-    <39b>   DW_AT_decl_line   : 554
-    <39d>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><3a0>: Abbrev Number: 0
- <1><3a1>: Abbrev Number: 8 (DW_TAG_structure_type)
-    <3a2>   DW_AT_name        : (indirect string, offset: 0x1e9): v4l2_rect
-    <3a6>   DW_AT_byte_size   : 16
-    <3a7>   DW_AT_decl_file   : 2
-    <3a8>   DW_AT_decl_line   : 135
- <2><3a9>: Abbrev Number: 9 (DW_TAG_member)
-    <3aa>   DW_AT_name        : (indirect string, offset: 0x1d6): left
-    <3ae>   DW_AT_type        : <0x3e2>
-    <3b2>   DW_AT_decl_file   : 2
-    <3b3>   DW_AT_decl_line   : 136
-    <3b4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><3b7>: Abbrev Number: 9 (DW_TAG_member)
-    <3b8>   DW_AT_name        : (indirect string, offset: 0x1e5): top
-    <3bc>   DW_AT_type        : <0x3e2>
-    <3c0>   DW_AT_decl_file   : 2
-    <3c1>   DW_AT_decl_line   : 137
-    <3c2>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><3c5>: Abbrev Number: 9 (DW_TAG_member)
-    <3c6>   DW_AT_name        : (indirect string, offset: 0xc8): width
-    <3ca>   DW_AT_type        : <0xe1>
-    <3ce>   DW_AT_decl_file   : 2
-    <3cf>   DW_AT_decl_line   : 138
-    <3d0>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><3d3>: Abbrev Number: 9 (DW_TAG_member)
-    <3d4>   DW_AT_name        : (indirect string, offset: 0xce): height
-    <3d8>   DW_AT_type        : <0xe1>
-    <3dc>   DW_AT_decl_file   : 2
-    <3dd>   DW_AT_decl_line   : 139
-    <3de>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><3e1>: Abbrev Number: 0
- <1><3e2>: Abbrev Number: 3 (DW_TAG_typedef)
-    <3e3>   DW_AT_type        : <0x3ed>
-    <3e7>   DW_AT_name        : (indirect string, offset: 0x1df): __s32
-    <3eb>   DW_AT_decl_file   : 1
-    <3ec>   DW_AT_decl_line   : 27
- <1><3ed>: Abbrev Number: 7 (DW_TAG_base_type)
-    <3ee>   DW_AT_name        : (indirect string, offset: 0x1db): int
-    <3f2>   DW_AT_encoding    : 5	(signed)
-    <3f3>   DW_AT_byte_size   : 4
- <1><3f4>: Abbrev Number: 16 (DW_TAG_pointer_type)
-    <3f5>   DW_AT_type        : <0x3f9>
- <1><3f9>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3fa>   DW_AT_name        : (indirect string, offset: 0x20a): v4l2_clip
-    <3fe>   DW_AT_byte_size   : 20
-    <3ff>   DW_AT_decl_file   : 2
-    <400>   DW_AT_decl_line   : 543
- <2><402>: Abbrev Number: 5 (DW_TAG_member)
-    <403>   DW_AT_name        : (indirect string, offset: 0x203): c
-    <407>   DW_AT_type        : <0x3a1>
-    <40b>   DW_AT_decl_file   : 2
-    <40c>   DW_AT_decl_line   : 544
-    <40e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><411>: Abbrev Number: 5 (DW_TAG_member)
-    <412>   DW_AT_name        : (indirect string, offset: 0x205): next
-    <416>   DW_AT_type        : <0x3f4>
-    <41a>   DW_AT_decl_file   : 2
-    <41b>   DW_AT_decl_line   : 545
-    <41d>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><420>: Abbrev Number: 0
- <1><421>: Abbrev Number: 17 (DW_TAG_pointer_type)
- <1><422>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <423>   DW_AT_name        : (indirect string, offset: 0x282): v4l2_vbi_format
-    <427>   DW_AT_byte_size   : 44
-    <428>   DW_AT_decl_file   : 2
-    <429>   DW_AT_decl_line   : 1045
- <2><42b>: Abbrev Number: 5 (DW_TAG_member)
-    <42c>   DW_AT_name        : (indirect string, offset: 0x242): sampling_rate
-    <430>   DW_AT_type        : <0xe1>
-    <434>   DW_AT_decl_file   : 2
-    <435>   DW_AT_decl_line   : 1046
-    <437>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><43a>: Abbrev Number: 5 (DW_TAG_member)
-    <43b>   DW_AT_name        : (indirect string, offset: 0x250): offset
-    <43f>   DW_AT_type        : <0xe1>
-    <443>   DW_AT_decl_file   : 2
-    <444>   DW_AT_decl_line   : 1047
-    <446>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><449>: Abbrev Number: 5 (DW_TAG_member)
-    <44a>   DW_AT_name        : (indirect string, offset: 0x257): samples_per_line
-    <44e>   DW_AT_type        : <0xe1>
-    <452>   DW_AT_decl_file   : 2
-    <453>   DW_AT_decl_line   : 1048
-    <455>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><458>: Abbrev Number: 5 (DW_TAG_member)
-    <459>   DW_AT_name        : (indirect string, offset: 0x268): sample_format
-    <45d>   DW_AT_type        : <0xe1>
-    <461>   DW_AT_decl_file   : 2
-    <462>   DW_AT_decl_line   : 1049
-    <464>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><467>: Abbrev Number: 5 (DW_TAG_member)
-    <468>   DW_AT_name        : (indirect string, offset: 0x276): start
-    <46c>   DW_AT_type        : <0x4a4>
-    <470>   DW_AT_decl_file   : 2
-    <471>   DW_AT_decl_line   : 1050
-    <473>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><476>: Abbrev Number: 5 (DW_TAG_member)
-    <477>   DW_AT_name        : (indirect string, offset: 0x27c): count
-    <47b>   DW_AT_type        : <0x4b1>
-    <47f>   DW_AT_decl_file   : 2
-    <480>   DW_AT_decl_line   : 1051
-    <482>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><485>: Abbrev Number: 5 (DW_TAG_member)
-    <486>   DW_AT_name        : (indirect string, offset: 0x10e): flags
-    <48a>   DW_AT_type        : <0xe1>
-    <48e>   DW_AT_decl_file   : 2
-    <48f>   DW_AT_decl_line   : 1052
-    <491>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><494>: Abbrev Number: 5 (DW_TAG_member)
-    <495>   DW_AT_name        : (indirect string, offset: 0x15e): reserved
-    <499>   DW_AT_type        : <0x4b1>
-    <49d>   DW_AT_decl_file   : 2
-    <49e>   DW_AT_decl_line   : 1053
-    <4a0>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><4a3>: Abbrev Number: 0
- <1><4a4>: Abbrev Number: 13 (DW_TAG_array_type)
-    <4a5>   DW_AT_type        : <0x3e2>
- <2><4a9>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <4aa>   DW_AT_type        : <0x308>
-    <4ae>   DW_AT_lower_bound : 0
-    <4af>   DW_AT_count       : 2
- <2><4b0>: Abbrev Number: 0
- <1><4b1>: Abbrev Number: 13 (DW_TAG_array_type)
-    <4b2>   DW_AT_type        : <0xe1>
- <2><4b6>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <4b7>   DW_AT_type        : <0x308>
-    <4bb>   DW_AT_lower_bound : 0
-    <4bc>   DW_AT_count       : 2
- <2><4bd>: Abbrev Number: 0
- <1><4be>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <4bf>   DW_AT_name        : (indirect string, offset: 0x2bb): v4l2_sliced_vbi_format
-    <4c3>   DW_AT_byte_size   : 112
-    <4c4>   DW_AT_decl_file   : 2
-    <4c5>   DW_AT_decl_line   : 1061
- <2><4c7>: Abbrev Number: 5 (DW_TAG_member)
-    <4c8>   DW_AT_name        : (indirect string, offset: 0x299): service_set
-    <4cc>   DW_AT_type        : <0x2f6>
-    <4d0>   DW_AT_decl_file   : 2
-    <4d1>   DW_AT_decl_line   : 1062
-    <4d3>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><4d6>: Abbrev Number: 5 (DW_TAG_member)
-    <4d7>   DW_AT_name        : (indirect string, offset: 0x2a5): service_lines
-    <4db>   DW_AT_type        : <0x504>
-    <4df>   DW_AT_decl_file   : 2
-    <4e0>   DW_AT_decl_line   : 1063
-    <4e2>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
- <2><4e5>: Abbrev Number: 5 (DW_TAG_member)
-    <4e6>   DW_AT_name        : (indirect string, offset: 0x2b3): io_size
-    <4ea>   DW_AT_type        : <0xe1>
-    <4ee>   DW_AT_decl_file   : 2
-    <4ef>   DW_AT_decl_line   : 1064
-    <4f1>   DW_AT_data_member_location: 2 byte block: 23 64 	(DW_OP_plus_uconst: 100)
- <2><4f4>: Abbrev Number: 5 (DW_TAG_member)
-    <4f5>   DW_AT_name        : (indirect string, offset: 0x15e): reserved
-    <4f9>   DW_AT_type        : <0x4b1>
-    <4fd>   DW_AT_decl_file   : 2
-    <4fe>   DW_AT_decl_line   : 1065
-    <500>   DW_AT_data_member_location: 2 byte block: 23 68 	(DW_OP_plus_uconst: 104)
- <2><503>: Abbrev Number: 0
- <1><504>: Abbrev Number: 13 (DW_TAG_array_type)
-    <505>   DW_AT_type        : <0x2f6>
- <2><509>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <50a>   DW_AT_type        : <0x308>
-    <50e>   DW_AT_lower_bound : 0
-    <50f>   DW_AT_count       : 2
- <2><510>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <511>   DW_AT_type        : <0x308>
-    <515>   DW_AT_lower_bound : 0
-    <516>   DW_AT_count       : 24
- <2><517>: Abbrev Number: 0
- <1><518>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <519>   DW_AT_name        : (indirect string, offset: 0x2e1): v4l2_sdr_format
-    <51d>   DW_AT_byte_size   : 32
-    <51e>   DW_AT_decl_file   : 2
-    <51f>   DW_AT_decl_line   : 1132
- <2><521>: Abbrev Number: 5 (DW_TAG_member)
-    <522>   DW_AT_name        : (indirect string, offset: 0xd5): pixelformat
-    <526>   DW_AT_type        : <0xe1>
-    <52a>   DW_AT_decl_file   : 2
-    <52b>   DW_AT_decl_line   : 1133
-    <52d>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><530>: Abbrev Number: 5 (DW_TAG_member)
-    <531>   DW_AT_name        : (indirect string, offset: 0x2d6): buffersize
-    <535>   DW_AT_type        : <0xe1>
-    <539>   DW_AT_decl_file   : 2
-    <53a>   DW_AT_decl_line   : 1134
-    <53c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><53f>: Abbrev Number: 5 (DW_TAG_member)
-    <540>   DW_AT_name        : (indirect string, offset: 0x15e): reserved
-    <544>   DW_AT_type        : <0x54f>
-    <548>   DW_AT_decl_file   : 2
-    <549>   DW_AT_decl_line   : 1135
-    <54b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><54e>: Abbrev Number: 0
- <1><54f>: Abbrev Number: 13 (DW_TAG_array_type)
-    <550>   DW_AT_type        : <0x30f>
- <2><554>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <555>   DW_AT_type        : <0x308>
-    <559>   DW_AT_lower_bound : 0
-    <55a>   DW_AT_count       : 24
- <2><55b>: Abbrev Number: 0
- <1><55c>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <55d>   DW_AT_name        : (indirect string, offset: 0x301): v4l2_meta_format
-    <561>   DW_AT_byte_size   : 8
-    <562>   DW_AT_decl_file   : 2
-    <563>   DW_AT_decl_line   : 1137
- <2><565>: Abbrev Number: 5 (DW_TAG_member)
-    <566>   DW_AT_name        : (indirect string, offset: 0x2f6): dataformat
-    <56a>   DW_AT_type        : <0xe1>
-    <56e>   DW_AT_decl_file   : 2
-    <56f>   DW_AT_decl_line   : 1138
-    <571>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><574>: Abbrev Number: 5 (DW_TAG_member)
-    <575>   DW_AT_name        : (indirect string, offset: 0x2d6): buffersize
-    <579>   DW_AT_type        : <0xe1>
-    <57d>   DW_AT_decl_file   : 2
-    <57e>   DW_AT_decl_line   : 1139
-    <580>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><583>: Abbrev Number: 0
- <1><584>: Abbrev Number: 13 (DW_TAG_array_type)
-    <585>   DW_AT_type        : <0x30f>
- <2><589>: Abbrev Number: 14 (DW_TAG_subrange_type)
-    <58a>   DW_AT_type        : <0x308>
-    <58e>   DW_AT_lower_bound : 0
-    <58f>   DW_AT_count       : 200
- <2><590>: Abbrev Number: 0
- <1><591>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x126): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 53
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x3f1): struct_v4l2_format
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 48
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x3e5): v4l2_format
+    <41>   DW_AT_byte_size   : 204
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 1148
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x172): type
+    <4a>   DW_AT_type        : <0xe2>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 1149
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x18a): fmt
+    <59>   DW_AT_type        : <0x63>
+    <5d>   DW_AT_decl_file   : 2
+    <5e>   DW_AT_decl_line   : 1159
+    <60>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><63>: Abbrev Number: 6 (DW_TAG_union_type)
+    <64>   DW_AT_byte_size   : 200
+    <65>   DW_AT_decl_file   : 2
+    <66>   DW_AT_decl_line   : 1150
+ <3><68>: Abbrev Number: 5 (DW_TAG_member)
+    <69>   DW_AT_name        : (indirect string, offset: 0x18e): pix
+    <6d>   DW_AT_type        : <0xf4>
+    <71>   DW_AT_decl_file   : 2
+    <72>   DW_AT_decl_line   : 1151
+    <74>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><77>: Abbrev Number: 5 (DW_TAG_member)
+    <78>   DW_AT_name        : (indirect string, offset: 0x217): pix_mp
+    <7c>   DW_AT_type        : <0x1c2>
+    <80>   DW_AT_decl_file   : 2
+    <81>   DW_AT_decl_line   : 1152
+    <83>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><86>: Abbrev Number: 5 (DW_TAG_member)
+    <87>   DW_AT_name        : (indirect string, offset: 0x29a): win
+    <8b>   DW_AT_type        : <0x32f>
+    <8f>   DW_AT_decl_file   : 2
+    <90>   DW_AT_decl_line   : 1153
+    <92>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><95>: Abbrev Number: 5 (DW_TAG_member)
+    <96>   DW_AT_name        : (indirect string, offset: 0x308): vbi
+    <9a>   DW_AT_type        : <0x423>
+    <9e>   DW_AT_decl_file   : 2
+    <9f>   DW_AT_decl_line   : 1154
+    <a1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><a4>: Abbrev Number: 5 (DW_TAG_member)
+    <a5>   DW_AT_name        : (indirect string, offset: 0x35c): sliced
+    <a9>   DW_AT_type        : <0x4bf>
+    <ad>   DW_AT_decl_file   : 2
+    <ae>   DW_AT_decl_line   : 1155
+    <b0>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><b3>: Abbrev Number: 5 (DW_TAG_member)
+    <b4>   DW_AT_name        : (indirect string, offset: 0x39c): sdr
+    <b8>   DW_AT_type        : <0x519>
+    <bc>   DW_AT_decl_file   : 2
+    <bd>   DW_AT_decl_line   : 1156
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x3bb): meta
+    <c7>   DW_AT_type        : <0x55d>
+    <cb>   DW_AT_decl_file   : 2
+    <cc>   DW_AT_decl_line   : 1157
+    <ce>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><d1>: Abbrev Number: 5 (DW_TAG_member)
+    <d2>   DW_AT_name        : (indirect string, offset: 0x3dc): raw_data
+    <d6>   DW_AT_type        : <0x585>
+    <da>   DW_AT_decl_file   : 2
+    <db>   DW_AT_decl_line   : 1158
+    <dd>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><e0>: Abbrev Number: 0
+ <2><e1>: Abbrev Number: 0
+ <1><e2>: Abbrev Number: 3 (DW_TAG_typedef)
+    <e3>   DW_AT_type        : <0xed>
+    <e7>   DW_AT_name        : (indirect string, offset: 0x184): __u32
+    <eb>   DW_AT_decl_file   : 1
+    <ec>   DW_AT_decl_line   : 28
+ <1><ed>: Abbrev Number: 7 (DW_TAG_base_type)
+    <ee>   DW_AT_name        : (indirect string, offset: 0x177): unsigned int
+    <f2>   DW_AT_encoding    : 7	(unsigned)
+    <f3>   DW_AT_byte_size   : 4
+ <1><f4>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <f5>   DW_AT_name        : (indirect string, offset: 0x207): v4l2_pix_format
+    <f9>   DW_AT_byte_size   : 48
+    <fa>   DW_AT_decl_file   : 2
+    <fb>   DW_AT_decl_line   : 182
+ <2><fc>: Abbrev Number: 9 (DW_TAG_member)
+    <fd>   DW_AT_name        : (indirect string, offset: 0x192): width
+    <101>   DW_AT_type        : <0xe2>
+    <105>   DW_AT_decl_file   : 2
+    <106>   DW_AT_decl_line   : 183
+    <107>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><10a>: Abbrev Number: 9 (DW_TAG_member)
+    <10b>   DW_AT_name        : (indirect string, offset: 0x198): height
+    <10f>   DW_AT_type        : <0xe2>
+    <113>   DW_AT_decl_file   : 2
+    <114>   DW_AT_decl_line   : 184
+    <115>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><118>: Abbrev Number: 9 (DW_TAG_member)
+    <119>   DW_AT_name        : (indirect string, offset: 0x19f): pixelformat
+    <11d>   DW_AT_type        : <0xe2>
+    <121>   DW_AT_decl_file   : 2
+    <122>   DW_AT_decl_line   : 185
+    <123>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><126>: Abbrev Number: 9 (DW_TAG_member)
+    <127>   DW_AT_name        : (indirect string, offset: 0x1ab): field
+    <12b>   DW_AT_type        : <0xe2>
+    <12f>   DW_AT_decl_file   : 2
+    <130>   DW_AT_decl_line   : 186
+    <131>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><134>: Abbrev Number: 9 (DW_TAG_member)
+    <135>   DW_AT_name        : (indirect string, offset: 0x1b1): bytesperline
+    <139>   DW_AT_type        : <0xe2>
+    <13d>   DW_AT_decl_file   : 2
+    <13e>   DW_AT_decl_line   : 187
+    <13f>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><142>: Abbrev Number: 9 (DW_TAG_member)
+    <143>   DW_AT_name        : (indirect string, offset: 0x1be): sizeimage
+    <147>   DW_AT_type        : <0xe2>
+    <14b>   DW_AT_decl_file   : 2
+    <14c>   DW_AT_decl_line   : 188
+    <14d>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><150>: Abbrev Number: 9 (DW_TAG_member)
+    <151>   DW_AT_name        : (indirect string, offset: 0x1c8): colorspace
+    <155>   DW_AT_type        : <0xe2>
+    <159>   DW_AT_decl_file   : 2
+    <15a>   DW_AT_decl_line   : 189
+    <15b>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><15e>: Abbrev Number: 9 (DW_TAG_member)
+    <15f>   DW_AT_name        : (indirect string, offset: 0x1d3): priv
+    <163>   DW_AT_type        : <0xe2>
+    <167>   DW_AT_decl_file   : 2
+    <168>   DW_AT_decl_line   : 190
+    <169>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><16c>: Abbrev Number: 9 (DW_TAG_member)
+    <16d>   DW_AT_name        : (indirect string, offset: 0x1d8): flags
+    <171>   DW_AT_type        : <0xe2>
+    <175>   DW_AT_decl_file   : 2
+    <176>   DW_AT_decl_line   : 191
+    <177>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><17a>: Abbrev Number: 10 (DW_TAG_member)
+    <17b>   DW_AT_type        : <0x184>
+    <17f>   DW_AT_decl_file   : 2
+    <180>   DW_AT_decl_line   : 192
+    <181>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><184>: Abbrev Number: 11 (DW_TAG_union_type)
+    <185>   DW_AT_byte_size   : 4
+    <186>   DW_AT_decl_file   : 2
+    <187>   DW_AT_decl_line   : 192
+ <3><188>: Abbrev Number: 9 (DW_TAG_member)
+    <189>   DW_AT_name        : (indirect string, offset: 0x1de): ycbcr_enc
+    <18d>   DW_AT_type        : <0xe2>
+    <191>   DW_AT_decl_file   : 2
+    <192>   DW_AT_decl_line   : 193
+    <193>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><196>: Abbrev Number: 9 (DW_TAG_member)
+    <197>   DW_AT_name        : (indirect string, offset: 0x1e8): hsv_enc
+    <19b>   DW_AT_type        : <0xe2>
+    <19f>   DW_AT_decl_file   : 2
+    <1a0>   DW_AT_decl_line   : 194
+    <1a1>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><1a4>: Abbrev Number: 0
+ <2><1a5>: Abbrev Number: 9 (DW_TAG_member)
+    <1a6>   DW_AT_name        : (indirect string, offset: 0x1f0): quantization
+    <1aa>   DW_AT_type        : <0xe2>
+    <1ae>   DW_AT_decl_file   : 2
+    <1af>   DW_AT_decl_line   : 196
+    <1b0>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><1b3>: Abbrev Number: 9 (DW_TAG_member)
+    <1b4>   DW_AT_name        : (indirect string, offset: 0x1fd): xfer_func
+    <1b8>   DW_AT_type        : <0xe2>
+    <1bc>   DW_AT_decl_file   : 2
+    <1bd>   DW_AT_decl_line   : 197
+    <1be>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><1c1>: Abbrev Number: 0
+ <1><1c2>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <1c3>   DW_AT_name        : (indirect string, offset: 0x283): v4l2_pix_format_mplane
+    <1c7>   DW_AT_byte_size   : 192
+    <1c8>   DW_AT_decl_file   : 2
+    <1c9>   DW_AT_decl_line   : 1122
+ <2><1cb>: Abbrev Number: 5 (DW_TAG_member)
+    <1cc>   DW_AT_name        : (indirect string, offset: 0x192): width
+    <1d0>   DW_AT_type        : <0xe2>
+    <1d4>   DW_AT_decl_file   : 2
+    <1d5>   DW_AT_decl_line   : 1123
+    <1d7>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><1da>: Abbrev Number: 5 (DW_TAG_member)
+    <1db>   DW_AT_name        : (indirect string, offset: 0x198): height
+    <1df>   DW_AT_type        : <0xe2>
+    <1e3>   DW_AT_decl_file   : 2
+    <1e4>   DW_AT_decl_line   : 1124
+    <1e6>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><1e9>: Abbrev Number: 5 (DW_TAG_member)
+    <1ea>   DW_AT_name        : (indirect string, offset: 0x19f): pixelformat
+    <1ee>   DW_AT_type        : <0xe2>
+    <1f2>   DW_AT_decl_file   : 2
+    <1f3>   DW_AT_decl_line   : 1125
+    <1f5>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><1f8>: Abbrev Number: 5 (DW_TAG_member)
+    <1f9>   DW_AT_name        : (indirect string, offset: 0x1ab): field
+    <1fd>   DW_AT_type        : <0xe2>
+    <201>   DW_AT_decl_file   : 2
+    <202>   DW_AT_decl_line   : 1126
+    <204>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><207>: Abbrev Number: 5 (DW_TAG_member)
+    <208>   DW_AT_name        : (indirect string, offset: 0x1c8): colorspace
+    <20c>   DW_AT_type        : <0xe2>
+    <210>   DW_AT_decl_file   : 2
+    <211>   DW_AT_decl_line   : 1127
+    <213>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><216>: Abbrev Number: 5 (DW_TAG_member)
+    <217>   DW_AT_name        : (indirect string, offset: 0x21e): plane_fmt
+    <21b>   DW_AT_type        : <0x2a6>
+    <21f>   DW_AT_decl_file   : 2
+    <220>   DW_AT_decl_line   : 1128
+    <222>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><225>: Abbrev Number: 5 (DW_TAG_member)
+    <226>   DW_AT_name        : (indirect string, offset: 0x265): num_planes
+    <22a>   DW_AT_type        : <0x310>
+    <22e>   DW_AT_decl_file   : 2
+    <22f>   DW_AT_decl_line   : 1129
+    <231>   DW_AT_data_member_location: 3 byte block: 23 b4 1 	(DW_OP_plus_uconst: 180)
+ <2><235>: Abbrev Number: 5 (DW_TAG_member)
+    <236>   DW_AT_name        : (indirect string, offset: 0x1d8): flags
+    <23a>   DW_AT_type        : <0x310>
+    <23e>   DW_AT_decl_file   : 2
+    <23f>   DW_AT_decl_line   : 1130
+    <241>   DW_AT_data_member_location: 3 byte block: 23 b5 1 	(DW_OP_plus_uconst: 181)
+ <2><245>: Abbrev Number: 12 (DW_TAG_member)
+    <246>   DW_AT_type        : <0x251>
+    <24a>   DW_AT_decl_file   : 2
+    <24b>   DW_AT_decl_line   : 1131
+    <24d>   DW_AT_data_member_location: 3 byte block: 23 b6 1 	(DW_OP_plus_uconst: 182)
+ <2><251>: Abbrev Number: 6 (DW_TAG_union_type)
+    <252>   DW_AT_byte_size   : 1
+    <253>   DW_AT_decl_file   : 2
+    <254>   DW_AT_decl_line   : 1131
+ <3><256>: Abbrev Number: 5 (DW_TAG_member)
+    <257>   DW_AT_name        : (indirect string, offset: 0x1de): ycbcr_enc
+    <25b>   DW_AT_type        : <0x310>
+    <25f>   DW_AT_decl_file   : 2
+    <260>   DW_AT_decl_line   : 1132
+    <262>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><265>: Abbrev Number: 5 (DW_TAG_member)
+    <266>   DW_AT_name        : (indirect string, offset: 0x1e8): hsv_enc
+    <26a>   DW_AT_type        : <0x310>
+    <26e>   DW_AT_decl_file   : 2
+    <26f>   DW_AT_decl_line   : 1133
+    <271>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><274>: Abbrev Number: 0
+ <2><275>: Abbrev Number: 5 (DW_TAG_member)
+    <276>   DW_AT_name        : (indirect string, offset: 0x1f0): quantization
+    <27a>   DW_AT_type        : <0x310>
+    <27e>   DW_AT_decl_file   : 2
+    <27f>   DW_AT_decl_line   : 1135
+    <281>   DW_AT_data_member_location: 3 byte block: 23 b7 1 	(DW_OP_plus_uconst: 183)
+ <2><285>: Abbrev Number: 5 (DW_TAG_member)
+    <286>   DW_AT_name        : (indirect string, offset: 0x1fd): xfer_func
+    <28a>   DW_AT_type        : <0x310>
+    <28e>   DW_AT_decl_file   : 2
+    <28f>   DW_AT_decl_line   : 1136
+    <291>   DW_AT_data_member_location: 3 byte block: 23 b8 1 	(DW_OP_plus_uconst: 184)
+ <2><295>: Abbrev Number: 5 (DW_TAG_member)
+    <296>   DW_AT_name        : (indirect string, offset: 0x228): reserved
+    <29a>   DW_AT_type        : <0x322>
+    <29e>   DW_AT_decl_file   : 2
+    <29f>   DW_AT_decl_line   : 1137
+    <2a1>   DW_AT_data_member_location: 3 byte block: 23 b9 1 	(DW_OP_plus_uconst: 185)
+ <2><2a5>: Abbrev Number: 0
+ <1><2a6>: Abbrev Number: 13 (DW_TAG_array_type)
+    <2a7>   DW_AT_type        : <0x2b3>
+ <2><2ab>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <2ac>   DW_AT_type        : <0x309>
+    <2b0>   DW_AT_lower_bound : 0
+    <2b1>   DW_AT_count       : 8
+ <2><2b2>: Abbrev Number: 0
+ <1><2b3>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <2b4>   DW_AT_name        : (indirect string, offset: 0x24f): v4l2_plane_pix_format
+    <2b8>   DW_AT_byte_size   : 20
+    <2b9>   DW_AT_decl_file   : 2
+    <2ba>   DW_AT_decl_line   : 1117
+ <2><2bc>: Abbrev Number: 5 (DW_TAG_member)
+    <2bd>   DW_AT_name        : (indirect string, offset: 0x1be): sizeimage
+    <2c1>   DW_AT_type        : <0xe2>
+    <2c5>   DW_AT_decl_file   : 2
+    <2c6>   DW_AT_decl_line   : 1118
+    <2c8>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><2cb>: Abbrev Number: 5 (DW_TAG_member)
+    <2cc>   DW_AT_name        : (indirect string, offset: 0x1b1): bytesperline
+    <2d0>   DW_AT_type        : <0xe2>
+    <2d4>   DW_AT_decl_file   : 2
+    <2d5>   DW_AT_decl_line   : 1119
+    <2d7>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><2da>: Abbrev Number: 5 (DW_TAG_member)
+    <2db>   DW_AT_name        : (indirect string, offset: 0x228): reserved
+    <2df>   DW_AT_type        : <0x2ea>
+    <2e3>   DW_AT_decl_file   : 2
+    <2e4>   DW_AT_decl_line   : 1120
+    <2e6>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><2e9>: Abbrev Number: 0
+ <1><2ea>: Abbrev Number: 13 (DW_TAG_array_type)
+    <2eb>   DW_AT_type        : <0x2f7>
+ <2><2ef>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <2f0>   DW_AT_type        : <0x309>
+    <2f4>   DW_AT_lower_bound : 0
+    <2f5>   DW_AT_count       : 6
+ <2><2f6>: Abbrev Number: 0
+ <1><2f7>: Abbrev Number: 3 (DW_TAG_typedef)
+    <2f8>   DW_AT_type        : <0x302>
+    <2fc>   DW_AT_name        : (indirect string, offset: 0x240): __u16
+    <300>   DW_AT_decl_file   : 1
+    <301>   DW_AT_decl_line   : 26
+ <1><302>: Abbrev Number: 7 (DW_TAG_base_type)
+    <303>   DW_AT_name        : (indirect string, offset: 0x231): unsigned short
+    <307>   DW_AT_encoding    : 7	(unsigned)
+    <308>   DW_AT_byte_size   : 2
+ <1><309>: Abbrev Number: 15 (DW_TAG_base_type)
+    <30a>   DW_AT_name        : (indirect string, offset: 0x246): sizetype
+    <30e>   DW_AT_byte_size   : 8
+    <30f>   DW_AT_encoding    : 7	(unsigned)
+ <1><310>: Abbrev Number: 3 (DW_TAG_typedef)
+    <311>   DW_AT_type        : <0x31b>
+    <315>   DW_AT_name        : (indirect string, offset: 0x27e): __u8
+    <319>   DW_AT_decl_file   : 1
+    <31a>   DW_AT_decl_line   : 24
+ <1><31b>: Abbrev Number: 7 (DW_TAG_base_type)
+    <31c>   DW_AT_name        : (indirect string, offset: 0x270): unsigned char
+    <320>   DW_AT_encoding    : 8	(unsigned char)
+    <321>   DW_AT_byte_size   : 1
+ <1><322>: Abbrev Number: 13 (DW_TAG_array_type)
+    <323>   DW_AT_type        : <0x310>
+ <2><327>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <328>   DW_AT_type        : <0x309>
+    <32c>   DW_AT_lower_bound : 0
+    <32d>   DW_AT_count       : 7
+ <2><32e>: Abbrev Number: 0
+ <1><32f>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <330>   DW_AT_name        : (indirect string, offset: 0x2fc): v4l2_window
+    <334>   DW_AT_byte_size   : 40
+    <335>   DW_AT_decl_file   : 2
+    <336>   DW_AT_decl_line   : 554
+ <2><338>: Abbrev Number: 5 (DW_TAG_member)
+    <339>   DW_AT_name        : (indirect string, offset: 0x29e): w
+    <33d>   DW_AT_type        : <0x3a2>
+    <341>   DW_AT_decl_file   : 2
+    <342>   DW_AT_decl_line   : 555
+    <344>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><347>: Abbrev Number: 5 (DW_TAG_member)
+    <348>   DW_AT_name        : (indirect string, offset: 0x1ab): field
+    <34c>   DW_AT_type        : <0xe2>
+    <350>   DW_AT_decl_file   : 2
+    <351>   DW_AT_decl_line   : 556
+    <353>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><356>: Abbrev Number: 5 (DW_TAG_member)
+    <357>   DW_AT_name        : (indirect string, offset: 0x2bd): chromakey
+    <35b>   DW_AT_type        : <0xe2>
+    <35f>   DW_AT_decl_file   : 2
+    <360>   DW_AT_decl_line   : 557
+    <362>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><365>: Abbrev Number: 5 (DW_TAG_member)
+    <366>   DW_AT_name        : (indirect string, offset: 0x2c7): clips
+    <36a>   DW_AT_type        : <0x3f5>
+    <36e>   DW_AT_decl_file   : 2
+    <36f>   DW_AT_decl_line   : 558
+    <371>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><374>: Abbrev Number: 5 (DW_TAG_member)
+    <375>   DW_AT_name        : (indirect string, offset: 0x2de): clipcount
+    <379>   DW_AT_type        : <0xe2>
+    <37d>   DW_AT_decl_file   : 2
+    <37e>   DW_AT_decl_line   : 559
+    <380>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><383>: Abbrev Number: 5 (DW_TAG_member)
+    <384>   DW_AT_name        : (indirect string, offset: 0x2e8): bitmap
+    <388>   DW_AT_type        : <0x422>
+    <38c>   DW_AT_decl_file   : 2
+    <38d>   DW_AT_decl_line   : 560
+    <38f>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><392>: Abbrev Number: 5 (DW_TAG_member)
+    <393>   DW_AT_name        : (indirect string, offset: 0x2ef): global_alpha
+    <397>   DW_AT_type        : <0x310>
+    <39b>   DW_AT_decl_file   : 2
+    <39c>   DW_AT_decl_line   : 561
+    <39e>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><3a1>: Abbrev Number: 0
+ <1><3a2>: Abbrev Number: 8 (DW_TAG_structure_type)
+    <3a3>   DW_AT_name        : (indirect string, offset: 0x2b3): v4l2_rect
+    <3a7>   DW_AT_byte_size   : 16
+    <3a8>   DW_AT_decl_file   : 2
+    <3a9>   DW_AT_decl_line   : 135
+ <2><3aa>: Abbrev Number: 9 (DW_TAG_member)
+    <3ab>   DW_AT_name        : (indirect string, offset: 0x2a0): left
+    <3af>   DW_AT_type        : <0x3e3>
+    <3b3>   DW_AT_decl_file   : 2
+    <3b4>   DW_AT_decl_line   : 136
+    <3b5>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><3b8>: Abbrev Number: 9 (DW_TAG_member)
+    <3b9>   DW_AT_name        : (indirect string, offset: 0x2af): top
+    <3bd>   DW_AT_type        : <0x3e3>
+    <3c1>   DW_AT_decl_file   : 2
+    <3c2>   DW_AT_decl_line   : 137
+    <3c3>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><3c6>: Abbrev Number: 9 (DW_TAG_member)
+    <3c7>   DW_AT_name        : (indirect string, offset: 0x192): width
+    <3cb>   DW_AT_type        : <0xe2>
+    <3cf>   DW_AT_decl_file   : 2
+    <3d0>   DW_AT_decl_line   : 138
+    <3d1>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><3d4>: Abbrev Number: 9 (DW_TAG_member)
+    <3d5>   DW_AT_name        : (indirect string, offset: 0x198): height
+    <3d9>   DW_AT_type        : <0xe2>
+    <3dd>   DW_AT_decl_file   : 2
+    <3de>   DW_AT_decl_line   : 139
+    <3df>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><3e2>: Abbrev Number: 0
+ <1><3e3>: Abbrev Number: 3 (DW_TAG_typedef)
+    <3e4>   DW_AT_type        : <0x3ee>
+    <3e8>   DW_AT_name        : (indirect string, offset: 0x2a9): __s32
+    <3ec>   DW_AT_decl_file   : 1
+    <3ed>   DW_AT_decl_line   : 27
+ <1><3ee>: Abbrev Number: 7 (DW_TAG_base_type)
+    <3ef>   DW_AT_name        : (indirect string, offset: 0x2a5): int
+    <3f3>   DW_AT_encoding    : 5	(signed)
+    <3f4>   DW_AT_byte_size   : 4
+ <1><3f5>: Abbrev Number: 16 (DW_TAG_pointer_type)
+    <3f6>   DW_AT_type        : <0x3fa>
+ <1><3fa>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3fb>   DW_AT_name        : (indirect string, offset: 0x2d4): v4l2_clip
+    <3ff>   DW_AT_byte_size   : 20
+    <400>   DW_AT_decl_file   : 2
+    <401>   DW_AT_decl_line   : 550
+ <2><403>: Abbrev Number: 5 (DW_TAG_member)
+    <404>   DW_AT_name        : (indirect string, offset: 0x2cd): c
+    <408>   DW_AT_type        : <0x3a2>
+    <40c>   DW_AT_decl_file   : 2
+    <40d>   DW_AT_decl_line   : 551
+    <40f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><412>: Abbrev Number: 5 (DW_TAG_member)
+    <413>   DW_AT_name        : (indirect string, offset: 0x2cf): next
+    <417>   DW_AT_type        : <0x3f5>
+    <41b>   DW_AT_decl_file   : 2
+    <41c>   DW_AT_decl_line   : 552
+    <41e>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><421>: Abbrev Number: 0
+ <1><422>: Abbrev Number: 17 (DW_TAG_pointer_type)
+ <1><423>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <424>   DW_AT_name        : (indirect string, offset: 0x34c): v4l2_vbi_format
+    <428>   DW_AT_byte_size   : 44
+    <429>   DW_AT_decl_file   : 2
+    <42a>   DW_AT_decl_line   : 1052
+ <2><42c>: Abbrev Number: 5 (DW_TAG_member)
+    <42d>   DW_AT_name        : (indirect string, offset: 0x30c): sampling_rate
+    <431>   DW_AT_type        : <0xe2>
+    <435>   DW_AT_decl_file   : 2
+    <436>   DW_AT_decl_line   : 1053
+    <438>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><43b>: Abbrev Number: 5 (DW_TAG_member)
+    <43c>   DW_AT_name        : (indirect string, offset: 0x31a): offset
+    <440>   DW_AT_type        : <0xe2>
+    <444>   DW_AT_decl_file   : 2
+    <445>   DW_AT_decl_line   : 1054
+    <447>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><44a>: Abbrev Number: 5 (DW_TAG_member)
+    <44b>   DW_AT_name        : (indirect string, offset: 0x321): samples_per_line
+    <44f>   DW_AT_type        : <0xe2>
+    <453>   DW_AT_decl_file   : 2
+    <454>   DW_AT_decl_line   : 1055
+    <456>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><459>: Abbrev Number: 5 (DW_TAG_member)
+    <45a>   DW_AT_name        : (indirect string, offset: 0x332): sample_format
+    <45e>   DW_AT_type        : <0xe2>
+    <462>   DW_AT_decl_file   : 2
+    <463>   DW_AT_decl_line   : 1056
+    <465>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><468>: Abbrev Number: 5 (DW_TAG_member)
+    <469>   DW_AT_name        : (indirect string, offset: 0x340): start
+    <46d>   DW_AT_type        : <0x4a5>
+    <471>   DW_AT_decl_file   : 2
+    <472>   DW_AT_decl_line   : 1057
+    <474>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><477>: Abbrev Number: 5 (DW_TAG_member)
+    <478>   DW_AT_name        : (indirect string, offset: 0x346): count
+    <47c>   DW_AT_type        : <0x4b2>
+    <480>   DW_AT_decl_file   : 2
+    <481>   DW_AT_decl_line   : 1058
+    <483>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><486>: Abbrev Number: 5 (DW_TAG_member)
+    <487>   DW_AT_name        : (indirect string, offset: 0x1d8): flags
+    <48b>   DW_AT_type        : <0xe2>
+    <48f>   DW_AT_decl_file   : 2
+    <490>   DW_AT_decl_line   : 1059
+    <492>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><495>: Abbrev Number: 5 (DW_TAG_member)
+    <496>   DW_AT_name        : (indirect string, offset: 0x228): reserved
+    <49a>   DW_AT_type        : <0x4b2>
+    <49e>   DW_AT_decl_file   : 2
+    <49f>   DW_AT_decl_line   : 1060
+    <4a1>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><4a4>: Abbrev Number: 0
+ <1><4a5>: Abbrev Number: 13 (DW_TAG_array_type)
+    <4a6>   DW_AT_type        : <0x3e3>
+ <2><4aa>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <4ab>   DW_AT_type        : <0x309>
+    <4af>   DW_AT_lower_bound : 0
+    <4b0>   DW_AT_count       : 2
+ <2><4b1>: Abbrev Number: 0
+ <1><4b2>: Abbrev Number: 13 (DW_TAG_array_type)
+    <4b3>   DW_AT_type        : <0xe2>
+ <2><4b7>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <4b8>   DW_AT_type        : <0x309>
+    <4bc>   DW_AT_lower_bound : 0
+    <4bd>   DW_AT_count       : 2
+ <2><4be>: Abbrev Number: 0
+ <1><4bf>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <4c0>   DW_AT_name        : (indirect string, offset: 0x385): v4l2_sliced_vbi_format
+    <4c4>   DW_AT_byte_size   : 112
+    <4c5>   DW_AT_decl_file   : 2
+    <4c6>   DW_AT_decl_line   : 1068
+ <2><4c8>: Abbrev Number: 5 (DW_TAG_member)
+    <4c9>   DW_AT_name        : (indirect string, offset: 0x363): service_set
+    <4cd>   DW_AT_type        : <0x2f7>
+    <4d1>   DW_AT_decl_file   : 2
+    <4d2>   DW_AT_decl_line   : 1069
+    <4d4>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><4d7>: Abbrev Number: 5 (DW_TAG_member)
+    <4d8>   DW_AT_name        : (indirect string, offset: 0x36f): service_lines
+    <4dc>   DW_AT_type        : <0x505>
+    <4e0>   DW_AT_decl_file   : 2
+    <4e1>   DW_AT_decl_line   : 1070
+    <4e3>   DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+ <2><4e6>: Abbrev Number: 5 (DW_TAG_member)
+    <4e7>   DW_AT_name        : (indirect string, offset: 0x37d): io_size
+    <4eb>   DW_AT_type        : <0xe2>
+    <4ef>   DW_AT_decl_file   : 2
+    <4f0>   DW_AT_decl_line   : 1071
+    <4f2>   DW_AT_data_member_location: 2 byte block: 23 64 	(DW_OP_plus_uconst: 100)
+ <2><4f5>: Abbrev Number: 5 (DW_TAG_member)
+    <4f6>   DW_AT_name        : (indirect string, offset: 0x228): reserved
+    <4fa>   DW_AT_type        : <0x4b2>
+    <4fe>   DW_AT_decl_file   : 2
+    <4ff>   DW_AT_decl_line   : 1072
+    <501>   DW_AT_data_member_location: 2 byte block: 23 68 	(DW_OP_plus_uconst: 104)
+ <2><504>: Abbrev Number: 0
+ <1><505>: Abbrev Number: 13 (DW_TAG_array_type)
+    <506>   DW_AT_type        : <0x2f7>
+ <2><50a>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <50b>   DW_AT_type        : <0x309>
+    <50f>   DW_AT_lower_bound : 0
+    <510>   DW_AT_count       : 2
+ <2><511>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <512>   DW_AT_type        : <0x309>
+    <516>   DW_AT_lower_bound : 0
+    <517>   DW_AT_count       : 24
+ <2><518>: Abbrev Number: 0
+ <1><519>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <51a>   DW_AT_name        : (indirect string, offset: 0x3ab): v4l2_sdr_format
+    <51e>   DW_AT_byte_size   : 32
+    <51f>   DW_AT_decl_file   : 2
+    <520>   DW_AT_decl_line   : 1139
+ <2><522>: Abbrev Number: 5 (DW_TAG_member)
+    <523>   DW_AT_name        : (indirect string, offset: 0x19f): pixelformat
+    <527>   DW_AT_type        : <0xe2>
+    <52b>   DW_AT_decl_file   : 2
+    <52c>   DW_AT_decl_line   : 1140
+    <52e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><531>: Abbrev Number: 5 (DW_TAG_member)
+    <532>   DW_AT_name        : (indirect string, offset: 0x3a0): buffersize
+    <536>   DW_AT_type        : <0xe2>
+    <53a>   DW_AT_decl_file   : 2
+    <53b>   DW_AT_decl_line   : 1141
+    <53d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><540>: Abbrev Number: 5 (DW_TAG_member)
+    <541>   DW_AT_name        : (indirect string, offset: 0x228): reserved
+    <545>   DW_AT_type        : <0x550>
+    <549>   DW_AT_decl_file   : 2
+    <54a>   DW_AT_decl_line   : 1142
+    <54c>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><54f>: Abbrev Number: 0
+ <1><550>: Abbrev Number: 13 (DW_TAG_array_type)
+    <551>   DW_AT_type        : <0x310>
+ <2><555>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <556>   DW_AT_type        : <0x309>
+    <55a>   DW_AT_lower_bound : 0
+    <55b>   DW_AT_count       : 24
+ <2><55c>: Abbrev Number: 0
+ <1><55d>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <55e>   DW_AT_name        : (indirect string, offset: 0x3cb): v4l2_meta_format
+    <562>   DW_AT_byte_size   : 8
+    <563>   DW_AT_decl_file   : 2
+    <564>   DW_AT_decl_line   : 1144
+ <2><566>: Abbrev Number: 5 (DW_TAG_member)
+    <567>   DW_AT_name        : (indirect string, offset: 0x3c0): dataformat
+    <56b>   DW_AT_type        : <0xe2>
+    <56f>   DW_AT_decl_file   : 2
+    <570>   DW_AT_decl_line   : 1145
+    <572>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><575>: Abbrev Number: 5 (DW_TAG_member)
+    <576>   DW_AT_name        : (indirect string, offset: 0x3a0): buffersize
+    <57a>   DW_AT_type        : <0xe2>
+    <57e>   DW_AT_decl_file   : 2
+    <57f>   DW_AT_decl_line   : 1146
+    <581>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><584>: Abbrev Number: 0
+ <1><585>: Abbrev Number: 13 (DW_TAG_array_type)
+    <586>   DW_AT_type        : <0x310>
+ <2><58a>: Abbrev Number: 14 (DW_TAG_subrange_type)
+    <58b>   DW_AT_type        : <0x309>
+    <58f>   DW_AT_lower_bound : 0
+    <590>   DW_AT_count       : 200
+ <2><591>: Abbrev Number: 0
+ <1><592>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_v4l2_format.d2 b/mpers-m32/struct_v4l2_format.d2
index b5b5168..e80bdc1 100644
--- a/mpers-m32/struct_v4l2_format.d2
+++ b/mpers-m32/struct_v4l2_format.d2
@@ -1,713 +1,713 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x97): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x161): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 53
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x327): struct_v4l2_format
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x3f1): struct_v4l2_format
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 48
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x31b): v4l2_format
+DW_AT_name        : (indirect string, offset: 0x3e5): v4l2_format
 DW_AT_byte_size   : 204
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1141
-<2><44>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa8): type
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1142
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc0): fmt
-DW_AT_type        : <0x62>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1152
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><62>
-Abbrev Number: 6 (DW_TAG_union_type)
-DW_AT_byte_size   : 200
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1143
-<3><67>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc4): pix
-DW_AT_type        : <0xf3>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1144
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><76>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x14d): pix_mp
-DW_AT_type        : <0x1c1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1145
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><85>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d0): win
-DW_AT_type        : <0x32e>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1146
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><94>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x23e): vbi
-DW_AT_type        : <0x422>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1147
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><a3>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x292): sliced
-DW_AT_type        : <0x4be>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1148
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><b2>
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2d2): sdr
-DW_AT_type        : <0x518>
+DW_AT_name        : (indirect string, offset: 0x172): type
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1149
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><c1>
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2f1): meta
-DW_AT_type        : <0x55c>
+DW_AT_name        : (indirect string, offset: 0x18a): fmt
+DW_AT_type        : <0x63>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1159
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><63>
+Abbrev Number: 6 (DW_TAG_union_type)
+DW_AT_byte_size   : 200
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1150
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><d0>
+<3><68>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x312): raw_data
-DW_AT_type        : <0x584>
+DW_AT_name        : (indirect string, offset: 0x18e): pix
+DW_AT_type        : <0xf4>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1151
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<1><e1>
+<3><77>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x217): pix_mp
+DW_AT_type        : <0x1c2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1152
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><86>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x29a): win
+DW_AT_type        : <0x32f>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1153
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><95>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x308): vbi
+DW_AT_type        : <0x423>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1154
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><a4>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x35c): sliced
+DW_AT_type        : <0x4bf>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1155
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><b3>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x39c): sdr
+DW_AT_type        : <0x519>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1156
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><c2>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3bb): meta
+DW_AT_type        : <0x55d>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1157
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><d1>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3dc): raw_data
+DW_AT_type        : <0x585>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1158
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<1><e2>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xec>
-DW_AT_name        : (indirect string, offset: 0xba): __u32
+DW_AT_type        : <0xed>
+DW_AT_name        : (indirect string, offset: 0x184): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><ec>
+<1><ed>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xad): unsigned int
+DW_AT_name        : (indirect string, offset: 0x177): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><f3>
+<1><f4>
 Abbrev Number: 8 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x13d): v4l2_pix_format
+DW_AT_name        : (indirect string, offset: 0x207): v4l2_pix_format
 DW_AT_byte_size   : 48
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 182
-<2><fb>
+<2><fc>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc8): width
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x192): width
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 183
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><109>
+<2><10a>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xce): height
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x198): height
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 184
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><117>
+<2><118>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd5): pixelformat
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x19f): pixelformat
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 185
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><125>
+<2><126>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe1): field
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1ab): field
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 186
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><133>
+<2><134>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe7): bytesperline
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1b1): bytesperline
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 187
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><141>
+<2><142>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf4): sizeimage
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1be): sizeimage
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 188
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><14f>
+<2><150>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfe): colorspace
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1c8): colorspace
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 189
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><15d>
+<2><15e>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x109): priv
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1d3): priv
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 190
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><16b>
+<2><16c>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10e): flags
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1d8): flags
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 191
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><179>
+<2><17a>
 Abbrev Number: 10 (DW_TAG_member)
-DW_AT_type        : <0x183>
+DW_AT_type        : <0x184>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 192
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><183>
+<2><184>
 Abbrev Number: 11 (DW_TAG_union_type)
 DW_AT_byte_size   : 4
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 192
-<3><187>
+<3><188>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x114): ycbcr_enc
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1de): ycbcr_enc
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 193
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><195>
+<3><196>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11e): hsv_enc
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1e8): hsv_enc
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 194
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><1a4>
+<2><1a5>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x126): quantization
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1f0): quantization
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 196
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><1b2>
+<2><1b3>
 Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x133): xfer_func
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1fd): xfer_func
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 197
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<1><1c1>
+<1><1c2>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1b9): v4l2_pix_format_mplane
+DW_AT_name        : (indirect string, offset: 0x283): v4l2_pix_format_mplane
 DW_AT_byte_size   : 192
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1115
-<2><1ca>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc8): width
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1116
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><1d9>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xce): height
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1117
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><1e8>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd5): pixelformat
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1118
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><1f7>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe1): field
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1119
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><206>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfe): colorspace
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1120
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><215>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x154): plane_fmt
-DW_AT_type        : <0x2a5>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1121
-DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><224>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x19b): num_planes
-DW_AT_type        : <0x30f>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1122
-DW_AT_data_member_location: 3 byte block: 23 b4 1 	(DW_OP_plus_uconst: 180)
-<2><234>
+<2><1cb>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10e): flags
-DW_AT_type        : <0x30f>
+DW_AT_name        : (indirect string, offset: 0x192): width
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1123
-DW_AT_data_member_location: 3 byte block: 23 b5 1 	(DW_OP_plus_uconst: 181)
-<2><244>
-Abbrev Number: 12 (DW_TAG_member)
-DW_AT_type        : <0x250>
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><1da>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x198): height
+DW_AT_type        : <0xe2>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1124
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><1e9>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x19f): pixelformat
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1125
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><1f8>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ab): field
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1126
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><207>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1c8): colorspace
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1127
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><216>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x21e): plane_fmt
+DW_AT_type        : <0x2a6>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1128
+DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+<2><225>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x265): num_planes
+DW_AT_type        : <0x310>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1129
+DW_AT_data_member_location: 3 byte block: 23 b4 1 	(DW_OP_plus_uconst: 180)
+<2><235>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1d8): flags
+DW_AT_type        : <0x310>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1130
+DW_AT_data_member_location: 3 byte block: 23 b5 1 	(DW_OP_plus_uconst: 181)
+<2><245>
+Abbrev Number: 12 (DW_TAG_member)
+DW_AT_type        : <0x251>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1131
 DW_AT_data_member_location: 3 byte block: 23 b6 1 	(DW_OP_plus_uconst: 182)
-<2><250>
+<2><251>
 Abbrev Number: 6 (DW_TAG_union_type)
 DW_AT_byte_size   : 1
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1124
-<3><255>
+DW_AT_decl_line   : 1131
+<3><256>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x114): ycbcr_enc
-DW_AT_type        : <0x30f>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1125
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><264>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11e): hsv_enc
-DW_AT_type        : <0x30f>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1126
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><274>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x126): quantization
-DW_AT_type        : <0x30f>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1128
-DW_AT_data_member_location: 3 byte block: 23 b7 1 	(DW_OP_plus_uconst: 183)
-<2><284>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x133): xfer_func
-DW_AT_type        : <0x30f>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1129
-DW_AT_data_member_location: 3 byte block: 23 b8 1 	(DW_OP_plus_uconst: 184)
-<2><294>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15e): reserved
-DW_AT_type        : <0x321>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1130
-DW_AT_data_member_location: 3 byte block: 23 b9 1 	(DW_OP_plus_uconst: 185)
-<1><2a5>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x2b2>
-<2><2aa>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x308>
-DW_AT_lower_bound : 0
-DW_AT_count       : 8
-<1><2b2>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x185): v4l2_plane_pix_format
-DW_AT_byte_size   : 20
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1110
-<2><2bb>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf4): sizeimage
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1111
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><2ca>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe7): bytesperline
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1112
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><2d9>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15e): reserved
-DW_AT_type        : <0x2e9>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1113
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><2e9>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x2f6>
-<2><2ee>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x308>
-DW_AT_lower_bound : 0
-DW_AT_count       : 6
-<1><2f6>
-Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x301>
-DW_AT_name        : (indirect string, offset: 0x176): __u16
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 26
-<1><301>
-Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x167): unsigned short
-DW_AT_encoding    : 7	(unsigned)
-DW_AT_byte_size   : 2
-<1><308>
-Abbrev Number: 15 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x17c): sizetype
-DW_AT_byte_size   : 8
-DW_AT_encoding    : 7	(unsigned)
-<1><30f>
-Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x31a>
-DW_AT_name        : (indirect string, offset: 0x1b4): __u8
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 24
-<1><31a>
-Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1a6): unsigned char
-DW_AT_encoding    : 8	(unsigned char)
-DW_AT_byte_size   : 1
-<1><321>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x30f>
-<2><326>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x308>
-DW_AT_lower_bound : 0
-DW_AT_count       : 7
-<1><32e>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x232): v4l2_window
-DW_AT_byte_size   : 40
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 547
-<2><337>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d4): w
-DW_AT_type        : <0x3a1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 548
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><346>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe1): field
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 549
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><355>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1f3): chromakey
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 550
-DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><364>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1fd): clips
-DW_AT_type        : <0x3f4>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 551
-DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><373>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x214): clipcount
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 552
-DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><382>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x21e): bitmap
-DW_AT_type        : <0x421>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 553
-DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><391>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x225): global_alpha
-DW_AT_type        : <0x30f>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 554
-DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<1><3a1>
-Abbrev Number: 8 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x1e9): v4l2_rect
-DW_AT_byte_size   : 16
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 135
-<2><3a9>
-Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1d6): left
-DW_AT_type        : <0x3e2>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 136
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><3b7>
-Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x1e5): top
-DW_AT_type        : <0x3e2>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 137
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><3c5>
-Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc8): width
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 138
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><3d3>
-Abbrev Number: 9 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xce): height
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 139
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><3e2>
-Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3ed>
-DW_AT_name        : (indirect string, offset: 0x1df): __s32
-DW_AT_decl_file   : 1
-DW_AT_decl_line   : 27
-<1><3ed>
-Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x1db): int
-DW_AT_encoding    : 5	(signed)
-DW_AT_byte_size   : 4
-<1><3f4>
-Abbrev Number: 16 (DW_TAG_pointer_type)
-DW_AT_type        : <0x3f9>
-<1><3f9>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x20a): v4l2_clip
-DW_AT_byte_size   : 20
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 543
-<2><402>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x203): c
-DW_AT_type        : <0x3a1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 544
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><411>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x205): next
-DW_AT_type        : <0x3f4>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 545
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<1><421>
-Abbrev Number: 17 (DW_TAG_pointer_type)
-<1><422>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x282): v4l2_vbi_format
-DW_AT_byte_size   : 44
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1045
-<2><42b>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x242): sampling_rate
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1046
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><43a>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x250): offset
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1047
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><449>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x257): samples_per_line
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1048
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><458>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x268): sample_format
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1049
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><467>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x276): start
-DW_AT_type        : <0x4a4>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1050
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><476>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x27c): count
-DW_AT_type        : <0x4b1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1051
-DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><485>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10e): flags
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1052
-DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><494>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15e): reserved
-DW_AT_type        : <0x4b1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1053
-DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<1><4a4>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x3e2>
-<2><4a9>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x308>
-DW_AT_lower_bound : 0
-DW_AT_count       : 2
-<1><4b1>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0xe1>
-<2><4b6>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x308>
-DW_AT_lower_bound : 0
-DW_AT_count       : 2
-<1><4be>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x2bb): v4l2_sliced_vbi_format
-DW_AT_byte_size   : 112
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1061
-<2><4c7>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x299): service_set
-DW_AT_type        : <0x2f6>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1062
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><4d6>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2a5): service_lines
-DW_AT_type        : <0x504>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1063
-DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
-<2><4e5>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2b3): io_size
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1064
-DW_AT_data_member_location: 2 byte block: 23 64 	(DW_OP_plus_uconst: 100)
-<2><4f4>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15e): reserved
-DW_AT_type        : <0x4b1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1065
-DW_AT_data_member_location: 2 byte block: 23 68 	(DW_OP_plus_uconst: 104)
-<1><504>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x2f6>
-<2><509>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x308>
-DW_AT_lower_bound : 0
-DW_AT_count       : 2
-<2><510>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x308>
-DW_AT_lower_bound : 0
-DW_AT_count       : 24
-<1><518>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x2e1): v4l2_sdr_format
-DW_AT_byte_size   : 32
+DW_AT_name        : (indirect string, offset: 0x1de): ycbcr_enc
+DW_AT_type        : <0x310>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1132
-<2><521>
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><265>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd5): pixelformat
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1e8): hsv_enc
+DW_AT_type        : <0x310>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1133
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><530>
+<2><275>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2d6): buffersize
-DW_AT_type        : <0xe1>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1134
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><53f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15e): reserved
-DW_AT_type        : <0x54f>
+DW_AT_name        : (indirect string, offset: 0x1f0): quantization
+DW_AT_type        : <0x310>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1135
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<1><54f>
-Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x30f>
-<2><554>
-Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x308>
-DW_AT_lower_bound : 0
-DW_AT_count       : 24
-<1><55c>
-Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x301): v4l2_meta_format
-DW_AT_byte_size   : 8
+DW_AT_data_member_location: 3 byte block: 23 b7 1 	(DW_OP_plus_uconst: 183)
+<2><285>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1fd): xfer_func
+DW_AT_type        : <0x310>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1136
+DW_AT_data_member_location: 3 byte block: 23 b8 1 	(DW_OP_plus_uconst: 184)
+<2><295>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x228): reserved
+DW_AT_type        : <0x322>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1137
-<2><565>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2f6): dataformat
-DW_AT_type        : <0xe1>
+DW_AT_data_member_location: 3 byte block: 23 b9 1 	(DW_OP_plus_uconst: 185)
+<1><2a6>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x2b3>
+<2><2ab>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x309>
+DW_AT_lower_bound : 0
+DW_AT_count       : 8
+<1><2b3>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x24f): v4l2_plane_pix_format
+DW_AT_byte_size   : 20
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 1138
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><574>
+DW_AT_decl_line   : 1117
+<2><2bc>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x2d6): buffersize
-DW_AT_type        : <0xe1>
+DW_AT_name        : (indirect string, offset: 0x1be): sizeimage
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1118
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><2cb>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1b1): bytesperline
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1119
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><2da>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x228): reserved
+DW_AT_type        : <0x2ea>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1120
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<1><2ea>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x2f7>
+<2><2ef>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x309>
+DW_AT_lower_bound : 0
+DW_AT_count       : 6
+<1><2f7>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0x302>
+DW_AT_name        : (indirect string, offset: 0x240): __u16
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 26
+<1><302>
+Abbrev Number: 7 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x231): unsigned short
+DW_AT_encoding    : 7	(unsigned)
+DW_AT_byte_size   : 2
+<1><309>
+Abbrev Number: 15 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x246): sizetype
+DW_AT_byte_size   : 8
+DW_AT_encoding    : 7	(unsigned)
+<1><310>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0x31b>
+DW_AT_name        : (indirect string, offset: 0x27e): __u8
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 24
+<1><31b>
+Abbrev Number: 7 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x270): unsigned char
+DW_AT_encoding    : 8	(unsigned char)
+DW_AT_byte_size   : 1
+<1><322>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x310>
+<2><327>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x309>
+DW_AT_lower_bound : 0
+DW_AT_count       : 7
+<1><32f>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x2fc): v4l2_window
+DW_AT_byte_size   : 40
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 554
+<2><338>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x29e): w
+DW_AT_type        : <0x3a2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 555
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><347>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ab): field
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 556
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><356>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2bd): chromakey
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 557
+DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+<2><365>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2c7): clips
+DW_AT_type        : <0x3f5>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 558
+DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+<2><374>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2de): clipcount
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 559
+DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+<2><383>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2e8): bitmap
+DW_AT_type        : <0x422>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 560
+DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+<2><392>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2ef): global_alpha
+DW_AT_type        : <0x310>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 561
+DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+<1><3a2>
+Abbrev Number: 8 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x2b3): v4l2_rect
+DW_AT_byte_size   : 16
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 135
+<2><3aa>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2a0): left
+DW_AT_type        : <0x3e3>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 136
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><3b8>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2af): top
+DW_AT_type        : <0x3e3>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 137
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><3c6>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x192): width
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 138
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><3d4>
+Abbrev Number: 9 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x198): height
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 139
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<1><3e3>
+Abbrev Number: 3 (DW_TAG_typedef)
+DW_AT_type        : <0x3ee>
+DW_AT_name        : (indirect string, offset: 0x2a9): __s32
+DW_AT_decl_file   : 1
+DW_AT_decl_line   : 27
+<1><3ee>
+Abbrev Number: 7 (DW_TAG_base_type)
+DW_AT_name        : (indirect string, offset: 0x2a5): int
+DW_AT_encoding    : 5	(signed)
+DW_AT_byte_size   : 4
+<1><3f5>
+Abbrev Number: 16 (DW_TAG_pointer_type)
+DW_AT_type        : <0x3fa>
+<1><3fa>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x2d4): v4l2_clip
+DW_AT_byte_size   : 20
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 550
+<2><403>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2cd): c
+DW_AT_type        : <0x3a2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 551
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><412>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x2cf): next
+DW_AT_type        : <0x3f5>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 552
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<1><422>
+Abbrev Number: 17 (DW_TAG_pointer_type)
+<1><423>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x34c): v4l2_vbi_format
+DW_AT_byte_size   : 44
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1052
+<2><42c>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x30c): sampling_rate
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1053
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><43b>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x31a): offset
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1054
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><44a>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x321): samples_per_line
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1055
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<2><459>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x332): sample_format
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1056
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<2><468>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x340): start
+DW_AT_type        : <0x4a5>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1057
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<2><477>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x346): count
+DW_AT_type        : <0x4b2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1058
+DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+<2><486>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1d8): flags
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1059
+DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+<2><495>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x228): reserved
+DW_AT_type        : <0x4b2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1060
+DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+<1><4a5>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x3e3>
+<2><4aa>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x309>
+DW_AT_lower_bound : 0
+DW_AT_count       : 2
+<1><4b2>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0xe2>
+<2><4b7>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x309>
+DW_AT_lower_bound : 0
+DW_AT_count       : 2
+<1><4bf>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x385): v4l2_sliced_vbi_format
+DW_AT_byte_size   : 112
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1068
+<2><4c8>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x363): service_set
+DW_AT_type        : <0x2f7>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1069
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><4d7>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x36f): service_lines
+DW_AT_type        : <0x505>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1070
+DW_AT_data_member_location: 2 byte block: 23 2 	(DW_OP_plus_uconst: 2)
+<2><4e6>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x37d): io_size
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1071
+DW_AT_data_member_location: 2 byte block: 23 64 	(DW_OP_plus_uconst: 100)
+<2><4f5>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x228): reserved
+DW_AT_type        : <0x4b2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1072
+DW_AT_data_member_location: 2 byte block: 23 68 	(DW_OP_plus_uconst: 104)
+<1><505>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x2f7>
+<2><50a>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x309>
+DW_AT_lower_bound : 0
+DW_AT_count       : 2
+<2><511>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x309>
+DW_AT_lower_bound : 0
+DW_AT_count       : 24
+<1><519>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x3ab): v4l2_sdr_format
+DW_AT_byte_size   : 32
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 1139
+<2><522>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x19f): pixelformat
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1140
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><531>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3a0): buffersize
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1141
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><584>
+<2><540>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x228): reserved
+DW_AT_type        : <0x550>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1142
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<1><550>
 Abbrev Number: 13 (DW_TAG_array_type)
-DW_AT_type        : <0x30f>
-<2><589>
+DW_AT_type        : <0x310>
+<2><555>
 Abbrev Number: 14 (DW_TAG_subrange_type)
-DW_AT_type        : <0x308>
+DW_AT_type        : <0x309>
+DW_AT_lower_bound : 0
+DW_AT_count       : 24
+<1><55d>
+Abbrev Number: 4 (DW_TAG_structure_type)
+DW_AT_name        : (indirect string, offset: 0x3cb): v4l2_meta_format
+DW_AT_byte_size   : 8
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1144
+<2><566>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3c0): dataformat
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1145
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><575>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x3a0): buffersize
+DW_AT_type        : <0xe2>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 1146
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<1><585>
+Abbrev Number: 13 (DW_TAG_array_type)
+DW_AT_type        : <0x310>
+<2><58a>
+Abbrev Number: 14 (DW_TAG_subrange_type)
+DW_AT_type        : <0x309>
 DW_AT_lower_bound : 0
 DW_AT_count       : 200
diff --git a/mpers-m32/struct_v4l2_framebuffer.d1 b/mpers-m32/struct_v4l2_framebuffer.d1
index c8bf45d..dbba7d5 100644
--- a/mpers-m32/struct_v4l2_framebuffer.d1
+++ b/mpers-m32/struct_v4l2_framebuffer.d1
@@ -1,120 +1,121 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x10f (32-bit)
+   Length:        0x110 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_v4l2_framebuffer.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_v4l2_framebuffer.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x61): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x9c): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 53
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x131): struct_v4l2_framebuffer
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 49
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x120): v4l2_framebuffer
-    <40>   DW_AT_byte_size   : 44
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 513
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xad): capability
-    <49>   DW_AT_type        : <0xff>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 514
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xcb): flags
-    <58>   DW_AT_type        : <0xff>
-    <5c>   DW_AT_decl_file   : 2
-    <5d>   DW_AT_decl_line   : 515
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><62>: Abbrev Number: 5 (DW_TAG_member)
-    <63>   DW_AT_name        : (indirect string, offset: 0xd1): base
-    <67>   DW_AT_type        : <0x111>
-    <6b>   DW_AT_decl_file   : 2
-    <6c>   DW_AT_decl_line   : 516
-    <6e>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><71>: Abbrev Number: 5 (DW_TAG_member)
-    <72>   DW_AT_name        : (indirect string, offset: 0xd6): fmt
-    <76>   DW_AT_type        : <0x80>
-    <7a>   DW_AT_decl_file   : 2
-    <7b>   DW_AT_decl_line   : 526
-    <7d>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><80>: Abbrev Number: 6 (DW_TAG_structure_type)
-    <81>   DW_AT_byte_size   : 32
-    <82>   DW_AT_decl_file   : 2
-    <83>   DW_AT_decl_line   : 517
- <3><85>: Abbrev Number: 5 (DW_TAG_member)
-    <86>   DW_AT_name        : (indirect string, offset: 0xda): width
-    <8a>   DW_AT_type        : <0xff>
-    <8e>   DW_AT_decl_file   : 2
-    <8f>   DW_AT_decl_line   : 518
-    <91>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <3><94>: Abbrev Number: 5 (DW_TAG_member)
-    <95>   DW_AT_name        : (indirect string, offset: 0xe0): height
-    <99>   DW_AT_type        : <0xff>
-    <9d>   DW_AT_decl_file   : 2
-    <9e>   DW_AT_decl_line   : 519
-    <a0>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <3><a3>: Abbrev Number: 5 (DW_TAG_member)
-    <a4>   DW_AT_name        : (indirect string, offset: 0xe7): pixelformat
-    <a8>   DW_AT_type        : <0xff>
-    <ac>   DW_AT_decl_file   : 2
-    <ad>   DW_AT_decl_line   : 520
-    <af>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <3><b2>: Abbrev Number: 5 (DW_TAG_member)
-    <b3>   DW_AT_name        : (indirect string, offset: 0xf3): field
-    <b7>   DW_AT_type        : <0xff>
-    <bb>   DW_AT_decl_file   : 2
-    <bc>   DW_AT_decl_line   : 521
-    <be>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <3><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0xf9): bytesperline
-    <c6>   DW_AT_type        : <0xff>
-    <ca>   DW_AT_decl_file   : 2
-    <cb>   DW_AT_decl_line   : 522
-    <cd>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <3><d0>: Abbrev Number: 5 (DW_TAG_member)
-    <d1>   DW_AT_name        : (indirect string, offset: 0x106): sizeimage
-    <d5>   DW_AT_type        : <0xff>
-    <d9>   DW_AT_decl_file   : 2
-    <da>   DW_AT_decl_line   : 523
-    <dc>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <3><df>: Abbrev Number: 5 (DW_TAG_member)
-    <e0>   DW_AT_name        : (indirect string, offset: 0x110): colorspace
-    <e4>   DW_AT_type        : <0xff>
-    <e8>   DW_AT_decl_file   : 2
-    <e9>   DW_AT_decl_line   : 524
-    <eb>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <3><ee>: Abbrev Number: 5 (DW_TAG_member)
-    <ef>   DW_AT_name        : (indirect string, offset: 0x11b): priv
-    <f3>   DW_AT_type        : <0xff>
-    <f7>   DW_AT_decl_file   : 2
-    <f8>   DW_AT_decl_line   : 525
-    <fa>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <3><fd>: Abbrev Number: 0
- <2><fe>: Abbrev Number: 0
- <1><ff>: Abbrev Number: 3 (DW_TAG_typedef)
-    <100>   DW_AT_type        : <0x10a>
-    <104>   DW_AT_name        : (indirect string, offset: 0xc5): __u32
-    <108>   DW_AT_decl_file   : 1
-    <109>   DW_AT_decl_line   : 28
- <1><10a>: Abbrev Number: 7 (DW_TAG_base_type)
-    <10b>   DW_AT_name        : (indirect string, offset: 0xb8): unsigned int
-    <10f>   DW_AT_encoding    : 7	(unsigned)
-    <110>   DW_AT_byte_size   : 4
- <1><111>: Abbrev Number: 8 (DW_TAG_pointer_type)
- <1><112>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x12b): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x166): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 53
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1fb): struct_v4l2_framebuffer
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 49
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1ea): v4l2_framebuffer
+    <41>   DW_AT_byte_size   : 44
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 520
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x177): capability
+    <4a>   DW_AT_type        : <0x100>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 521
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x195): flags
+    <59>   DW_AT_type        : <0x100>
+    <5d>   DW_AT_decl_file   : 2
+    <5e>   DW_AT_decl_line   : 522
+    <60>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><63>: Abbrev Number: 5 (DW_TAG_member)
+    <64>   DW_AT_name        : (indirect string, offset: 0x19b): base
+    <68>   DW_AT_type        : <0x112>
+    <6c>   DW_AT_decl_file   : 2
+    <6d>   DW_AT_decl_line   : 523
+    <6f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><72>: Abbrev Number: 5 (DW_TAG_member)
+    <73>   DW_AT_name        : (indirect string, offset: 0x1a0): fmt
+    <77>   DW_AT_type        : <0x81>
+    <7b>   DW_AT_decl_file   : 2
+    <7c>   DW_AT_decl_line   : 533
+    <7e>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><81>: Abbrev Number: 6 (DW_TAG_structure_type)
+    <82>   DW_AT_byte_size   : 32
+    <83>   DW_AT_decl_file   : 2
+    <84>   DW_AT_decl_line   : 524
+ <3><86>: Abbrev Number: 5 (DW_TAG_member)
+    <87>   DW_AT_name        : (indirect string, offset: 0x1a4): width
+    <8b>   DW_AT_type        : <0x100>
+    <8f>   DW_AT_decl_file   : 2
+    <90>   DW_AT_decl_line   : 525
+    <92>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <3><95>: Abbrev Number: 5 (DW_TAG_member)
+    <96>   DW_AT_name        : (indirect string, offset: 0x1aa): height
+    <9a>   DW_AT_type        : <0x100>
+    <9e>   DW_AT_decl_file   : 2
+    <9f>   DW_AT_decl_line   : 526
+    <a1>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <3><a4>: Abbrev Number: 5 (DW_TAG_member)
+    <a5>   DW_AT_name        : (indirect string, offset: 0x1b1): pixelformat
+    <a9>   DW_AT_type        : <0x100>
+    <ad>   DW_AT_decl_file   : 2
+    <ae>   DW_AT_decl_line   : 527
+    <b0>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <3><b3>: Abbrev Number: 5 (DW_TAG_member)
+    <b4>   DW_AT_name        : (indirect string, offset: 0x1bd): field
+    <b8>   DW_AT_type        : <0x100>
+    <bc>   DW_AT_decl_file   : 2
+    <bd>   DW_AT_decl_line   : 528
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <3><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x1c3): bytesperline
+    <c7>   DW_AT_type        : <0x100>
+    <cb>   DW_AT_decl_file   : 2
+    <cc>   DW_AT_decl_line   : 529
+    <ce>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <3><d1>: Abbrev Number: 5 (DW_TAG_member)
+    <d2>   DW_AT_name        : (indirect string, offset: 0x1d0): sizeimage
+    <d6>   DW_AT_type        : <0x100>
+    <da>   DW_AT_decl_file   : 2
+    <db>   DW_AT_decl_line   : 530
+    <dd>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <3><e0>: Abbrev Number: 5 (DW_TAG_member)
+    <e1>   DW_AT_name        : (indirect string, offset: 0x1da): colorspace
+    <e5>   DW_AT_type        : <0x100>
+    <e9>   DW_AT_decl_file   : 2
+    <ea>   DW_AT_decl_line   : 531
+    <ec>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <3><ef>: Abbrev Number: 5 (DW_TAG_member)
+    <f0>   DW_AT_name        : (indirect string, offset: 0x1e5): priv
+    <f4>   DW_AT_type        : <0x100>
+    <f8>   DW_AT_decl_file   : 2
+    <f9>   DW_AT_decl_line   : 532
+    <fb>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <3><fe>: Abbrev Number: 0
+ <2><ff>: Abbrev Number: 0
+ <1><100>: Abbrev Number: 3 (DW_TAG_typedef)
+    <101>   DW_AT_type        : <0x10b>
+    <105>   DW_AT_name        : (indirect string, offset: 0x18f): __u32
+    <109>   DW_AT_decl_file   : 1
+    <10a>   DW_AT_decl_line   : 28
+ <1><10b>: Abbrev Number: 7 (DW_TAG_base_type)
+    <10c>   DW_AT_name        : (indirect string, offset: 0x182): unsigned int
+    <110>   DW_AT_encoding    : 7	(unsigned)
+    <111>   DW_AT_byte_size   : 4
+ <1><112>: Abbrev Number: 8 (DW_TAG_pointer_type)
+ <1><113>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_v4l2_framebuffer.d2 b/mpers-m32/struct_v4l2_framebuffer.d2
index ea46f28..00b24c1 100644
--- a/mpers-m32/struct_v4l2_framebuffer.d2
+++ b/mpers-m32/struct_v4l2_framebuffer.d2
@@ -1,122 +1,122 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x9c): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x166): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 53
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x131): struct_v4l2_framebuffer
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1fb): struct_v4l2_framebuffer
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 49
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x120): v4l2_framebuffer
+DW_AT_name        : (indirect string, offset: 0x1ea): v4l2_framebuffer
 DW_AT_byte_size   : 44
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 513
-<2><44>
+DW_AT_decl_line   : 520
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xad): capability
-DW_AT_type        : <0xff>
+DW_AT_name        : (indirect string, offset: 0x177): capability
+DW_AT_type        : <0x100>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 514
+DW_AT_decl_line   : 521
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcb): flags
-DW_AT_type        : <0xff>
+DW_AT_name        : (indirect string, offset: 0x195): flags
+DW_AT_type        : <0x100>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 515
+DW_AT_decl_line   : 522
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><62>
+<2><63>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd1): base
-DW_AT_type        : <0x111>
+DW_AT_name        : (indirect string, offset: 0x19b): base
+DW_AT_type        : <0x112>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 516
+DW_AT_decl_line   : 523
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><71>
+<2><72>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd6): fmt
-DW_AT_type        : <0x80>
+DW_AT_name        : (indirect string, offset: 0x1a0): fmt
+DW_AT_type        : <0x81>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 526
+DW_AT_decl_line   : 533
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<2><80>
+<2><81>
 Abbrev Number: 6 (DW_TAG_structure_type)
 DW_AT_byte_size   : 32
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 517
-<3><85>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xda): width
-DW_AT_type        : <0xff>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 518
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<3><94>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe0): height
-DW_AT_type        : <0xff>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 519
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<3><a3>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe7): pixelformat
-DW_AT_type        : <0xff>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 520
-DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<3><b2>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf3): field
-DW_AT_type        : <0xff>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 521
-DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<3><c1>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf9): bytesperline
-DW_AT_type        : <0xff>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 522
-DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<3><d0>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x106): sizeimage
-DW_AT_type        : <0xff>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 523
-DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<3><df>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x110): colorspace
-DW_AT_type        : <0xff>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 524
-DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<3><ee>
+<3><86>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11b): priv
-DW_AT_type        : <0xff>
+DW_AT_name        : (indirect string, offset: 0x1a4): width
+DW_AT_type        : <0x100>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 525
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<3><95>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1aa): height
+DW_AT_type        : <0x100>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 526
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<3><a4>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1b1): pixelformat
+DW_AT_type        : <0x100>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 527
+DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+<3><b3>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1bd): field
+DW_AT_type        : <0x100>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 528
+DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+<3><c2>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1c3): bytesperline
+DW_AT_type        : <0x100>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 529
+DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+<3><d1>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1d0): sizeimage
+DW_AT_type        : <0x100>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 530
+DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+<3><e0>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1da): colorspace
+DW_AT_type        : <0x100>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 531
+DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+<3><ef>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1e5): priv
+DW_AT_type        : <0x100>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 532
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<1><ff>
+<1><100>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x10a>
-DW_AT_name        : (indirect string, offset: 0xc5): __u32
+DW_AT_type        : <0x10b>
+DW_AT_name        : (indirect string, offset: 0x18f): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><10a>
+<1><10b>
 Abbrev Number: 7 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb8): unsigned int
+DW_AT_name        : (indirect string, offset: 0x182): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><111>
+<1><112>
 Abbrev Number: 8 (DW_TAG_pointer_type)
diff --git a/mpers-m32/struct_v4l2_input.d1 b/mpers-m32/struct_v4l2_input.d1
index d7d4835..45bda20 100644
--- a/mpers-m32/struct_v4l2_input.d1
+++ b/mpers-m32/struct_v4l2_input.d1
@@ -1,137 +1,138 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x12c (32-bit)
+   Length:        0x12d (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_v4l2_input.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_v4l2_input.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5b): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x96): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 53
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x14a): struct_v4l2_input
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 50
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x13f): v4l2_input
-    <40>   DW_AT_byte_size   : 80
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 728
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xa7): index
-    <49>   DW_AT_type        : <0xcc>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 729
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xc0): name
-    <58>   DW_AT_type        : <0xde>
-    <5c>   DW_AT_decl_file   : 2
-    <5d>   DW_AT_decl_line   : 730
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><62>: Abbrev Number: 5 (DW_TAG_member)
-    <63>   DW_AT_name        : (indirect string, offset: 0xe1): type
-    <67>   DW_AT_type        : <0xcc>
-    <6b>   DW_AT_decl_file   : 2
-    <6c>   DW_AT_decl_line   : 731
-    <6e>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><71>: Abbrev Number: 5 (DW_TAG_member)
-    <72>   DW_AT_name        : (indirect string, offset: 0xe6): audioset
-    <76>   DW_AT_type        : <0xcc>
-    <7a>   DW_AT_decl_file   : 2
-    <7b>   DW_AT_decl_line   : 732
-    <7d>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><80>: Abbrev Number: 5 (DW_TAG_member)
-    <81>   DW_AT_name        : (indirect string, offset: 0xef): tuner
-    <85>   DW_AT_type        : <0xcc>
-    <89>   DW_AT_decl_file   : 2
-    <8a>   DW_AT_decl_line   : 733
-    <8c>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><8f>: Abbrev Number: 5 (DW_TAG_member)
-    <90>   DW_AT_name        : (indirect string, offset: 0xf5): std
-    <94>   DW_AT_type        : <0x104>
-    <98>   DW_AT_decl_file   : 2
-    <99>   DW_AT_decl_line   : 734
-    <9b>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><9e>: Abbrev Number: 5 (DW_TAG_member)
-    <9f>   DW_AT_name        : (indirect string, offset: 0x122): status
-    <a3>   DW_AT_type        : <0xcc>
-    <a7>   DW_AT_decl_file   : 2
-    <a8>   DW_AT_decl_line   : 735
-    <aa>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><ad>: Abbrev Number: 5 (DW_TAG_member)
-    <ae>   DW_AT_name        : (indirect string, offset: 0x129): capabilities
-    <b2>   DW_AT_type        : <0xcc>
-    <b6>   DW_AT_decl_file   : 2
-    <b7>   DW_AT_decl_line   : 736
-    <b9>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
- <2><bc>: Abbrev Number: 5 (DW_TAG_member)
-    <bd>   DW_AT_name        : (indirect string, offset: 0x136): reserved
-    <c1>   DW_AT_type        : <0x122>
-    <c5>   DW_AT_decl_file   : 2
-    <c6>   DW_AT_decl_line   : 737
-    <c8>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
- <2><cb>: Abbrev Number: 0
- <1><cc>: Abbrev Number: 3 (DW_TAG_typedef)
-    <cd>   DW_AT_type        : <0xd7>
-    <d1>   DW_AT_name        : (indirect string, offset: 0xba): __u32
-    <d5>   DW_AT_decl_file   : 1
-    <d6>   DW_AT_decl_line   : 28
- <1><d7>: Abbrev Number: 6 (DW_TAG_base_type)
-    <d8>   DW_AT_name        : (indirect string, offset: 0xad): unsigned int
-    <dc>   DW_AT_encoding    : 7	(unsigned)
-    <dd>   DW_AT_byte_size   : 4
- <1><de>: Abbrev Number: 7 (DW_TAG_array_type)
-    <df>   DW_AT_type        : <0xeb>
- <2><e3>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <e4>   DW_AT_type        : <0xfd>
-    <e8>   DW_AT_lower_bound : 0
-    <e9>   DW_AT_count       : 32
- <2><ea>: Abbrev Number: 0
- <1><eb>: Abbrev Number: 3 (DW_TAG_typedef)
-    <ec>   DW_AT_type        : <0xf6>
-    <f0>   DW_AT_name        : (indirect string, offset: 0xd3): __u8
-    <f4>   DW_AT_decl_file   : 1
-    <f5>   DW_AT_decl_line   : 24
- <1><f6>: Abbrev Number: 6 (DW_TAG_base_type)
-    <f7>   DW_AT_name        : (indirect string, offset: 0xc5): unsigned char
-    <fb>   DW_AT_encoding    : 8	(unsigned char)
-    <fc>   DW_AT_byte_size   : 1
- <1><fd>: Abbrev Number: 9 (DW_TAG_base_type)
-    <fe>   DW_AT_name        : (indirect string, offset: 0xd8): sizetype
-    <102>   DW_AT_byte_size   : 8
-    <103>   DW_AT_encoding    : 7	(unsigned)
- <1><104>: Abbrev Number: 10 (DW_TAG_typedef)
-    <105>   DW_AT_type        : <0x110>
-    <109>   DW_AT_name        : (indirect string, offset: 0x116): v4l2_std_id
-    <10d>   DW_AT_decl_file   : 2
-    <10e>   DW_AT_decl_line   : 591
- <1><110>: Abbrev Number: 3 (DW_TAG_typedef)
-    <111>   DW_AT_type        : <0x11b>
-    <115>   DW_AT_name        : (indirect string, offset: 0x110): __u64
-    <119>   DW_AT_decl_file   : 1
-    <11a>   DW_AT_decl_line   : 31
- <1><11b>: Abbrev Number: 6 (DW_TAG_base_type)
-    <11c>   DW_AT_name        : (indirect string, offset: 0xf9): long long unsigned int
-    <120>   DW_AT_encoding    : 7	(unsigned)
-    <121>   DW_AT_byte_size   : 8
- <1><122>: Abbrev Number: 7 (DW_TAG_array_type)
-    <123>   DW_AT_type        : <0xcc>
- <2><127>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <128>   DW_AT_type        : <0xfd>
-    <12c>   DW_AT_lower_bound : 0
-    <12d>   DW_AT_count       : 3
- <2><12e>: Abbrev Number: 0
- <1><12f>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x125): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x160): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 53
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x214): struct_v4l2_input
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 50
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x209): v4l2_input
+    <41>   DW_AT_byte_size   : 80
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 735
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x171): index
+    <4a>   DW_AT_type        : <0xcd>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 736
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x18a): name
+    <59>   DW_AT_type        : <0xdf>
+    <5d>   DW_AT_decl_file   : 2
+    <5e>   DW_AT_decl_line   : 737
+    <60>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><63>: Abbrev Number: 5 (DW_TAG_member)
+    <64>   DW_AT_name        : (indirect string, offset: 0x1ab): type
+    <68>   DW_AT_type        : <0xcd>
+    <6c>   DW_AT_decl_file   : 2
+    <6d>   DW_AT_decl_line   : 738
+    <6f>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><72>: Abbrev Number: 5 (DW_TAG_member)
+    <73>   DW_AT_name        : (indirect string, offset: 0x1b0): audioset
+    <77>   DW_AT_type        : <0xcd>
+    <7b>   DW_AT_decl_file   : 2
+    <7c>   DW_AT_decl_line   : 739
+    <7e>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><81>: Abbrev Number: 5 (DW_TAG_member)
+    <82>   DW_AT_name        : (indirect string, offset: 0x1b9): tuner
+    <86>   DW_AT_type        : <0xcd>
+    <8a>   DW_AT_decl_file   : 2
+    <8b>   DW_AT_decl_line   : 740
+    <8d>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><90>: Abbrev Number: 5 (DW_TAG_member)
+    <91>   DW_AT_name        : (indirect string, offset: 0x1bf): std
+    <95>   DW_AT_type        : <0x105>
+    <99>   DW_AT_decl_file   : 2
+    <9a>   DW_AT_decl_line   : 741
+    <9c>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><9f>: Abbrev Number: 5 (DW_TAG_member)
+    <a0>   DW_AT_name        : (indirect string, offset: 0x1ec): status
+    <a4>   DW_AT_type        : <0xcd>
+    <a8>   DW_AT_decl_file   : 2
+    <a9>   DW_AT_decl_line   : 742
+    <ab>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><ae>: Abbrev Number: 5 (DW_TAG_member)
+    <af>   DW_AT_name        : (indirect string, offset: 0x1f3): capabilities
+    <b3>   DW_AT_type        : <0xcd>
+    <b7>   DW_AT_decl_file   : 2
+    <b8>   DW_AT_decl_line   : 743
+    <ba>   DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+ <2><bd>: Abbrev Number: 5 (DW_TAG_member)
+    <be>   DW_AT_name        : (indirect string, offset: 0x200): reserved
+    <c2>   DW_AT_type        : <0x123>
+    <c6>   DW_AT_decl_file   : 2
+    <c7>   DW_AT_decl_line   : 744
+    <c9>   DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
+ <2><cc>: Abbrev Number: 0
+ <1><cd>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ce>   DW_AT_type        : <0xd8>
+    <d2>   DW_AT_name        : (indirect string, offset: 0x184): __u32
+    <d6>   DW_AT_decl_file   : 1
+    <d7>   DW_AT_decl_line   : 28
+ <1><d8>: Abbrev Number: 6 (DW_TAG_base_type)
+    <d9>   DW_AT_name        : (indirect string, offset: 0x177): unsigned int
+    <dd>   DW_AT_encoding    : 7	(unsigned)
+    <de>   DW_AT_byte_size   : 4
+ <1><df>: Abbrev Number: 7 (DW_TAG_array_type)
+    <e0>   DW_AT_type        : <0xec>
+ <2><e4>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <e5>   DW_AT_type        : <0xfe>
+    <e9>   DW_AT_lower_bound : 0
+    <ea>   DW_AT_count       : 32
+ <2><eb>: Abbrev Number: 0
+ <1><ec>: Abbrev Number: 3 (DW_TAG_typedef)
+    <ed>   DW_AT_type        : <0xf7>
+    <f1>   DW_AT_name        : (indirect string, offset: 0x19d): __u8
+    <f5>   DW_AT_decl_file   : 1
+    <f6>   DW_AT_decl_line   : 24
+ <1><f7>: Abbrev Number: 6 (DW_TAG_base_type)
+    <f8>   DW_AT_name        : (indirect string, offset: 0x18f): unsigned char
+    <fc>   DW_AT_encoding    : 8	(unsigned char)
+    <fd>   DW_AT_byte_size   : 1
+ <1><fe>: Abbrev Number: 9 (DW_TAG_base_type)
+    <ff>   DW_AT_name        : (indirect string, offset: 0x1a2): sizetype
+    <103>   DW_AT_byte_size   : 8
+    <104>   DW_AT_encoding    : 7	(unsigned)
+ <1><105>: Abbrev Number: 10 (DW_TAG_typedef)
+    <106>   DW_AT_type        : <0x111>
+    <10a>   DW_AT_name        : (indirect string, offset: 0x1e0): v4l2_std_id
+    <10e>   DW_AT_decl_file   : 2
+    <10f>   DW_AT_decl_line   : 598
+ <1><111>: Abbrev Number: 3 (DW_TAG_typedef)
+    <112>   DW_AT_type        : <0x11c>
+    <116>   DW_AT_name        : (indirect string, offset: 0x1da): __u64
+    <11a>   DW_AT_decl_file   : 1
+    <11b>   DW_AT_decl_line   : 31
+ <1><11c>: Abbrev Number: 6 (DW_TAG_base_type)
+    <11d>   DW_AT_name        : (indirect string, offset: 0x1c3): long long unsigned int
+    <121>   DW_AT_encoding    : 7	(unsigned)
+    <122>   DW_AT_byte_size   : 8
+ <1><123>: Abbrev Number: 7 (DW_TAG_array_type)
+    <124>   DW_AT_type        : <0xcd>
+ <2><128>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <129>   DW_AT_type        : <0xfe>
+    <12d>   DW_AT_lower_bound : 0
+    <12e>   DW_AT_count       : 3
+ <2><12f>: Abbrev Number: 0
+ <1><130>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_v4l2_input.d2 b/mpers-m32/struct_v4l2_input.d2
index 55ca5fe..01e7065 100644
--- a/mpers-m32/struct_v4l2_input.d2
+++ b/mpers-m32/struct_v4l2_input.d2
@@ -1,143 +1,143 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x96): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x160): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 53
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x14a): struct_v4l2_input
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x214): struct_v4l2_input
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 50
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x13f): v4l2_input
+DW_AT_name        : (indirect string, offset: 0x209): v4l2_input
 DW_AT_byte_size   : 80
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 728
-<2><44>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa7): index
-DW_AT_type        : <0xcc>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 729
-DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc0): name
-DW_AT_type        : <0xde>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 730
-DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><62>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe1): type
-DW_AT_type        : <0xcc>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 731
-DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><71>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe6): audioset
-DW_AT_type        : <0xcc>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 732
-DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><80>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xef): tuner
-DW_AT_type        : <0xcc>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 733
-DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><8f>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf5): std
-DW_AT_type        : <0x104>
-DW_AT_decl_file   : 2
-DW_AT_decl_line   : 734
-DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><9e>
-Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x122): status
-DW_AT_type        : <0xcc>
-DW_AT_decl_file   : 2
 DW_AT_decl_line   : 735
-DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<2><ad>
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x129): capabilities
-DW_AT_type        : <0xcc>
+DW_AT_name        : (indirect string, offset: 0x171): index
+DW_AT_type        : <0xcd>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 736
-DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
-<2><bc>
+DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x136): reserved
-DW_AT_type        : <0x122>
+DW_AT_name        : (indirect string, offset: 0x18a): name
+DW_AT_type        : <0xdf>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 737
+DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+<2><63>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ab): type
+DW_AT_type        : <0xcd>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 738
+DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+<2><72>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1b0): audioset
+DW_AT_type        : <0xcd>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 739
+DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+<2><81>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1b9): tuner
+DW_AT_type        : <0xcd>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 740
+DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+<2><90>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1bf): std
+DW_AT_type        : <0x105>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 741
+DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+<2><9f>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1ec): status
+DW_AT_type        : <0xcd>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 742
+DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+<2><ae>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x1f3): capabilities
+DW_AT_type        : <0xcd>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 743
+DW_AT_data_member_location: 2 byte block: 23 3c 	(DW_OP_plus_uconst: 60)
+<2><bd>
+Abbrev Number: 5 (DW_TAG_member)
+DW_AT_name        : (indirect string, offset: 0x200): reserved
+DW_AT_type        : <0x123>
+DW_AT_decl_file   : 2
+DW_AT_decl_line   : 744
 DW_AT_data_member_location: 2 byte block: 23 40 	(DW_OP_plus_uconst: 64)
-<1><cc>
+<1><cd>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xd7>
-DW_AT_name        : (indirect string, offset: 0xba): __u32
+DW_AT_type        : <0xd8>
+DW_AT_name        : (indirect string, offset: 0x184): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><d7>
+<1><d8>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xad): unsigned int
+DW_AT_name        : (indirect string, offset: 0x177): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><de>
+<1><df>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0xeb>
-<2><e3>
+DW_AT_type        : <0xec>
+<2><e4>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0xfd>
+DW_AT_type        : <0xfe>
 DW_AT_lower_bound : 0
 DW_AT_count       : 32
-<1><eb>
+<1><ec>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xf6>
-DW_AT_name        : (indirect string, offset: 0xd3): __u8
+DW_AT_type        : <0xf7>
+DW_AT_name        : (indirect string, offset: 0x19d): __u8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
-<1><f6>
+<1><f7>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc5): unsigned char
+DW_AT_name        : (indirect string, offset: 0x18f): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><fd>
+<1><fe>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xd8): sizetype
+DW_AT_name        : (indirect string, offset: 0x1a2): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><104>
+<1><105>
 Abbrev Number: 10 (DW_TAG_typedef)
-DW_AT_type        : <0x110>
-DW_AT_name        : (indirect string, offset: 0x116): v4l2_std_id
+DW_AT_type        : <0x111>
+DW_AT_name        : (indirect string, offset: 0x1e0): v4l2_std_id
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 591
-<1><110>
+DW_AT_decl_line   : 598
+<1><111>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x11b>
-DW_AT_name        : (indirect string, offset: 0x110): __u64
+DW_AT_type        : <0x11c>
+DW_AT_name        : (indirect string, offset: 0x1da): __u64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
-<1><11b>
+<1><11c>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xf9): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x1c3): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
-<1><122>
+<1><123>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0xcc>
-<2><127>
+DW_AT_type        : <0xcd>
+<2><128>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0xfd>
+DW_AT_type        : <0xfe>
 DW_AT_lower_bound : 0
 DW_AT_count       : 3
diff --git a/mpers-m32/struct_v4l2_standard.d1 b/mpers-m32/struct_v4l2_standard.d1
index 74db884..1cdaccc 100644
--- a/mpers-m32/struct_v4l2_standard.d1
+++ b/mpers-m32/struct_v4l2_standard.d1
@@ -1,137 +1,138 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x124 (32-bit)
+   Length:        0x125 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/struct_v4l2_standard.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/struct_v4l2_standard.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x5e): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x99): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 53
-    <2a>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x15f): struct_v4l2_standard
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 51
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x151): v4l2_standard
-    <40>   DW_AT_byte_size   : 72
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 638
- <2><44>: Abbrev Number: 5 (DW_TAG_member)
-    <45>   DW_AT_name        : (indirect string, offset: 0xaa): index
-    <49>   DW_AT_type        : <0x9f>
-    <4d>   DW_AT_decl_file   : 2
-    <4e>   DW_AT_decl_line   : 639
-    <50>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><53>: Abbrev Number: 5 (DW_TAG_member)
-    <54>   DW_AT_name        : (indirect string, offset: 0xc3): id
-    <58>   DW_AT_type        : <0xb1>
-    <5c>   DW_AT_decl_file   : 2
-    <5d>   DW_AT_decl_line   : 640
-    <5f>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><62>: Abbrev Number: 5 (DW_TAG_member)
-    <63>   DW_AT_name        : (indirect string, offset: 0xef): name
-    <67>   DW_AT_type        : <0xcf>
-    <6b>   DW_AT_decl_file   : 2
-    <6c>   DW_AT_decl_line   : 641
-    <6e>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><71>: Abbrev Number: 5 (DW_TAG_member)
-    <72>   DW_AT_name        : (indirect string, offset: 0x110): frameperiod
-    <76>   DW_AT_type        : <0xf5>
-    <7a>   DW_AT_decl_file   : 2
-    <7b>   DW_AT_decl_line   : 642
-    <7d>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><80>: Abbrev Number: 5 (DW_TAG_member)
-    <81>   DW_AT_name        : (indirect string, offset: 0x13d): framelines
-    <85>   DW_AT_type        : <0x9f>
-    <89>   DW_AT_decl_file   : 2
-    <8a>   DW_AT_decl_line   : 643
-    <8c>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><8f>: Abbrev Number: 5 (DW_TAG_member)
-    <90>   DW_AT_name        : (indirect string, offset: 0x148): reserved
-    <94>   DW_AT_type        : <0x11a>
-    <98>   DW_AT_decl_file   : 2
-    <99>   DW_AT_decl_line   : 644
-    <9b>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <2><9e>: Abbrev Number: 0
- <1><9f>: Abbrev Number: 3 (DW_TAG_typedef)
-    <a0>   DW_AT_type        : <0xaa>
-    <a4>   DW_AT_name        : (indirect string, offset: 0xbd): __u32
-    <a8>   DW_AT_decl_file   : 1
-    <a9>   DW_AT_decl_line   : 28
- <1><aa>: Abbrev Number: 6 (DW_TAG_base_type)
-    <ab>   DW_AT_name        : (indirect string, offset: 0xb0): unsigned int
-    <af>   DW_AT_encoding    : 7	(unsigned)
-    <b0>   DW_AT_byte_size   : 4
- <1><b1>: Abbrev Number: 7 (DW_TAG_typedef)
-    <b2>   DW_AT_type        : <0xbd>
-    <b6>   DW_AT_name        : (indirect string, offset: 0xe3): v4l2_std_id
-    <ba>   DW_AT_decl_file   : 2
-    <bb>   DW_AT_decl_line   : 591
- <1><bd>: Abbrev Number: 3 (DW_TAG_typedef)
-    <be>   DW_AT_type        : <0xc8>
-    <c2>   DW_AT_name        : (indirect string, offset: 0xdd): __u64
-    <c6>   DW_AT_decl_file   : 1
-    <c7>   DW_AT_decl_line   : 31
- <1><c8>: Abbrev Number: 6 (DW_TAG_base_type)
-    <c9>   DW_AT_name        : (indirect string, offset: 0xc6): long long unsigned int
-    <cd>   DW_AT_encoding    : 7	(unsigned)
-    <ce>   DW_AT_byte_size   : 8
- <1><cf>: Abbrev Number: 8 (DW_TAG_array_type)
-    <d0>   DW_AT_type        : <0xdc>
- <2><d4>: Abbrev Number: 9 (DW_TAG_subrange_type)
-    <d5>   DW_AT_type        : <0xee>
-    <d9>   DW_AT_lower_bound : 0
-    <da>   DW_AT_count       : 24
- <2><db>: Abbrev Number: 0
- <1><dc>: Abbrev Number: 3 (DW_TAG_typedef)
-    <dd>   DW_AT_type        : <0xe7>
-    <e1>   DW_AT_name        : (indirect string, offset: 0x102): __u8
-    <e5>   DW_AT_decl_file   : 1
-    <e6>   DW_AT_decl_line   : 24
- <1><e7>: Abbrev Number: 6 (DW_TAG_base_type)
-    <e8>   DW_AT_name        : (indirect string, offset: 0xf4): unsigned char
-    <ec>   DW_AT_encoding    : 8	(unsigned char)
-    <ed>   DW_AT_byte_size   : 1
- <1><ee>: Abbrev Number: 10 (DW_TAG_base_type)
-    <ef>   DW_AT_name        : (indirect string, offset: 0x107): sizetype
-    <f3>   DW_AT_byte_size   : 8
-    <f4>   DW_AT_encoding    : 7	(unsigned)
- <1><f5>: Abbrev Number: 11 (DW_TAG_structure_type)
-    <f6>   DW_AT_name        : (indirect string, offset: 0x132): v4l2_fract
-    <fa>   DW_AT_byte_size   : 8
-    <fb>   DW_AT_decl_file   : 2
-    <fc>   DW_AT_decl_line   : 141
- <2><fd>: Abbrev Number: 12 (DW_TAG_member)
-    <fe>   DW_AT_name        : (indirect string, offset: 0x11c): numerator
-    <102>   DW_AT_type        : <0x9f>
-    <106>   DW_AT_decl_file   : 2
-    <107>   DW_AT_decl_line   : 142
-    <108>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><10b>: Abbrev Number: 12 (DW_TAG_member)
-    <10c>   DW_AT_name        : (indirect string, offset: 0x126): denominator
-    <110>   DW_AT_type        : <0x9f>
-    <114>   DW_AT_decl_file   : 2
-    <115>   DW_AT_decl_line   : 143
-    <116>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><119>: Abbrev Number: 0
- <1><11a>: Abbrev Number: 8 (DW_TAG_array_type)
-    <11b>   DW_AT_type        : <0x9f>
- <2><11f>: Abbrev Number: 9 (DW_TAG_subrange_type)
-    <120>   DW_AT_type        : <0xee>
-    <124>   DW_AT_lower_bound : 0
-    <125>   DW_AT_count       : 4
- <2><126>: Abbrev Number: 0
- <1><127>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x128): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x163): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 53
+    <2b>   DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x229): struct_v4l2_standard
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 51
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x21b): v4l2_standard
+    <41>   DW_AT_byte_size   : 72
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 645
+ <2><45>: Abbrev Number: 5 (DW_TAG_member)
+    <46>   DW_AT_name        : (indirect string, offset: 0x174): index
+    <4a>   DW_AT_type        : <0xa0>
+    <4e>   DW_AT_decl_file   : 2
+    <4f>   DW_AT_decl_line   : 646
+    <51>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><54>: Abbrev Number: 5 (DW_TAG_member)
+    <55>   DW_AT_name        : (indirect string, offset: 0x18d): id
+    <59>   DW_AT_type        : <0xb2>
+    <5d>   DW_AT_decl_file   : 2
+    <5e>   DW_AT_decl_line   : 647
+    <60>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><63>: Abbrev Number: 5 (DW_TAG_member)
+    <64>   DW_AT_name        : (indirect string, offset: 0x1b9): name
+    <68>   DW_AT_type        : <0xd0>
+    <6c>   DW_AT_decl_file   : 2
+    <6d>   DW_AT_decl_line   : 648
+    <6f>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><72>: Abbrev Number: 5 (DW_TAG_member)
+    <73>   DW_AT_name        : (indirect string, offset: 0x1da): frameperiod
+    <77>   DW_AT_type        : <0xf6>
+    <7b>   DW_AT_decl_file   : 2
+    <7c>   DW_AT_decl_line   : 649
+    <7e>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><81>: Abbrev Number: 5 (DW_TAG_member)
+    <82>   DW_AT_name        : (indirect string, offset: 0x207): framelines
+    <86>   DW_AT_type        : <0xa0>
+    <8a>   DW_AT_decl_file   : 2
+    <8b>   DW_AT_decl_line   : 650
+    <8d>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><90>: Abbrev Number: 5 (DW_TAG_member)
+    <91>   DW_AT_name        : (indirect string, offset: 0x212): reserved
+    <95>   DW_AT_type        : <0x11b>
+    <99>   DW_AT_decl_file   : 2
+    <9a>   DW_AT_decl_line   : 651
+    <9c>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <2><9f>: Abbrev Number: 0
+ <1><a0>: Abbrev Number: 3 (DW_TAG_typedef)
+    <a1>   DW_AT_type        : <0xab>
+    <a5>   DW_AT_name        : (indirect string, offset: 0x187): __u32
+    <a9>   DW_AT_decl_file   : 1
+    <aa>   DW_AT_decl_line   : 28
+ <1><ab>: Abbrev Number: 6 (DW_TAG_base_type)
+    <ac>   DW_AT_name        : (indirect string, offset: 0x17a): unsigned int
+    <b0>   DW_AT_encoding    : 7	(unsigned)
+    <b1>   DW_AT_byte_size   : 4
+ <1><b2>: Abbrev Number: 7 (DW_TAG_typedef)
+    <b3>   DW_AT_type        : <0xbe>
+    <b7>   DW_AT_name        : (indirect string, offset: 0x1ad): v4l2_std_id
+    <bb>   DW_AT_decl_file   : 2
+    <bc>   DW_AT_decl_line   : 598
+ <1><be>: Abbrev Number: 3 (DW_TAG_typedef)
+    <bf>   DW_AT_type        : <0xc9>
+    <c3>   DW_AT_name        : (indirect string, offset: 0x1a7): __u64
+    <c7>   DW_AT_decl_file   : 1
+    <c8>   DW_AT_decl_line   : 31
+ <1><c9>: Abbrev Number: 6 (DW_TAG_base_type)
+    <ca>   DW_AT_name        : (indirect string, offset: 0x190): long long unsigned int
+    <ce>   DW_AT_encoding    : 7	(unsigned)
+    <cf>   DW_AT_byte_size   : 8
+ <1><d0>: Abbrev Number: 8 (DW_TAG_array_type)
+    <d1>   DW_AT_type        : <0xdd>
+ <2><d5>: Abbrev Number: 9 (DW_TAG_subrange_type)
+    <d6>   DW_AT_type        : <0xef>
+    <da>   DW_AT_lower_bound : 0
+    <db>   DW_AT_count       : 24
+ <2><dc>: Abbrev Number: 0
+ <1><dd>: Abbrev Number: 3 (DW_TAG_typedef)
+    <de>   DW_AT_type        : <0xe8>
+    <e2>   DW_AT_name        : (indirect string, offset: 0x1cc): __u8
+    <e6>   DW_AT_decl_file   : 1
+    <e7>   DW_AT_decl_line   : 24
+ <1><e8>: Abbrev Number: 6 (DW_TAG_base_type)
+    <e9>   DW_AT_name        : (indirect string, offset: 0x1be): unsigned char
+    <ed>   DW_AT_encoding    : 8	(unsigned char)
+    <ee>   DW_AT_byte_size   : 1
+ <1><ef>: Abbrev Number: 10 (DW_TAG_base_type)
+    <f0>   DW_AT_name        : (indirect string, offset: 0x1d1): sizetype
+    <f4>   DW_AT_byte_size   : 8
+    <f5>   DW_AT_encoding    : 7	(unsigned)
+ <1><f6>: Abbrev Number: 11 (DW_TAG_structure_type)
+    <f7>   DW_AT_name        : (indirect string, offset: 0x1fc): v4l2_fract
+    <fb>   DW_AT_byte_size   : 8
+    <fc>   DW_AT_decl_file   : 2
+    <fd>   DW_AT_decl_line   : 141
+ <2><fe>: Abbrev Number: 12 (DW_TAG_member)
+    <ff>   DW_AT_name        : (indirect string, offset: 0x1e6): numerator
+    <103>   DW_AT_type        : <0xa0>
+    <107>   DW_AT_decl_file   : 2
+    <108>   DW_AT_decl_line   : 142
+    <109>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><10c>: Abbrev Number: 12 (DW_TAG_member)
+    <10d>   DW_AT_name        : (indirect string, offset: 0x1f0): denominator
+    <111>   DW_AT_type        : <0xa0>
+    <115>   DW_AT_decl_file   : 2
+    <116>   DW_AT_decl_line   : 143
+    <117>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><11a>: Abbrev Number: 0
+ <1><11b>: Abbrev Number: 8 (DW_TAG_array_type)
+    <11c>   DW_AT_type        : <0xa0>
+ <2><120>: Abbrev Number: 9 (DW_TAG_subrange_type)
+    <121>   DW_AT_type        : <0xef>
+    <125>   DW_AT_lower_bound : 0
+    <126>   DW_AT_count       : 4
+ <2><127>: Abbrev Number: 0
+ <1><128>: Abbrev Number: 0
 
diff --git a/mpers-m32/struct_v4l2_standard.d2 b/mpers-m32/struct_v4l2_standard.d2
index dd29557..e43b962 100644
--- a/mpers-m32/struct_v4l2_standard.d2
+++ b/mpers-m32/struct_v4l2_standard.d2
@@ -1,142 +1,142 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x99): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x163): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 53
 DW_AT_location    : 5 byte block: 3 8 0 0 0 	(DW_OP_addr: 8)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x15f): struct_v4l2_standard
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x229): struct_v4l2_standard
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 51
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x151): v4l2_standard
+DW_AT_name        : (indirect string, offset: 0x21b): v4l2_standard
 DW_AT_byte_size   : 72
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 638
-<2><44>
+DW_AT_decl_line   : 645
+<2><45>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xaa): index
-DW_AT_type        : <0x9f>
+DW_AT_name        : (indirect string, offset: 0x174): index
+DW_AT_type        : <0xa0>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 639
+DW_AT_decl_line   : 646
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><53>
+<2><54>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xc3): id
-DW_AT_type        : <0xb1>
+DW_AT_name        : (indirect string, offset: 0x18d): id
+DW_AT_type        : <0xb2>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 640
+DW_AT_decl_line   : 647
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><62>
+<2><63>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xef): name
-DW_AT_type        : <0xcf>
+DW_AT_name        : (indirect string, offset: 0x1b9): name
+DW_AT_type        : <0xd0>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 641
+DW_AT_decl_line   : 648
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><71>
+<2><72>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x110): frameperiod
-DW_AT_type        : <0xf5>
+DW_AT_name        : (indirect string, offset: 0x1da): frameperiod
+DW_AT_type        : <0xf6>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 642
+DW_AT_decl_line   : 649
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><80>
+<2><81>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x13d): framelines
-DW_AT_type        : <0x9f>
+DW_AT_name        : (indirect string, offset: 0x207): framelines
+DW_AT_type        : <0xa0>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 643
+DW_AT_decl_line   : 650
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><8f>
+<2><90>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x148): reserved
-DW_AT_type        : <0x11a>
+DW_AT_name        : (indirect string, offset: 0x212): reserved
+DW_AT_type        : <0x11b>
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 644
+DW_AT_decl_line   : 651
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<1><9f>
+<1><a0>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xaa>
-DW_AT_name        : (indirect string, offset: 0xbd): __u32
+DW_AT_type        : <0xab>
+DW_AT_name        : (indirect string, offset: 0x187): __u32
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 28
-<1><aa>
+<1><ab>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xb0): unsigned int
+DW_AT_name        : (indirect string, offset: 0x17a): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><b1>
+<1><b2>
 Abbrev Number: 7 (DW_TAG_typedef)
-DW_AT_type        : <0xbd>
-DW_AT_name        : (indirect string, offset: 0xe3): v4l2_std_id
+DW_AT_type        : <0xbe>
+DW_AT_name        : (indirect string, offset: 0x1ad): v4l2_std_id
 DW_AT_decl_file   : 2
-DW_AT_decl_line   : 591
-<1><bd>
+DW_AT_decl_line   : 598
+<1><be>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xc8>
-DW_AT_name        : (indirect string, offset: 0xdd): __u64
+DW_AT_type        : <0xc9>
+DW_AT_name        : (indirect string, offset: 0x1a7): __u64
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 31
-<1><c8>
+<1><c9>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc6): long long unsigned int
+DW_AT_name        : (indirect string, offset: 0x190): long long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 8
-<1><cf>
+<1><d0>
 Abbrev Number: 8 (DW_TAG_array_type)
-DW_AT_type        : <0xdc>
-<2><d4>
+DW_AT_type        : <0xdd>
+<2><d5>
 Abbrev Number: 9 (DW_TAG_subrange_type)
-DW_AT_type        : <0xee>
+DW_AT_type        : <0xef>
 DW_AT_lower_bound : 0
 DW_AT_count       : 24
-<1><dc>
+<1><dd>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0xe7>
-DW_AT_name        : (indirect string, offset: 0x102): __u8
+DW_AT_type        : <0xe8>
+DW_AT_name        : (indirect string, offset: 0x1cc): __u8
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
-<1><e7>
+<1><e8>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xf4): unsigned char
+DW_AT_name        : (indirect string, offset: 0x1be): unsigned char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
-<1><ee>
+<1><ef>
 Abbrev Number: 10 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x107): sizetype
+DW_AT_name        : (indirect string, offset: 0x1d1): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><f5>
+<1><f6>
 Abbrev Number: 11 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x132): v4l2_fract
+DW_AT_name        : (indirect string, offset: 0x1fc): v4l2_fract
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 141
-<2><fd>
+<2><fe>
 Abbrev Number: 12 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x11c): numerator
-DW_AT_type        : <0x9f>
+DW_AT_name        : (indirect string, offset: 0x1e6): numerator
+DW_AT_type        : <0xa0>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 142
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><10b>
+<2><10c>
 Abbrev Number: 12 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x126): denominator
-DW_AT_type        : <0x9f>
+DW_AT_name        : (indirect string, offset: 0x1f0): denominator
+DW_AT_type        : <0xa0>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 143
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><11a>
+<1><11b>
 Abbrev Number: 8 (DW_TAG_array_type)
-DW_AT_type        : <0x9f>
-<2><11f>
+DW_AT_type        : <0xa0>
+<2><120>
 Abbrev Number: 9 (DW_TAG_subrange_type)
-DW_AT_type        : <0xee>
+DW_AT_type        : <0xef>
 DW_AT_lower_bound : 0
 DW_AT_count       : 4
diff --git a/mpers-m32/sysinfo_t.d1 b/mpers-m32/sysinfo_t.d1
index 60bbc41..1316de0 100644
--- a/mpers-m32/sysinfo_t.d1
+++ b/mpers-m32/sysinfo_t.d1
@@ -1,175 +1,176 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x175 (32-bit)
+   Length:        0x176 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/sysinfo_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/sysinfo_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x53): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 4
-    <29>   DW_AT_decl_line   : 39
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0x187): sysinfo_t
-    <39>   DW_AT_decl_file   : 4
-    <3a>   DW_AT_decl_line   : 38
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0x17f): sysinfo
-    <40>   DW_AT_byte_size   : 64
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 23
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0x9f): uptime
-    <48>   DW_AT_type        : <0x108>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 24
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xbf): loads
-    <56>   DW_AT_type        : <0x11a>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 25
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xf1): totalram
-    <64>   DW_AT_type        : <0x127>
-    <68>   DW_AT_decl_file   : 2
-    <69>   DW_AT_decl_line   : 26
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xfa): freeram
-    <72>   DW_AT_type        : <0x127>
-    <76>   DW_AT_decl_file   : 2
-    <77>   DW_AT_decl_line   : 27
-    <78>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
- <2><7b>: Abbrev Number: 5 (DW_TAG_member)
-    <7c>   DW_AT_name        : (indirect string, offset: 0x102): sharedram
-    <80>   DW_AT_type        : <0x127>
-    <84>   DW_AT_decl_file   : 2
-    <85>   DW_AT_decl_line   : 28
-    <86>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
- <2><89>: Abbrev Number: 5 (DW_TAG_member)
-    <8a>   DW_AT_name        : (indirect string, offset: 0x10c): bufferram
-    <8e>   DW_AT_type        : <0x127>
-    <92>   DW_AT_decl_file   : 2
-    <93>   DW_AT_decl_line   : 29
-    <94>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
- <2><97>: Abbrev Number: 5 (DW_TAG_member)
-    <98>   DW_AT_name        : (indirect string, offset: 0x116): totalswap
-    <9c>   DW_AT_type        : <0x127>
-    <a0>   DW_AT_decl_file   : 2
-    <a1>   DW_AT_decl_line   : 30
-    <a2>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
- <2><a5>: Abbrev Number: 5 (DW_TAG_member)
-    <a6>   DW_AT_name        : (indirect string, offset: 0x120): freeswap
-    <aa>   DW_AT_type        : <0x127>
-    <ae>   DW_AT_decl_file   : 2
-    <af>   DW_AT_decl_line   : 31
-    <b0>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
- <2><b3>: Abbrev Number: 5 (DW_TAG_member)
-    <b4>   DW_AT_name        : (indirect string, offset: 0x129): procs
-    <b8>   DW_AT_type        : <0x140>
-    <bc>   DW_AT_decl_file   : 2
-    <bd>   DW_AT_decl_line   : 32
-    <be>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
- <2><c1>: Abbrev Number: 5 (DW_TAG_member)
-    <c2>   DW_AT_name        : (indirect string, offset: 0x144): pad
-    <c6>   DW_AT_type        : <0x140>
-    <ca>   DW_AT_decl_file   : 2
-    <cb>   DW_AT_decl_line   : 33
-    <cc>   DW_AT_data_member_location: 2 byte block: 23 2a 	(DW_OP_plus_uconst: 42)
- <2><cf>: Abbrev Number: 5 (DW_TAG_member)
-    <d0>   DW_AT_name        : (indirect string, offset: 0x148): totalhigh
-    <d4>   DW_AT_type        : <0x127>
-    <d8>   DW_AT_decl_file   : 2
-    <d9>   DW_AT_decl_line   : 34
-    <da>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
- <2><dd>: Abbrev Number: 5 (DW_TAG_member)
-    <de>   DW_AT_name        : (indirect string, offset: 0x152): freehigh
-    <e2>   DW_AT_type        : <0x127>
-    <e6>   DW_AT_decl_file   : 2
-    <e7>   DW_AT_decl_line   : 35
-    <e8>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
- <2><eb>: Abbrev Number: 5 (DW_TAG_member)
-    <ec>   DW_AT_name        : (indirect string, offset: 0x15b): mem_unit
-    <f0>   DW_AT_type        : <0x152>
-    <f4>   DW_AT_decl_file   : 2
-    <f5>   DW_AT_decl_line   : 36
-    <f6>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
- <2><f9>: Abbrev Number: 5 (DW_TAG_member)
-    <fa>   DW_AT_name        : (indirect string, offset: 0x177): _f
-    <fe>   DW_AT_type        : <0x164>
-    <102>   DW_AT_decl_file   : 2
-    <103>   DW_AT_decl_line   : 37
-    <104>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
- <2><107>: Abbrev Number: 0
- <1><108>: Abbrev Number: 3 (DW_TAG_typedef)
-    <109>   DW_AT_type        : <0x113>
-    <10d>   DW_AT_name        : (indirect string, offset: 0xaf): __kernel_long_t
-    <111>   DW_AT_decl_file   : 1
-    <112>   DW_AT_decl_line   : 23
- <1><113>: Abbrev Number: 6 (DW_TAG_base_type)
-    <114>   DW_AT_name        : (indirect string, offset: 0xa6): long int
-    <118>   DW_AT_encoding    : 5	(signed)
-    <119>   DW_AT_byte_size   : 4
- <1><11a>: Abbrev Number: 7 (DW_TAG_array_type)
-    <11b>   DW_AT_type        : <0x127>
- <2><11f>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <120>   DW_AT_type        : <0x139>
-    <124>   DW_AT_lower_bound : 0
-    <125>   DW_AT_count       : 3
- <2><126>: Abbrev Number: 0
- <1><127>: Abbrev Number: 3 (DW_TAG_typedef)
-    <128>   DW_AT_type        : <0x132>
-    <12c>   DW_AT_name        : (indirect string, offset: 0xd7): __kernel_ulong_t
-    <130>   DW_AT_decl_file   : 1
-    <131>   DW_AT_decl_line   : 24
- <1><132>: Abbrev Number: 6 (DW_TAG_base_type)
-    <133>   DW_AT_name        : (indirect string, offset: 0xc5): long unsigned int
-    <137>   DW_AT_encoding    : 7	(unsigned)
-    <138>   DW_AT_byte_size   : 4
- <1><139>: Abbrev Number: 9 (DW_TAG_base_type)
-    <13a>   DW_AT_name        : (indirect string, offset: 0xe8): sizetype
-    <13e>   DW_AT_byte_size   : 8
-    <13f>   DW_AT_encoding    : 7	(unsigned)
- <1><140>: Abbrev Number: 3 (DW_TAG_typedef)
-    <141>   DW_AT_type        : <0x14b>
-    <145>   DW_AT_name        : (indirect string, offset: 0x13e): __u16
-    <149>   DW_AT_decl_file   : 3
-    <14a>   DW_AT_decl_line   : 26
- <1><14b>: Abbrev Number: 6 (DW_TAG_base_type)
-    <14c>   DW_AT_name        : (indirect string, offset: 0x12f): unsigned short
-    <150>   DW_AT_encoding    : 7	(unsigned)
-    <151>   DW_AT_byte_size   : 2
- <1><152>: Abbrev Number: 3 (DW_TAG_typedef)
-    <153>   DW_AT_type        : <0x15d>
-    <157>   DW_AT_name        : (indirect string, offset: 0x171): __u32
-    <15b>   DW_AT_decl_file   : 3
-    <15c>   DW_AT_decl_line   : 28
- <1><15d>: Abbrev Number: 6 (DW_TAG_base_type)
-    <15e>   DW_AT_name        : (indirect string, offset: 0x164): unsigned int
-    <162>   DW_AT_encoding    : 7	(unsigned)
-    <163>   DW_AT_byte_size   : 4
- <1><164>: Abbrev Number: 7 (DW_TAG_array_type)
-    <165>   DW_AT_type        : <0x171>
- <2><169>: Abbrev Number: 8 (DW_TAG_subrange_type)
-    <16a>   DW_AT_type        : <0x139>
-    <16e>   DW_AT_lower_bound : 0
-    <16f>   DW_AT_count       : 8
- <2><170>: Abbrev Number: 0
- <1><171>: Abbrev Number: 6 (DW_TAG_base_type)
-    <172>   DW_AT_name        : (indirect string, offset: 0x17a): char
-    <176>   DW_AT_encoding    : 8	(unsigned char)
-    <177>   DW_AT_byte_size   : 1
- <1><178>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11d): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 4
+    <2a>   DW_AT_decl_line   : 39
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x251): sysinfo_t
+    <3a>   DW_AT_decl_file   : 4
+    <3b>   DW_AT_decl_line   : 38
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x249): sysinfo
+    <41>   DW_AT_byte_size   : 64
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 23
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x169): uptime
+    <49>   DW_AT_type        : <0x109>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 24
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x189): loads
+    <57>   DW_AT_type        : <0x11b>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 25
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x1bb): totalram
+    <65>   DW_AT_type        : <0x128>
+    <69>   DW_AT_decl_file   : 2
+    <6a>   DW_AT_decl_line   : 26
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1c4): freeram
+    <73>   DW_AT_type        : <0x128>
+    <77>   DW_AT_decl_file   : 2
+    <78>   DW_AT_decl_line   : 27
+    <79>   DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
+ <2><7c>: Abbrev Number: 5 (DW_TAG_member)
+    <7d>   DW_AT_name        : (indirect string, offset: 0x1cc): sharedram
+    <81>   DW_AT_type        : <0x128>
+    <85>   DW_AT_decl_file   : 2
+    <86>   DW_AT_decl_line   : 28
+    <87>   DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
+ <2><8a>: Abbrev Number: 5 (DW_TAG_member)
+    <8b>   DW_AT_name        : (indirect string, offset: 0x1d6): bufferram
+    <8f>   DW_AT_type        : <0x128>
+    <93>   DW_AT_decl_file   : 2
+    <94>   DW_AT_decl_line   : 29
+    <95>   DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
+ <2><98>: Abbrev Number: 5 (DW_TAG_member)
+    <99>   DW_AT_name        : (indirect string, offset: 0x1e0): totalswap
+    <9d>   DW_AT_type        : <0x128>
+    <a1>   DW_AT_decl_file   : 2
+    <a2>   DW_AT_decl_line   : 30
+    <a3>   DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
+ <2><a6>: Abbrev Number: 5 (DW_TAG_member)
+    <a7>   DW_AT_name        : (indirect string, offset: 0x1ea): freeswap
+    <ab>   DW_AT_type        : <0x128>
+    <af>   DW_AT_decl_file   : 2
+    <b0>   DW_AT_decl_line   : 31
+    <b1>   DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
+ <2><b4>: Abbrev Number: 5 (DW_TAG_member)
+    <b5>   DW_AT_name        : (indirect string, offset: 0x1f3): procs
+    <b9>   DW_AT_type        : <0x141>
+    <bd>   DW_AT_decl_file   : 2
+    <be>   DW_AT_decl_line   : 32
+    <bf>   DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
+ <2><c2>: Abbrev Number: 5 (DW_TAG_member)
+    <c3>   DW_AT_name        : (indirect string, offset: 0x20e): pad
+    <c7>   DW_AT_type        : <0x141>
+    <cb>   DW_AT_decl_file   : 2
+    <cc>   DW_AT_decl_line   : 33
+    <cd>   DW_AT_data_member_location: 2 byte block: 23 2a 	(DW_OP_plus_uconst: 42)
+ <2><d0>: Abbrev Number: 5 (DW_TAG_member)
+    <d1>   DW_AT_name        : (indirect string, offset: 0x212): totalhigh
+    <d5>   DW_AT_type        : <0x128>
+    <d9>   DW_AT_decl_file   : 2
+    <da>   DW_AT_decl_line   : 34
+    <db>   DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
+ <2><de>: Abbrev Number: 5 (DW_TAG_member)
+    <df>   DW_AT_name        : (indirect string, offset: 0x21c): freehigh
+    <e3>   DW_AT_type        : <0x128>
+    <e7>   DW_AT_decl_file   : 2
+    <e8>   DW_AT_decl_line   : 35
+    <e9>   DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
+ <2><ec>: Abbrev Number: 5 (DW_TAG_member)
+    <ed>   DW_AT_name        : (indirect string, offset: 0x225): mem_unit
+    <f1>   DW_AT_type        : <0x153>
+    <f5>   DW_AT_decl_file   : 2
+    <f6>   DW_AT_decl_line   : 36
+    <f7>   DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
+ <2><fa>: Abbrev Number: 5 (DW_TAG_member)
+    <fb>   DW_AT_name        : (indirect string, offset: 0x241): _f
+    <ff>   DW_AT_type        : <0x165>
+    <103>   DW_AT_decl_file   : 2
+    <104>   DW_AT_decl_line   : 37
+    <105>   DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
+ <2><108>: Abbrev Number: 0
+ <1><109>: Abbrev Number: 3 (DW_TAG_typedef)
+    <10a>   DW_AT_type        : <0x114>
+    <10e>   DW_AT_name        : (indirect string, offset: 0x179): __kernel_long_t
+    <112>   DW_AT_decl_file   : 1
+    <113>   DW_AT_decl_line   : 23
+ <1><114>: Abbrev Number: 6 (DW_TAG_base_type)
+    <115>   DW_AT_name        : (indirect string, offset: 0x170): long int
+    <119>   DW_AT_encoding    : 5	(signed)
+    <11a>   DW_AT_byte_size   : 4
+ <1><11b>: Abbrev Number: 7 (DW_TAG_array_type)
+    <11c>   DW_AT_type        : <0x128>
+ <2><120>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <121>   DW_AT_type        : <0x13a>
+    <125>   DW_AT_lower_bound : 0
+    <126>   DW_AT_count       : 3
+ <2><127>: Abbrev Number: 0
+ <1><128>: Abbrev Number: 3 (DW_TAG_typedef)
+    <129>   DW_AT_type        : <0x133>
+    <12d>   DW_AT_name        : (indirect string, offset: 0x1a1): __kernel_ulong_t
+    <131>   DW_AT_decl_file   : 1
+    <132>   DW_AT_decl_line   : 24
+ <1><133>: Abbrev Number: 6 (DW_TAG_base_type)
+    <134>   DW_AT_name        : (indirect string, offset: 0x18f): long unsigned int
+    <138>   DW_AT_encoding    : 7	(unsigned)
+    <139>   DW_AT_byte_size   : 4
+ <1><13a>: Abbrev Number: 9 (DW_TAG_base_type)
+    <13b>   DW_AT_name        : (indirect string, offset: 0x1b2): sizetype
+    <13f>   DW_AT_byte_size   : 8
+    <140>   DW_AT_encoding    : 7	(unsigned)
+ <1><141>: Abbrev Number: 3 (DW_TAG_typedef)
+    <142>   DW_AT_type        : <0x14c>
+    <146>   DW_AT_name        : (indirect string, offset: 0x208): __u16
+    <14a>   DW_AT_decl_file   : 3
+    <14b>   DW_AT_decl_line   : 26
+ <1><14c>: Abbrev Number: 6 (DW_TAG_base_type)
+    <14d>   DW_AT_name        : (indirect string, offset: 0x1f9): unsigned short
+    <151>   DW_AT_encoding    : 7	(unsigned)
+    <152>   DW_AT_byte_size   : 2
+ <1><153>: Abbrev Number: 3 (DW_TAG_typedef)
+    <154>   DW_AT_type        : <0x15e>
+    <158>   DW_AT_name        : (indirect string, offset: 0x23b): __u32
+    <15c>   DW_AT_decl_file   : 3
+    <15d>   DW_AT_decl_line   : 28
+ <1><15e>: Abbrev Number: 6 (DW_TAG_base_type)
+    <15f>   DW_AT_name        : (indirect string, offset: 0x22e): unsigned int
+    <163>   DW_AT_encoding    : 7	(unsigned)
+    <164>   DW_AT_byte_size   : 4
+ <1><165>: Abbrev Number: 7 (DW_TAG_array_type)
+    <166>   DW_AT_type        : <0x172>
+ <2><16a>: Abbrev Number: 8 (DW_TAG_subrange_type)
+    <16b>   DW_AT_type        : <0x13a>
+    <16f>   DW_AT_lower_bound : 0
+    <170>   DW_AT_count       : 8
+ <2><171>: Abbrev Number: 0
+ <1><172>: Abbrev Number: 6 (DW_TAG_base_type)
+    <173>   DW_AT_name        : (indirect string, offset: 0x244): char
+    <177>   DW_AT_encoding    : 8	(unsigned char)
+    <178>   DW_AT_byte_size   : 1
+ <1><179>: Abbrev Number: 0
 
diff --git a/mpers-m32/sysinfo_t.d2 b/mpers-m32/sysinfo_t.d2
index 8ce0444..9434474 100644
--- a/mpers-m32/sysinfo_t.d2
+++ b/mpers-m32/sysinfo_t.d2
@@ -1,188 +1,188 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 39
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0x187): sysinfo_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x251): sysinfo_t
 DW_AT_decl_file   : 4
 DW_AT_decl_line   : 38
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0x17f): sysinfo
+DW_AT_name        : (indirect string, offset: 0x249): sysinfo
 DW_AT_byte_size   : 64
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 23
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x9f): uptime
-DW_AT_type        : <0x108>
+DW_AT_name        : (indirect string, offset: 0x169): uptime
+DW_AT_type        : <0x109>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xbf): loads
-DW_AT_type        : <0x11a>
+DW_AT_name        : (indirect string, offset: 0x189): loads
+DW_AT_type        : <0x11b>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xf1): totalram
-DW_AT_type        : <0x127>
+DW_AT_name        : (indirect string, offset: 0x1bb): totalram
+DW_AT_type        : <0x128>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 10 	(DW_OP_plus_uconst: 16)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xfa): freeram
-DW_AT_type        : <0x127>
+DW_AT_name        : (indirect string, offset: 0x1c4): freeram
+DW_AT_type        : <0x128>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 27
 DW_AT_data_member_location: 2 byte block: 23 14 	(DW_OP_plus_uconst: 20)
-<2><7b>
+<2><7c>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x102): sharedram
-DW_AT_type        : <0x127>
+DW_AT_name        : (indirect string, offset: 0x1cc): sharedram
+DW_AT_type        : <0x128>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 28
 DW_AT_data_member_location: 2 byte block: 23 18 	(DW_OP_plus_uconst: 24)
-<2><89>
+<2><8a>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x10c): bufferram
-DW_AT_type        : <0x127>
+DW_AT_name        : (indirect string, offset: 0x1d6): bufferram
+DW_AT_type        : <0x128>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 29
 DW_AT_data_member_location: 2 byte block: 23 1c 	(DW_OP_plus_uconst: 28)
-<2><97>
+<2><98>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x116): totalswap
-DW_AT_type        : <0x127>
+DW_AT_name        : (indirect string, offset: 0x1e0): totalswap
+DW_AT_type        : <0x128>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 20 	(DW_OP_plus_uconst: 32)
-<2><a5>
+<2><a6>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x120): freeswap
-DW_AT_type        : <0x127>
+DW_AT_name        : (indirect string, offset: 0x1ea): freeswap
+DW_AT_type        : <0x128>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 24 	(DW_OP_plus_uconst: 36)
-<2><b3>
+<2><b4>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x129): procs
-DW_AT_type        : <0x140>
+DW_AT_name        : (indirect string, offset: 0x1f3): procs
+DW_AT_type        : <0x141>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 32
 DW_AT_data_member_location: 2 byte block: 23 28 	(DW_OP_plus_uconst: 40)
-<2><c1>
+<2><c2>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x144): pad
-DW_AT_type        : <0x140>
+DW_AT_name        : (indirect string, offset: 0x20e): pad
+DW_AT_type        : <0x141>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 33
 DW_AT_data_member_location: 2 byte block: 23 2a 	(DW_OP_plus_uconst: 42)
-<2><cf>
+<2><d0>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x148): totalhigh
-DW_AT_type        : <0x127>
+DW_AT_name        : (indirect string, offset: 0x212): totalhigh
+DW_AT_type        : <0x128>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 34
 DW_AT_data_member_location: 2 byte block: 23 2c 	(DW_OP_plus_uconst: 44)
-<2><dd>
+<2><de>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x152): freehigh
-DW_AT_type        : <0x127>
+DW_AT_name        : (indirect string, offset: 0x21c): freehigh
+DW_AT_type        : <0x128>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 35
 DW_AT_data_member_location: 2 byte block: 23 30 	(DW_OP_plus_uconst: 48)
-<2><eb>
+<2><ec>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x15b): mem_unit
-DW_AT_type        : <0x152>
+DW_AT_name        : (indirect string, offset: 0x225): mem_unit
+DW_AT_type        : <0x153>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 36
 DW_AT_data_member_location: 2 byte block: 23 34 	(DW_OP_plus_uconst: 52)
-<2><f9>
+<2><fa>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x177): _f
-DW_AT_type        : <0x164>
+DW_AT_name        : (indirect string, offset: 0x241): _f
+DW_AT_type        : <0x165>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 37
 DW_AT_data_member_location: 2 byte block: 23 38 	(DW_OP_plus_uconst: 56)
-<1><108>
+<1><109>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x113>
-DW_AT_name        : (indirect string, offset: 0xaf): __kernel_long_t
+DW_AT_type        : <0x114>
+DW_AT_name        : (indirect string, offset: 0x179): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><113>
+<1><114>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa6): long int
+DW_AT_name        : (indirect string, offset: 0x170): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><11a>
+<1><11b>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x127>
-<2><11f>
+DW_AT_type        : <0x128>
+<2><120>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x139>
+DW_AT_type        : <0x13a>
 DW_AT_lower_bound : 0
 DW_AT_count       : 3
-<1><127>
+<1><128>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x132>
-DW_AT_name        : (indirect string, offset: 0xd7): __kernel_ulong_t
+DW_AT_type        : <0x133>
+DW_AT_name        : (indirect string, offset: 0x1a1): __kernel_ulong_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 24
-<1><132>
+<1><133>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xc5): long unsigned int
+DW_AT_name        : (indirect string, offset: 0x18f): long unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><139>
+<1><13a>
 Abbrev Number: 9 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xe8): sizetype
+DW_AT_name        : (indirect string, offset: 0x1b2): sizetype
 DW_AT_byte_size   : 8
 DW_AT_encoding    : 7	(unsigned)
-<1><140>
+<1><141>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x14b>
-DW_AT_name        : (indirect string, offset: 0x13e): __u16
+DW_AT_type        : <0x14c>
+DW_AT_name        : (indirect string, offset: 0x208): __u16
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 26
-<1><14b>
+<1><14c>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x12f): unsigned short
+DW_AT_name        : (indirect string, offset: 0x1f9): unsigned short
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 2
-<1><152>
+<1><153>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x15d>
-DW_AT_name        : (indirect string, offset: 0x171): __u32
+DW_AT_type        : <0x15e>
+DW_AT_name        : (indirect string, offset: 0x23b): __u32
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 28
-<1><15d>
+<1><15e>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x164): unsigned int
+DW_AT_name        : (indirect string, offset: 0x22e): unsigned int
 DW_AT_encoding    : 7	(unsigned)
 DW_AT_byte_size   : 4
-<1><164>
+<1><165>
 Abbrev Number: 7 (DW_TAG_array_type)
-DW_AT_type        : <0x171>
-<2><169>
+DW_AT_type        : <0x172>
+<2><16a>
 Abbrev Number: 8 (DW_TAG_subrange_type)
-DW_AT_type        : <0x139>
+DW_AT_type        : <0x13a>
 DW_AT_lower_bound : 0
 DW_AT_count       : 8
-<1><171>
+<1><172>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x17a): char
+DW_AT_name        : (indirect string, offset: 0x244): char
 DW_AT_encoding    : 8	(unsigned char)
 DW_AT_byte_size   : 1
diff --git a/mpers-m32/time_t.d1 b/mpers-m32/time_t.d1
index ca0edaf..f6cb37e 100644
--- a/mpers-m32/time_t.d1
+++ b/mpers-m32/time_t.d1
@@ -1,46 +1,47 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x60 (32-bit)
+   Length:        0x61 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/time_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/time_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x50): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8b): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 32
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xce): time_t
-    <39>   DW_AT_decl_file   : 2
-    <3a>   DW_AT_decl_line   : 96
- <1><3b>: Abbrev Number: 3 (DW_TAG_typedef)
-    <3c>   DW_AT_type        : <0x46>
-    <40>   DW_AT_name        : (indirect string, offset: 0xc5): __time_t
-    <44>   DW_AT_decl_file   : 2
-    <45>   DW_AT_decl_line   : 95
- <1><46>: Abbrev Number: 3 (DW_TAG_typedef)
-    <47>   DW_AT_type        : <0x51>
-    <4b>   DW_AT_name        : (indirect string, offset: 0xb5): __kernel_time_t
-    <4f>   DW_AT_decl_file   : 1
-    <50>   DW_AT_decl_line   : 77
- <1><51>: Abbrev Number: 3 (DW_TAG_typedef)
-    <52>   DW_AT_type        : <0x5c>
-    <56>   DW_AT_name        : (indirect string, offset: 0xa5): __kernel_long_t
-    <5a>   DW_AT_decl_file   : 1
-    <5b>   DW_AT_decl_line   : 23
- <1><5c>: Abbrev Number: 4 (DW_TAG_base_type)
-    <5d>   DW_AT_name        : (indirect string, offset: 0x9c): long int
-    <61>   DW_AT_encoding    : 5	(signed)
-    <62>   DW_AT_byte_size   : 4
- <1><63>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11a): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x155): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 32
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x198): time_t
+    <3a>   DW_AT_decl_file   : 2
+    <3b>   DW_AT_decl_line   : 96
+ <1><3c>: Abbrev Number: 3 (DW_TAG_typedef)
+    <3d>   DW_AT_type        : <0x47>
+    <41>   DW_AT_name        : (indirect string, offset: 0x18f): __time_t
+    <45>   DW_AT_decl_file   : 2
+    <46>   DW_AT_decl_line   : 95
+ <1><47>: Abbrev Number: 3 (DW_TAG_typedef)
+    <48>   DW_AT_type        : <0x52>
+    <4c>   DW_AT_name        : (indirect string, offset: 0x17f): __kernel_time_t
+    <50>   DW_AT_decl_file   : 1
+    <51>   DW_AT_decl_line   : 77
+ <1><52>: Abbrev Number: 3 (DW_TAG_typedef)
+    <53>   DW_AT_type        : <0x5d>
+    <57>   DW_AT_name        : (indirect string, offset: 0x16f): __kernel_long_t
+    <5b>   DW_AT_decl_file   : 1
+    <5c>   DW_AT_decl_line   : 23
+ <1><5d>: Abbrev Number: 4 (DW_TAG_base_type)
+    <5e>   DW_AT_name        : (indirect string, offset: 0x166): long int
+    <62>   DW_AT_encoding    : 5	(signed)
+    <63>   DW_AT_byte_size   : 4
+ <1><64>: Abbrev Number: 0
 
diff --git a/mpers-m32/time_t.d2 b/mpers-m32/time_t.d2
index d676133..2652aac 100644
--- a/mpers-m32/time_t.d2
+++ b/mpers-m32/time_t.d2
@@ -1,37 +1,37 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8b): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x155): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 32
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xce): time_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x198): time_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 96
-<1><3b>
+<1><3c>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x46>
-DW_AT_name        : (indirect string, offset: 0xc5): __time_t
+DW_AT_type        : <0x47>
+DW_AT_name        : (indirect string, offset: 0x18f): __time_t
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 95
-<1><46>
+<1><47>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x51>
-DW_AT_name        : (indirect string, offset: 0xb5): __kernel_time_t
+DW_AT_type        : <0x52>
+DW_AT_name        : (indirect string, offset: 0x17f): __kernel_time_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 77
-<1><51>
+<1><52>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x5c>
-DW_AT_name        : (indirect string, offset: 0xa5): __kernel_long_t
+DW_AT_type        : <0x5d>
+DW_AT_name        : (indirect string, offset: 0x16f): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><5c>
+<1><5d>
 Abbrev Number: 4 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0x9c): long int
+DW_AT_name        : (indirect string, offset: 0x166): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/timespec_t.d1 b/mpers-m32/timespec_t.d1
index 54a96ce..3b63cb6 100644
--- a/mpers-m32/timespec_t.d1
+++ b/mpers-m32/timespec_t.d1
@@ -1,59 +1,60 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x7a (32-bit)
+   Length:        0x7b (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/timespec_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/timespec_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x54): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8f): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 34
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xe1): timespec_t
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 32
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xd8): timespec
-    <40>   DW_AT_byte_size   : 8
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 24
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0xa0): tv_sec
-    <48>   DW_AT_type        : <0x60>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 25
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xd0): tv_nsec
-    <56>   DW_AT_type        : <0x76>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 26
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 0
- <1><60>: Abbrev Number: 3 (DW_TAG_typedef)
-    <61>   DW_AT_type        : <0x6b>
-    <65>   DW_AT_name        : (indirect string, offset: 0xc0): __kernel_time_t
-    <69>   DW_AT_decl_file   : 1
-    <6a>   DW_AT_decl_line   : 77
- <1><6b>: Abbrev Number: 3 (DW_TAG_typedef)
-    <6c>   DW_AT_type        : <0x76>
-    <70>   DW_AT_name        : (indirect string, offset: 0xb0): __kernel_long_t
-    <74>   DW_AT_decl_file   : 1
-    <75>   DW_AT_decl_line   : 23
- <1><76>: Abbrev Number: 6 (DW_TAG_base_type)
-    <77>   DW_AT_name        : (indirect string, offset: 0xa7): long int
-    <7b>   DW_AT_encoding    : 5	(signed)
-    <7c>   DW_AT_byte_size   : 4
- <1><7d>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11e): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x159): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 34
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1ab): timespec_t
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 32
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1a2): timespec
+    <41>   DW_AT_byte_size   : 8
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 24
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x16a): tv_sec
+    <49>   DW_AT_type        : <0x61>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 25
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x19a): tv_nsec
+    <57>   DW_AT_type        : <0x77>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 26
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 0
+ <1><61>: Abbrev Number: 3 (DW_TAG_typedef)
+    <62>   DW_AT_type        : <0x6c>
+    <66>   DW_AT_name        : (indirect string, offset: 0x18a): __kernel_time_t
+    <6a>   DW_AT_decl_file   : 1
+    <6b>   DW_AT_decl_line   : 77
+ <1><6c>: Abbrev Number: 3 (DW_TAG_typedef)
+    <6d>   DW_AT_type        : <0x77>
+    <71>   DW_AT_name        : (indirect string, offset: 0x17a): __kernel_long_t
+    <75>   DW_AT_decl_file   : 1
+    <76>   DW_AT_decl_line   : 23
+ <1><77>: Abbrev Number: 6 (DW_TAG_base_type)
+    <78>   DW_AT_name        : (indirect string, offset: 0x171): long int
+    <7c>   DW_AT_encoding    : 5	(signed)
+    <7d>   DW_AT_byte_size   : 4
+ <1><7e>: Abbrev Number: 0
 
diff --git a/mpers-m32/timespec_t.d2 b/mpers-m32/timespec_t.d2
index 7e157e4..3d64697 100644
--- a/mpers-m32/timespec_t.d2
+++ b/mpers-m32/timespec_t.d2
@@ -1,51 +1,51 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8f): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x159): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 34
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xe1): timespec_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1ab): timespec_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 32
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xd8): timespec
+DW_AT_name        : (indirect string, offset: 0x1a2): timespec
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 24
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xa0): tv_sec
-DW_AT_type        : <0x60>
+DW_AT_name        : (indirect string, offset: 0x16a): tv_sec
+DW_AT_type        : <0x61>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd0): tv_nsec
-DW_AT_type        : <0x76>
+DW_AT_name        : (indirect string, offset: 0x19a): tv_nsec
+DW_AT_type        : <0x77>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><60>
+<1><61>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x6b>
-DW_AT_name        : (indirect string, offset: 0xc0): __kernel_time_t
+DW_AT_type        : <0x6c>
+DW_AT_name        : (indirect string, offset: 0x18a): __kernel_time_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 77
-<1><6b>
+<1><6c>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x76>
-DW_AT_name        : (indirect string, offset: 0xb0): __kernel_long_t
+DW_AT_type        : <0x77>
+DW_AT_name        : (indirect string, offset: 0x17a): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><76>
+<1><77>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa7): long int
+DW_AT_name        : (indirect string, offset: 0x171): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/timeval_t.d1 b/mpers-m32/timeval_t.d1
index 9879480..27dd9ee 100644
--- a/mpers-m32/timeval_t.d1
+++ b/mpers-m32/timeval_t.d1
@@ -1,64 +1,65 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x85 (32-bit)
+   Length:        0x86 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/timeval_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/timeval_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x53): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 34
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xf4): timeval_t
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 32
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xec): timeval
-    <40>   DW_AT_byte_size   : 8
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 29
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0x9f): tv_sec
-    <48>   DW_AT_type        : <0x60>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 30
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xcf): tv_usec
-    <56>   DW_AT_type        : <0x7d>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 31
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 0
- <1><60>: Abbrev Number: 3 (DW_TAG_typedef)
-    <61>   DW_AT_type        : <0x6b>
-    <65>   DW_AT_name        : (indirect string, offset: 0xbf): __kernel_time_t
-    <69>   DW_AT_decl_file   : 1
-    <6a>   DW_AT_decl_line   : 77
- <1><6b>: Abbrev Number: 3 (DW_TAG_typedef)
-    <6c>   DW_AT_type        : <0x76>
-    <70>   DW_AT_name        : (indirect string, offset: 0xaf): __kernel_long_t
-    <74>   DW_AT_decl_file   : 1
-    <75>   DW_AT_decl_line   : 23
- <1><76>: Abbrev Number: 6 (DW_TAG_base_type)
-    <77>   DW_AT_name        : (indirect string, offset: 0xa6): long int
-    <7b>   DW_AT_encoding    : 5	(signed)
-    <7c>   DW_AT_byte_size   : 4
- <1><7d>: Abbrev Number: 3 (DW_TAG_typedef)
-    <7e>   DW_AT_type        : <0x6b>
-    <82>   DW_AT_name        : (indirect string, offset: 0xd7): __kernel_suseconds_t
-    <86>   DW_AT_decl_file   : 1
-    <87>   DW_AT_decl_line   : 43
- <1><88>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11d): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 34
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1be): timeval_t
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 32
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1b6): timeval
+    <41>   DW_AT_byte_size   : 8
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 29
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x169): tv_sec
+    <49>   DW_AT_type        : <0x61>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 30
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x199): tv_usec
+    <57>   DW_AT_type        : <0x7e>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 31
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 0
+ <1><61>: Abbrev Number: 3 (DW_TAG_typedef)
+    <62>   DW_AT_type        : <0x6c>
+    <66>   DW_AT_name        : (indirect string, offset: 0x189): __kernel_time_t
+    <6a>   DW_AT_decl_file   : 1
+    <6b>   DW_AT_decl_line   : 77
+ <1><6c>: Abbrev Number: 3 (DW_TAG_typedef)
+    <6d>   DW_AT_type        : <0x77>
+    <71>   DW_AT_name        : (indirect string, offset: 0x179): __kernel_long_t
+    <75>   DW_AT_decl_file   : 1
+    <76>   DW_AT_decl_line   : 23
+ <1><77>: Abbrev Number: 6 (DW_TAG_base_type)
+    <78>   DW_AT_name        : (indirect string, offset: 0x170): long int
+    <7c>   DW_AT_encoding    : 5	(signed)
+    <7d>   DW_AT_byte_size   : 4
+ <1><7e>: Abbrev Number: 3 (DW_TAG_typedef)
+    <7f>   DW_AT_type        : <0x6c>
+    <83>   DW_AT_name        : (indirect string, offset: 0x1a1): __kernel_suseconds_t
+    <87>   DW_AT_decl_file   : 1
+    <88>   DW_AT_decl_line   : 43
+ <1><89>: Abbrev Number: 0
 
diff --git a/mpers-m32/timeval_t.d2 b/mpers-m32/timeval_t.d2
index a8f5f81..03a5da7 100644
--- a/mpers-m32/timeval_t.d2
+++ b/mpers-m32/timeval_t.d2
@@ -1,57 +1,57 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 34
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xf4): timeval_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1be): timeval_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 32
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xec): timeval
+DW_AT_name        : (indirect string, offset: 0x1b6): timeval
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 29
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x9f): tv_sec
-DW_AT_type        : <0x60>
+DW_AT_name        : (indirect string, offset: 0x169): tv_sec
+DW_AT_type        : <0x61>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 30
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcf): tv_usec
-DW_AT_type        : <0x7d>
+DW_AT_name        : (indirect string, offset: 0x199): tv_usec
+DW_AT_type        : <0x7e>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 31
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><60>
+<1><61>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x6b>
-DW_AT_name        : (indirect string, offset: 0xbf): __kernel_time_t
+DW_AT_type        : <0x6c>
+DW_AT_name        : (indirect string, offset: 0x189): __kernel_time_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 77
-<1><6b>
+<1><6c>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x76>
-DW_AT_name        : (indirect string, offset: 0xaf): __kernel_long_t
+DW_AT_type        : <0x77>
+DW_AT_name        : (indirect string, offset: 0x179): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><76>
+<1><77>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa6): long int
+DW_AT_name        : (indirect string, offset: 0x170): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
-<1><7d>
+<1><7e>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x6b>
-DW_AT_name        : (indirect string, offset: 0xd7): __kernel_suseconds_t
+DW_AT_type        : <0x6c>
+DW_AT_name        : (indirect string, offset: 0x1a1): __kernel_suseconds_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 43
diff --git a/mpers-m32/tms_t.d1 b/mpers-m32/tms_t.d1
index 324af3d..43487fe 100644
--- a/mpers-m32/tms_t.d1
+++ b/mpers-m32/tms_t.d1
@@ -1,71 +1,72 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x96 (32-bit)
+   Length:        0x97 (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/tms_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/tms_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x4f): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8a): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 38
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xf3): tms_t
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 37
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xef): tms
-    <40>   DW_AT_byte_size   : 16
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 22
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0x9b): tms_utime
-    <48>   DW_AT_type        : <0x7c>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 23
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xcf): tms_stime
-    <56>   DW_AT_type        : <0x7c>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 24
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 5 (DW_TAG_member)
-    <60>   DW_AT_name        : (indirect string, offset: 0xd9): tms_cutime
-    <64>   DW_AT_type        : <0x7c>
-    <68>   DW_AT_decl_file   : 2
-    <69>   DW_AT_decl_line   : 25
-    <6a>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
- <2><6d>: Abbrev Number: 5 (DW_TAG_member)
-    <6e>   DW_AT_name        : (indirect string, offset: 0xe4): tms_cstime
-    <72>   DW_AT_type        : <0x7c>
-    <76>   DW_AT_decl_file   : 2
-    <77>   DW_AT_decl_line   : 26
-    <78>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
- <2><7b>: Abbrev Number: 0
- <1><7c>: Abbrev Number: 3 (DW_TAG_typedef)
-    <7d>   DW_AT_type        : <0x87>
-    <81>   DW_AT_name        : (indirect string, offset: 0xbe): __kernel_clock_t
-    <85>   DW_AT_decl_file   : 1
-    <86>   DW_AT_decl_line   : 78
- <1><87>: Abbrev Number: 3 (DW_TAG_typedef)
-    <88>   DW_AT_type        : <0x92>
-    <8c>   DW_AT_name        : (indirect string, offset: 0xae): __kernel_long_t
-    <90>   DW_AT_decl_file   : 1
-    <91>   DW_AT_decl_line   : 23
- <1><92>: Abbrev Number: 6 (DW_TAG_base_type)
-    <93>   DW_AT_name        : (indirect string, offset: 0xa5): long int
-    <97>   DW_AT_encoding    : 5	(signed)
-    <98>   DW_AT_byte_size   : 4
- <1><99>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x119): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x154): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 38
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1bd): tms_t
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 37
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1b9): tms
+    <41>   DW_AT_byte_size   : 16
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 22
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x165): tms_utime
+    <49>   DW_AT_type        : <0x7d>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 23
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x199): tms_stime
+    <57>   DW_AT_type        : <0x7d>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 24
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 5 (DW_TAG_member)
+    <61>   DW_AT_name        : (indirect string, offset: 0x1a3): tms_cutime
+    <65>   DW_AT_type        : <0x7d>
+    <69>   DW_AT_decl_file   : 2
+    <6a>   DW_AT_decl_line   : 25
+    <6b>   DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
+ <2><6e>: Abbrev Number: 5 (DW_TAG_member)
+    <6f>   DW_AT_name        : (indirect string, offset: 0x1ae): tms_cstime
+    <73>   DW_AT_type        : <0x7d>
+    <77>   DW_AT_decl_file   : 2
+    <78>   DW_AT_decl_line   : 26
+    <79>   DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
+ <2><7c>: Abbrev Number: 0
+ <1><7d>: Abbrev Number: 3 (DW_TAG_typedef)
+    <7e>   DW_AT_type        : <0x88>
+    <82>   DW_AT_name        : (indirect string, offset: 0x188): __kernel_clock_t
+    <86>   DW_AT_decl_file   : 1
+    <87>   DW_AT_decl_line   : 78
+ <1><88>: Abbrev Number: 3 (DW_TAG_typedef)
+    <89>   DW_AT_type        : <0x93>
+    <8d>   DW_AT_name        : (indirect string, offset: 0x178): __kernel_long_t
+    <91>   DW_AT_decl_file   : 1
+    <92>   DW_AT_decl_line   : 23
+ <1><93>: Abbrev Number: 6 (DW_TAG_base_type)
+    <94>   DW_AT_name        : (indirect string, offset: 0x16f): long int
+    <98>   DW_AT_encoding    : 5	(signed)
+    <99>   DW_AT_byte_size   : 4
+ <1><9a>: Abbrev Number: 0
 
diff --git a/mpers-m32/tms_t.d2 b/mpers-m32/tms_t.d2
index 19879b3..68e6ac5 100644
--- a/mpers-m32/tms_t.d2
+++ b/mpers-m32/tms_t.d2
@@ -1,65 +1,65 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8a): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x154): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 38
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xf3): tms_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1bd): tms_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 37
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xef): tms
+DW_AT_name        : (indirect string, offset: 0x1b9): tms
 DW_AT_byte_size   : 16
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 22
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x9b): tms_utime
-DW_AT_type        : <0x7c>
+DW_AT_name        : (indirect string, offset: 0x165): tms_utime
+DW_AT_type        : <0x7d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 23
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcf): tms_stime
-DW_AT_type        : <0x7c>
+DW_AT_name        : (indirect string, offset: 0x199): tms_stime
+DW_AT_type        : <0x7d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<2><5f>
+<2><60>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xd9): tms_cutime
-DW_AT_type        : <0x7c>
+DW_AT_name        : (indirect string, offset: 0x1a3): tms_cutime
+DW_AT_type        : <0x7d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 25
 DW_AT_data_member_location: 2 byte block: 23 8 	(DW_OP_plus_uconst: 8)
-<2><6d>
+<2><6e>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xe4): tms_cstime
-DW_AT_type        : <0x7c>
+DW_AT_name        : (indirect string, offset: 0x1ae): tms_cstime
+DW_AT_type        : <0x7d>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 26
 DW_AT_data_member_location: 2 byte block: 23 c 	(DW_OP_plus_uconst: 12)
-<1><7c>
+<1><7d>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x87>
-DW_AT_name        : (indirect string, offset: 0xbe): __kernel_clock_t
+DW_AT_type        : <0x88>
+DW_AT_name        : (indirect string, offset: 0x188): __kernel_clock_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 78
-<1><87>
+<1><88>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x92>
-DW_AT_name        : (indirect string, offset: 0xae): __kernel_long_t
+DW_AT_type        : <0x93>
+DW_AT_name        : (indirect string, offset: 0x178): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><92>
+<1><93>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa5): long int
+DW_AT_name        : (indirect string, offset: 0x16f): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
diff --git a/mpers-m32/utimbuf_t.d1 b/mpers-m32/utimbuf_t.d1
index df1e349..b4a5301 100644
--- a/mpers-m32/utimbuf_t.d1
+++ b/mpers-m32/utimbuf_t.d1
@@ -1,59 +1,60 @@
 Contents of the .debug_info section:
 
   Compilation Unit @ offset 0x0:
-   Length:        0x7a (32-bit)
+   Length:        0x7b (32-bit)
    Version:       2
    Abbrev Offset: 0x0
    Pointer Size:  4
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
-    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android clang version 5.0.300080  (based on LLVM 5.0.300080)
+    <c>   DW_AT_producer    : (indirect string, offset: 0x0): Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)
     <10>   DW_AT_language    : 12	(ANSI C99)
-    <12>   DW_AT_name        : (indirect string, offset: 0x3d): mpers-m32/utimbuf_t.c
+    <12>   DW_AT_name        : (indirect string, offset: 0x107): mpers-m32/utimbuf_t.c
     <16>   DW_AT_stmt_list   : 0x0
-    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x53): /usr/local/google/ndkports/.out/strace/package/strace-4.22
- <1><1e>: Abbrev Number: 2 (DW_TAG_variable)
-    <1f>   DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-    <23>   DW_AT_type        : <0x30>
-    <27>   DW_AT_external    : 1
-    <28>   DW_AT_decl_file   : 3
-    <29>   DW_AT_decl_line   : 8
-    <2a>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
- <1><30>: Abbrev Number: 3 (DW_TAG_typedef)
-    <31>   DW_AT_type        : <0x3b>
-    <35>   DW_AT_name        : (indirect string, offset: 0xdf): utimbuf_t
-    <39>   DW_AT_decl_file   : 3
-    <3a>   DW_AT_decl_line   : 6
- <1><3b>: Abbrev Number: 4 (DW_TAG_structure_type)
-    <3c>   DW_AT_name        : (indirect string, offset: 0xd7): utimbuf
-    <40>   DW_AT_byte_size   : 8
-    <41>   DW_AT_decl_file   : 2
-    <42>   DW_AT_decl_line   : 22
- <2><43>: Abbrev Number: 5 (DW_TAG_member)
-    <44>   DW_AT_name        : (indirect string, offset: 0x9f): actime
-    <48>   DW_AT_type        : <0x60>
-    <4c>   DW_AT_decl_file   : 2
-    <4d>   DW_AT_decl_line   : 23
-    <4e>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
- <2><51>: Abbrev Number: 5 (DW_TAG_member)
-    <52>   DW_AT_name        : (indirect string, offset: 0xcf): modtime
-    <56>   DW_AT_type        : <0x60>
-    <5a>   DW_AT_decl_file   : 2
-    <5b>   DW_AT_decl_line   : 24
-    <5c>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
- <2><5f>: Abbrev Number: 0
- <1><60>: Abbrev Number: 3 (DW_TAG_typedef)
-    <61>   DW_AT_type        : <0x6b>
-    <65>   DW_AT_name        : (indirect string, offset: 0xbf): __kernel_time_t
-    <69>   DW_AT_decl_file   : 1
-    <6a>   DW_AT_decl_line   : 77
- <1><6b>: Abbrev Number: 3 (DW_TAG_typedef)
-    <6c>   DW_AT_type        : <0x76>
-    <70>   DW_AT_name        : (indirect string, offset: 0xaf): __kernel_long_t
-    <74>   DW_AT_decl_file   : 1
-    <75>   DW_AT_decl_line   : 23
- <1><76>: Abbrev Number: 6 (DW_TAG_base_type)
-    <77>   DW_AT_name        : (indirect string, offset: 0xa6): long int
-    <7b>   DW_AT_encoding    : 5	(signed)
-    <7c>   DW_AT_byte_size   : 4
- <1><7d>: Abbrev Number: 0
+    <1a>   DW_AT_comp_dir    : (indirect string, offset: 0x11d): /usr/local/google/ndkports/.out/strace/package/strace-4.23
+    <1e>   DW_AT_GNU_pubnames: 1
+ <1><1f>: Abbrev Number: 2 (DW_TAG_variable)
+    <20>   DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+    <24>   DW_AT_type        : <0x31>
+    <28>   DW_AT_external    : 1
+    <29>   DW_AT_decl_file   : 3
+    <2a>   DW_AT_decl_line   : 8
+    <2b>   DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
+ <1><31>: Abbrev Number: 3 (DW_TAG_typedef)
+    <32>   DW_AT_type        : <0x3c>
+    <36>   DW_AT_name        : (indirect string, offset: 0x1a9): utimbuf_t
+    <3a>   DW_AT_decl_file   : 3
+    <3b>   DW_AT_decl_line   : 6
+ <1><3c>: Abbrev Number: 4 (DW_TAG_structure_type)
+    <3d>   DW_AT_name        : (indirect string, offset: 0x1a1): utimbuf
+    <41>   DW_AT_byte_size   : 8
+    <42>   DW_AT_decl_file   : 2
+    <43>   DW_AT_decl_line   : 22
+ <2><44>: Abbrev Number: 5 (DW_TAG_member)
+    <45>   DW_AT_name        : (indirect string, offset: 0x169): actime
+    <49>   DW_AT_type        : <0x61>
+    <4d>   DW_AT_decl_file   : 2
+    <4e>   DW_AT_decl_line   : 23
+    <4f>   DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
+ <2><52>: Abbrev Number: 5 (DW_TAG_member)
+    <53>   DW_AT_name        : (indirect string, offset: 0x199): modtime
+    <57>   DW_AT_type        : <0x61>
+    <5b>   DW_AT_decl_file   : 2
+    <5c>   DW_AT_decl_line   : 24
+    <5d>   DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
+ <2><60>: Abbrev Number: 0
+ <1><61>: Abbrev Number: 3 (DW_TAG_typedef)
+    <62>   DW_AT_type        : <0x6c>
+    <66>   DW_AT_name        : (indirect string, offset: 0x189): __kernel_time_t
+    <6a>   DW_AT_decl_file   : 1
+    <6b>   DW_AT_decl_line   : 77
+ <1><6c>: Abbrev Number: 3 (DW_TAG_typedef)
+    <6d>   DW_AT_type        : <0x77>
+    <71>   DW_AT_name        : (indirect string, offset: 0x179): __kernel_long_t
+    <75>   DW_AT_decl_file   : 1
+    <76>   DW_AT_decl_line   : 23
+ <1><77>: Abbrev Number: 6 (DW_TAG_base_type)
+    <78>   DW_AT_name        : (indirect string, offset: 0x170): long int
+    <7c>   DW_AT_encoding    : 5	(signed)
+    <7d>   DW_AT_byte_size   : 4
+ <1><7e>: Abbrev Number: 0
 
diff --git a/mpers-m32/utimbuf_t.d2 b/mpers-m32/utimbuf_t.d2
index 78558f4..0662adb 100644
--- a/mpers-m32/utimbuf_t.d2
+++ b/mpers-m32/utimbuf_t.d2
@@ -1,51 +1,51 @@
-<1><1e>
+<1><1f>
 Abbrev Number: 2 (DW_TAG_variable)
-DW_AT_name        : (indirect string, offset: 0x8e): mpers_target_var
-DW_AT_type        : <0x30>
+DW_AT_name        : (indirect string, offset: 0x158): mpers_target_var
+DW_AT_type        : <0x31>
 DW_AT_external    : 1
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 8
 DW_AT_location    : 5 byte block: 3 4 0 0 0 	(DW_OP_addr: 4)
-<1><30>
+<1><31>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x3b>
-DW_AT_name        : (indirect string, offset: 0xdf): utimbuf_t
+DW_AT_type        : <0x3c>
+DW_AT_name        : (indirect string, offset: 0x1a9): utimbuf_t
 DW_AT_decl_file   : 3
 DW_AT_decl_line   : 6
-<1><3b>
+<1><3c>
 Abbrev Number: 4 (DW_TAG_structure_type)
-DW_AT_name        : (indirect string, offset: 0xd7): utimbuf
+DW_AT_name        : (indirect string, offset: 0x1a1): utimbuf
 DW_AT_byte_size   : 8
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 22
-<2><43>
+<2><44>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0x9f): actime
-DW_AT_type        : <0x60>
+DW_AT_name        : (indirect string, offset: 0x169): actime
+DW_AT_type        : <0x61>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 23
 DW_AT_data_member_location: 2 byte block: 23 0 	(DW_OP_plus_uconst: 0)
-<2><51>
+<2><52>
 Abbrev Number: 5 (DW_TAG_member)
-DW_AT_name        : (indirect string, offset: 0xcf): modtime
-DW_AT_type        : <0x60>
+DW_AT_name        : (indirect string, offset: 0x199): modtime
+DW_AT_type        : <0x61>
 DW_AT_decl_file   : 2
 DW_AT_decl_line   : 24
 DW_AT_data_member_location: 2 byte block: 23 4 	(DW_OP_plus_uconst: 4)
-<1><60>
+<1><61>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x6b>
-DW_AT_name        : (indirect string, offset: 0xbf): __kernel_time_t
+DW_AT_type        : <0x6c>
+DW_AT_name        : (indirect string, offset: 0x189): __kernel_time_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 77
-<1><6b>
+<1><6c>
 Abbrev Number: 3 (DW_TAG_typedef)
-DW_AT_type        : <0x76>
-DW_AT_name        : (indirect string, offset: 0xaf): __kernel_long_t
+DW_AT_type        : <0x77>
+DW_AT_name        : (indirect string, offset: 0x179): __kernel_long_t
 DW_AT_decl_file   : 1
 DW_AT_decl_line   : 23
-<1><76>
+<1><77>
 Abbrev Number: 6 (DW_TAG_base_type)
-DW_AT_name        : (indirect string, offset: 0xa6): long int
+DW_AT_name        : (indirect string, offset: 0x170): long int
 DW_AT_encoding    : 5	(signed)
 DW_AT_byte_size   : 4
diff --git a/mpers.am b/mpers.am
index c255dcc..8b23b66 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_mpers.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 
+mpers_source_files = block.c btrfs.c dirent.c evdev_mpers.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 perf_ioctl.c print_aio_sigset.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_xlat.h b/mpers_xlat.h
index e8b3e40..b8dd926 100644
--- a/mpers_xlat.h
+++ b/mpers_xlat.h
@@ -4,6 +4,7 @@
 extern const struct xlat btrfs_balance_flags[];
 extern const struct xlat btrfs_balance_state[];
 extern const struct xlat btrfs_compress_types[];
+extern const struct xlat btrfs_cont_reading_from_srcdev_mode[];
 extern const struct xlat btrfs_defrag_flags[];
 extern const struct xlat btrfs_dev_replace_cmds[];
 extern const struct xlat btrfs_dev_replace_results[];
@@ -35,6 +36,8 @@
 extern const struct xlat mtd_flags_options[];
 extern const struct xlat mtd_otp_options[];
 extern const struct xlat mtd_nandecc_options[];
+extern const struct xlat perf_ioctl_cmds[];
+extern const struct xlat perf_ioctl_flags[];
 extern const struct xlat mq_attr_flags[];
 extern const struct xlat sigev_value[];
 extern const struct xlat adjtimex_modes[];
@@ -56,6 +59,7 @@
 extern const struct xlat sg_io_flags[];
 extern const struct xlat sigaltstack_flags[];
 extern const struct xlat iffflags[];
+extern const struct xlat arp_hardware_types[];
 extern const struct xlat v4l2_pix_fmts[];
 extern const struct xlat v4l2_sdr_fmts[];
 extern const struct xlat v4l2_device_capabilities_flags[];
@@ -70,6 +74,8 @@
 extern const struct xlat v4l2_streaming_capabilities[];
 extern const struct xlat v4l2_capture_modes[];
 extern const struct xlat v4l2_input_types[];
+extern const struct xlat v4l2_control_classes[];
+extern const struct xlat v4l2_control_id_bases[];
 extern const struct xlat v4l2_control_ids[];
 extern const struct xlat v4l2_tuner_types[];
 extern const struct xlat v4l2_tuner_capabilities[];
@@ -77,6 +83,5 @@
 extern const struct xlat v4l2_tuner_audmodes[];
 extern const struct xlat v4l2_control_types[];
 extern const struct xlat v4l2_control_flags[];
-extern const struct xlat v4l2_control_classes[];
 extern const struct xlat v4l2_framesize_types[];
 extern const struct xlat v4l2_frameinterval_types[];
diff --git a/msghdr.c b/msghdr.c
index c698e54..7dca3e0 100644
--- a/msghdr.c
+++ b/msghdr.c
@@ -4,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -350,8 +350,8 @@
 		buf_len -= len;
 	}
 	if (buf_len) {
-		tprints(", ");
-		printaddr(addr + (control_len - buf_len));
+		tprints(", ...");
+		printaddr_comment(addr + (control_len - buf_len));
 	} else if (control_len < in_control_len) {
 		tprints(", ...");
 	}
diff --git a/native_printer_decls.h b/native_printer_decls.h
index 00fc232..a10904c 100644
--- a/native_printer_decls.h
+++ b/native_printer_decls.h
@@ -1,4 +1,4 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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. */
+/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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 perf_ioctl.c.mpers.i print_aio_sigset.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_write_ioctl_mpers(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
@@ -17,6 +17,8 @@
 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 int perf_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
+extern void print_aio_sigset(struct tcb *tcp, const kernel_ulong_t addr);
 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);
diff --git a/native_printer_defs.h b/native_printer_defs.h
index de2f047..d6f3f7d 100644
--- a/native_printer_defs.h
+++ b/native_printer_defs.h
@@ -1,4 +1,4 @@
-/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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. */
+/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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 perf_ioctl.c.mpers.i print_aio_sigset.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_write_ioctl_mpers = evdev_write_ioctl_mpers,
@@ -17,6 +17,8 @@
 .hdio_ioctl = hdio_ioctl,
 .loop_ioctl = loop_ioctl,
 .mtd_ioctl = mtd_ioctl,
+.perf_ioctl = perf_ioctl,
+.print_aio_sigset = print_aio_sigset,
 .print_group_req = print_group_req,
 .printmqattr = printmqattr,
 .tprint_msgbuf = tprint_msgbuf,
diff --git a/net.c b/net.c
index 6745296..489f38a 100644
--- a/net.c
+++ b/net.c
@@ -84,10 +84,20 @@
 
 #include "xlat/inet_protocols.h"
 
-#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
-# include <bluetooth/bluetooth.h>
-# include "xlat/bt_protocols.h"
-#endif
+#define XLAT_MACROS_ONLY
+# include "xlat/addrfams.h"
+#undef XLAT_MACROS_ONLY
+#include "xlat/irda_protocols.h"
+#include "xlat/can_protocols.h"
+#include "xlat/bt_protocols.h"
+#include "xlat/isdn_protocols.h"
+#include "xlat/phonet_protocols.h"
+#include "xlat/caif_protocols.h"
+#include "xlat/nfc_protocols.h"
+#include "xlat/kcm_protocols.h"
+#include "xlat/smc_protocols.h"
+
+const size_t inet_protocols_size = ARRAY_SIZE(inet_protocols) - 1;
 
 static void
 decode_sockbuf(struct tcb *const tcp, const int fd, const kernel_ulong_t addr,
@@ -113,7 +123,7 @@
 	const char *str = xlookup(socktypes, flags & SOCK_TYPE_MASK);
 
 	if (str) {
-		tprints(str);
+		print_xlat_ex(flags & SOCK_TYPE_MASK, str, XLAT_STYLE_DEFAULT);
 		flags &= ~SOCK_TYPE_MASK;
 		if (!flags)
 			return;
@@ -131,18 +141,53 @@
 	switch (tcp->u_arg[0]) {
 	case AF_INET:
 	case AF_INET6:
-		printxval(inet_protocols, tcp->u_arg[2], "IPPROTO_???");
+		printxval_search(inet_protocols, tcp->u_arg[2], "IPPROTO_???");
 		break;
 
 	case AF_NETLINK:
 		printxval(netlink_protocols, tcp->u_arg[2], "NETLINK_???");
 		break;
 
-#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
-	case AF_BLUETOOTH:
-		printxval(bt_protocols, tcp->u_arg[2], "BTPROTO_???");
+	case AF_IRDA:
+		printxval_index(can_protocols, tcp->u_arg[2], "IRDAPROTO_???");
 		break;
-#endif
+
+	case AF_CAN:
+		printxval_index(can_protocols, tcp->u_arg[2], "CAN_???");
+		break;
+
+	case AF_BLUETOOTH:
+		printxval_index(bt_protocols, tcp->u_arg[2], "BTPROTO_???");
+		break;
+
+	case AF_RXRPC:
+		printxval(addrfams, tcp->u_arg[2], "AF_???");
+		break;
+
+	case AF_ISDN:
+		printxval(isdn_protocols, tcp->u_arg[2], "ISDN_P_???");
+		break;
+
+	case AF_PHONET:
+		printxval_index(phonet_protocols, tcp->u_arg[2], "PN_PROTO_???");
+		break;
+
+	case AF_CAIF:
+		printxval_index(caif_protocols, tcp->u_arg[2], "CAIFPROTO_???");
+		break;
+
+	case AF_NFC:
+		printxval_index(nfc_protocols, tcp->u_arg[2],
+				"NFC_SOCKPROTO_???");
+		break;
+
+	case AF_KCM:
+		printxval_index(kcm_protocols, tcp->u_arg[2], "KCMPROTO_???");
+		break;
+
+	case AF_SMC:
+		printxval_index(smc_protocols, tcp->u_arg[2], "SMCPROTO_???");
+		break;
 
 	default:
 		tprintf("%" PRI_klu, tcp->u_arg[2]);
@@ -382,19 +427,37 @@
 	return 0;
 }
 
-#include "xlat/sockoptions.h"
-#include "xlat/sockipoptions.h"
-#include "xlat/getsockipoptions.h"
-#include "xlat/setsockipoptions.h"
-#include "xlat/sockipv6options.h"
-#include "xlat/getsockipv6options.h"
-#include "xlat/setsockipv6options.h"
-#include "xlat/sockipxoptions.h"
-#include "xlat/socknetlinkoptions.h"
-#include "xlat/sockpacketoptions.h"
-#include "xlat/sockrawoptions.h"
-#include "xlat/socksctpoptions.h"
-#include "xlat/socktcpoptions.h"
+#include "xlat/sock_options.h"
+#include "xlat/getsock_options.h"
+#include "xlat/setsock_options.h"
+#include "xlat/sock_ip_options.h"
+#include "xlat/getsock_ip_options.h"
+#include "xlat/setsock_ip_options.h"
+#include "xlat/sock_ipv6_options.h"
+#include "xlat/getsock_ipv6_options.h"
+#include "xlat/setsock_ipv6_options.h"
+#include "xlat/sock_ipx_options.h"
+#include "xlat/sock_netlink_options.h"
+#include "xlat/sock_packet_options.h"
+#include "xlat/sock_raw_options.h"
+#include "xlat/sock_sctp_options.h"
+#include "xlat/sock_tcp_options.h"
+#include "xlat/sock_udp_options.h"
+#include "xlat/sock_irda_options.h"
+#include "xlat/sock_llc_options.h"
+#include "xlat/sock_dccp_options.h"
+#include "xlat/sock_tipc_options.h"
+#include "xlat/sock_rxrpc_options.h"
+#include "xlat/sock_pppol2tp_options.h"
+#include "xlat/sock_bluetooth_options.h"
+#include "xlat/sock_pnp_options.h"
+#include "xlat/sock_rds_options.h"
+#include "xlat/sock_iucv_options.h"
+#include "xlat/sock_caif_options.h"
+#include "xlat/sock_alg_options.h"
+#include "xlat/sock_nfcllcp_options.h"
+#include "xlat/sock_kcm_options.h"
+#include "xlat/sock_tls_options.h"
 
 static void
 print_sockopt_fd_level_name(struct tcb *tcp, int fd, unsigned int level,
@@ -402,38 +465,90 @@
 {
 	printfd(tcp, fd);
 	tprints(", ");
-	printxval(socketlayers, level, "SOL_??");
+	printxval_search(socketlayers, level, "SOL_??");
 	tprints(", ");
 
 	switch (level) {
 	case SOL_SOCKET:
-		printxval(sockoptions, name, "SO_???");
+		printxvals(name, "SO_???", sock_options,
+			   is_getsockopt ? getsock_options :
+					   setsock_options, NULL);
 		break;
 	case SOL_IP:
-		printxvals(name, "IP_???", sockipoptions,
-			is_getsockopt ? getsockipoptions : setsockipoptions, NULL);
+		printxvals(name, "IP_???", sock_ip_options,
+			   is_getsockopt ? getsock_ip_options :
+					   setsock_ip_options, NULL);
 		break;
 	case SOL_IPV6:
-		printxvals(name, "IPV6_???", sockipv6options,
-			is_getsockopt ? getsockipv6options : setsockipv6options, NULL);
+		printxvals(name, "IPV6_???", sock_ipv6_options,
+			   is_getsockopt ? getsock_ipv6_options :
+					   setsock_ipv6_options, NULL);
 		break;
 	case SOL_IPX:
-		printxval(sockipxoptions, name, "IPX_???");
+		printxval(sock_ipx_options, name, "IPX_???");
 		break;
 	case SOL_PACKET:
-		printxval(sockpacketoptions, name, "PACKET_???");
+		printxval(sock_packet_options, name, "PACKET_???");
 		break;
 	case SOL_TCP:
-		printxval(socktcpoptions, name, "TCP_???");
+		printxval(sock_tcp_options, name, "TCP_???");
 		break;
 	case SOL_SCTP:
-		printxval(socksctpoptions, name, "SCTP_???");
+		printxval(sock_sctp_options, name, "SCTP_???");
 		break;
 	case SOL_RAW:
-		printxval(sockrawoptions, name, "RAW_???");
+		printxval(sock_raw_options, name, "RAW_???");
 		break;
 	case SOL_NETLINK:
-		printxval(socknetlinkoptions, name, "NETLINK_???");
+		printxval(sock_netlink_options, name, "NETLINK_???");
+		break;
+	case SOL_UDP:
+		printxval(sock_udp_options, name, "UDP_???");
+		break;
+	case SOL_IRDA:
+		printxval_index(sock_irda_options, name, "IRLMP_???");
+		break;
+	case SOL_LLC:
+		printxval_index(sock_llc_options, name, "LLC_OPT_???");
+		break;
+	case SOL_DCCP:
+		printxval_search(sock_dccp_options, name, "DCCP_SOCKOPT_???");
+		break;
+	case SOL_TIPC:
+		printxval_search(sock_tipc_options, name, "TIPC_???");
+		break;
+	case SOL_RXRPC:
+		printxval_index(sock_rxrpc_options, name, "RXRPC_???");
+		break;
+	case SOL_PPPOL2TP:
+		printxval_index(sock_pppol2tp_options, name, "PPPOL2TP_SO_???");
+		break;
+	case SOL_BLUETOOTH:
+		printxval_search(sock_bluetooth_options, name, "BT_???");
+		break;
+	case SOL_PNPIPE:
+		printxval(sock_pnp_options, name, "PNPIPE_???");
+		break;
+	case SOL_RDS:
+		printxval_search(sock_rds_options, name, "RDS_???");
+		break;
+	case SOL_IUCV:
+		printxval(sock_iucv_options, name, "SO_???");
+		break;
+	case SOL_CAIF:
+		printxval(sock_caif_options, name, "CAIFSO_???");
+		break;
+	case SOL_ALG:
+		printxval_index(sock_alg_options, name, "ALG_???");
+		break;
+	case SOL_NFC:
+		printxval_index(sock_nfcllcp_options, name, "NFC_LLCP_???");
+		break;
+	case SOL_KCM:
+		printxval(sock_kcm_options, name, "KCM_???");
+		break;
+	case SOL_TLS:
+		printxval(sock_tls_options, name, "TLS_???");
 		break;
 
 		/* Other SOL_* protocol levels still need work. */
@@ -626,7 +741,7 @@
 			uint32_t buf;
 			print_array(tcp, addr, MIN(ulen, rlen) / sizeof(buf),
 				    &buf, sizeof(buf),
-				    umoven_or_printaddr, print_uint32, 0);
+				    tfetch_mem, print_uint32, 0);
 			break;
 			}
 		default:
diff --git a/netlink.c b/netlink.c
index b5855f6..8a30483 100644
--- a/netlink.c
+++ b/netlink.c
@@ -64,17 +64,25 @@
  */
 static bool
 fetch_nlmsghdr(struct tcb *const tcp, struct nlmsghdr *const nlmsghdr,
-	       const kernel_ulong_t addr, const kernel_ulong_t len)
+	       const kernel_ulong_t addr, const kernel_ulong_t len,
+	       const bool in_array)
 {
 	if (len < sizeof(struct nlmsghdr)) {
 		printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
 		return false;
 	}
 
-	if (umove_or_printaddr(tcp, addr, nlmsghdr))
-		return false;
+	if (tfetch_obj(tcp, addr, nlmsghdr))
+		return true;
 
-	return true;
+	if (in_array) {
+		tprints("...");
+		printaddr_comment(addr);
+	} else {
+		printaddr(addr);
+	}
+
+	return false;
 }
 
 static int
@@ -161,7 +169,7 @@
 	/* Reserved control nfnetlink messages first. */
 	const char *const text = xlookup(nl_netfilter_msg_types, type);
 	if (text) {
-		tprints(text);
+		print_xlat_ex(type, text, XLAT_STYLE_DEFAULT);
 		return;
 	}
 
@@ -430,7 +438,8 @@
 	} else if (family < ARRAY_SIZE(nlmsg_flags) && nlmsg_flags[family])
 		table = nlmsg_flags[family](type);
 
-	printflags_ex(flags, "NLM_F_???", netlink_flags, table, NULL);
+	printflags_ex(flags, "NLM_F_???", XLAT_STYLE_ABBREV,
+		      netlink_flags, table, NULL);
 }
 
 static void
@@ -472,7 +481,7 @@
 	const size_t nmemb = len / sizeof(cookie);
 
 	print_array(tcp, addr, nmemb, &cookie, sizeof(cookie),
-		    umoven_or_printaddr, print_cookie, 0);
+		    tfetch_mem, print_cookie, 0);
 
 	return true;
 }
@@ -521,7 +530,7 @@
 
 	if (len) {
 		tprints(", msg=");
-		if (fetch_nlmsghdr(tcp, &err.msg, addr, len)) {
+		if (fetch_nlmsghdr(tcp, &err.msg, addr, len, false)) {
 			unsigned int payload =
 				capped ? sizeof(err.msg) : err.msg.nlmsg_len;
 			if (payload > len)
@@ -606,8 +615,7 @@
 			     const kernel_ulong_t addr,
 			     const kernel_ulong_t len)
 {
-	const unsigned int nlmsg_len =
-		nlmsghdr->nlmsg_len > len ? len : nlmsghdr->nlmsg_len;
+	const unsigned int nlmsg_len = MIN(nlmsghdr->nlmsg_len, len);
 
 	if (nlmsg_len > NLMSG_HDRLEN)
 		tprints("{");
@@ -631,15 +639,16 @@
 	const int family = get_fd_nl_family(tcp, fd);
 
 	if (family == NETLINK_KOBJECT_UEVENT) {
-		printstrn(tcp, addr, len);
+		decode_netlink_kobject_uevent(tcp, addr, len);
 		return;
 	}
 
 	struct nlmsghdr nlmsghdr;
-	bool print_array = false;
+	bool is_array = false;
 	unsigned int elt;
 
-	for (elt = 0; fetch_nlmsghdr(tcp, &nlmsghdr, addr, len); elt++) {
+	for (elt = 0; fetch_nlmsghdr(tcp, &nlmsghdr, addr, len, is_array);
+	     elt++) {
 		if (abbrev(tcp) && elt == max_strlen) {
 			tprints("...");
 			break;
@@ -656,9 +665,9 @@
 				next_addr = addr + nlmsg_len;
 		}
 
-		if (!print_array && next_addr) {
+		if (!is_array && next_addr) {
 			tprints("[");
-			print_array = true;
+			is_array = true;
 		}
 
 		decode_nlmsghdr_with_payload(tcp, fd, family,
@@ -672,7 +681,7 @@
 		len = next_len;
 	}
 
-	if (print_array) {
+	if (is_array) {
 		tprints("]");
 	}
 }
diff --git a/netlink_kobject_uevent.c b/netlink_kobject_uevent.c
new file mode 100644
index 0000000..35f305a
--- /dev/null
+++ b/netlink_kobject_uevent.c
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2018 Harsha Sharma <harshasharmaiitr@gmail.com>
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR 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 "print_fields.h"
+#include "netlink_kobject_uevent.h"
+
+#include <arpa/inet.h>
+
+void
+decode_netlink_kobject_uevent(struct tcb *tcp, kernel_ulong_t addr,
+			      kernel_ulong_t len)
+{
+	struct udev_monitor_netlink_header uh;
+	const char *prefix = "libudev";
+	unsigned int offset = sizeof(uh);
+
+	if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) ||
+	    !addr || len < offset || umove(tcp, addr, &uh) ||
+	    strcmp(uh.prefix, prefix) != 0) {
+		printstrn(tcp, addr, len);
+		return;
+	}
+
+	PRINT_FIELD_CSTRING("{{", uh, prefix);
+	tprintf(", magic=htonl(%#x)", ntohl(uh.magic));
+	PRINT_FIELD_U(", ", uh, header_size);
+	PRINT_FIELD_U(", ", uh, properties_off);
+	PRINT_FIELD_U(", ", uh, properties_len);
+	tprintf(", filter_subsystem_hash=htonl(%#x)", ntohl(uh.filter_subsystem_hash));
+	tprintf(", filter_devtype_hash=htonl(%#x)", ntohl(uh.filter_devtype_hash));
+	tprintf(", filter_tag_bloom_hi=htonl(%#x)", ntohl(uh.filter_tag_bloom_hi));
+	tprintf(", filter_tag_bloom_lo=htonl(%#x)", ntohl(uh.filter_tag_bloom_lo));
+	tprints("}");
+	if (len > offset) {
+		tprints(", ");
+		printstrn(tcp, addr + offset, len - offset);
+	}
+	tprints("}");
+}
diff --git a/netlink_kobject_uevent.h b/netlink_kobject_uevent.h
new file mode 100644
index 0000000..5ac57ca
--- /dev/null
+++ b/netlink_kobject_uevent.h
@@ -0,0 +1,17 @@
+#ifndef STRACE_NETLINK_KOBJECT_UEVENT_H
+#define STRACE_NETLINK_KOBJECT_UEVENT_H
+
+struct udev_monitor_netlink_header {
+	/* "libudev" prefix to distinguish libudev and kernel messages */
+	char prefix[8];
+	unsigned int magic;
+	unsigned int header_size;
+	unsigned int properties_off;
+	unsigned int properties_len;
+	unsigned int filter_subsystem_hash;
+	unsigned int filter_devtype_hash;
+	unsigned int filter_tag_bloom_hi;
+	unsigned int filter_tag_bloom_lo;
+};
+
+#endif /* !STRACE_NETLINK_KOBJECT_UEVENT_H */
diff --git a/netlink_netlink_diag.c b/netlink_netlink_diag.c
index eb689b8..7ff9887 100644
--- a/netlink_netlink_diag.c
+++ b/netlink_netlink_diag.c
@@ -98,7 +98,7 @@
 		return false;
 
 	print_array(tcp, addr, nmemb, &buf, current_wordsize,
-		    umoven_or_printaddr, print_group, 0);
+		    tfetch_mem, print_group, 0);
 
 	return true;
 }
diff --git a/netlink_packet_diag.c b/netlink_packet_diag.c
index db688a9..18b7091 100644
--- a/netlink_packet_diag.c
+++ b/netlink_packet_diag.c
@@ -96,8 +96,7 @@
 			 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;
+	uint16_t alen = MIN(dml->pdmc_alen, sizeof(dml->pdmc_addr));
 
 	PRINT_FIELD_IFINDEX("{", *dml, pdmc_index);
 	PRINT_FIELD_U(", ", *dml, pdmc_count);
@@ -122,7 +121,7 @@
 		return false;
 
 	print_array(tcp, addr, nmemb, &dml, sizeof(dml),
-		    umoven_or_printaddr, print_packet_diag_mclist, 0);
+		    tfetch_mem, print_packet_diag_mclist, 0);
 
 	return true;
 }
diff --git a/netlink_unix_diag.c b/netlink_unix_diag.c
index 4f3fbcc..409180f 100644
--- a/netlink_unix_diag.c
+++ b/netlink_unix_diag.c
@@ -107,7 +107,7 @@
 		return false;
 
 	print_array(tcp, addr, nmemb, &inode, sizeof(inode),
-		    umoven_or_printaddr, print_inode, 0);
+		    tfetch_mem, print_inode, 0);
 
 	return true;
 }
diff --git a/nlattr.c b/nlattr.c
index a71c79a..af7cc16 100644
--- a/nlattr.c
+++ b/nlattr.c
@@ -36,19 +36,29 @@
 #include <linux/sock_diag.h>
 #include "static_assert.h"
 
+#include "xlat/netlink_sk_meminfo_indices.h"
+
 static bool
 fetch_nlattr(struct tcb *const tcp, struct nlattr *const nlattr,
-	     const kernel_ulong_t addr, const unsigned int len)
+	     const kernel_ulong_t addr, const unsigned int len,
+	     const bool in_array)
 {
 	if (len < sizeof(struct nlattr)) {
 		printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
 		return false;
 	}
 
-	if (umove_or_printaddr(tcp, addr, nlattr))
-		return false;
+	if (tfetch_obj(tcp, addr, nlattr))
+		return true;
 
-	return true;
+	if (in_array) {
+		tprints("...");
+		printaddr_comment(addr);
+	} else {
+		printaddr(addr);
+	}
+
+	return false;
 }
 
 static void
@@ -60,10 +70,14 @@
 		      "wrong NLA_TYPE_MASK");
 
 	tprintf("{nla_len=%u, nla_type=", nla->nla_len);
-	if (nla->nla_type & NLA_F_NESTED)
-		tprints("NLA_F_NESTED|");
-	if (nla->nla_type & NLA_F_NET_BYTEORDER)
-		tprints("NLA_F_NET_BYTEORDER|");
+	if (nla->nla_type & NLA_F_NESTED) {
+		print_xlat(NLA_F_NESTED);
+		tprints("|");
+	}
+	if (nla->nla_type & NLA_F_NET_BYTEORDER) {
+		print_xlat(NLA_F_NET_BYTEORDER);
+		tprints("|");
+	}
 	printxval(table, nla->nla_type & NLA_TYPE_MASK, dflt);
 	tprints("}");
 }
@@ -79,7 +93,7 @@
 			const unsigned int size,
 			const void *const opaque_data)
 {
-	const unsigned int nla_len = nla->nla_len > len ? len : nla->nla_len;
+	const unsigned int nla_len = MIN(nla->nla_len, len);
 
 	if (nla_len > NLA_HDRLEN)
 		tprints("{");
@@ -87,13 +101,18 @@
 	print_nlattr(nla, table, dflt);
 
 	if (nla_len > NLA_HDRLEN) {
+		const unsigned int idx = size ? nla->nla_type : 0;
+
 		tprints(", ");
 		if (!decoders
-		    || nla->nla_type >= size
-		    || !decoders[nla->nla_type]
-		    || !decoders[nla->nla_type](tcp, addr + NLA_HDRLEN,
-						nla_len - NLA_HDRLEN,
-						opaque_data))
+		    || (size && idx >= size)
+		    || !decoders[idx]
+		    || !decoders[idx](
+				tcp, addr + NLA_HDRLEN,
+				nla_len - NLA_HDRLEN,
+				size ? opaque_data
+				     : (const void *) (uintptr_t) nla->nla_type)
+		    )
 			printstr_ex(tcp, addr + NLA_HDRLEN,
 				    nla_len - NLA_HDRLEN, QUOTE_FORCE_HEX);
 		tprints("}");
@@ -111,10 +130,17 @@
 	      const void *const opaque_data)
 {
 	struct nlattr nla;
-	bool print_array = false;
+	bool is_array = false;
 	unsigned int elt;
 
-	for (elt = 0; fetch_nlattr(tcp, &nla, addr, len); elt++) {
+	if (decoders && !size && opaque_data)
+		error_func_msg("[xlat %p, dflt \"%s\", decoders %p] "
+			       "size is zero (going to pass nla_type as "
+			       "decoder argument), but opaque data (%p) is not "
+			       "- will be ignored",
+			       table, dflt, decoders, opaque_data);
+
+	for (elt = 0; fetch_nlattr(tcp, &nla, addr, len, is_array); elt++) {
 		if (abbrev(tcp) && elt == max_strlen) {
 			tprints("...");
 			break;
@@ -131,9 +157,9 @@
 				next_addr = addr + nla_len;
 		}
 
-		if (!print_array && next_addr) {
+		if (!is_array && next_addr) {
 			tprints("[");
-			print_array = true;
+			is_array = true;
 		}
 
 		decode_nlattr_with_data(tcp, &nla, addr, len, table, dflt,
@@ -147,7 +173,7 @@
 		len = next_len;
 	}
 
-	if (print_array) {
+	if (is_array) {
 		tprints("]");
 	}
 }
@@ -174,24 +200,6 @@
 	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,
@@ -205,8 +213,12 @@
 		return false;
 
 	unsigned int count = 0;
-	print_array(tcp, addr, nmemb, &mem, sizeof(mem),
-		    umoven_or_printaddr, print_meminfo, &count);
+	print_array_ex(tcp, addr, nmemb, &mem, sizeof(mem),
+		       tfetch_mem, print_uint32_array_member, &count,
+		       PAF_PRINT_INDICES | PAF_INDEX_XLAT_VALUE_INDEXED
+			| XLAT_STYLE_FMT_U,
+		       ARRSZ_PAIR(netlink_sk_meminfo_indices),
+		       "SK_MEMINFO_???");
 
 	return true;
 }
@@ -228,6 +240,31 @@
 }
 
 bool
+decode_nla_uid(struct tcb *const tcp,
+	       const kernel_ulong_t addr,
+	       const unsigned int len,
+	       const void *const opaque_data)
+{
+	uint32_t uid;
+
+	if (len < sizeof(uid))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &uid))
+		printuid("", uid);
+
+	return true;
+}
+
+bool
+decode_nla_gid(struct tcb *const tcp,
+	       const kernel_ulong_t addr,
+	       const unsigned int len,
+	       const void *const opaque_data)
+{
+	return decode_nla_uid(tcp, addr, len, opaque_data);
+}
+
+bool
 decode_nla_ifindex(struct tcb *const tcp,
 	       const kernel_ulong_t addr,
 	       const unsigned int len,
@@ -244,6 +281,121 @@
 }
 
 bool
+decode_nla_xval(struct tcb *const tcp,
+		const kernel_ulong_t addr,
+		unsigned int len,
+		const void *const opaque_data)
+{
+	const struct decode_nla_xlat_opts * const opts = opaque_data;
+	union {
+		uint64_t val;
+		uint8_t  bytes[sizeof(uint64_t)];
+	} data = { .val = 0 };
+
+	if (len > sizeof(data) || len < opts->size)
+		return false;
+
+	if (opts->size)
+		len = MIN(len, opts->size);
+
+	const size_t bytes_offs = is_bigendian ? sizeof(data) - len : 0;
+
+	if (!umoven_or_printaddr(tcp, addr, len, data.bytes + bytes_offs)) {
+		if (opts->process_fn)
+			data.val = opts->process_fn(data.val);
+		if (opts->prefix)
+			tprints(opts->prefix);
+		printxval_dispatch_ex(opts->xlat, opts->xlat_size, data.val,
+				      opts->dflt, opts->xt, opts->style);
+		if (opts->suffix)
+			tprints(opts->suffix);
+	}
+
+	return true;
+}
+
+static uint64_t
+process_host_order(uint64_t val)
+{
+	return ntohs(val);
+}
+
+bool
+decode_nla_ether_proto(struct tcb *const tcp,
+		       const kernel_ulong_t addr,
+		       const unsigned int len,
+		       const void *const opaque_data)
+{
+	const struct decode_nla_xlat_opts opts = {
+		.xlat = ethernet_protocols,
+		.xlat_size = ethernet_protocols_size,
+		.dflt = "ETHER_P_???",
+		.xt = XT_SORTED,
+		.prefix = "htons(",
+		.suffix = ")",
+		.size = 2,
+		.process_fn = process_host_order,
+	};
+
+	return decode_nla_xval(tcp, addr, len, &opts);
+}
+
+bool
+decode_nla_ip_proto(struct tcb *const tcp,
+		    const kernel_ulong_t addr,
+		    const unsigned int len,
+		    const void *const opaque_data)
+{
+	const struct decode_nla_xlat_opts opts = {
+		.xlat = inet_protocols,
+		.xlat_size = inet_protocols_size,
+		.xt = XT_SORTED,
+		.dflt = "IPPROTO_???",
+		.size = 1,
+	};
+
+	return decode_nla_xval(tcp, addr, len, &opts);
+}
+
+bool
+decode_nla_flags(struct tcb *const tcp,
+		 const kernel_ulong_t addr,
+		 unsigned int len,
+		 const void *const opaque_data)
+{
+	const struct decode_nla_xlat_opts * const opts = opaque_data;
+	union {
+		uint64_t flags;
+		uint8_t  bytes[sizeof(uint64_t)];
+	} data = { .flags = 0 };
+
+	if (len > sizeof(data) || len < opts->size)
+		return false;
+
+	if (opts->size)
+		len = MIN(len, opts->size);
+
+	const size_t bytes_offs = is_bigendian ? sizeof(data) - len : 0;
+
+	if (opts->xt == XT_INDEXED)
+		error_func_msg("indexed xlats are currently incompatible with "
+			       "printflags");
+
+	if (!umoven_or_printaddr(tcp, addr, len, data.bytes + bytes_offs)) {
+		if (opts->process_fn)
+			data.flags = opts->process_fn(data.flags);
+		if (opts->prefix)
+			tprints(opts->prefix);
+		printflags_ex(data.flags, opts->dflt, opts->style, opts->xlat,
+			      NULL);
+		if (opts->suffix)
+			tprints(opts->suffix);
+	}
+
+	return true;
+}
+
+bool
 decode_nla_be16(struct tcb *const tcp,
 		const kernel_ulong_t addr,
 		const unsigned int len,
@@ -295,6 +447,10 @@
 	return true;					\
 }
 
+DECODE_NLA_INTEGER(x8, uint8_t, "%#" PRIx8)
+DECODE_NLA_INTEGER(x16, uint16_t, "%#" PRIx16)
+DECODE_NLA_INTEGER(x32, uint32_t, "%#" PRIx32)
+DECODE_NLA_INTEGER(x64, uint64_t, "%#" PRIx64)
 DECODE_NLA_INTEGER(u8, uint8_t, "%" PRIu8)
 DECODE_NLA_INTEGER(u16, uint16_t, "%" PRIu16)
 DECODE_NLA_INTEGER(u32, uint32_t, "%" PRIu32)
diff --git a/nlattr.h b/nlattr.h
index 00cbfd5..27ffdeb 100644
--- a/nlattr.h
+++ b/nlattr.h
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,15 +30,45 @@
 #ifndef STRACE_NLATTR_H
 #define STRACE_NLATTR_H
 
+#include "xlat.h"
+
+struct decode_nla_xlat_opts {
+	const struct xlat *xlat;
+	size_t xlat_size; /* is not needed for XT_NORMAL */
+	const char *dflt;
+	enum xlat_type xt;
+	enum xlat_style style;
+	const char *prefix;
+	const char *suffix;
+	uint64_t (*process_fn)(uint64_t val);
+	size_t size;
+};
+
+/*
+ * Used for IFLA_LINKINFO decoding.  Since there are no other indicators
+ * regarding the nature of data except for previously provided string
+ * in an IFLA_LINKINFO_KIND attribute, we have to store it in order to pass
+ * between calls as an opaque data.
+ */
+struct ifla_linkinfo_ctx {
+	char kind[16];
+};
+
 typedef bool (*nla_decoder_t)(struct tcb *, kernel_ulong_t addr,
 			      unsigned int len, const void *opaque_data);
+
+/**
+ * The case of non-NULL decoders and zero size is handled in a special way:
+ * the zeroth decoder is always called with nla_type being passed as opaque
+ * data.
+ */
 extern void
 decode_nlattr(struct tcb *,
 	      kernel_ulong_t addr,
 	      unsigned int len,
 	      const struct xlat *,
 	      const char *dflt,
-	      const nla_decoder_t *,
+	      const nla_decoder_t *decoders,
 	      unsigned int size,
 	      const void *opaque_data);
 
@@ -48,6 +78,10 @@
 		    unsigned int len, const void *)	\
 /* End of DECL_NLA definition. */
 
+DECL_NLA(x8);
+DECL_NLA(x16);
+DECL_NLA(x32);
+DECL_NLA(x64);
 DECL_NLA(u8);
 DECL_NLA(u16);
 DECL_NLA(u32);
@@ -58,12 +92,19 @@
 DECL_NLA(s64);
 DECL_NLA(be16);
 DECL_NLA(be64);
+DECL_NLA(xval);
+DECL_NLA(flags);
 DECL_NLA(str);
 DECL_NLA(strn);
 DECL_NLA(fd);
+DECL_NLA(uid);
+DECL_NLA(gid);
 DECL_NLA(ifindex);
+DECL_NLA(ether_proto);
+DECL_NLA(ip_proto);
 DECL_NLA(meminfo);
 DECL_NLA(rt_class);
+DECL_NLA(rt_proto);
 DECL_NLA(tc_stats);
 
 #endif /* !STRACE_NLATTR_H */
diff --git a/numa.c b/numa.c
index 7564d87..c4500e8 100644
--- a/numa.c
+++ b/numa.c
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2003-2007 Ulrich Drepper <drepper@redhat.com>
  * Copyright (c) 2005-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -59,7 +59,7 @@
 
 	kernel_ulong_t buf;
 	print_array(tcp, addr, nmemb, &buf, current_wordsize,
-		    umoven_or_printaddr, print_node, 0);
+		    tfetch_mem, print_node, 0);
 }
 
 SYS_FUNC(migrate_pages)
@@ -166,14 +166,14 @@
 	if (entering(tcp)) {
 		tprintf("%d, %" PRI_klu ", ", (int) tcp->u_arg[0], npages);
 		print_array(tcp, tcp->u_arg[2], npages, &buf, current_wordsize,
-			    umoven_or_printaddr, print_addr, 0);
+			    tfetch_mem, print_addr, 0);
 		tprints(", ");
 		print_array(tcp, tcp->u_arg[3], npages, &buf, sizeof(int),
-			    umoven_or_printaddr, print_int, 0);
+			    tfetch_mem, print_int, 0);
 		tprints(", ");
 	} else {
 		print_array(tcp, tcp->u_arg[4], npages, &buf, sizeof(int),
-			    umoven_or_printaddr, print_status, 0);
+			    tfetch_mem, print_status, 0);
 		tprints(", ");
 		printflags(move_pages_flags, tcp->u_arg[5], "MPOL_???");
 	}
diff --git a/open.c b/open.c
index afa5020..fde21cc 100644
--- a/open.c
+++ b/open.c
@@ -62,11 +62,11 @@
 print_dirfd(struct tcb *tcp, int fd)
 {
 	if (fd == AT_FDCWD)
-		tprints("AT_FDCWD, ");
-	else {
+		print_xlat_d(AT_FDCWD);
+	else
 		printfd(tcp, fd);
-		tprints(", ");
-	}
+
+	tprints(", ");
 }
 
 /*
@@ -113,7 +113,8 @@
 void
 tprint_open_modes(unsigned int flags)
 {
-	tprints(sprint_open_modes(flags) + sizeof("flags"));
+	print_xlat_ex(flags, sprint_open_modes(flags) + sizeof("flags"),
+		      XLAT_STYLE_DEFAULT);
 }
 
 #ifdef O_TMPFILE
diff --git a/perf.c b/perf.c
index b37f54a..e66ca4d 100644
--- a/perf.c
+++ b/perf.c
@@ -60,7 +60,7 @@
 	free(desc);
 }
 
-static int
+int
 fetch_perf_event_attr(struct tcb *const tcp, const kernel_ulong_t addr)
 {
 	struct pea_desc *desc;
@@ -117,7 +117,7 @@
 		printxval_search(xlat, x, dflt); \
 	} while (0)
 
-static void
+void
 print_perf_event_attr(struct tcb *const tcp, const kernel_ulong_t addr)
 {
 	static const char *precise_ip_desc[] = {
diff --git a/perf_event_struct.h b/perf_event_struct.h
index a75b88a..57d245b 100644
--- a/perf_event_struct.h
+++ b/perf_event_struct.h
@@ -71,4 +71,10 @@
 	/* End of ver 5 - 112 bytes */
 };
 
+struct perf_event_query_bpf {
+        uint32_t ids_len;
+        uint32_t prog_cnt;
+        uint32_t ids[0];
+};
+
 #endif /* !STRACE_LINUX_PERF_EVENT_STRUCT_H */
diff --git a/perf_ioctl.c b/perf_ioctl.c
new file mode 100644
index 0000000..398fe69
--- /dev/null
+++ b/perf_ioctl.c
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR 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 "perf_event_struct.h"
+
+#define XLAT_MACROS_ONLY
+# include "xlat/perf_ioctl_cmds.h"
+#undef XLAT_MACROS_ONLY
+
+#include "xlat/perf_ioctl_flags.h"
+
+#include MPERS_DEFS
+
+static int
+perf_ioctl_query_bpf(struct tcb *const tcp, const kernel_ulong_t arg)
+{
+	uint32_t info;
+
+	if (entering(tcp)) {
+		tprints(", ");
+
+		if (umove_or_printaddr(tcp, arg, &info))
+			return RVAL_IOCTL_DECODED;
+
+		tprintf("{ids_len=%u, ", info);
+
+		return 0;
+	}
+
+	if (syserror(tcp) ||
+	    umove(tcp, arg + offsetof(struct perf_event_query_bpf, prog_cnt),
+		  &info)) {
+		tprints("...}");
+
+		return RVAL_IOCTL_DECODED;
+	}
+
+	tprintf("prog_cnt=%u, ids=", info);
+
+	print_array(tcp, arg + offsetof(struct perf_event_query_bpf, ids), info,
+		    &info, sizeof(info),
+		    tfetch_mem, print_uint32_array_member, NULL);
+
+	tprints("}");
+
+	return RVAL_IOCTL_DECODED;
+}
+
+static int
+perf_ioctl_modify_attributes(struct tcb *const tcp, const kernel_ulong_t arg)
+{
+	tprints(", ");
+	if (!fetch_perf_event_attr(tcp, arg))
+		print_perf_event_attr(tcp, arg);
+
+	return RVAL_IOCTL_DECODED;
+}
+
+MPERS_PRINTER_DECL(int, perf_ioctl,
+		   struct tcb *const tcp, const unsigned int code,
+		   const kernel_ulong_t arg)
+{
+	switch (code) {
+	case PERF_EVENT_IOC_ENABLE:
+	case PERF_EVENT_IOC_DISABLE:
+	case PERF_EVENT_IOC_RESET:
+		tprints(", ");
+		printflags(perf_ioctl_flags, arg, "PERF_IOC_FLAG_???");
+
+		return RVAL_IOCTL_DECODED;
+
+	case PERF_EVENT_IOC_REFRESH:
+		tprintf(", %d", (int) arg);
+
+		return RVAL_IOCTL_DECODED;
+
+	case PERF_EVENT_IOC_PERIOD:
+		tprints(", ");
+		printnum_int64(tcp, arg, "%" PRIu64);
+
+		return RVAL_IOCTL_DECODED;
+
+	case PERF_EVENT_IOC_SET_OUTPUT:
+	case PERF_EVENT_IOC_SET_BPF:
+		tprintf(", ");
+		printfd(tcp, (int) arg);
+
+		return RVAL_IOCTL_DECODED;
+
+	case PERF_EVENT_IOC_PAUSE_OUTPUT:
+		tprintf(", %" PRI_klu, arg);
+
+		return RVAL_IOCTL_DECODED;
+
+	/*
+	 * The following ioctl requests are personality-specific
+	 * due to the pointer size.
+	 */
+	case PERF_EVENT_IOC_SET_FILTER:
+		tprints(", ");
+		printstr_ex(tcp, arg, get_pagesize(), QUOTE_0_TERMINATED);
+
+		return RVAL_IOCTL_DECODED;
+
+	case PERF_EVENT_IOC_ID:
+		if (entering(tcp)) {
+			tprints(", ");
+
+			return 0;
+		}
+
+		printnum_int64(tcp, arg, "%" PRIu64);
+
+		return RVAL_IOCTL_DECODED;
+
+	case PERF_EVENT_IOC_QUERY_BPF:
+		return perf_ioctl_query_bpf(tcp, arg);
+
+	case PERF_EVENT_IOC_MODIFY_ATTRIBUTES:
+		return perf_ioctl_modify_attributes(tcp, arg);
+
+	default:
+		return RVAL_DECODED;
+	}
+}
diff --git a/poll.c b/poll.c
index da42388..db1931d 100644
--- a/poll.c
+++ b/poll.c
@@ -57,7 +57,7 @@
 	struct pollfd fds;
 
 	print_array(tcp, addr, nfds, &fds, sizeof(fds),
-		    umoven_or_printaddr, print_pollfd, 0);
+		    tfetch_mem, print_pollfd, 0);
 	tprintf(", %u, ", nfds);
 }
 
diff --git a/prctl.c b/prctl.c
index a0f4f6a..568b5f7 100644
--- a/prctl.c
+++ b/prctl.c
@@ -42,6 +42,9 @@
 #include "xlat/pr_mce_kill.h"
 #include "xlat/pr_mce_kill_policy.h"
 #include "xlat/pr_set_mm.h"
+#include "xlat/pr_spec_cmds.h"
+#include "xlat/pr_spec_get_store_bypass_flags.h"
+#include "xlat/pr_spec_set_store_bypass_flags.h"
 #include "xlat/pr_sve_vl_flags.h"
 #include "xlat/pr_tsc.h"
 #include "xlat/pr_unalign_flags.h"
@@ -225,6 +228,27 @@
 
 		return RVAL_STR;
 
+	case PR_GET_SPECULATION_CTRL:
+		if (entering(tcp)) {
+			tprints(", ");
+			printxval64(pr_spec_cmds, arg2, "PR_SPEC_???");
+
+			break;
+		}
+
+		if (syserror(tcp))
+			return 0;
+
+		switch (arg2) {
+		case PR_SPEC_STORE_BYPASS:
+			tcp->auxstr = sprintflags("",
+						  pr_spec_get_store_bypass_flags,
+						  (kernel_ulong_t) tcp->u_rval);
+			break;
+		}
+
+		return RVAL_STR;
+
 	/* PR_TASK_PERF_EVENTS_* take no arguments. */
 	case PR_TASK_PERF_EVENTS_DISABLE:
 	case PR_TASK_PERF_EVENTS_ENABLE:
@@ -319,10 +343,12 @@
 
 	case PR_SET_PTRACER:
 		tprints(", ");
-		if ((int) arg2 == -1)
-			tprints("PR_SET_PTRACER_ANY");
-		else
+		if ((int) arg2 == -1) {
+			print_xlat_ex(arg2, "PR_SET_PTRACER_ANY",
+				      XLAT_STYLE_DEFAULT);
+		} else {
 			tprintf("%" PRI_klu, arg2);
+		}
 		return RVAL_DECODED;
 
 	case PR_SET_SECCOMP:
@@ -380,6 +406,23 @@
 		printflags(pr_fp_mode, arg2, "PR_FP_MODE_???");
 		return RVAL_DECODED;
 
+	case PR_SET_SPECULATION_CTRL:
+		tprints(", ");
+		printxval64(pr_spec_cmds, arg2, "PR_SPEC_???");
+		tprints(", ");
+
+		switch (arg2) {
+		case PR_SPEC_STORE_BYPASS:
+			printxval64(pr_spec_set_store_bypass_flags, arg3,
+				    "PR_SPEC_???");
+			break;
+
+		default:
+			tprintf("%#" PRI_klx, arg3);
+		}
+
+		return RVAL_DECODED;
+
 	case PR_GET_NO_NEW_PRIVS:
 	case PR_GET_THP_DISABLE:
 	case PR_MPX_DISABLE_MANAGEMENT:
diff --git a/print_aio_sigset.c b/print_aio_sigset.c
new file mode 100644
index 0000000..9903951
--- /dev/null
+++ b/print_aio_sigset.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR 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(strace_aio_sigset)
+
+typedef struct {
+	sigset_t *sigmask;
+	size_t sigsetsize;
+} strace_aio_sigset;
+
+#include MPERS_DEFS
+
+#include "print_fields.h"
+
+MPERS_PRINTER_DECL(void, print_aio_sigset, struct tcb *tcp,
+		   const kernel_ulong_t addr)
+{
+	strace_aio_sigset sigset;
+
+	if (!umove_or_printaddr(tcp, addr, &sigset)) {
+		tprints("{sigmask=");
+		print_sigset_addr_len(tcp, (uintptr_t) sigset.sigmask,
+				      sigset.sigsetsize);
+		PRINT_FIELD_U(", ", sigset, sigsetsize);
+		tprints("}");
+	}
+}
diff --git a/print_fields.h b/print_fields.h
index 0b810d5..ffcabf4 100644
--- a/print_fields.h
+++ b/print_fields.h
@@ -91,6 +91,31 @@
 			    (dflt_));		\
 	} while (0)
 
+#define PRINT_FIELD_XVAL_U(prefix_, where_, field_, xlat_, dflt_)	\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		printxvals_ex(zero_extend_signed_to_ull((where_).field_), \
+			      (dflt_), XLAT_STYLE_FMT_U,		\
+			      (xlat_), NULL);				\
+	} while (0)
+
+#define PRINT_FIELD_XVAL_SORTED_SIZED(prefix_, where_, field_, xlat_,	\
+				      xlat_size_, dflt_)		\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		printxval_searchn((xlat_), (xlat_size_),		\
+				  zero_extend_signed_to_ull((where_).field_), \
+				  (dflt_));				\
+	} while (0)
+
+#define PRINT_FIELD_XVAL_INDEX(prefix_, where_, field_, xlat_, dflt_)	\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		printxval_index((xlat_),				\
+				zero_extend_signed_to_ull((where_).field_), \
+				(dflt_));				\
+	} while (0)
+
 /*
  * Generic "ID" printing. ID is considered unsigned except for the special value
  * of -1.
@@ -106,6 +131,16 @@
 
 #define PRINT_FIELD_UID PRINT_FIELD_ID
 
+#define PRINT_FIELD_U64(prefix_, where_, field_)					\
+	do {										\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);				\
+		if (zero_extend_signed_to_ull((where_).field_) == UINT64_MAX)		\
+			print_xlat_ex(UINT64_MAX, "UINT64_MAX", XLAT_STYLE_FMT_U);	\
+		else									\
+			STRACE_PRINTF("%llu",						\
+				      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_);		\
@@ -202,4 +237,17 @@
 		printpath((tcp_), (where_).field_);			\
 	} while (0)
 
+#define PRINT_FIELD_MAC(prefix_, where_, field_)			\
+	PRINT_FIELD_MAC_SZ((prefix_), (where_), field_,			\
+			   ARRAY_SIZE((where_).field_))
+
+#define PRINT_FIELD_MAC_SZ(prefix_, where_, field_, size_)		\
+	do {								\
+		static_assert(sizeof(((where_).field_)[0]) == 1,	\
+			      "MAC address is not a byte array");	\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		print_mac_addr("", (const uint8_t *) ((where_).field_),	\
+			       (size_));				\
+	} while (0)
+
 #endif /* !STRACE_PRINT_FIELDS_H */
diff --git a/print_ifindex.c b/print_ifindex.c
index f978a5a..2df1e3b 100644
--- a/print_ifindex.c
+++ b/print_ifindex.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001-2017 The strace developers.
+ * Copyright (c) 2001-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,19 +28,41 @@
 #include "defs.h"
 #include <net/if.h>
 
+#ifdef HAVE_IF_INDEXTONAME
+# include "xstring.h"
+
+# define INI_PFX "if_nametoindex("
+# define INI_SFX ")"
+# define IFNAME_QUOTED_SZ (sizeof(IFNAMSIZ) * 4 + 3)
+
+static const char *
+get_ifname(const unsigned int ifindex)
+{
+	static char res[IFNAME_QUOTED_SZ + sizeof(INI_PFX INI_SFX)];
+
+	char name_buf[IFNAMSIZ];
+	char name_quoted_buf[IFNAME_QUOTED_SZ];
+
+	if (if_indextoname(ifindex, name_buf)) {
+		if (string_quote(name_buf, name_quoted_buf, sizeof(name_buf),
+				 QUOTE_0_TERMINATED, NULL))
+			return NULL;
+
+		xsprintf(res, INI_PFX "%s" INI_SFX, name_quoted_buf);
+
+		return res;
+	}
+
+	return NULL;
+}
+#endif /* HAVE_IF_INDEXTONAME */
+
 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
-
+	print_xlat_ex(ifindex, get_ifname(ifindex), XLAT_STYLE_FMT_U);
+#else
 	tprintf("%u", ifindex);
+#endif
 }
diff --git a/print_mac.c b/print_mac.c
new file mode 100644
index 0000000..e384f75
--- /dev/null
+++ b/print_mac.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR 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 "error_prints.h"
+#include "xstring.h"
+
+#ifndef MAX_ADDR_LEN
+# define MAX_ADDR_LEN 32
+#endif
+
+const char *
+sprint_mac_addr(const uint8_t addr[], size_t size)
+{
+	static char res[MAX_ADDR_LEN * 3];
+
+	if (size > MAX_ADDR_LEN) {
+		error_func_msg("Address size (%zu) is more than maximum "
+			       "supported (%u)", size, MAX_ADDR_LEN);
+
+		return NULL;
+	}
+
+	char *ptr = res;
+
+	for (size_t i = 0; i < size; i++)
+		ptr = xappendstr(res, ptr, "%s%02x", i ? ":" : "", addr[i]);
+
+	return res;
+}
diff --git a/printers.h b/printers.h
index 333d53a..84f95c2 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_mpers.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. */
+/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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 perf_ioctl.c.mpers.i print_aio_sigset.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)
@@ -54,6 +54,12 @@
  int (*mtd_ioctl)(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
 #define mtd_ioctl MPERS_PRINTER_NAME(mtd_ioctl)
 
+ int (*perf_ioctl)(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
+#define perf_ioctl MPERS_PRINTER_NAME(perf_ioctl)
+
+ void (*print_aio_sigset)(struct tcb *tcp, const kernel_ulong_t addr);
+#define print_aio_sigset MPERS_PRINTER_NAME(print_aio_sigset)
+
  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)
 
diff --git a/printmode.c b/printmode.c
index d9dcfa3..7a5479f 100644
--- a/printmode.c
+++ b/printmode.c
@@ -4,7 +4,7 @@
  * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
  * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
  * Copyright (c) 2012 Denys Vlasenko <vda.linux@googlemail.com>
- * Copyright (c) 2012-2017 The strace developers.
+ * Copyright (c) 2012-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,25 +40,24 @@
 void
 print_symbolic_mode_t(const unsigned int mode)
 {
-	const char *ifmt;
+	const char *ifmt = "";
 
-	if (mode & S_IFMT) {
+	if (mode & S_IFMT)
 		ifmt = xlookup(modetypes, mode & S_IFMT);
-		if (!ifmt) {
-			tprintf("%#03o", mode);
-			return;
-		}
-	} else {
-		ifmt = NULL;
-	}
 
-	tprintf("%s%s%s%s%s%#03o",
-		ifmt ? ifmt : "",
-		ifmt ? "|" : "",
-		(mode & S_ISUID) ? "S_ISUID|" : "",
-		(mode & S_ISGID) ? "S_ISGID|" : "",
-		(mode & S_ISVTX) ? "S_ISVTX|" : "",
-		mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX));
+	if (!ifmt || xlat_verbose(xlat_verbosity) != XLAT_STYLE_ABBREV)
+		tprintf("%#03o", mode);
+
+	if (!ifmt || xlat_verbose(xlat_verbosity) == XLAT_STYLE_RAW)
+		return;
+
+	(xlat_verbose(xlat_verbosity) == XLAT_STYLE_ABBREV
+		? tprintf : tprintf_comment)("%s%s%s%s%s%#03o",
+			ifmt, ifmt[0] ? "|" : "",
+			(mode & S_ISUID) ? "S_ISUID|" : "",
+			(mode & S_ISGID) ? "S_ISGID|" : "",
+			(mode & S_ISVTX) ? "S_ISVTX|" : "",
+			mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX));
 }
 
 void
diff --git a/printsiginfo.c b/printsiginfo.c
index bab9e22..d46003c 100644
--- a/printsiginfo.c
+++ b/printsiginfo.c
@@ -126,10 +126,7 @@
 		}
 	}
 
-	if (code)
-		tprints(code);
-	else
-		tprintf("%#x", si_code);
+	print_xlat_ex(si_code, code, XLAT_STYLE_DEFAULT);
 }
 
 static void
@@ -280,5 +277,5 @@
 	siginfo_t si;
 
 	print_array(tcp, addr, len, &si, sizeof(si),
-		    umoven_or_printaddr, print_siginfo_t, 0);
+		    tfetch_mem, print_siginfo_t, 0);
 }
diff --git a/rtnl_link.c b/rtnl_link.c
index a01452f..f16c737 100644
--- a/rtnl_link.c
+++ b/rtnl_link.c
@@ -33,18 +33,32 @@
 #include "print_fields.h"
 
 #include "netlink.h"
+
+#include <netinet/in.h>
+
 #ifdef HAVE_LINUX_IF_LINK_H
 # include <linux/if_link.h>
 #endif
 #include <linux/rtnetlink.h>
 
+#include "xlat/in6_addr_gen_mode.h"
+#include "xlat/inet_devconf_indices.h"
+#include "xlat/inet6_devconf_indices.h"
+#include "xlat/inet6_if_flags.h"
+#include "xlat/rtnl_ifla_af_spec_inet_attrs.h"
+#include "xlat/rtnl_ifla_af_spec_inet6_attrs.h"
 #include "xlat/rtnl_ifla_brport_attrs.h"
 #include "xlat/rtnl_ifla_events.h"
 #include "xlat/rtnl_ifla_info_attrs.h"
+#include "xlat/rtnl_ifla_info_data_bridge_attrs.h"
+#include "xlat/rtnl_ifla_info_data_tun_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/snmp_icmp6_stats.h"
+#include "xlat/snmp_ip_stats.h"
+#include "xlat/tun_device_types.h"
 #include "xlat/xdp_flags.h"
 
 static bool
@@ -107,22 +121,20 @@
 		      const unsigned int len,
 		      const void *const opaque_data)
 {
-#ifdef HAVE_STRUCT_IFLA_BRIDGE_ID
-	struct ifla_bridge_id id;
+	struct {
+		uint8_t prio[2];
+		uint8_t addr[6];
+	} 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]);
+		tprintf("{prio=[%u, %u]", id.prio[0], id.prio[1]);
+		PRINT_FIELD_MAC(", ", id, addr);
+		tprints("}");
 	}
 
 	return true;
-#else
-	return false;
-#endif
 }
 
 static const nla_decoder_t ifla_brport_nla_decoders[] = {
@@ -165,8 +177,8 @@
 		     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);
+		      "IFLA_BRPORT_???",
+		      ARRSZ_PAIR(ifla_brport_nla_decoders), opaque_data);
 
 	return true;
 }
@@ -196,10 +208,211 @@
 	return true;
 }
 
+bool
+decode_nla_linkinfo_kind(struct tcb *const tcp,
+			 const kernel_ulong_t addr,
+			 const unsigned int len,
+			 const void *const opaque_data)
+{
+	struct ifla_linkinfo_ctx *ctx = (void *) opaque_data;
+
+	memset(ctx->kind, '\0', sizeof(ctx->kind));
+
+	if (umovestr(tcp, addr, sizeof(ctx->kind), ctx->kind) <= 0) {
+		/*
+		 * If we haven't seen NUL or an error occurred, set kind to
+		 * an empty string.
+		 */
+		ctx->kind[0] = '\0';
+	}
+
+	printstr_ex(tcp, addr, len, QUOTE_0_TERMINATED);
+
+	return true;
+}
+
+bool
+decode_nla_linkinfo_xstats_can(struct tcb *const tcp,
+			       const kernel_ulong_t addr,
+			       const unsigned int len,
+			       const void *const opaque_data)
+{
+	struct strace_can_device_stats {
+		uint32_t bus_error;
+		uint32_t error_warning;
+		uint32_t error_passive;
+		uint32_t bus_off;
+		uint32_t arbitration_lost;
+		uint32_t restarts;
+	} st;
+	const unsigned int def_size = sizeof(st);
+	const unsigned int size = (len >= def_size) ? def_size : 0;
+
+	if (!size)
+		return false;
+
+	if (umoven_or_printaddr(tcp, addr, size, &st))
+		return true;
+
+	PRINT_FIELD_U("{", st, bus_error);
+	PRINT_FIELD_U(", ", st, error_warning);
+	PRINT_FIELD_U(", ", st, error_passive);
+	PRINT_FIELD_U(", ", st, bus_off);
+	PRINT_FIELD_U(", ", st, arbitration_lost);
+	PRINT_FIELD_U(", ", st, restarts);
+	tprints("}");
+
+	return true;
+}
+
+bool
+decode_nla_linkinfo_xstats(struct tcb *const tcp,
+			   const kernel_ulong_t addr,
+			   const unsigned int len,
+			   const void *const opaque_data)
+{
+	struct ifla_linkinfo_ctx *ctx = (void *) opaque_data;
+	nla_decoder_t func = NULL;
+
+	if (!strcmp(ctx->kind, "can"))
+		func = decode_nla_linkinfo_xstats_can;
+
+	if (func)
+		return func(tcp, addr, len, opaque_data);
+
+	return false;
+}
+
+static const nla_decoder_t ifla_info_data_bridge_nla_decoders[] = {
+	[IFLA_BR_UNSPEC]			= NULL,
+	[IFLA_BR_FORWARD_DELAY]			= decode_nla_u32,
+	[IFLA_BR_HELLO_TIME]			= decode_nla_u32,
+	[IFLA_BR_MAX_AGE]			= decode_nla_u32,
+	[IFLA_BR_AGEING_TIME]			= decode_nla_u32,
+	[IFLA_BR_STP_STATE]			= decode_nla_u32,
+	[IFLA_BR_PRIORITY]			= decode_nla_u16,
+	[IFLA_BR_VLAN_FILTERING]		= decode_nla_u8,
+	[IFLA_BR_VLAN_PROTOCOL]			= decode_nla_ether_proto,
+	[IFLA_BR_GROUP_FWD_MASK]		= decode_nla_x16,
+	[IFLA_BR_ROOT_ID]			= decode_ifla_bridge_id,
+	[IFLA_BR_BRIDGE_ID]			= decode_ifla_bridge_id,
+	[IFLA_BR_ROOT_PORT]			= decode_nla_u16,
+	[IFLA_BR_ROOT_PATH_COST]		= decode_nla_u32,
+	[IFLA_BR_TOPOLOGY_CHANGE]		= decode_nla_u8,
+	[IFLA_BR_TOPOLOGY_CHANGE_DETECTED]	= decode_nla_u8,
+	[IFLA_BR_HELLO_TIMER]			= decode_nla_u64,
+	[IFLA_BR_TCN_TIMER]			= decode_nla_u64,
+	[IFLA_BR_TOPOLOGY_CHANGE_TIMER]		= decode_nla_u64,
+	[IFLA_BR_GC_TIMER]			= decode_nla_u64,
+	[IFLA_BR_GROUP_ADDR]			= NULL, /* MAC address */
+	[IFLA_BR_FDB_FLUSH]			= NULL, /* unspecified */
+	[IFLA_BR_MCAST_ROUTER]			= decode_nla_u8,
+	[IFLA_BR_MCAST_SNOOPING]		= decode_nla_u8,
+	[IFLA_BR_MCAST_QUERY_USE_IFADDR]	= decode_nla_u8,
+	[IFLA_BR_MCAST_QUERIER]			= decode_nla_u8,
+	[IFLA_BR_MCAST_HASH_ELASTICITY]		= decode_nla_u32,
+	[IFLA_BR_MCAST_HASH_MAX]		= decode_nla_u32,
+	[IFLA_BR_MCAST_LAST_MEMBER_CNT]		= decode_nla_u32,
+	[IFLA_BR_MCAST_STARTUP_QUERY_CNT]	= decode_nla_u32,
+	[IFLA_BR_MCAST_LAST_MEMBER_INTVL]	= decode_nla_u64,
+	[IFLA_BR_MCAST_MEMBERSHIP_INTVL]	= decode_nla_u64,
+	[IFLA_BR_MCAST_QUERIER_INTVL]		= decode_nla_u64,
+	[IFLA_BR_MCAST_QUERY_INTVL]		= decode_nla_u64,
+	[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL]	= decode_nla_u64,
+	[IFLA_BR_MCAST_STARTUP_QUERY_INTVL]	= decode_nla_u64,
+	[IFLA_BR_NF_CALL_IPTABLES]		= decode_nla_u8,
+	[IFLA_BR_NF_CALL_IP6TABLES]		= decode_nla_u8,
+	[IFLA_BR_NF_CALL_ARPTABLES]		= decode_nla_u8,
+	[IFLA_BR_VLAN_DEFAULT_PVID]		= decode_nla_u16,
+	[IFLA_BR_PAD]				= NULL,
+	[IFLA_BR_VLAN_STATS_ENABLED]		= decode_nla_u8,
+	[IFLA_BR_MCAST_STATS_ENABLED]		= decode_nla_u8,
+	[IFLA_BR_MCAST_IGMP_VERSION]		= decode_nla_u8,
+	[IFLA_BR_MCAST_MLD_VERSION]		= decode_nla_u8,
+};
+
+bool
+decode_nla_linkinfo_data_bridge(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_data_bridge_attrs,
+		      "IFLA_BR_???",
+		      ARRSZ_PAIR(ifla_info_data_bridge_nla_decoders),
+		      opaque_data);
+
+	return true;
+}
+
+static bool
+decode_nla_tun_type(struct tcb *const tcp,
+		    const kernel_ulong_t addr,
+		    const unsigned int len,
+		    const void *const opaque_data)
+{
+	const struct decode_nla_xlat_opts opts = {
+		.xlat = tun_device_types,
+		.xlat_size = ARRAY_SIZE(tun_device_types),
+		.xt = XT_INDEXED,
+		.dflt = "IFF_???",
+		.size = 1,
+	};
+
+	return decode_nla_xval(tcp, addr, len, &opts);
+}
+
+static const nla_decoder_t ifla_info_data_tun_nla_decoders[] = {
+	[IFLA_TUN_UNSPEC]		= NULL,
+	[IFLA_TUN_OWNER]		= decode_nla_uid,
+	[IFLA_TUN_GROUP]		= decode_nla_gid,
+	[IFLA_TUN_TYPE]			= decode_nla_tun_type,
+	[IFLA_TUN_PI]			= decode_nla_u8,
+	[IFLA_TUN_VNET_HDR]		= decode_nla_u8,
+	[IFLA_TUN_PERSIST]		= decode_nla_u8,
+	[IFLA_TUN_MULTI_QUEUE]		= decode_nla_u8,
+	[IFLA_TUN_NUM_QUEUES]		= decode_nla_u32,
+	[IFLA_TUN_NUM_DISABLED_QUEUES]	= decode_nla_u32,
+};
+
+bool
+decode_nla_linkinfo_data_tun(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_data_tun_attrs,
+		      "IFLA_TUN_???",
+		      ARRSZ_PAIR(ifla_info_data_tun_nla_decoders),
+		      opaque_data);
+
+	return true;
+}
+
+bool
+decode_nla_linkinfo_data(struct tcb *const tcp,
+			 const kernel_ulong_t addr,
+			 const unsigned int len,
+			 const void *const opaque_data)
+{
+	struct ifla_linkinfo_ctx *ctx = (void *) opaque_data;
+	nla_decoder_t func = NULL;
+
+	if (!strcmp(ctx->kind, "bridge"))
+		func = decode_nla_linkinfo_data_bridge;
+	else if (!strcmp(ctx->kind, "tun"))
+		func = decode_nla_linkinfo_data_tun;
+
+	if (func)
+		return func(tcp, addr, len, opaque_data);
+
+	return false;
+}
+
 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_KIND]	= decode_nla_linkinfo_kind,
+	[IFLA_INFO_DATA]	= decode_nla_linkinfo_data,
+	[IFLA_INFO_XSTATS]	= decode_nla_linkinfo_xstats,
 	[IFLA_INFO_SLAVE_KIND]	= decode_nla_str,
 	[IFLA_INFO_SLAVE_DATA]	= NULL, /* unimplemented */
 };
@@ -210,9 +423,11 @@
 		     const unsigned int len,
 		     const void *const opaque_data)
 {
+	struct ifla_linkinfo_ctx ctx = { .kind = "", };
+
 	decode_nlattr(tcp, addr, len, rtnl_ifla_info_attrs,
-		      "IFLA_INFO_???", ifla_linkinfo_nla_decoders,
-		      ARRAY_SIZE(ifla_linkinfo_nla_decoders), opaque_data);
+		      "IFLA_INFO_???", ARRSZ_PAIR(ifla_linkinfo_nla_decoders),
+		      &ctx);
 
 	return true;
 }
@@ -317,8 +532,8 @@
 		 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);
+		      "IFLA_VF_PORT_???", ARRSZ_PAIR(ifla_port_nla_decoders),
+		      opaque_data);
 
 	return true;
 }
@@ -334,8 +549,8 @@
 		     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);
+		      "IFLA_VF_PORT_???", ARRSZ_PAIR(ifla_vf_port_nla_decoders),
+		      opaque_data);
 
 	return true;
 }
@@ -370,8 +585,8 @@
 		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);
+		      "IFLA_XDP_???", ARRSZ_PAIR(ifla_xdp_nla_decoders),
+		      opaque_data);
 
 	return true;
 }
@@ -392,6 +607,227 @@
 	return true;
 }
 
+
+static bool
+decode_ifla_inet_conf(struct tcb *const tcp,
+		      const kernel_ulong_t addr,
+		      const unsigned int len,
+		      const void *const opaque_data)
+{
+	int elem;
+	size_t cnt = len / sizeof(elem);
+
+	if (!cnt)
+		return false;
+
+	print_array_ex(tcp, addr, cnt, &elem, sizeof(elem),
+		       tfetch_mem, print_int32_array_member, NULL,
+		       PAF_PRINT_INDICES | PAF_INDEX_XLAT_VALUE_INDEXED
+			| XLAT_STYLE_FMT_D, ARRSZ_PAIR(inet_devconf_indices),
+		       "IPV4_DEVCONF_???");
+
+	return true;
+}
+
+static const nla_decoder_t ifla_inet_nla_decoders[] = {
+	[IFLA_INET_CONF] = decode_ifla_inet_conf,
+};
+
+static bool
+decode_ifla_inet6_flags(struct tcb *const tcp,
+		        const kernel_ulong_t addr,
+		        const unsigned int len,
+		        const void *const opaque_data)
+{
+	const struct decode_nla_xlat_opts opts = {
+		ARRSZ_PAIR(inet6_if_flags), "IF_???",
+		.size = 4,
+	};
+
+	return decode_nla_flags(tcp, addr, len, &opts);
+}
+
+static bool
+decode_ifla_inet6_conf(struct tcb *const tcp,
+		       const kernel_ulong_t addr,
+		       const unsigned int len,
+		       const void *const opaque_data)
+{
+	int elem;
+	size_t cnt = len / sizeof(elem);
+
+	if (!cnt)
+		return false;
+
+	print_array_ex(tcp, addr, cnt, &elem, sizeof(elem),
+		       tfetch_mem, print_int32_array_member, NULL,
+		       PAF_PRINT_INDICES | PAF_INDEX_XLAT_VALUE_INDEXED
+			| XLAT_STYLE_FMT_D, ARRSZ_PAIR(inet6_devconf_indices),
+		       "DEVCONF_???");
+
+	return true;
+}
+
+static bool
+decode_ifla_inet6_stats(struct tcb *const tcp,
+		        const kernel_ulong_t addr,
+		        const unsigned int len,
+		        const void *const opaque_data)
+{
+	uint64_t elem;
+	size_t cnt = len / sizeof(elem);
+
+	if (!cnt)
+		return false;
+
+	print_array_ex(tcp, addr, cnt, &elem, sizeof(elem),
+		       tfetch_mem, print_uint64_array_member, NULL,
+		       PAF_PRINT_INDICES | PAF_INDEX_XLAT_VALUE_INDEXED
+			| XLAT_STYLE_FMT_U, ARRSZ_PAIR(snmp_ip_stats),
+		       "IPSTATS_MIB_???");
+
+	return true;
+}
+
+static bool
+decode_ifla_inet6_cacheinfo(struct tcb *const tcp,
+			    const kernel_ulong_t addr,
+			    const unsigned int len,
+			    const void *const opaque_data)
+{
+	struct {
+		uint32_t max_reasm_len;
+		uint32_t tstamp;
+		uint32_t reachable_time;
+		uint32_t retrans_time;
+	} ci;
+
+	if (len < sizeof(ci))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &ci)) {
+		PRINT_FIELD_U("{", ci, max_reasm_len);
+		PRINT_FIELD_U(", ", ci, tstamp);
+		PRINT_FIELD_U(", ", ci, reachable_time);
+		PRINT_FIELD_U(", ", ci, retrans_time);
+		tprints("}");
+	}
+
+	return true;
+}
+
+static bool
+decode_ifla_inet6_icmp6_stats(struct tcb *const tcp,
+			      const kernel_ulong_t addr,
+			      const unsigned int len,
+			      const void *const opaque_data)
+{
+	uint64_t elem;
+	size_t cnt = len / sizeof(elem);
+
+	if (!cnt)
+		return false;
+
+	print_array_ex(tcp, addr, cnt, &elem, sizeof(elem),
+		       tfetch_mem, print_uint64_array_member, NULL,
+		       PAF_PRINT_INDICES | PAF_INDEX_XLAT_VALUE_INDEXED
+			| XLAT_STYLE_FMT_U, ARRSZ_PAIR(snmp_icmp6_stats),
+		       "ICMP6_MIB_???");
+
+	return true;
+}
+
+static bool
+decode_ifla_inet6_token(struct tcb *const tcp,
+			const kernel_ulong_t addr,
+			const unsigned int len,
+			const void *const opaque_data)
+{
+	struct in6_addr in6;
+
+	if (len < sizeof(in6))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &in6))
+		print_inet_addr(AF_INET6, &in6,	sizeof(in6), NULL);
+
+	return true;
+}
+
+static bool
+decode_ifla_inet6_agm(struct tcb *const tcp,
+		      const kernel_ulong_t addr,
+		      const unsigned int len,
+		      const void *const opaque_data)
+{
+	const struct decode_nla_xlat_opts opts = {
+		ARRSZ_PAIR(in6_addr_gen_mode), "IN6_ADDR_GEN_MODE_???",
+		.xt = XT_INDEXED,
+		.size = 1,
+	};
+
+	return decode_nla_xval(tcp, addr, len, &opts);
+}
+
+static const nla_decoder_t ifla_inet6_nla_decoders[] = {
+	[IFLA_INET6_FLAGS]		= decode_ifla_inet6_flags,
+	[IFLA_INET6_CONF]		= decode_ifla_inet6_conf,
+	[IFLA_INET6_STATS]		= decode_ifla_inet6_stats,
+	[IFLA_INET6_MCAST]		= NULL, /* unused */
+	[IFLA_INET6_CACHEINFO]		= decode_ifla_inet6_cacheinfo,
+	[IFLA_INET6_ICMP6STATS]		= decode_ifla_inet6_icmp6_stats,
+	[IFLA_INET6_TOKEN]		= decode_ifla_inet6_token,
+	[IFLA_INET6_ADDR_GEN_MODE]	= decode_ifla_inet6_agm,
+};
+
+static const struct nla_decoder_table_desc {
+	const struct xlat *xlat;
+	const char *dflt;
+	const nla_decoder_t *table;
+	size_t size;
+} ifla_af_spec_protos[] = {
+	[AF_INET]	= {
+		rtnl_ifla_af_spec_inet_attrs, "IFLA_INET_???",
+		ARRSZ_PAIR(ifla_inet_nla_decoders),
+	},
+	[AF_INET6]	= {
+		rtnl_ifla_af_spec_inet6_attrs, "IFLA_INET6_???",
+		ARRSZ_PAIR(ifla_inet6_nla_decoders),
+	},
+};
+
+static bool
+decode_ifla_af(struct tcb *const tcp,
+	       const kernel_ulong_t addr,
+	       const unsigned int len,
+	       const void *const opaque_data)
+{
+	uintptr_t proto = (uintptr_t) opaque_data;
+	const struct nla_decoder_table_desc *desc
+		= proto < ARRAY_SIZE(ifla_af_spec_protos)
+			? ifla_af_spec_protos + proto : NULL;
+
+	if (!desc || !desc->table)
+		return false;
+
+	decode_nlattr(tcp, addr, len,
+		      desc->xlat, desc->dflt, desc->table, desc->size, NULL);
+
+	return true;
+}
+
+static bool
+decode_ifla_af_spec(struct tcb *const tcp,
+		    const kernel_ulong_t addr,
+		    const unsigned int len,
+		    const void *const opaque_data)
+{
+	nla_decoder_t af_spec_decoder = &decode_ifla_af;
+
+	decode_nlattr(tcp, addr, len, addrfams, "AF_???",
+		      &af_spec_decoder, 0, opaque_data);
+
+	return true;
+}
+
 static const nla_decoder_t ifinfomsg_nla_decoders[] = {
 	[IFLA_ADDRESS]		= NULL, /* unimplemented */
 	[IFLA_BROADCAST]	= NULL, /* unimplemented */
@@ -418,7 +854,7 @@
 	[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_AF_SPEC]		= decode_ifla_af_spec,
 	[IFLA_GROUP]		= decode_nla_u32,
 	[IFLA_NET_NS_FD]	= decode_nla_fd,
 	[IFLA_EXT_MASK]		= decode_nla_u32,
@@ -441,7 +877,7 @@
 	[IFLA_IF_NETNSID]	= decode_nla_s32,
 	[IFLA_CARRIER_UP_COUNT]	= decode_nla_u32,
 	[IFLA_CARRIER_DOWN_COUNT]	= decode_nla_u32,
-	[IFLA_NEW_IFINDEX]	= decode_nla_s32,
+	[IFLA_NEW_IFINDEX]	= decode_nla_ifindex,
 };
 
 DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg)
@@ -457,8 +893,10 @@
 		if (!umoven_or_printaddr(tcp, addr + offset,
 					 sizeof(ifinfo) - offset,
 					 (char *) &ifinfo + offset)) {
-			PRINT_FIELD_XVAL("", ifinfo, ifi_type,
-					 arp_hardware_types, "ARPHRD_???");
+			PRINT_FIELD_XVAL_SORTED_SIZED("", ifinfo, ifi_type,
+						      arp_hardware_types,
+						      arp_hardware_types_size,
+						      "ARPHRD_???");
 			PRINT_FIELD_IFINDEX(", ", ifinfo, ifi_index);
 			PRINT_FIELD_FLAGS(", ", ifinfo, ifi_flags,
 					  iffflags, "IFF_???");
@@ -474,7 +912,6 @@
 		tprints(", ");
 		decode_nlattr(tcp, addr + offset, len - offset,
 			      rtnl_link_attrs, "IFLA_???",
-			      ifinfomsg_nla_decoders,
-			      ARRAY_SIZE(ifinfomsg_nla_decoders), NULL);
+			      ARRSZ_PAIR(ifinfomsg_nla_decoders), NULL);
 	}
 }
diff --git a/rtnl_route.c b/rtnl_route.c
index 93205c9..ec5d69f 100644
--- a/rtnl_route.c
+++ b/rtnl_route.c
@@ -61,6 +61,21 @@
 	return true;
 }
 
+bool
+decode_nla_rt_proto(struct tcb *const tcp,
+		    const kernel_ulong_t addr,
+		    const unsigned int len,
+		    const void *const opaque_data)
+{
+	uint8_t num;
+
+	if (len < sizeof(num))
+		return false;
+	if (!umove_or_printaddr(tcp, addr, &num))
+		printxval_search(routing_protocols, num, "RTPROT_???");
+	return true;
+}
+
 static bool
 decode_route_addr(struct tcb *const tcp,
 		  const kernel_ulong_t addr,
@@ -255,8 +270,7 @@
 		PRINT_FIELD_IFINDEX(", ", nh, rtnh_ifindex);
 		tprints("}");
 
-		const unsigned short rtnh_len =
-			len < nh.rtnh_len ? len : nh.rtnh_len;
+		const unsigned short rtnh_len = MIN(len, nh.rtnh_len);
 		const size_t offset = RTNH_ALIGN(sizeof(nh));
 		if (rtnh_len > offset) {
 			tprints(", ");
diff --git a/rtnl_rule.c b/rtnl_rule.c
index 1ab4fd2..740b090 100644
--- a/rtnl_rule.c
+++ b/rtnl_rule.c
@@ -79,6 +79,28 @@
 #endif
 }
 
+static bool
+decode_rule_port_range(struct tcb *const tcp,
+		       const kernel_ulong_t addr,
+		       const unsigned int len,
+		       const void *const opaque_data)
+{
+	struct /* fib_rule_port_range */ {
+		uint16_t start;
+		uint16_t end;
+	} 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;
+}
+
 static const nla_decoder_t fib_rule_hdr_nla_decoders[] = {
 	[FRA_DST]			= decode_rule_addr,
 	[FRA_SRC]			= decode_rule_addr,
@@ -95,7 +117,11 @@
 	[FRA_OIFNAME]			= decode_nla_str,
 	[FRA_PAD]			= NULL,
 	[FRA_L3MDEV]			= decode_nla_u8,
-	[FRA_UID_RANGE]			= decode_fib_rule_uid_range
+	[FRA_UID_RANGE]			= decode_fib_rule_uid_range,
+	[FRA_PROTOCOL]			= decode_nla_rt_proto,
+	[FRA_IP_PROTO]			= decode_nla_ip_proto,
+	[FRA_SPORT_RANGE]		= decode_rule_port_range,
+	[FRA_DPORT_RANGE]		= decode_rule_port_range,
 };
 
 DECL_NETLINK_ROUTE_DECODER(decode_fib_rule_hdr)
diff --git a/rtnl_tc.c b/rtnl_tc.c
index 237afce..657cc38 100644
--- a/rtnl_tc.c
+++ b/rtnl_tc.c
@@ -259,7 +259,7 @@
 		return false;
 
 	print_array(tcp, addr, nmemb, &data, sizeof(data),
-		    umoven_or_printaddr, print_stab_data, NULL);
+		    tfetch_mem, print_stab_data, NULL);
 
 	return true;
 }
diff --git a/s390.c b/s390.c
index 222fd01..422c08d 100644
--- a/s390.c
+++ b/s390.c
@@ -1204,12 +1204,9 @@
 	int command = (int) tcp->u_arg[0];
 	int signum = (int) tcp->u_arg[1];
 
-	const char *command_descr =
-		xlookup(s390_runtime_instr_commands, command);
 
-	tprintf("%d", command);
-	tprints_comment(command_descr ? command_descr :
-			"S390_RUNTIME_INSTR_???");
+	printxval_d(s390_runtime_instr_commands, command,
+		    "S390_RUNTIME_INSTR_???");
 
 	/*
 	 * signum is ignored since Linux 4.4, but let's print it for start
diff --git a/scno.h b/scno.h
index 722ec96..2bdf75e 100644
--- a/scno.h
+++ b/scno.h
@@ -833,6 +833,9 @@
 #ifndef __NR_statx
 # define __NR_statx (SYSCALL_BIT | 291)
 #endif
+#ifndef __NR_io_pgetevents
+# define __NR_io_pgetevents (SYSCALL_BIT | 292)
+#endif
 #ifndef __NR_open
 # define __NR_open (SYSCALL_BIT | 1024)
 #endif
diff --git a/sen.h b/sen.h
index dc48cbc..fb29d69 100644
--- a/sen.h
+++ b/sen.h
@@ -137,6 +137,7 @@
 SEN_io_cancel,
 SEN_io_destroy,
 SEN_io_getevents,
+SEN_io_pgetevents,
 SEN_io_setup,
 SEN_io_submit,
 SEN_ioctl,
@@ -273,6 +274,7 @@
 SEN_restart_syscall,
 SEN_riscv_flush_icache,
 SEN_rmdir,
+SEN_rseq,
 SEN_rt_sigaction,
 SEN_rt_sigpending,
 SEN_rt_sigprocmask,
diff --git a/signal.c b/signal.c
index 170fee7..d717e66 100644
--- a/signal.c
+++ b/signal.c
@@ -117,7 +117,7 @@
 	const char *sa_handler_str = get_sa_handler_str(handler);
 
 	if (sa_handler_str)
-		tprints(sa_handler_str);
+		print_xlat_ex(handler, sa_handler_str, XLAT_STYLE_DEFAULT);
 	else
 		printaddr(handler);
 }
diff --git a/sock.c b/sock.c
index cd13de4..a477bce 100644
--- a/sock.c
+++ b/sock.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
- * Copyright (c) 1996-2017 The strace developers.
+ * Copyright (c) 1996-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -47,6 +47,10 @@
 
 #include "xlat/iffflags.h"
 
+#define XLAT_MACROS_ONLY
+# include "xlat/arp_hardware_types.h"
+#undef XLAT_MACROS_ONLY
+
 static void
 print_ifname(const char *ifname)
 {
@@ -76,13 +80,89 @@
 		break;
 	case SIOCSIFHWADDR:
 	case SIOCGIFHWADDR: {
-		/* XXX Are there other hardware addresses
-		   than 6-byte MACs?  */
-		const unsigned char *bytes =
-			(unsigned char *) &ifr->ifr_hwaddr.sa_data;
-		tprintf("ifr_hwaddr=%02x:%02x:%02x:%02x:%02x:%02x",
-			bytes[0], bytes[1], bytes[2],
-			bytes[3], bytes[4], bytes[5]);
+		static uint8_t hwaddr_sizes[] = {
+			[0 ... ARPHRD_IEEE802_TR] = 255,
+
+			[ARPHRD_NETROM]     =  7 /* AX25_ADDR_LEN */,
+			[ARPHRD_ETHER]      =  6 /* ETH_ALEN */,
+			/* ARPHRD_EETHER - no actual devices in Linux */
+			[ARPHRD_AX25]       =  7 /* AX25_ADDR_LEN */,
+			/* ARPHRD_PRONET - no actual devices in Linux */
+			/* ARPHRD_CHAOS - no actual devices in Linux */
+			[ARPHRD_IEEE802]    =  6 /* FC_ALEN */,
+			[ARPHRD_ARCNET]     =  1 /* ARCNET_ALEN */,
+			/* ARPHRD_APPLETLK - no actual devices in Linux */
+			[ARPHRD_DLCI]       = sizeof(short),
+			/* ARPHRD_ATM - no explicit setting */
+			/* ARPHRD_METRICOM - no actual devices in Linux */
+			[ARPHRD_IEEE1394]   = 16 /* FWNET_ALEN */,
+			[ARPHRD_EUI64]      =  8 /* EUI64_ADDR_LEN */,
+			[ARPHRD_INFINIBAND] = 20 /* INFINIBAND_ALEN */,
+			[ARPHRD_SLIP]       =  0,
+			/* ARPHRD_CSLIP - no actual devices in Linux */
+			/* ARPHRD_SLIP6 - no actual devices in Linux */
+			/* ARPHRD_CSLIP6 - no actual devices in Linux */
+			/* ARPHRD_RSRVD - no actual devices in Linux */
+			/* ARPHRD_ADAPT - no actual devices in Linux */
+			[ARPHRD_ROSE]       =  5 /* ROSE_ADDR_LEN */,
+			[ARPHRD_X25]        =  0,
+			/* ARPHRD_HWX25 - no actual devices in Linux */
+			[ARPHRD_CAN]        =  0,
+			[ARPHRD_PPP]        =  0,
+			/* ARPHRD_CISCO - no actual devices in Linux */
+			/* ARPHRD_LAPB - no actual devices in Linux */
+			/* ARPHRD_DDCMP - no actual devices in Linux */
+			[ARPHRD_RAWHDLC]    =  0,
+			[ARPHRD_RAWIP]      =  0,
+			[ARPHRD_TUNNEL]     =  4 /* IPIP */,
+			[ARPHRD_TUNNEL6]    = 16 /* sizeof(struct in6_addr) */,
+			/* ARPHRD_FRAD - no actual devices in Linux */
+			/* ARPHRD_SKIP - no actual devices in Linux */
+			[ARPHRD_LOOPBACK]   =  6 /* ETH_ALEN */,
+			[ARPHRD_LOCALTLK]   =  1 /* LTALK_ALEN */,
+			[ARPHRD_FDDI]       =  6 /* FDDI_K_ALEN */,
+			/* ARPHRD_BIF - no actual devices in Linux */
+			[ARPHRD_SIT]        =  4,
+			[ARPHRD_IPDDP]      =  0,
+			[ARPHRD_IPGRE]      =  4,
+			[ARPHRD_PIMREG]     =  0,
+			[ARPHRD_HIPPI]      =  6 /* HIPPI_ALEN */,
+			/* ARPHRD_ASH - no actual devices in Linux */
+			/* ARPHRD_ECONET - no actual devices in Linux */
+			[ARPHRD_IRDA]       =  4 /* LAP_ALEN */,
+			/* ARPHRD_FCPP - no actual devices in Linux */
+			/* ARPHRD_FCAL - no actual devices in Linux */
+			/* ARPHRD_FCPL - no actual devices in Linux */
+			/* ARPHRD_FCFABRIC - no actual devices in Linux */
+			/* ARPHRD_IEEE802_TR - no actual devices in Linux */
+			[ARPHRD_IEEE80211]  =  6 /* ETH_ALEN */,
+			[ARPHRD_IEEE80211_PRISM] = 6 /* ETH_ALEN */,
+			[ARPHRD_IEEE80211_RADIOTAP] = 6 /* ETH_ALEN */,
+			[ARPHRD_IEEE802154]
+				= 8 /* IEEE802154_EXTENDED_ADDR_LEN */,
+			[ARPHRD_IEEE802154_MONITOR]
+				= 8 /* IEEE802154_EXTENDED_ADDR_LEN */,
+			[ARPHRD_PHONET]     =  1,
+			[ARPHRD_PHONET_PIPE] = 1,
+			[ARPHRD_CAIF]       =  0,
+			[ARPHRD_IP6GRE]     = 16 /* sizeof(struct in6_addr) */,
+			[ARPHRD_NETLINK]    =  0,
+			[ARPHRD_6LOWPAN]    =  8 /* EUI64_ADDR_LEN */
+				/* ^ or ETH_ALEN, depending on lltype */,
+			[ARPHRD_VSOCKMON]   =  0,
+		};
+
+		uint16_t proto = ifr->ifr_hwaddr.sa_family;
+		uint8_t sz = (proto < ARRAY_SIZE(hwaddr_sizes))
+				? hwaddr_sizes[proto] : 255;
+
+		PRINT_FIELD_XVAL_SORTED_SIZED("ifr_hwaddr={", ifr->ifr_hwaddr,
+					      sa_family, arp_hardware_types,
+					      arp_hardware_types_size,
+					      "ARPHRD_???");
+		PRINT_FIELD_MAC_SZ(", ", ifr->ifr_hwaddr, sa_data,
+				   MIN(sizeof(ifr->ifr_hwaddr.sa_data), sz));
+		tprints("}");
 		break;
 	}
 	case SIOCSIFFLAGS:
@@ -173,7 +253,7 @@
 		entering_ifc = get_tcb_priv_data(tcp);
 
 		if (!entering_ifc) {
-			error_msg("decode_ifconf: where is my ifconf?");
+			error_func_msg("where is my ifconf?");
 			return 0;
 		}
 	}
@@ -232,7 +312,7 @@
 		print_array(tcp, ptr_to_kulong(ifc->ifc_buf),
 			    ifc->ifc_len / sizeof(struct_ifreq),
 			    &ifr, sizeof(ifr),
-			    umoven_or_printaddr, print_ifconf_ifreq, NULL);
+			    tfetch_mem, print_ifconf_ifreq, NULL);
 	}
 
 	tprints("}");
diff --git a/sockaddr.c b/sockaddr.c
index 71d18c6..cfc26cb 100644
--- a/sockaddr.c
+++ b/sockaddr.c
@@ -54,18 +54,14 @@
 #include "xlat/ethernet_protocols.h"
 #include "xlat/af_packet_types.h"
 
-#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
-# include <bluetooth/bluetooth.h>
-# include <bluetooth/hci.h>
-# include <bluetooth/l2cap.h>
-# include <bluetooth/rfcomm.h>
-# include <bluetooth/sco.h>
-
-# include "xlat/hci_channels.h"
-#endif
+#include "xlat/bdaddr_types.h"
+#include "xlat/bluetooth_l2_cid.h"
+#include "xlat/bluetooth_l2_psm.h"
+#include "xlat/hci_channels.h"
 
 #define SIZEOF_SA_FAMILY sizeof(((struct sockaddr *) 0)->sa_family)
 
+const size_t arp_hardware_types_size = ARRAY_SIZE(arp_hardware_types) - 1;
 const size_t ethernet_protocols_size = ARRAY_SIZE(ethernet_protocols) - 1;
 
 static void
@@ -229,9 +225,9 @@
 			 "ETH_P_???");
 	PRINT_FIELD_IFINDEX("), ", *sa_ll, sll_ifindex);
 	tprints(", sll_hatype=");
-	printxval(arp_hardware_types, sa_ll->sll_hatype, "ARPHRD_???");
+	printxval_search(arp_hardware_types, sa_ll->sll_hatype, "ARPHRD_???");
 	tprints(", sll_pkttype=");
-	printxval(af_packet_types, sa_ll->sll_pkttype, "PACKET_???");
+	printxval_index(af_packet_types, sa_ll->sll_pkttype, "PACKET_???");
 	tprintf(", sll_halen=%u", sa_ll->sll_halen);
 	if (sa_ll->sll_halen) {
 		const unsigned int oob_halen =
@@ -262,47 +258,159 @@
 	print_quoted_string(data, datalen, 0);
 }
 
-#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
+static uint16_t
+btohs(uint16_t val)
+{
+#ifdef WORDS_BIGENDIAN
+	return (val << 8) | (val >> 8);
+#else
+	return val;
+#endif
+}
+
+static void
+print_bluetooth_l2_psm(const char *prefix, uint16_t psm)
+{
+	const uint16_t psm_he = btohs(psm);
+	const char *psm_name = xlookup(bluetooth_l2_psm, psm_he);
+	const bool psm_str = psm_name || (psm_he >= L2CAP_PSM_LE_DYN_START
+					  && psm_he <= L2CAP_PSM_LE_DYN_END)
+				      || (psm_he >= L2CAP_PSM_DYN_START);
+
+	tprintf("%shtobs(", prefix);
+
+	if (xlat_verbose(xlat_verbosity) != XLAT_STYLE_ABBREV || !psm_str)
+		tprintf("%#x", psm_he);
+
+	if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_RAW)
+		goto print_bluetooth_l2_psm_end;
+
+	if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE || !psm_str)
+		tprints(" /* ");
+
+	if (psm_name) {
+		tprints(psm_name);
+	} else if (psm_he >= L2CAP_PSM_LE_DYN_START
+	    && psm_he <= L2CAP_PSM_LE_DYN_END) {
+		print_xlat(L2CAP_PSM_LE_DYN_START);
+		tprintf(" + %u", psm_he - L2CAP_PSM_LE_DYN_START);
+	} else if (psm_he >= L2CAP_PSM_DYN_START) {
+		print_xlat(L2CAP_PSM_DYN_START);
+		tprintf(" + %u", psm_he - L2CAP_PSM_DYN_START);
+	} else {
+		tprints("L2CAP_PSM_???");
+	}
+
+	if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE || !psm_str)
+		tprints(" */");
+
+print_bluetooth_l2_psm_end:
+	tprints(")");
+}
+
+static void
+print_bluetooth_l2_cid(const char *prefix, uint16_t cid)
+{
+	const uint16_t cid_he = btohs(cid);
+	const char *cid_name = xlookup(bluetooth_l2_cid, cid_he);
+	const bool cid_str = cid_name || (cid_he >= L2CAP_CID_DYN_START);
+
+	tprintf("%shtobs(", prefix);
+
+	if (xlat_verbose(xlat_verbosity) != XLAT_STYLE_ABBREV || !cid_str)
+		tprintf("%#x", cid_he);
+
+	if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_RAW)
+		goto print_bluetooth_l2_cid_end;
+
+	if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE || !cid_str)
+		tprints(" /* ");
+
+	if (cid_name) {
+		tprints(cid_name);
+	} else if (cid_he >= L2CAP_CID_DYN_START) {
+		print_xlat(L2CAP_CID_DYN_START);
+		tprintf(" + %u", cid_he - L2CAP_CID_DYN_START);
+	} else {
+		tprints("L2CAP_CID_???");
+	}
+
+	if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE || !cid_str)
+		tprints(" */");
+
+print_bluetooth_l2_cid_end:
+	tprints(")");
+}
+
 static void
 print_sockaddr_data_bt(const void *const buf, const int addrlen)
 {
+	struct sockaddr_hci {
+		/* sa_family_t */ uint16_t	hci_family;
+		uint16_t			hci_dev;
+		uint16_t			hci_channel;
+	};
+
+	struct bdaddr {
+		uint8_t				b[6];
+	} ATTRIBUTE_PACKED;
+
+	struct sockaddr_sco {
+		/* sa_family_t */ uint16_t	sco_family;
+		struct bdaddr			sco_bdaddr;
+	};
+
+	struct sockaddr_rc {
+		/* sa_family_t */ uint16_t	rc_family;
+		struct bdaddr			rc_bdaddr;
+		uint8_t				rc_channel;
+	};
+
+	struct sockaddr_l2 {
+		/* sa_family_t */ uint16_t	l2_family;
+		/* little endiang */ uint16_t	l2_psm;
+		struct bdaddr			l2_bdaddr;
+		/* little endian */ uint16_t	l2_cid;
+		uint8_t				l2_bdaddr_type;
+	};
+
 	switch (addrlen) {
 		case sizeof(struct sockaddr_hci): {
 			const struct sockaddr_hci *const hci = buf;
 			tprintf("hci_dev=htobs(%hu), hci_channel=",
 				btohs(hci->hci_dev));
-			printxval(hci_channels, hci->hci_channel,
-				  "HCI_CHANNEL_???");
+			printxval_index(hci_channels, hci->hci_channel,
+					"HCI_CHANNEL_???");
 			break;
 		}
 		case sizeof(struct sockaddr_sco): {
 			const struct sockaddr_sco *const sco = buf;
-			tprintf("sco_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x",
-				sco->sco_bdaddr.b[0], sco->sco_bdaddr.b[1],
-				sco->sco_bdaddr.b[2], sco->sco_bdaddr.b[3],
-				sco->sco_bdaddr.b[4], sco->sco_bdaddr.b[5]);
+			print_mac_addr("sco_bdaddr=", sco->sco_bdaddr.b,
+				       sizeof(sco->sco_bdaddr.b));
 			break;
 		}
 		case sizeof(struct sockaddr_rc): {
 			const struct sockaddr_rc *const rc = buf;
-			tprintf("rc_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
-				", rc_channel=%u",
-				rc->rc_bdaddr.b[0], rc->rc_bdaddr.b[1],
-				rc->rc_bdaddr.b[2], rc->rc_bdaddr.b[3],
-				rc->rc_bdaddr.b[4], rc->rc_bdaddr.b[5],
-				rc->rc_channel);
+			print_mac_addr("rc_bdaddr=", rc->rc_bdaddr.b,
+				       sizeof(rc->rc_bdaddr.b));
+			tprintf(", rc_channel=%u", rc->rc_channel);
 			break;
 		}
+		case offsetof(struct sockaddr_l2, l2_bdaddr_type):
 		case sizeof(struct sockaddr_l2): {
 			const struct sockaddr_l2 *const l2 = buf;
-			tprintf("l2_psm=htobs(%hu)"
-				", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
-				", l2_cid=htobs(%hu), l2_bdaddr_type=%u",
-				btohs(l2->l2_psm),
-				l2->l2_bdaddr.b[0], l2->l2_bdaddr.b[1],
-				l2->l2_bdaddr.b[2], l2->l2_bdaddr.b[3],
-				l2->l2_bdaddr.b[4], l2->l2_bdaddr.b[5],
-				btohs(l2->l2_cid), l2->l2_bdaddr_type);
+			print_bluetooth_l2_psm("l2_psm=", l2->l2_psm);
+			print_mac_addr(", l2_bdaddr=", l2->l2_bdaddr.b,
+				       sizeof(l2->l2_bdaddr.b));
+			print_bluetooth_l2_cid(", l2_cid=", l2->l2_cid);
+
+			if (addrlen == sizeof(struct sockaddr_l2)) {
+				tprints(", l2_bdaddr_type=");
+				printxval_index(bdaddr_types,
+						l2->l2_bdaddr_type,
+						"BDADDR_???");
+			}
+
 			break;
 		}
 		default:
@@ -310,7 +418,6 @@
 			break;
 	}
 }
-#endif /* HAVE_BLUETOOTH_BLUETOOTH_H */
 
 typedef void (* const sockaddr_printer)(const void *const, const int);
 
@@ -324,9 +431,7 @@
 	[AF_INET6] = { print_sockaddr_data_in6, SIN6_MIN_LEN },
 	[AF_NETLINK] = { print_sockaddr_data_nl, SIZEOF_SA_FAMILY + 1 },
 	[AF_PACKET] = { print_sockaddr_data_ll, sizeof(struct sockaddr_ll) },
-#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
 	[AF_BLUETOOTH] = { print_sockaddr_data_bt, SIZEOF_SA_FAMILY + 1 },
-#endif
 };
 
 void
@@ -335,7 +440,7 @@
 	const struct sockaddr *const sa = buf;
 
 	tprints("{sa_family=");
-	printxval(addrfams, sa->sa_family, "AF_???");
+	printxval_index(addrfams, sa->sa_family, "AF_???");
 
 	if (addrlen > (int) SIZEOF_SA_FAMILY) {
 		tprints(", ");
diff --git a/socketcall.c b/socketcall.c
index 9f48a10..0c72d0c 100644
--- a/socketcall.c
+++ b/socketcall.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,14 +31,7 @@
 
 SYS_FUNC(socketcall)
 {
-	const unsigned int call = tcp->u_arg[0];
-	const char *str = xlookup(socketcalls, call);
-
-	if (str)
-		tprints(str);
-	else
-		tprintf("%d", call);
-
+	printxval_d(socketcalls, tcp->u_arg[0], NULL);
 	tprints(", ");
 	printaddr(tcp->u_arg[1]);
 
diff --git a/socketutils.c b/socketutils.c
index 38b864c..a646b5b 100644
--- a/socketutils.c
+++ b/socketutils.c
@@ -252,6 +252,13 @@
 static bool
 unix_send_query(struct tcb *tcp, const int fd, const unsigned long inode)
 {
+	/*
+	 * The kernel bug was fixed in mainline by commit v4.5-rc6~35^2~11
+	 * and backported to stable/linux-4.4.y by commit v4.4.4~297.
+	 */
+	const uint16_t dump_flag =
+		os_release < KERNEL_VERSION(4, 4, 4) ? NLM_F_DUMP : 0;
+
 	struct {
 		const struct nlmsghdr nlh;
 		const struct unix_diag_req udr;
@@ -259,13 +266,14 @@
 		.nlh = {
 			.nlmsg_len = sizeof(req),
 			.nlmsg_type = SOCK_DIAG_BY_FAMILY,
-			.nlmsg_flags = NLM_F_DUMP | NLM_F_REQUEST
+			.nlmsg_flags = NLM_F_REQUEST | dump_flag
 		},
 		.udr = {
 			.sdiag_family = AF_UNIX,
 			.udiag_ino = inode,
 			.udiag_states = -1,
-			.udiag_show = UDIAG_SHOW_NAME | UDIAG_SHOW_PEER
+			.udiag_show = UDIAG_SHOW_NAME | UDIAG_SHOW_PEER,
+			.udiag_cookie = { ~0U, ~0U }
 		}
 	};
 	return send_query(tcp, fd, &req, sizeof(req));
@@ -363,8 +371,7 @@
 		},
 		.ndr = {
 			.sdiag_family = AF_NETLINK,
-			.sdiag_protocol = NDIAG_PROTO_ALL,
-			.ndiag_show = NDIAG_SHOW_MEMINFO
+			.sdiag_protocol = NDIAG_PROTO_ALL
 		}
 	};
 	return send_query(tcp, fd, &req, sizeof(req));
diff --git a/static_assert.h b/static_assert.h
index 1c58e7d..e942f79 100755
--- a/static_assert.h
+++ b/static_assert.h
@@ -30,7 +30,16 @@
 
 #include "assert.h"
 
-#ifndef HAVE_STATIC_ASSERT
+#if defined HAVE_STATIC_ASSERT
+
+/* static_assert is already available */
+
+#elif defined HAVE__STATIC_ASSERT
+
+# undef static_assert
+# define static_assert _Static_assert
+
+#else /* !HAVE_STATIC_ASSERT && !HAVE__STATIC_ASSERT */
 
 # define static_assert(expr, message) \
 	extern int (*strace_static_assert(int))[sizeof(int[2 * !!(expr) - 1])]
diff --git a/strace-log-merge.1 b/strace-log-merge.1
index 7316083..a7451d6 100644
--- a/strace-log-merge.1
+++ b/strace-log-merge.1
@@ -31,7 +31,7 @@
 .    BR "\\$1"
 ..
 .\"
-.TH STRACE-LOG-MERGE 1 "2018-04-04" "strace 4.22"
+.TH STRACE-LOG-MERGE 1 "2018-06-13" "strace 4.23"
 .\"
 .SH NAME
 strace-log-merge \- merge strace \-ff \-tt output
diff --git a/strace.1 b/strace.1
index 5b9691e..517a5e1 100644
--- a/strace.1
+++ b/strace.1
@@ -53,18 +53,24 @@
 .  el \
 .    BR "\\$1"
 ..
-.TH STRACE 1 "2018-04-04" "strace 4.22"
+.TH STRACE 1 "2018-06-13" "strace 4.23"
 .SH NAME
 strace \- trace system calls and signals
 .SH SYNOPSIS
 .SY strace
+.if '#'#' .ig end_unwind_opt
 .OP \-ACdffhikqrtttTvVxxy
+.end_unwind_opt
+.if ''#' .ig end_no_unwind_opt
+.OP \-ACdffhiqrtttTvVxxy
+.end_no_unwind_opt
 .OP \-I n
 .OP \-b execve
 .OM \-e expr
 .OP \-a column
 .OP \-o file
 .OP \-s strsize
+.OP \-X format
 .OM \-P path
 .OM \-p pid
 .BR "" {
@@ -170,7 +176,9 @@
 .CW
 open("xyzzy", O_WRONLY|O_APPEND|O_CREAT, 0666) = 3
 .CE
-Here, the third argument of open is decoded by breaking down the
+Here, the third argument of
+.B 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 the traditional or native
 usage differs from ANSI or POSIX, the latter forms are preferred.
@@ -205,8 +213,7 @@
 are printed raw, with the unknown system call number printed in hexadecimal form
 and prefixed with "syscall_":
 .CW
-syscall_0xbad(0xfedcba9876543210, 0xfedcba9876543211, 0xfedcba9876543212,
-0xfedcba9876543213, 0xfedcba9876543214, 0xfedcba9876543215) = -1 (errno 38)
+syscall_0xbad(0x1, 0x2, 0x3, 0x4, 0x5, 0x6) = -1 ENOSYS (Function not implemented)
 .CE
 .LP
 Character pointers are dereferenced and printed as C strings.
@@ -252,12 +259,11 @@
 .TP
 .B \-i
 Print the instruction pointer at the time of the system call.
+.if '#'#' .ig end_unwind
 .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.
+Print the execution stack trace of the traced processes after each system call.
+.end_unwind
 .TP
 .BI "\-o " filename
 Write the trace output to the file
@@ -274,7 +280,8 @@
 The latter is not compatible with
 .B \-ff
 option currently.
-.TP \-A
+.TP
+.B \-A
 Open the file provided in the
 .B \-o
 option in append mode.
@@ -325,6 +332,27 @@
 .B \-xx
 Print all strings in hexadecimal string format.
 .TP
+.BI "\-X " format
+Set the format for printing of named constants and flags.
+Supported
+.I format
+values are:
+.RS
+.TP 10
+.B raw
+Raw number output, without decoding.
+.TP
+.B abbrev
+Output a named constant or a set of flags instead of the raw number if they are
+found.
+This is the default
+.B strace
+behaviour.
+.TP
+.B verbose
+Output both the raw value and the decoded string (as a comment).
+.RE
+.TP
 .B \-y
 Print paths associated with file descriptor arguments.
 .TP
@@ -418,6 +446,9 @@
 .BR open .
 Question mark before the syscall qualification allows suppression of error
 in case no syscalls matched the qualification provided.
+Appending one of "@64", "@32", or "@x32" suffixes to the syscall qualification
+allows specifying syscalls only for the 64-bit, 32-bit, or 32-on-64-bit
+personality, respectively.
 In addition, the special values
 .B all
 and
@@ -555,6 +586,9 @@
 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.
+See also
+.B \-X raw
+option.
 .TP
 \fB\-e\ signal\fR=\,\fIset\fR
 Trace only the specified subset of signals.  The default is
@@ -595,7 +629,7 @@
 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][:\fBdelay_enter\fR=\,\fIusecs\/\fR][:\fBdelay_exit\fR=\,\fIusecs\/\fR][:\fBwhen\fR=\,\fIexpr\/\fR]
+\fB\-e\ inject\fR=\,\fIset\/\fR[:\fBerror\fR=\,\fIerrno\/\fR|:\fBretval\fR=\,\fIvalue\/\fR][:\fBsignal\fR=\,\fIsig\/\fR][:\fBsyscall\fR=\fIsyscall\fR][:\fBdelay_enter\fR=\,\fIusecs\/\fR][:\fBdelay_exit\fR=\,\fIusecs\/\fR][:\fBwhen\fR=\,\fIexpr\/\fR]
 Perform syscall tampering for the specified set of syscalls.
 
 At least one of
@@ -613,7 +647,8 @@
 
 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,
+the syscall number is replaced by -1 which corresponds to an invalid syscall
+(unless a syscall is specified with :\fBsyscall=\fR option),
 and the error code is specified using a symbolic
 .I errno
 value like
@@ -654,6 +689,12 @@
 and :\fBsignal\fR=\,\fIsig\/\fR options are specified, then both
 a fault or success is injected and a signal is delivered.
 
+if :\fBsyscall\fR=\fIsyscall\fR option is specified, the corresponding syscall
+with no side effects is injected instead of -1.
+Currently, only "pure" (see
+.BR "-e trace" = "%pure"
+description) syscalls can be specified there.
+
 Unless a :\fBwhen\fR=\,\fIexpr\fR subexpression is specified,
 an injection is being made into every invocation of each syscall from the
 .IR set .
@@ -1008,6 +1049,14 @@
 Xtensa syscall are filtered and printed as
 .BR fadvise64_64 (2).
 .LP
+On x32, syscalls that are intended to be used by 64-bit processes and not x32
+ones (for example,
+.BR readv ,
+that has syscall number 19 on x86_64, with its x32 counterpart has syscall
+number 515), but called with
+.B __X32_SYSCALL_BIT
+flag being set, are designated with "#64" suffix.
+.LP
 On some platforms a process that is attached to with the
 .B \-p
 option may observe a spurious EINTR return from the current
@@ -1085,7 +1134,7 @@
 (including ARM, IA-64, MIPS, PA-RISC, PowerPC, s390, SPARC) were introduced.
 In 2002, the burden of
 .B strace
-maintainership was transferred to Ronald McGrath.
+maintainership was transferred to Roland McGrath.
 Since then,
 .B strace
 gained support for several new Linux architectures (AMD64, s390x, SuperH),
diff --git a/strace.1.in b/strace.1.in
index 46a55e5..d5b83c5 100644
--- a/strace.1.in
+++ b/strace.1.in
@@ -58,13 +58,19 @@
 strace \- trace system calls and signals
 .SH SYNOPSIS
 .SY strace
+.if '@ENABLE_STACKTRACE_TRUE@'#' .ig end_unwind_opt
 .OP \-ACdffhikqrtttTvVxxy
+.end_unwind_opt
+.if '@ENABLE_STACKTRACE_FALSE@'#' .ig end_no_unwind_opt
+.OP \-ACdffhiqrtttTvVxxy
+.end_no_unwind_opt
 .OP \-I n
 .OP \-b execve
 .OM \-e expr
 .OP \-a column
 .OP \-o file
 .OP \-s strsize
+.OP \-X format
 .OM \-P path
 .OM \-p pid
 .BR "" {
@@ -170,7 +176,9 @@
 .CW
 open("xyzzy", O_WRONLY|O_APPEND|O_CREAT, 0666) = 3
 .CE
-Here, the third argument of open is decoded by breaking down the
+Here, the third argument of
+.B 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 the traditional or native
 usage differs from ANSI or POSIX, the latter forms are preferred.
@@ -205,8 +213,7 @@
 are printed raw, with the unknown system call number printed in hexadecimal form
 and prefixed with "syscall_":
 .CW
-syscall_0xbad(0xfedcba9876543210, 0xfedcba9876543211, 0xfedcba9876543212,
-0xfedcba9876543213, 0xfedcba9876543214, 0xfedcba9876543215) = -1 (errno 38)
+syscall_0xbad(0x1, 0x2, 0x3, 0x4, 0x5, 0x6) = -1 ENOSYS (Function not implemented)
 .CE
 .LP
 Character pointers are dereferenced and printed as C strings.
@@ -252,12 +259,11 @@
 .TP
 .B \-i
 Print the instruction pointer at the time of the system call.
+.if '@ENABLE_STACKTRACE_TRUE@'#' .ig end_unwind
 .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.
+Print the execution stack trace of the traced processes after each system call.
+.end_unwind
 .TP
 .BI "\-o " filename
 Write the trace output to the file
@@ -274,7 +280,8 @@
 The latter is not compatible with
 .B \-ff
 option currently.
-.TP \-A
+.TP
+.B \-A
 Open the file provided in the
 .B \-o
 option in append mode.
@@ -325,6 +332,27 @@
 .B \-xx
 Print all strings in hexadecimal string format.
 .TP
+.BI "\-X " format
+Set the format for printing of named constants and flags.
+Supported
+.I format
+values are:
+.RS
+.TP 10
+.B raw
+Raw number output, without decoding.
+.TP
+.B abbrev
+Output a named constant or a set of flags instead of the raw number if they are
+found.
+This is the default
+.B strace
+behaviour.
+.TP
+.B verbose
+Output both the raw value and the decoded string (as a comment).
+.RE
+.TP
 .B \-y
 Print paths associated with file descriptor arguments.
 .TP
@@ -418,6 +446,9 @@
 .BR open .
 Question mark before the syscall qualification allows suppression of error
 in case no syscalls matched the qualification provided.
+Appending one of "@64", "@32", or "@x32" suffixes to the syscall qualification
+allows specifying syscalls only for the 64-bit, 32-bit, or 32-on-64-bit
+personality, respectively.
 In addition, the special values
 .B all
 and
@@ -555,6 +586,9 @@
 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.
+See also
+.B \-X raw
+option.
 .TP
 \fB\-e\ signal\fR=\,\fIset\fR
 Trace only the specified subset of signals.  The default is
@@ -595,7 +629,7 @@
 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][:\fBdelay_enter\fR=\,\fIusecs\/\fR][:\fBdelay_exit\fR=\,\fIusecs\/\fR][:\fBwhen\fR=\,\fIexpr\/\fR]
+\fB\-e\ inject\fR=\,\fIset\/\fR[:\fBerror\fR=\,\fIerrno\/\fR|:\fBretval\fR=\,\fIvalue\/\fR][:\fBsignal\fR=\,\fIsig\/\fR][:\fBsyscall\fR=\fIsyscall\fR][:\fBdelay_enter\fR=\,\fIusecs\/\fR][:\fBdelay_exit\fR=\,\fIusecs\/\fR][:\fBwhen\fR=\,\fIexpr\/\fR]
 Perform syscall tampering for the specified set of syscalls.
 
 At least one of
@@ -613,7 +647,8 @@
 
 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,
+the syscall number is replaced by -1 which corresponds to an invalid syscall
+(unless a syscall is specified with :\fBsyscall=\fR option),
 and the error code is specified using a symbolic
 .I errno
 value like
@@ -654,6 +689,12 @@
 and :\fBsignal\fR=\,\fIsig\/\fR options are specified, then both
 a fault or success is injected and a signal is delivered.
 
+if :\fBsyscall\fR=\fIsyscall\fR option is specified, the corresponding syscall
+with no side effects is injected instead of -1.
+Currently, only "pure" (see
+.BR "-e trace" = "%pure"
+description) syscalls can be specified there.
+
 Unless a :\fBwhen\fR=\,\fIexpr\fR subexpression is specified,
 an injection is being made into every invocation of each syscall from the
 .IR set .
@@ -1008,6 +1049,14 @@
 Xtensa syscall are filtered and printed as
 .BR fadvise64_64 (2).
 .LP
+On x32, syscalls that are intended to be used by 64-bit processes and not x32
+ones (for example,
+.BR readv ,
+that has syscall number 19 on x86_64, with its x32 counterpart has syscall
+number 515), but called with
+.B __X32_SYSCALL_BIT
+flag being set, are designated with "#64" suffix.
+.LP
 On some platforms a process that is attached to with the
 .B \-p
 option may observe a spurious EINTR return from the current
@@ -1085,7 +1134,7 @@
 (including ARM, IA-64, MIPS, PA-RISC, PowerPC, s390, SPARC) were introduced.
 In 2002, the burden of
 .B strace
-maintainership was transferred to Ronald McGrath.
+maintainership was transferred to Roland McGrath.
 Since then,
 .B strace
 gained support for several new Linux architectures (AMD64, s390x, SuperH),
diff --git a/strace.c b/strace.c
index a76502a..4b37485 100644
--- a/strace.c
+++ b/strace.c
@@ -65,7 +65,7 @@
 extern int optind;
 extern char *optarg;
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 /* if this is true do the stack trace for every system call */
 bool stack_trace_enabled;
 #endif
@@ -147,6 +147,9 @@
 static int acolumn = DEFAULT_ACOLUMN;
 static char *acolumn_spaces;
 
+/* Default output style for xlat entities */
+enum xlat_style xlat_verbosity = XLAT_STYLE_ABBREV;
+
 static const char *outfname;
 /* If -ff, points to stderr. Else, it's our common output log */
 static FILE *shared_log;
@@ -203,12 +206,12 @@
 print_version(void)
 {
 	static const char features[] =
-#ifdef USE_LIBUNWIND
-		" stack-unwind"
-#endif /* USE_LIBUNWIND */
+#ifdef ENABLE_STACKTRACE
+		" stack-trace=" USE_UNWINDER
+#endif
 #ifdef USE_DEMANGLE
 		" stack-demangle"
-#endif /* USE_DEMANGLE */
+#endif
 #if SUPPORTED_PERSONALITIES > 1
 # if defined HAVE_M32_MPERS
 		" m32-mpers"
@@ -248,9 +251,9 @@
   -a column      alignment COLUMN for printing syscall results (default %d)\n\
   -i             print instruction pointer at time of syscall\n\
 "
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 "\
-  -k             obtain stack trace between each syscall (experimental)\n\
+  -k             obtain stack trace between each syscall\n\
 "
 #endif
 "\
@@ -418,7 +421,8 @@
 	if (flags == newflags)
 		return;
 
-	fcntl(fd, F_SETFD, newflags); /* never fails */
+	if (fcntl(fd, F_SETFD, newflags)) /* never fails */
+		perror_msg_and_die("fcntl(%d, F_SETFD, %#x)", fd, newflags);
 }
 
 static void
@@ -703,14 +707,20 @@
  * may create bogus empty FILE.<nonexistant_pid>, and then die.
  */
 static void
-newoutf(struct tcb *tcp)
+after_successful_attach(struct tcb *tcp, const unsigned int flags)
 {
+	tcp->flags |= TCB_ATTACHED | TCB_STARTUP | flags;
 	tcp->outf = shared_log; /* if not -ff mode, the same file is for all */
 	if (followfork >= 2) {
 		char name[PATH_MAX];
 		xsprintf(name, "%s.%u", outfname, tcp->pid);
 		tcp->outf = strace_fopen(name);
 	}
+
+#ifdef ENABLE_STACKTRACE
+	if (stack_trace_enabled)
+		unwind_tcb_init(tcp);
+#endif
 }
 
 static void
@@ -752,12 +762,6 @@
 #if SUPPORTED_PERSONALITIES > 1
 			tcp->currpers = current_personality;
 #endif
-
-#ifdef USE_LIBUNWIND
-			if (stack_trace_enabled)
-				unwind_tcb_init(tcp);
-#endif
-
 			nprocs++;
 			debug_msg("new tcb for pid %d, active tcbs:%d",
 				  tcp->pid, nprocs);
@@ -810,13 +814,13 @@
 
 	free_tcb_priv_data(tcp);
 
-#ifdef USE_LIBUNWIND
-	if (stack_trace_enabled) {
+#ifdef ENABLE_STACKTRACE
+	if (stack_trace_enabled)
 		unwind_tcb_fin(tcp);
-	}
 #endif
 
-	mmap_cache_delete(tcp, __func__);
+	if (tcp->mmap_cache)
+		tcp->mmap_cache->free_fn(tcp, __func__);
 
 	nprocs--;
 	debug_msg("dropped tcb for pid %d, %d remain", tcp->pid, nprocs);
@@ -1039,9 +1043,7 @@
 		return;
 	}
 
-	tcp->flags |= TCB_ATTACHED | TCB_GRABBED | TCB_STARTUP |
-		      post_attach_sigstop;
-	newoutf(tcp);
+	after_successful_attach(tcp, TCB_GRABBED | post_attach_sigstop);
 	debug_msg("attach to pid %d (main) succeeded", tcp->pid);
 
 	static const char task_path[] = "/proc/%d/task";
@@ -1069,12 +1071,10 @@
 						 ptrace_attach_cmd, tid);
 				continue;
 			}
-			debug_msg("attach to pid %d succeeded", tid);
 
-			struct tcb *tid_tcp = alloctcb(tid);
-			tid_tcp->flags |= TCB_ATTACHED | TCB_GRABBED |
-					  TCB_STARTUP | post_attach_sigstop;
-			newoutf(tid_tcp);
+			after_successful_attach(alloctcb(tid),
+						TCB_GRABBED | post_attach_sigstop);
+			debug_msg("attach to pid %d succeeded", tid);
 		}
 
 		closedir(dir);
@@ -1419,18 +1419,20 @@
 				kill(pid, SIGCONT);
 		}
 		tcp = alloctcb(pid);
-		tcp->flags |= TCB_ATTACHED | TCB_STARTUP
-			    | TCB_SKIP_DETACH_ON_FIRST_EXEC
-			    | (NOMMU_SYSTEM ? 0 : (TCB_HIDE_LOG | post_attach_sigstop));
-		newoutf(tcp);
+		after_successful_attach(tcp, TCB_SKIP_DETACH_ON_FIRST_EXEC
+					     | (NOMMU_SYSTEM ? 0
+						: (TCB_HIDE_LOG
+						   | post_attach_sigstop)));
 	} else {
 		/* With -D, we are *child* here, the tracee is our parent. */
 		strace_child = strace_tracer_pid;
 		strace_tracer_pid = getpid();
 		tcp = alloctcb(strace_child);
 		tcp->flags |= TCB_SKIP_DETACH_ON_FIRST_EXEC | TCB_HIDE_LOG;
-		/* attaching will be done later, by startup_attach */
-		/* note: we don't do newoutf(tcp) here either! */
+		/*
+		 * Attaching will be done later, by startup_attach.
+		 * Note: we don't do after_successful_attach() here either!
+		 */
 
 		/* NOMMU BUG! -D mode is active, we (child) return,
 		 * and we will scribble over parent's stack!
@@ -1592,10 +1594,10 @@
 #endif
 	qualify("signal=all");
 	while ((c = getopt(argc, argv, "+"
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 	    "k"
 #endif
-	    "a:Ab:cCdDe:E:fFhiI:o:O:p:P:qrs:S:tTu:vVwxyz")) != EOF) {
+	    "a:Ab:cCdDe:E:fFhiI:o:O:p:P:qrs:S:tTu:vVwxX:yz")) != EOF) {
 		switch (c) {
 		case 'a':
 			acolumn = string_to_uint(optarg);
@@ -1653,7 +1655,7 @@
 			if (opt_intr <= 0)
 				error_opt_arg(c, optarg);
 			break;
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 		case 'k':
 			stack_trace_enabled = true;
 			break;
@@ -1710,6 +1712,16 @@
 		case 'x':
 			xflag++;
 			break;
+		case 'X':
+			if (!strcmp(optarg, "raw"))
+				xlat_verbosity = XLAT_STYLE_RAW;
+			else if (!strcmp(optarg, "abbrev"))
+				xlat_verbosity = XLAT_STYLE_ABBREV;
+			else if (!strcmp(optarg, "verbose"))
+				xlat_verbosity = XLAT_STYLE_VERBOSE;
+			else
+				error_opt_arg(c, optarg);
+			break;
 		case 'y':
 			show_fd_path++;
 			break;
@@ -1754,7 +1766,7 @@
 	if (cflag == CFLAG_ONLY_STATS) {
 		if (iflag)
 			error_msg("-%c has no effect with -c", 'i');
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 		if (stack_trace_enabled)
 			error_msg("-%c has no effect with -c", 'k');
 #endif
@@ -1774,15 +1786,9 @@
 
 	set_sighandler(SIGCHLD, SIG_DFL, &params_for_tracee.child_sa);
 
-#ifdef USE_LIBUNWIND
-	if (stack_trace_enabled) {
-		unsigned int tcbi;
-
+#ifdef ENABLE_STACKTRACE
+	if (stack_trace_enabled)
 		unwind_init();
-		for (tcbi = 0; tcbi < tcbtabsize; ++tcbi) {
-			unwind_tcb_init(tcbtab[tcbi]);
-		}
-	}
 #endif
 
 	/* See if they want to run as another user. */
@@ -2031,8 +2037,7 @@
 	if (followfork) {
 		/* We assume it's a fork/vfork/clone child */
 		struct tcb *tcp = alloctcb(pid);
-		tcp->flags |= TCB_ATTACHED | TCB_STARTUP | post_attach_sigstop;
-		newoutf(tcp);
+		after_successful_attach(tcp, post_attach_sigstop);
 		if (!qflag)
 			error_msg("Process %d attached", pid);
 		return tcp;
diff --git a/strace.spec b/strace.spec
index b47ed6a..03d2628 100644
--- a/strace.spec
+++ b/strace.spec
@@ -1,22 +1,23 @@
 Summary: Tracks and displays system calls associated with a running process
 Name: strace
-Version: 4.22
+Version: 4.23
 Release: 1%{?dist}
 License: BSD
 Group: Development/Debuggers
 URL: https://strace.io
-Source: https://github.com/strace/strace/releases/download/v%{version}/strace-%{version}.tar.xz
+Source: https://strace.io/files/%{version}/strace-%{version}.tar.xz
 BuildRequires: gcc
 %if 0%{?fedora} >= 18 || 0%{?centos} >= 8 || 0%{?rhel} >= 8 || 0%{?suse_version} >= 1200
 BuildRequires: pkgconfig(bluez)
 %endif
-%if 0%{?fedora} >= 20 || 0%{?centos} >= 8 || 0%{?rhel} >= 8 || 0%{?suse_version} >= 1300
-%define buildrequires_libunwind_devel BuildRequires: libunwind-devel binutils-devel
+%if 0%{?fedora} >= 20 || 0%{?centos} >= 6 || 0%{?rhel} >= 6
+%define buildrequires_stacktrace BuildRequires: elfutils-devel binutils-devel
 %endif
-%ifarch x86_64
-# for experimental -k option
-%{?buildrequires_libunwind_devel}
+%if 0%{?suse_version} >= 1100
+%define buildrequires_stacktrace BuildRequires: libdw-devel binutils-devel
 %endif
+# for -k option
+%{?buildrequires_stacktrace}
 %define strace64_arches ppc64 sparc64
 %{?!buildroot:BuildRoot: %_tmppath/buildroot-%name-%version-%release}
 
@@ -53,7 +54,7 @@
 %setup -q
 echo -n %version-%release > .tarball-version
 echo -n 2018 > .year
-echo -n 2018-04-04 > .strace.1.in.date
+echo -n 2018-06-13 > .strace.1.in.date
 
 %build
 echo 'BEGIN OF BUILD ENVIRONMENT INFORMATION'
@@ -91,6 +92,8 @@
 make %{?_smp_mflags} -k check VERBOSE=1
 echo 'BEGIN OF TEST SUITE INFORMATION'
 tail -n 99999 -- tests*/test-suite.log tests*/ksysent.log
+find tests* -type f -name '*.log' -print0 |
+	xargs -r0 grep -H '^KERNEL BUG:' -- ||:
 echo 'END OF TEST SUITE INFORMATION'
 
 %files
@@ -107,8 +110,11 @@
 %endif
 
 %changelog
-* Thu Jun 14 2018 strace-devel@lists.strace.io - 4.22-1
-- strace 4.22 snapshot.
+* Fri Jun 15 2018 strace-devel@lists.strace.io - 4.23-1
+- strace 4.23 snapshot.
+
+* Thu Apr 05 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.22-1
+- v4.21 -> v4.22.
 
 * Tue Feb 13 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.21-1
 - v4.20 -> v4.21.
diff --git a/strace.spec.in b/strace.spec.in
index 1bad59d..1a6f284 100644
--- a/strace.spec.in
+++ b/strace.spec.in
@@ -5,18 +5,19 @@
 License: BSD
 Group: Development/Debuggers
 URL: https://strace.io
-Source: https://github.com/strace/strace/releases/download/v%{version}/strace-%{version}.tar.xz
+Source: https://strace.io/files/%{version}/strace-%{version}.tar.xz
 BuildRequires: gcc
 %if 0%{?fedora} >= 18 || 0%{?centos} >= 8 || 0%{?rhel} >= 8 || 0%{?suse_version} >= 1200
 BuildRequires: pkgconfig(bluez)
 %endif
-%if 0%{?fedora} >= 20 || 0%{?centos} >= 8 || 0%{?rhel} >= 8 || 0%{?suse_version} >= 1300
-%define buildrequires_libunwind_devel BuildRequires: libunwind-devel binutils-devel
+%if 0%{?fedora} >= 20 || 0%{?centos} >= 6 || 0%{?rhel} >= 6
+%define buildrequires_stacktrace BuildRequires: elfutils-devel binutils-devel
 %endif
-%ifarch x86_64
-# for experimental -k option
-%{?buildrequires_libunwind_devel}
+%if 0%{?suse_version} >= 1100
+%define buildrequires_stacktrace BuildRequires: libdw-devel binutils-devel
 %endif
+# for -k option
+%{?buildrequires_stacktrace}
 %define strace64_arches ppc64 sparc64
 %{?!buildroot:BuildRoot: %_tmppath/buildroot-%name-%version-%release}
 
@@ -91,6 +92,8 @@
 make %{?_smp_mflags} -k check VERBOSE=1
 echo 'BEGIN OF TEST SUITE INFORMATION'
 tail -n 99999 -- tests*/test-suite.log tests*/ksysent.log
+find tests* -type f -name '*.log' -print0 |
+	xargs -r0 grep -H '^KERNEL BUG:' -- ||:
 echo 'END OF TEST SUITE INFORMATION'
 
 %files
@@ -110,6 +113,9 @@
 * @RPM_CHANGELOGTIME@ @PACKAGE_BUGREPORT@ - @PACKAGE_VERSION@-1
 - @PACKAGE_STRING@ snapshot.
 
+* Thu Apr 05 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.22-1
+- v4.21 -> v4.22.
+
 * Tue Feb 13 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.21-1
 - v4.20 -> v4.21.
 
diff --git a/sys_func.h b/sys_func.h
index 1ffa4fb..22cb378 100644
--- a/sys_func.h
+++ b/sys_func.h
@@ -96,6 +96,7 @@
 extern SYS_FUNC(io_destroy);
 extern SYS_FUNC(io_getevents);
 extern SYS_FUNC(ioperm);
+extern SYS_FUNC(io_pgetevents);
 extern SYS_FUNC(iopl);
 extern SYS_FUNC(ioprio_get);
 extern SYS_FUNC(ioprio_set);
diff --git a/syscall.c b/syscall.c
index 13d8153..fe85b8b 100644
--- a/syscall.c
+++ b/syscall.c
@@ -33,7 +33,7 @@
  */
 
 #include "defs.h"
-#include "mmap_cache.h"
+#include "mmap_notify.h"
 #include "native_defs.h"
 #include "ptrace.h"
 #include "nsig.h"
@@ -57,10 +57,6 @@
 # define PTRACE_SETREGS PTRACE_SETREGS64
 #endif
 
-#ifndef NT_PRSTATUS
-# define NT_PRSTATUS 1
-#endif
-
 #include "syscall.h"
 #include "xstring.h"
 
@@ -90,6 +86,13 @@
 /* Now undef them since short defines cause wicked namespace pollution. */
 #include "sysent_shorthand_undefs.h"
 
+const char *const errnoent[] = {
+#include "errnoent.h"
+};
+const char *const signalent[] = {
+#include "signalent.h"
+
+};
 /*
  * `ioctlent[012].h' files are automatically generated by the auxiliary
  * program `ioctlsort', such that the list is sorted by the `code' field.
@@ -98,23 +101,11 @@
  * in "/usr/include".
  */
 
-const char *const errnoent0[] = {
-#include "errnoent.h"
-};
-const char *const signalent0[] = {
-#include "signalent.h"
-};
 const struct_ioctlent ioctlent0[] = {
 #include "ioctlent0.h"
 };
 
 #if SUPPORTED_PERSONALITIES > 1
-static const char *const errnoent1[] = {
-# include "errnoent1.h"
-};
-static const char *const signalent1[] = {
-# include "signalent1.h"
-};
 static const struct_ioctlent ioctlent1[] = {
 # include "ioctlent1.h"
 };
@@ -129,12 +120,6 @@
 #endif
 
 #if SUPPORTED_PERSONALITIES > 2
-static const char *const errnoent2[] = {
-# include "errnoent2.h"
-};
-static const char *const signalent2[] = {
-# include "signalent2.h"
-};
 static const struct_ioctlent ioctlent2[] = {
 # include "ioctlent2.h"
 };
@@ -155,26 +140,6 @@
 };
 
 enum {
-	nerrnos0 = ARRAY_SIZE(errnoent0)
-#if SUPPORTED_PERSONALITIES > 1
-	, nerrnos1 = ARRAY_SIZE(errnoent1)
-# if SUPPORTED_PERSONALITIES > 2
-	, nerrnos2 = ARRAY_SIZE(errnoent2)
-# endif
-#endif
-};
-
-enum {
-	nsignals0 = ARRAY_SIZE(signalent0)
-#if SUPPORTED_PERSONALITIES > 1
-	, nsignals1 = ARRAY_SIZE(signalent1)
-# if SUPPORTED_PERSONALITIES > 2
-	, nsignals2 = ARRAY_SIZE(signalent2)
-# endif
-#endif
-};
-
-enum {
 	nioctlents0 = ARRAY_SIZE(ioctlent0)
 #if SUPPORTED_PERSONALITIES > 1
 	, nioctlents1 = ARRAY_SIZE(ioctlent1)
@@ -186,15 +151,13 @@
 
 #if SUPPORTED_PERSONALITIES > 1
 const struct_sysent *sysent = sysent0;
-const char *const *errnoent = errnoent0;
-const char *const *signalent = signalent0;
 const struct_ioctlent *ioctlent = ioctlent0;
 const struct_printers *printers = &printers0;
 #endif
 
+const unsigned int nerrnos = ARRAY_SIZE(errnoent);
+const unsigned int nsignals = ARRAY_SIZE(signalent);
 unsigned nsyscalls = nsyscalls0;
-unsigned nerrnos = nerrnos0;
-unsigned nsignals = nsignals0;
 unsigned nioctlents = nioctlents0;
 
 const unsigned int nsyscall_vec[SUPPORTED_PERSONALITIES] = {
@@ -228,6 +191,18 @@
 # endif
 	;
 
+const char *const personality_designators[] =
+# if defined X86_64
+	{ "64", "32", "x32" }
+# elif defined X32
+	{ "x32", "32" }
+# elif SUPPORTED_PERSONALITIES == 2
+	{ "64", "32" }
+# else
+	{ STRINGIFY_VAL(__WORDSIZE) }
+# endif
+	;
+
 #if SUPPORTED_PERSONALITIES > 1
 
 unsigned current_personality;
@@ -269,33 +244,21 @@
 
 	switch (personality) {
 	case 0:
-		errnoent = errnoent0;
-		nerrnos = nerrnos0;
 		ioctlent = ioctlent0;
 		nioctlents = nioctlents0;
-		signalent = signalent0;
-		nsignals = nsignals0;
 		printers = &printers0;
 		break;
 
 	case 1:
-		errnoent = errnoent1;
-		nerrnos = nerrnos1;
 		ioctlent = ioctlent1;
 		nioctlents = nioctlents1;
-		signalent = signalent1;
-		nsignals = nsignals1;
 		printers = &printers1;
 		break;
 
 # if SUPPORTED_PERSONALITIES > 2
 	case 2:
-		errnoent = errnoent2;
-		nerrnos = nerrnos2;
 		ioctlent = ioctlent2;
 		nioctlents = nioctlents2;
-		signalent = signalent2;
-		nsignals = nsignals2;
 		printers = &printers2;
 		break;
 # endif
@@ -499,6 +462,18 @@
 	return NULL;
 }
 
+static void
+print_err_ret(kernel_ulong_t ret, unsigned long u_error)
+{
+	const char *u_error_str = err_name(u_error);
+
+	if (u_error_str)
+		tprintf("= %" PRI_kld " %s (%s)",
+			ret, u_error_str, strerror(u_error));
+	else
+		tprintf("= %" PRI_kld " (errno %lu)", ret, u_error);
+}
+
 static long get_regs(struct tcb *);
 static int get_syscall_args(struct tcb *);
 static int get_syscall_result(struct tcb *);
@@ -544,9 +519,18 @@
 	if (!recovering(tcp)) {
 		if (opts->data.flags & INJECT_F_SIGNAL)
 			*signo = opts->data.signo;
-		if (opts->data.flags & (INJECT_F_ERROR | INJECT_F_RETVAL) &&
-		    !arch_set_scno(tcp, -1))
-			tcp->flags |= TCB_TAMPERED;
+		if (opts->data.flags & (INJECT_F_ERROR | INJECT_F_RETVAL)) {
+			kernel_long_t scno =
+				(opts->data.flags & INJECT_F_SYSCALL)
+				? (kernel_long_t) shuffle_scno(opts->data.scno)
+				: -1;
+
+			if (!arch_set_scno(tcp, scno)) {
+				tcp->flags |= TCB_TAMPERED;
+				if (scno != -1)
+					tcp->flags |= TCB_TAMPERED_NO_FAIL;
+			}
+		}
 		if (opts->data.flags & INJECT_F_DELAY_ENTER)
 			delay_tcb(tcp, opts->data.delay_idx, true);
 		if (opts->data.flags & INJECT_F_DELAY_EXIT)
@@ -569,10 +553,11 @@
 	if (!syscall_tampered(tcp))
 		return 0;
 
-	if (!syserror(tcp)) {
-		error_msg("Failed to tamper with process %d: got no error "
-			  "(return value %#" PRI_klx ")",
-			  tcp->pid, tcp->u_rval);
+	if (!syserror(tcp) ^ !!syscall_tampered_nofail(tcp)) {
+		error_msg("Failed to tamper with process %d: unexpectedly got"
+			  " %serror (return value %#" PRI_klx ", error %lu)",
+			  tcp->pid, syscall_tampered_nofail(tcp) ? "" : "no ",
+			  tcp->u_rval, tcp->u_error);
 
 		return 1;
 	}
@@ -705,7 +690,7 @@
 		return 0;
 	}
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 	if (stack_trace_enabled) {
 		if (tcp->s_ent->sys_flags & STACKTRACE_CAPTURE_ON_ENTER)
 			unwind_tcb_capture(tcp);
@@ -744,10 +729,8 @@
 	if ((Tflag || cflag) && !(filtered(tcp) || hide_log(tcp)))
 		clock_gettime(CLOCK_MONOTONIC, pts);
 
-	if (mmap_cache_is_enabled()) {
-		if (tcp->s_ent->sys_flags & STACKTRACE_INVALIDATE_CACHE)
-			mmap_cache_invalidate(tcp);
-	}
+	if (tcp->s_ent->sys_flags & MEMORY_MAPPING_CHANGE)
+		mmap_notify_report(tcp);
 
 	if (filtered(tcp) || hide_log(tcp))
 		return 0;
@@ -821,20 +804,17 @@
 
 	tprints(") ");
 	tabto();
-	unsigned long u_error = tcp->u_error;
 
 	if (raw(tcp)) {
-		if (u_error) {
-			tprintf("= -1 (errno %lu)", u_error);
-		} else {
+		if (tcp->u_error)
+			print_err_ret(tcp->u_rval, tcp->u_error);
+		else
 			tprintf("= %#" PRI_klx, tcp->u_rval);
-		}
+
 		if (syscall_tampered(tcp))
 			tprints(" (INJECTED)");
-	} else if (!(sys_res & RVAL_NONE) && u_error) {
-		const char *u_error_str;
-
-		switch (u_error) {
+	} else if (!(sys_res & RVAL_NONE) && tcp->u_error) {
+		switch (tcp->u_error) {
 		/* Blocked signals do not interrupt any syscalls.
 		 * In this case syscalls don't return ERESTARTfoo codes.
 		 *
@@ -889,13 +869,7 @@
 			tprints("= ? ERESTART_RESTARTBLOCK (Interrupted by signal)");
 			break;
 		default:
-			u_error_str = err_name(u_error);
-			if (u_error_str)
-				tprintf("= %" PRI_kld " %s (%s)", tcp->u_rval,
-					u_error_str, strerror(u_error));
-			else
-				tprintf("= %" PRI_kld " %lu (%s)", tcp->u_rval,
-					u_error, strerror(u_error));
+			print_err_ret(tcp->u_rval, tcp->u_error);
 			break;
 		}
 		if (syscall_tampered(tcp))
@@ -959,7 +933,7 @@
 	dumpio(tcp);
 	line_ended();
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 	if (stack_trace_enabled)
 		unwind_tcb_print(tcp);
 #endif
@@ -1003,6 +977,10 @@
 	tcp->u_error = saved_u_error;
 }
 
+#define XLAT_MACROS_ONLY
+# include "xlat/nt_descriptor_types.h"
+#undef XLAT_MACROS_ONLY
+
 #include "arch_regs.c"
 
 #if HAVE_ARCH_GETRVAL2
@@ -1281,8 +1259,9 @@
 		return -1;
 	tcp->u_error = 0;
 	get_error(tcp,
-		  !(tcp->s_ent->sys_flags & SYSCALL_NEVER_FAILS)
-			|| syscall_tampered(tcp));
+		  (!(tcp->s_ent->sys_flags & SYSCALL_NEVER_FAILS)
+			|| syscall_tampered(tcp))
+                  && !syscall_tampered_nofail(tcp));
 
 	return 1;
 }
diff --git a/sysent.h b/sysent.h
index b01eb5f..cf2daed 100644
--- a/sysent.h
+++ b/sysent.h
@@ -17,7 +17,7 @@
 #define TRACE_DESC			00000040	/* Trace file descriptor-related syscalls. */
 #define TRACE_MEMORY			00000100	/* Trace memory mapping-related syscalls. */
 #define SYSCALL_NEVER_FAILS		00000200	/* Syscall is always successful. */
-#define STACKTRACE_INVALIDATE_CACHE	00000400	/* Trigger proc/maps cache updating */
+#define MEMORY_MAPPING_CHANGE		00000400	/* Trigger proc/maps cache updating */
 #define STACKTRACE_CAPTURE_ON_ENTER	00001000	/* Capture stacktrace on "entering" stage */
 #define TRACE_INDIRECT_SUBCALL		00002000	/* Syscall is an indirect socket/ipc subcall. */
 #define COMPAT_SYSCALL_TYPES		00004000	/* A compat syscall that uses compat types. */
diff --git a/sysent_shorthand_defs.h b/sysent_shorthand_defs.h
index ce43550..2728b20 100644
--- a/sysent_shorthand_defs.h
+++ b/sysent_shorthand_defs.h
@@ -41,7 +41,7 @@
 # define PU	TRACE_PURE
 # define NF	SYSCALL_NEVER_FAILS
 # define MA	MAX_ARGS
-# define SI	STACKTRACE_INVALIDATE_CACHE
+# define SI	MEMORY_MAPPING_CHANGE
 # define SE	STACKTRACE_CAPTURE_ON_ENTER
 # define CST	COMPAT_SYSCALL_TYPES
 /* SEN(a) is defined elsewhere */
diff --git a/tests-m32/Makefile b/tests-m32/Makefile
index 874010c..68dfc9e 100644
--- a/tests-m32/Makefile
+++ b/tests-m32/Makefile
@@ -139,7 +139,11 @@
 check_PROGRAMS = $(am__EXEEXT_1) _newselect-P$(EXEEXT) 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) \
+	block_reset_raise_run$(EXEEXT) bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-v$(EXEEXT) bpf-success$(EXEEXT) \
+	bpf-success-v$(EXEEXT) caps-abbrev$(EXEEXT) \
 	check_sigblock$(EXEEXT) check_sigign$(EXEEXT) \
 	clone_parent$(EXEEXT) clone_ptrace$(EXEEXT) count-f$(EXEEXT) \
 	delay$(EXEEXT) execve-v$(EXEEXT) execveat-v$(EXEEXT) \
@@ -147,7 +151,8 @@
 	getpid$(EXEEXT) getppid$(EXEEXT) gettid$(EXEEXT) \
 	inject-nf$(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) \
+	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) \
+	ioctl_perf-success$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
 	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
 	list_sigaction_signum$(EXEEXT) localtime$(EXEEXT) \
 	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
@@ -159,18 +164,19 @@
 	perf_event_open_nonverbose$(EXEEXT) \
 	perf_event_open_unabbrev$(EXEEXT) ppoll-v$(EXEEXT) \
 	prctl-seccomp-filter-v$(EXEEXT) prctl-seccomp-strict$(EXEEXT) \
-	print_maxfd$(EXEEXT) qual_fault$(EXEEXT) \
-	qual_inject-error-signal$(EXEEXT) qual_inject-retval$(EXEEXT) \
-	qual_inject-signal$(EXEEXT) qual_signal$(EXEEXT) \
-	quotactl-v$(EXEEXT) quotactl-xfs-v$(EXEEXT) \
-	redirect-fds$(EXEEXT) restart_syscall$(EXEEXT) \
-	run_expect_termsig$(EXEEXT) scm_rights$(EXEEXT) \
-	seccomp-filter-v$(EXEEXT) seccomp-strict$(EXEEXT) \
-	select-P$(EXEEXT) set_ptracer_any$(EXEEXT) \
-	set_sigblock$(EXEEXT) set_sigign$(EXEEXT) \
-	signal_receive$(EXEEXT) sleep$(EXEEXT) stack-fcall$(EXEEXT) \
-	stack-fcall-mangled$(EXEEXT) threads-execve$(EXEEXT) \
-	unblock_reset_raise$(EXEEXT) unix-pair-send-recv$(EXEEXT) \
+	prctl-spec-inject$(EXEEXT) print_maxfd$(EXEEXT) \
+	qual_fault$(EXEEXT) qual_inject-error-signal$(EXEEXT) \
+	qual_inject-retval$(EXEEXT) qual_inject-signal$(EXEEXT) \
+	qual_signal$(EXEEXT) quotactl-v$(EXEEXT) \
+	quotactl-xfs-v$(EXEEXT) redirect-fds$(EXEEXT) \
+	restart_syscall$(EXEEXT) run_expect_termsig$(EXEEXT) \
+	scm_rights$(EXEEXT) seccomp-filter-v$(EXEEXT) \
+	seccomp-strict$(EXEEXT) select-P$(EXEEXT) \
+	set_ptracer_any$(EXEEXT) set_sigblock$(EXEEXT) \
+	set_sigign$(EXEEXT) signal_receive$(EXEEXT) sleep$(EXEEXT) \
+	stack-fcall$(EXEEXT) stack-fcall-mangled$(EXEEXT) \
+	threads-execve$(EXEEXT) unblock_reset_raise$(EXEEXT) \
+	unix-pair-send-recv$(EXEEXT) \
 	unix-pair-sendto-recvfrom$(EXEEXT) vfork-f$(EXEEXT) \
 	wait4-v$(EXEEXT) waitid-v$(EXEEXT) zeroargc$(EXEEXT)
 ##am__append_1 = strace-k-demangle.test
@@ -181,7 +187,10 @@
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
 	$(top_srcdir)/m4/bpf_attr.m4 $(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/st_demangle.m4 $(top_srcdir)/m4/st_libdw.m4 \
+	$(top_srcdir)/m4/st_libunwind.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
+	$(top_srcdir)/m4/st_stacktrace.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) \
@@ -223,18 +232,25 @@
 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) \
-	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) dev-yy$(EXEEXT) dup$(EXEEXT) \
-	dup2$(EXEEXT) dup3$(EXEEXT) epoll_create$(EXEEXT) \
-	epoll_create1$(EXEEXT) epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) \
-	epoll_wait$(EXEEXT) erestartsys$(EXEEXT) eventfd$(EXEEXT) \
-	execve$(EXEEXT) execveat$(EXEEXT) faccessat$(EXEEXT) \
-	fadvise64$(EXEEXT) fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
-	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) fchdir$(EXEEXT) \
+	adjtimex$(EXEEXT) aio$(EXEEXT) aio_pgetevents$(EXEEXT) \
+	alarm$(EXEEXT) bpf$(EXEEXT) bpf-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-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) \
+	dev-yy$(EXEEXT) dup$(EXEEXT) dup2$(EXEEXT) dup3$(EXEEXT) \
+	epoll_create$(EXEEXT) epoll_create1$(EXEEXT) \
+	epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) epoll_wait$(EXEEXT) \
+	erestartsys$(EXEEXT) eventfd$(EXEEXT) execve$(EXEEXT) \
+	execveat$(EXEEXT) faccessat$(EXEEXT) fadvise64$(EXEEXT) \
+	fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
+	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) \
+	fanotify_mark-Xabbrev$(EXEEXT) fanotify_mark-Xraw$(EXEEXT) \
+	fanotify_mark-Xverbose$(EXEEXT) fchdir$(EXEEXT) \
 	fchmod$(EXEEXT) fchmodat$(EXEEXT) fchown$(EXEEXT) \
 	fchown32$(EXEEXT) fchownat$(EXEEXT) fcntl$(EXEEXT) \
 	fcntl64$(EXEEXT) fdatasync$(EXEEXT) fflush$(EXEEXT) \
@@ -255,49 +271,62 @@
 	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_kvm_run$(EXEEXT) \
-	ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) \
+	ioctl_evdev$(EXEEXT) ioctl_inotify$(EXEEXT) \
+	ioctl_kvm_run$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
+	ioctl_rtc$(EXEEXT) ioctl_perf$(EXEEXT) ioctl_ptp$(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) kcmp-y$(EXEEXT) \
-	kern_features$(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) \
+	ipc_msg$(EXEEXT) ipc_msg-Xabbrev$(EXEEXT) \
+	ipc_msg-Xraw$(EXEEXT) ipc_msg-Xverbose$(EXEEXT) \
+	ipc_msgbuf$(EXEEXT) ipc_msgbuf-Xabbrev$(EXEEXT) \
+	ipc_msgbuf-Xraw$(EXEEXT) ipc_msgbuf-Xverbose$(EXEEXT) \
+	ipc_sem$(EXEEXT) ipc_sem-Xabbrev$(EXEEXT) \
+	ipc_sem-Xraw$(EXEEXT) ipc_sem-Xverbose$(EXEEXT) \
+	ipc_shm$(EXEEXT) ipc_shm-Xabbrev$(EXEEXT) \
+	ipc_shm-Xraw$(EXEEXT) ipc_shm-Xverbose$(EXEEXT) kcmp$(EXEEXT) \
+	kcmp-y$(EXEEXT) kern_features$(EXEEXT) \
+	kexec_file_load$(EXEEXT) kexec_load$(EXEEXT) keyctl$(EXEEXT) \
+	keyctl-Xabbrev$(EXEEXT) keyctl-Xraw$(EXEEXT) \
+	keyctl-Xverbose$(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) \
+	mmap-Xabbrev$(EXEEXT) mmap-Xraw$(EXEEXT) \
+	mmap-Xverbose$(EXEEXT) mmap64$(EXEEXT) mmap64-Xabbrev$(EXEEXT) \
+	mmap64-Xraw$(EXEEXT) mmap64-Xverbose$(EXEEXT) mmsg$(EXEEXT) \
 	mmsg_name$(EXEEXT) modify_ldt$(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-inet6$(EXEEXT) net-yy-netlink$(EXEEXT) \
-	net-yy-unix$(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) \
-	nfnetlink_acct$(EXEEXT) nfnetlink_cthelper$(EXEEXT) \
-	nfnetlink_ctnetlink$(EXEEXT) nfnetlink_ctnetlink_exp$(EXEEXT) \
-	nfnetlink_cttimeout$(EXEEXT) nfnetlink_nft_compat$(EXEEXT) \
-	nfnetlink_nftables$(EXEEXT) nfnetlink_ipset$(EXEEXT) \
-	nfnetlink_osf$(EXEEXT) nfnetlink_queue$(EXEEXT) \
-	nfnetlink_ulog$(EXEEXT) nlattr$(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) \
+	mount-Xabbrev$(EXEEXT) mount-Xraw$(EXEEXT) \
+	mount-Xverbose$(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-inet6$(EXEEXT) \
+	net-yy-netlink$(EXEEXT) net-yy-unix$(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) nfnetlink_acct$(EXEEXT) \
+	nfnetlink_cthelper$(EXEEXT) nfnetlink_ctnetlink$(EXEEXT) \
+	nfnetlink_ctnetlink_exp$(EXEEXT) nfnetlink_cttimeout$(EXEEXT) \
+	nfnetlink_nft_compat$(EXEEXT) nfnetlink_nftables$(EXEEXT) \
+	nfnetlink_ipset$(EXEEXT) nfnetlink_osf$(EXEEXT) \
+	nfnetlink_queue$(EXEEXT) nfnetlink_ulog$(EXEEXT) \
+	nlattr$(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_af_spec$(EXEEXT) nlattr_ifla_brport$(EXEEXT) \
+	nlattr_ifla_linkinfo$(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_mdba_mdb_entry$(EXEEXT) \
@@ -309,11 +338,14 @@
 	nlattr_tc_stats$(EXEEXT) nlattr_tca_stab$(EXEEXT) \
 	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
-	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) oldfstat$(EXEEXT) \
-	oldlstat$(EXEEXT) oldselect$(EXEEXT) oldselect-efault$(EXEEXT) \
-	oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
-	osf_utimes$(EXEEXT) pause$(EXEEXT) perf_event_open$(EXEEXT) \
-	personality$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
+	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) \
+	old_mmap-Xabbrev$(EXEEXT) old_mmap-Xraw$(EXEEXT) \
+	old_mmap-Xverbose$(EXEEXT) oldfstat$(EXEEXT) oldlstat$(EXEEXT) \
+	oldselect$(EXEEXT) oldselect-efault$(EXEEXT) oldstat$(EXEEXT) \
+	open$(EXEEXT) openat$(EXEEXT) osf_utimes$(EXEEXT) \
+	pause$(EXEEXT) perf_event_open$(EXEEXT) personality$(EXEEXT) \
+	personality-Xabbrev$(EXEEXT) personality-Xraw$(EXEEXT) \
+	personality-Xverbose$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
 	pkey_alloc$(EXEEXT) pkey_free$(EXEEXT) pkey_mprotect$(EXEEXT) \
 	poll$(EXEEXT) poll-P$(EXEEXT) ppoll$(EXEEXT) ppoll-P$(EXEEXT) \
 	prctl-arg2-intptr$(EXEEXT) prctl-dumpable$(EXEEXT) \
@@ -361,7 +393,10 @@
 	sigaltstack$(EXEEXT) siginfo$(EXEEXT) signal$(EXEEXT) \
 	signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
 	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
-	so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
+	so_peercred$(EXEEXT) so_peercred-Xabbrev$(EXEEXT) \
+	so_peercred-Xraw$(EXEEXT) so_peercred-Xverbose$(EXEEXT) \
+	sock_filter-v$(EXEEXT) sock_filter-v-Xabbrev$(EXEEXT) \
+	sock_filter-v-Xraw$(EXEEXT) sock_filter-v-Xverbose$(EXEEXT) \
 	socketcall$(EXEEXT) sockopt-sol_netlink$(EXEEXT) \
 	splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
 	statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
@@ -418,6 +453,10 @@
 aio_OBJECTS = aio.$(OBJEXT)
 aio_LDADD = $(LDADD)
 aio_DEPENDENCIES = libtests.a
+aio_pgetevents_SOURCES = aio_pgetevents.c
+aio_pgetevents_OBJECTS = aio_pgetevents.$(OBJEXT)
+aio_pgetevents_LDADD = $(LDADD)
+aio_pgetevents_DEPENDENCIES = libtests.a
 alarm_SOURCES = alarm.c
 alarm_OBJECTS = alarm.$(OBJEXT)
 alarm_LDADD = $(LDADD)
@@ -449,6 +488,33 @@
 bpf_OBJECTS = bpf.$(OBJEXT)
 bpf_LDADD = $(LDADD)
 bpf_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_SOURCES = bpf-obj_get_info_by_fd.c
+bpf_obj_get_info_by_fd_OBJECTS = bpf-obj_get_info_by_fd.$(OBJEXT)
+bpf_obj_get_info_by_fd_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_SOURCES = bpf-obj_get_info_by_fd-prog.c
+bpf_obj_get_info_by_fd_prog_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_v_SOURCES =  \
+	bpf-obj_get_info_by_fd-prog-v.c
+bpf_obj_get_info_by_fd_prog_v_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_v_SOURCES = bpf-obj_get_info_by_fd-v.c
+bpf_obj_get_info_by_fd_v_OBJECTS = bpf-obj_get_info_by_fd-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_v_DEPENDENCIES = libtests.a
+bpf_success_SOURCES = bpf-success.c
+bpf_success_OBJECTS = bpf-success.$(OBJEXT)
+bpf_success_LDADD = $(LDADD)
+bpf_success_DEPENDENCIES = libtests.a
+bpf_success_v_SOURCES = bpf-success-v.c
+bpf_success_v_OBJECTS = bpf-success-v.$(OBJEXT)
+bpf_success_v_LDADD = $(LDADD)
+bpf_success_v_DEPENDENCIES = libtests.a
 bpf_v_SOURCES = bpf-v.c
 bpf_v_OBJECTS = bpf-v.$(OBJEXT)
 bpf_v_LDADD = $(LDADD)
@@ -616,6 +682,18 @@
 fanotify_mark_OBJECTS = fanotify_mark.$(OBJEXT)
 fanotify_mark_LDADD = $(LDADD)
 fanotify_mark_DEPENDENCIES = libtests.a
+fanotify_mark_Xabbrev_SOURCES = fanotify_mark-Xabbrev.c
+fanotify_mark_Xabbrev_OBJECTS = fanotify_mark-Xabbrev.$(OBJEXT)
+fanotify_mark_Xabbrev_LDADD = $(LDADD)
+fanotify_mark_Xabbrev_DEPENDENCIES = libtests.a
+fanotify_mark_Xraw_SOURCES = fanotify_mark-Xraw.c
+fanotify_mark_Xraw_OBJECTS = fanotify_mark-Xraw.$(OBJEXT)
+fanotify_mark_Xraw_LDADD = $(LDADD)
+fanotify_mark_Xraw_DEPENDENCIES = libtests.a
+fanotify_mark_Xverbose_SOURCES = fanotify_mark-Xverbose.c
+fanotify_mark_Xverbose_OBJECTS = fanotify_mark-Xverbose.$(OBJEXT)
+fanotify_mark_Xverbose_LDADD = $(LDADD)
+fanotify_mark_Xverbose_DEPENDENCIES = libtests.a
 fchdir_SOURCES = fchdir.c
 fchdir_OBJECTS = fchdir.$(OBJEXT)
 fchdir_LDADD = $(LDADD)
@@ -895,6 +973,10 @@
 ioctl_evdev_v_OBJECTS = ioctl_evdev-v.$(OBJEXT)
 ioctl_evdev_v_LDADD = $(LDADD)
 ioctl_evdev_v_DEPENDENCIES = libtests.a
+ioctl_inotify_SOURCES = ioctl_inotify.c
+ioctl_inotify_OBJECTS = ioctl_inotify.$(OBJEXT)
+ioctl_inotify_LDADD = $(LDADD)
+ioctl_inotify_DEPENDENCIES = libtests.a
 ioctl_kvm_run_SOURCES = ioctl_kvm_run.c
 ioctl_kvm_run_OBJECTS = ioctl_kvm_run.$(OBJEXT)
 ioctl_kvm_run_LDADD = $(LDADD)
@@ -919,6 +1001,18 @@
 ioctl_nsfs_OBJECTS = ioctl_nsfs.$(OBJEXT)
 ioctl_nsfs_LDADD = $(LDADD)
 ioctl_nsfs_DEPENDENCIES = libtests.a
+ioctl_perf_SOURCES = ioctl_perf.c
+ioctl_perf_OBJECTS = ioctl_perf.$(OBJEXT)
+ioctl_perf_LDADD = $(LDADD)
+ioctl_perf_DEPENDENCIES = libtests.a
+ioctl_perf_success_SOURCES = ioctl_perf-success.c
+ioctl_perf_success_OBJECTS = ioctl_perf-success.$(OBJEXT)
+ioctl_perf_success_LDADD = $(LDADD)
+ioctl_perf_success_DEPENDENCIES = libtests.a
+ioctl_ptp_SOURCES = ioctl_ptp.c
+ioctl_ptp_OBJECTS = ioctl_ptp.$(OBJEXT)
+ioctl_ptp_LDADD = $(LDADD)
+ioctl_ptp_DEPENDENCIES = libtests.a
 ioctl_rtc_SOURCES = ioctl_rtc.c
 ioctl_rtc_OBJECTS = ioctl_rtc.$(OBJEXT)
 ioctl_rtc_LDADD = $(LDADD)
@@ -975,18 +1069,66 @@
 ipc_msg_OBJECTS = ipc_msg.$(OBJEXT)
 ipc_msg_LDADD = $(LDADD)
 ipc_msg_DEPENDENCIES = libtests.a
+ipc_msg_Xabbrev_SOURCES = ipc_msg-Xabbrev.c
+ipc_msg_Xabbrev_OBJECTS = ipc_msg-Xabbrev.$(OBJEXT)
+ipc_msg_Xabbrev_LDADD = $(LDADD)
+ipc_msg_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msg_Xraw_SOURCES = ipc_msg-Xraw.c
+ipc_msg_Xraw_OBJECTS = ipc_msg-Xraw.$(OBJEXT)
+ipc_msg_Xraw_LDADD = $(LDADD)
+ipc_msg_Xraw_DEPENDENCIES = libtests.a
+ipc_msg_Xverbose_SOURCES = ipc_msg-Xverbose.c
+ipc_msg_Xverbose_OBJECTS = ipc_msg-Xverbose.$(OBJEXT)
+ipc_msg_Xverbose_LDADD = $(LDADD)
+ipc_msg_Xverbose_DEPENDENCIES = libtests.a
 ipc_msgbuf_SOURCES = ipc_msgbuf.c
 ipc_msgbuf_OBJECTS = ipc_msgbuf.$(OBJEXT)
 ipc_msgbuf_LDADD = $(LDADD)
 ipc_msgbuf_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xabbrev_SOURCES = ipc_msgbuf-Xabbrev.c
+ipc_msgbuf_Xabbrev_OBJECTS = ipc_msgbuf-Xabbrev.$(OBJEXT)
+ipc_msgbuf_Xabbrev_LDADD = $(LDADD)
+ipc_msgbuf_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xraw_SOURCES = ipc_msgbuf-Xraw.c
+ipc_msgbuf_Xraw_OBJECTS = ipc_msgbuf-Xraw.$(OBJEXT)
+ipc_msgbuf_Xraw_LDADD = $(LDADD)
+ipc_msgbuf_Xraw_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xverbose_SOURCES = ipc_msgbuf-Xverbose.c
+ipc_msgbuf_Xverbose_OBJECTS = ipc_msgbuf-Xverbose.$(OBJEXT)
+ipc_msgbuf_Xverbose_LDADD = $(LDADD)
+ipc_msgbuf_Xverbose_DEPENDENCIES = libtests.a
 ipc_sem_SOURCES = ipc_sem.c
 ipc_sem_OBJECTS = ipc_sem.$(OBJEXT)
 ipc_sem_LDADD = $(LDADD)
 ipc_sem_DEPENDENCIES = libtests.a
+ipc_sem_Xabbrev_SOURCES = ipc_sem-Xabbrev.c
+ipc_sem_Xabbrev_OBJECTS = ipc_sem-Xabbrev.$(OBJEXT)
+ipc_sem_Xabbrev_LDADD = $(LDADD)
+ipc_sem_Xabbrev_DEPENDENCIES = libtests.a
+ipc_sem_Xraw_SOURCES = ipc_sem-Xraw.c
+ipc_sem_Xraw_OBJECTS = ipc_sem-Xraw.$(OBJEXT)
+ipc_sem_Xraw_LDADD = $(LDADD)
+ipc_sem_Xraw_DEPENDENCIES = libtests.a
+ipc_sem_Xverbose_SOURCES = ipc_sem-Xverbose.c
+ipc_sem_Xverbose_OBJECTS = ipc_sem-Xverbose.$(OBJEXT)
+ipc_sem_Xverbose_LDADD = $(LDADD)
+ipc_sem_Xverbose_DEPENDENCIES = libtests.a
 ipc_shm_SOURCES = ipc_shm.c
 ipc_shm_OBJECTS = ipc_shm.$(OBJEXT)
 ipc_shm_LDADD = $(LDADD)
 ipc_shm_DEPENDENCIES = libtests.a
+ipc_shm_Xabbrev_SOURCES = ipc_shm-Xabbrev.c
+ipc_shm_Xabbrev_OBJECTS = ipc_shm-Xabbrev.$(OBJEXT)
+ipc_shm_Xabbrev_LDADD = $(LDADD)
+ipc_shm_Xabbrev_DEPENDENCIES = libtests.a
+ipc_shm_Xraw_SOURCES = ipc_shm-Xraw.c
+ipc_shm_Xraw_OBJECTS = ipc_shm-Xraw.$(OBJEXT)
+ipc_shm_Xraw_LDADD = $(LDADD)
+ipc_shm_Xraw_DEPENDENCIES = libtests.a
+ipc_shm_Xverbose_SOURCES = ipc_shm-Xverbose.c
+ipc_shm_Xverbose_OBJECTS = ipc_shm-Xverbose.$(OBJEXT)
+ipc_shm_Xverbose_LDADD = $(LDADD)
+ipc_shm_Xverbose_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)
@@ -1015,6 +1157,18 @@
 keyctl_OBJECTS = keyctl.$(OBJEXT)
 keyctl_LDADD = $(LDADD)
 keyctl_DEPENDENCIES = libtests.a
+keyctl_Xabbrev_SOURCES = keyctl-Xabbrev.c
+keyctl_Xabbrev_OBJECTS = keyctl-Xabbrev.$(OBJEXT)
+keyctl_Xabbrev_LDADD = $(LDADD)
+keyctl_Xabbrev_DEPENDENCIES = libtests.a
+keyctl_Xraw_SOURCES = keyctl-Xraw.c
+keyctl_Xraw_OBJECTS = keyctl-Xraw.$(OBJEXT)
+keyctl_Xraw_LDADD = $(LDADD)
+keyctl_Xraw_DEPENDENCIES = libtests.a
+keyctl_Xverbose_SOURCES = keyctl-Xverbose.c
+keyctl_Xverbose_OBJECTS = keyctl-Xverbose.$(OBJEXT)
+keyctl_Xverbose_LDADD = $(LDADD)
+keyctl_Xverbose_DEPENDENCIES = libtests.a
 kill_SOURCES = kill.c
 kill_OBJECTS = kill.$(OBJEXT)
 kill_LDADD = $(LDADD)
@@ -1122,10 +1276,34 @@
 mmap_OBJECTS = mmap.$(OBJEXT)
 mmap_LDADD = $(LDADD)
 mmap_DEPENDENCIES = libtests.a
+mmap_Xabbrev_SOURCES = mmap-Xabbrev.c
+mmap_Xabbrev_OBJECTS = mmap-Xabbrev.$(OBJEXT)
+mmap_Xabbrev_LDADD = $(LDADD)
+mmap_Xabbrev_DEPENDENCIES = libtests.a
+mmap_Xraw_SOURCES = mmap-Xraw.c
+mmap_Xraw_OBJECTS = mmap-Xraw.$(OBJEXT)
+mmap_Xraw_LDADD = $(LDADD)
+mmap_Xraw_DEPENDENCIES = libtests.a
+mmap_Xverbose_SOURCES = mmap-Xverbose.c
+mmap_Xverbose_OBJECTS = mmap-Xverbose.$(OBJEXT)
+mmap_Xverbose_LDADD = $(LDADD)
+mmap_Xverbose_DEPENDENCIES = libtests.a
 mmap64_SOURCES = mmap64.c
 mmap64_OBJECTS = mmap64-mmap64.$(OBJEXT)
 mmap64_LDADD = $(LDADD)
 mmap64_DEPENDENCIES = libtests.a
+mmap64_Xabbrev_SOURCES = mmap64-Xabbrev.c
+mmap64_Xabbrev_OBJECTS = mmap64_Xabbrev-mmap64-Xabbrev.$(OBJEXT)
+mmap64_Xabbrev_LDADD = $(LDADD)
+mmap64_Xabbrev_DEPENDENCIES = libtests.a
+mmap64_Xraw_SOURCES = mmap64-Xraw.c
+mmap64_Xraw_OBJECTS = mmap64_Xraw-mmap64-Xraw.$(OBJEXT)
+mmap64_Xraw_LDADD = $(LDADD)
+mmap64_Xraw_DEPENDENCIES = libtests.a
+mmap64_Xverbose_SOURCES = mmap64-Xverbose.c
+mmap64_Xverbose_OBJECTS = mmap64_Xverbose-mmap64-Xverbose.$(OBJEXT)
+mmap64_Xverbose_LDADD = $(LDADD)
+mmap64_Xverbose_DEPENDENCIES = libtests.a
 mmsg_SOURCES = mmsg.c
 mmsg_OBJECTS = mmsg.$(OBJEXT)
 mmsg_LDADD = $(LDADD)
@@ -1150,6 +1328,18 @@
 mount_OBJECTS = mount.$(OBJEXT)
 mount_LDADD = $(LDADD)
 mount_DEPENDENCIES = libtests.a
+mount_Xabbrev_SOURCES = mount-Xabbrev.c
+mount_Xabbrev_OBJECTS = mount-Xabbrev.$(OBJEXT)
+mount_Xabbrev_LDADD = $(LDADD)
+mount_Xabbrev_DEPENDENCIES = libtests.a
+mount_Xraw_SOURCES = mount-Xraw.c
+mount_Xraw_OBJECTS = mount-Xraw.$(OBJEXT)
+mount_Xraw_LDADD = $(LDADD)
+mount_Xraw_DEPENDENCIES = libtests.a
+mount_Xverbose_SOURCES = mount-Xverbose.c
+mount_Xverbose_OBJECTS = mount-Xverbose.$(OBJEXT)
+mount_Xverbose_LDADD = $(LDADD)
+mount_Xverbose_DEPENDENCIES = libtests.a
 move_pages_SOURCES = move_pages.c
 move_pages_OBJECTS = move_pages.$(OBJEXT)
 move_pages_LDADD = $(LDADD)
@@ -1353,10 +1543,18 @@
 nlattr_ifinfomsg_OBJECTS = nlattr_ifinfomsg.$(OBJEXT)
 nlattr_ifinfomsg_LDADD = $(LDADD)
 nlattr_ifinfomsg_DEPENDENCIES = libtests.a
+nlattr_ifla_af_spec_SOURCES = nlattr_ifla_af_spec.c
+nlattr_ifla_af_spec_OBJECTS = nlattr_ifla_af_spec.$(OBJEXT)
+nlattr_ifla_af_spec_LDADD = $(LDADD)
+nlattr_ifla_af_spec_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_linkinfo_SOURCES = nlattr_ifla_linkinfo.c
+nlattr_ifla_linkinfo_OBJECTS = nlattr_ifla_linkinfo.$(OBJEXT)
+nlattr_ifla_linkinfo_LDADD = $(LDADD)
+nlattr_ifla_linkinfo_DEPENDENCIES = libtests.a
 nlattr_ifla_port_SOURCES = nlattr_ifla_port.c
 nlattr_ifla_port_OBJECTS = nlattr_ifla_port.$(OBJEXT)
 nlattr_ifla_port_LDADD = $(LDADD)
@@ -1458,6 +1656,18 @@
 old_mmap_P_OBJECTS = old_mmap-P.$(OBJEXT)
 old_mmap_P_LDADD = $(LDADD)
 old_mmap_P_DEPENDENCIES = libtests.a
+old_mmap_Xabbrev_SOURCES = old_mmap-Xabbrev.c
+old_mmap_Xabbrev_OBJECTS = old_mmap-Xabbrev.$(OBJEXT)
+old_mmap_Xabbrev_LDADD = $(LDADD)
+old_mmap_Xabbrev_DEPENDENCIES = libtests.a
+old_mmap_Xraw_SOURCES = old_mmap-Xraw.c
+old_mmap_Xraw_OBJECTS = old_mmap-Xraw.$(OBJEXT)
+old_mmap_Xraw_LDADD = $(LDADD)
+old_mmap_Xraw_DEPENDENCIES = libtests.a
+old_mmap_Xverbose_SOURCES = old_mmap-Xverbose.c
+old_mmap_Xverbose_OBJECTS = old_mmap-Xverbose.$(OBJEXT)
+old_mmap_Xverbose_LDADD = $(LDADD)
+old_mmap_Xverbose_DEPENDENCIES = libtests.a
 old_mmap_v_none_SOURCES = old_mmap-v-none.c
 old_mmap_v_none_OBJECTS = old_mmap-v-none.$(OBJEXT)
 old_mmap_v_none_LDADD = $(LDADD)
@@ -1526,6 +1736,18 @@
 personality_OBJECTS = personality.$(OBJEXT)
 personality_LDADD = $(LDADD)
 personality_DEPENDENCIES = libtests.a
+personality_Xabbrev_SOURCES = personality-Xabbrev.c
+personality_Xabbrev_OBJECTS = personality-Xabbrev.$(OBJEXT)
+personality_Xabbrev_LDADD = $(LDADD)
+personality_Xabbrev_DEPENDENCIES = libtests.a
+personality_Xraw_SOURCES = personality-Xraw.c
+personality_Xraw_OBJECTS = personality-Xraw.$(OBJEXT)
+personality_Xraw_LDADD = $(LDADD)
+personality_Xraw_DEPENDENCIES = libtests.a
+personality_Xverbose_SOURCES = personality-Xverbose.c
+personality_Xverbose_OBJECTS = personality-Xverbose.$(OBJEXT)
+personality_Xverbose_LDADD = $(LDADD)
+personality_Xverbose_DEPENDENCIES = libtests.a
 pipe_SOURCES = pipe.c
 pipe_OBJECTS = pipe.$(OBJEXT)
 pipe_LDADD = $(LDADD)
@@ -1598,6 +1820,10 @@
 prctl_securebits_OBJECTS = prctl-securebits.$(OBJEXT)
 prctl_securebits_LDADD = $(LDADD)
 prctl_securebits_DEPENDENCIES = libtests.a
+prctl_spec_inject_SOURCES = prctl-spec-inject.c
+prctl_spec_inject_OBJECTS = prctl-spec-inject.$(OBJEXT)
+prctl_spec_inject_LDADD = $(LDADD)
+prctl_spec_inject_DEPENDENCIES = libtests.a
 prctl_tid_address_SOURCES = prctl-tid_address.c
 prctl_tid_address_OBJECTS = prctl-tid_address.$(OBJEXT)
 prctl_tid_address_LDADD = $(LDADD)
@@ -2088,10 +2314,34 @@
 so_peercred_OBJECTS = so_peercred.$(OBJEXT)
 so_peercred_LDADD = $(LDADD)
 so_peercred_DEPENDENCIES = libtests.a
+so_peercred_Xabbrev_SOURCES = so_peercred-Xabbrev.c
+so_peercred_Xabbrev_OBJECTS = so_peercred-Xabbrev.$(OBJEXT)
+so_peercred_Xabbrev_LDADD = $(LDADD)
+so_peercred_Xabbrev_DEPENDENCIES = libtests.a
+so_peercred_Xraw_SOURCES = so_peercred-Xraw.c
+so_peercred_Xraw_OBJECTS = so_peercred-Xraw.$(OBJEXT)
+so_peercred_Xraw_LDADD = $(LDADD)
+so_peercred_Xraw_DEPENDENCIES = libtests.a
+so_peercred_Xverbose_SOURCES = so_peercred-Xverbose.c
+so_peercred_Xverbose_OBJECTS = so_peercred-Xverbose.$(OBJEXT)
+so_peercred_Xverbose_LDADD = $(LDADD)
+so_peercred_Xverbose_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
+sock_filter_v_Xabbrev_SOURCES = sock_filter-v-Xabbrev.c
+sock_filter_v_Xabbrev_OBJECTS = sock_filter-v-Xabbrev.$(OBJEXT)
+sock_filter_v_Xabbrev_LDADD = $(LDADD)
+sock_filter_v_Xabbrev_DEPENDENCIES = libtests.a
+sock_filter_v_Xraw_SOURCES = sock_filter-v-Xraw.c
+sock_filter_v_Xraw_OBJECTS = sock_filter-v-Xraw.$(OBJEXT)
+sock_filter_v_Xraw_LDADD = $(LDADD)
+sock_filter_v_Xraw_DEPENDENCIES = libtests.a
+sock_filter_v_Xverbose_SOURCES = sock_filter-v-Xverbose.c
+sock_filter_v_Xverbose_OBJECTS = sock_filter-v-Xverbose.$(OBJEXT)
+sock_filter_v_Xverbose_LDADD = $(LDADD)
+sock_filter_v_Xverbose_DEPENDENCIES = libtests.a
 socketcall_SOURCES = socketcall.c
 socketcall_OBJECTS = socketcall.$(OBJEXT)
 socketcall_LDADD = $(LDADD)
@@ -2402,45 +2652,58 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c \
-	btrfs.c caps.c caps-abbrev.c check_sigblock.c check_sigign.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 delay.c \
-	delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	accept4.c access.c acct.c add_key.c adjtimex.c aio.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2456,59 +2719,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2526,44 +2794,57 @@
 	xettimeofday.c zeroargc.c
 DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c \
-	check_sigblock.c check_sigign.c chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	fallocate.c fanotify_init.c fanotify_mark.c \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2579,59 +2860,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2879,12 +3165,12 @@
       b='$*';; \
   esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing aclocal-1.14
+ACLOCAL = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing aclocal-1.14
 AMTAR = $${TAR-tar}
 AM_DEFAULT_VERBOSITY = 1
-AUTOCONF = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing autoheader
-AUTOMAKE = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing automake-1.14
+AUTOCONF = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing autoconf
+AUTOHEADER = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing autoheader
+AUTOMAKE = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing automake-1.14
 AWK = gawk
 BUILD_EXEEXT = 
 BUILD_OBJEXT = 
@@ -2905,7 +3191,7 @@
 CPPFLAGS_FOR_BUILD = 
 CPP_FOR_BUILD = gcc -E
 CYGPATH_W = echo
-DEB_CHANGELOGTIME = Thu, 14 Jun 2018 16:29:09 -0700
+DEB_CHANGELOGTIME = Fri, 15 Jun 2018 17:54:18 +0000
 DEFS = -DHAVE_CONFIG_H
 DEPDIR = .deps
 ECHO_C = 
@@ -2932,23 +3218,23 @@
 LIBS = 
 LTLIBOBJS = 
 MAINT = #
-MAKEINFO = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing makeinfo
-MANPAGE_DATE = 2018-04-04
+MAKEINFO = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing makeinfo
+MANPAGE_DATE = 2018-06-13
 MIPS_ABI = 
 MKDIR_P = /bin/mkdir -p
 OBJEXT = o
 PACKAGE = strace
 PACKAGE_BUGREPORT = strace-devel@lists.strace.io
 PACKAGE_NAME = strace
-PACKAGE_STRING = strace 4.22
+PACKAGE_STRING = strace 4.23
 PACKAGE_TARNAME = strace
 PACKAGE_URL = https://strace.io
-PACKAGE_VERSION = 4.22
+PACKAGE_VERSION = 4.23
 PATH_SEPARATOR = :
 PERL = /usr/bin/perl
 RANLIB = aarch64-linux-android-ranlib
 READELF = aarch64-linux-android-readelf
-RPM_CHANGELOGTIME = Thu Jun 14 2018
+RPM_CHANGELOGTIME = Fri Jun 15 2018
 SED = /bin/sed
 SET_MAKE = 
 SHELL = /bin/sh
@@ -2957,13 +3243,13 @@
 STRIP = aarch64-linux-android-strip
 VALGRIND = valgrind
 VALGRIND_ENABLED = yes
-VERSION = 4.22
+VERSION = 4.23
 WARN_CFLAGS =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wnested-externs -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
 WARN_CFLAGS_FOR_BUILD =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Wimplicit-fallthrough=5 -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
-abs_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.22/tests-m32
-abs_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.22/tests-m32
-abs_top_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
-abs_top_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
+abs_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.23/tests-m32
+abs_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.23/tests-m32
+abs_top_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
+abs_top_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
 ac_ct_CC = 
 ac_ct_CC_FOR_BUILD = gcc
 am__include = include
@@ -2999,8 +3285,12 @@
 htmldir = ${docdir}
 includedir = ${prefix}/include
 infodir = ${datarootdir}/info
-install_sh = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/install-sh
+install_sh = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/install-sh
 libdir = ${exec_prefix}/lib
+libdw_CFLAGS = 
+libdw_CPPFLAGS = 
+libdw_LDFLAGS = 
+libdw_LIBS = 
 libexecdir = ${exec_prefix}/libexec
 libiberty_CPPFLAGS = 
 libiberty_LDFLAGS = 
@@ -3095,9 +3385,14 @@
   add_key \
   adjtimex \
   aio \
+  aio_pgetevents \
   alarm \
   bpf \
   bpf-v \
+  bpf-obj_get_info_by_fd \
+  bpf-obj_get_info_by_fd-v \
+  bpf-obj_get_info_by_fd-prog \
+  bpf-obj_get_info_by_fd-prog-v \
   brk \
   btrfs \
   caps \
@@ -3130,6 +3425,9 @@
   fallocate \
   fanotify_init \
   fanotify_mark \
+  fanotify_mark-Xabbrev \
+  fanotify_mark-Xraw \
+  fanotify_mark-Xverbose \
   fchdir \
   fchmod \
   fchmodat \
@@ -3192,10 +3490,13 @@
   ioctl_block \
   ioctl_dm \
   ioctl_evdev \
+  ioctl_inotify \
   ioctl_kvm_run \
   ioctl_loop \
   ioctl_mtd \
   ioctl_rtc \
+  ioctl_perf \
+  ioctl_ptp \
   ioctl_scsi \
   ioctl_sg_io_v3 \
   ioctl_sg_io_v4 \
@@ -3208,15 +3509,30 @@
   ip_mreq \
   ipc \
   ipc_msg \
+  ipc_msg-Xabbrev \
+  ipc_msg-Xraw \
+  ipc_msg-Xverbose \
   ipc_msgbuf \
+  ipc_msgbuf-Xabbrev \
+  ipc_msgbuf-Xraw \
+  ipc_msgbuf-Xverbose \
   ipc_sem \
+  ipc_sem-Xabbrev \
+  ipc_sem-Xraw \
+  ipc_sem-Xverbose \
   ipc_shm \
+  ipc_shm-Xabbrev \
+  ipc_shm-Xraw \
+  ipc_shm-Xverbose \
   kcmp \
   kcmp-y \
   kern_features \
   kexec_file_load \
   kexec_load \
   keyctl \
+  keyctl-Xabbrev \
+  keyctl-Xraw \
+  keyctl-Xverbose \
   kill \
   lchown \
   lchown32 \
@@ -3241,11 +3557,20 @@
   mlock2 \
   mlockall \
   mmap \
+  mmap-Xabbrev \
+  mmap-Xraw \
+  mmap-Xverbose \
   mmap64 \
+  mmap64-Xabbrev \
+  mmap64-Xraw \
+  mmap64-Xverbose \
   mmsg \
   mmsg_name \
   modify_ldt \
   mount \
+  mount-Xabbrev \
+  mount-Xraw \
+  mount-Xverbose \
   move_pages \
   mq \
   mq_sendrecv \
@@ -3292,7 +3617,9 @@
   nlattr_ifaddrlblmsg \
   nlattr_ifaddrmsg \
   nlattr_ifinfomsg \
+  nlattr_ifla_af_spec \
   nlattr_ifla_brport \
+  nlattr_ifla_linkinfo \
   nlattr_ifla_port \
   nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
@@ -3317,6 +3644,9 @@
   old_mmap \
   old_mmap-P \
   old_mmap-v-none \
+  old_mmap-Xabbrev \
+  old_mmap-Xraw \
+  old_mmap-Xverbose \
   oldfstat \
   oldlstat \
   oldselect \
@@ -3328,6 +3658,9 @@
   pause \
   perf_event_open \
   personality \
+  personality-Xabbrev \
+  personality-Xraw \
+  personality-Xverbose \
   pipe \
   pipe2 \
   pkey_alloc \
@@ -3444,7 +3777,13 @@
   sigsuspend \
   so_linger \
   so_peercred \
+  so_peercred-Xabbrev \
+  so_peercred-Xraw \
+  so_peercred-Xverbose \
   sock_filter-v \
+  sock_filter-v-Xabbrev \
+  sock_filter-v-Xraw \
+  sock_filter-v-Xverbose \
   socketcall \
   sockopt-sol_netlink \
   splice \
@@ -3515,6 +3854,9 @@
 localtime_LDADD = $(clock_LIBS) $(LDADD)
 lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xraw_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xverbose_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mq_LDADD = $(mq_LIBS) $(LDADD)
 newfstatat_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 pc_LDADD = $(dl_LIBS) $(LDADD)
@@ -3539,10 +3881,14 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
 GEN_TESTS = _newselect.gen.test _newselect-P.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 \
+	add_key.gen.test adjtimex.gen.test aio.gen.test \
+	aio_pgetevents.gen.test alarm.gen.test bpf.gen.test \
+	bpf-v.gen.test bpf-obj_get_info_by_fd.gen.test \
+	bpf-obj_get_info_by_fd-v.gen.test \
+	bpf-obj_get_info_by_fd-prog.gen.test \
+	bpf-obj_get_info_by_fd-prog-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 dev-yy.gen.test dup.gen.test \
 	dup2.gen.test dup3.gen.test epoll_create.gen.test \
@@ -3550,70 +3896,85 @@
 	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 \
-	fsync-y.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_dm.gen.test ioctl_dm-v.gen.test \
-	ioctl_evdev.gen.test ioctl_evdev-v.gen.test \
+	fanotify_mark.gen.test fanotify_mark-Xabbrev.gen.test \
+	fanotify_mark-Xraw.gen.test fanotify_mark-Xverbose.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 fsync-y.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_dm.gen.test \
+	ioctl_dm-v.gen.test ioctl_evdev.gen.test \
+	ioctl_evdev-v.gen.test ioctl_inotify.gen.test \
 	ioctl_kvm_run.gen.test ioctl_loop.gen.test \
 	ioctl_loop-nv.gen.test ioctl_loop-v.gen.test \
-	ioctl_mtd.gen.test ioctl_nsfs.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_sock_gifconf.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 \
-	kcmp-y.gen.test kern_features.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 \
+	ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_perf.gen.test \
+	ioctl_ptp.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_sock_gifconf.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_msg-Xabbrev.gen.test \
+	ipc_msg-Xraw.gen.test ipc_msg-Xverbose.gen.test \
+	ipc_msgbuf-Xabbrev.gen.test ipc_msgbuf-Xraw.gen.test \
+	ipc_msgbuf-Xverbose.gen.test ipc_sem.gen.test \
+	ipc_sem-Xabbrev.gen.test ipc_sem-Xraw.gen.test \
+	ipc_sem-Xverbose.gen.test ipc_shm.gen.test \
+	ipc_shm-Xabbrev.gen.test ipc_shm-Xraw.gen.test \
+	ipc_shm-Xverbose.gen.test kcmp.gen.test kcmp-y.gen.test \
+	kern_features.gen.test kexec_file_load.gen.test \
+	kexec_load.gen.test keyctl.gen.test keyctl-Xabbrev.gen.test \
+	keyctl-Xraw.gen.test keyctl-Xverbose.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 modify_ldt.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 net-yy-inet6.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 \
-	nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test \
-	nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test \
-	nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test \
-	nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test \
-	nfnetlink_osf.gen.test nfnetlink_queue.gen.test \
-	nfnetlink_ulog.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 \
+	mmap-Xabbrev.gen.test mmap-Xraw.gen.test \
+	mmap-Xverbose.gen.test mmap64.gen.test mmap64-Xabbrev.gen.test \
+	mmap64-Xraw.gen.test mmap64-Xverbose.gen.test mmsg.gen.test \
+	mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test \
+	modify_ldt.gen.test mount.gen.test mount-Xabbrev.gen.test \
+	mount-Xraw.gen.test mount-Xverbose.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 \
+	net-yy-inet6.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 nfnetlink_acct.gen.test \
+	nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test \
+	nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test \
+	nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test \
+	nfnetlink_nftables.gen.test nfnetlink_osf.gen.test \
+	nfnetlink_queue.gen.test nfnetlink_ulog.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_af_spec.gen.test \
+	nlattr_ifla_brport.gen.test nlattr_ifla_linkinfo.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_mdba_mdb_entry.gen.test \
@@ -3625,16 +3986,19 @@
 	nlattr_tc_stats.gen.test nlattr_tca_stab.gen.test \
 	nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
 	nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
-	old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test \
-	oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test \
+	old_mmap-P.gen.test old_mmap-v-none.gen.test \
+	old_mmap-Xabbrev.gen.test old_mmap-Xraw.gen.test \
+	old_mmap-Xverbose.gen.test oldfstat.gen.test oldlstat.gen.test \
+	oldselect.gen.test oldselect-P.gen.test \
 	oldselect-efault.gen.test oldselect-efault-P.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-P.gen.test ppoll-v.gen.test \
-	pread64-pwrite64.gen.test preadv.gen.test \
+	perf_event_open_unabbrev.gen.test personality-Xabbrev.gen.test \
+	personality-Xraw.gen.test personality-Xverbose.gen.test \
+	pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test \
+	pkey_mprotect.gen.test ppoll.gen.test ppoll-P.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 \
@@ -3675,22 +4039,29 @@
 	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 sockopt-sol_netlink.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 \
+	so_linger.gen.test so_peercred.gen.test \
+	so_peercred-Xabbrev.gen.test so_peercred-Xraw.gen.test \
+	so_peercred-Xverbose.gen.test sock_filter-v.gen.test \
+	sock_filter-v-Xabbrev.gen.test sock_filter-v-Xraw.gen.test \
+	sock_filter-v-Xverbose.gen.test socketcall.gen.test \
+	sockopt-sol_netlink.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_personality_32.gen.test \
+	trace_personality_64.gen.test trace_personality_x32.gen.test \
+	trace_personality_regex_32.gen.test \
+	trace_personality_regex_64.gen.test \
+	trace_personality_regex_x32.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 \
@@ -3700,13 +4071,20 @@
 	xattr-strings.gen.test xet_robust_list.gen.test \
 	xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test \
 	xettimeofday.gen.test
-LIBUNWIND_TESTS = 
-#LIBUNWIND_TESTS = strace-k.test $(am__append_1)
+STACKTRACE_TESTS = 
+#STACKTRACE_TESTS = strace-k.test \
+#	$(am__append_1)
 DECODER_TESTS = \
+	bpf-success.test \
+	bpf-success-v.test \
 	brk.test \
 	btrfs-v.test \
 	btrfs-vw.test \
+	btrfs-vwX.test \
+	btrfs-vX.test \
 	btrfs-w.test \
+	btrfs-wX.test \
+	btrfs-X.test \
 	caps-abbrev.test \
 	caps.test \
 	eventfd.test \
@@ -3716,6 +4094,7 @@
 	futex.test \
 	getuid.test \
 	ioctl.test \
+	ioctl_perf-success.test \
 	ipc_msgbuf.test \
 	kern_features-fault.test \
 	llseek.test \
@@ -3742,6 +4121,7 @@
 	prctl-seccomp-filter-v.test \
 	prctl-seccomp-strict.test \
 	prctl-securebits.test \
+	prctl-spec-inject.test \
 	prctl-tid_address.test \
 	prctl-tsc.test \
 	qual_fault-exit_group.test \
@@ -3790,9 +4170,13 @@
 	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
+	qual_fault-syscall.test \
 	qual_inject-error-signal.test \
+	qual_inject-error-signal-syscall.test \
 	qual_inject-retval.test \
+	qual_inject-retval-syscall.test \
 	qual_inject-signal.test \
+	qual_inject-signal-syscall.test \
 	qual_inject-syntax.test \
 	qual_signal.test \
 	qual_syscall.test \
@@ -3816,8 +4200,8 @@
 	# end of MISC_TESTS
 
 XFAIL_TESTS_ = 
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
@@ -3838,6 +4222,7 @@
 	count-f.expected \
 	eventfd.expected \
 	fadvise.h \
+	fcntl-common.c \
 	filter-unavailable.expected \
 	fstatat.c \
 	fstatx.c \
@@ -3848,12 +4233,12 @@
 	init.sh \
 	init_delete_module.h \
 	ipc.sh \
-	ipc_msgbuf.expected \
 	ksysent.sed \
 	lstatx.c \
 	match.awk \
 	net.expected \
 	netlink_sock_diag-v.sh \
+	nlattr_ifla.h \
 	pipe.expected \
 	print_user_desc.c \
 	process_vm_readv_writev.c \
@@ -3861,6 +4246,8 @@
 	qual_fault-exit_group.expected \
 	qual_inject-error-signal.expected \
 	qual_inject-signal.expected \
+	qualify_personality.sh \
+	qualify_personality_empty.in \
 	quotactl.h \
 	regex.in \
 	rt_sigaction.awk \
@@ -3878,16 +4265,23 @@
 	strace-E.expected \
 	strace-T.expected \
 	strace-ff.expected \
+	strace-k-demangle.expected \
 	strace-k-demangle.test \
+	strace-k.expected \
 	strace-k.test \
 	strace-r.expected \
 	strace.supp \
-	struct_flock.c \
 	sun_path.expected \
 	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
+	trace_personality_32.in \
+	trace_personality_64.in \
+	trace_personality_x32.in \
+	trace_personality_regex_32.in \
+	trace_personality_regex_64.in \
+	trace_personality_regex_x32.in \
 	trace_question.in \
 	trace_stat.in \
 	trace_stat_like.in \
@@ -4001,6 +4395,10 @@
 	@rm -f aio$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(aio_OBJECTS) $(aio_LDADD) $(LIBS)
 
+aio_pgetevents$(EXEEXT): $(aio_pgetevents_OBJECTS) $(aio_pgetevents_DEPENDENCIES) $(EXTRA_aio_pgetevents_DEPENDENCIES) 
+	@rm -f aio_pgetevents$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(aio_pgetevents_OBJECTS) $(aio_pgetevents_LDADD) $(LIBS)
+
 alarm$(EXEEXT): $(alarm_OBJECTS) $(alarm_DEPENDENCIES) $(EXTRA_alarm_DEPENDENCIES) 
 	@rm -f alarm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(alarm_OBJECTS) $(alarm_LDADD) $(LIBS)
@@ -4033,6 +4431,30 @@
 	@rm -f bpf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bpf_OBJECTS) $(bpf_LDADD) $(LIBS)
 
+bpf-obj_get_info_by_fd$(EXEEXT): $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog-v$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-v$(EXEEXT): $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_LDADD) $(LIBS)
+
+bpf-success$(EXEEXT): $(bpf_success_OBJECTS) $(bpf_success_DEPENDENCIES) $(EXTRA_bpf_success_DEPENDENCIES) 
+	@rm -f bpf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_OBJECTS) $(bpf_success_LDADD) $(LIBS)
+
+bpf-success-v$(EXEEXT): $(bpf_success_v_OBJECTS) $(bpf_success_v_DEPENDENCIES) $(EXTRA_bpf_success_v_DEPENDENCIES) 
+	@rm -f bpf-success-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_v_OBJECTS) $(bpf_success_v_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)
@@ -4201,6 +4623,18 @@
 	@rm -f fanotify_mark$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fanotify_mark_OBJECTS) $(fanotify_mark_LDADD) $(LIBS)
 
+fanotify_mark-Xabbrev$(EXEEXT): $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_DEPENDENCIES) $(EXTRA_fanotify_mark_Xabbrev_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_LDADD) $(LIBS)
+
+fanotify_mark-Xraw$(EXEEXT): $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_DEPENDENCIES) $(EXTRA_fanotify_mark_Xraw_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_LDADD) $(LIBS)
+
+fanotify_mark-Xverbose$(EXEEXT): $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_DEPENDENCIES) $(EXTRA_fanotify_mark_Xverbose_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_LDADD) $(LIBS)
+
 fchdir$(EXEEXT): $(fchdir_OBJECTS) $(fchdir_DEPENDENCIES) $(EXTRA_fchdir_DEPENDENCIES) 
 	@rm -f fchdir$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fchdir_OBJECTS) $(fchdir_LDADD) $(LIBS)
@@ -4481,6 +4915,10 @@
 	@rm -f ioctl_evdev-v$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_evdev_v_OBJECTS) $(ioctl_evdev_v_LDADD) $(LIBS)
 
+ioctl_inotify$(EXEEXT): $(ioctl_inotify_OBJECTS) $(ioctl_inotify_DEPENDENCIES) $(EXTRA_ioctl_inotify_DEPENDENCIES) 
+	@rm -f ioctl_inotify$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_inotify_OBJECTS) $(ioctl_inotify_LDADD) $(LIBS)
+
 ioctl_kvm_run$(EXEEXT): $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_DEPENDENCIES) $(EXTRA_ioctl_kvm_run_DEPENDENCIES) 
 	@rm -f ioctl_kvm_run$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_LDADD) $(LIBS)
@@ -4505,6 +4943,18 @@
 	@rm -f ioctl_nsfs$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_nsfs_OBJECTS) $(ioctl_nsfs_LDADD) $(LIBS)
 
+ioctl_perf$(EXEEXT): $(ioctl_perf_OBJECTS) $(ioctl_perf_DEPENDENCIES) $(EXTRA_ioctl_perf_DEPENDENCIES) 
+	@rm -f ioctl_perf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_OBJECTS) $(ioctl_perf_LDADD) $(LIBS)
+
+ioctl_perf-success$(EXEEXT): $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_DEPENDENCIES) $(EXTRA_ioctl_perf_success_DEPENDENCIES) 
+	@rm -f ioctl_perf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_LDADD) $(LIBS)
+
+ioctl_ptp$(EXEEXT): $(ioctl_ptp_OBJECTS) $(ioctl_ptp_DEPENDENCIES) $(EXTRA_ioctl_ptp_DEPENDENCIES) 
+	@rm -f ioctl_ptp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_ptp_OBJECTS) $(ioctl_ptp_LDADD) $(LIBS)
+
 ioctl_rtc$(EXEEXT): $(ioctl_rtc_OBJECTS) $(ioctl_rtc_DEPENDENCIES) $(EXTRA_ioctl_rtc_DEPENDENCIES) 
 	@rm -f ioctl_rtc$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_rtc_OBJECTS) $(ioctl_rtc_LDADD) $(LIBS)
@@ -4561,18 +5011,66 @@
 	@rm -f ipc_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msg_OBJECTS) $(ipc_msg_LDADD) $(LIBS)
 
+ipc_msg-Xabbrev$(EXEEXT): $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msg_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msg-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_LDADD) $(LIBS)
+
+ipc_msg-Xraw$(EXEEXT): $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_DEPENDENCIES) $(EXTRA_ipc_msg_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msg-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_LDADD) $(LIBS)
+
+ipc_msg-Xverbose$(EXEEXT): $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msg_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msg-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_LDADD) $(LIBS)
+
 ipc_msgbuf$(EXEEXT): $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_DEPENDENCIES) $(EXTRA_ipc_msgbuf_DEPENDENCIES) 
 	@rm -f ipc_msgbuf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_LDADD) $(LIBS)
 
+ipc_msgbuf-Xabbrev$(EXEEXT): $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_LDADD) $(LIBS)
+
+ipc_msgbuf-Xraw$(EXEEXT): $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_LDADD) $(LIBS)
+
+ipc_msgbuf-Xverbose$(EXEEXT): $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_LDADD) $(LIBS)
+
 ipc_sem$(EXEEXT): $(ipc_sem_OBJECTS) $(ipc_sem_DEPENDENCIES) $(EXTRA_ipc_sem_DEPENDENCIES) 
 	@rm -f ipc_sem$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_sem_OBJECTS) $(ipc_sem_LDADD) $(LIBS)
 
+ipc_sem-Xabbrev$(EXEEXT): $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_sem_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_sem-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_LDADD) $(LIBS)
+
+ipc_sem-Xraw$(EXEEXT): $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_DEPENDENCIES) $(EXTRA_ipc_sem_Xraw_DEPENDENCIES) 
+	@rm -f ipc_sem-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_LDADD) $(LIBS)
+
+ipc_sem-Xverbose$(EXEEXT): $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_DEPENDENCIES) $(EXTRA_ipc_sem_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_sem-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_LDADD) $(LIBS)
+
 ipc_shm$(EXEEXT): $(ipc_shm_OBJECTS) $(ipc_shm_DEPENDENCIES) $(EXTRA_ipc_shm_DEPENDENCIES) 
 	@rm -f ipc_shm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_shm_OBJECTS) $(ipc_shm_LDADD) $(LIBS)
 
+ipc_shm-Xabbrev$(EXEEXT): $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_shm_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_shm-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_LDADD) $(LIBS)
+
+ipc_shm-Xraw$(EXEEXT): $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_DEPENDENCIES) $(EXTRA_ipc_shm_Xraw_DEPENDENCIES) 
+	@rm -f ipc_shm-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_LDADD) $(LIBS)
+
+ipc_shm-Xverbose$(EXEEXT): $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_DEPENDENCIES) $(EXTRA_ipc_shm_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_shm-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_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)
@@ -4601,6 +5099,18 @@
 	@rm -f keyctl$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(keyctl_OBJECTS) $(keyctl_LDADD) $(LIBS)
 
+keyctl-Xabbrev$(EXEEXT): $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_DEPENDENCIES) $(EXTRA_keyctl_Xabbrev_DEPENDENCIES) 
+	@rm -f keyctl-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_LDADD) $(LIBS)
+
+keyctl-Xraw$(EXEEXT): $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_DEPENDENCIES) $(EXTRA_keyctl_Xraw_DEPENDENCIES) 
+	@rm -f keyctl-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_LDADD) $(LIBS)
+
+keyctl-Xverbose$(EXEEXT): $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_DEPENDENCIES) $(EXTRA_keyctl_Xverbose_DEPENDENCIES) 
+	@rm -f keyctl-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_LDADD) $(LIBS)
+
 kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) $(EXTRA_kill_DEPENDENCIES) 
 	@rm -f kill$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
@@ -4709,10 +5219,34 @@
 	@rm -f mmap$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap_OBJECTS) $(mmap_LDADD) $(LIBS)
 
+mmap-Xabbrev$(EXEEXT): $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_DEPENDENCIES) $(EXTRA_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_LDADD) $(LIBS)
+
+mmap-Xraw$(EXEEXT): $(mmap_Xraw_OBJECTS) $(mmap_Xraw_DEPENDENCIES) $(EXTRA_mmap_Xraw_DEPENDENCIES) 
+	@rm -f mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xraw_OBJECTS) $(mmap_Xraw_LDADD) $(LIBS)
+
+mmap-Xverbose$(EXEEXT): $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_DEPENDENCIES) $(EXTRA_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_LDADD) $(LIBS)
+
 mmap64$(EXEEXT): $(mmap64_OBJECTS) $(mmap64_DEPENDENCIES) $(EXTRA_mmap64_DEPENDENCIES) 
 	@rm -f mmap64$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap64_OBJECTS) $(mmap64_LDADD) $(LIBS)
 
+mmap64-Xabbrev$(EXEEXT): $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_DEPENDENCIES) $(EXTRA_mmap64_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap64-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_LDADD) $(LIBS)
+
+mmap64-Xraw$(EXEEXT): $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_DEPENDENCIES) $(EXTRA_mmap64_Xraw_DEPENDENCIES) 
+	@rm -f mmap64-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_LDADD) $(LIBS)
+
+mmap64-Xverbose$(EXEEXT): $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_DEPENDENCIES) $(EXTRA_mmap64_Xverbose_DEPENDENCIES) 
+	@rm -f mmap64-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_LDADD) $(LIBS)
+
 mmsg$(EXEEXT): $(mmsg_OBJECTS) $(mmsg_DEPENDENCIES) $(EXTRA_mmsg_DEPENDENCIES) 
 	@rm -f mmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmsg_OBJECTS) $(mmsg_LDADD) $(LIBS)
@@ -4737,6 +5271,18 @@
 	@rm -f mount$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
 
+mount-Xabbrev$(EXEEXT): $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_DEPENDENCIES) $(EXTRA_mount_Xabbrev_DEPENDENCIES) 
+	@rm -f mount-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_LDADD) $(LIBS)
+
+mount-Xraw$(EXEEXT): $(mount_Xraw_OBJECTS) $(mount_Xraw_DEPENDENCIES) $(EXTRA_mount_Xraw_DEPENDENCIES) 
+	@rm -f mount-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xraw_OBJECTS) $(mount_Xraw_LDADD) $(LIBS)
+
+mount-Xverbose$(EXEEXT): $(mount_Xverbose_OBJECTS) $(mount_Xverbose_DEPENDENCIES) $(EXTRA_mount_Xverbose_DEPENDENCIES) 
+	@rm -f mount-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xverbose_OBJECTS) $(mount_Xverbose_LDADD) $(LIBS)
+
 move_pages$(EXEEXT): $(move_pages_OBJECTS) $(move_pages_DEPENDENCIES) $(EXTRA_move_pages_DEPENDENCIES) 
 	@rm -f move_pages$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(move_pages_OBJECTS) $(move_pages_LDADD) $(LIBS)
@@ -4941,10 +5487,18 @@
 	@rm -f nlattr_ifinfomsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_LDADD) $(LIBS)
 
+nlattr_ifla_af_spec$(EXEEXT): $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_DEPENDENCIES) $(EXTRA_nlattr_ifla_af_spec_DEPENDENCIES) 
+	@rm -f nlattr_ifla_af_spec$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_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_linkinfo$(EXEEXT): $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_DEPENDENCIES) $(EXTRA_nlattr_ifla_linkinfo_DEPENDENCIES) 
+	@rm -f nlattr_ifla_linkinfo$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_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)
@@ -5045,6 +5599,18 @@
 	@rm -f old_mmap-P$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_P_OBJECTS) $(old_mmap_P_LDADD) $(LIBS)
 
+old_mmap-Xabbrev$(EXEEXT): $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_DEPENDENCIES) $(EXTRA_old_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f old_mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_LDADD) $(LIBS)
+
+old_mmap-Xraw$(EXEEXT): $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_DEPENDENCIES) $(EXTRA_old_mmap_Xraw_DEPENDENCIES) 
+	@rm -f old_mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_LDADD) $(LIBS)
+
+old_mmap-Xverbose$(EXEEXT): $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_DEPENDENCIES) $(EXTRA_old_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f old_mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_LDADD) $(LIBS)
+
 old_mmap-v-none$(EXEEXT): $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_DEPENDENCIES) $(EXTRA_old_mmap_v_none_DEPENDENCIES) 
 	@rm -f old_mmap-v-none$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_LDADD) $(LIBS)
@@ -5113,6 +5679,18 @@
 	@rm -f personality$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(personality_OBJECTS) $(personality_LDADD) $(LIBS)
 
+personality-Xabbrev$(EXEEXT): $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_DEPENDENCIES) $(EXTRA_personality_Xabbrev_DEPENDENCIES) 
+	@rm -f personality-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_LDADD) $(LIBS)
+
+personality-Xraw$(EXEEXT): $(personality_Xraw_OBJECTS) $(personality_Xraw_DEPENDENCIES) $(EXTRA_personality_Xraw_DEPENDENCIES) 
+	@rm -f personality-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xraw_OBJECTS) $(personality_Xraw_LDADD) $(LIBS)
+
+personality-Xverbose$(EXEEXT): $(personality_Xverbose_OBJECTS) $(personality_Xverbose_DEPENDENCIES) $(EXTRA_personality_Xverbose_DEPENDENCIES) 
+	@rm -f personality-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xverbose_OBJECTS) $(personality_Xverbose_LDADD) $(LIBS)
+
 pipe$(EXEEXT): $(pipe_OBJECTS) $(pipe_DEPENDENCIES) $(EXTRA_pipe_DEPENDENCIES) 
 	@rm -f pipe$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(pipe_OBJECTS) $(pipe_LDADD) $(LIBS)
@@ -5185,6 +5763,10 @@
 	@rm -f prctl-securebits$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_securebits_OBJECTS) $(prctl_securebits_LDADD) $(LIBS)
 
+prctl-spec-inject$(EXEEXT): $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_DEPENDENCIES) $(EXTRA_prctl_spec_inject_DEPENDENCIES) 
+	@rm -f prctl-spec-inject$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_LDADD) $(LIBS)
+
 prctl-tid_address$(EXEEXT): $(prctl_tid_address_OBJECTS) $(prctl_tid_address_DEPENDENCIES) $(EXTRA_prctl_tid_address_DEPENDENCIES) 
 	@rm -f prctl-tid_address$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_tid_address_OBJECTS) $(prctl_tid_address_LDADD) $(LIBS)
@@ -5669,10 +6251,34 @@
 	@rm -f so_peercred$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(so_peercred_OBJECTS) $(so_peercred_LDADD) $(LIBS)
 
+so_peercred-Xabbrev$(EXEEXT): $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_DEPENDENCIES) $(EXTRA_so_peercred_Xabbrev_DEPENDENCIES) 
+	@rm -f so_peercred-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_LDADD) $(LIBS)
+
+so_peercred-Xraw$(EXEEXT): $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_DEPENDENCIES) $(EXTRA_so_peercred_Xraw_DEPENDENCIES) 
+	@rm -f so_peercred-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_LDADD) $(LIBS)
+
+so_peercred-Xverbose$(EXEEXT): $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_DEPENDENCIES) $(EXTRA_so_peercred_Xverbose_DEPENDENCIES) 
+	@rm -f so_peercred-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_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)
 
+sock_filter-v-Xabbrev$(EXEEXT): $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_DEPENDENCIES) $(EXTRA_sock_filter_v_Xabbrev_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_LDADD) $(LIBS)
+
+sock_filter-v-Xraw$(EXEEXT): $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_DEPENDENCIES) $(EXTRA_sock_filter_v_Xraw_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_LDADD) $(LIBS)
+
+sock_filter-v-Xverbose$(EXEEXT): $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_DEPENDENCIES) $(EXTRA_sock_filter_v_Xverbose_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_LDADD) $(LIBS)
+
 socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_socketcall_DEPENDENCIES) 
 	@rm -f socketcall$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
@@ -5960,6 +6566,7 @@
 include ./$(DEPDIR)/add_key.Po
 include ./$(DEPDIR)/adjtimex.Po
 include ./$(DEPDIR)/aio.Po
+include ./$(DEPDIR)/aio_pgetevents.Po
 include ./$(DEPDIR)/alarm.Po
 include ./$(DEPDIR)/answer.Po
 include ./$(DEPDIR)/attach-f-p-cmd.Po
@@ -5967,6 +6574,12 @@
 include ./$(DEPDIR)/attach-p-cmd-cmd.Po
 include ./$(DEPDIR)/attach-p-cmd-p.Po
 include ./$(DEPDIR)/block_reset_raise_run.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd-prog-v.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd-prog.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd-v.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd.Po
+include ./$(DEPDIR)/bpf-success-v.Po
+include ./$(DEPDIR)/bpf-success.Po
 include ./$(DEPDIR)/bpf-v.Po
 include ./$(DEPDIR)/bpf.Po
 include ./$(DEPDIR)/brk.Po
@@ -6009,6 +6622,9 @@
 include ./$(DEPDIR)/fadvise64_64.Po
 include ./$(DEPDIR)/fallocate.Po
 include ./$(DEPDIR)/fanotify_init.Po
+include ./$(DEPDIR)/fanotify_mark-Xabbrev.Po
+include ./$(DEPDIR)/fanotify_mark-Xraw.Po
+include ./$(DEPDIR)/fanotify_mark-Xverbose.Po
 include ./$(DEPDIR)/fanotify_mark.Po
 include ./$(DEPDIR)/fchdir.Po
 include ./$(DEPDIR)/fchmod.Po
@@ -6080,12 +6696,16 @@
 include ./$(DEPDIR)/ioctl_dm.Po
 include ./$(DEPDIR)/ioctl_evdev-v.Po
 include ./$(DEPDIR)/ioctl_evdev.Po
+include ./$(DEPDIR)/ioctl_inotify.Po
 include ./$(DEPDIR)/ioctl_kvm_run.Po
 include ./$(DEPDIR)/ioctl_loop-nv.Po
 include ./$(DEPDIR)/ioctl_loop-v.Po
 include ./$(DEPDIR)/ioctl_loop.Po
 include ./$(DEPDIR)/ioctl_mtd.Po
 include ./$(DEPDIR)/ioctl_nsfs.Po
+include ./$(DEPDIR)/ioctl_perf-success.Po
+include ./$(DEPDIR)/ioctl_perf.Po
+include ./$(DEPDIR)/ioctl_ptp.Po
 include ./$(DEPDIR)/ioctl_rtc-v.Po
 include ./$(DEPDIR)/ioctl_rtc.Po
 include ./$(DEPDIR)/ioctl_scsi.Po
@@ -6099,9 +6719,21 @@
 include ./$(DEPDIR)/ioprio.Po
 include ./$(DEPDIR)/ip_mreq.Po
 include ./$(DEPDIR)/ipc.Po
+include ./$(DEPDIR)/ipc_msg-Xabbrev.Po
+include ./$(DEPDIR)/ipc_msg-Xraw.Po
+include ./$(DEPDIR)/ipc_msg-Xverbose.Po
 include ./$(DEPDIR)/ipc_msg.Po
+include ./$(DEPDIR)/ipc_msgbuf-Xabbrev.Po
+include ./$(DEPDIR)/ipc_msgbuf-Xraw.Po
+include ./$(DEPDIR)/ipc_msgbuf-Xverbose.Po
 include ./$(DEPDIR)/ipc_msgbuf.Po
+include ./$(DEPDIR)/ipc_sem-Xabbrev.Po
+include ./$(DEPDIR)/ipc_sem-Xraw.Po
+include ./$(DEPDIR)/ipc_sem-Xverbose.Po
 include ./$(DEPDIR)/ipc_sem.Po
+include ./$(DEPDIR)/ipc_shm-Xabbrev.Po
+include ./$(DEPDIR)/ipc_shm-Xraw.Po
+include ./$(DEPDIR)/ipc_shm-Xverbose.Po
 include ./$(DEPDIR)/ipc_shm.Po
 include ./$(DEPDIR)/is_linux_mips_n64.Po
 include ./$(DEPDIR)/kcmp-y.Po
@@ -6109,6 +6741,9 @@
 include ./$(DEPDIR)/kern_features.Po
 include ./$(DEPDIR)/kexec_file_load.Po
 include ./$(DEPDIR)/kexec_load.Po
+include ./$(DEPDIR)/keyctl-Xabbrev.Po
+include ./$(DEPDIR)/keyctl-Xraw.Po
+include ./$(DEPDIR)/keyctl-Xverbose.Po
 include ./$(DEPDIR)/keyctl.Po
 include ./$(DEPDIR)/kill.Po
 include ./$(DEPDIR)/ksysent.Po
@@ -6162,13 +6797,22 @@
 include ./$(DEPDIR)/mlock.Po
 include ./$(DEPDIR)/mlock2.Po
 include ./$(DEPDIR)/mlockall.Po
+include ./$(DEPDIR)/mmap-Xabbrev.Po
+include ./$(DEPDIR)/mmap-Xraw.Po
+include ./$(DEPDIR)/mmap-Xverbose.Po
 include ./$(DEPDIR)/mmap.Po
 include ./$(DEPDIR)/mmap64-mmap64.Po
+include ./$(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+include ./$(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+include ./$(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
 include ./$(DEPDIR)/mmsg-silent.Po
 include ./$(DEPDIR)/mmsg.Po
 include ./$(DEPDIR)/mmsg_name-v.Po
 include ./$(DEPDIR)/mmsg_name.Po
 include ./$(DEPDIR)/modify_ldt.Po
+include ./$(DEPDIR)/mount-Xabbrev.Po
+include ./$(DEPDIR)/mount-Xraw.Po
+include ./$(DEPDIR)/mount-Xverbose.Po
 include ./$(DEPDIR)/mount.Po
 include ./$(DEPDIR)/move_pages.Po
 include ./$(DEPDIR)/mq.Po
@@ -6221,7 +6865,9 @@
 include ./$(DEPDIR)/nlattr_ifaddrlblmsg.Po
 include ./$(DEPDIR)/nlattr_ifaddrmsg.Po
 include ./$(DEPDIR)/nlattr_ifinfomsg.Po
+include ./$(DEPDIR)/nlattr_ifla_af_spec.Po
 include ./$(DEPDIR)/nlattr_ifla_brport.Po
+include ./$(DEPDIR)/nlattr_ifla_linkinfo.Po
 include ./$(DEPDIR)/nlattr_ifla_port.Po
 include ./$(DEPDIR)/nlattr_ifla_xdp.Po
 include ./$(DEPDIR)/nlattr_inet_diag_msg.Po
@@ -6246,6 +6892,9 @@
 include ./$(DEPDIR)/nsyscalls-d.Po
 include ./$(DEPDIR)/nsyscalls.Po
 include ./$(DEPDIR)/old_mmap-P.Po
+include ./$(DEPDIR)/old_mmap-Xabbrev.Po
+include ./$(DEPDIR)/old_mmap-Xraw.Po
+include ./$(DEPDIR)/old_mmap-Xverbose.Po
 include ./$(DEPDIR)/old_mmap-v-none.Po
 include ./$(DEPDIR)/old_mmap.Po
 include ./$(DEPDIR)/oldfstat.Po
@@ -6263,6 +6912,9 @@
 include ./$(DEPDIR)/perf_event_open.Po
 include ./$(DEPDIR)/perf_event_open_nonverbose.Po
 include ./$(DEPDIR)/perf_event_open_unabbrev.Po
+include ./$(DEPDIR)/personality-Xabbrev.Po
+include ./$(DEPDIR)/personality-Xraw.Po
+include ./$(DEPDIR)/personality-Xverbose.Po
 include ./$(DEPDIR)/personality.Po
 include ./$(DEPDIR)/pipe.Po
 include ./$(DEPDIR)/pipe2.Po
@@ -6282,6 +6934,7 @@
 include ./$(DEPDIR)/prctl-seccomp-filter-v.Po
 include ./$(DEPDIR)/prctl-seccomp-strict.Po
 include ./$(DEPDIR)/prctl-securebits.Po
+include ./$(DEPDIR)/prctl-spec-inject.Po
 include ./$(DEPDIR)/prctl-tid_address.Po
 include ./$(DEPDIR)/prctl-tsc.Po
 include ./$(DEPDIR)/pread64_pwrite64-pread64-pwrite64.Po
@@ -6402,7 +7055,13 @@
 include ./$(DEPDIR)/sigsuspend.Po
 include ./$(DEPDIR)/sleep.Po
 include ./$(DEPDIR)/so_linger.Po
+include ./$(DEPDIR)/so_peercred-Xabbrev.Po
+include ./$(DEPDIR)/so_peercred-Xraw.Po
+include ./$(DEPDIR)/so_peercred-Xverbose.Po
 include ./$(DEPDIR)/so_peercred.Po
+include ./$(DEPDIR)/sock_filter-v-Xabbrev.Po
+include ./$(DEPDIR)/sock_filter-v-Xraw.Po
+include ./$(DEPDIR)/sock_filter-v-Xverbose.Po
 include ./$(DEPDIR)/sock_filter-v.Po
 include ./$(DEPDIR)/socketcall.Po
 include ./$(DEPDIR)/sockopt-sol_netlink.Po
@@ -6929,6 +7588,48 @@
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
 #	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64-mmap64.obj `if test -f 'mmap64.c'; then $(CYGPATH_W) 'mmap64.c'; else $(CYGPATH_W) '$(srcdir)/mmap64.c'; fi`
 
+mmap64_Xabbrev-mmap64-Xabbrev.o: mmap64-Xabbrev.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.o -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+#	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+
+mmap64_Xabbrev-mmap64-Xabbrev.obj: mmap64-Xabbrev.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.obj -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+#	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+
+mmap64_Xraw-mmap64-Xraw.o: mmap64-Xraw.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.o -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+#	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+
+mmap64_Xraw-mmap64-Xraw.obj: mmap64-Xraw.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.obj -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+#	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+
+mmap64_Xverbose-mmap64-Xverbose.o: mmap64-Xverbose.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.o -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+#	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+
+mmap64_Xverbose-mmap64-Xverbose.obj: mmap64-Xverbose.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.obj -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+#	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+
 newfstatat-newfstatat.o: newfstatat.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newfstatat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT newfstatat-newfstatat.o -MD -MP -MF $(DEPDIR)/newfstatat-newfstatat.Tpo -c -o newfstatat-newfstatat.o `test -f 'newfstatat.c' || echo '$(srcdir)/'`newfstatat.c
 	$(AM_V_at)$(am__mv) $(DEPDIR)/newfstatat-newfstatat.Tpo $(DEPDIR)/newfstatat-newfstatat.Po
@@ -7480,6 +8181,9 @@
 $(srcdir)/aio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/aio_pgetevents.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/alarm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7489,6 +8193,18 @@
 $(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-obj_get_info_by_fd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog-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) $^ $@
 
@@ -7576,6 +8292,15 @@
 $(srcdir)/fanotify_mark.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/fanotify_mark-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/fchdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7768,6 +8493,9 @@
 $(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_inotify.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7786,6 +8514,12 @@
 $(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_perf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_ptp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7828,12 +8562,48 @@
 $(srcdir)/ipc_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_msg-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_sem.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_sem-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_shm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_shm-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7852,6 +8622,15 @@
 $(srcdir)/keyctl.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/keyctl-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kill.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7915,9 +8694,27 @@
 $(srcdir)/mlockall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmap64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap64-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7936,6 +8733,15 @@
 $(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mount-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/move_pages.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8062,9 +8868,15 @@
 $(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_ifla_af_spec.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_linkinfo.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) $^ $@
 
@@ -8137,6 +8949,15 @@
 $(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/old_mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8179,6 +9000,15 @@
 $(srcdir)/perf_event_open_unabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/personality-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/pipe2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8509,9 +9339,27 @@
 $(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_peercred-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xverbose.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)/sock_filter-v-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xverbose.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) $^ $@
 
@@ -8593,6 +9441,24 @@
 $(srcdir)/trace_lstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/trace_personality_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/trace_question.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests-m32/Makefile.am b/tests-m32/Makefile.am
index 0b24c36..534659b 100644
--- a/tests-m32/Makefile.am
+++ b/tests-m32/Makefile.am
@@ -93,6 +93,12 @@
 	attach-p-cmd-cmd \
 	attach-p-cmd-p \
 	block_reset_raise_run \
+	bpf-obj_get_info_by_fd \
+	bpf-obj_get_info_by_fd-v \
+	bpf-obj_get_info_by_fd-prog \
+	bpf-obj_get_info_by_fd-prog-v \
+	bpf-success \
+	bpf-success-v \
 	caps-abbrev \
 	check_sigblock \
 	check_sigign \
@@ -115,6 +121,7 @@
 	ioctl_loop-nv \
 	ioctl_loop-v \
 	ioctl_nsfs \
+	ioctl_perf-success \
 	ioctl_rtc-v \
 	is_linux_mips_n64 \
 	ksysent \
@@ -137,6 +144,7 @@
 	ppoll-v \
 	prctl-seccomp-filter-v \
 	prctl-seccomp-strict \
+	prctl-spec-inject \
 	print_maxfd \
 	qual_fault \
 	qual_inject-error-signal \
@@ -179,6 +187,9 @@
 localtime_LDADD = $(clock_LIBS) $(LDADD)
 lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xraw_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xverbose_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mq_LDADD = $(mq_LIBS) $(LDADD)
 newfstatat_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 pc_LDADD = $(dl_LIBS) $(LDADD)
@@ -202,20 +213,26 @@
 
 include gen_tests.am
 
-if USE_LIBUNWIND
-LIBUNWIND_TESTS = strace-k.test
+if ENABLE_STACKTRACE
+STACKTRACE_TESTS = strace-k.test
 if USE_DEMANGLE
-LIBUNWIND_TESTS += strace-k-demangle.test
+STACKTRACE_TESTS += strace-k-demangle.test
 endif
 else
-LIBUNWIND_TESTS =
+STACKTRACE_TESTS =
 endif
 
 DECODER_TESTS = \
+	bpf-success.test \
+	bpf-success-v.test \
 	brk.test \
 	btrfs-v.test \
 	btrfs-vw.test \
+	btrfs-vwX.test \
+	btrfs-vX.test \
 	btrfs-w.test \
+	btrfs-wX.test \
+	btrfs-X.test \
 	caps-abbrev.test \
 	caps.test \
 	eventfd.test \
@@ -225,6 +242,7 @@
 	futex.test \
 	getuid.test \
 	ioctl.test \
+	ioctl_perf-success.test \
 	ipc_msgbuf.test \
 	kern_features-fault.test \
 	llseek.test \
@@ -251,6 +269,7 @@
 	prctl-seccomp-filter-v.test \
 	prctl-seccomp-strict.test \
 	prctl-securebits.test \
+	prctl-spec-inject.test \
 	prctl-tid_address.test \
 	prctl-tsc.test \
 	qual_fault-exit_group.test \
@@ -299,9 +318,13 @@
 	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
+	qual_fault-syscall.test \
 	qual_inject-error-signal.test \
+	qual_inject-error-signal-syscall.test \
 	qual_inject-retval.test \
+	qual_inject-retval-syscall.test \
 	qual_inject-signal.test \
+	qual_inject-signal-syscall.test \
 	qual_inject-syntax.test \
 	qual_signal.test \
 	qual_syscall.test \
@@ -324,11 +347,11 @@
 	threads-execve.test \
 	# end of MISC_TESTS
 
-TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(LIBUNWIND_TESTS)
+TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(STACKTRACE_TESTS)
 
 XFAIL_TESTS_ =
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
@@ -352,6 +375,7 @@
 	count-f.expected \
 	eventfd.expected \
 	fadvise.h \
+	fcntl-common.c \
 	filter-unavailable.expected \
 	fstatat.c \
 	fstatx.c \
@@ -362,12 +386,12 @@
 	init.sh \
 	init_delete_module.h \
 	ipc.sh \
-	ipc_msgbuf.expected \
 	ksysent.sed \
 	lstatx.c \
 	match.awk \
 	net.expected \
 	netlink_sock_diag-v.sh \
+	nlattr_ifla.h \
 	pipe.expected \
 	print_user_desc.c \
 	process_vm_readv_writev.c \
@@ -375,6 +399,8 @@
 	qual_fault-exit_group.expected \
 	qual_inject-error-signal.expected \
 	qual_inject-signal.expected \
+	qualify_personality.sh \
+	qualify_personality_empty.in \
 	quotactl.h \
 	regex.in \
 	rt_sigaction.awk \
@@ -392,16 +418,23 @@
 	strace-E.expected \
 	strace-T.expected \
 	strace-ff.expected \
+	strace-k-demangle.expected \
 	strace-k-demangle.test \
+	strace-k.expected \
 	strace-k.test \
 	strace-r.expected \
 	strace.supp \
-	struct_flock.c \
 	sun_path.expected \
 	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
+	trace_personality_32.in \
+	trace_personality_64.in \
+	trace_personality_x32.in \
+	trace_personality_regex_32.in \
+	trace_personality_regex_64.in \
+	trace_personality_regex_x32.in \
 	trace_question.in \
 	trace_stat.in \
 	trace_stat_like.in \
diff --git a/tests-m32/Makefile.in b/tests-m32/Makefile.in
index efe84dd..55e41d6 100644
--- a/tests-m32/Makefile.in
+++ b/tests-m32/Makefile.in
@@ -139,7 +139,11 @@
 check_PROGRAMS = $(am__EXEEXT_1) _newselect-P$(EXEEXT) 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) \
+	block_reset_raise_run$(EXEEXT) bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-v$(EXEEXT) bpf-success$(EXEEXT) \
+	bpf-success-v$(EXEEXT) caps-abbrev$(EXEEXT) \
 	check_sigblock$(EXEEXT) check_sigign$(EXEEXT) \
 	clone_parent$(EXEEXT) clone_ptrace$(EXEEXT) count-f$(EXEEXT) \
 	delay$(EXEEXT) execve-v$(EXEEXT) execveat-v$(EXEEXT) \
@@ -147,7 +151,8 @@
 	getpid$(EXEEXT) getppid$(EXEEXT) gettid$(EXEEXT) \
 	inject-nf$(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) \
+	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) \
+	ioctl_perf-success$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
 	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
 	list_sigaction_signum$(EXEEXT) localtime$(EXEEXT) \
 	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
@@ -159,21 +164,22 @@
 	perf_event_open_nonverbose$(EXEEXT) \
 	perf_event_open_unabbrev$(EXEEXT) ppoll-v$(EXEEXT) \
 	prctl-seccomp-filter-v$(EXEEXT) prctl-seccomp-strict$(EXEEXT) \
-	print_maxfd$(EXEEXT) qual_fault$(EXEEXT) \
-	qual_inject-error-signal$(EXEEXT) qual_inject-retval$(EXEEXT) \
-	qual_inject-signal$(EXEEXT) qual_signal$(EXEEXT) \
-	quotactl-v$(EXEEXT) quotactl-xfs-v$(EXEEXT) \
-	redirect-fds$(EXEEXT) restart_syscall$(EXEEXT) \
-	run_expect_termsig$(EXEEXT) scm_rights$(EXEEXT) \
-	seccomp-filter-v$(EXEEXT) seccomp-strict$(EXEEXT) \
-	select-P$(EXEEXT) set_ptracer_any$(EXEEXT) \
-	set_sigblock$(EXEEXT) set_sigign$(EXEEXT) \
-	signal_receive$(EXEEXT) sleep$(EXEEXT) stack-fcall$(EXEEXT) \
-	stack-fcall-mangled$(EXEEXT) threads-execve$(EXEEXT) \
-	unblock_reset_raise$(EXEEXT) unix-pair-send-recv$(EXEEXT) \
+	prctl-spec-inject$(EXEEXT) print_maxfd$(EXEEXT) \
+	qual_fault$(EXEEXT) qual_inject-error-signal$(EXEEXT) \
+	qual_inject-retval$(EXEEXT) qual_inject-signal$(EXEEXT) \
+	qual_signal$(EXEEXT) quotactl-v$(EXEEXT) \
+	quotactl-xfs-v$(EXEEXT) redirect-fds$(EXEEXT) \
+	restart_syscall$(EXEEXT) run_expect_termsig$(EXEEXT) \
+	scm_rights$(EXEEXT) seccomp-filter-v$(EXEEXT) \
+	seccomp-strict$(EXEEXT) select-P$(EXEEXT) \
+	set_ptracer_any$(EXEEXT) set_sigblock$(EXEEXT) \
+	set_sigign$(EXEEXT) signal_receive$(EXEEXT) sleep$(EXEEXT) \
+	stack-fcall$(EXEEXT) stack-fcall-mangled$(EXEEXT) \
+	threads-execve$(EXEEXT) unblock_reset_raise$(EXEEXT) \
+	unix-pair-send-recv$(EXEEXT) \
 	unix-pair-sendto-recvfrom$(EXEEXT) vfork-f$(EXEEXT) \
 	wait4-v$(EXEEXT) waitid-v$(EXEEXT) zeroargc$(EXEEXT)
-@USE_DEMANGLE_TRUE@@USE_LIBUNWIND_TRUE@am__append_1 = strace-k-demangle.test
+@ENABLE_STACKTRACE_TRUE@@USE_DEMANGLE_TRUE@am__append_1 = strace-k-demangle.test
 TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(am__EXEEXT_2)
 subdir = tests-m32
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -181,7 +187,10 @@
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
 	$(top_srcdir)/m4/bpf_attr.m4 $(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/st_demangle.m4 $(top_srcdir)/m4/st_libdw.m4 \
+	$(top_srcdir)/m4/st_libunwind.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
+	$(top_srcdir)/m4/st_stacktrace.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) \
@@ -223,18 +232,25 @@
 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) \
-	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) dev-yy$(EXEEXT) dup$(EXEEXT) \
-	dup2$(EXEEXT) dup3$(EXEEXT) epoll_create$(EXEEXT) \
-	epoll_create1$(EXEEXT) epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) \
-	epoll_wait$(EXEEXT) erestartsys$(EXEEXT) eventfd$(EXEEXT) \
-	execve$(EXEEXT) execveat$(EXEEXT) faccessat$(EXEEXT) \
-	fadvise64$(EXEEXT) fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
-	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) fchdir$(EXEEXT) \
+	adjtimex$(EXEEXT) aio$(EXEEXT) aio_pgetevents$(EXEEXT) \
+	alarm$(EXEEXT) bpf$(EXEEXT) bpf-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-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) \
+	dev-yy$(EXEEXT) dup$(EXEEXT) dup2$(EXEEXT) dup3$(EXEEXT) \
+	epoll_create$(EXEEXT) epoll_create1$(EXEEXT) \
+	epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) epoll_wait$(EXEEXT) \
+	erestartsys$(EXEEXT) eventfd$(EXEEXT) execve$(EXEEXT) \
+	execveat$(EXEEXT) faccessat$(EXEEXT) fadvise64$(EXEEXT) \
+	fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
+	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) \
+	fanotify_mark-Xabbrev$(EXEEXT) fanotify_mark-Xraw$(EXEEXT) \
+	fanotify_mark-Xverbose$(EXEEXT) fchdir$(EXEEXT) \
 	fchmod$(EXEEXT) fchmodat$(EXEEXT) fchown$(EXEEXT) \
 	fchown32$(EXEEXT) fchownat$(EXEEXT) fcntl$(EXEEXT) \
 	fcntl64$(EXEEXT) fdatasync$(EXEEXT) fflush$(EXEEXT) \
@@ -255,49 +271,62 @@
 	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_kvm_run$(EXEEXT) \
-	ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) \
+	ioctl_evdev$(EXEEXT) ioctl_inotify$(EXEEXT) \
+	ioctl_kvm_run$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
+	ioctl_rtc$(EXEEXT) ioctl_perf$(EXEEXT) ioctl_ptp$(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) kcmp-y$(EXEEXT) \
-	kern_features$(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) \
+	ipc_msg$(EXEEXT) ipc_msg-Xabbrev$(EXEEXT) \
+	ipc_msg-Xraw$(EXEEXT) ipc_msg-Xverbose$(EXEEXT) \
+	ipc_msgbuf$(EXEEXT) ipc_msgbuf-Xabbrev$(EXEEXT) \
+	ipc_msgbuf-Xraw$(EXEEXT) ipc_msgbuf-Xverbose$(EXEEXT) \
+	ipc_sem$(EXEEXT) ipc_sem-Xabbrev$(EXEEXT) \
+	ipc_sem-Xraw$(EXEEXT) ipc_sem-Xverbose$(EXEEXT) \
+	ipc_shm$(EXEEXT) ipc_shm-Xabbrev$(EXEEXT) \
+	ipc_shm-Xraw$(EXEEXT) ipc_shm-Xverbose$(EXEEXT) kcmp$(EXEEXT) \
+	kcmp-y$(EXEEXT) kern_features$(EXEEXT) \
+	kexec_file_load$(EXEEXT) kexec_load$(EXEEXT) keyctl$(EXEEXT) \
+	keyctl-Xabbrev$(EXEEXT) keyctl-Xraw$(EXEEXT) \
+	keyctl-Xverbose$(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) \
+	mmap-Xabbrev$(EXEEXT) mmap-Xraw$(EXEEXT) \
+	mmap-Xverbose$(EXEEXT) mmap64$(EXEEXT) mmap64-Xabbrev$(EXEEXT) \
+	mmap64-Xraw$(EXEEXT) mmap64-Xverbose$(EXEEXT) mmsg$(EXEEXT) \
 	mmsg_name$(EXEEXT) modify_ldt$(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-inet6$(EXEEXT) net-yy-netlink$(EXEEXT) \
-	net-yy-unix$(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) \
-	nfnetlink_acct$(EXEEXT) nfnetlink_cthelper$(EXEEXT) \
-	nfnetlink_ctnetlink$(EXEEXT) nfnetlink_ctnetlink_exp$(EXEEXT) \
-	nfnetlink_cttimeout$(EXEEXT) nfnetlink_nft_compat$(EXEEXT) \
-	nfnetlink_nftables$(EXEEXT) nfnetlink_ipset$(EXEEXT) \
-	nfnetlink_osf$(EXEEXT) nfnetlink_queue$(EXEEXT) \
-	nfnetlink_ulog$(EXEEXT) nlattr$(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) \
+	mount-Xabbrev$(EXEEXT) mount-Xraw$(EXEEXT) \
+	mount-Xverbose$(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-inet6$(EXEEXT) \
+	net-yy-netlink$(EXEEXT) net-yy-unix$(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) nfnetlink_acct$(EXEEXT) \
+	nfnetlink_cthelper$(EXEEXT) nfnetlink_ctnetlink$(EXEEXT) \
+	nfnetlink_ctnetlink_exp$(EXEEXT) nfnetlink_cttimeout$(EXEEXT) \
+	nfnetlink_nft_compat$(EXEEXT) nfnetlink_nftables$(EXEEXT) \
+	nfnetlink_ipset$(EXEEXT) nfnetlink_osf$(EXEEXT) \
+	nfnetlink_queue$(EXEEXT) nfnetlink_ulog$(EXEEXT) \
+	nlattr$(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_af_spec$(EXEEXT) nlattr_ifla_brport$(EXEEXT) \
+	nlattr_ifla_linkinfo$(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_mdba_mdb_entry$(EXEEXT) \
@@ -309,11 +338,14 @@
 	nlattr_tc_stats$(EXEEXT) nlattr_tca_stab$(EXEEXT) \
 	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
-	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) oldfstat$(EXEEXT) \
-	oldlstat$(EXEEXT) oldselect$(EXEEXT) oldselect-efault$(EXEEXT) \
-	oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
-	osf_utimes$(EXEEXT) pause$(EXEEXT) perf_event_open$(EXEEXT) \
-	personality$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
+	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) \
+	old_mmap-Xabbrev$(EXEEXT) old_mmap-Xraw$(EXEEXT) \
+	old_mmap-Xverbose$(EXEEXT) oldfstat$(EXEEXT) oldlstat$(EXEEXT) \
+	oldselect$(EXEEXT) oldselect-efault$(EXEEXT) oldstat$(EXEEXT) \
+	open$(EXEEXT) openat$(EXEEXT) osf_utimes$(EXEEXT) \
+	pause$(EXEEXT) perf_event_open$(EXEEXT) personality$(EXEEXT) \
+	personality-Xabbrev$(EXEEXT) personality-Xraw$(EXEEXT) \
+	personality-Xverbose$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
 	pkey_alloc$(EXEEXT) pkey_free$(EXEEXT) pkey_mprotect$(EXEEXT) \
 	poll$(EXEEXT) poll-P$(EXEEXT) ppoll$(EXEEXT) ppoll-P$(EXEEXT) \
 	prctl-arg2-intptr$(EXEEXT) prctl-dumpable$(EXEEXT) \
@@ -361,7 +393,10 @@
 	sigaltstack$(EXEEXT) siginfo$(EXEEXT) signal$(EXEEXT) \
 	signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
 	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
-	so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
+	so_peercred$(EXEEXT) so_peercred-Xabbrev$(EXEEXT) \
+	so_peercred-Xraw$(EXEEXT) so_peercred-Xverbose$(EXEEXT) \
+	sock_filter-v$(EXEEXT) sock_filter-v-Xabbrev$(EXEEXT) \
+	sock_filter-v-Xraw$(EXEEXT) sock_filter-v-Xverbose$(EXEEXT) \
 	socketcall$(EXEEXT) sockopt-sol_netlink$(EXEEXT) \
 	splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
 	statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
@@ -418,6 +453,10 @@
 aio_OBJECTS = aio.$(OBJEXT)
 aio_LDADD = $(LDADD)
 aio_DEPENDENCIES = libtests.a
+aio_pgetevents_SOURCES = aio_pgetevents.c
+aio_pgetevents_OBJECTS = aio_pgetevents.$(OBJEXT)
+aio_pgetevents_LDADD = $(LDADD)
+aio_pgetevents_DEPENDENCIES = libtests.a
 alarm_SOURCES = alarm.c
 alarm_OBJECTS = alarm.$(OBJEXT)
 alarm_LDADD = $(LDADD)
@@ -449,6 +488,33 @@
 bpf_OBJECTS = bpf.$(OBJEXT)
 bpf_LDADD = $(LDADD)
 bpf_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_SOURCES = bpf-obj_get_info_by_fd.c
+bpf_obj_get_info_by_fd_OBJECTS = bpf-obj_get_info_by_fd.$(OBJEXT)
+bpf_obj_get_info_by_fd_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_SOURCES = bpf-obj_get_info_by_fd-prog.c
+bpf_obj_get_info_by_fd_prog_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_v_SOURCES =  \
+	bpf-obj_get_info_by_fd-prog-v.c
+bpf_obj_get_info_by_fd_prog_v_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_v_SOURCES = bpf-obj_get_info_by_fd-v.c
+bpf_obj_get_info_by_fd_v_OBJECTS = bpf-obj_get_info_by_fd-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_v_DEPENDENCIES = libtests.a
+bpf_success_SOURCES = bpf-success.c
+bpf_success_OBJECTS = bpf-success.$(OBJEXT)
+bpf_success_LDADD = $(LDADD)
+bpf_success_DEPENDENCIES = libtests.a
+bpf_success_v_SOURCES = bpf-success-v.c
+bpf_success_v_OBJECTS = bpf-success-v.$(OBJEXT)
+bpf_success_v_LDADD = $(LDADD)
+bpf_success_v_DEPENDENCIES = libtests.a
 bpf_v_SOURCES = bpf-v.c
 bpf_v_OBJECTS = bpf-v.$(OBJEXT)
 bpf_v_LDADD = $(LDADD)
@@ -616,6 +682,18 @@
 fanotify_mark_OBJECTS = fanotify_mark.$(OBJEXT)
 fanotify_mark_LDADD = $(LDADD)
 fanotify_mark_DEPENDENCIES = libtests.a
+fanotify_mark_Xabbrev_SOURCES = fanotify_mark-Xabbrev.c
+fanotify_mark_Xabbrev_OBJECTS = fanotify_mark-Xabbrev.$(OBJEXT)
+fanotify_mark_Xabbrev_LDADD = $(LDADD)
+fanotify_mark_Xabbrev_DEPENDENCIES = libtests.a
+fanotify_mark_Xraw_SOURCES = fanotify_mark-Xraw.c
+fanotify_mark_Xraw_OBJECTS = fanotify_mark-Xraw.$(OBJEXT)
+fanotify_mark_Xraw_LDADD = $(LDADD)
+fanotify_mark_Xraw_DEPENDENCIES = libtests.a
+fanotify_mark_Xverbose_SOURCES = fanotify_mark-Xverbose.c
+fanotify_mark_Xverbose_OBJECTS = fanotify_mark-Xverbose.$(OBJEXT)
+fanotify_mark_Xverbose_LDADD = $(LDADD)
+fanotify_mark_Xverbose_DEPENDENCIES = libtests.a
 fchdir_SOURCES = fchdir.c
 fchdir_OBJECTS = fchdir.$(OBJEXT)
 fchdir_LDADD = $(LDADD)
@@ -895,6 +973,10 @@
 ioctl_evdev_v_OBJECTS = ioctl_evdev-v.$(OBJEXT)
 ioctl_evdev_v_LDADD = $(LDADD)
 ioctl_evdev_v_DEPENDENCIES = libtests.a
+ioctl_inotify_SOURCES = ioctl_inotify.c
+ioctl_inotify_OBJECTS = ioctl_inotify.$(OBJEXT)
+ioctl_inotify_LDADD = $(LDADD)
+ioctl_inotify_DEPENDENCIES = libtests.a
 ioctl_kvm_run_SOURCES = ioctl_kvm_run.c
 ioctl_kvm_run_OBJECTS = ioctl_kvm_run.$(OBJEXT)
 ioctl_kvm_run_LDADD = $(LDADD)
@@ -919,6 +1001,18 @@
 ioctl_nsfs_OBJECTS = ioctl_nsfs.$(OBJEXT)
 ioctl_nsfs_LDADD = $(LDADD)
 ioctl_nsfs_DEPENDENCIES = libtests.a
+ioctl_perf_SOURCES = ioctl_perf.c
+ioctl_perf_OBJECTS = ioctl_perf.$(OBJEXT)
+ioctl_perf_LDADD = $(LDADD)
+ioctl_perf_DEPENDENCIES = libtests.a
+ioctl_perf_success_SOURCES = ioctl_perf-success.c
+ioctl_perf_success_OBJECTS = ioctl_perf-success.$(OBJEXT)
+ioctl_perf_success_LDADD = $(LDADD)
+ioctl_perf_success_DEPENDENCIES = libtests.a
+ioctl_ptp_SOURCES = ioctl_ptp.c
+ioctl_ptp_OBJECTS = ioctl_ptp.$(OBJEXT)
+ioctl_ptp_LDADD = $(LDADD)
+ioctl_ptp_DEPENDENCIES = libtests.a
 ioctl_rtc_SOURCES = ioctl_rtc.c
 ioctl_rtc_OBJECTS = ioctl_rtc.$(OBJEXT)
 ioctl_rtc_LDADD = $(LDADD)
@@ -975,18 +1069,66 @@
 ipc_msg_OBJECTS = ipc_msg.$(OBJEXT)
 ipc_msg_LDADD = $(LDADD)
 ipc_msg_DEPENDENCIES = libtests.a
+ipc_msg_Xabbrev_SOURCES = ipc_msg-Xabbrev.c
+ipc_msg_Xabbrev_OBJECTS = ipc_msg-Xabbrev.$(OBJEXT)
+ipc_msg_Xabbrev_LDADD = $(LDADD)
+ipc_msg_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msg_Xraw_SOURCES = ipc_msg-Xraw.c
+ipc_msg_Xraw_OBJECTS = ipc_msg-Xraw.$(OBJEXT)
+ipc_msg_Xraw_LDADD = $(LDADD)
+ipc_msg_Xraw_DEPENDENCIES = libtests.a
+ipc_msg_Xverbose_SOURCES = ipc_msg-Xverbose.c
+ipc_msg_Xverbose_OBJECTS = ipc_msg-Xverbose.$(OBJEXT)
+ipc_msg_Xverbose_LDADD = $(LDADD)
+ipc_msg_Xverbose_DEPENDENCIES = libtests.a
 ipc_msgbuf_SOURCES = ipc_msgbuf.c
 ipc_msgbuf_OBJECTS = ipc_msgbuf.$(OBJEXT)
 ipc_msgbuf_LDADD = $(LDADD)
 ipc_msgbuf_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xabbrev_SOURCES = ipc_msgbuf-Xabbrev.c
+ipc_msgbuf_Xabbrev_OBJECTS = ipc_msgbuf-Xabbrev.$(OBJEXT)
+ipc_msgbuf_Xabbrev_LDADD = $(LDADD)
+ipc_msgbuf_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xraw_SOURCES = ipc_msgbuf-Xraw.c
+ipc_msgbuf_Xraw_OBJECTS = ipc_msgbuf-Xraw.$(OBJEXT)
+ipc_msgbuf_Xraw_LDADD = $(LDADD)
+ipc_msgbuf_Xraw_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xverbose_SOURCES = ipc_msgbuf-Xverbose.c
+ipc_msgbuf_Xverbose_OBJECTS = ipc_msgbuf-Xverbose.$(OBJEXT)
+ipc_msgbuf_Xverbose_LDADD = $(LDADD)
+ipc_msgbuf_Xverbose_DEPENDENCIES = libtests.a
 ipc_sem_SOURCES = ipc_sem.c
 ipc_sem_OBJECTS = ipc_sem.$(OBJEXT)
 ipc_sem_LDADD = $(LDADD)
 ipc_sem_DEPENDENCIES = libtests.a
+ipc_sem_Xabbrev_SOURCES = ipc_sem-Xabbrev.c
+ipc_sem_Xabbrev_OBJECTS = ipc_sem-Xabbrev.$(OBJEXT)
+ipc_sem_Xabbrev_LDADD = $(LDADD)
+ipc_sem_Xabbrev_DEPENDENCIES = libtests.a
+ipc_sem_Xraw_SOURCES = ipc_sem-Xraw.c
+ipc_sem_Xraw_OBJECTS = ipc_sem-Xraw.$(OBJEXT)
+ipc_sem_Xraw_LDADD = $(LDADD)
+ipc_sem_Xraw_DEPENDENCIES = libtests.a
+ipc_sem_Xverbose_SOURCES = ipc_sem-Xverbose.c
+ipc_sem_Xverbose_OBJECTS = ipc_sem-Xverbose.$(OBJEXT)
+ipc_sem_Xverbose_LDADD = $(LDADD)
+ipc_sem_Xverbose_DEPENDENCIES = libtests.a
 ipc_shm_SOURCES = ipc_shm.c
 ipc_shm_OBJECTS = ipc_shm.$(OBJEXT)
 ipc_shm_LDADD = $(LDADD)
 ipc_shm_DEPENDENCIES = libtests.a
+ipc_shm_Xabbrev_SOURCES = ipc_shm-Xabbrev.c
+ipc_shm_Xabbrev_OBJECTS = ipc_shm-Xabbrev.$(OBJEXT)
+ipc_shm_Xabbrev_LDADD = $(LDADD)
+ipc_shm_Xabbrev_DEPENDENCIES = libtests.a
+ipc_shm_Xraw_SOURCES = ipc_shm-Xraw.c
+ipc_shm_Xraw_OBJECTS = ipc_shm-Xraw.$(OBJEXT)
+ipc_shm_Xraw_LDADD = $(LDADD)
+ipc_shm_Xraw_DEPENDENCIES = libtests.a
+ipc_shm_Xverbose_SOURCES = ipc_shm-Xverbose.c
+ipc_shm_Xverbose_OBJECTS = ipc_shm-Xverbose.$(OBJEXT)
+ipc_shm_Xverbose_LDADD = $(LDADD)
+ipc_shm_Xverbose_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)
@@ -1015,6 +1157,18 @@
 keyctl_OBJECTS = keyctl.$(OBJEXT)
 keyctl_LDADD = $(LDADD)
 keyctl_DEPENDENCIES = libtests.a
+keyctl_Xabbrev_SOURCES = keyctl-Xabbrev.c
+keyctl_Xabbrev_OBJECTS = keyctl-Xabbrev.$(OBJEXT)
+keyctl_Xabbrev_LDADD = $(LDADD)
+keyctl_Xabbrev_DEPENDENCIES = libtests.a
+keyctl_Xraw_SOURCES = keyctl-Xraw.c
+keyctl_Xraw_OBJECTS = keyctl-Xraw.$(OBJEXT)
+keyctl_Xraw_LDADD = $(LDADD)
+keyctl_Xraw_DEPENDENCIES = libtests.a
+keyctl_Xverbose_SOURCES = keyctl-Xverbose.c
+keyctl_Xverbose_OBJECTS = keyctl-Xverbose.$(OBJEXT)
+keyctl_Xverbose_LDADD = $(LDADD)
+keyctl_Xverbose_DEPENDENCIES = libtests.a
 kill_SOURCES = kill.c
 kill_OBJECTS = kill.$(OBJEXT)
 kill_LDADD = $(LDADD)
@@ -1122,10 +1276,34 @@
 mmap_OBJECTS = mmap.$(OBJEXT)
 mmap_LDADD = $(LDADD)
 mmap_DEPENDENCIES = libtests.a
+mmap_Xabbrev_SOURCES = mmap-Xabbrev.c
+mmap_Xabbrev_OBJECTS = mmap-Xabbrev.$(OBJEXT)
+mmap_Xabbrev_LDADD = $(LDADD)
+mmap_Xabbrev_DEPENDENCIES = libtests.a
+mmap_Xraw_SOURCES = mmap-Xraw.c
+mmap_Xraw_OBJECTS = mmap-Xraw.$(OBJEXT)
+mmap_Xraw_LDADD = $(LDADD)
+mmap_Xraw_DEPENDENCIES = libtests.a
+mmap_Xverbose_SOURCES = mmap-Xverbose.c
+mmap_Xverbose_OBJECTS = mmap-Xverbose.$(OBJEXT)
+mmap_Xverbose_LDADD = $(LDADD)
+mmap_Xverbose_DEPENDENCIES = libtests.a
 mmap64_SOURCES = mmap64.c
 mmap64_OBJECTS = mmap64-mmap64.$(OBJEXT)
 mmap64_LDADD = $(LDADD)
 mmap64_DEPENDENCIES = libtests.a
+mmap64_Xabbrev_SOURCES = mmap64-Xabbrev.c
+mmap64_Xabbrev_OBJECTS = mmap64_Xabbrev-mmap64-Xabbrev.$(OBJEXT)
+mmap64_Xabbrev_LDADD = $(LDADD)
+mmap64_Xabbrev_DEPENDENCIES = libtests.a
+mmap64_Xraw_SOURCES = mmap64-Xraw.c
+mmap64_Xraw_OBJECTS = mmap64_Xraw-mmap64-Xraw.$(OBJEXT)
+mmap64_Xraw_LDADD = $(LDADD)
+mmap64_Xraw_DEPENDENCIES = libtests.a
+mmap64_Xverbose_SOURCES = mmap64-Xverbose.c
+mmap64_Xverbose_OBJECTS = mmap64_Xverbose-mmap64-Xverbose.$(OBJEXT)
+mmap64_Xverbose_LDADD = $(LDADD)
+mmap64_Xverbose_DEPENDENCIES = libtests.a
 mmsg_SOURCES = mmsg.c
 mmsg_OBJECTS = mmsg.$(OBJEXT)
 mmsg_LDADD = $(LDADD)
@@ -1150,6 +1328,18 @@
 mount_OBJECTS = mount.$(OBJEXT)
 mount_LDADD = $(LDADD)
 mount_DEPENDENCIES = libtests.a
+mount_Xabbrev_SOURCES = mount-Xabbrev.c
+mount_Xabbrev_OBJECTS = mount-Xabbrev.$(OBJEXT)
+mount_Xabbrev_LDADD = $(LDADD)
+mount_Xabbrev_DEPENDENCIES = libtests.a
+mount_Xraw_SOURCES = mount-Xraw.c
+mount_Xraw_OBJECTS = mount-Xraw.$(OBJEXT)
+mount_Xraw_LDADD = $(LDADD)
+mount_Xraw_DEPENDENCIES = libtests.a
+mount_Xverbose_SOURCES = mount-Xverbose.c
+mount_Xverbose_OBJECTS = mount-Xverbose.$(OBJEXT)
+mount_Xverbose_LDADD = $(LDADD)
+mount_Xverbose_DEPENDENCIES = libtests.a
 move_pages_SOURCES = move_pages.c
 move_pages_OBJECTS = move_pages.$(OBJEXT)
 move_pages_LDADD = $(LDADD)
@@ -1353,10 +1543,18 @@
 nlattr_ifinfomsg_OBJECTS = nlattr_ifinfomsg.$(OBJEXT)
 nlattr_ifinfomsg_LDADD = $(LDADD)
 nlattr_ifinfomsg_DEPENDENCIES = libtests.a
+nlattr_ifla_af_spec_SOURCES = nlattr_ifla_af_spec.c
+nlattr_ifla_af_spec_OBJECTS = nlattr_ifla_af_spec.$(OBJEXT)
+nlattr_ifla_af_spec_LDADD = $(LDADD)
+nlattr_ifla_af_spec_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_linkinfo_SOURCES = nlattr_ifla_linkinfo.c
+nlattr_ifla_linkinfo_OBJECTS = nlattr_ifla_linkinfo.$(OBJEXT)
+nlattr_ifla_linkinfo_LDADD = $(LDADD)
+nlattr_ifla_linkinfo_DEPENDENCIES = libtests.a
 nlattr_ifla_port_SOURCES = nlattr_ifla_port.c
 nlattr_ifla_port_OBJECTS = nlattr_ifla_port.$(OBJEXT)
 nlattr_ifla_port_LDADD = $(LDADD)
@@ -1458,6 +1656,18 @@
 old_mmap_P_OBJECTS = old_mmap-P.$(OBJEXT)
 old_mmap_P_LDADD = $(LDADD)
 old_mmap_P_DEPENDENCIES = libtests.a
+old_mmap_Xabbrev_SOURCES = old_mmap-Xabbrev.c
+old_mmap_Xabbrev_OBJECTS = old_mmap-Xabbrev.$(OBJEXT)
+old_mmap_Xabbrev_LDADD = $(LDADD)
+old_mmap_Xabbrev_DEPENDENCIES = libtests.a
+old_mmap_Xraw_SOURCES = old_mmap-Xraw.c
+old_mmap_Xraw_OBJECTS = old_mmap-Xraw.$(OBJEXT)
+old_mmap_Xraw_LDADD = $(LDADD)
+old_mmap_Xraw_DEPENDENCIES = libtests.a
+old_mmap_Xverbose_SOURCES = old_mmap-Xverbose.c
+old_mmap_Xverbose_OBJECTS = old_mmap-Xverbose.$(OBJEXT)
+old_mmap_Xverbose_LDADD = $(LDADD)
+old_mmap_Xverbose_DEPENDENCIES = libtests.a
 old_mmap_v_none_SOURCES = old_mmap-v-none.c
 old_mmap_v_none_OBJECTS = old_mmap-v-none.$(OBJEXT)
 old_mmap_v_none_LDADD = $(LDADD)
@@ -1526,6 +1736,18 @@
 personality_OBJECTS = personality.$(OBJEXT)
 personality_LDADD = $(LDADD)
 personality_DEPENDENCIES = libtests.a
+personality_Xabbrev_SOURCES = personality-Xabbrev.c
+personality_Xabbrev_OBJECTS = personality-Xabbrev.$(OBJEXT)
+personality_Xabbrev_LDADD = $(LDADD)
+personality_Xabbrev_DEPENDENCIES = libtests.a
+personality_Xraw_SOURCES = personality-Xraw.c
+personality_Xraw_OBJECTS = personality-Xraw.$(OBJEXT)
+personality_Xraw_LDADD = $(LDADD)
+personality_Xraw_DEPENDENCIES = libtests.a
+personality_Xverbose_SOURCES = personality-Xverbose.c
+personality_Xverbose_OBJECTS = personality-Xverbose.$(OBJEXT)
+personality_Xverbose_LDADD = $(LDADD)
+personality_Xverbose_DEPENDENCIES = libtests.a
 pipe_SOURCES = pipe.c
 pipe_OBJECTS = pipe.$(OBJEXT)
 pipe_LDADD = $(LDADD)
@@ -1598,6 +1820,10 @@
 prctl_securebits_OBJECTS = prctl-securebits.$(OBJEXT)
 prctl_securebits_LDADD = $(LDADD)
 prctl_securebits_DEPENDENCIES = libtests.a
+prctl_spec_inject_SOURCES = prctl-spec-inject.c
+prctl_spec_inject_OBJECTS = prctl-spec-inject.$(OBJEXT)
+prctl_spec_inject_LDADD = $(LDADD)
+prctl_spec_inject_DEPENDENCIES = libtests.a
 prctl_tid_address_SOURCES = prctl-tid_address.c
 prctl_tid_address_OBJECTS = prctl-tid_address.$(OBJEXT)
 prctl_tid_address_LDADD = $(LDADD)
@@ -2088,10 +2314,34 @@
 so_peercred_OBJECTS = so_peercred.$(OBJEXT)
 so_peercred_LDADD = $(LDADD)
 so_peercred_DEPENDENCIES = libtests.a
+so_peercred_Xabbrev_SOURCES = so_peercred-Xabbrev.c
+so_peercred_Xabbrev_OBJECTS = so_peercred-Xabbrev.$(OBJEXT)
+so_peercred_Xabbrev_LDADD = $(LDADD)
+so_peercred_Xabbrev_DEPENDENCIES = libtests.a
+so_peercred_Xraw_SOURCES = so_peercred-Xraw.c
+so_peercred_Xraw_OBJECTS = so_peercred-Xraw.$(OBJEXT)
+so_peercred_Xraw_LDADD = $(LDADD)
+so_peercred_Xraw_DEPENDENCIES = libtests.a
+so_peercred_Xverbose_SOURCES = so_peercred-Xverbose.c
+so_peercred_Xverbose_OBJECTS = so_peercred-Xverbose.$(OBJEXT)
+so_peercred_Xverbose_LDADD = $(LDADD)
+so_peercred_Xverbose_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
+sock_filter_v_Xabbrev_SOURCES = sock_filter-v-Xabbrev.c
+sock_filter_v_Xabbrev_OBJECTS = sock_filter-v-Xabbrev.$(OBJEXT)
+sock_filter_v_Xabbrev_LDADD = $(LDADD)
+sock_filter_v_Xabbrev_DEPENDENCIES = libtests.a
+sock_filter_v_Xraw_SOURCES = sock_filter-v-Xraw.c
+sock_filter_v_Xraw_OBJECTS = sock_filter-v-Xraw.$(OBJEXT)
+sock_filter_v_Xraw_LDADD = $(LDADD)
+sock_filter_v_Xraw_DEPENDENCIES = libtests.a
+sock_filter_v_Xverbose_SOURCES = sock_filter-v-Xverbose.c
+sock_filter_v_Xverbose_OBJECTS = sock_filter-v-Xverbose.$(OBJEXT)
+sock_filter_v_Xverbose_LDADD = $(LDADD)
+sock_filter_v_Xverbose_DEPENDENCIES = libtests.a
 socketcall_SOURCES = socketcall.c
 socketcall_OBJECTS = socketcall.$(OBJEXT)
 socketcall_LDADD = $(LDADD)
@@ -2402,45 +2652,58 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c \
-	btrfs.c caps.c caps-abbrev.c check_sigblock.c check_sigign.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 delay.c \
-	delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	accept4.c access.c acct.c add_key.c adjtimex.c aio.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2456,59 +2719,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2526,44 +2794,57 @@
 	xettimeofday.c zeroargc.c
 DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c \
-	check_sigblock.c check_sigign.c chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	fallocate.c fanotify_init.c fanotify_mark.c \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2579,59 +2860,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2859,7 +3145,7 @@
   bases=`echo $$bases`
 RECHECK_LOGS = $(TEST_LOGS)
 AM_RECURSIVE_TARGETS = check recheck
-@USE_LIBUNWIND_TRUE@am__EXEEXT_2 = strace-k.test $(am__append_1)
+@ENABLE_STACKTRACE_TRUE@am__EXEEXT_2 = strace-k.test $(am__append_1)
 TEST_SUITE_LOG = test-suite.log
 TEST_EXTENSIONS = @EXEEXT@ .test
 am__test_logs1 = $(TESTS:=.log)
@@ -3001,6 +3287,10 @@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
+libdw_CFLAGS = @libdw_CFLAGS@
+libdw_CPPFLAGS = @libdw_CPPFLAGS@
+libdw_LDFLAGS = @libdw_LDFLAGS@
+libdw_LIBS = @libdw_LIBS@
 libexecdir = @libexecdir@
 libiberty_CPPFLAGS = @libiberty_CPPFLAGS@
 libiberty_LDFLAGS = @libiberty_LDFLAGS@
@@ -3095,9 +3385,14 @@
   add_key \
   adjtimex \
   aio \
+  aio_pgetevents \
   alarm \
   bpf \
   bpf-v \
+  bpf-obj_get_info_by_fd \
+  bpf-obj_get_info_by_fd-v \
+  bpf-obj_get_info_by_fd-prog \
+  bpf-obj_get_info_by_fd-prog-v \
   brk \
   btrfs \
   caps \
@@ -3130,6 +3425,9 @@
   fallocate \
   fanotify_init \
   fanotify_mark \
+  fanotify_mark-Xabbrev \
+  fanotify_mark-Xraw \
+  fanotify_mark-Xverbose \
   fchdir \
   fchmod \
   fchmodat \
@@ -3192,10 +3490,13 @@
   ioctl_block \
   ioctl_dm \
   ioctl_evdev \
+  ioctl_inotify \
   ioctl_kvm_run \
   ioctl_loop \
   ioctl_mtd \
   ioctl_rtc \
+  ioctl_perf \
+  ioctl_ptp \
   ioctl_scsi \
   ioctl_sg_io_v3 \
   ioctl_sg_io_v4 \
@@ -3208,15 +3509,30 @@
   ip_mreq \
   ipc \
   ipc_msg \
+  ipc_msg-Xabbrev \
+  ipc_msg-Xraw \
+  ipc_msg-Xverbose \
   ipc_msgbuf \
+  ipc_msgbuf-Xabbrev \
+  ipc_msgbuf-Xraw \
+  ipc_msgbuf-Xverbose \
   ipc_sem \
+  ipc_sem-Xabbrev \
+  ipc_sem-Xraw \
+  ipc_sem-Xverbose \
   ipc_shm \
+  ipc_shm-Xabbrev \
+  ipc_shm-Xraw \
+  ipc_shm-Xverbose \
   kcmp \
   kcmp-y \
   kern_features \
   kexec_file_load \
   kexec_load \
   keyctl \
+  keyctl-Xabbrev \
+  keyctl-Xraw \
+  keyctl-Xverbose \
   kill \
   lchown \
   lchown32 \
@@ -3241,11 +3557,20 @@
   mlock2 \
   mlockall \
   mmap \
+  mmap-Xabbrev \
+  mmap-Xraw \
+  mmap-Xverbose \
   mmap64 \
+  mmap64-Xabbrev \
+  mmap64-Xraw \
+  mmap64-Xverbose \
   mmsg \
   mmsg_name \
   modify_ldt \
   mount \
+  mount-Xabbrev \
+  mount-Xraw \
+  mount-Xverbose \
   move_pages \
   mq \
   mq_sendrecv \
@@ -3292,7 +3617,9 @@
   nlattr_ifaddrlblmsg \
   nlattr_ifaddrmsg \
   nlattr_ifinfomsg \
+  nlattr_ifla_af_spec \
   nlattr_ifla_brport \
+  nlattr_ifla_linkinfo \
   nlattr_ifla_port \
   nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
@@ -3317,6 +3644,9 @@
   old_mmap \
   old_mmap-P \
   old_mmap-v-none \
+  old_mmap-Xabbrev \
+  old_mmap-Xraw \
+  old_mmap-Xverbose \
   oldfstat \
   oldlstat \
   oldselect \
@@ -3328,6 +3658,9 @@
   pause \
   perf_event_open \
   personality \
+  personality-Xabbrev \
+  personality-Xraw \
+  personality-Xverbose \
   pipe \
   pipe2 \
   pkey_alloc \
@@ -3444,7 +3777,13 @@
   sigsuspend \
   so_linger \
   so_peercred \
+  so_peercred-Xabbrev \
+  so_peercred-Xraw \
+  so_peercred-Xverbose \
   sock_filter-v \
+  sock_filter-v-Xabbrev \
+  sock_filter-v-Xraw \
+  sock_filter-v-Xverbose \
   socketcall \
   sockopt-sol_netlink \
   splice \
@@ -3515,6 +3854,9 @@
 localtime_LDADD = $(clock_LIBS) $(LDADD)
 lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xraw_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xverbose_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mq_LDADD = $(mq_LIBS) $(LDADD)
 newfstatat_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 pc_LDADD = $(dl_LIBS) $(LDADD)
@@ -3539,10 +3881,14 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
 GEN_TESTS = _newselect.gen.test _newselect-P.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 \
+	add_key.gen.test adjtimex.gen.test aio.gen.test \
+	aio_pgetevents.gen.test alarm.gen.test bpf.gen.test \
+	bpf-v.gen.test bpf-obj_get_info_by_fd.gen.test \
+	bpf-obj_get_info_by_fd-v.gen.test \
+	bpf-obj_get_info_by_fd-prog.gen.test \
+	bpf-obj_get_info_by_fd-prog-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 dev-yy.gen.test dup.gen.test \
 	dup2.gen.test dup3.gen.test epoll_create.gen.test \
@@ -3550,70 +3896,85 @@
 	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 \
-	fsync-y.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_dm.gen.test ioctl_dm-v.gen.test \
-	ioctl_evdev.gen.test ioctl_evdev-v.gen.test \
+	fanotify_mark.gen.test fanotify_mark-Xabbrev.gen.test \
+	fanotify_mark-Xraw.gen.test fanotify_mark-Xverbose.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 fsync-y.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_dm.gen.test \
+	ioctl_dm-v.gen.test ioctl_evdev.gen.test \
+	ioctl_evdev-v.gen.test ioctl_inotify.gen.test \
 	ioctl_kvm_run.gen.test ioctl_loop.gen.test \
 	ioctl_loop-nv.gen.test ioctl_loop-v.gen.test \
-	ioctl_mtd.gen.test ioctl_nsfs.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_sock_gifconf.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 \
-	kcmp-y.gen.test kern_features.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 \
+	ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_perf.gen.test \
+	ioctl_ptp.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_sock_gifconf.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_msg-Xabbrev.gen.test \
+	ipc_msg-Xraw.gen.test ipc_msg-Xverbose.gen.test \
+	ipc_msgbuf-Xabbrev.gen.test ipc_msgbuf-Xraw.gen.test \
+	ipc_msgbuf-Xverbose.gen.test ipc_sem.gen.test \
+	ipc_sem-Xabbrev.gen.test ipc_sem-Xraw.gen.test \
+	ipc_sem-Xverbose.gen.test ipc_shm.gen.test \
+	ipc_shm-Xabbrev.gen.test ipc_shm-Xraw.gen.test \
+	ipc_shm-Xverbose.gen.test kcmp.gen.test kcmp-y.gen.test \
+	kern_features.gen.test kexec_file_load.gen.test \
+	kexec_load.gen.test keyctl.gen.test keyctl-Xabbrev.gen.test \
+	keyctl-Xraw.gen.test keyctl-Xverbose.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 modify_ldt.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 net-yy-inet6.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 \
-	nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test \
-	nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test \
-	nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test \
-	nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test \
-	nfnetlink_osf.gen.test nfnetlink_queue.gen.test \
-	nfnetlink_ulog.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 \
+	mmap-Xabbrev.gen.test mmap-Xraw.gen.test \
+	mmap-Xverbose.gen.test mmap64.gen.test mmap64-Xabbrev.gen.test \
+	mmap64-Xraw.gen.test mmap64-Xverbose.gen.test mmsg.gen.test \
+	mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test \
+	modify_ldt.gen.test mount.gen.test mount-Xabbrev.gen.test \
+	mount-Xraw.gen.test mount-Xverbose.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 \
+	net-yy-inet6.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 nfnetlink_acct.gen.test \
+	nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test \
+	nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test \
+	nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test \
+	nfnetlink_nftables.gen.test nfnetlink_osf.gen.test \
+	nfnetlink_queue.gen.test nfnetlink_ulog.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_af_spec.gen.test \
+	nlattr_ifla_brport.gen.test nlattr_ifla_linkinfo.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_mdba_mdb_entry.gen.test \
@@ -3625,16 +3986,19 @@
 	nlattr_tc_stats.gen.test nlattr_tca_stab.gen.test \
 	nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
 	nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
-	old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test \
-	oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test \
+	old_mmap-P.gen.test old_mmap-v-none.gen.test \
+	old_mmap-Xabbrev.gen.test old_mmap-Xraw.gen.test \
+	old_mmap-Xverbose.gen.test oldfstat.gen.test oldlstat.gen.test \
+	oldselect.gen.test oldselect-P.gen.test \
 	oldselect-efault.gen.test oldselect-efault-P.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-P.gen.test ppoll-v.gen.test \
-	pread64-pwrite64.gen.test preadv.gen.test \
+	perf_event_open_unabbrev.gen.test personality-Xabbrev.gen.test \
+	personality-Xraw.gen.test personality-Xverbose.gen.test \
+	pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test \
+	pkey_mprotect.gen.test ppoll.gen.test ppoll-P.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 \
@@ -3675,22 +4039,29 @@
 	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 sockopt-sol_netlink.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 \
+	so_linger.gen.test so_peercred.gen.test \
+	so_peercred-Xabbrev.gen.test so_peercred-Xraw.gen.test \
+	so_peercred-Xverbose.gen.test sock_filter-v.gen.test \
+	sock_filter-v-Xabbrev.gen.test sock_filter-v-Xraw.gen.test \
+	sock_filter-v-Xverbose.gen.test socketcall.gen.test \
+	sockopt-sol_netlink.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_personality_32.gen.test \
+	trace_personality_64.gen.test trace_personality_x32.gen.test \
+	trace_personality_regex_32.gen.test \
+	trace_personality_regex_64.gen.test \
+	trace_personality_regex_x32.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 \
@@ -3700,13 +4071,20 @@
 	xattr-strings.gen.test xet_robust_list.gen.test \
 	xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test \
 	xettimeofday.gen.test
-@USE_LIBUNWIND_FALSE@LIBUNWIND_TESTS = 
-@USE_LIBUNWIND_TRUE@LIBUNWIND_TESTS = strace-k.test $(am__append_1)
+@ENABLE_STACKTRACE_FALSE@STACKTRACE_TESTS = 
+@ENABLE_STACKTRACE_TRUE@STACKTRACE_TESTS = strace-k.test \
+@ENABLE_STACKTRACE_TRUE@	$(am__append_1)
 DECODER_TESTS = \
+	bpf-success.test \
+	bpf-success-v.test \
 	brk.test \
 	btrfs-v.test \
 	btrfs-vw.test \
+	btrfs-vwX.test \
+	btrfs-vX.test \
 	btrfs-w.test \
+	btrfs-wX.test \
+	btrfs-X.test \
 	caps-abbrev.test \
 	caps.test \
 	eventfd.test \
@@ -3716,6 +4094,7 @@
 	futex.test \
 	getuid.test \
 	ioctl.test \
+	ioctl_perf-success.test \
 	ipc_msgbuf.test \
 	kern_features-fault.test \
 	llseek.test \
@@ -3742,6 +4121,7 @@
 	prctl-seccomp-filter-v.test \
 	prctl-seccomp-strict.test \
 	prctl-securebits.test \
+	prctl-spec-inject.test \
 	prctl-tid_address.test \
 	prctl-tsc.test \
 	qual_fault-exit_group.test \
@@ -3790,9 +4170,13 @@
 	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
+	qual_fault-syscall.test \
 	qual_inject-error-signal.test \
+	qual_inject-error-signal-syscall.test \
 	qual_inject-retval.test \
+	qual_inject-retval-syscall.test \
 	qual_inject-signal.test \
+	qual_inject-signal-syscall.test \
 	qual_inject-syntax.test \
 	qual_signal.test \
 	qual_syscall.test \
@@ -3816,8 +4200,8 @@
 	# end of MISC_TESTS
 
 XFAIL_TESTS_ = 
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
@@ -3838,6 +4222,7 @@
 	count-f.expected \
 	eventfd.expected \
 	fadvise.h \
+	fcntl-common.c \
 	filter-unavailable.expected \
 	fstatat.c \
 	fstatx.c \
@@ -3848,12 +4233,12 @@
 	init.sh \
 	init_delete_module.h \
 	ipc.sh \
-	ipc_msgbuf.expected \
 	ksysent.sed \
 	lstatx.c \
 	match.awk \
 	net.expected \
 	netlink_sock_diag-v.sh \
+	nlattr_ifla.h \
 	pipe.expected \
 	print_user_desc.c \
 	process_vm_readv_writev.c \
@@ -3861,6 +4246,8 @@
 	qual_fault-exit_group.expected \
 	qual_inject-error-signal.expected \
 	qual_inject-signal.expected \
+	qualify_personality.sh \
+	qualify_personality_empty.in \
 	quotactl.h \
 	regex.in \
 	rt_sigaction.awk \
@@ -3878,16 +4265,23 @@
 	strace-E.expected \
 	strace-T.expected \
 	strace-ff.expected \
+	strace-k-demangle.expected \
 	strace-k-demangle.test \
+	strace-k.expected \
 	strace-k.test \
 	strace-r.expected \
 	strace.supp \
-	struct_flock.c \
 	sun_path.expected \
 	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
+	trace_personality_32.in \
+	trace_personality_64.in \
+	trace_personality_x32.in \
+	trace_personality_regex_32.in \
+	trace_personality_regex_64.in \
+	trace_personality_regex_x32.in \
 	trace_question.in \
 	trace_stat.in \
 	trace_stat_like.in \
@@ -4001,6 +4395,10 @@
 	@rm -f aio$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(aio_OBJECTS) $(aio_LDADD) $(LIBS)
 
+aio_pgetevents$(EXEEXT): $(aio_pgetevents_OBJECTS) $(aio_pgetevents_DEPENDENCIES) $(EXTRA_aio_pgetevents_DEPENDENCIES) 
+	@rm -f aio_pgetevents$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(aio_pgetevents_OBJECTS) $(aio_pgetevents_LDADD) $(LIBS)
+
 alarm$(EXEEXT): $(alarm_OBJECTS) $(alarm_DEPENDENCIES) $(EXTRA_alarm_DEPENDENCIES) 
 	@rm -f alarm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(alarm_OBJECTS) $(alarm_LDADD) $(LIBS)
@@ -4033,6 +4431,30 @@
 	@rm -f bpf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bpf_OBJECTS) $(bpf_LDADD) $(LIBS)
 
+bpf-obj_get_info_by_fd$(EXEEXT): $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog-v$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-v$(EXEEXT): $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_LDADD) $(LIBS)
+
+bpf-success$(EXEEXT): $(bpf_success_OBJECTS) $(bpf_success_DEPENDENCIES) $(EXTRA_bpf_success_DEPENDENCIES) 
+	@rm -f bpf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_OBJECTS) $(bpf_success_LDADD) $(LIBS)
+
+bpf-success-v$(EXEEXT): $(bpf_success_v_OBJECTS) $(bpf_success_v_DEPENDENCIES) $(EXTRA_bpf_success_v_DEPENDENCIES) 
+	@rm -f bpf-success-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_v_OBJECTS) $(bpf_success_v_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)
@@ -4201,6 +4623,18 @@
 	@rm -f fanotify_mark$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fanotify_mark_OBJECTS) $(fanotify_mark_LDADD) $(LIBS)
 
+fanotify_mark-Xabbrev$(EXEEXT): $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_DEPENDENCIES) $(EXTRA_fanotify_mark_Xabbrev_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_LDADD) $(LIBS)
+
+fanotify_mark-Xraw$(EXEEXT): $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_DEPENDENCIES) $(EXTRA_fanotify_mark_Xraw_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_LDADD) $(LIBS)
+
+fanotify_mark-Xverbose$(EXEEXT): $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_DEPENDENCIES) $(EXTRA_fanotify_mark_Xverbose_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_LDADD) $(LIBS)
+
 fchdir$(EXEEXT): $(fchdir_OBJECTS) $(fchdir_DEPENDENCIES) $(EXTRA_fchdir_DEPENDENCIES) 
 	@rm -f fchdir$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fchdir_OBJECTS) $(fchdir_LDADD) $(LIBS)
@@ -4481,6 +4915,10 @@
 	@rm -f ioctl_evdev-v$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_evdev_v_OBJECTS) $(ioctl_evdev_v_LDADD) $(LIBS)
 
+ioctl_inotify$(EXEEXT): $(ioctl_inotify_OBJECTS) $(ioctl_inotify_DEPENDENCIES) $(EXTRA_ioctl_inotify_DEPENDENCIES) 
+	@rm -f ioctl_inotify$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_inotify_OBJECTS) $(ioctl_inotify_LDADD) $(LIBS)
+
 ioctl_kvm_run$(EXEEXT): $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_DEPENDENCIES) $(EXTRA_ioctl_kvm_run_DEPENDENCIES) 
 	@rm -f ioctl_kvm_run$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_LDADD) $(LIBS)
@@ -4505,6 +4943,18 @@
 	@rm -f ioctl_nsfs$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_nsfs_OBJECTS) $(ioctl_nsfs_LDADD) $(LIBS)
 
+ioctl_perf$(EXEEXT): $(ioctl_perf_OBJECTS) $(ioctl_perf_DEPENDENCIES) $(EXTRA_ioctl_perf_DEPENDENCIES) 
+	@rm -f ioctl_perf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_OBJECTS) $(ioctl_perf_LDADD) $(LIBS)
+
+ioctl_perf-success$(EXEEXT): $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_DEPENDENCIES) $(EXTRA_ioctl_perf_success_DEPENDENCIES) 
+	@rm -f ioctl_perf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_LDADD) $(LIBS)
+
+ioctl_ptp$(EXEEXT): $(ioctl_ptp_OBJECTS) $(ioctl_ptp_DEPENDENCIES) $(EXTRA_ioctl_ptp_DEPENDENCIES) 
+	@rm -f ioctl_ptp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_ptp_OBJECTS) $(ioctl_ptp_LDADD) $(LIBS)
+
 ioctl_rtc$(EXEEXT): $(ioctl_rtc_OBJECTS) $(ioctl_rtc_DEPENDENCIES) $(EXTRA_ioctl_rtc_DEPENDENCIES) 
 	@rm -f ioctl_rtc$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_rtc_OBJECTS) $(ioctl_rtc_LDADD) $(LIBS)
@@ -4561,18 +5011,66 @@
 	@rm -f ipc_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msg_OBJECTS) $(ipc_msg_LDADD) $(LIBS)
 
+ipc_msg-Xabbrev$(EXEEXT): $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msg_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msg-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_LDADD) $(LIBS)
+
+ipc_msg-Xraw$(EXEEXT): $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_DEPENDENCIES) $(EXTRA_ipc_msg_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msg-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_LDADD) $(LIBS)
+
+ipc_msg-Xverbose$(EXEEXT): $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msg_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msg-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_LDADD) $(LIBS)
+
 ipc_msgbuf$(EXEEXT): $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_DEPENDENCIES) $(EXTRA_ipc_msgbuf_DEPENDENCIES) 
 	@rm -f ipc_msgbuf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_LDADD) $(LIBS)
 
+ipc_msgbuf-Xabbrev$(EXEEXT): $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_LDADD) $(LIBS)
+
+ipc_msgbuf-Xraw$(EXEEXT): $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_LDADD) $(LIBS)
+
+ipc_msgbuf-Xverbose$(EXEEXT): $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_LDADD) $(LIBS)
+
 ipc_sem$(EXEEXT): $(ipc_sem_OBJECTS) $(ipc_sem_DEPENDENCIES) $(EXTRA_ipc_sem_DEPENDENCIES) 
 	@rm -f ipc_sem$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_sem_OBJECTS) $(ipc_sem_LDADD) $(LIBS)
 
+ipc_sem-Xabbrev$(EXEEXT): $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_sem_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_sem-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_LDADD) $(LIBS)
+
+ipc_sem-Xraw$(EXEEXT): $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_DEPENDENCIES) $(EXTRA_ipc_sem_Xraw_DEPENDENCIES) 
+	@rm -f ipc_sem-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_LDADD) $(LIBS)
+
+ipc_sem-Xverbose$(EXEEXT): $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_DEPENDENCIES) $(EXTRA_ipc_sem_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_sem-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_LDADD) $(LIBS)
+
 ipc_shm$(EXEEXT): $(ipc_shm_OBJECTS) $(ipc_shm_DEPENDENCIES) $(EXTRA_ipc_shm_DEPENDENCIES) 
 	@rm -f ipc_shm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_shm_OBJECTS) $(ipc_shm_LDADD) $(LIBS)
 
+ipc_shm-Xabbrev$(EXEEXT): $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_shm_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_shm-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_LDADD) $(LIBS)
+
+ipc_shm-Xraw$(EXEEXT): $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_DEPENDENCIES) $(EXTRA_ipc_shm_Xraw_DEPENDENCIES) 
+	@rm -f ipc_shm-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_LDADD) $(LIBS)
+
+ipc_shm-Xverbose$(EXEEXT): $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_DEPENDENCIES) $(EXTRA_ipc_shm_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_shm-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_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)
@@ -4601,6 +5099,18 @@
 	@rm -f keyctl$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(keyctl_OBJECTS) $(keyctl_LDADD) $(LIBS)
 
+keyctl-Xabbrev$(EXEEXT): $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_DEPENDENCIES) $(EXTRA_keyctl_Xabbrev_DEPENDENCIES) 
+	@rm -f keyctl-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_LDADD) $(LIBS)
+
+keyctl-Xraw$(EXEEXT): $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_DEPENDENCIES) $(EXTRA_keyctl_Xraw_DEPENDENCIES) 
+	@rm -f keyctl-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_LDADD) $(LIBS)
+
+keyctl-Xverbose$(EXEEXT): $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_DEPENDENCIES) $(EXTRA_keyctl_Xverbose_DEPENDENCIES) 
+	@rm -f keyctl-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_LDADD) $(LIBS)
+
 kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) $(EXTRA_kill_DEPENDENCIES) 
 	@rm -f kill$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
@@ -4709,10 +5219,34 @@
 	@rm -f mmap$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap_OBJECTS) $(mmap_LDADD) $(LIBS)
 
+mmap-Xabbrev$(EXEEXT): $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_DEPENDENCIES) $(EXTRA_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_LDADD) $(LIBS)
+
+mmap-Xraw$(EXEEXT): $(mmap_Xraw_OBJECTS) $(mmap_Xraw_DEPENDENCIES) $(EXTRA_mmap_Xraw_DEPENDENCIES) 
+	@rm -f mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xraw_OBJECTS) $(mmap_Xraw_LDADD) $(LIBS)
+
+mmap-Xverbose$(EXEEXT): $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_DEPENDENCIES) $(EXTRA_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_LDADD) $(LIBS)
+
 mmap64$(EXEEXT): $(mmap64_OBJECTS) $(mmap64_DEPENDENCIES) $(EXTRA_mmap64_DEPENDENCIES) 
 	@rm -f mmap64$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap64_OBJECTS) $(mmap64_LDADD) $(LIBS)
 
+mmap64-Xabbrev$(EXEEXT): $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_DEPENDENCIES) $(EXTRA_mmap64_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap64-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_LDADD) $(LIBS)
+
+mmap64-Xraw$(EXEEXT): $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_DEPENDENCIES) $(EXTRA_mmap64_Xraw_DEPENDENCIES) 
+	@rm -f mmap64-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_LDADD) $(LIBS)
+
+mmap64-Xverbose$(EXEEXT): $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_DEPENDENCIES) $(EXTRA_mmap64_Xverbose_DEPENDENCIES) 
+	@rm -f mmap64-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_LDADD) $(LIBS)
+
 mmsg$(EXEEXT): $(mmsg_OBJECTS) $(mmsg_DEPENDENCIES) $(EXTRA_mmsg_DEPENDENCIES) 
 	@rm -f mmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmsg_OBJECTS) $(mmsg_LDADD) $(LIBS)
@@ -4737,6 +5271,18 @@
 	@rm -f mount$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
 
+mount-Xabbrev$(EXEEXT): $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_DEPENDENCIES) $(EXTRA_mount_Xabbrev_DEPENDENCIES) 
+	@rm -f mount-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_LDADD) $(LIBS)
+
+mount-Xraw$(EXEEXT): $(mount_Xraw_OBJECTS) $(mount_Xraw_DEPENDENCIES) $(EXTRA_mount_Xraw_DEPENDENCIES) 
+	@rm -f mount-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xraw_OBJECTS) $(mount_Xraw_LDADD) $(LIBS)
+
+mount-Xverbose$(EXEEXT): $(mount_Xverbose_OBJECTS) $(mount_Xverbose_DEPENDENCIES) $(EXTRA_mount_Xverbose_DEPENDENCIES) 
+	@rm -f mount-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xverbose_OBJECTS) $(mount_Xverbose_LDADD) $(LIBS)
+
 move_pages$(EXEEXT): $(move_pages_OBJECTS) $(move_pages_DEPENDENCIES) $(EXTRA_move_pages_DEPENDENCIES) 
 	@rm -f move_pages$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(move_pages_OBJECTS) $(move_pages_LDADD) $(LIBS)
@@ -4941,10 +5487,18 @@
 	@rm -f nlattr_ifinfomsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_LDADD) $(LIBS)
 
+nlattr_ifla_af_spec$(EXEEXT): $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_DEPENDENCIES) $(EXTRA_nlattr_ifla_af_spec_DEPENDENCIES) 
+	@rm -f nlattr_ifla_af_spec$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_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_linkinfo$(EXEEXT): $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_DEPENDENCIES) $(EXTRA_nlattr_ifla_linkinfo_DEPENDENCIES) 
+	@rm -f nlattr_ifla_linkinfo$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_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)
@@ -5045,6 +5599,18 @@
 	@rm -f old_mmap-P$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_P_OBJECTS) $(old_mmap_P_LDADD) $(LIBS)
 
+old_mmap-Xabbrev$(EXEEXT): $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_DEPENDENCIES) $(EXTRA_old_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f old_mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_LDADD) $(LIBS)
+
+old_mmap-Xraw$(EXEEXT): $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_DEPENDENCIES) $(EXTRA_old_mmap_Xraw_DEPENDENCIES) 
+	@rm -f old_mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_LDADD) $(LIBS)
+
+old_mmap-Xverbose$(EXEEXT): $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_DEPENDENCIES) $(EXTRA_old_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f old_mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_LDADD) $(LIBS)
+
 old_mmap-v-none$(EXEEXT): $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_DEPENDENCIES) $(EXTRA_old_mmap_v_none_DEPENDENCIES) 
 	@rm -f old_mmap-v-none$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_LDADD) $(LIBS)
@@ -5113,6 +5679,18 @@
 	@rm -f personality$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(personality_OBJECTS) $(personality_LDADD) $(LIBS)
 
+personality-Xabbrev$(EXEEXT): $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_DEPENDENCIES) $(EXTRA_personality_Xabbrev_DEPENDENCIES) 
+	@rm -f personality-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_LDADD) $(LIBS)
+
+personality-Xraw$(EXEEXT): $(personality_Xraw_OBJECTS) $(personality_Xraw_DEPENDENCIES) $(EXTRA_personality_Xraw_DEPENDENCIES) 
+	@rm -f personality-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xraw_OBJECTS) $(personality_Xraw_LDADD) $(LIBS)
+
+personality-Xverbose$(EXEEXT): $(personality_Xverbose_OBJECTS) $(personality_Xverbose_DEPENDENCIES) $(EXTRA_personality_Xverbose_DEPENDENCIES) 
+	@rm -f personality-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xverbose_OBJECTS) $(personality_Xverbose_LDADD) $(LIBS)
+
 pipe$(EXEEXT): $(pipe_OBJECTS) $(pipe_DEPENDENCIES) $(EXTRA_pipe_DEPENDENCIES) 
 	@rm -f pipe$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(pipe_OBJECTS) $(pipe_LDADD) $(LIBS)
@@ -5185,6 +5763,10 @@
 	@rm -f prctl-securebits$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_securebits_OBJECTS) $(prctl_securebits_LDADD) $(LIBS)
 
+prctl-spec-inject$(EXEEXT): $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_DEPENDENCIES) $(EXTRA_prctl_spec_inject_DEPENDENCIES) 
+	@rm -f prctl-spec-inject$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_LDADD) $(LIBS)
+
 prctl-tid_address$(EXEEXT): $(prctl_tid_address_OBJECTS) $(prctl_tid_address_DEPENDENCIES) $(EXTRA_prctl_tid_address_DEPENDENCIES) 
 	@rm -f prctl-tid_address$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_tid_address_OBJECTS) $(prctl_tid_address_LDADD) $(LIBS)
@@ -5669,10 +6251,34 @@
 	@rm -f so_peercred$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(so_peercred_OBJECTS) $(so_peercred_LDADD) $(LIBS)
 
+so_peercred-Xabbrev$(EXEEXT): $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_DEPENDENCIES) $(EXTRA_so_peercred_Xabbrev_DEPENDENCIES) 
+	@rm -f so_peercred-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_LDADD) $(LIBS)
+
+so_peercred-Xraw$(EXEEXT): $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_DEPENDENCIES) $(EXTRA_so_peercred_Xraw_DEPENDENCIES) 
+	@rm -f so_peercred-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_LDADD) $(LIBS)
+
+so_peercred-Xverbose$(EXEEXT): $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_DEPENDENCIES) $(EXTRA_so_peercred_Xverbose_DEPENDENCIES) 
+	@rm -f so_peercred-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_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)
 
+sock_filter-v-Xabbrev$(EXEEXT): $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_DEPENDENCIES) $(EXTRA_sock_filter_v_Xabbrev_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_LDADD) $(LIBS)
+
+sock_filter-v-Xraw$(EXEEXT): $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_DEPENDENCIES) $(EXTRA_sock_filter_v_Xraw_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_LDADD) $(LIBS)
+
+sock_filter-v-Xverbose$(EXEEXT): $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_DEPENDENCIES) $(EXTRA_sock_filter_v_Xverbose_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_LDADD) $(LIBS)
+
 socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_socketcall_DEPENDENCIES) 
 	@rm -f socketcall$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
@@ -5960,6 +6566,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add_key.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adjtimex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aio_pgetevents.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alarm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/answer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach-f-p-cmd.Po@am__quote@
@@ -5967,6 +6574,12 @@
 @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-obj_get_info_by_fd-prog-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-obj_get_info_by_fd-prog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-obj_get_info_by_fd-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-obj_get_info_by_fd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-success-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-success.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@
@@ -6009,6 +6622,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fadvise64_64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fallocate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchdir.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchmod.Po@am__quote@
@@ -6080,12 +6696,16 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_dm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_evdev-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_evdev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_inotify.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_kvm_run.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop-nv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_mtd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_nsfs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_perf-success.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_perf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_ptp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_rtc-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_rtc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_scsi.Po@am__quote@
@@ -6099,9 +6719,21 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioprio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip_mreq.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm-Xverbose.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-y.Po@am__quote@
@@ -6109,6 +6741,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kern_features.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@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ksysent.Po@am__quote@
@@ -6162,13 +6797,22 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlock.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlock2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlockall.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64-mmap64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg-silent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg_name-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg_name.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modify_ldt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/move_pages.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mq.Po@am__quote@
@@ -6221,7 +6865,9 @@
 @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_af_spec.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_linkinfo.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@
@@ -6246,6 +6892,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls-d.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-P.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-v-none.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldfstat.Po@am__quote@
@@ -6263,6 +6912,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perf_event_open.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perf_event_open_nonverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perf_event_open_unabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe2.Po@am__quote@
@@ -6282,6 +6934,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-seccomp-filter-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-seccomp-strict.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-securebits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-spec-inject.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-tid_address.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-tsc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pread64_pwrite64-pread64-pwrite64.Po@am__quote@
@@ -6402,7 +7055,13 @@
 @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-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred-Xverbose.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-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v-Xverbose.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)/sockopt-sol_netlink.Po@am__quote@
@@ -6929,6 +7588,48 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64-mmap64.obj `if test -f 'mmap64.c'; then $(CYGPATH_W) 'mmap64.c'; else $(CYGPATH_W) '$(srcdir)/mmap64.c'; fi`
 
+mmap64_Xabbrev-mmap64-Xabbrev.o: mmap64-Xabbrev.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.o -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.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) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+
+mmap64_Xabbrev-mmap64-Xabbrev.obj: mmap64-Xabbrev.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.obj -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.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) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+
+mmap64_Xraw-mmap64-Xraw.o: mmap64-Xraw.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.o -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.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) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+
+mmap64_Xraw-mmap64-Xraw.obj: mmap64-Xraw.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.obj -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.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) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+
+mmap64_Xverbose-mmap64-Xverbose.o: mmap64-Xverbose.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.o -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.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) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+
+mmap64_Xverbose-mmap64-Xverbose.obj: mmap64-Xverbose.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.obj -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.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) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+
 newfstatat-newfstatat.o: newfstatat.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newfstatat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT newfstatat-newfstatat.o -MD -MP -MF $(DEPDIR)/newfstatat-newfstatat.Tpo -c -o newfstatat-newfstatat.o `test -f 'newfstatat.c' || echo '$(srcdir)/'`newfstatat.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/newfstatat-newfstatat.Tpo $(DEPDIR)/newfstatat-newfstatat.Po
@@ -7480,6 +8181,9 @@
 $(srcdir)/aio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/aio_pgetevents.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/alarm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7489,6 +8193,18 @@
 $(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-obj_get_info_by_fd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog-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) $^ $@
 
@@ -7576,6 +8292,15 @@
 $(srcdir)/fanotify_mark.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/fanotify_mark-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/fchdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7768,6 +8493,9 @@
 $(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_inotify.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7786,6 +8514,12 @@
 $(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_perf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_ptp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7828,12 +8562,48 @@
 $(srcdir)/ipc_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_msg-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_sem.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_sem-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_shm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_shm-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7852,6 +8622,15 @@
 $(srcdir)/keyctl.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/keyctl-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kill.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7915,9 +8694,27 @@
 $(srcdir)/mlockall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmap64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap64-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7936,6 +8733,15 @@
 $(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mount-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/move_pages.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8062,9 +8868,15 @@
 $(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_ifla_af_spec.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_linkinfo.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) $^ $@
 
@@ -8137,6 +8949,15 @@
 $(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/old_mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8179,6 +9000,15 @@
 $(srcdir)/perf_event_open_unabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/personality-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/pipe2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8509,9 +9339,27 @@
 $(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_peercred-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xverbose.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)/sock_filter-v-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xverbose.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) $^ $@
 
@@ -8593,6 +9441,24 @@
 $(srcdir)/trace_lstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/trace_personality_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/trace_question.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests-m32/add_key.c b/tests-m32/add_key.c
index 999da03..9ad5e28 100644
--- a/tests-m32/add_key.c
+++ b/tests-m32/add_key.c
@@ -2,7 +2,7 @@
  * Check decoding of add_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -102,7 +102,7 @@
 		{ bogus_desc, NULL },
 		{ ARG_STR("\25\26\27\30\31") },
 		{ ARG_STR("desc") },
-		{ "overly long description", _STR("overly long ") "..." },
+		{ "overly long description", STRINGIFY("overly long ") "..." },
 	};
 
 	struct {
@@ -113,10 +113,10 @@
 		{ ARG_STR(NULL), 0 },
 		{ bogus_payload + sizeof(unterminated3), NULL,
 			(size_t) 0xdeadbeefbadc0dedULL },
-		{ bogus_payload, _STR(""), 0 },
-		{ bogus_payload, _STR("\16\17\20\21\22"), 5 },
+		{ bogus_payload, STRINGIFY(""), 0 },
+		{ bogus_payload, STRINGIFY("\16\17\20\21\22"), 5 },
 		{ bogus_payload, NULL, 10 },
-		{ "overly long payload", _STR("overly long ") "...", 15 },
+		{ "overly long payload", STRINGIFY("overly long ") "...", 15 },
 	};
 
 	struct {
diff --git a/tests-m32/aio.c b/tests-m32/aio.c
index 335bb31..ea18700 100644
--- a/tests-m32/aio.c
+++ b/tests-m32/aio.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -335,7 +335,7 @@
 	       "}, {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",
+	       "}, {NULL}, {%#lx}, ... /* %p */]) = %s\n",
 	       *ctx, 1057L,
 	       cbv2[0].aio_data, cbv2[0].aio_key,
 	       cbv2[0].aio_lio_opcode, cbv2[0].aio_fildes,
diff --git a/tests-m32/aio_pgetevents.c b/tests-m32/aio_pgetevents.c
new file mode 100644
index 0000000..ba5ac71
--- /dev/null
+++ b/tests-m32/aio_pgetevents.c
@@ -0,0 +1,190 @@
+/*
+ * Check decoding of io_pgetevents syscall.
+ *
+ * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <unistd.h>
+#include <asm/unistd.h>
+#include "scno.h"
+
+#if defined __NR_io_setup && defined __NR_io_pgetevents
+
+# include <fcntl.h>
+# include <inttypes.h>
+# include <stdio.h>
+# include <time.h>
+
+# include "nsig.h"
+
+# include <linux/aio_abi.h>
+
+# if !HAVE_STRUCT___AIO_SIGSET
+struct __aio_sigset {
+	sigset_t *sigmask;
+	size_t sigsetsize;
+};
+# endif
+
+static const char *errstr;
+
+static long
+sys_io_pgetevents(const kernel_ulong_t ctx_id,
+		  const kernel_long_t min_nr,
+		  const kernel_long_t nr,
+		  const kernel_ulong_t events,
+		  const kernel_ulong_t timeout,
+		  const kernel_ulong_t usig)
+{
+	long rc = syscall(__NR_io_pgetevents, ctx_id, min_nr, nr,
+			  events, timeout, usig);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	static const kernel_ulong_t bogus_ctx =
+		(kernel_ulong_t) 0xface1e55deadbeefLL;
+	static const kernel_long_t bogus_min_nr =
+		(kernel_long_t) 0xca7faceddeadf00dLL;
+	static const kernel_long_t bogus_nr =
+		(kernel_long_t) 0xba5e1e505ca571e0LL;
+	static const size_t bogus_sigsetsize =
+		(size_t) 0xdeadbeefbadcaffeULL;
+
+	const unsigned int sizeof_data0 = 4096;
+	const unsigned int sizeof_data1 = 8192;
+	void *data0 = tail_alloc(sizeof_data0);
+	void *data1 = tail_alloc(sizeof_data1);
+
+	const struct iocb proto_cb[] = {
+		{
+			.aio_data = (unsigned long) 0xfeedface11111111ULL,
+			.aio_reqprio = 11,
+			.aio_buf = (unsigned long) data0,
+			.aio_offset = (unsigned long) 0xdeface1facefeedULL,
+			.aio_nbytes = sizeof_data0
+		},
+		{
+			.aio_data = (unsigned long) 0xfeedface22222222ULL,
+			.aio_reqprio = 22,
+			.aio_buf = (unsigned long) data1,
+			.aio_offset = (unsigned long) 0xdeface2cafef00dULL,
+			.aio_nbytes = sizeof_data1
+		}
+	};
+	const struct iocb *cb = tail_memdup(proto_cb, sizeof(proto_cb));
+
+	const long proto_cbs[] = {
+		(long) &cb[0], (long) &cb[1]
+	};
+	const long *cbs = tail_memdup(proto_cbs, sizeof(proto_cbs));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned long, ctx);
+	*ctx = 0;
+
+	const unsigned int nr = ARRAY_SIZE(proto_cb);
+
+	const struct io_event *ev = tail_alloc(nr * sizeof(struct io_event));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct timespec, ts);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct __aio_sigset, ss);
+	TAIL_ALLOC_OBJECT_CONST_PTR(sigset_t, sigs);
+
+	(void) close(0);
+	if (open("/dev/zero", O_RDONLY))
+		perror_msg_and_skip("open: %s", "/dev/zero");
+
+	if (syscall(__NR_io_setup, nr, ctx))
+		perror_msg_and_skip("io_setup");
+
+	if (syscall(__NR_io_submit, *ctx, nr, cbs) != (long) nr)
+		perror_msg_and_skip("io_submit");
+
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  (uintptr_t) (ev + 1), 0, 0);
+	printf("io_pgetevents(%#jx, %ld, %ld, %p, NULL, NULL) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, ev + 1, errstr);
+
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  0, (uintptr_t) (ts + 1), 0);
+	printf("io_pgetevents(%#jx, %ld, %ld, NULL, %p, NULL) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, ts + 1, errstr);
+
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  0, 0, (uintptr_t) (ss + 1));
+	printf("io_pgetevents(%#jx, %ld, %ld, NULL, NULL, %p) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, ss + 1, errstr);
+
+	ss->sigmask = sigs + 1;
+	ss->sigsetsize =  bogus_sigsetsize;
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  0, 0, (uintptr_t) ss);
+	printf("io_pgetevents(%#jx, %ld, %ld, NULL, NULL"
+	       ", {sigmask=%p, sigsetsize=%zu}) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, sigs + 1, bogus_sigsetsize, errstr);
+
+	ts->tv_sec = 0xdeadbeefU;
+	ts->tv_nsec = 0xfacefeedU;
+	ss->sigmask = sigs;
+	ss->sigsetsize =  NSIG_BYTES;
+	sys_io_pgetevents(bogus_ctx, 0, 0, 0, (uintptr_t) ts, (uintptr_t) ss);
+	printf("io_pgetevents(%#jx, 0, 0, NULL"
+	       ", {tv_sec=%lld, tv_nsec=%llu}"
+	       ", {sigmask=~[], sigsetsize=%u}) = %s\n",
+	       (uintmax_t) bogus_ctx, (long long) ts->tv_sec,
+	       zero_extend_signed_to_ull(ts->tv_nsec), NSIG_BYTES,
+	       errstr);
+
+	sigemptyset(sigs);
+	sigaddset(sigs, SIGSYS);
+
+	ts->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+	ts->tv_nsec = (long) 0xbadc0dedfacefeedLL;
+	sys_io_pgetevents(bogus_ctx, 0, 0, 0, (uintptr_t) ts, (uintptr_t) ss);
+	printf("io_pgetevents(%#jx, 0, 0, NULL"
+	       ", {tv_sec=%lld, tv_nsec=%llu}"
+	       ", {sigmask=[SYS], sigsetsize=%u}) = %s\n",
+	       (uintmax_t) bogus_ctx, (long long) ts->tv_sec,
+	       zero_extend_signed_to_ull(ts->tv_nsec), NSIG_BYTES,
+	       errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_io_setup && __NR_io_pgetevents")
+
+#endif
diff --git a/tests-m32/aio_pgetevents.gen.test b/tests-m32/aio_pgetevents.gen.test
new file mode 100755
index 0000000..7ea3874
--- /dev/null
+++ b/tests-m32/aio_pgetevents.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (aio_pgetevents -e trace=io_pgetevents); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=io_pgetevents
diff --git a/tests-m32/bpf-obj_get_info_by_fd-prog-v.c b/tests-m32/bpf-obj_get_info_by_fd-prog-v.c
new file mode 100644
index 0000000..d7e10b4
--- /dev/null
+++ b/tests-m32/bpf-obj_get_info_by_fd-prog-v.c
@@ -0,0 +1,3 @@
+#define CHECK_OBJ_PROG 1
+#define VERBOSE 1
+#include "bpf-obj_get_info_by_fd.c"
diff --git a/tests-m32/bpf-obj_get_info_by_fd-prog-v.gen.test b/tests-m32/bpf-obj_get_info_by_fd-prog-v.gen.test
new file mode 100755
index 0000000..fcaa1d8
--- /dev/null
+++ b/tests-m32/bpf-obj_get_info_by_fd-prog-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd-prog-v -a20 -y -v -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -v -e trace=bpf
diff --git a/tests-m32/bpf-obj_get_info_by_fd-prog.c b/tests-m32/bpf-obj_get_info_by_fd-prog.c
new file mode 100644
index 0000000..19a5f75
--- /dev/null
+++ b/tests-m32/bpf-obj_get_info_by_fd-prog.c
@@ -0,0 +1,2 @@
+#define CHECK_OBJ_PROG 1
+#include "bpf-obj_get_info_by_fd.c"
diff --git a/tests-m32/bpf-obj_get_info_by_fd-prog.gen.test b/tests-m32/bpf-obj_get_info_by_fd-prog.gen.test
new file mode 100755
index 0000000..8cbd7c0
--- /dev/null
+++ b/tests-m32/bpf-obj_get_info_by_fd-prog.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd-prog -a20 -y -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -e trace=bpf
diff --git a/tests-m32/bpf-obj_get_info_by_fd-v.c b/tests-m32/bpf-obj_get_info_by_fd-v.c
new file mode 100644
index 0000000..2debc5f
--- /dev/null
+++ b/tests-m32/bpf-obj_get_info_by_fd-v.c
@@ -0,0 +1,2 @@
+#define VERBOSE 1
+#include "bpf-obj_get_info_by_fd.c"
diff --git a/tests-m32/bpf-obj_get_info_by_fd-v.gen.test b/tests-m32/bpf-obj_get_info_by_fd-v.gen.test
new file mode 100755
index 0000000..255d91e
--- /dev/null
+++ b/tests-m32/bpf-obj_get_info_by_fd-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd-v -a20 -y -v -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -v -e trace=bpf
diff --git a/tests-m32/bpf-obj_get_info_by_fd.c b/tests-m32/bpf-obj_get_info_by_fd.c
new file mode 100644
index 0000000..67b5122
--- /dev/null
+++ b/tests-m32/bpf-obj_get_info_by_fd.c
@@ -0,0 +1,499 @@
+/*
+ * Check bpf(BPF_OBJ_GET_INFO_BY_FD) decoding.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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"
+
+#ifndef CHECK_OBJ_PROG
+# define CHECK_OBJ_PROG 0
+#endif
+
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/sysmacros.h>
+#include <asm/unistd.h>
+
+#include "print_fields.h"
+#include "scno.h"
+
+#ifdef HAVE_LINUX_BPF_H
+# include <linux/bpf.h>
+#endif
+
+#include "bpf_attr.h"
+
+#include "xlat.h"
+#include "xlat/bpf_map_flags.h"
+#include "xlat/bpf_map_types.h"
+#include "xlat/bpf_prog_types.h"
+
+#define XLAT_MACROS_ONLY
+#include "xlat/bpf_commands.h"
+#include "xlat/bpf_op_alu.h"
+#include "xlat/bpf_op_jmp.h"
+#include "xlat/bpf_size.h"
+#include "xlat/bpf_src.h"
+#include "xlat/ebpf_class.h"
+#include "xlat/ebpf_mode.h"
+#include "xlat/ebpf_op_alu.h"
+#include "xlat/ebpf_regs.h"
+#include "xlat/ebpf_size.h"
+
+#ifndef HAVE_STRUCT_BPF_INSN
+struct bpf_insn {
+	uint8_t	code;
+	uint8_t	dst_reg:4;
+	uint8_t	src_reg:4;
+	int16_t	off;
+	int32_t	imm;
+};
+#endif
+
+static const char *errstr;
+
+static long
+sys_bpf(kernel_ulong_t cmd, void *attr, kernel_ulong_t size)
+{
+	long rc = syscall(__NR_bpf, cmd, attr, size);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static void
+print_map_create(void *attr_void, size_t size, long rc)
+{
+	/* struct BPF_MAP_CREATE_struct *attr = attr_void; */
+
+	printf("bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_ARRAY, key_size=4"
+	       ", value_size=8, max_entries=1");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, map_flags))
+		printf(", map_flags=0");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, inner_map_fd))
+		printf(", inner_map_fd=0</dev/null>");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, map_name))
+		printf(", map_name=\"test_map\"");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, map_ifindex))
+		printf(", map_ifindex=0");
+	printf("}, %zu) = ", size);
+	if (rc >= 0)
+		printf("%ld<anon_inode:bpf-map>\n", rc);
+	else
+		puts(errstr);
+}
+
+#if CHECK_OBJ_PROG
+static struct bpf_insn socket_prog[] = {
+	{ /* 0 */
+		.code    = BPF_ALU64 | BPF_K | BPF_MOV,
+		.dst_reg = BPF_REG_1,
+		.imm     = 0,
+	},
+	{ /* 1 */
+		.code    = BPF_STX | BPF_W | BPF_MEM,
+		.dst_reg = BPF_REG_10,
+		.src_reg = BPF_REG_1,
+		.off     = -4,
+	},
+	{ /* 2 */
+		.code = BPF_ALU64 | BPF_X | BPF_MOV,
+		.dst_reg = BPF_REG_2,
+		.src_reg = BPF_REG_10,
+	},
+	{ /* 3 */
+		.code    = BPF_ALU64 | BPF_K | BPF_ADD,
+		.dst_reg = BPF_REG_2,
+		.imm     = -4,
+	},
+	{ /* 4 */
+		.code    = BPF_LD | BPF_DW | BPF_IMM,
+		.dst_reg = BPF_REG_1,
+		.src_reg = 1 /* BPF_PSEUDO_MAP_FD */,
+		.imm     = 0, /* to be set to map fd */
+	},
+	{ /* 5 */
+		.imm     = 0,
+	},
+	{ /* 6 */
+		.code    = BPF_JMP | BPF_K | BPF_CALL,
+		.imm     = 0x1, /* BPF_FUNC_map_lookup_elem */
+	},
+	{ /* 7 */
+		.code    = BPF_ALU64 | BPF_K | BPF_MOV,
+		.dst_reg = BPF_REG_0,
+		.imm     = 0,
+	},
+	{ /* 8 */
+		.code    = BPF_JMP | BPF_K | BPF_EXIT,
+	},
+};
+
+# if VERBOSE
+static const char *socket_prog_fmt =
+	"[{code=BPF_ALU64|BPF_K|BPF_MOV"
+		", dst_reg=BPF_REG_1, src_reg=BPF_REG_0, off=0, imm=0}"
+	", {code=BPF_STX|BPF_W|BPF_MEM"
+		", dst_reg=BPF_REG_10, src_reg=BPF_REG_1, off=-4, imm=0}"
+	", {code=BPF_ALU64|BPF_X|BPF_MOV"
+		", dst_reg=BPF_REG_2, src_reg=BPF_REG_10, off=0, imm=0}"
+	", {code=BPF_ALU64|BPF_K|BPF_ADD"
+		", dst_reg=BPF_REG_2, src_reg=BPF_REG_0, off=0, imm=0xfffffffc}"
+	", {code=BPF_LD|BPF_DW|BPF_IMM"
+		", dst_reg=BPF_REG_1, src_reg=BPF_REG_1, off=0, imm=%#x}"
+	", {code=BPF_LD|BPF_W|BPF_IMM"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0}"
+	", {code=BPF_JMP|BPF_K|BPF_CALL"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0x1}"
+	", {code=BPF_ALU64|BPF_K|BPF_MOV"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0}"
+	", {code=BPF_JMP|BPF_K|BPF_EXIT"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0}"
+	"]";
+# endif /* VERBOSE */
+
+static const char *license = "BSD";
+static char log_buf[4096];
+
+static void
+print_prog_load(void *attr_void, size_t size, long rc)
+{
+	printf("bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER"
+	       ", insn_cnt=%zu, insns=", ARRAY_SIZE(socket_prog));
+# if VERBOSE
+	printf(socket_prog_fmt, socket_prog[4].imm);
+# else
+	printf("%p", socket_prog);
+# endif
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, license))
+		printf(", license=\"BSD\"");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, log_buf))
+		printf(", log_level=42, log_size=%zu, log_buf=\"\"",
+		       sizeof(log_buf));
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, kern_version))
+		printf(", kern_version=KERNEL_VERSION(57005, 192, 222)");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, prog_flags))
+		printf(", prog_flags=0");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, prog_name))
+		printf(", prog_name=\"test_prog\"");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, prog_ifindex))
+		printf(", prog_ifindex=0");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, expected_attach_type))
+		printf(", expected_attach_type=BPF_CGROUP_INET_INGRESS");
+	printf("}, %zu) = ", size);
+	if (rc >= 0)
+		printf("%ld<anon_inode:bpf-prog>\n", rc);
+	else
+		puts(errstr);
+}
+#endif /* CHECK_OBJ_PROG */
+
+static long
+try_bpf(kernel_ulong_t cmd, void (*printer)(void *attr, size_t size, long rc),
+	void *attr, size_t **sizes)
+{
+	long rc;
+
+	for (rc = -1; **sizes; (*sizes)++) {
+		rc = sys_bpf(cmd, attr, **sizes);
+		printer(attr, **sizes, rc);
+
+		if (rc >= 0)
+			break;
+	}
+
+	return rc;
+}
+
+int
+main(void)
+{
+	struct BPF_MAP_CREATE_struct bpf_map_create_attr = {
+		.map_type    = BPF_MAP_TYPE_ARRAY,
+		.key_size    = 4,
+		.value_size  = 8,
+		.max_entries = 1,
+		.map_name    = "test_map",
+	};
+	size_t bpf_map_create_attr_sizes[] = {
+		sizeof(bpf_map_create_attr),
+		offsetofend(struct BPF_MAP_CREATE_struct, max_entries),
+		0,
+	};
+
+#if CHECK_OBJ_PROG
+	struct BPF_PROG_LOAD_struct bpf_prog_load_attr = {
+		.prog_type    = BPF_PROG_TYPE_SOCKET_FILTER,
+		.insn_cnt     = ARRAY_SIZE(socket_prog),
+		.insns        = (uintptr_t) socket_prog,
+		.license      = (uintptr_t) license,
+		.log_level    = 42,
+		.log_size     = sizeof(log_buf),
+		.log_buf      = (uintptr_t) log_buf,
+		.kern_version = 0xdeadc0de,
+		.prog_name    = "test_prog",
+	};
+	size_t bpf_prog_load_attr_sizes[] = {
+		sizeof(bpf_prog_load_attr),
+		offsetofend(struct BPF_PROG_LOAD_struct, prog_name),
+		offsetofend(struct BPF_PROG_LOAD_struct, prog_flags),
+		offsetofend(struct BPF_PROG_LOAD_struct, kern_version),
+		offsetofend(struct BPF_PROG_LOAD_struct, log_buf),
+		offsetofend(struct BPF_PROG_LOAD_struct, license),
+		offsetofend(struct BPF_PROG_LOAD_struct, insns),
+		0,
+	};
+#endif /* CHECK_OBJ_PROG */
+
+	size_t *bpf_map_create_attr_size = bpf_map_create_attr_sizes;
+	int map_fd = try_bpf(BPF_MAP_CREATE, print_map_create,
+			     &bpf_map_create_attr, &bpf_map_create_attr_size);
+	if (map_fd < 0)
+		perror_msg_and_skip("BPF_MAP_CREATE failed");
+
+#if CHECK_OBJ_PROG
+	socket_prog[4].imm = map_fd;
+
+	size_t *bpf_prog_load_attr_size = bpf_prog_load_attr_sizes;
+	int prog_fd = try_bpf(BPF_PROG_LOAD, print_prog_load,
+			      &bpf_prog_load_attr, &bpf_prog_load_attr_size);
+	if (prog_fd < 0)
+		perror_msg_and_skip("BPF_PROG_LOAD failed (log: \"%s\")",
+				    log_buf);
+#endif /* CHECK_OBJ_PROG */
+
+	/*
+	 * This has to be a macro, otherwise the compiler complains that
+	 * initializer element is not constant.
+	 */
+	#define  MAP_INFO_SZ (sizeof(*map_info) + 64)
+	struct bpf_map_info_struct *map_info = calloc(1, MAP_INFO_SZ);
+	struct BPF_OBJ_GET_INFO_BY_FD_struct bpf_map_get_info_attr = {
+		.bpf_fd   = map_fd,
+		.info_len = MAP_INFO_SZ,
+		.info     = (uintptr_t) map_info,
+	};
+
+	int ret = sys_bpf(BPF_OBJ_GET_INFO_BY_FD, &bpf_map_get_info_attr,
+			  sizeof(bpf_map_get_info_attr));
+	if (ret < 0)
+		perror_msg_and_skip("BPF_OBJ_GET_INFO_BY_FD map failed");
+
+	printf("bpf(BPF_OBJ_GET_INFO_BY_FD"
+	       ", {info={bpf_fd=%d<anon_inode:bpf-map>, info_len=%zu",
+	       map_fd, MAP_INFO_SZ);
+	if (bpf_map_get_info_attr.info_len != MAP_INFO_SZ)
+		printf(" => %u", bpf_map_get_info_attr.info_len);
+
+	printf(", info=");
+#if VERBOSE
+	printf("{type=");
+	printxval(bpf_map_types, map_info->type, "BPF_MAP_TYPE_???");
+	PRINT_FIELD_U(", ", *map_info, id);
+	PRINT_FIELD_U(", ", *map_info, key_size);
+	PRINT_FIELD_U(", ", *map_info, value_size);
+	PRINT_FIELD_U(", ", *map_info, max_entries);
+	printf(", map_flags=");
+	printflags(bpf_map_flags, map_info->map_flags, "BPF_F_???");
+
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, name)) {
+		printf(", name=");
+		print_quoted_cstring(map_info->name, sizeof(map_info->name));
+	}
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, ifindex))
+		printf(", ifindex=%u", map_info->ifindex);
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, netns_dev))
+		printf(", netns_dev=makedev(%u, %u)",
+		       major(map_info->netns_dev), minor(map_info->netns_dev));
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, netns_ino))
+		printf(", netns_ino=%" PRIu64, map_info->netns_ino);
+	printf("}");
+#else /* !VERBOSE */
+	printf("%p", map_info);
+#endif /* VERBOSE */
+	printf("}}, %zu) = %s\n", sizeof(bpf_map_get_info_attr), errstr);
+
+#if CHECK_OBJ_PROG
+	/*
+	 * This has to be a macro, otherwise the compiler complains that
+	 * initializer element is not constant.
+	 */
+	#define  PROG_INFO_SZ (sizeof(*prog_info) + 64)
+	struct bpf_prog_info_struct *prog_info = calloc(1, PROG_INFO_SZ);
+	struct bpf_insn *xlated_prog = tail_alloc(sizeof(*xlated_prog) * 42);
+	uint32_t *map_ids = tail_alloc(sizeof(*map_ids) * 2);
+	struct BPF_OBJ_GET_INFO_BY_FD_struct bpf_prog_get_info_attr = {
+		.bpf_fd   = prog_fd,
+		.info_len = PROG_INFO_SZ,
+		.info     = (uintptr_t) prog_info,
+	};
+	size_t old_prog_info_len = PROG_INFO_SZ;
+
+	for (unsigned int i = 0; i < 4; i++) {
+		prog_info->jited_prog_len = 0;
+		switch (i) {
+		case 1:
+			prog_info->xlated_prog_insns =
+				(uintptr_t) (xlated_prog + 42);
+			prog_info->xlated_prog_len = 336;
+			prog_info->map_ids = (uintptr_t) (map_ids + 2);
+			prog_info->nr_map_ids = 2;
+			break;
+		case 2:
+			prog_info->xlated_prog_insns = (uintptr_t) xlated_prog;
+			/* TODO: check xlated_prog output */
+			prog_info->xlated_prog_len = 0;
+			prog_info->map_ids = (uintptr_t) map_ids;
+			prog_info->nr_map_ids = 0;
+			break;
+		case 3:
+			prog_info->xlated_prog_insns = (uintptr_t) xlated_prog;
+			prog_info->xlated_prog_len = 0;
+			prog_info->map_ids = (uintptr_t) map_ids;
+			prog_info->nr_map_ids = 2;
+			break;
+		}
+
+		ret = sys_bpf(BPF_OBJ_GET_INFO_BY_FD, &bpf_prog_get_info_attr,
+			      sizeof(bpf_prog_get_info_attr));
+		if (i != 1 && ret < 0)
+			perror_msg_and_skip("BPF_OBJ_GET_INFO_BY_FD"
+					    " prog %u failed", i);
+
+		printf("bpf(BPF_OBJ_GET_INFO_BY_FD"
+		       ", {info={bpf_fd=%d<anon_inode:bpf-prog>, info_len=%zu",
+		       prog_fd, old_prog_info_len);
+		if (!i && bpf_prog_get_info_attr.info_len != PROG_INFO_SZ)
+			printf(" => %u", bpf_prog_get_info_attr.info_len);
+		old_prog_info_len = bpf_prog_get_info_attr.info_len;
+
+		printf(", info=");
+# if VERBOSE
+		printf("{type=");
+		printxval(bpf_prog_types, prog_info->type, "BPF_PROG_TYPE_???");
+		PRINT_FIELD_U(", ", *prog_info, id);
+		printf(", tag=");
+		print_quoted_hex(prog_info->tag, sizeof(prog_info->tag));
+		printf(", jited_prog_len=0");
+		if (prog_info->jited_prog_len)
+			printf(" => %u", prog_info->jited_prog_len);
+		printf(", jited_prog_insns=NULL");
+		switch (i) {
+		case 0:
+			printf(", xlated_prog_len=0");
+			if (prog_info->xlated_prog_len)
+				printf(" => %u", prog_info->xlated_prog_len);
+			printf(", xlated_prog_insns=NULL");
+			break;
+		case 1:
+			printf(", xlated_prog_len=336");
+			if (prog_info->xlated_prog_len != 336)
+				printf(" => %u", prog_info->xlated_prog_len);
+			if (prog_info->xlated_prog_len)
+				printf(", xlated_prog_insns=%p", xlated_prog + 42);
+			else
+				printf(", xlated_prog_insns=[]");
+			break;
+		case 2:
+		case 3:
+			printf(", xlated_prog_len=0");
+			if (prog_info->xlated_prog_len)
+				printf(" => %u", prog_info->xlated_prog_len);
+			printf(", xlated_prog_insns=[]");
+			break;
+		}
+
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, load_time))
+			printf(", load_time=%" PRIu64, prog_info->load_time);
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, created_by_uid))
+			printf(", created_by_uid=%u",
+			       prog_info->created_by_uid);
+
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, map_ids)) {
+			switch (i) {
+			case 0:
+				printf(", nr_map_ids=0");
+				if (prog_info->nr_map_ids)
+					printf(" => 1");
+				printf(", map_ids=NULL");
+				break;
+			case 1:
+				printf(", nr_map_ids=2, map_ids=%p",
+				       map_ids + 2);
+				break;
+			case 2:
+				printf(", nr_map_ids=0");
+				if (prog_info->nr_map_ids)
+					printf(" => 1");
+				printf(", map_ids=[]");
+				break;
+			case 3:
+				printf(", nr_map_ids=2");
+				if (prog_info->nr_map_ids != 2)
+					printf(" => 1");
+				printf(", map_ids=[%u]", map_info->id);
+				break;
+			}
+		}
+
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, name))
+			printf(", name=\"test_prog\"");
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, ifindex))
+			printf(", ifindex=%u", prog_info->ifindex);
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, netns_dev))
+			printf(", netns_dev=makedev(%u, %u)",
+			       major(prog_info->netns_dev),
+			       minor(prog_info->netns_dev));
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, netns_ino))
+			printf(", netns_ino=%" PRIu64, prog_info->netns_ino);
+
+		printf("}");
+# else /* !VERBOSE */
+		printf("%p", prog_info);
+# endif /* VERBOSE */
+		printf("}}, %zu) = %s\n",
+		       sizeof(bpf_prog_get_info_attr), errstr);
+	}
+#endif /* CHECK_OBJ_PROG */
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/bpf-obj_get_info_by_fd.gen.test b/tests-m32/bpf-obj_get_info_by_fd.gen.test
new file mode 100755
index 0000000..0efa59a
--- /dev/null
+++ b/tests-m32/bpf-obj_get_info_by_fd.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd -a20 -y -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -e trace=bpf
diff --git a/tests-m32/bpf-success-v.c b/tests-m32/bpf-success-v.c
new file mode 100644
index 0000000..48c2a16
--- /dev/null
+++ b/tests-m32/bpf-success-v.c
@@ -0,0 +1,2 @@
+#define INJECT_RETVAL 42
+#include "bpf-v.c"
diff --git a/tests-m32/bpf-success-v.test b/tests-m32/bpf-success-v.test
new file mode 100755
index 0000000..819afbb
--- /dev/null
+++ b/tests-m32/bpf-success-v.test
@@ -0,0 +1,6 @@
+#!/bin/sh -efu
+
+. "${srcdir=.}/scno_tampering.sh"
+
+run_strace -a20 -v -e trace=bpf -e inject=bpf:retval=42 ../bpf-success-v > "$EXP"
+match_diff "$LOG" "$EXP"
diff --git a/tests-m32/bpf-success.c b/tests-m32/bpf-success.c
new file mode 100644
index 0000000..06f4695
--- /dev/null
+++ b/tests-m32/bpf-success.c
@@ -0,0 +1,2 @@
+#define INJECT_RETVAL 42
+#include "bpf.c"
diff --git a/tests-m32/bpf-success.test b/tests-m32/bpf-success.test
new file mode 100755
index 0000000..3cdfd35
--- /dev/null
+++ b/tests-m32/bpf-success.test
@@ -0,0 +1,6 @@
+#!/bin/sh -efu
+
+. "${srcdir=.}/scno_tampering.sh"
+
+run_strace -a20 -e trace=bpf -e inject=bpf:retval=42 ../bpf-success > "$EXP"
+match_diff "$LOG" "$EXP"
diff --git a/tests-m32/bpf.c b/tests-m32/bpf.c
index 72d7e8e..15ce713 100644
--- a/tests-m32/bpf.c
+++ b/tests-m32/bpf.c
@@ -49,6 +49,19 @@
 #include "xlat.h"
 #include "xlat/bpf_commands.h"
 
+#if defined MPERS_IS_m32 || SIZEOF_KERNEL_LONG_T > 4
+# define BIG_ADDR(addr64_, addr32_) addr64_
+# define BIG_ADDR_MAYBE(addr_)
+#elif defined __arm__ || defined __i386__ || defined __mips__ \
+   || defined __powerpc__ || defined __riscv__ || defined __s390__ \
+   || defined __sparc__ || defined __tile__
+# define BIG_ADDR(addr64_, addr32_) addr64_ " or " addr32_
+# define BIG_ADDR_MAYBE(addr_) addr_ " or "
+#else
+# define BIG_ADDR(addr64_, addr32_) addr32_
+# define BIG_ADDR_MAYBE(addr_)
+#endif
+
 #ifndef HAVE_STRUCT_BPF_INSN
 struct bpf_insn {
 	uint8_t	code;
@@ -76,6 +89,8 @@
 	BPF_ATTR_DATA_FIELD(BPF_PROG_GET_FD_BY_ID);
 	BPF_ATTR_DATA_FIELD(BPF_MAP_GET_FD_BY_ID);
 	BPF_ATTR_DATA_FIELD(BPF_OBJ_GET_INFO_BY_FD);
+	BPF_ATTR_DATA_FIELD(BPF_PROG_QUERY);
+	BPF_ATTR_DATA_FIELD(BPF_RAW_TRACEPOINT_OPEN);
 	char char_data[256];
 };
 
@@ -105,7 +120,20 @@
 sys_bpf(kernel_ulong_t cmd, kernel_ulong_t attr, kernel_ulong_t size)
 {
 	long rc = syscall(__NR_bpf, cmd, attr, size);
+
 	errstr = sprintrc(rc);
+
+#ifdef INJECT_RETVAL
+	if (rc != INJECT_RETVAL)
+		error_msg_and_fail("Got a return value of %ld != %d",
+				   rc, INJECT_RETVAL);
+
+	static char inj_errstr[4096];
+
+	snprintf(inj_errstr, sizeof(inj_errstr), "%s (INJECTED)", errstr);
+	errstr = inj_errstr;
+#endif
+
 	return rc;
 }
 
@@ -232,36 +260,173 @@
 	       cmd_check->cmd_str, addr, page_size + 1, errstr);
 }
 
-static const struct bpf_attr_check BPF_MAP_CREATE_checks[] = {
+static void
+init_BPF_MAP_CREATE_attr7(struct bpf_attr_check *check)
+{
+	struct BPF_MAP_CREATE_struct *attr = &check->data.BPF_MAP_CREATE_data;
+	attr->map_ifindex = ifindex_lo();
+}
+
+static struct bpf_attr_check BPF_MAP_CREATE_checks[] = {
 	{
 		.data = { .BPF_MAP_CREATE_data = { .map_type = 2 } },
 		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_type),
 		.str = "map_type=BPF_MAP_TYPE_ARRAY, key_size=0, value_size=0"
-		       ", max_entries=0, map_flags=0, inner_map_fd=0"
+		       ", max_entries=0"
 	},
-	{
+	{ /* 1 */
 		.data = { .BPF_MAP_CREATE_data = {
-			.map_type = 1,
+			.map_type = 16,
 			.key_size = 4,
 			.value_size = 8,
 			.max_entries = 256,
-			.map_flags = 7,
+			.map_flags = 63,
 			.inner_map_fd = -1,
-			.numa_node = 42
+			.numa_node = 3141592653,
+			.map_name = "0123456789abcde",
 		} },
-		.size = offsetofend(struct BPF_MAP_CREATE_struct, numa_node),
-		.str = "map_type=BPF_MAP_TYPE_HASH, key_size=4"
+		.size = offsetof(struct BPF_MAP_CREATE_struct, map_name) + 8,
+		.str = "map_type=BPF_MAP_TYPE_CPUMAP, key_size=4"
 		       ", value_size=8, max_entries=256"
 		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NO_COMMON_LRU"
-		       "|BPF_F_NUMA_NODE, inner_map_fd=-1, numa_node=42"
-	}
+				   "|BPF_F_NUMA_NODE|BPF_F_RDONLY|BPF_F_WRONLY"
+				   "|BPF_F_STACK_BUILD_ID"
+		       ", inner_map_fd=-1"
+		       ", numa_node=3141592653"
+		       ", map_name=\"0123456\"...",
+
+	},
+	{ /* 2 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 17,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xffffffc0,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+			.map_name = "",
+			.map_ifindex = 3141592653,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_ifindex),
+		.str = "map_type=0x11 /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=0xffffffc0 /* BPF_F_??? */"
+		       ", inner_map_fd=-1576685468"
+		       ", map_name=\"\", map_ifindex=3141592653",
+
+	},
+	{ /* 3 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_flags),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80",
+	},
+	{ /* 4 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, inner_map_fd),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468",
+	},
+	{ /* 5 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, numa_node),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468"
+		       ", numa_node=4294967295 /* NUMA_NO_NODE */",
+	},
+	{ /* 6 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+			.map_name = "fedcba9876543210",
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_name),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468"
+		       ", numa_node=4294967295 /* NUMA_NO_NODE */"
+		       ", map_name=\"fedcba987654321\"...",
+	},
+	{ /* 7 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+			.map_name = "0123456789abcde",
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_ifindex),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468"
+		       ", numa_node=4294967295 /* NUMA_NO_NODE */"
+		       ", map_name=\"0123456789abcde\""
+		       ", map_ifindex=" IFINDEX_LO_STR,
+		.init_fn = init_BPF_MAP_CREATE_attr7,
+	},
 };
 
 static const struct bpf_attr_check BPF_MAP_LOOKUP_ELEM_checks[] = {
 	{
 		.data = { .BPF_MAP_LOOKUP_ELEM_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_LOOKUP_ELEM_struct, map_fd),
-		.str = "map_fd=-1, key=0, value=0"
+		.str = "map_fd=-1, key=NULL, value=NULL"
 	},
 	{
 		.data = { .BPF_MAP_LOOKUP_ELEM_data = {
@@ -278,7 +443,7 @@
 	{
 		.data = { .BPF_MAP_UPDATE_ELEM_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_UPDATE_ELEM_struct, map_fd),
-		.str = "map_fd=-1, key=0, value=0, flags=BPF_ANY"
+		.str = "map_fd=-1, key=NULL, value=NULL, flags=BPF_ANY"
 	},
 	{
 		.data = { .BPF_MAP_UPDATE_ELEM_data = {
@@ -297,7 +462,7 @@
 	{
 		.data = { .BPF_MAP_DELETE_ELEM_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_DELETE_ELEM_struct, map_fd),
-		.str = "map_fd=-1, key=0"
+		.str = "map_fd=-1, key=NULL"
 	},
 	{
 		.data = { .BPF_MAP_DELETE_ELEM_data = {
@@ -313,7 +478,7 @@
 	{
 		.data = { .BPF_MAP_GET_NEXT_KEY_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_GET_NEXT_KEY_struct, map_fd),
-		.str = "map_fd=-1, key=0, next_key=0"
+		.str = "map_fd=-1, key=NULL, next_key=NULL"
 	},
 	{
 		.data = { .BPF_MAP_GET_NEXT_KEY_data = {
@@ -327,30 +492,96 @@
 };
 
 static const struct bpf_insn insns[] = {
-	{ .code = 0x95 }
+	{
+		.code = 0x95,
+		.dst_reg = 10,
+		.src_reg = 11,
+		.off = 0xdead,
+		.imm = 0xbadc0ded,
+	},
 };
 static const char license[] = "GPL";
-static char log_buf[4096];
 static const char pathname[] = "/sys/fs/bpf/foo/bar";
 
+static char *log_buf;
+/*
+ * This has to be a macro, otherwise the compiler complains that
+ * initializer element is not constant.
+ */
+#define log_buf_size 4096U
+
+static inline char *
+get_log_buf(void)
+{
+	if (!log_buf)
+		log_buf = tail_alloc(log_buf_size);
+	return log_buf;
+}
+
+static inline char *
+get_log_buf_tail(void)
+{
+	return get_log_buf() + log_buf_size;
+}
+
+#if VERBOSE
+# define INSNS_FMT \
+	"[{code=BPF_JMP|BPF_K|BPF_EXIT, dst_reg=BPF_REG_10" \
+	", src_reg=0xb /* BPF_REG_??? */, off=%d, imm=%#x}]"
+# define INSNS_ARG insns[0].off, insns[0].imm
+#else
+# define INSNS_FMT "%p"
+# define INSNS_ARG insns
+#endif
+
 static void
-init_BPF_PROG_LOAD_attr(struct bpf_attr_check *check)
+init_BPF_PROG_LOAD_attr3(struct bpf_attr_check *check)
 {
 	struct BPF_PROG_LOAD_struct *attr = &check->data.BPF_PROG_LOAD_data;
+
 	attr->insns = (uintptr_t) insns;
 	attr->license = (uintptr_t) license;
-	attr->log_buf = (uintptr_t) log_buf;
+	attr->log_buf = (uintptr_t) get_log_buf_tail();
 }
 
 static void
-print_BPF_PROG_LOAD_attr(const struct bpf_attr_check *check, unsigned long addr)
+print_BPF_PROG_LOAD_attr3(const struct bpf_attr_check *check, unsigned long addr)
 {
-	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=%u, insns=%p"
-	       ", license=\"%s\", log_level=42, log_size=4096, log_buf=%p"
+	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=%u"
+	       ", insns=" INSNS_FMT ", license=\"%s\", log_level=2718281828"
+	       ", log_size=%u, log_buf=%p"
 	       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
-	       ", prog_flags=BPF_F_STRICT_ALIGNMENT",
-	       (unsigned int) ARRAY_SIZE(insns), insns,
-	       license, log_buf);
+	       ", prog_flags=0x2 /* BPF_F_??? */"
+	       ", prog_name=\"0123456789abcde\"..., prog_ifindex=3203399405",
+	       (unsigned int) ARRAY_SIZE(insns), INSNS_ARG, license,
+	       log_buf_size, get_log_buf_tail());
+}
+
+static void
+init_BPF_PROG_LOAD_attr4(struct bpf_attr_check *check)
+{
+	struct BPF_PROG_LOAD_struct *attr = &check->data.BPF_PROG_LOAD_data;
+
+	attr->insns = (uintptr_t) insns;
+	attr->license = (uintptr_t) license;
+	attr->log_buf = (uintptr_t) get_log_buf();
+	attr->prog_ifindex = ifindex_lo();
+
+	strncpy(log_buf, "log test", 9);
+}
+
+static void
+print_BPF_PROG_LOAD_attr4(const struct bpf_attr_check *check, unsigned long addr)
+{
+	printf("prog_type=BPF_PROG_TYPE_UNSPEC, insn_cnt=%u, insns=" INSNS_FMT
+	       ", license=\"%s\", log_level=2718281828, log_size=4"
+	       ", log_buf=\"log \"..."
+	       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
+	       ", prog_flags=BPF_F_STRICT_ALIGNMENT|0x2"
+	       ", prog_name=\"0123456789abcde\"..., prog_ifindex=%s"
+	       ", expected_attach_type=BPF_CGROUP_INET6_BIND",
+	       (unsigned int) ARRAY_SIZE(insns), INSNS_ARG,
+	       license, IFINDEX_LO_STR);
 }
 
 static struct bpf_attr_check BPF_PROG_LOAD_checks[] = {
@@ -358,21 +589,82 @@
 		.data = { .BPF_PROG_LOAD_data = { .prog_type = 1 } },
 		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_type),
 		.str = "prog_type=BPF_PROG_TYPE_SOCKET_FILTER"
-		       ", insn_cnt=0, insns=0, license=NULL"
+		       ", insn_cnt=0, insns=NULL, license=NULL"
 	},
-	{
+	{ /* 1 */
+		.data = { .BPF_PROG_LOAD_data = {
+			.prog_type = 18,
+			.insn_cnt = 0xbadc0ded,
+			.insns = 0,
+			.license = 0,
+			.log_level = 42,
+			.log_size = 3141592653U,
+			.log_buf = 0,
+			.kern_version = 0xcafef00d,
+			.prog_flags = 0,
+		} },
+		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_flags),
+		.str = "prog_type=0x12 /* BPF_PROG_TYPE_??? */"
+		       ", insn_cnt=3134983661, insns=NULL, license=NULL"
+		       ", log_level=42, log_size=3141592653, log_buf=NULL"
+		       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
+		       ", prog_flags=0",
+	},
+	{ /* 2 */
+		.data = { .BPF_PROG_LOAD_data = {
+			.prog_type = 17,
+			.insn_cnt = 0xbadc0ded,
+			.insns = 0xffffffff00000000,
+			.license = 0xffffffff00000000,
+			.log_level = 2718281828U,
+			.log_size = log_buf_size,
+			.log_buf = 0xffffffff00000000,
+			.kern_version = 0xcafef00d,
+			.prog_flags = 1,
+			.prog_name = "fedcba987654321",
+		} },
+		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_name),
+		.str = "prog_type=BPF_PROG_TYPE_RAW_TRACEPOINT"
+		       ", insn_cnt=3134983661"
+		       ", insns=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", license=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", log_level=2718281828, log_size=4096"
+		       ", log_buf=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
+		       ", prog_flags=BPF_F_STRICT_ALIGNMENT"
+		       ", prog_name=\"fedcba987654321\"",
+	},
+	{ /* 3 */
 		.data = { .BPF_PROG_LOAD_data = {
 			.prog_type = 1,
 			.insn_cnt = ARRAY_SIZE(insns),
-			.log_level = 42,
-			.log_size = sizeof(log_buf),
+			.log_level = 2718281828U,
+			.log_size = log_buf_size,
 			.kern_version = 0xcafef00d,
-			.prog_flags = 1
+			.prog_flags = 2,
+			.prog_name = "0123456789abcdef",
+			.prog_ifindex = 0xbeeffeed,
 		} },
-		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_flags),
-		.init_fn = init_BPF_PROG_LOAD_attr,
-		.print_fn = print_BPF_PROG_LOAD_attr
-	}
+		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_ifindex),
+		.init_fn = init_BPF_PROG_LOAD_attr3,
+		.print_fn = print_BPF_PROG_LOAD_attr3
+	},
+	{ /* 4 */
+		.data = { .BPF_PROG_LOAD_data = {
+			.prog_type = 0,
+			.insn_cnt = ARRAY_SIZE(insns),
+			.log_level = 2718281828U,
+			.log_size = 4,
+			.kern_version = 0xcafef00d,
+			.prog_flags = 3,
+			.prog_name = "0123456789abcdef",
+			.expected_attach_type = 9,
+		} },
+		.size = offsetofend(struct BPF_PROG_LOAD_struct,
+				    expected_attach_type),
+		.init_fn = init_BPF_PROG_LOAD_attr4,
+		.print_fn = print_BPF_PROG_LOAD_attr4
+	},
 };
 
 static void
@@ -393,16 +685,7 @@
 			.pathname = 0xFFFFFFFFFFFFFFFFULL
 		} },
 		.size = offsetofend(struct BPF_OBJ_PIN_struct, pathname),
-		.str = "pathname="
-#if defined MPERS_IS_m32 || SIZEOF_KERNEL_LONG_T > 4
-		       "0xffffffffffffffff"
-#elif defined __arm__ || defined __i386__ || defined __mips__ || \
-      defined __powerpc__ || defined __riscv__ || defined __s390__ \
-      || defined __sparc__ || defined __tile__
-		       "0xffffffffffffffff or 0xffffffff"
-#else
-		       "0xffffffff"
-#endif
+		.str = "pathname=" BIG_ADDR("0xffffffffffffffff", "0xffffffff")
 		       ", bpf_fd=0",
 	},
 	{
@@ -468,7 +751,7 @@
 		.data = { .BPF_PROG_TEST_RUN_data = { .prog_fd = -1 } },
 		.size = offsetofend(struct BPF_PROG_TEST_RUN_struct, prog_fd),
 		.str = "test={prog_fd=-1, retval=0, data_size_in=0"
-		       ", data_size_out=0, data_in=0, data_out=0"
+		       ", data_size_out=0, data_in=NULL, data_out=NULL"
 		       ", repeat=0, duration=0}"
 	},
 	{
@@ -594,7 +877,7 @@
 	{
 		.data = { .BPF_OBJ_GET_INFO_BY_FD_data = { .bpf_fd = -1 } },
 		.size = offsetofend(struct BPF_OBJ_GET_INFO_BY_FD_struct, bpf_fd),
-		.str = "info={bpf_fd=-1, info_len=0, info=0}"
+		.str = "info={bpf_fd=-1, info_len=0, info=NULL}"
 	},
 	{
 		.data = { .BPF_OBJ_GET_INFO_BY_FD_data = {
@@ -608,6 +891,194 @@
 	}
 };
 
+
+static uint32_t prog_load_ids[] = { 0, 1, 0xffffffff, 2718281828, };
+uint32_t *prog_load_ids_ptr;
+
+static void
+init_BPF_PROG_QUERY_attr4(struct bpf_attr_check *check)
+{
+	struct BPF_PROG_QUERY_struct *attr = &check->data.BPF_PROG_QUERY_data;
+
+	if (!prog_load_ids_ptr)
+		prog_load_ids_ptr = tail_memdup(prog_load_ids,
+						sizeof(prog_load_ids));
+
+	attr->prog_ids = (uintptr_t) prog_load_ids_ptr;
+	attr->prog_cnt = ARRAY_SIZE(prog_load_ids);
+}
+
+static void
+print_BPF_PROG_QUERY_attr4(const struct bpf_attr_check *check, unsigned long addr)
+{
+	printf("query={target_fd=-1153374643"
+	       ", attach_type=0xfeedface /* BPF_??? */"
+	       ", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
+	       ", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
+#if defined(INJECT_RETVAL) && INJECT_RETVAL > 0
+	       ", prog_ids=[0, 1, 4294967295, 2718281828], prog_cnt=4}"
+#else
+	       ", prog_ids=%p, prog_cnt=4}", prog_load_ids_ptr
+#endif
+	       );
+}
+
+static void
+init_BPF_PROG_QUERY_attr5(struct bpf_attr_check *check)
+{
+	struct BPF_PROG_QUERY_struct *attr = &check->data.BPF_PROG_QUERY_data;
+
+	if (!prog_load_ids_ptr)
+		prog_load_ids_ptr = tail_memdup(prog_load_ids,
+						sizeof(prog_load_ids));
+
+	attr->prog_ids = (uintptr_t) prog_load_ids_ptr;
+	attr->prog_cnt = ARRAY_SIZE(prog_load_ids) + 1;
+}
+
+static void
+print_BPF_PROG_QUERY_attr5(const struct bpf_attr_check *check, unsigned long addr)
+{
+	printf("query={target_fd=-1153374643"
+	       ", attach_type=0xfeedface /* BPF_??? */"
+	       ", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
+	       ", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
+#if defined(INJECT_RETVAL) && INJECT_RETVAL > 0
+	       ", prog_ids=[0, 1, 4294967295, 2718281828, ... /* %p */]"
+	       ", prog_cnt=5}",
+	       prog_load_ids_ptr + ARRAY_SIZE(prog_load_ids)
+#else
+	       ", prog_ids=%p, prog_cnt=5}", prog_load_ids_ptr
+#endif
+	       );
+}
+
+static struct bpf_attr_check BPF_PROG_QUERY_checks[] = {
+	{
+		.data = { .BPF_PROG_QUERY_data = { .target_fd = -1 } },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, target_fd),
+		.str = "query={target_fd=-1"
+		       ", attach_type=BPF_CGROUP_INET_INGRESS, query_flags=0"
+		       ", attach_flags=0, prog_ids=NULL, prog_cnt=0}",
+	},
+	{ /* 1 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 13,
+			.query_flags = 1,
+			.attach_flags = 3,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, attach_flags),
+		.str = "query={target_fd=-1153374643"
+		       ", attach_type=BPF_CGROUP_INET6_POST_BIND"
+		       ", query_flags=BPF_F_QUERY_EFFECTIVE"
+		       ", attach_flags=BPF_F_ALLOW_OVERRIDE|BPF_F_ALLOW_MULTI"
+		       ", prog_ids=NULL, prog_cnt=0}",
+	},
+	{ /* 2 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 14,
+			.query_flags = 0xfffffffe,
+			.attach_flags = 0xfffffffc,
+			.prog_ids = 0xffffffffffffffffULL,
+			.prog_cnt = 2718281828,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.str = "query={target_fd=-1153374643"
+		       ", attach_type=0xe /* BPF_??? */"
+		       ", query_flags=0xfffffffe /* BPF_F_QUERY_??? */"
+		       ", attach_flags=0xfffffffc /* BPF_F_??? */"
+		       ", prog_ids="
+		       BIG_ADDR("0xffffffffffffffff", "0xffffffff")
+		       ", prog_cnt=2718281828}",
+	},
+	{ /* 3 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 0xfeedface,
+			.query_flags = 0xdeadf00d,
+			.attach_flags = 0xbeefcafe,
+			.prog_ids = 0xffffffffffffffffULL,
+			.prog_cnt = 0,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.str = "query={target_fd=-1153374643"
+		       ", attach_type=0xfeedface /* BPF_??? */"
+		       ", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
+		       ", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
+		       ", prog_ids=" BIG_ADDR_MAYBE("0xffffffffffffffff") "[]"
+		       ", prog_cnt=0}",
+	},
+	{ /* 4 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 0xfeedface,
+			.query_flags = 0xdeadf00d,
+			.attach_flags = 0xbeefcafe,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.init_fn = init_BPF_PROG_QUERY_attr4,
+		.print_fn = print_BPF_PROG_QUERY_attr4,
+	},
+	{ /* 5 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 0xfeedface,
+			.query_flags = 0xdeadf00d,
+			.attach_flags = 0xbeefcafe,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.init_fn = init_BPF_PROG_QUERY_attr5,
+		.print_fn = print_BPF_PROG_QUERY_attr5,
+	},
+};
+
+
+static void
+init_BPF_RAW_TRACEPOINT_attr2(struct bpf_attr_check *check)
+{
+	/* TODO: test the 128 byte limit */
+	static const char tp_name[] = "0123456789qwertyuiop0123456789qwe";
+
+	struct BPF_RAW_TRACEPOINT_OPEN_struct *attr =
+		&check->data.BPF_RAW_TRACEPOINT_OPEN_data;
+
+	attr->name = (uintptr_t) tp_name;
+}
+
+static struct bpf_attr_check BPF_RAW_TRACEPOINT_OPEN_checks[] = {
+	{
+		.data = { .BPF_RAW_TRACEPOINT_OPEN_data = { .name = 0 } },
+		.size = offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct,
+				    name),
+		.str = "raw_tracepoint={name=NULL, prog_fd=0}",
+	},
+	{ /* 1 */
+		.data = { .BPF_RAW_TRACEPOINT_OPEN_data = {
+			.name = 0xffffffff00000000ULL,
+			.prog_fd = 0xdeadbeef,
+		} },
+		.size = offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct,
+				    prog_fd),
+		.str = "raw_tracepoint="
+		       "{name=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", prog_fd=-559038737}",
+	},
+	{
+		.data = { .BPF_RAW_TRACEPOINT_OPEN_data = {
+			.prog_fd = 0xdeadbeef,
+		} },
+		.size = offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct,
+				    prog_fd),
+		.init_fn = init_BPF_RAW_TRACEPOINT_attr2,
+		.str = "raw_tracepoint="
+		       "{name=\"0123456789qwertyuiop0123456789qw\"..."
+		       ", prog_fd=-559038737}",
+	}
+};
+
+
 #define CHK(cmd_) \
 	{ \
 		cmd_, #cmd_, \
@@ -635,6 +1106,8 @@
 		CHK(BPF_PROG_GET_FD_BY_ID),
 		CHK(BPF_MAP_GET_FD_BY_ID),
 		CHK(BPF_OBJ_GET_INFO_BY_FD),
+		CHK(BPF_PROG_QUERY),
+		CHK(BPF_RAW_TRACEPOINT_OPEN),
 	};
 
 	page_size = get_page_size();
diff --git a/tests-m32/btrfs-X.test b/tests-m32/btrfs-X.test
new file mode 100755
index 0000000..c129be9
--- /dev/null
+++ b/tests-m32/btrfs-X.test
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Check verbose xlat decoding of btrfs ioctl
+
+. "${srcdir=.}/init.sh"
+
+check_prog grep
+run_prog ../btrfs -X > /dev/null
+run_strace -a16 -Xverbose -eioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-m32/btrfs-vX.test b/tests-m32/btrfs-vX.test
new file mode 100755
index 0000000..163b29f
--- /dev/null
+++ b/tests-m32/btrfs-vX.test
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Check verbose, verbose xlat decoding of btrfs ioctl
+
+. "${srcdir=.}/init.sh"
+
+check_prog grep
+run_prog ../btrfs -v -X > /dev/null
+run_strace -a16 -Xverbose -veioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-m32/btrfs-vwX.test b/tests-m32/btrfs-vwX.test
new file mode 100755
index 0000000..57c6891
--- /dev/null
+++ b/tests-m32/btrfs-vwX.test
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Check verbose, verbose xlat decoding of btrfs ioctl w/ live ioctls.
+
+# WARNING: USE OF THIS TEST WILL MODIFY AN EXISTING BTRFS FILE SYSTEM
+
+# Typical usage:
+# mkfs.btrfs <dev>
+# mount <dev> /mnt
+# BTRFS_MOUNTPOINT=/mnt make check TESTS="btrfs-vwX"
+# umount /mnt
+
+. "${srcdir=.}/init.sh"
+
+if [ -z "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT not set"
+elif [ ! -d "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT does not point to a directory"
+fi
+
+check_prog grep
+run_prog ../btrfs -v -w -X "${BTRFS_MOUNTPOINT}" > /dev/null
+run_strace -a16 -Xverbose -veioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-m32/btrfs-wX.test b/tests-m32/btrfs-wX.test
new file mode 100755
index 0000000..5fb6949
--- /dev/null
+++ b/tests-m32/btrfs-wX.test
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Check verbose xlat decoding of btrfs ioctl w/ live ioctls.
+
+# WARNING: USE OF THIS TEST WILL MODIFY AN EXISTING BTRFS FILE SYSTEM
+
+# Typical usage:
+# mkfs.btrfs <dev>
+# mount <dev> /mnt
+# BTRFS_MOUNTPOINT=/mnt make check TESTS="btrfs-wX"
+# umount /mnt
+
+. "${srcdir=.}/init.sh"
+
+if [ -z "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT not set"
+elif [ ! -d "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT does not point to a directory"
+fi
+
+check_prog grep
+run_prog ../btrfs -w -X "${BTRFS_MOUNTPOINT}" > /dev/null
+run_strace -a16 -Xverbose -eioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-m32/btrfs.c b/tests-m32/btrfs.c
index 415f692..b44bc87 100644
--- a/tests-m32/btrfs.c
+++ b/tests-m32/btrfs.c
@@ -13,6 +13,7 @@
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
+#include <sys/sysmacros.h>
 #include <sys/vfs.h>
 #include <linux/fs.h>
 #include <linux/btrfs.h>
@@ -23,6 +24,7 @@
 #include "xlat/btrfs_balance_flags.h"
 #include "xlat/btrfs_balance_state.h"
 #include "xlat/btrfs_compress_types.h"
+#include "xlat/btrfs_cont_reading_from_srcdev_mode.h"
 #include "xlat/btrfs_defrag_flags.h"
 #include "xlat/btrfs_dev_stats_values.h"
 #include "xlat/btrfs_dev_stats_flags.h"
@@ -62,6 +64,11 @@
 static int btrfs_test_dir_fd;
 static bool verbose;
 static bool write_ok;
+static bool verbose_xlat;
+
+static const char *path;
+static const char dir_name_fmt[] = "strace-test-%d";
+static char dir_name[sizeof(dir_name_fmt) + sizeof(int) * 3];
 
 const unsigned char uuid_reference[BTRFS_UUID_SIZE] = {
 	0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
@@ -152,11 +159,61 @@
 
 
 static const char *
-maybe_print_uint64max(uint64_t val)
+sprint_xlat_(uint32_t val, const char *xlat)
 {
-	if (val == UINT64_MAX)
-		return " /* UINT64_MAX */";
-	return "";
+	static char str[256];
+	int ret;
+
+	if (verbose_xlat) {
+		ret = snprintf(str, sizeof(str), "%#x /* %s */", val, xlat);
+
+		if (ret < 0)
+			perror_msg_and_fail("sprint_ioc(%#x, %s)", val, xlat);
+		if ((unsigned) ret >= sizeof(str))
+			error_msg_and_fail("sprint_ioc(%#x, %s): buffer "
+					   "overflow", val, xlat);
+
+		return str;
+	}
+
+	return xlat;
+}
+
+#define ioc(x_) sprint_xlat_(x_, #x_)
+
+void
+prfl_btrfs(const struct xlat *xlat, const unsigned long long val,
+	   const char *str)
+{
+	if (verbose_xlat && val)
+		printf("%#llx /* ", val);
+	printflags(xlat, val, str);
+	if (verbose_xlat && val)
+		printf(" */");
+}
+
+void
+prxval_btrfs(const struct xlat *xlat, const unsigned long long val,
+	     const char *str, bool known)
+{
+	if (verbose_xlat && known)
+		printf("%#llx /* ", val);
+	printxval(xlat, val, str);
+	if (verbose_xlat && known)
+		printf(" */");
+}
+
+static void
+print_uint64(const char *prefix, uint64_t val)
+{
+	if (val == UINT64_MAX) {
+		if (verbose_xlat)
+			printf("%s%" PRIu64 " /* UINT64_MAX */", prefix, val);
+		else
+			printf("%sUINT64_MAX", prefix);
+	} else {
+		printf("%s%" PRIu64, prefix, val);
+	}
 }
 
 /* takes highest valid flag bit */
@@ -182,10 +239,10 @@
 btrfs_test_trans_ioctls(void)
 {
 	ioctl(-1, BTRFS_IOC_TRANS_START, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TRANS_START) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_TRANS_START));
 
 	ioctl(-1, BTRFS_IOC_TRANS_END, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TRANS_END) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_TRANS_END));
 }
 
 /*
@@ -201,14 +258,15 @@
 	uint64_t u64val = 0xdeadbeefbadc0dedULL;
 
 	ioctl(-1, BTRFS_IOC_SYNC, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SYNC) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SYNC));
 
 	ioctl(-1, BTRFS_IOC_WAIT_SYNC, NULL);
-	printf("ioctl(-1, BTRFS_IOC_WAIT_SYNC, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_WAIT_SYNC));
 
 	ioctl(-1, BTRFS_IOC_WAIT_SYNC, &u64val);
-	printf("ioctl(-1, BTRFS_IOC_WAIT_SYNC, [%" PRIu64
-	       "]) = -1 EBADF (%m)\n", u64val);
+	printf("ioctl(-1, %s, [%" PRIu64 "]) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_WAIT_SYNC), u64val);
 
 	/*
 	 * The live test of BTRFS_IOC_SYNC happens as a part of the test
@@ -220,24 +278,24 @@
 btrfs_print_qgroup_inherit(struct btrfs_qgroup_inherit *inherit)
 {
 	printf("{flags=");
-	printflags(btrfs_qgroup_inherit_flags, inherit->flags,
+	prfl_btrfs(btrfs_qgroup_inherit_flags, inherit->flags,
 		   "BTRFS_QGROUP_INHERIT_???");
 	printf(", num_qgroups=%" PRI__u64
 	       ", num_ref_copies=%" PRI__u64
 	       ", num_excl_copies=%" PRI__u64 ", lim={flags=",
 	       inherit->num_qgroups, inherit->num_ref_copies,
 	       inherit->num_excl_copies);
-	printflags(btrfs_qgroup_limit_flags,
+	prfl_btrfs(btrfs_qgroup_limit_flags,
 		   inherit->lim.flags,
 		   "BTRFS_QGROUP_LIMIT_???");
 	printf(", max_rfer=%" PRI__u64 ", max_excl=%" PRI__u64
 	       ", rsv_rfer=%" PRI__u64 ", rsv_excl=%" PRI__u64
-	       "}, qgroups=",
+	       "}, ",
 	       inherit->lim.max_rfer, inherit->lim.max_excl,
 	       inherit->lim.rsv_rfer, inherit->lim.rsv_excl);
 	if (verbose) {
 		unsigned int i;
-		printf("[");
+		printf("qgroups=[");
 		for (i = 0; i < inherit->num_qgroups; i++) {
 			if (i > 0)
 				printf(", ");
@@ -254,7 +312,7 @@
 btrfs_print_vol_args_v2(struct btrfs_ioctl_vol_args_v2 *args, int print_qgroups)
 {
 	printf("{fd=%d, flags=", (int) args->fd);
-	printflags(btrfs_snap_flags_v2, args->flags, "BTRFS_SUBVOL_???");
+	prfl_btrfs(btrfs_snap_flags_v2, args->flags, "BTRFS_SUBVOL_???");
 
 	if (args->flags & BTRFS_SUBVOL_QGROUP_INHERIT) {
 		printf(", size=%" PRI__u64 ", qgroup_inherit=", args->size);
@@ -302,61 +360,64 @@
 	strcpy(vol_args.name, subvol_name);
 
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE));
 
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE, "
-	       "{fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE, "
-	       "{fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SUBVOL_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_DESTROY,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_DESTROY), vol_args.name);
 
 	strncpy(vol_args.name, long_subvol_name, BTRFS_PATH_NAME_MAX);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SUBVOL_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_DESTROY,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_DESTROY), vol_args.name);
 
 	long_subvol_name = realloc(long_subvol_name, BTRFS_SUBVOL_NAME_MAX);
 	if (!long_subvol_name)
 		perror_msg_and_fail("realloc failed");
 
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE_V2));
 
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 
 	strcpy(vol_args_v2.name, subvol_name);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
 	strncpy(vol_args_v2.name, long_subvol_name, BTRFS_SUBVOL_NAME_MAX);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
@@ -364,12 +425,12 @@
 	strcpy(vol_args_v2.name, subvol_name);
 	vol_args_v2.qgroup_inherit = bad_pointer;
 
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 0);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 0);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
@@ -394,31 +455,33 @@
 	inherit->lim.rsv_excl = u64val;
 	vol_args_v2.qgroup_inherit = inherit;
 
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
 	ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEFAULT_SUBVOL));
 
 	ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, &u64val);
-	printf("ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, [%"
-	       PRIu64 "]) = -1 EBADF (%m)\n", u64val);
+	printf("ioctl(-1, %s, [%" PRIu64 "]) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEFAULT_SUBVOL), u64val);
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_SETFLAGS, ");
-	printflags(btrfs_snap_flags_v2, vol_args_v2.flags,
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_SETFLAGS));
+	prfl_btrfs(btrfs_snap_flags_v2, vol_args_v2.flags,
 		   "BTRFS_SUBVOL_???");
 	ioctl(-1, BTRFS_IOC_SUBVOL_SETFLAGS, &vol_args_v2.flags);
 	printf(") = -1 EBADF (%m)\n");
 
 	if (write_ok) {
 		struct btrfs_ioctl_vol_args_v2 args_passed;
+		long ret;
 		/*
 		 * Returns transid if flags & BTRFS_SUBVOL_CREATE_ASYNC
 		 * - BTRFS_IOC_SNAP_CREATE_V2
@@ -432,11 +495,14 @@
 		vol_args_v2.size = 0;
 		vol_args_v2.qgroup_inherit = NULL;
 		args_passed = vol_args_v2;
-		printf("ioctl(%d, BTRFS_IOC_SUBVOL_CREATE_V2, ",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 		btrfs_print_vol_args_v2(&vol_args_v2, 1);
-		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SUBVOL_CREATE_V2,
+		ret = ioctl(btrfs_test_dir_fd, BTRFS_IOC_SUBVOL_CREATE_V2,
 		      &args_passed);
+		if (ret < 0)
+			perror_msg_and_fail("ioctl(BTRFS_IOC_SUBVOL_CREATE_V2) "
+					    "failed");
 		printf(" => {transid=%" PRI__u64 "}) = 0\n",
 			args_passed.transid);
 
@@ -448,8 +514,8 @@
 		strncpy(vol_args_v2.name, long_subvol_name, BTRFS_NAME_LEN);
 		vol_args_v2.fd = subvolfd;
 		args_passed = vol_args_v2;
-		printf("ioctl(%d, BTRFS_IOC_SNAP_CREATE_V2, ",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SNAP_CREATE_V2));
 		btrfs_print_vol_args_v2(&args_passed, 1);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SNAP_CREATE_V2,
 		      &args_passed);
@@ -460,15 +526,15 @@
 		strncpy(vol_args.name, long_subvol_name, 255);
 		vol_args.name[255] = 0;
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-		printf("ioctl(%d, BTRFS_IOC_SNAP_DESTROY, "
-		       "{fd=%d, name=\"%.*s\"}) = 0\n",
-		       btrfs_test_dir_fd, (int) vol_args.fd, 255, long_subvol_name);
+		printf("ioctl(%d, %s, {fd=%d, name=\"%.*s\"}) = 0\n",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SNAP_DESTROY),
+		       (int) vol_args.fd, 255, long_subvol_name);
 
 		strcpy(vol_args.name, subvol_name);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-		printf("ioctl(%d, BTRFS_IOC_SNAP_DESTROY, "
-		       "{fd=%d, name=\"%s\"}) = 0\n",
-		       btrfs_test_dir_fd, (int) vol_args.fd, subvol_name);
+		printf("ioctl(%d, %s, {fd=%d, name=\"%s\"}) = 0\n",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SNAP_DESTROY),
+		       (int) vol_args.fd, subvol_name);
 
 		close(subvolfd);
 	}
@@ -479,19 +545,18 @@
 btrfs_print_balance_args(struct btrfs_balance_args *args)
 {
 	printf("{profiles=");
-	printflags(btrfs_space_info_flags, args->profiles,
+	prfl_btrfs(btrfs_space_info_flags, args->profiles,
 		   "BTRFS_BLOCK_GROUP_???");
-	printf(", usage=%"PRI__u64 "%s, devid=%"PRI__u64 "%s, pstart=%"PRI__u64
-	       "%s, pend=%"PRI__u64 "%s, vstart=%"PRI__u64 "%s, vend=%"PRI__u64
-	       "%s, target=%"PRI__u64 "%s, flags=",
-		args->usage, maybe_print_uint64max(args->usage),
-		args->devid, maybe_print_uint64max(args->devid),
-		args->pstart, maybe_print_uint64max(args->pstart),
-		args->pend, maybe_print_uint64max(args->pend),
-		args->vstart, maybe_print_uint64max(args->vstart),
-		args->vend, maybe_print_uint64max(args->vend),
-		args->target, maybe_print_uint64max(args->target));
-	printflags(btrfs_balance_args, args->flags, "BTRFS_BALANCE_ARGS_???");
+	print_uint64(", usage=", args->usage);
+	printf(", devid=makedev(%u, %u)",
+	       major(args->devid), minor(args->devid));
+	print_uint64(", pstart=", args->pstart);
+	print_uint64(", pend=", args->pend);
+	print_uint64(", vstart=", args->vstart);
+	print_uint64(", vend=", args->vend);
+	print_uint64(", target=", args->target);
+	printf(", flags=");
+	prfl_btrfs(btrfs_balance_args, args->flags, "BTRFS_BALANCE_ARGS_???");
 	printf("}");
 }
 
@@ -531,25 +596,31 @@
 	struct btrfs_ioctl_vol_args vol_args = {};
 
 	ioctl(-1, BTRFS_IOC_BALANCE_CTL, 1);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_CTL, "
-	       "BTRFS_BALANCE_CTL_PAUSE) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, %sBTRFS_BALANCE_CTL_PAUSE%s) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_BALANCE_CTL),
+	       verbose_xlat ? "0x1 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	ioctl(-1, BTRFS_IOC_BALANCE_CTL, 2);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_CTL, "
-	       "BTRFS_BALANCE_CTL_CANCEL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, "
+	       "%sBTRFS_BALANCE_CTL_CANCEL%s) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_BALANCE_CTL),
+	       verbose_xlat ? "0x2 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	ioctl(-1, BTRFS_IOC_BALANCE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_BALANCE));
 
 	ioctl(-1, BTRFS_IOC_BALANCE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_BALANCE));
 
 	/* struct btrfs_ioctl_balance_args */
 	ioctl(-1, BTRFS_IOC_BALANCE_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_BALANCE_V2));
 
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_V2, {flags=");
-	printflags(btrfs_balance_flags, args.flags, "BTRFS_BALANCE_???");
+	printf("ioctl(-1, %s, {flags=", ioc(BTRFS_IOC_BALANCE_V2));
+	prfl_btrfs(btrfs_balance_flags, args.flags, "BTRFS_BALANCE_???");
 	printf(", data=");
 	btrfs_print_balance_args(&args.data);
 	printf(", meta=");
@@ -560,6 +631,8 @@
 	printf("}) = -1 EBADF (%m)\n");
 
 	if (write_ok) {
+		long ret;
+
 		args.flags = BTRFS_BALANCE_DATA | BTRFS_BALANCE_METADATA |
 			     BTRFS_BALANCE_SYSTEM;
 		args.data.flags = 0;
@@ -568,10 +641,18 @@
 		args.meta.profiles = 0;
 		args.sys.flags = 0;
 		args.sys.profiles = 0;
-		printf("ioctl(%d, BTRFS_IOC_BALANCE_V2, {flags=",
-			btrfs_test_dir_fd);
 
-		printflags(btrfs_balance_flags, args.flags,
+		/*
+		 * We should keep args the same for data in meta in case
+		 * volume-under-tests uses mixed groups data and metadata.
+		 */
+		args.meta.pend = -1ULL;
+		args.meta.vend = -1ULL;
+
+		printf("ioctl(%d, %s, {flags=",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_BALANCE_V2));
+
+		prfl_btrfs(btrfs_balance_flags, args.flags,
 			   "BTRFS_BALANCE_???");
 		printf(", data=");
 		btrfs_print_balance_args(&args.data);
@@ -579,20 +660,24 @@
 		btrfs_print_balance_args(&args.meta);
 		printf(", sys=");
 		btrfs_print_balance_args(&args.sys);
-		ioctl(btrfs_test_dir_fd, BTRFS_IOC_BALANCE_V2,  &args);
-		printf("} => {flags=");
-		printflags(btrfs_balance_flags, args.flags,
-			   "BTRFS_BALANCE_???");
-		printf(", state=");
-		printflags(btrfs_balance_state, args.state,
-			   "BTRFS_BALANCE_STATE_???");
-		printf(", data=");
-		btrfs_print_balance_args(&args.data);
-		printf(", meta=");
-		btrfs_print_balance_args(&args.meta);
-		printf(", sys=");
-		btrfs_print_balance_args(&args.sys);
-		printf("}) = 0\n");
+		ret = ioctl(btrfs_test_dir_fd, BTRFS_IOC_BALANCE_V2,  &args);
+		if (ret < 0) {
+			printf("}) = %s\n", sprintrc(ret));
+		} else {
+			printf("} => {flags=");
+			prfl_btrfs(btrfs_balance_flags, args.flags,
+				   "BTRFS_BALANCE_???");
+			printf(", state=");
+			prfl_btrfs(btrfs_balance_state, args.state,
+				   "BTRFS_BALANCE_STATE_???");
+			printf(", data=");
+			btrfs_print_balance_args(&args.data);
+			printf(", meta=");
+			btrfs_print_balance_args(&args.meta);
+			printf(", sys=");
+			btrfs_print_balance_args(&args.sys);
+			printf("}) = %ld\n", ret);
+		}
 	}
 }
 
@@ -615,38 +700,35 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_RESIZE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_RESIZE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_RESIZE));
 
 	strcpy(args.name, devid);
 	ioctl(-1, BTRFS_IOC_RESIZE, &args);
-	printf("ioctl(-1, BTRFS_IOC_RESIZE, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_RESIZE), (int) args.fd, args.name);
 
 	ioctl(-1, BTRFS_IOC_SCAN_DEV, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCAN_DEV, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCAN_DEV));
 
 	strcpy(args.name, devname);
 	ioctl(-1, BTRFS_IOC_SCAN_DEV, &args);
-	printf("ioctl(-1, BTRFS_IOC_SCAN_DEV, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCAN_DEV), (int) args.fd, args.name);
 
 	ioctl(-1, BTRFS_IOC_ADD_DEV, NULL);
-	printf("ioctl(-1, BTRFS_IOC_ADD_DEV, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_ADD_DEV));
 
 	ioctl(-1, BTRFS_IOC_ADD_DEV, &args);
-	printf("ioctl(-1, BTRFS_IOC_ADD_DEV, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_ADD_DEV), (int) args.fd, args.name);
 
 	ioctl(-1, BTRFS_IOC_RM_DEV, NULL);
-	printf("ioctl(-1, BTRFS_IOC_RM_DEV, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_RM_DEV));
 
 	ioctl(-1, BTRFS_IOC_RM_DEV, &args);
-	printf("ioctl(-1, BTRFS_IOC_RM_DEV, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_RM_DEV), (int) args.fd, args.name);
 
 }
 
@@ -667,17 +749,21 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_CLONE, clone_fd);
-	printf("ioctl(-1, BTRFS_IOC_CLONE or FICLONE, %x) = -1 EBADF (%m)\n",
-		clone_fd);
+	printf("ioctl(-1, %s, %x) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_CLONE, "BTRFS_IOC_CLONE or FICLONE"),
+	       clone_fd);
 
 	ioctl(-1, BTRFS_IOC_CLONE_RANGE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_CLONE_RANGE or FICLONERANGE, "
-	       "NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_CLONE_RANGE,
+			    "BTRFS_IOC_CLONE_RANGE or FICLONERANGE"));
 
 	ioctl(-1, BTRFS_IOC_CLONE_RANGE, &args);
-	printf("ioctl(-1, BTRFS_IOC_CLONE_RANGE or FICLONERANGE, "
+	printf("ioctl(-1, %s, "
 	       "{src_fd=%d, src_offset=%" PRI__u64 ", src_length=%" PRI__u64
 	       ", dest_offset=%" PRI__u64 "}) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_CLONE_RANGE,
+			    "BTRFS_IOC_CLONE_RANGE or FICLONERANGE"),
 		(int) args.src_fd, args.src_offset, args.src_length,
 		args.dest_offset);
 }
@@ -686,16 +772,17 @@
 #define BTRFS_INVALID_COMPRESS (BTRFS_COMPRESS_TYPES + 1)
 
 static void
-btrfs_print_defrag_range_args(struct btrfs_ioctl_defrag_range_args *args)
+btrfs_print_defrag_range_args(struct btrfs_ioctl_defrag_range_args *args,
+			      bool compress_type_known)
 {
-	printf("{start=%" PRIu64 ", len=%" PRIu64 "%s, flags=",
-		(uint64_t) args->start, (uint64_t) args->len,
-		maybe_print_uint64max(args->len));
+	printf("{start=%" PRIu64, (uint64_t) args->start);
+	print_uint64(", len=", args->len);
 
-	printflags(btrfs_defrag_flags, args->flags, "BTRFS_DEFRAG_RANGE_???");
+	printf(", flags=");
+	prfl_btrfs(btrfs_defrag_flags, args->flags, "BTRFS_DEFRAG_RANGE_???");
 	printf(", extent_thresh=%u, compress_type=", args->extent_thresh);
-	printxval(btrfs_compress_types, args->compress_type,
-		  "BTRFS_COMPRESS_???");
+	prxval_btrfs(btrfs_compress_types, args->compress_type,
+		     "BTRFS_COMPRESS_???", compress_type_known);
 	printf("}");
 }
 
@@ -721,29 +808,30 @@
 	 * actually consume it.
 	 */
 	ioctl(-1, BTRFS_IOC_DEFRAG, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEFRAG));
 
 	ioctl(-1, BTRFS_IOC_DEFRAG, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEFRAG));
 
 	/* struct btrfs_ioctl_defrag_range_args */
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEFRAG_RANGE));
 
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, ");
-	btrfs_print_defrag_range_args(&args);
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_DEFRAG_RANGE));
+	btrfs_print_defrag_range_args(&args, true);
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, &args);
 	printf(") = -1 EBADF (%m)\n");
 
 	args.compress_type = BTRFS_INVALID_COMPRESS;
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, ");
-	btrfs_print_defrag_range_args(&args);
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_DEFRAG_RANGE));
+	btrfs_print_defrag_range_args(&args, false);
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, &args);
 	printf(") = -1 EBADF (%m)\n");
 
 	args.len--;
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, ");
-	btrfs_print_defrag_range_args(&args);
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_DEFRAG_RANGE));
+	btrfs_print_defrag_range_args(&args, false);
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, &args);
 	printf(") = -1 EBADF (%m)\n");
 }
@@ -761,18 +849,28 @@
 btrfs_print_objectid(uint64_t objectid)
 {
 	const char *str = xlookup(btrfs_tree_objectids, objectid);
-	printf("%" PRIu64, objectid);
-	if (str)
-		printf(" /* %s */", str);
+	if (str) {
+		if (verbose_xlat)
+			printf("%" PRIu64 " /* %s */", objectid, str);
+		else
+			printf("%s", str);
+	} else {
+		printf("%" PRIu64, objectid);
+	}
 }
 
 static void
 btrfs_print_key_type(uint32_t type)
 {
 	const char *str = xlookup(btrfs_key_types, type);
-	printf("%u", type);
-	if (str)
-		printf(" /* %s */", str);
+	if (str) {
+		if (verbose_xlat)
+			printf("%u /* %s */", type, str);
+		else
+			printf("%s", str);
+	} else {
+		printf("%u", type);
+	}
 }
 
 static void
@@ -788,18 +886,10 @@
 		printf(", max_objectid=");
 		btrfs_print_objectid(key->max_objectid);
 	}
-	if (key->min_offset)
-		printf(", min_offset=%" PRI__u64 "%s",
-		       key->min_offset, maybe_print_uint64max(key->min_offset));
-	if (key->max_offset)
-		printf(", max_offset=%" PRI__u64 "%s",
-		       key->max_offset, maybe_print_uint64max(key->max_offset));
-	if (key->min_transid)
-		printf(", min_transid=%" PRI__u64 "%s", key->min_transid,
-		       maybe_print_uint64max(key->min_transid));
-	if (key->max_transid)
-		printf(", max_transid=%" PRI__u64 "%s", key->max_transid,
-		       maybe_print_uint64max(key->max_transid));
+	print_uint64(", min_offset=", key->min_offset);
+	print_uint64(", max_offset=", key->max_offset);
+	print_uint64(", min_transid=", key->min_transid);
+	print_uint64(", max_transid=", key->max_transid);
 	printf(", min_type=");
 	btrfs_print_key_type(key->min_type);
 	printf(", max_type=");
@@ -814,7 +904,7 @@
 	if (verbose) {
 		uint64_t i;
 		uint64_t off = 0;
-		printf("[");
+		printf("buf=[");
 		for (i = 0; i < key->nr_items; i++) {
 			struct btrfs_ioctl_search_header *sh;
 			sh = (typeof(sh))(buf + off);
@@ -859,19 +949,21 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_TREE_SEARCH));
 
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_TREE_SEARCH_V2));
 
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -880,13 +972,13 @@
 	key_reference.min_objectid = 6;
 	key_reference.max_objectid = 7;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -895,13 +987,13 @@
 	key_reference.min_offset++;
 	key_reference.max_offset--;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -910,13 +1002,13 @@
 	key_reference.min_transid++;
 	key_reference.max_transid--;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -925,13 +1017,13 @@
 	key_reference.min_type = 1;
 	key_reference.max_type = 12;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -950,11 +1042,11 @@
 		key_reference.max_offset = -1ULL;
 
 		search_args.key = key_reference;
-		printf("ioctl(%d, BTRFS_IOC_TREE_SEARCH, {",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_TREE_SEARCH));
 		btrfs_print_search_key(&search_args.key);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_TREE_SEARCH, &search_args);
-		printf("} => {key={nr_items=%u}, buf=",
+		printf("} => {key={nr_items=%u}, ",
 			search_args.key.nr_items);
 		btrfs_print_tree_search_buf(&search_args.key, search_args.buf,
 					    sizeof(search_args.buf));
@@ -966,12 +1058,12 @@
 
 		args->key = key_reference;
 		args->buf_size = bufsize;
-		printf("ioctl(%d, BTRFS_IOC_TREE_SEARCH_V2, {",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_TREE_SEARCH_V2));
 		btrfs_print_search_key(&key_reference);
 		printf(", buf_size=%" PRIu64 "}", (uint64_t) args->buf_size);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_TREE_SEARCH_V2, args);
-		printf(" => {key={nr_items=%u}, buf_size=%" PRIu64 ", buf=",
+		printf(" => {key={nr_items=%u}, buf_size=%" PRIu64 ", ",
 			args->key.nr_items, (uint64_t)args->buf_size);
 		btrfs_print_tree_search_buf(&args->key, args->buf,
 					    args->buf_size);
@@ -979,8 +1071,8 @@
 
 		args->key = key_reference;
 		args->buf_size = sizeof(struct btrfs_ioctl_search_header);
-		printf("ioctl(%d, BTRFS_IOC_TREE_SEARCH_V2, {",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_TREE_SEARCH_V2));
 		btrfs_print_search_key(&args->key);
 		printf(", buf_size=%" PRIu64 "}", (uint64_t)args->buf_size);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_TREE_SEARCH_V2, args);
@@ -1003,9 +1095,10 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_INO_LOOKUP, NULL);
-	printf("ioctl(-1, BTRFS_IOC_INO_LOOKUP, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_INO_LOOKUP));
 
-	printf("ioctl(-1, BTRFS_IOC_INO_LOOKUP, {treeid=");
+	printf("ioctl(-1, %s, {treeid=", ioc(BTRFS_IOC_INO_LOOKUP));
 	btrfs_print_objectid(args.treeid);
 	printf(", objectid=");
 	btrfs_print_objectid(args.objectid);
@@ -1013,8 +1106,8 @@
 	printf("}) = -1 EBADF (%m)\n");
 
 	if (btrfs_test_root) {
-		printf("ioctl(%d, BTRFS_IOC_INO_LOOKUP, {treeid=",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {treeid=",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_INO_LOOKUP));
 		btrfs_print_objectid(args.treeid);
 		printf(", objectid=");
 		btrfs_print_objectid(args.objectid);
@@ -1033,20 +1126,20 @@
 	struct btrfs_ioctl_space_args args = {};
 
 	ioctl(-1, BTRFS_IOC_SPACE_INFO, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SPACE_INFO, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SPACE_INFO));
 
 	ioctl(-1, BTRFS_IOC_SPACE_INFO, &args);
-	printf("ioctl(-1, BTRFS_IOC_SPACE_INFO, "
-	       "{space_slots=%" PRI__u64 "}) = -1 EBADF (%m)\n",
-		args.space_slots);
+	printf("ioctl(-1, %s, {space_slots=%" PRI__u64 "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SPACE_INFO), args.space_slots);
 
 	if (btrfs_test_root) {
 		struct btrfs_ioctl_space_args args_passed;
 		struct btrfs_ioctl_space_args *argsp;
 		args_passed = args;
-		printf("ioctl(%d, BTRFS_IOC_SPACE_INFO, "
-		       "{space_slots=%" PRI__u64 "}",
-		       btrfs_test_dir_fd, args_passed.space_slots);
+		printf("ioctl(%d, %s, {space_slots=%" PRI__u64 "}",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SPACE_INFO),
+		       args_passed.space_slots);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SPACE_INFO, &args_passed);
 		printf(" => {total_spaces=%" PRI__u64 "}) = 0\n",
 			args_passed.total_spaces);
@@ -1058,22 +1151,22 @@
 
 		*argsp = args;
 		argsp->space_slots = args_passed.total_spaces;
-		printf("ioctl(%d, BTRFS_IOC_SPACE_INFO, "
-		       "{space_slots=%" PRI__u64 "}",
-		       btrfs_test_dir_fd, argsp->space_slots);
+		printf("ioctl(%d, %s, {space_slots=%" PRI__u64 "}",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SPACE_INFO),
+		       argsp->space_slots);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SPACE_INFO, argsp);
-		printf(" => {total_spaces=%" PRI__u64 ", spaces=",
+		printf(" => {total_spaces=%" PRI__u64 ", ",
 			argsp->total_spaces);
 		if (verbose) {
 			unsigned int i;
-			printf("[");
+			printf("spaces=[");
 			for (i = 0; i < argsp->total_spaces; i++) {
 				struct btrfs_ioctl_space_info *info;
 				info = &argsp->spaces[i];
 				if (i)
 					printf(", ");
 				printf("{flags=");
-				printflags(btrfs_space_info_flags, info->flags,
+				prfl_btrfs(btrfs_space_info_flags, info->flags,
 					   "BTRFS_SPACE_INFO_???");
 				printf(", total_bytes=%" PRI__u64
 				       ", used_bytes=%" PRI__u64 "}",
@@ -1106,25 +1199,28 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_SCRUB, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SCRUB));
 
 	ioctl(-1, BTRFS_IOC_SCRUB_CANCEL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB_CANCEL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SCRUB_CANCEL));
 
-	printf("ioctl(-1, BTRFS_IOC_SCRUB, {devid=%" PRI__u64 ", start=%"
-		PRI__u64 "%s, end=%" PRI__u64 "%s, flags=",
-		args.devid, args.start, maybe_print_uint64max(args.start),
-		args.end, maybe_print_uint64max(args.end));
-	printflags(btrfs_scrub_flags, args.flags, "BTRFS_SCRUB_???");
+	printf("ioctl(-1, %s, {devid=makedev(%u, %u)",
+	       ioc(BTRFS_IOC_SCRUB), major(args.devid), minor(args.devid));
+	print_uint64(", start=", args.start);
+	print_uint64(", end=", args.end);
+	printf(", flags=");
+	prfl_btrfs(btrfs_scrub_flags, args.flags, "BTRFS_SCRUB_???");
 	ioctl(-1, BTRFS_IOC_SCRUB, &args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCRUB_PROGRESS));
 
 	ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, &args);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, "
-	       "{devid=%" PRI__u64 "}) = -1 EBADF (%m)\n", args.devid);
+	printf("ioctl(-1, %s, {devid=makedev(%u, %u)}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCRUB_PROGRESS),
+	       major(args.devid), minor(args.devid));
 }
 
 /*
@@ -1140,12 +1236,14 @@
 	memcpy(&args.uuid, uuid_reference, BTRFS_UUID_SIZE);
 
 	ioctl(-1, BTRFS_IOC_DEV_INFO, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEV_INFO, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEV_INFO));
 
 	ioctl(-1, BTRFS_IOC_DEV_INFO, &args);
-	printf("ioctl(-1, BTRFS_IOC_DEV_INFO, "
-	       "{devid=%" PRI__u64 ", uuid=%s}) = -1 EBADF (%m)\n",
-		args.devid, uuid_reference_string);
+	printf("ioctl(-1, %s, "
+	       "{devid=makedev(%u, %u), uuid=%s}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEV_INFO), major(args.devid), minor(args.devid),
+	       uuid_reference_string);
 }
 
 /*
@@ -1177,32 +1275,32 @@
 
 
 	ioctl(-1, BTRFS_IOC_INO_PATHS, NULL);
-	printf("ioctl(-1, BTRFS_IOC_INO_PATHS, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_INO_PATHS));
 
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, NULL);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_LOGICAL_INO));
 
 	ioctl(-1, BTRFS_IOC_INO_PATHS, &args);
-	printf("ioctl(-1, BTRFS_IOC_INO_PATHS, "
-	       "{inum=%" PRI__u64 ", size=%" PRI__u64
+	printf("ioctl(-1, %s, {inum=%" PRI__u64 ", size=%" PRI__u64
 	       ", fspath=NULL}) = -1 EBADF (%m)\n",
-	       args.inum, args.size);
+	       ioc(BTRFS_IOC_INO_PATHS), args.inum, args.size);
 
 	args.fspath = (uintptr_t) buf;
 	ioctl(-1, BTRFS_IOC_INO_PATHS, &args);
-	printf("ioctl(-1, BTRFS_IOC_INO_PATHS, "
-	       "{inum=%" PRI__u64 ", size=%" PRI__u64
+	printf("ioctl(-1, %s, {inum=%" PRI__u64 ", size=%" PRI__u64
 	       ", fspath=0x%" PRI__x64 "}) = -1 EBADF (%m)\n",
-	       args.inum, args.size, args.fspath);
+	       ioc(BTRFS_IOC_INO_PATHS), args.inum, args.size, args.fspath);
 
 	args.fspath = 0;
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, &args);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+	printf("ioctl(-1, %s, {logical=%" PRI__u64
 	       ", size=%" PRI__u64 ", reserved=[0xdeadc0defacefeeb"
 	       ", 0xdeadc0defacefeec, 0xdeadc0defacefeed]"
 	       ", flags=0xdeadc0defacefeee /* BTRFS_LOGICAL_INO_ARGS_??? */"
 	       ", inodes=NULL}) = -1 EBADF (%m)\n",
-	       args.inum, args.size);
+	       ioc(BTRFS_IOC_LOGICAL_INO), args.inum, args.size);
 
 	args.fspath = (uintptr_t) buf;
 	args.reserved[0] = 0;
@@ -1215,11 +1313,13 @@
 			1;
 
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, &args);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+	printf("ioctl(-1, %s, {logical=%" PRI__u64
 	       ", size=%" PRI__u64 ", reserved=[0, 0xdeadc0defacefeec, 0]"
-	       ", flags=BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET"
+	       ", flags=%sBTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET%s"
 	       ", inodes=0x%" PRI__x64 "}) = -1 EBADF (%m)\n",
-	       args.inum, args.size, args.fspath);
+	       ioc(BTRFS_IOC_LOGICAL_INO), args.inum, args.size,
+	       verbose_xlat ? "0x1 /* " : "", verbose_xlat ? " */" : "",
+	       args.fspath);
 
 	args.reserved[1] = 0;
 #ifdef HAVE_BTRFS_IOCTL_LOGICAL_INO_ARGS
@@ -1230,9 +1330,10 @@
 			0;
 
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, &args);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+	printf("ioctl(-1, %s, {logical=%" PRI__u64
 	       ", size=%" PRI__u64 ", flags=0, inodes=0x%" PRI__x64
-	       "}) = -1 EBADF (%m)\n", args.inum, args.size, args.fspath);
+	       "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_LOGICAL_INO), args.inum, args.size, args.fspath);
 
 #ifdef HAVE_LINUX_FIEMAP_H
 	if (btrfs_test_root) {
@@ -1248,17 +1349,16 @@
 			perror_msg_and_fail("fstat failed");
 
 		args.inum = si.st_ino;
-		printf("ioctl(%d, BTRFS_IOC_INO_PATHS, "
-		       "{inum=%" PRI__u64 ", size=%" PRI__u64
+		printf("ioctl(%d, %s, {inum=%" PRI__u64 ", size=%" PRI__u64
 		       ", fspath=0x%" PRI__x64 "}",
-		       btrfs_test_dir_fd, args.inum, args.size,
-		       args.fspath);
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_INO_PATHS),
+		       args.inum, args.size, args.fspath);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_INO_PATHS, &args);
-		printf(" => {fspath={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, val=",
+		printf(" => {fspath={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, ",
 			data->bytes_left, data->bytes_missing, data->elem_cnt,
 			data->elem_missed);
 		if (verbose) {
-			printf("[\"strace-test\"]");
+			printf("val=[\"%s\"]", dir_name);
 		} else
 			printf("...");
 		printf("}}) = 0\n");
@@ -1280,7 +1380,7 @@
 		 */
 		fsync(fd);
 		ioctl(fd, BTRFS_IOC_SYNC, NULL);
-		printf("ioctl(%d, BTRFS_IOC_SYNC) = 0\n", fd);
+		printf("ioctl(%d, %s) = 0\n", fd, ioc(BTRFS_IOC_SYNC));
 
 		size = sizeof(*fiemap) + 2 * sizeof(fiemap->fm_extents[0]);
 		fiemap = malloc(size);
@@ -1292,18 +1392,19 @@
 		fiemap->fm_extent_count = 2;
 
 		/* This is also a live test for FIEMAP */
-		printf("ioctl(%d, FS_IOC_FIEMAP, {fm_start=%" PRI__u64
+		printf("ioctl(%d, %s, {fm_start=%" PRI__u64
 		       ", fm_length=%" PRI__u64 ", fm_flags=",
-		       fd, fiemap->fm_start, fiemap->fm_length);
-		printflags(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
+		       fd, ioc(FS_IOC_FIEMAP),
+		       fiemap->fm_start, fiemap->fm_length);
+		prfl_btrfs(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
 		printf(", fm_extent_count=%u}", fiemap->fm_extent_count);
 		ioctl(fd, FS_IOC_FIEMAP, fiemap);
 		printf(" => {fm_flags=");
-		printflags(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
-		printf(", fm_mapped_extents=%u, fm_extents=",
+		prfl_btrfs(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
+		printf(", fm_mapped_extents=%u, ",
 			fiemap->fm_mapped_extents);
 		if (verbose) {
-			printf("[");
+			printf("fm_extents=[");
 			unsigned int i;
 			for (i = 0; i < fiemap->fm_mapped_extents; i++) {
 				struct fiemap_extent *fe;
@@ -1316,7 +1417,7 @@
 				       ", ",
 				       fe->fe_logical, fe->fe_physical,
 				       fe->fe_length);
-				printflags(fiemap_extent_flags, fe->fe_flags,
+				prfl_btrfs(fiemap_extent_flags, fe->fe_flags,
 					   "FIEMAP_EXTENT_???");
 				printf("}");
 			}
@@ -1326,15 +1427,16 @@
 		printf("}) = 0\n");
 
 		args.inum = fiemap->fm_extents[0].fe_physical;
-		printf("ioctl(%d, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+		printf("ioctl(%d, %s, {logical=%" PRI__u64
 		       ", size=%" PRI__u64 ", flags=0, inodes=0x%" PRI__x64 "}",
-		       fd, args.inum, args.size, args.fspath);
+		       fd, ioc(BTRFS_IOC_LOGICAL_INO),
+		       args.inum, args.size, args.fspath);
 		ioctl(fd, BTRFS_IOC_LOGICAL_INO, &args);
-		printf(" => {inodes={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, val=",
+		printf(" => {inodes={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, ",
 			data->bytes_left, data->bytes_missing, data->elem_cnt,
 			data->elem_missed);
 		if (verbose) {
-			printf("[{inum=%llu, offset=0, root=5}]",
+			printf("val=[{inum=%llu, offset=0, root=5}]",
 			       (unsigned long long) si.st_ino);
 		} else
 			printf("...");
@@ -1359,18 +1461,23 @@
 			.nsec = 12345,
 		},
 	};
+	int saved_errno;
+
 	memcpy(&args.uuid, uuid_reference, BTRFS_UUID_SIZE);
 
 	ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, "
-	       "NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_RECEIVED_SUBVOL));
 
 	ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, &args);
-	printf("ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, "
-	       "{uuid=%s, stransid=%" PRI__u64 ", stime=%" PRI__u64
-	       ".%u, flags=0}) = -1 EBADF (%m)\n",
-	       uuid_reference_string, args.stransid, args.stime.sec,
-	       args.stime.nsec);
+	saved_errno = errno;
+	printf("ioctl(-1, %s, {uuid=%s, stransid=%" PRI__u64
+	       ", stime={sec=%" PRI__u64 ", nsec=%u}",
+	       ioc(BTRFS_IOC_SET_RECEIVED_SUBVOL), uuid_reference_string,
+	       args.stransid, args.stime.sec, args.stime.nsec);
+	print_time_t_nsec(args.stime.sec, args.stime.nsec, true);
+	errno = saved_errno;
+	printf(", flags=0}) = -1 EBADF (%m)\n");
 }
 
 /*
@@ -1388,29 +1495,25 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_SEND, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SEND, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SEND));
 
-	printf("ioctl(-1, BTRFS_IOC_SEND, "
-	       "{send_fd=%d, clone_sources_count=%" PRI__u64
-	       ", clone_sources=",
+	printf("ioctl(-1, %s, {send_fd=%d, clone_sources_count=%" PRI__u64
+	       ", clone_sources=NULL",
+	       ioc(BTRFS_IOC_SEND),
 	       (int) args.send_fd, args.clone_sources_count);
-	if (verbose)
-		printf("NULL");
-	else
-		printf("...");
 	printf(", parent_root=");
 	btrfs_print_objectid(args.parent_root);
 	printf(", flags=");
-	printflags(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
+	prfl_btrfs(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
 	ioctl(-1, BTRFS_IOC_SEND, &args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	args.clone_sources_count = 2;
 	args.clone_sources = (__u64 *) (void *) u64_array;
 
-	printf("ioctl(-1, BTRFS_IOC_SEND, "
-	       "{send_fd=%d, clone_sources_count=%" PRI__u64
+	printf("ioctl(-1, %s, {send_fd=%d, clone_sources_count=%" PRI__u64
 	       ", clone_sources=",
+	       ioc(BTRFS_IOC_SEND),
 	       (int) args.send_fd, args.clone_sources_count);
 	if (verbose) {
 		printf("[");
@@ -1419,11 +1522,11 @@
 		btrfs_print_objectid(u64_array[1]);
 		printf("]");
 	} else
-		printf("...");
+		printf("%p", args.clone_sources);
 	printf(", parent_root=");
 	btrfs_print_objectid(args.parent_root);
 	printf(", flags=");
-	printflags(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
+	prfl_btrfs(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
 	ioctl(-1, BTRFS_IOC_SEND, &args);
 	printf("}) = -1 EBADF (%m)\n");
 }
@@ -1440,26 +1543,37 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL));
 
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "BTRFS_QUOTA_CTL_ENABLE}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {cmd=%sBTRFS_QUOTA_CTL_ENABLE%s}) "
+	       "= -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL),
+	       verbose_xlat ? "0x1 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	args.cmd = 2;
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "BTRFS_QUOTA_CTL_DISABLE}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {cmd=%sBTRFS_QUOTA_CTL_DISABLE%s}) "
+	       "= -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL),
+	       verbose_xlat ? "0x2 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	args.cmd = 3;
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "BTRFS_QUOTA_CTL_RESCAN__NOTUSED}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, "
+	       "{cmd=%sBTRFS_QUOTA_CTL_RESCAN__NOTUSED%s}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL),
+	       verbose_xlat ? "0x3 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	args.cmd = 4;
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "0x4 /* BTRFS_QUOTA_CTL_??? */}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, "
+	       "{cmd=0x4 /* BTRFS_QUOTA_CTL_??? */}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL));
 }
 
 /*
@@ -1476,12 +1590,14 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QGROUP_ASSIGN));
 
 	ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, &args);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, "
+	printf("ioctl(-1, %s, "
 	       "{assign=%" PRI__u64 ", src=%" PRI__u64 ", dst=%" PRI__u64
-	       "}) = -1 EBADF (%m)\n", args.assign, args.src, args.dst);
+	       "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QGROUP_ASSIGN), args.assign, args.src, args.dst);
 }
 
 /*
@@ -1497,12 +1613,13 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QGROUP_CREATE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_CREATE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_QGROUP_CREATE));
 
 	ioctl(-1, BTRFS_IOC_QGROUP_CREATE, &args);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_CREATE, "
+	printf("ioctl(-1, %s, "
 	       "{create=%" PRI__u64 ", qgroupid=%" PRI__u64
-	       "}) = -1 EBADF (%m)\n", args.create, args.qgroupid);
+	       "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QGROUP_CREATE), args.create, args.qgroupid);
 }
 
 /*
@@ -1519,13 +1636,15 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_RESCAN));
 
 	ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, "
-	       "{flags=0}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {flags=0}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_RESCAN));
 	ioctl(-1, BTRFS_IOC_QUOTA_RESCAN_WAIT, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_RESCAN_WAIT) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_RESCAN_WAIT));
 
 }
 
@@ -1542,20 +1661,21 @@
 	char label[BTRFS_LABEL_SIZE] = "btrfs-label";
 
 	ioctl(-1, BTRFS_IOC_SET_FSLABEL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SET_FSLABEL, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_FSLABEL));
 
 	ioctl(-1, BTRFS_IOC_SET_FSLABEL, label);
-	printf("ioctl(-1, BTRFS_IOC_SET_FSLABEL, \"%s\") = -1 EBADF (%m)\n",
-		label);
+	printf("ioctl(-1, %s, \"%s\") = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_FSLABEL), label);
 
 	if (write_ok) {
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SET_FSLABEL, label);
-		printf("ioctl(%d, BTRFS_IOC_SET_FSLABEL, \"%s\") = 0\n",
-			btrfs_test_dir_fd, label);
+		printf("ioctl(%d, %s, \"%s\") = 0\n",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_SET_FSLABEL), label);
 
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_FSLABEL, label);
-		printf("ioctl(%d, BTRFS_IOC_GET_FSLABEL, \"%s\") = 0\n",
-			btrfs_test_dir_fd, label);
+		printf("ioctl(%d, %s, \"%s\") = 0\n",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_GET_FSLABEL), label);
 	}
 }
 
@@ -1573,12 +1693,13 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_GET_DEV_STATS, NULL);
-	printf("ioctl(-1, BTRFS_IOC_GET_DEV_STATS, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_GET_DEV_STATS));
 
-	printf("ioctl(-1, BTRFS_IOC_GET_DEV_STATS, {devid=%" PRI__u64
-		", nr_items=%" PRI__u64 ", flags=",
-		args.devid, args.nr_items);
-	printflags(btrfs_dev_stats_flags, args.flags,
+	printf("ioctl(-1, %s, {devid=makedev(%u, %u)"
+	       ", nr_items=%" PRI__u64 ", flags=",
+	       ioc(BTRFS_IOC_GET_DEV_STATS),
+	       major(args.devid), minor(args.devid), args.nr_items);
+	prfl_btrfs(btrfs_dev_stats_flags, args.flags,
 		     "BTRFS_DEV_STATS_???");
 	ioctl(-1, BTRFS_IOC_GET_DEV_STATS, &args);
 	printf("}) = -1 EBADF (%m)\n");
@@ -1586,24 +1707,33 @@
 	if (write_ok) {
 		unsigned int i;
 		args.flags = BTRFS_DEV_STATS_RESET;
-		printf("ioctl(%d, BTRFS_IOC_GET_DEV_STATS, {devid=%" PRI__u64
+		printf("ioctl(%d, %s, {devid=makedev(%u, %u)"
 			", nr_items=%" PRI__u64 ", flags=",
-			btrfs_test_dir_fd, args.devid, args.nr_items);
-		printflags(btrfs_dev_stats_flags, args.flags,
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_GET_DEV_STATS),
+			major(args.devid), minor(args.devid), args.nr_items);
+		prfl_btrfs(btrfs_dev_stats_flags, args.flags,
 			     "BTRFS_DEV_STATS_???");
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_DEV_STATS, &args);
 		printf("} => {nr_items=%" PRI__u64 ", flags=",
 			args.nr_items);
-		printflags(btrfs_dev_stats_flags, args.flags,
+		prfl_btrfs(btrfs_dev_stats_flags, args.flags,
 			   "BTRFS_DEV_STATS_???");
 		printf(", [");
 		for (i = 0; i < args.nr_items; i++) {
 			const char *name = xlookup(btrfs_dev_stats_values, i);
 			if (i)
 				printf(", ");
+
+			if (name) {
+				if (verbose_xlat)
+					printf("[%u /* %s */] = ", i, name);
+				else
+					printf("[%s] = ", name);
+			} else {
+				printf("[%u] = ", i);
+			}
+
 			printf("%" PRI__u64, args.values[i]);
-			if (name)
-				printf(" /* %s */", name);
 		}
 		printf("]}) = 0\n");
 	}
@@ -1627,22 +1757,38 @@
 
 	/* struct btrfs_ioctl_dev_replace_args */
 	ioctl(-1, BTRFS_IOC_DEV_REPLACE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEV_REPLACE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEV_REPLACE));
 
-	ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args);
-	printf("ioctl(-1, BTRFS_IOC_DEV_REPLACE, "
-	       "{cmd=BTRFS_IOCTL_DEV_REPLACE_CMD_START, start={srcdevid=%"
-	       PRI__u64 ", cont_reading_from_srcdev_mode=%" PRI__u64
-	       ", srcdev_name=\"%s\", tgtdev_name=\"%s\"}}) = -1 EBADF (%m)\n",
-	       args.start.srcdevid,
-	       args.start.cont_reading_from_srcdev_mode,
-	       (char *)args.start.srcdev_name,
-	       (char *)args.start.tgtdev_name);
+	for (unsigned long i = 0; i < 3; i++) {
+		int saved_errno;
+
+		args.start.cont_reading_from_srcdev_mode = i;
+		ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args);
+		saved_errno = errno;
+		printf("ioctl(-1, %s, "
+		       "{cmd=%sBTRFS_IOCTL_DEV_REPLACE_CMD_START%s"
+		       ", start={srcdevid=makedev(%u, %u)"
+		       ", cont_reading_from_srcdev_mode=",
+		       ioc(BTRFS_IOC_DEV_REPLACE),
+		       verbose_xlat ? "0 /* " : "", verbose_xlat ? " */" : "",
+		       major(args.start.srcdevid), minor(args.start.srcdevid));
+		prxval_btrfs(btrfs_cont_reading_from_srcdev_mode,
+			     args.start.cont_reading_from_srcdev_mode,
+			     "BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV"
+			     "_MODE_???", i < 2);
+		errno = saved_errno;
+		printf(", srcdev_name=\"%s\", tgtdev_name=\"%s\"}}) "
+		       "= -1 EBADF (%m)\n",
+		       (char *)args.start.srcdev_name,
+		       (char *)args.start.tgtdev_name);
+	}
 
 	args.cmd = 1;
 	ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args);
-	printf("ioctl(-1, BTRFS_IOC_DEV_REPLACE, "
-	       "{cmd=BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {cmd=%sBTRFS_IOCTL_DEV_REPLACE_CMD_STATUS%s}) "
+	       "= -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEV_REPLACE),
+	       verbose_xlat ? "0x1 /* " : "", verbose_xlat ? " */" : "");
 }
 
 static void
@@ -1656,13 +1802,16 @@
 	struct file_dedupe_range *argsp;
 
 	ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME, NULL);
-	printf("ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
-	       "NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+			    "BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE"));
 
-	printf("ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
+	printf("ioctl(-1, %s, "
 	       "{src_offset=%" PRIu64
 	       ", src_length=%" PRIu64
 	       ", dest_count=%hu, info=[]",
+	       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+			    "BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE"),
 		(uint64_t)args.src_offset,
 		(uint64_t)args.src_length, args.dest_count);
 	ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME, &args);
@@ -1682,10 +1831,12 @@
 	argsp->info[2].dest_fd = 2;
 	argsp->info[2].dest_offset = 20480;
 
-	printf("ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
+	printf("ioctl(-1, %s, "
 	       "{src_offset=%" PRIu64
 	       ", src_length=%" PRIu64
 	       ", dest_count=%hu, info=",
+	       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+			    "BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE"),
 		(int64_t)argsp->src_offset,
 		(uint64_t)argsp->src_length, argsp->dest_count);
 		printf("[{dest_fd=%" PRId64 ", dest_offset=%" PRIu64
@@ -1744,9 +1895,12 @@
 		argsp->info[2].dest_fd = fd2;
 		argsp->info[2].dest_offset = 20480;
 
-		printf("ioctl(%d, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
+		printf("ioctl(%d, %s, "
 		       "{src_offset=%" PRIu64 ", src_length=%" PRIu64
 		       ", dest_count=%hu, info=", fd1,
+		       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+				    "BTRFS_IOC_FILE_EXTENT_SAME"
+				    " or FIDEDUPERANGE"),
 		       (uint64_t)argsp->src_offset,
 		       (uint64_t)argsp->src_length, argsp->dest_count);
 		printf("[{dest_fd=%" PRId64 ", dest_offset=%" PRIu64
@@ -1797,11 +1951,11 @@
 		   "BTRFS_FEATURE_COMPAT_???");
 
 	printf(", compat_ro_flags=");
-	printflags(btrfs_features_compat_ro, flags->compat_ro_flags,
+	prfl_btrfs(btrfs_features_compat_ro, flags->compat_ro_flags,
 		   "BTRFS_FEATURE_COMPAT_RO_???");
 
 	printf(", incompat_flags=");
-	printflags(btrfs_features_incompat, flags->incompat_flags,
+	prfl_btrfs(btrfs_features_incompat, flags->incompat_flags,
 		   "BTRFS_FEATURE_INCOMPAT_???");
 	printf("}");
 }
@@ -1831,9 +1985,10 @@
 	struct btrfs_ioctl_feature_flags supported_features[3];
 
 	ioctl(-1, BTRFS_IOC_SET_FEATURES, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SET_FEATURES, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_FEATURES));
 
-	printf("ioctl(-1, BTRFS_IOC_SET_FEATURES, [");
+	printf("ioctl(-1, %s, [", ioc(BTRFS_IOC_SET_FEATURES));
 	btrfs_print_features(&args[0]);
 	printf(", ");
 	btrfs_print_features(&args[1]);
@@ -1841,8 +1996,8 @@
 	printf("]) = -1 EBADF (%m)\n");
 
 	if (btrfs_test_root) {
-		printf("ioctl(%d, BTRFS_IOC_GET_FEATURES, ",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_GET_FEATURES));
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_FEATURES,
 		      &supported_features);
 		btrfs_print_features(&supported_features[0]);
@@ -1850,8 +2005,9 @@
 
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_SUPPORTED_FEATURES,
 		      &supported_features);
-		printf("ioctl(%d, BTRFS_IOC_GET_SUPPORTED_FEATURES, ",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd,
+		       ioc(BTRFS_IOC_GET_SUPPORTED_FEATURES));
 		printf("[");
 		btrfs_print_features(&supported_features[0]);
 		printf(" /* supported */, ");
@@ -1880,19 +2036,28 @@
 	unsigned int i;
 	for (i = 0; i < ARRAY_SIZE(btrfs_read_cmd); ++i) {
 		ioctl(-1, (unsigned long) btrfs_read_cmd[i].val, 0);
-		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", btrfs_read_cmd[i].str);
+		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+		       sprint_xlat_(btrfs_read_cmd[i].val,
+				    btrfs_read_cmd[i].str));
 	}
 }
 
+static void
+rm_test_dir(void)
+{
+	int rootfd = open(path, O_RDONLY|O_DIRECTORY);
+
+	unlinkat(rootfd, dir_name, AT_REMOVEDIR);
+}
+
 int
 main(int argc, char *argv[])
 {
 
 	int opt;
 	int ret;
-	const char *path;
 
-	while ((opt = getopt(argc, argv, "wv")) != -1) {
+	while ((opt = getopt(argc, argv, "wvX")) != -1) {
 		switch (opt) {
 		case 'v':
 			/*
@@ -1904,11 +2069,18 @@
 		case 'w':
 			write_ok = true;
 			break;
+		case 'X':
+			verbose_xlat = true;
+			break;
 		default:
-			error_msg_and_fail("usage: btrfs [-v] [-w] [path]");
+			error_msg_and_fail("usage: btrfs [-vwX] [path]");
 		}
 	}
 
+	ret = snprintf(dir_name, sizeof(dir_name), dir_name_fmt, getpid());
+	if (ret < 0)
+		perror_msg_and_fail("snprintf(dir_name)");
+
 	/*
 	 * This will enable optional tests that require a valid file descriptor
 	 */
@@ -1930,14 +2102,18 @@
 		if (rootfd < 0)
 			perror_msg_and_fail("open(%s) failed", path);
 
-		ret = mkdirat(rootfd, "strace-test", 0755);
+		ret = mkdirat(rootfd, dir_name, 0755);
 		if (ret < 0 && errno != EEXIST)
-			perror_msg_and_fail("mkdirat(strace-test) failed");
+			perror_msg_and_fail("mkdirat(%s) failed", dir_name);
 
-		btrfs_test_dir_fd = openat(rootfd, "strace-test",
+		/* Register removal of the created directory.  */
+		if (ret == 0)
+			atexit(rm_test_dir);
+
+		btrfs_test_dir_fd = openat(rootfd, dir_name,
 					   O_RDONLY|O_DIRECTORY);
 		if (btrfs_test_dir_fd < 0)
-			perror_msg_and_fail("openat(strace-test) failed");
+			perror_msg_and_fail("openat(%s) failed", dir_name);
 		close(rootfd);
 	} else
 		write_ok = false;
diff --git a/tests-m32/execve.c b/tests-m32/execve.c
index da3bc52..c1dedfc 100644
--- a/tests-m32/execve.c
+++ b/tests-m32/execve.c
@@ -2,7 +2,7 @@
  * This file is part of execve strace test.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -59,17 +59,18 @@
 
 	execve(FILENAME, tail_argv, tail_envp);
 	printf("execve(\"%s\""
-	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #if VERBOSE
-	       ", [\"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #else
 	       ", %p /* 5 vars, unterminated */"
 #endif
 	       ") = -1 ENOENT (%m)\n",
 	       Q_FILENAME, q_argv[0], q_argv[1], q_argv[2],
-	       argv[3], argv[4], argv[5]
+	       argv[3], argv[4], argv[5], (char *) tail_argv + sizeof(argv)
 #if VERBOSE
-	       , q_envp[0], q_envp[1], envp[2], envp[3], envp[4]
+	       , q_envp[0], q_envp[1], envp[2], envp[3], envp[4],
+	       (char *) tail_envp + sizeof(envp)
 #else
 	       , tail_envp
 #endif
diff --git a/tests-m32/execveat.c b/tests-m32/execveat.c
index 566a59f..853e26c 100644
--- a/tests-m32/execveat.c
+++ b/tests-m32/execveat.c
@@ -2,7 +2,7 @@
  * This file is part of execveat strace test.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -64,17 +64,18 @@
 
 	syscall(__NR_execveat, -100, FILENAME, tail_argv, tail_envp, 0x1100);
 	printf("execveat(AT_FDCWD, \"%s\""
-	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #if VERBOSE
-	       ", [\"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #else
 	       ", %p /* 5 vars, unterminated */"
 #endif
 	       ", AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) = -1 %s (%m)\n",
 	       Q_FILENAME, q_argv[0], q_argv[1], q_argv[2],
-	       argv[3], argv[4], argv[5],
+	       argv[3], argv[4], argv[5], (char *) tail_argv + sizeof(argv),
 #if VERBOSE
 	       q_envp[0], q_envp[1], envp[2], envp[3], envp[4],
+	       (char *) tail_envp + sizeof(envp),
 #else
 	       tail_envp,
 #endif
diff --git a/tests-m32/fanotify_mark-Xabbrev.c b/tests-m32/fanotify_mark-Xabbrev.c
new file mode 100644
index 0000000..2dc9fa1
--- /dev/null
+++ b/tests-m32/fanotify_mark-Xabbrev.c
@@ -0,0 +1 @@
+#include "fanotify_mark.c"
diff --git a/tests-m32/fanotify_mark-Xabbrev.gen.test b/tests-m32/fanotify_mark-Xabbrev.gen.test
new file mode 100755
index 0000000..86c4034
--- /dev/null
+++ b/tests-m32/fanotify_mark-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark-Xabbrev -a32 -Xabbrev -e trace=fanotify_mark); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32 -Xabbrev -e trace=fanotify_mark
diff --git a/tests-m32/fanotify_mark-Xraw.c b/tests-m32/fanotify_mark-Xraw.c
new file mode 100644
index 0000000..f02c886
--- /dev/null
+++ b/tests-m32/fanotify_mark-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "fanotify_mark.c"
diff --git a/tests-m32/fanotify_mark-Xraw.gen.test b/tests-m32/fanotify_mark-Xraw.gen.test
new file mode 100755
index 0000000..5be964d
--- /dev/null
+++ b/tests-m32/fanotify_mark-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark-Xraw -a32 -Xraw -e trace=fanotify_mark); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32 -Xraw -e trace=fanotify_mark
diff --git a/tests-m32/fanotify_mark-Xverbose.c b/tests-m32/fanotify_mark-Xverbose.c
new file mode 100644
index 0000000..b76f46f
--- /dev/null
+++ b/tests-m32/fanotify_mark-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "fanotify_mark.c"
diff --git a/tests-m32/fanotify_mark-Xverbose.gen.test b/tests-m32/fanotify_mark-Xverbose.gen.test
new file mode 100755
index 0000000..ef1a99d
--- /dev/null
+++ b/tests-m32/fanotify_mark-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark-Xverbose -a32 -Xverbose -e trace=fanotify_mark); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32 -Xverbose -e trace=fanotify_mark
diff --git a/tests-m32/fanotify_mark.c b/tests-m32/fanotify_mark.c
index 11cf7d0..9509b83 100644
--- a/tests-m32/fanotify_mark.c
+++ b/tests-m32/fanotify_mark.c
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -41,6 +41,20 @@
 # include <unistd.h>
 # include <sys/fanotify.h>
 
+#if XLAT_RAW
+# define str_fan_mark_add	"0x1"
+# define str_fan_modify_ondir	"0x40000002"
+# define str_at_fdcwd		"-100"
+#elif XLAT_VERBOSE
+# define str_fan_mark_add	"0x1 /* FAN_MARK_ADD */"
+# define str_fan_modify_ondir	"0x40000002 /* FAN_MODIFY|FAN_ONDIR */"
+# define str_at_fdcwd		"-100 /* AT_FDCWD */"
+#else
+# define str_fan_mark_add	"FAN_MARK_ADD"
+# define str_fan_modify_ondir	"FAN_MODIFY|FAN_ONDIR"
+# define str_at_fdcwd		"AT_FDCWD"
+#endif
+
 /* Performs fanotify_mark call via the syscall interface. */
 static void
 do_call(kernel_ulong_t fd, kernel_ulong_t flags, const char *flags_str,
@@ -97,26 +111,73 @@
 	static const struct strval flags[] = {
 		{ F8ILL_KULONG_MASK, "0" },
 		{ (kernel_ulong_t) 0xdec0deddefaced00ULL,
-			"0xefaced00 /* FAN_MARK_??? */" },
+			"0xefaced00"
+#if !XLAT_RAW
+			" /* FAN_MARK_??? */"
+#endif
+			},
 		{ (kernel_ulong_t) 0xda7a105700000040ULL,
-			"FAN_MARK_IGNORED_SURV_MODIFY" },
+#if XLAT_RAW
+			"0x40"
+#elif XLAT_VERBOSE
+			"0x40 /* FAN_MARK_IGNORED_SURV_MODIFY */"
+#else
+			"FAN_MARK_IGNORED_SURV_MODIFY"
+#endif
+			},
 		{ (kernel_ulong_t) 0xbadc0deddeadfeedULL,
+#if XLAT_RAW || XLAT_VERBOSE
+			"0xdeadfeed"
+#endif
+#if XLAT_VERBOSE
+			" /* "
+#endif
+#if !XLAT_RAW
 			"FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR|"
 			"FAN_MARK_IGNORED_MASK|FAN_MARK_IGNORED_SURV_MODIFY|"
-			"FAN_MARK_FLUSH|0xdeadfe00" },
+			"FAN_MARK_FLUSH|0xdeadfe00"
+#endif
+#if XLAT_VERBOSE
+			" */"
+#endif
+			},
 	};
 	static const struct strval64 masks[] = {
 		{ ARG_ULL_STR(0) },
 		{ 0xdeadfeedfacebeefULL,
+#if XLAT_RAW || XLAT_VERBOSE
+			"0xdeadfeedfacebeef"
+#endif
+#if XLAT_VERBOSE
+			" /* "
+#endif
+#if !XLAT_RAW
 			"FAN_ACCESS|FAN_MODIFY|FAN_CLOSE_WRITE|FAN_OPEN|"
 			"FAN_ACCESS_PERM|FAN_ONDIR|FAN_EVENT_ON_CHILD|"
-			"0xdeadfeedb2ccbec4" },
-		{ ARG_ULL_STR(0xffffffffb7fcbfc4) " /* FAN_??? */" },
+			"0xdeadfeedb2ccbec4"
+#endif
+#if XLAT_VERBOSE
+			" */"
+#endif
+			},
+		{ ARG_ULL_STR(0xffffffffb7fcbfc4)
+#if !XLAT_RAW
+			" /* FAN_??? */"
+#endif
+			},
 	};
 	static const struct strval dirfds[] = {
 		{ (kernel_ulong_t) 0xfacefeed00000001ULL, "1" },
-		{ (kernel_ulong_t) 0xdec0ded0ffffffffULL, "FAN_NOFD" },
-		{ (kernel_ulong_t) 0xbadfacedffffff9cULL, "AT_FDCWD" },
+		{ (kernel_ulong_t) 0xdec0ded0ffffffffULL,
+#if XLAT_RAW
+			"-1"
+#elif XLAT_VERBOSE
+			"-1 /* FAN_NOFD */"
+#else
+			"FAN_NOFD"
+#endif
+			},
+		{ (kernel_ulong_t) 0xbadfacedffffff9cULL, str_at_fdcwd },
 		{ (kernel_ulong_t) 0xdefaced1beeff00dULL, "-1091571699" },
 	};
 	static const char str64[] = STR64;
@@ -149,8 +210,9 @@
 
 	rc = fanotify_mark(-1, FAN_MARK_ADD, FAN_MODIFY | FAN_ONDIR,
 			       -100, ".");
-	printf("fanotify_mark(-1, FAN_MARK_ADD, FAN_MODIFY|FAN_ONDIR"
-	       ", AT_FDCWD, \".\") = %s\n", sprintrc(rc));
+	printf("fanotify_mark(-1, %s, %s, %s, \".\") = %s\n",
+	       str_fan_mark_add, str_fan_modify_ondir, str_at_fdcwd,
+	       sprintrc(rc));
 
 	for (i = 0; i < ARRAY_SIZE(fds); i++) {
 		for (j = 0; j < ARRAY_SIZE(flags); j++) {
diff --git a/tests-m32/fcntl-common.c b/tests-m32/fcntl-common.c
new file mode 100644
index 0000000..a35a837
--- /dev/null
+++ b/tests-m32/fcntl-common.c
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "flock.h"
+
+#define FILE_LEN 4096
+
+#define TEST_FLOCK_EINVAL(cmd) test_flock_einval(cmd, #cmd)
+#define TEST_FLOCK64_EINVAL(cmd) test_flock64_einval(cmd, #cmd)
+
+#ifdef HAVE_TYPEOF
+# define TYPEOF_FLOCK_OFF_T typeof(((struct_kernel_flock *) NULL)->l_len)
+#else
+# define TYPEOF_FLOCK_OFF_T off_t
+#endif
+
+static const char *errstr;
+
+static long
+invoke_test_syscall(const unsigned int fd, const unsigned int cmd, void *const p)
+{
+	const kernel_ulong_t kfd = F8ILL_KULONG_MASK | fd;
+	const kernel_ulong_t op = F8ILL_KULONG_MASK | cmd;
+
+	long rc = syscall(TEST_SYSCALL_NR, kfd, op, (uintptr_t) p);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static void
+test_flock_einval(const int cmd, const char *name)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeedULL;
+	fl->l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00dULL;
+
+	invoke_test_syscall(0, cmd, fl);
+	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
+	       (intmax_t) fl->l_start, (intmax_t) fl->l_len, errstr);
+
+	void *const bad_addr = (void *) fl + 1;
+	invoke_test_syscall(0, cmd, bad_addr);
+	printf("%s(0, %s, %p) = %s\n",
+	       TEST_SYSCALL_STR, name, bad_addr, errstr);
+}
+
+/*
+ * This function is not declared static to avoid potential
+ * "defined but not used" warning when included by fcntl.c
+ */
+void
+test_flock64_einval(const int cmd, const char *name)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock64, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeedULL;
+	fl->l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00dULL;
+
+	invoke_test_syscall(0, cmd, fl);
+	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
+	       (intmax_t) fl->l_start, (intmax_t) fl->l_len, errstr);
+
+	void *const bad_addr = (void *) fl + 1;
+	invoke_test_syscall(0, cmd, bad_addr);
+	printf("%s(0, %s, %p) = %s\n",
+	       TEST_SYSCALL_STR, name, bad_addr, errstr);
+}
+
+static void
+test_flock(void)
+{
+	TEST_FLOCK_EINVAL(F_SETLK);
+	TEST_FLOCK_EINVAL(F_SETLKW);
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_len = FILE_LEN;
+
+	long rc = invoke_test_syscall(0, F_SETLK, fl);
+	printf("%s(0, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = %s\n",
+	       TEST_SYSCALL_STR, FILE_LEN, errstr);
+	if (rc)
+		return;
+
+	invoke_test_syscall(0, F_GETLK, fl);
+	printf("%s(0, F_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+
+	invoke_test_syscall(0, F_SETLKW, fl);
+	printf("%s(0, F_SETLKW, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+}
+
+static void
+test_flock64_ofd(void)
+{
+#if defined F_OFD_GETLK && defined F_OFD_SETLK && defined F_OFD_SETLKW
+	TEST_FLOCK64_EINVAL(F_OFD_SETLK);
+	TEST_FLOCK64_EINVAL(F_OFD_SETLKW);
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock64, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_len = FILE_LEN;
+
+	long rc = invoke_test_syscall(0, F_OFD_SETLK, fl);
+	printf("%s(0, F_OFD_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = %s\n",
+	       TEST_SYSCALL_STR, FILE_LEN, errstr);
+	if (rc)
+		return;
+
+	invoke_test_syscall(0, F_OFD_GETLK, fl);
+	printf("%s(0, F_OFD_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+
+	invoke_test_syscall(0, F_OFD_SETLKW, fl);
+	printf("%s(0, F_OFD_SETLKW, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+#endif /* F_OFD_GETLK && F_OFD_SETLK && F_OFD_SETLKW */
+}
+
+static void test_flock64_lk64(void);
+
+static void
+test_flock64(void)
+{
+	test_flock64_ofd();
+	test_flock64_lk64();
+}
+
+/*
+ * F_[GS]ETOWN_EX had conflicting values with F_[SG]ETLK64
+ * in kernel revisions v2.6.32-rc1~96..v2.6.32-rc7~23.
+ */
+#undef TEST_F_OWNER_EX
+#if defined F_GETOWN_EX && defined F_SETOWN_EX \
+ && (F_GETOWN_EX != F_SETLK64) && (F_SETOWN_EX != F_GETLK64)
+# define TEST_F_OWNER_EX
+#endif
+
+#ifdef TEST_F_OWNER_EX
+# include "f_owner_ex.h"
+
+static long
+test_f_owner_ex_type_pid(const int cmd, const char *const cmd_name,
+			 const int type, const char *const type_name,
+			 pid_t pid)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_f_owner_ex, fo);
+
+	fo->type = type;
+	fo->pid = pid;
+	long rc = invoke_test_syscall(0, cmd, fo);
+	printf("%s(0, %s, {type=%s, pid=%d}) = %s\n",
+	       TEST_SYSCALL_STR, cmd_name, type_name, fo->pid, errstr);
+
+	void *bad_addr = (void *) fo + 1;
+	invoke_test_syscall(0, cmd, bad_addr);
+	printf("%s(0, %s, %p) = %s\n",
+	       TEST_SYSCALL_STR, cmd_name, bad_addr, errstr);
+
+	return rc;
+}
+
+static void
+test_f_owner_ex_umove_or_printaddr(const int type, const char *const type_name,
+				   pid_t pid)
+{
+	long rc = test_f_owner_ex_type_pid(ARG_STR(F_SETOWN_EX),
+					   type, type_name, pid);
+	if (!rc)
+		test_f_owner_ex_type_pid(ARG_STR(F_GETOWN_EX),
+					 type, type_name, pid);
+}
+
+static void
+test_f_owner_ex(void)
+{
+	static const struct {
+		int type;
+		const char *type_name;
+		pid_t pid[2];
+	} a[] = {
+		{ ARG_STR(F_OWNER_TID), { 1234567890, 20 } },
+		{ ARG_STR(F_OWNER_PID), { 1298126790, 30 } },
+		{ ARG_STR(F_OWNER_PGRP), { 1294567890, 40 } }
+	};
+
+	for (unsigned int i = 0; i < ARRAY_SIZE(a); i++) {
+		for (unsigned int j = 0; j < ARRAY_SIZE(a[0].pid); j++) {
+			test_f_owner_ex_umove_or_printaddr(a[i].type,
+							   a[i].type_name,
+							   a[i].pid[j]);
+		}
+	}
+}
+#endif /* TEST_F_OWNER_EX */
+
+static void
+create_sample(void)
+{
+	char fname[] = TEST_SYSCALL_STR "_XXXXXX";
+
+	(void) close(0);
+	if (mkstemp(fname))
+		perror_msg_and_fail("mkstemp: %s", fname);
+	if (unlink(fname))
+		perror_msg_and_fail("unlink: %s", fname);
+	if (ftruncate(0, FILE_LEN))
+		perror_msg_and_fail("ftruncate");
+}
+
+int
+main(void)
+{
+	create_sample();
+	test_flock();
+	test_flock64();
+#ifdef TEST_F_OWNER_EX
+	test_f_owner_ex();
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/fcntl.c b/tests-m32/fcntl.c
index 4f62ca2..7539f19 100644
--- a/tests-m32/fcntl.c
+++ b/tests-m32/fcntl.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,51 +33,40 @@
 
 # define TEST_SYSCALL_NR __NR_fcntl
 # define TEST_SYSCALL_STR "fcntl"
-# include "struct_flock.c"
-
-# define TEST_FLOCK64_EINVAL(cmd) test_flock64_einval(cmd, #cmd)
+# include "fcntl-common.c"
 
 static void
-test_flock64_einval(const int cmd, const char *name)
+test_flock64_undecoded(const int cmd, const char *name)
 {
 	struct_kernel_flock64 fl = {
 		.l_type = F_RDLCK,
 		.l_start = 0xdefaced1facefeedULL,
 		.l_len = 0xdefaced2cafef00dULL
 	};
-	long rc = invoke_test_syscall(cmd, &fl);
+	invoke_test_syscall(0, cmd, &fl);
 	printf("%s(0, %s, %p) = %s\n",
-	       TEST_SYSCALL_STR, name, &fl, sprintrc(rc));
+	       TEST_SYSCALL_STR, name, &fl, errstr);
 }
 
+#define TEST_FLOCK64_UNDECODED(cmd) test_flock64_undecoded(cmd, #cmd)
+
 static void
-test_flock64(void)
+test_flock64_lk64(void)
 {
 /*
  * F_[GS]ETOWN_EX had conflicting values with F_[GS]ETLK64
  * in kernel revisions v2.6.32-rc1~96..v2.6.32-rc7~23.
  */
-#if !defined(F_GETOWN_EX) || F_GETOWN_EX != F_SETLK64
-	TEST_FLOCK64_EINVAL(F_SETLK64);
-#endif
+# if !defined(F_GETOWN_EX) || F_GETOWN_EX != F_SETLK64
+	TEST_FLOCK64_UNDECODED(F_SETLK64);
+# endif
 /* F_GETLK and F_SETLKW64 have conflicting values on mips64 */
-#if !defined(__mips64) || F_GETLK != F_SETLKW64
-	TEST_FLOCK64_EINVAL(F_SETLKW64);
-#endif
-#if !defined(F_SETOWN_EX) || F_SETOWN_EX != F_GETLK64
-	TEST_FLOCK64_EINVAL(F_GETLK64);
-#endif
-}
-
-int
-main(void)
-{
-	create_sample();
-	test_flock();
-	test_flock64();
-
-	puts("+++ exited with 0 +++");
-	return 0;
+# if !defined(__mips64) || F_GETLK != F_SETLKW64
+	TEST_FLOCK64_UNDECODED(F_SETLKW64);
+# endif
+# if !defined(F_SETOWN_EX) || F_SETOWN_EX != F_GETLK64
+	TEST_FLOCK64_UNDECODED(F_GETLK64);
+# endif
 }
 
 #else
diff --git a/tests-m32/fcntl64.c b/tests-m32/fcntl64.c
index 068956e..f65f7cb 100644
--- a/tests-m32/fcntl64.c
+++ b/tests-m32/fcntl64.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,68 +33,38 @@
 
 # define TEST_SYSCALL_NR __NR_fcntl64
 # define TEST_SYSCALL_STR "fcntl64"
-# include "struct_flock.c"
-
-# define TEST_FLOCK64_EINVAL(cmd) test_flock64_einval(cmd, #cmd)
+# include "fcntl-common.c"
 
 static void
-test_flock64_einval(const int cmd, const char *name)
-{
-	struct_kernel_flock64 fl = {
-		.l_type = F_RDLCK,
-		.l_start = 0xdefaced1facefeedULL,
-		.l_len = 0xdefaced2cafef00dULL
-	};
-	long rc = invoke_test_syscall(cmd, &fl);
-	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
-	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
-	       (intmax_t) fl.l_start, (intmax_t) fl.l_len, sprintrc(rc));
-}
-
-static void
-test_flock64(void)
+test_flock64_lk64(void)
 {
 	TEST_FLOCK64_EINVAL(F_SETLK64);
 	TEST_FLOCK64_EINVAL(F_SETLKW64);
-# ifdef F_OFD_SETLK
-	TEST_FLOCK64_EINVAL(F_OFD_SETLK);
-	TEST_FLOCK64_EINVAL(F_OFD_SETLKW);
-# endif
 
-	struct_kernel_flock64 fl = {
-		.l_type = F_RDLCK,
-		.l_len = FILE_LEN
-	};
-	long rc = invoke_test_syscall(F_SETLK64, &fl);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock64, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_len = FILE_LEN;
+
+	long rc = invoke_test_syscall(0, F_SETLK64, fl);
 	printf("%s(0, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET"
 	       ", l_start=0, l_len=%d}) = %s\n",
-	       TEST_SYSCALL_STR, FILE_LEN, sprintrc(rc));
+	       TEST_SYSCALL_STR, FILE_LEN, errstr);
 
 	if (rc)
 		return;
 
-	invoke_test_syscall(F_GETLK64, &fl);
+	invoke_test_syscall(0, F_GETLK64, fl);
 	printf("%s(0, F_GETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET"
 	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
 	       TEST_SYSCALL_STR, FILE_LEN);
 
-	invoke_test_syscall(F_SETLK64, &fl);
-	printf("%s(0, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	invoke_test_syscall(0, F_SETLKW64, fl);
+	printf("%s(0, F_SETLKW64, {l_type=F_UNLCK, l_whence=SEEK_SET"
 	       ", l_start=0, l_len=%d}) = 0\n",
 	       TEST_SYSCALL_STR, FILE_LEN);
 }
 
-int
-main(void)
-{
-	create_sample();
-	test_flock();
-	test_flock64();
-
-	puts("+++ exited with 0 +++");
-	return 0;
-}
-
 #else
 
 SKIP_MAIN_UNDEFINED("__NR_fcntl64")
diff --git a/tests-m32/gen_tests.am b/tests-m32/gen_tests.am
index 2cd76bc..5db8375 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 _newselect-P.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 dev-yy.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 fsync-y.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_dm.gen.test ioctl_dm-v.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_kvm_run.gen.test ioctl_loop.gen.test ioctl_loop-nv.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_nsfs.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_sock_gifconf.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 kcmp-y.gen.test kern_features.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 modify_ldt.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 net-yy-inet6.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 nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test nfnetlink_osf.gen.test nfnetlink_queue.gen.test nfnetlink_ulog.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_mdba_mdb_entry.gen.test nlattr_mdba_router_port.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_tc_stats.gen.test nlattr_tca_stab.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test oldselect-efault.gen.test oldselect-efault-P.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-P.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 riscv_flush_icache.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 s390_guarded_storage.gen.test s390_guarded_storage-v.gen.test s390_pci_mmio_read_write.gen.test s390_runtime_instr.gen.test s390_sthyi.gen.test s390_sthyi-v.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 seccomp_get_action_avail.gen.test select.gen.test select-P.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 sockopt-sol_netlink.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 _newselect-P.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test aio_pgetevents.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test bpf-obj_get_info_by_fd.gen.test bpf-obj_get_info_by_fd-v.gen.test bpf-obj_get_info_by_fd-prog.gen.test bpf-obj_get_info_by_fd-prog-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 dev-yy.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 fanotify_mark-Xabbrev.gen.test fanotify_mark-Xraw.gen.test fanotify_mark-Xverbose.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 fsync-y.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_dm.gen.test ioctl_dm-v.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_inotify.gen.test ioctl_kvm_run.gen.test ioctl_loop.gen.test ioctl_loop-nv.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_perf.gen.test ioctl_ptp.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_sock_gifconf.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_msg-Xabbrev.gen.test ipc_msg-Xraw.gen.test ipc_msg-Xverbose.gen.test ipc_msgbuf-Xabbrev.gen.test ipc_msgbuf-Xraw.gen.test ipc_msgbuf-Xverbose.gen.test ipc_sem.gen.test ipc_sem-Xabbrev.gen.test ipc_sem-Xraw.gen.test ipc_sem-Xverbose.gen.test ipc_shm.gen.test ipc_shm-Xabbrev.gen.test ipc_shm-Xraw.gen.test ipc_shm-Xverbose.gen.test kcmp.gen.test kcmp-y.gen.test kern_features.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test keyctl-Xabbrev.gen.test keyctl-Xraw.gen.test keyctl-Xverbose.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 mmap-Xabbrev.gen.test mmap-Xraw.gen.test mmap-Xverbose.gen.test mmap64.gen.test mmap64-Xabbrev.gen.test mmap64-Xraw.gen.test mmap64-Xverbose.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test modify_ldt.gen.test mount.gen.test mount-Xabbrev.gen.test mount-Xraw.gen.test mount-Xverbose.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 net-yy-inet6.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 nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test nfnetlink_osf.gen.test nfnetlink_queue.gen.test nfnetlink_ulog.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_af_spec.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_linkinfo.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_mdba_mdb_entry.gen.test nlattr_mdba_router_port.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_tc_stats.gen.test nlattr_tca_stab.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test old_mmap-P.gen.test old_mmap-v-none.gen.test old_mmap-Xabbrev.gen.test old_mmap-Xraw.gen.test old_mmap-Xverbose.gen.test oldfstat.gen.test oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test oldselect-efault.gen.test oldselect-efault-P.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 personality-Xabbrev.gen.test personality-Xraw.gen.test personality-Xverbose.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-P.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 riscv_flush_icache.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 s390_guarded_storage.gen.test s390_guarded_storage-v.gen.test s390_pci_mmio_read_write.gen.test s390_runtime_instr.gen.test s390_sthyi.gen.test s390_sthyi-v.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 seccomp_get_action_avail.gen.test select.gen.test select-P.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 so_peercred-Xabbrev.gen.test so_peercred-Xraw.gen.test so_peercred-Xverbose.gen.test sock_filter-v.gen.test sock_filter-v-Xabbrev.gen.test sock_filter-v-Xraw.gen.test sock_filter-v-Xverbose.gen.test socketcall.gen.test sockopt-sol_netlink.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_personality_32.gen.test trace_personality_64.gen.test trace_personality_x32.gen.test trace_personality_regex_32.gen.test trace_personality_regex_64.gen.test trace_personality_regex_x32.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) $^ $@
@@ -28,6 +28,9 @@
 $(srcdir)/aio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/aio_pgetevents.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/alarm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -37,6 +40,18 @@
 $(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-obj_get_info_by_fd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog-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) $^ $@
 
@@ -124,6 +139,15 @@
 $(srcdir)/fanotify_mark.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/fanotify_mark-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/fchdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -316,6 +340,9 @@
 $(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_inotify.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -334,6 +361,12 @@
 $(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_perf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_ptp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -376,12 +409,48 @@
 $(srcdir)/ipc_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_msg-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_sem.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_sem-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_shm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_shm-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -400,6 +469,15 @@
 $(srcdir)/keyctl.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/keyctl-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kill.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -463,9 +541,27 @@
 $(srcdir)/mlockall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmap64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap64-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -484,6 +580,15 @@
 $(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mount-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/move_pages.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -610,9 +715,15 @@
 $(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_ifla_af_spec.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_linkinfo.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) $^ $@
 
@@ -685,6 +796,15 @@
 $(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/old_mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -727,6 +847,15 @@
 $(srcdir)/perf_event_open_unabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/personality-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/pipe2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -1057,9 +1186,27 @@
 $(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_peercred-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xverbose.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)/sock_filter-v-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xverbose.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) $^ $@
 
@@ -1141,6 +1288,24 @@
 $(srcdir)/trace_lstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/trace_personality_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/trace_question.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 a95ff3e..24e0510 100644
--- a/tests-m32/gen_tests.in
+++ b/tests-m32/gen_tests.in
@@ -34,9 +34,14 @@
 add_key	-a30 -s12
 adjtimex	-a15
 aio	-a14 -e trace=io_setup,io_submit,io_getevents,io_cancel,io_destroy
+aio_pgetevents	-e trace=io_pgetevents
 alarm	-a10
 bpf	-a20
 bpf-v	-a20 -v -e trace=bpf
+bpf-obj_get_info_by_fd	-a20 -y -e trace=bpf
+bpf-obj_get_info_by_fd-v	-a20 -y -v -e trace=bpf
+bpf-obj_get_info_by_fd-prog	-a20 -y -e trace=bpf
+bpf-obj_get_info_by_fd-prog-v	-a20 -y -v -e trace=bpf
 btrfs	+ioctl.test
 chmod	-a28
 chown	-a28
@@ -66,6 +71,9 @@
 fallocate	-a18
 fanotify_init
 fanotify_mark	-a32
+fanotify_mark-Xabbrev	-a32 -Xabbrev -e trace=fanotify_mark
+fanotify_mark-Xraw	-a32 -Xraw -e trace=fanotify_mark
+fanotify_mark-Xverbose	-a32 -Xverbose -e trace=fanotify_mark
 fchdir	-a11
 fchmod	-a15
 fchmodat
@@ -130,12 +138,15 @@
 ioctl_dm-v	+ioctl.test -v -s9
 ioctl_evdev	+ioctl.test
 ioctl_evdev-v	+ioctl.test -v
+ioctl_inotify	+ioctl.test
 ioctl_kvm_run	+ioctl.test -a36 -y
 ioctl_loop	+ioctl.test
 ioctl_loop-nv	+ioctl.test -a22 -e verbose=none
 ioctl_loop-v	+ioctl.test -v
 ioctl_mtd	+ioctl.test
 ioctl_nsfs	+ioctl.test -esignal=none
+ioctl_perf	+ioctl.test
+ioctl_ptp 	+ioctl.test
 ioctl_rtc	+ioctl.test
 ioctl_rtc-v	+ioctl.test -v
 ioctl_scsi	+ioctl.test
@@ -149,15 +160,30 @@
 ioprio	-a18 -e trace=ioprio_get,ioprio_set
 ip_mreq	-e trace=setsockopt
 ipc	-a19
-ipc_msg	+ipc.sh
-ipc_sem	+ipc.sh
-ipc_shm	+ipc.sh
+ipc_msg	+ipc.sh -a26
+ipc_msg-Xabbrev	+ipc.sh -Xabbrev -a26
+ipc_msg-Xraw	+ipc.sh -Xraw -a16
+ipc_msg-Xverbose	+ipc.sh -Xverbose -a34
+ipc_msgbuf-Xabbrev	+ipc_msgbuf.test -Xabbrev
+ipc_msgbuf-Xraw	+ipc_msgbuf.test -Xraw -a22
+ipc_msgbuf-Xverbose	+ipc_msgbuf.test -Xverbose
+ipc_sem	+ipc.sh -a29
+ipc_sem-Xabbrev	+ipc.sh -Xabbrev -a29
+ipc_sem-Xraw	+ipc.sh -Xraw -a19
+ipc_sem-Xverbose	+ipc.sh -Xverbose -a36
+ipc_shm	+ipc.sh -a29
+ipc_shm-Xabbrev	+ipc.sh -Xabbrev -a29
+ipc_shm-Xraw	+ipc.sh -Xraw -a19
+ipc_shm-Xverbose	+ipc.sh -Xverbose -a36
 kcmp	-a22
 kcmp-y	-a22 -y -e trace=kcmp
 kern_features -a16
 kexec_file_load	-s9
 kexec_load	-s9
 keyctl	-a31 -s10
+keyctl-Xabbrev	-a31 -s10 -e trace=keyctl -Xabbrev
+keyctl-Xraw	-a13 -s10 -e trace=keyctl -Xraw
+keyctl-Xverbose	-a41 -s10 -e trace=keyctl -Xverbose
 kill	-a12 -esignal=none
 lchown	-a30
 lchown32	-a32
@@ -179,13 +205,22 @@
 mlock	-a20 -e trace=mlock,munlock
 mlock2
 mlockall	-a12
+mmap-Xabbrev	+mmap.test abbrev
+mmap-Xraw	+mmap.test raw 14
+mmap-Xverbose	+mmap.test verbose
 mmap64	+mmap.test
+mmap64-Xabbrev	+mmap.test abbrev
+mmap64-Xraw	+mmap.test raw 14
+mmap64-Xverbose	+mmap.test verbose
 mmsg	-e read=0 -e write=1 -e trace=recvmmsg,sendmmsg
 mmsg-silent	-a25 -e verbose=none -e trace=sendmmsg,recvmmsg
 mmsg_name	-a25 -e trace=sendmmsg,recvmmsg
 mmsg_name-v	-v -a25 -e trace=sendmmsg,recvmmsg
 modify_ldt	-a23
-mount
+mount		-a33
+mount-Xabbrev	-a33 -e trace=mount -Xabbrev
+mount-Xraw	-a33 -e trace=mount -Xraw
+mount-Xverbose	-a33 -e trace=mount -Xverbose
 move_pages	-s3
 mq	-a32 -e trace=mq_getsetattr,mq_open,mq_unlink
 mq_sendrecv	-a14 -e trace=mq_open,mq_notify,mq_timedsend,mq_timedreceive,mq_unlink
@@ -228,7 +263,9 @@
 nlattr_ifaddrlblmsg		+netlink_sock_diag.test
 nlattr_ifaddrmsg		+netlink_sock_diag.test
 nlattr_ifinfomsg		+netlink_sock_diag.test
+nlattr_ifla_af_spec		+netlink_sock_diag.test
 nlattr_ifla_brport		+netlink_sock_diag.test
+nlattr_ifla_linkinfo		+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
@@ -253,6 +290,9 @@
 old_mmap	-a11 -e trace=mmap
 old_mmap-P	-e trace=mmap -P "/dev/full" 9>>/dev/full
 old_mmap-v-none	-a11 -e trace=mmap -e verbose=none
+old_mmap-Xabbrev	-a11 -e trace=mmap -Xabbrev
+old_mmap-Xraw	-a11 -e trace=mmap -Xraw
+old_mmap-Xverbose	-a11 -e trace=mmap -Xverbose
 oldfstat	-a18 -v -P stat.sample
 oldlstat	-a32 -v -P stat.sample -P /dev/full
 oldselect	-a13 -e trace=select
@@ -267,6 +307,9 @@
 perf_event_open	-a1
 perf_event_open_nonverbose	-a34 -e verbose=none -e trace=perf_event_open
 perf_event_open_unabbrev	-a1 -v -e trace=perf_event_open
+personality-Xabbrev	+personality.test -Xabbrev
+personality-Xraw	+personality.test -a15 -Xraw
+personality-Xverbose	+personality.test -Xverbose
 pipe2	-a15
 pkey_alloc	-a17
 pkey_free	-a13
@@ -322,7 +365,7 @@
 s390_guarded_storage	-a32
 s390_guarded_storage-v	-e trace=s390_guarded_storage -a32 -v
 s390_pci_mmio_read_write	-e trace=s390_pci_mmio_read,s390_pci_mmio_write -a30
-s390_runtime_instr	-a50
+s390_runtime_instr	-a44
 s390_sthyi	-a47
 s390_sthyi-v	-e trace=s390_sthyi -a47 -v
 sched	test_trace_expr times -e/sched
@@ -377,7 +420,13 @@
 sigsuspend	-a19 -esignal=none
 so_linger	-e trace=getsockopt,setsockopt
 so_peercred	-e trace=getsockopt
+so_peercred-Xabbrev	-e trace=getsockopt -Xabbrev
+so_peercred-Xraw	-e trace=getsockopt -Xraw -a39
+so_peercred-Xverbose	-e trace=getsockopt -Xverbose
 sock_filter-v	-v -e trace=getsockopt,setsockopt
+sock_filter-v-Xabbrev	-v -e trace=getsockopt,setsockopt -X abbrev
+sock_filter-v-Xraw	-a 37 -v -e trace=getsockopt,setsockopt -X raw
+sock_filter-v-Xverbose	-v -e trace=getsockopt,setsockopt -X verbose
 socketcall	-a20
 sockopt-sol_netlink	-e trace=getsockopt,setsockopt
 splice
@@ -405,6 +454,12 @@
 trace_fstat	test_trace_expr '' -e%fstat -v -P stat.sample -P /dev/full
 trace_fstatfs	test_trace_expr '' -e%fstatfs
 trace_lstat	test_trace_expr '' -e%lstat -v -P stat.sample -P /dev/full
+trace_personality_32	+qualify_personality.sh 32 'getcwd' 'fsync-y'
+trace_personality_64	+qualify_personality.sh 64 'getcwd' 'fsync-y'
+trace_personality_x32	+qualify_personality.sh x32 'getcwd' 'fsync-y'
+trace_personality_regex_32	+qualify_personality.sh 32 '/clock.*' 'times|fcntl.*'
+trace_personality_regex_64	+qualify_personality.sh 64 '/clock.*' 'times|fcntl.*'
+trace_personality_regex_x32	+qualify_personality.sh x32 '/clock.*' 'times|fcntl.*'
 trace_question	test_trace_expr '' -e?osf_utimes,?/^pkey_.*
 trace_stat	test_trace_expr '' -e%stat -v -P stat.sample -P /dev/full
 trace_stat_like	test_trace_expr '' -e%%stat -v -P stat.sample -P /dev/full
diff --git a/tests-m32/init.sh b/tests-m32/init.sh
index dffbfce..8861b70 100644
--- a/tests-m32/init.sh
+++ b/tests-m32/init.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 #
 # Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2011-2017 The strace developers.
+# Copyright (c) 2011-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -230,6 +230,17 @@
 	match_diff "$LOG" "$EXP"
 }
 
+# Usage: run_strace_match_grep [args to run_strace]
+run_strace_match_grep()
+{
+	args="$*"
+	[ -n "$args" -a -z "${args##*-e trace=*}" ] ||
+		set -- -e trace="$NAME" "$@"
+	run_prog > /dev/null
+	run_strace "$@" $args > "$EXP"
+	match_grep "$LOG" "$EXP"
+}
+
 # Print kernel version code.
 # usage: kernel_version_code $(uname -r)
 kernel_version_code()
diff --git a/tests-m32/ioctl_evdev.c b/tests-m32/ioctl_evdev.c
index 9d16cec..5eacac0 100644
--- a/tests-m32/ioctl_evdev.c
+++ b/tests-m32/ioctl_evdev.c
@@ -2,7 +2,7 @@
  * This file is part of ioctl_evdev strace test.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -39,6 +39,13 @@
 # include <sys/ioctl.h>
 # include <linux/input.h>
 
+# ifndef EV_SW
+#  define EV_SW 5
+# endif
+# ifndef ABS_MT_TOOL_Y
+#  define ABS_MT_TOOL_Y 0x3d
+# endif
+
 static const unsigned int magic = 0xdeadbeef;
 static const unsigned long lmagic = (unsigned long) 0xdeadbeefbadc0dedULL;
 
@@ -67,12 +74,14 @@
 # endif /* VERBOSE */
 }
 
-# define TEST_NULL_ARG(cmd)						\
+# define TEST_NULL_ARG_EX(cmd, str)						\
 	do {								\
 		ioctl(-1, cmd, 0);					\
-		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", #cmd);	\
+		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", str);	\
 	} while (0)
 
+# define TEST_NULL_ARG(cmd) TEST_NULL_ARG_EX(cmd, #cmd)
+
 int
 main(void)
 {
@@ -117,14 +126,24 @@
 	TEST_NULL_ARG(EVIOCGABS(ABS_X));
 	TEST_NULL_ARG(EVIOCSABS(ABS_X));
 
+	TEST_NULL_ARG_EX(EVIOCGABS(0xe), "EVIOCGABS(0xe /* ABS_??? */)");
+	TEST_NULL_ARG_EX(EVIOCSABS(0xe), "EVIOCSABS(0xe /* ABS_??? */)");
+
+	TEST_NULL_ARG(EVIOCGABS(ABS_MT_TOOL_Y));
+	TEST_NULL_ARG(EVIOCSABS(ABS_MT_TOOL_Y));
+
+	TEST_NULL_ARG_EX(EVIOCGABS(0x3e), "EVIOCGABS(0x3e /* ABS_??? */)");
+	TEST_NULL_ARG_EX(EVIOCSABS(0x3e), "EVIOCSABS(0x3e /* ABS_??? */)");
+
+	TEST_NULL_ARG_EX(EVIOCGABS(0x3f), "EVIOCGABS(0x3f /* ABS_??? */)");
+	TEST_NULL_ARG_EX(EVIOCSABS(0x3f), "EVIOCSABS(0x3f /* ABS_??? */)");
+
 	TEST_NULL_ARG(EVIOCGBIT(EV_SYN, 0));
 	TEST_NULL_ARG(EVIOCGBIT(EV_KEY, 1));
 	TEST_NULL_ARG(EVIOCGBIT(EV_REL, 2));
 	TEST_NULL_ARG(EVIOCGBIT(EV_ABS, 3));
 	TEST_NULL_ARG(EVIOCGBIT(EV_MSC, 4));
-# ifdef EV_SW
 	TEST_NULL_ARG(EVIOCGBIT(EV_SW, 5));
-# endif
 	TEST_NULL_ARG(EVIOCGBIT(EV_LED, 6));
 	TEST_NULL_ARG(EVIOCGBIT(EV_SND, 7));
 	TEST_NULL_ARG(EVIOCGBIT(EV_REP, 8));
@@ -132,6 +151,12 @@
 	TEST_NULL_ARG(EVIOCGBIT(EV_PWR, 10));
 	TEST_NULL_ARG(EVIOCGBIT(EV_FF_STATUS, 11));
 
+	TEST_NULL_ARG_EX(EVIOCGBIT(0x6, 12), "EVIOCGBIT(0x6 /* EV_??? */, 12)");
+	TEST_NULL_ARG_EX(EVIOCGBIT(0x18, 13),
+			 "EVIOCGBIT(0x18 /* EV_??? */, 13)");
+	TEST_NULL_ARG_EX(EVIOCGBIT(0x1f, 14),
+			 "EVIOCGBIT(0x1f /* EV_??? */, 14)");
+
 	ioctl(-1, EVIOCGBIT(EV_MAX, 42), 0);
 	printf("ioctl(-1, EVIOCGBIT(%#x /* EV_??? */, 42), NULL)"
 	       " = -1 EBADF (%m)\n", EV_MAX);
diff --git a/tests-m32/ioctl_inotify.c b/tests-m32/ioctl_inotify.c
new file mode 100644
index 0000000..0650c62
--- /dev/null
+++ b/tests-m32/ioctl_inotify.c
@@ -0,0 +1,81 @@
+/*
+ * This file is part of ioctl_inotify strace test.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <inttypes.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <asm/unistd.h>
+#include <linux/ioctl.h>
+
+#ifndef INOTIFY_IOC_SETNEXTWD
+# define INOTIFY_IOC_SETNEXTWD  _IOW('I', 0, int32_t)
+#endif
+
+static long
+sys_ioctl(kernel_long_t fd, kernel_ulong_t cmd, kernel_ulong_t arg)
+{
+	return syscall(__NR_ioctl, fd, cmd, arg);
+}
+
+int
+main(void)
+{
+	static const kernel_ulong_t unknown_inotify_cmd =
+		(kernel_ulong_t) 0xbadc0dedfeed49edULL;
+	static const kernel_ulong_t magic =
+		(kernel_ulong_t) 0xdeadbeefbadc0dedULL;
+
+	/* Unknown inotify commands */
+	sys_ioctl(-1, unknown_inotify_cmd, magic);
+	printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x49, %#x, %#x), "
+	       "%#lx) = -1 EBADF (%m)\n",
+	       _IOC_DIR((unsigned int) unknown_inotify_cmd) & _IOC_NONE ?
+	       "|_IOC_NONE" : "",
+	       _IOC_NR((unsigned int) unknown_inotify_cmd),
+	       _IOC_SIZE((unsigned int) unknown_inotify_cmd),
+	       (unsigned long) magic);
+
+	sys_ioctl(-1, INOTIFY_IOC_SETNEXTWD + 1, magic);
+	printf("ioctl(-1, _IOC(_IOC_WRITE, 0x49, %#x, %#x), %#lx)"
+	       " = -1 EBADF (%m)\n",
+	       (unsigned int) _IOC_NR(INOTIFY_IOC_SETNEXTWD + 1),
+	       (unsigned int) _IOC_SIZE(INOTIFY_IOC_SETNEXTWD + 1),
+	       (unsigned long) magic);
+
+	/* INOTIFY_IOC_SETNEXTWD */
+	sys_ioctl(-1, INOTIFY_IOC_SETNEXTWD, magic);
+	printf("ioctl(-1, INOTIFY_IOC_SETNEXTWD, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/ioctl_inotify.gen.test b/tests-m32/ioctl_inotify.gen.test
new file mode 100755
index 0000000..237a98b
--- /dev/null
+++ b/tests-m32/ioctl_inotify.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_inotify +ioctl.test ); do not edit.
+set -- 
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-m32/ioctl_kvm_run.c b/tests-m32/ioctl_kvm_run.c
index 1794614..e1bef57 100644
--- a/tests-m32/ioctl_kvm_run.c
+++ b/tests-m32/ioctl_kvm_run.c
@@ -40,6 +40,7 @@
 # include <string.h>
 # include <sys/ioctl.h>
 # include <sys/mman.h>
+# include <unistd.h>
 # include <linux/kvm.h>
 
 static int
@@ -56,7 +57,7 @@
 
 static const char dev[] = "/dev/kvm";
 static const char vm_dev[] = "anon_inode:kvm-vm";
-static const char vcpu_dev[] = "anon_inode:kvm-vcpu";
+static char vcpu_dev[] = "anon_inode:kvm-vcpu:0";
 static size_t page_size;
 
 extern const char code[];
@@ -165,6 +166,23 @@
 	}
 }
 
+static int
+vcpu_dev_should_have_cpuid(int fd)
+{
+	int r = 0;
+	char *filename = NULL;
+	char buf[sizeof(vcpu_dev)];
+
+	if (asprintf(&filename, "/proc/%d/fd/%d", getpid(), fd) < 0)
+		error_msg_and_fail("asprintf");
+
+	if (readlink(filename, buf, sizeof(buf)) == sizeof(buf) - 1
+	    && (memcmp(buf, vcpu_dev, sizeof(buf) - 1) == 0))
+		r = 1;
+	free(filename);
+	return r;
+}
+
 int
 main(void)
 {
@@ -208,6 +226,15 @@
 	       (unsigned long) page_size, (unsigned long) page_size, mem);
 
 	int vcpu_fd = KVM_IOCTL(vm_fd, KVM_CREATE_VCPU, NULL);
+	if (!vcpu_dev_should_have_cpuid(vcpu_fd))
+		/*
+		 * This is an older kernel that doesn't place a cpuid
+		 * at the end of the dentry associated with vcpu_fd.
+		 * Trim the cpuid part of vcpu_dev like:
+		 * "anon_inode:kvm-vcpu:0" -> "anon_inode:kvm-vcpu"
+		 */
+		vcpu_dev[strlen (vcpu_dev) - 2] = '\0';
+
 	printf("ioctl(%d<%s>, KVM_CREATE_VCPU, 0) = %d<%s>\n",
 	       vm_fd, vm_dev, vcpu_fd, vcpu_dev);
 
diff --git a/tests-m32/ioctl_loop.c b/tests-m32/ioctl_loop.c
index bafbd37..10b7dc3 100644
--- a/tests-m32/ioctl_loop.c
+++ b/tests-m32/ioctl_loop.c
@@ -34,8 +34,10 @@
 #include <stdio.h>
 #include <string.h>
 #include <inttypes.h>
+#include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/sysmacros.h>
+#include <asm/unistd.h>
 #include <linux/ioctl.h>
 #include <linux/loop.h>
 #include "print_fields.h"
@@ -45,6 +47,12 @@
 # define ABBREV 0
 #endif
 
+static long
+sys_ioctl(kernel_long_t fd, kernel_ulong_t cmd, kernel_ulong_t arg)
+{
+	return syscall(__NR_ioctl, fd, cmd, arg);
+}
+
 static void
 print_loop_info(struct loop_info * const info, bool print_encrypt,
 		const char *encrypt_type, const char *encrypt_key,
@@ -178,7 +186,7 @@
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct loop_info64, info64);
 
 	/* Unknown loop commands */
-	ioctl(-1, unknown_loop_cmd, magic);
+	sys_ioctl(-1, unknown_loop_cmd, magic);
 	printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x4c, %#x, %#x), "
 	       "%#lx) = -1 EBADF (%m)\n",
 	       _IOC_DIR((unsigned int) unknown_loop_cmd) & _IOC_NONE ?
@@ -187,14 +195,14 @@
 	       _IOC_SIZE((unsigned int) unknown_loop_cmd),
 	       (unsigned long) magic);
 
-	ioctl(-1, LOOP_SET_BLOCK_SIZE + 1, magic);
+	sys_ioctl(-1, LOOP_SET_BLOCK_SIZE + 1, magic);
 	printf("ioctl(-1, _IOC(0, 0x4c, %#x, %#x), %#lx) = "
 	       "-1 EBADF (%m)\n",
 	       _IOC_NR(LOOP_SET_BLOCK_SIZE + 1),
 	       _IOC_SIZE(LOOP_SET_BLOCK_SIZE + 1),
 	       (unsigned long) magic);
 
-	ioctl(-1, LOOP_CTL_GET_FREE + 1, magic);
+	sys_ioctl(-1, LOOP_CTL_GET_FREE + 1, magic);
 	printf("ioctl(-1, _IOC(0, 0x4c, %#x, %#x), %#lx) = "
 	       "-1 EBADF (%m)\n",
 	       _IOC_NR(LOOP_CTL_GET_FREE + 1),
@@ -202,7 +210,7 @@
 	       (unsigned long) magic);
 
 	/* LOOP_SET_FD */
-	ioctl(-1, LOOP_SET_FD, magic);
+	sys_ioctl(-1, LOOP_SET_FD, magic);
 	printf("ioctl(-1, LOOP_SET_FD, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
@@ -289,7 +297,7 @@
 	printf("ioctl(-1, LOOP_GET_STATUS64, %p) = -1 EBADF (%m)\n", info64);
 
 	/* LOOP_CHANGE_FD */
-	ioctl(-1, LOOP_CHANGE_FD, magic);
+	sys_ioctl(-1, LOOP_CHANGE_FD, magic);
 	printf("ioctl(-1, LOOP_CHANGE_FD, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
@@ -298,22 +306,22 @@
 	printf("ioctl(-1, LOOP_SET_CAPACITY) = -1 EBADF (%m)\n");
 
 	/* LOOP_SET_DIRECT_IO */
-	ioctl(-1, LOOP_SET_DIRECT_IO, magic);
+	sys_ioctl(-1, LOOP_SET_DIRECT_IO, magic);
 	printf("ioctl(-1, LOOP_SET_DIRECT_IO, %lu) = -1 EBADF (%m)\n",
 	       (unsigned long) magic);
 
 	/* LOOP_SET_BLOCK_SIZE */
-	ioctl(-1, LOOP_SET_BLOCK_SIZE, magic);
+	sys_ioctl(-1, LOOP_SET_BLOCK_SIZE, magic);
 	printf("ioctl(-1, LOOP_SET_BLOCK_SIZE, %lu) = -1 EBADF (%m)\n",
 	       (unsigned long) magic);
 
 	/* LOOP_CTL_ADD */
-	ioctl(-1, LOOP_CTL_ADD, magic);
+	sys_ioctl(-1, LOOP_CTL_ADD, magic);
 	printf("ioctl(-1, LOOP_CTL_ADD, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
 	/* LOOP_CTL_REMOVE */
-	ioctl(-1, LOOP_CTL_REMOVE, magic);
+	sys_ioctl(-1, LOOP_CTL_REMOVE, magic);
 	printf("ioctl(-1, LOOP_CTL_REMOVE, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
diff --git a/tests-m32/ioctl_perf-success.c b/tests-m32/ioctl_perf-success.c
new file mode 100644
index 0000000..9eade6a
--- /dev/null
+++ b/tests-m32/ioctl_perf-success.c
@@ -0,0 +1,165 @@
+/*
+ * Check decoding of successful PERF_EVENT_IOC_{ID,QUERY_BPF} ioctls.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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_PERF_EVENT_H
+
+# include <assert.h>
+# include <inttypes.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+# include <sys/ioctl.h>
+# include <linux/perf_event.h>
+
+# ifndef PERF_EVENT_IOC_ID
+#  define PERF_EVENT_IOC_ID			_IOR('$', 7, void *)
+# endif
+
+# ifndef PERF_EVENT_IOC_QUERY_BPF
+#  define PERF_EVENT_IOC_QUERY_BPF		_IOWR('$', 10, void *)
+
+struct perf_event_query_bpf {
+        uint32_t ids_len;
+        uint32_t prog_cnt;
+        uint32_t ids[0];
+};
+# endif
+
+int
+main(int argc, char **argv)
+{
+	static const uint64_t magic64 = 0xfacefeeddeadc0deULL;
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, u64_ptr);
+	uint64_t *const u64_efault = u64_ptr + 1;
+	uint32_t *const u32_arr = tail_alloc(sizeof(uint32_t) * 4);
+	uint32_t *const u32_efault = u32_arr + 4;
+
+	unsigned long num_skip;
+	long inject_retval;
+	bool locked = false;
+
+	*u64_ptr = magic64;
+
+	if (argc == 1)
+		return 0;
+
+	if (argc < 3)
+		error_msg_and_fail("Usage: %s NUM_SKIP INJECT_RETVAL", argv[0]);
+
+	num_skip = strtoul(argv[1], NULL, 0);
+	inject_retval = strtol(argv[2], NULL, 0);
+
+	if (inject_retval < 0)
+		error_msg_and_fail("Expected non-negative INJECT_RETVAL, "
+				   "but got %ld", inject_retval);
+
+	for (unsigned long i = 0; i < num_skip; i++) {
+		long ret = ioctl(-1, PERF_EVENT_IOC_ID, NULL);
+
+		printf("ioctl(-1, PERF_EVENT_IOC_ID, NULL) = %s%s\n",
+		       sprintrc(ret),
+		       ret == inject_retval ? " (INJECTED)" : "");
+
+		if (ret != inject_retval)
+			continue;
+
+		locked = true;
+		break;
+	}
+
+	if (!locked)
+		error_msg_and_fail("Hasn't locked on ioctl(-1"
+				   ", PERF_EVENT_IOC_ID, NULL) returning %lu",
+				   inject_retval);
+
+	/* PERF_EVENT_IOC_ID */
+	assert(ioctl(-1, PERF_EVENT_IOC_ID, NULL) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, NULL) = %ld (INJECTED)\n",
+	       inject_retval);
+
+	assert(ioctl(-1, PERF_EVENT_IOC_ID, u64_efault) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, %p) = %ld (INJECTED)\n",
+	       u64_efault, inject_retval);
+
+	assert(ioctl(-1, PERF_EVENT_IOC_ID, u64_ptr) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, [%" PRIu64 "]) = %ld (INJECTED)\n",
+	       magic64, inject_retval);
+
+	/* PERF_EVENT_IOC_QUERY_BPF */
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL) = %ld (INJECTED)\n",
+	       inject_retval);
+
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_efault)
+	       == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, %p) = %ld (INJECTED)\n",
+	       u32_efault, inject_retval);
+
+	u32_arr[3] = 0xdeadbeef;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr + 3)
+	       == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3735928559, ...}) "
+	       "= %ld (INJECTED)\n",
+	       inject_retval);
+
+	u32_arr[2] = 0xdecaffed;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr + 2)
+	       == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3737845741"
+	       ", prog_cnt=3735928559, ids=%p})"
+	       " = %ld (INJECTED)\n",
+	       u32_efault, inject_retval);
+
+	u32_arr[0] = 0xbadc0ded;
+	u32_arr[1] = 5;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3134983661"
+	       ", prog_cnt=5, ids=[3737845741, 3735928559, ... /* %p */]})"
+	       " = %ld (INJECTED)\n",
+	       u32_efault, inject_retval);
+
+	u32_arr[1] = 2;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3134983661"
+	       ", prog_cnt=2, ids=[3737845741, 3735928559]})"
+	       " = %ld (INJECTED)\n",
+	       inject_retval);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_PERF_EVENT_H");
+
+#endif
diff --git a/tests-m32/ioctl_perf-success.test b/tests-m32/ioctl_perf-success.test
new file mode 100755
index 0000000..779a2a9
--- /dev/null
+++ b/tests-m32/ioctl_perf-success.test
@@ -0,0 +1,15 @@
+#!/bin/sh -efu
+
+# Check decoding of successful PERF_EVENT_IOC_{ID,QUERY_BPF} ioctls.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+: ${IOCTL_INJECT_START=256}
+: ${IOCTL_INJECT_RETVAL=42}
+
+run_prog
+run_strace -a35 -e trace=ioctl \
+	-e inject=ioctl:retval="${IOCTL_INJECT_RETVAL}":when="${IOCTL_INJECT_START}+" \
+	../ioctl_perf-success "${IOCTL_INJECT_START}" "${IOCTL_INJECT_RETVAL}" > "$EXP"
+grep -v '^ioctl([012][,<]' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-m32/ioctl_perf.c b/tests-m32/ioctl_perf.c
new file mode 100644
index 0000000..7db01db
--- /dev/null
+++ b/tests-m32/ioctl_perf.c
@@ -0,0 +1,238 @@
+/*
+ * Check decoding of PERF_EVENT_IOC_* commands of ioctl syscall.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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_PERF_EVENT_H
+
+# include <inttypes.h>
+# include <stdio.h>
+# include <string.h>
+# include <unistd.h>
+# include <sys/ioctl.h>
+# include <asm/unistd.h>
+# include <linux/perf_event.h>
+
+/*
+ * Workaround the bug in kernel UAPI that was fixed
+ * in Linux commit v2.6.33-rc1~48^2~288^2~19.
+ */
+# ifndef u64
+#  define u64 uint64_t
+# endif
+
+# define XLAT_MACROS_ONLY
+#  include "xlat/perf_ioctl_cmds.h"
+# undef XLAT_MACROS_ONLY
+
+# define STR16 "0123456789abcdef"
+
+static long
+sys_ioctl(kernel_long_t fd, kernel_ulong_t cmd, kernel_ulong_t arg)
+{
+	return syscall(__NR_ioctl, fd, cmd, arg);
+}
+
+int
+main(void)
+{
+	static const kernel_ulong_t unknown_perf_cmd =
+		(kernel_ulong_t) 0xbadc0dedfeed24edULL;
+	static const kernel_ulong_t magic =
+		(kernel_ulong_t) 0xdeadbeefbadc0dedULL;
+	static const uint64_t magic64 = 0xfacefeeddeadc0deULL;
+	static const char str[] = STR16 STR16 STR16 STR16;
+
+	static struct {
+		unsigned int cmd;
+		const char *str;
+	} flag_iocs[] = {
+		{ ARG_STR(PERF_EVENT_IOC_ENABLE) },
+		{ ARG_STR(PERF_EVENT_IOC_DISABLE) },
+		{ ARG_STR(PERF_EVENT_IOC_RESET) },
+	};
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, u64_ptr);
+	uint64_t *const u64_efault = u64_ptr + 1;
+	uint32_t *const u32_arr = tail_alloc(sizeof(uint32_t) * 4);
+	uint32_t *const u32_efault = u32_arr + 4;
+	char *const str_ptr = tail_memdup(str, sizeof(str));
+	char *const str_efault = str_ptr + sizeof(str);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct perf_event_attr, pea_ptr);
+
+	*u64_ptr = magic64;
+	fill_memory_ex(pea_ptr, sizeof(*pea_ptr), 0xaa, 0x55);
+
+	/* Unknown perf commands */
+	sys_ioctl(-1, unknown_perf_cmd, magic);
+	printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x24, %#x, %#x), "
+	       "%#lx) = -1 EBADF (%m)\n",
+	       _IOC_DIR((unsigned int) unknown_perf_cmd) & _IOC_NONE ?
+	       "|_IOC_NONE" : "",
+	       _IOC_NR((unsigned int) unknown_perf_cmd),
+	       _IOC_SIZE((unsigned int) unknown_perf_cmd),
+	       (unsigned long) magic);
+
+	sys_ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES + 1, magic);
+	printf("ioctl(-1, _IOC(_IOC_WRITE, 0x24, %#x, %#x), %#lx)"
+	       " = -1 EBADF (%m)\n",
+	       (unsigned int) _IOC_NR(PERF_EVENT_IOC_MODIFY_ATTRIBUTES + 1),
+	       (unsigned int) _IOC_SIZE(PERF_EVENT_IOC_MODIFY_ATTRIBUTES + 1),
+	       (unsigned long) magic);
+
+	/* PERF_EVENT_IOC_{ENABLE,DISABLE,RESET} */
+	for (unsigned i = 0; i < ARRAY_SIZE(flag_iocs); i++) {
+		ioctl(-1, flag_iocs[i].cmd, 0);
+		printf("ioctl(-1, %s, 0) = -1 EBADF (%m)\n", flag_iocs[i].str);
+
+		ioctl(-1, flag_iocs[i].cmd, 1);
+		printf("ioctl(-1, %s, PERF_IOC_FLAG_GROUP) = -1 EBADF (%m)\n",
+		       flag_iocs[i].str);
+
+		ioctl(-1, flag_iocs[i].cmd, 2);
+		printf("ioctl(-1, %s, 0x2 /* PERF_IOC_FLAG_??? */) "
+		       "= -1 EBADF (%m)\n",
+		       flag_iocs[i].str);
+
+		sys_ioctl(-1, flag_iocs[i].cmd, magic);
+		printf("ioctl(-1, %s, PERF_IOC_FLAG_GROUP|%#x) "
+		       "= -1 EBADF (%m)\n",
+		       flag_iocs[i].str, (unsigned int) magic & ~1U);
+	}
+
+	/* PERF_EVENT_IOC_REFRESH */
+	sys_ioctl(-1, PERF_EVENT_IOC_REFRESH, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_REFRESH, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	/* PERF_EVENT_IOC_PERIOD */
+	ioctl(-1, PERF_EVENT_IOC_PERIOD, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_PERIOD, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_PERIOD, u64_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_PERIOD, %p) = -1 EBADF (%m)\n",
+	      u64_efault);
+
+	ioctl(-1, PERF_EVENT_IOC_PERIOD, u64_ptr);
+	printf("ioctl(-1, PERF_EVENT_IOC_PERIOD, [%" PRIu64 "])"
+	       " = -1 EBADF (%m)\n",
+	       magic64);
+
+	/* PERF_EVENT_IOC_SET_OUTPUT */
+	sys_ioctl(-1, PERF_EVENT_IOC_SET_OUTPUT, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_OUTPUT, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	/* PERF_EVENT_IOC_SET_FILTER */
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, %p) = -1 EBADF (%m)\n",
+	       str_efault);
+
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_ptr);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, \"%.32s\"...)"
+	       " = -1 EBADF (%m)\n",
+	       str_ptr);
+
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_ptr + 40);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, \"%.32s\")"
+	       " = -1 EBADF (%m)\n",
+	       str_ptr + 40);
+
+	str_ptr[sizeof(str) - 1] = '0';
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_ptr + 40);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, %p)"
+	       " = -1 EBADF (%m)\n",
+	       str_ptr + 40);
+
+	/* PERF_EVENT_IOC_ID */
+	ioctl(-1, PERF_EVENT_IOC_ID, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_ID, u64_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, %p) = -1 EBADF (%m)\n",
+	      u64_efault);
+
+	ioctl(-1, PERF_EVENT_IOC_ID, u64_ptr);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, %p) = -1 EBADF (%m)\n",
+	       u64_ptr);
+
+	/* PERF_EVENT_IOC_SET_BPF */
+	sys_ioctl(-1, PERF_EVENT_IOC_SET_BPF, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_BPF, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	/* PERF_EVENT_IOC_PAUSE_OUTPUT */
+	sys_ioctl(-1, PERF_EVENT_IOC_PAUSE_OUTPUT, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_PAUSE_OUTPUT, %lu) = -1 EBADF (%m)\n",
+	       (unsigned long) magic);
+
+	/* PERF_EVENT_IOC_QUERY_BPF */
+	ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, %p) = -1 EBADF (%m)\n",
+	       u32_efault);
+
+	u32_arr[0] = 0xbadc0ded;
+	ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3134983661, ...})"
+	       " = -1 EBADF (%m)\n");
+
+	/* PERF_EVENT_IOC_MODIFY_ATTRIBUTES */
+	ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, NULL)"
+	       " = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, pea_ptr + 1);
+	printf("ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, %p)"
+	       " = -1 EBADF (%m)\n",
+	       pea_ptr + 1);
+
+	printf("ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES"
+	       ", {type=%#x /* PERF_TYPE_??? */"
+	       ", size=%#x /* PERF_ATTR_SIZE_??? */"
+	       ", config=%#llx, ...}) = -1 EBADF (%m)\n",
+	       (unsigned int) pea_ptr->type,
+	       (unsigned int) pea_ptr->size,
+	       (unsigned long long) pea_ptr->config);
+	ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, pea_ptr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_PERF_EVENT_H");
+
+#endif
diff --git a/tests-m32/ioctl_perf.gen.test b/tests-m32/ioctl_perf.gen.test
new file mode 100755
index 0000000..0264f34
--- /dev/null
+++ b/tests-m32/ioctl_perf.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_perf +ioctl.test ); do not edit.
+set -- 
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-m32/ioctl_ptp.c b/tests-m32/ioctl_ptp.c
new file mode 100644
index 0000000..1c82919
--- /dev/null
+++ b/tests-m32/ioctl_ptp.c
@@ -0,0 +1,131 @@
+/*
+ * Check decoding of PTP_* commands of ioctl syscall.
+ *
+ * Copyright (c) 2018 Harsha Sharma <harshasharmaiitr@gmail.com>
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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_PTP_SYS_OFFSET
+
+#include <errno.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <linux/ptp_clock.h>
+
+#include "xlat.h"
+#include "xlat/ptp_flags_options.h"
+
+static void
+test_no_device(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_clock_caps, caps);
+	fill_memory(caps, sizeof(*caps));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_sys_offset, sysoff);
+	fill_memory(sysoff, sizeof(*sysoff));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_extts_request, extts);
+	fill_memory(extts, sizeof(*extts));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_perout_request, perout);
+	fill_memory(perout, sizeof(*perout));
+
+	int saved_errno;
+
+	/* PTP_CLOCK_GETCAPS */
+	ioctl(-1, PTP_CLOCK_GETCAPS, NULL);
+	printf("ioctl(-1, PTP_CLOCK_GETCAPS, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_CLOCK_GETCAPS, caps);
+	printf("ioctl(-1, PTP_CLOCK_GETCAPS, %p) = -1 EBADF (%m)\n", caps);
+
+	/* PTP_SYS_OFFSET */
+	ioctl(-1, PTP_SYS_OFFSET, NULL);
+	printf("ioctl(-1, PTP_SYS_OFFSET, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_SYS_OFFSET, sysoff);
+	printf("ioctl(-1, PTP_SYS_OFFSET, {n_samples=%u}) = -1 EBADF (%m)\n",
+	       sysoff->n_samples);
+
+	/* PTP_ENABLE_PPS */
+	ioctl(-1, PTP_ENABLE_PPS, 0);
+	printf("ioctl(-1, PTP_ENABLE_PPS, 0) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_ENABLE_PPS, 1);
+	printf("ioctl(-1, PTP_ENABLE_PPS, 1) = -1 EBADF (%m)\n");
+
+	/* PTP_EXTTS_REQUEST */
+	ioctl(-1, PTP_EXTTS_REQUEST, NULL);
+	printf("ioctl(-1, PTP_EXTTS_REQUEST, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_EXTTS_REQUEST, extts);
+	saved_errno = errno;
+	printf("ioctl(-1, PTP_EXTTS_REQUEST, {index=%d, flags=", extts->index);
+	printflags(ptp_flags_options, extts->flags, "PTP_???");
+	errno = saved_errno;
+	printf("}) = -1 EBADF (%m)\n");
+
+	/* PTP_PEROUT_REQUEST */
+	ioctl(-1, PTP_PEROUT_REQUEST, NULL);
+	printf("ioctl(-1, PTP_PEROUT_REQUEST, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_PEROUT_REQUEST, perout);
+	saved_errno = errno;
+	printf("ioctl(-1, PTP_PEROUT_REQUEST, {start={sec=%" PRId64
+	       ", nsec=%" PRIu32 "}, period={sec=%" PRId64 ", nsec=%" PRIu32 "}"
+	       ", index=%d, flags=",
+	       (int64_t) perout->start.sec, perout->start.nsec,
+	       (int64_t)perout->period.sec, perout->period.nsec, perout->index);
+	printflags(ptp_flags_options, perout->flags, "PTP_???");
+	errno = saved_errno;
+	printf("}) = -1 EBADF (%m)\n");
+
+	/* unrecognized */
+	ioctl(-1, _IOC(_IOC_READ, PTP_CLK_MAGIC, 0xff, 0xfe), 0);
+	printf("ioctl(-1, _IOC(_IOC_READ, %#x, 0xff, 0xfe), 0)"
+	       " = -1 EBADF (%m)\n", PTP_CLK_MAGIC);
+
+	const unsigned long arg = (unsigned long) 0xfacefeeddeadbeefULL;
+	ioctl(-1, _IOC(_IOC_WRITE, PTP_CLK_MAGIC, 0xfd, 0xfc), arg);
+	printf("ioctl(-1, _IOC(_IOC_WRITE, %#x, 0xfd, 0xfc), %#lx)"
+	       " = -1 EBADF (%m)\n", PTP_CLK_MAGIC, arg);
+}
+
+int
+main(void)
+{
+	test_no_device();
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_PTP_SYS_OFFSET")
+
+#endif /* HAVE_STRUCT_PTP_SYS_OFFSET */
diff --git a/tests-m32/ioctl_ptp.gen.test b/tests-m32/ioctl_ptp.gen.test
new file mode 100755
index 0000000..6c0b0a9
--- /dev/null
+++ b/tests-m32/ioctl_ptp.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_ptp +ioctl.test ); do not edit.
+set -- 
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-m32/ioctl_v4l2.c b/tests-m32/ioctl_v4l2.c
index 2736b39..a7dcc49 100644
--- a/tests-m32/ioctl_v4l2.c
+++ b/tests-m32/ioctl_v4l2.c
@@ -842,6 +842,21 @@
 	printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_USER"
 	       ", count=%u}) = -1 EBADF (%m)\n", p_ext_controls->count);
 
+	p_ext_controls->ctrl_class = 0x00a30000;
+	p_ext_controls->count = magic;
+	ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls);
+	printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_DETECT"
+	       ", count=%u, controls=%p}) = -1 EBADF (%m)\n",
+	       p_ext_controls->count, p_ext_controls->controls);
+
+	p_ext_controls->ctrl_class = 0x00a40000;
+	p_ext_controls->count = magic;
+	ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls);
+	printf("ioctl(-1, VIDIOC_S_EXT_CTRLS"
+	       ", {ctrl_class=0xa40000 /* V4L2_CTRL_CLASS_??? */"
+	       ", count=%u, controls=%p}) = -1 EBADF (%m)\n",
+	       p_ext_controls->count, p_ext_controls->controls);
+
 	p_ext_controls->ctrl_class = V4L2_CTRL_CLASS_MPEG;
 	p_ext_controls->count = magic;
 	ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls);
@@ -883,7 +898,7 @@
 	       ", {ctrl_class=V4L2_CTRL_CLASS_MPEG, count=%u, controls="
 	       "[{id=V4L2_CID_BRIGHTNESS, size=0, value=%d, value64=%lld}"
 	       ", {id=V4L2_CID_CONTRAST, size=2, string=\"\\377\\377\"}"
-	       ", %p]}) = -1 EBADF (%m)\n",
+	       ", ... /* %p */]}) = -1 EBADF (%m)\n",
 	       p_ext_controls->count,
 	       p_ext_controls->controls[0].value,
 	       (long long) p_ext_controls->controls[0].value64,
diff --git a/tests-m32/ipc.sh b/tests-m32/ipc.sh
index 5943c1a..ef55073 100644
--- a/tests-m32/ipc.sh
+++ b/tests-m32/ipc.sh
@@ -5,7 +5,7 @@
 . "${srcdir=.}/init.sh"
 
 run_prog > /dev/null
-run_strace -eipc $args > "$EXP"
+run_strace -eipc "$@" $args > "$EXP"
 match_grep "$LOG" "$EXP"
 
 exit 0
diff --git a/tests-m32/ipc_msg-Xabbrev.c b/tests-m32/ipc_msg-Xabbrev.c
new file mode 100644
index 0000000..f4535e8
--- /dev/null
+++ b/tests-m32/ipc_msg-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_msg.c"
diff --git a/tests-m32/ipc_msg-Xabbrev.gen.test b/tests-m32/ipc_msg-Xabbrev.gen.test
new file mode 100755
index 0000000..0969ee1
--- /dev/null
+++ b/tests-m32/ipc_msg-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg-Xabbrev +ipc.sh -Xabbrev -a26); do not edit.
+set -- -Xabbrev -a26
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_msg-Xraw.c b/tests-m32/ipc_msg-Xraw.c
new file mode 100644
index 0000000..9c016d3
--- /dev/null
+++ b/tests-m32/ipc_msg-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_msg.c"
diff --git a/tests-m32/ipc_msg-Xraw.gen.test b/tests-m32/ipc_msg-Xraw.gen.test
new file mode 100755
index 0000000..5d5d732
--- /dev/null
+++ b/tests-m32/ipc_msg-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg-Xraw +ipc.sh -Xraw -a16); do not edit.
+set -- -Xraw -a16
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_msg-Xverbose.c b/tests-m32/ipc_msg-Xverbose.c
new file mode 100644
index 0000000..3f59f98
--- /dev/null
+++ b/tests-m32/ipc_msg-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_msg.c"
diff --git a/tests-m32/ipc_msg-Xverbose.gen.test b/tests-m32/ipc_msg-Xverbose.gen.test
new file mode 100755
index 0000000..88c79a0
--- /dev/null
+++ b/tests-m32/ipc_msg-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg-Xverbose +ipc.sh -Xverbose -a34); do not edit.
+set -- -Xverbose -a34
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_msg.c b/tests-m32/ipc_msg.c
index b493843..a74dba5 100644
--- a/tests-m32/ipc_msg.c
+++ b/tests-m32/ipc_msg.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-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,6 +36,10 @@
 #include "xlat.h"
 #include "xlat/resource_flags.h"
 
+#ifndef MSG_STAT_ANY
+# define MSG_STAT_ANY 13
+#endif
+
 /*
  * Before glibc-2.22-122-gbe48165, ppc64 code tried to retrieve data
  * provided in third argument of msgctl call (in case of IPC_SET cmd)
@@ -52,13 +57,50 @@
 # define TEST_MSGCTL_BOGUS_ADDR 1
 #endif
 
+#if XLAT_RAW
+# define str_ipc_excl_nowait "0xface1c00"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_set "0x1"
+# define str_ipc_stat "0x2"
+# define str_msg_stat "0xb"
+# define str_msg_info "0xc"
+# define str_msg_stat_any "0xd"
+# define str_ipc_64 "0x100"
+# define str_bogus_cmd "0xdeadbeef"
+#elif XLAT_VERBOSE
+# define str_ipc_excl_nowait \
+	"0xface1c00 /\\* IPC_EXCL\\|IPC_NOWAIT\\|0xface1000 \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_set "0x1 /\\* IPC_SET \\*/"
+# define str_ipc_stat "0x2 /\\* IPC_STAT \\*/"
+# define str_msg_stat "0xb /\\* MSG_STAT \\*/"
+# define str_msg_info "0xc /\\* MSG_INFO \\*/"
+# define str_msg_stat_any "0xd /\\* MSG_STAT_ANY \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+# define str_bogus_cmd "0xdeadbeef /\\* MSG_\\?\\?\\? \\*/"
+#else
+# define str_ipc_excl_nowait "IPC_EXCL\\|IPC_NOWAIT\\|0xface1000"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_set "IPC_SET"
+# define str_ipc_stat "IPC_STAT"
+# define str_msg_stat "MSG_STAT"
+# define str_msg_info "MSG_INFO"
+# define str_msg_stat_any "MSG_STAT_ANY"
+# define str_ipc_64 "IPC_64"
+# define str_bogus_cmd "0xdeadbeef /\\* MSG_\\?\\?\\? \\*/"
+#endif
+
 static int id = -1;
 
 static void
 cleanup(void)
 {
 	msgctl(id, IPC_RMID, NULL);
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_RMID, NULL\\) += 0\n", id);
+	printf("msgctl\\(%d, (%s\\|)?%s, NULL\\) += 0\n",
+	       id, str_ipc_64, str_ipc_rmid);
 	id = -1;
 }
 
@@ -67,7 +109,7 @@
 {
 	static const key_t private_key =
 		(key_t) (0xffffffff00000000ULL | IPC_PRIVATE);
-	static const key_t bogus_key = (key_t) 0xeca86420fdb97531ULL;
+	static const key_t bogus_key = (key_t) 0xeca86420fdb9f531ULL;
 	static const int bogus_msgid = 0xfdb97531;
 	static const int bogus_cmd = 0xdeadbeef;
 #if TEST_MSGCTL_BOGUS_ADDR
@@ -79,37 +121,36 @@
 	struct msqid_ds ds;
 
 	rc = msgget(bogus_key, bogus_flags);
-	printf("msgget\\(%#llx, %s%s%s%#x\\|%#04o\\) += %s\n",
+	printf("msgget\\(%#llx, %s\\|%#04o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key),
-	       IPC_CREAT & bogus_flags ? "IPC_CREAT\\|" : "",
-	       IPC_EXCL & bogus_flags ? "IPC_EXCL\\|" : "",
-	       IPC_NOWAIT & bogus_flags ? "IPC_NOWAIT\\|" : "",
-	       bogus_flags & ~(0777 | IPC_CREAT | IPC_EXCL | IPC_NOWAIT),
+	       str_ipc_excl_nowait,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	id = msgget(private_key, 0600);
 	if (id < 0)
 		perror_msg_and_skip("msgget");
-	printf("msgget\\(IPC_PRIVATE, 0600\\) += %d\n", id);
+	printf("msgget\\(%s, 0600\\) = %d\n", str_ipc_private, id);
 	atexit(cleanup);
 
 	rc = msgctl(bogus_msgid, bogus_cmd, NULL);
-	printf("msgctl\\(%d, (IPC_64\\|)?%#x /\\* MSG_\\?\\?\\? \\*/, NULL\\)"
-	       " += %s\n", bogus_msgid, bogus_cmd, sprintrc_grep(rc));
+	printf("msgctl\\(%d, (%s\\|)?%s, NULL\\) = %s\n",
+	       bogus_msgid, str_ipc_64, str_bogus_cmd, sprintrc_grep(rc));
 
 #if TEST_MSGCTL_BOGUS_ADDR
 	rc = msgctl(bogus_msgid, IPC_SET, bogus_addr);
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_SET, %p\\) += %s\n",
-	       bogus_msgid, bogus_addr, sprintrc_grep(rc));
+	printf("msgctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       bogus_msgid, str_ipc_64, str_ipc_set, bogus_addr,
+	       sprintrc_grep(rc));
 #endif
 
 	if (msgctl(id, IPC_STAT, &ds))
 		perror_msg_and_skip("msgctl IPC_STAT");
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_STAT, \\{msg_perm=\\{uid=%u"
+	printf("msgctl\\(%d, (%s\\|)?%s, \\{msg_perm=\\{uid=%u"
 	       ", gid=%u, mode=%#o, key=%u, cuid=%u, cgid=%u\\}, msg_stime=%u"
 	       ", msg_rtime=%u, msg_ctime=%u, msg_qnum=%u, msg_qbytes=%u"
-	       ", msg_lspid=%u, msg_lrpid=%u\\}\\) += 0\n",
-	       id, (unsigned) ds.msg_perm.uid, (unsigned) ds.msg_perm.gid,
+	       ", msg_lspid=%u, msg_lrpid=%u\\}\\) = 0\n",
+	       id, str_ipc_64, str_ipc_stat,
+	       (unsigned) ds.msg_perm.uid, (unsigned) ds.msg_perm.gid,
 	       (unsigned) ds.msg_perm.mode, (unsigned) ds.msg_perm.__key,
 	       (unsigned) ds.msg_perm.cuid, (unsigned) ds.msg_perm.cgid,
 	       (unsigned) ds.msg_stime, (unsigned) ds.msg_rtime,
@@ -119,18 +160,22 @@
 
 	if (msgctl(id, IPC_SET, &ds))
 		perror_msg_and_skip("msgctl IPC_SET");
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_SET, \\{msg_perm=\\{uid=%u"
-	       ", gid=%u, mode=%#o\\}, ...\\}\\) += 0\n",
-	       id, (unsigned) ds.msg_perm.uid, (unsigned) ds.msg_perm.gid,
-	       (unsigned) ds.msg_perm.mode);
+	printf("msgctl\\(%d, (%s\\|)?%s, \\{msg_perm=\\{uid=%u"
+	       ", gid=%u, mode=%#o\\}, ...\\}\\) = 0\n",
+	       id, str_ipc_64, str_ipc_set, (unsigned) ds.msg_perm.uid,
+	       (unsigned) ds.msg_perm.gid, (unsigned) ds.msg_perm.mode);
 
 	rc = msgctl(0, MSG_INFO, &ds);
-	printf("msgctl\\(0, (IPC_64\\|)?MSG_INFO, %p\\) += %s\n",
-	       &ds, sprintrc_grep(rc));
+	printf("msgctl\\(0, (%s\\|)?%s, %p\\) = %s\n",
+	       str_ipc_64, str_msg_info, &ds, sprintrc_grep(rc));
 
 	rc = msgctl(id, MSG_STAT, &ds);
-	printf("msgctl\\(%d, (IPC_64\\|)?MSG_STAT, %p\\) += %s\n",
-	       id, &ds, sprintrc_grep(rc));
+	printf("msgctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_msg_stat, &ds, sprintrc_grep(rc));
+
+	rc = msgctl(id, MSG_STAT_ANY, &ds);
+	printf("msgctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_msg_stat_any, &ds, sprintrc_grep(rc));
 
 	return 0;
 }
diff --git a/tests-m32/ipc_msg.gen.test b/tests-m32/ipc_msg.gen.test
index b1f1f7e..8202619 100755
--- a/tests-m32/ipc_msg.gen.test
+++ b/tests-m32/ipc_msg.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg +ipc.sh ); do not edit.
-set -- 
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg +ipc.sh -a26); do not edit.
+set -- -a26
 . "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_msgbuf-Xabbrev.c b/tests-m32/ipc_msgbuf-Xabbrev.c
new file mode 100644
index 0000000..e2f09eb
--- /dev/null
+++ b/tests-m32/ipc_msgbuf-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_msgbuf.c"
diff --git a/tests-m32/ipc_msgbuf-Xabbrev.gen.test b/tests-m32/ipc_msgbuf-Xabbrev.gen.test
new file mode 100755
index 0000000..402d804
--- /dev/null
+++ b/tests-m32/ipc_msgbuf-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msgbuf-Xabbrev +ipc_msgbuf.test -Xabbrev); do not edit.
+set -- -Xabbrev
+. "${srcdir=.}/ipc_msgbuf.test"
diff --git a/tests-m32/ipc_msgbuf-Xraw.c b/tests-m32/ipc_msgbuf-Xraw.c
new file mode 100644
index 0000000..c6f8a31
--- /dev/null
+++ b/tests-m32/ipc_msgbuf-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_msgbuf.c"
diff --git a/tests-m32/ipc_msgbuf-Xraw.gen.test b/tests-m32/ipc_msgbuf-Xraw.gen.test
new file mode 100755
index 0000000..c1112cb
--- /dev/null
+++ b/tests-m32/ipc_msgbuf-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msgbuf-Xraw +ipc_msgbuf.test -Xraw -a22); do not edit.
+set -- -Xraw -a22
+. "${srcdir=.}/ipc_msgbuf.test"
diff --git a/tests-m32/ipc_msgbuf-Xverbose.c b/tests-m32/ipc_msgbuf-Xverbose.c
new file mode 100644
index 0000000..ae09a4a
--- /dev/null
+++ b/tests-m32/ipc_msgbuf-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_msgbuf.c"
diff --git a/tests-m32/ipc_msgbuf-Xverbose.gen.test b/tests-m32/ipc_msgbuf-Xverbose.gen.test
new file mode 100755
index 0000000..2c72eb7
--- /dev/null
+++ b/tests-m32/ipc_msgbuf-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msgbuf-Xverbose +ipc_msgbuf.test -Xverbose); do not edit.
+set -- -Xverbose
+. "${srcdir=.}/ipc_msgbuf.test"
diff --git a/tests-m32/ipc_msgbuf.c b/tests-m32/ipc_msgbuf.c
index c4af1be..e439c49 100644
--- a/tests-m32/ipc_msgbuf.c
+++ b/tests-m32/ipc_msgbuf.c
@@ -1,7 +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.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,10 @@
  */
 
 #include "tests.h"
+#include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <asm/unistd.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
 #include <sys/stat.h>
@@ -38,22 +41,54 @@
 
 static int msqid = -1;
 
+#if XLAT_RAW
+# define str_ipc_creat "0x200"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_64 "0x100"
+#elif XLAT_VERBOSE
+# define str_ipc_creat "0x200 /\\* IPC_CREAT \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+#else
+# define str_ipc_creat "IPC_CREAT"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_64 "IPC_64"
+#endif
+
 static int
 cleanup(void)
 {
 	if (msqid != -1) {
 		int rc = msgctl(msqid, IPC_RMID, 0);
+		printf("msgctl\\(%d, (%s\\|)?%s, NULL\\) = 0\n",
+		       msqid, str_ipc_64, str_ipc_rmid);
 		msqid = -1;
 		if (rc == -1)
 			return 77;
+		puts("\\+\\+\\+ exited with 0 \\+\\+\\+");
 	}
 	return 0;
 }
 
 int
+sys_msgrcv(int msqid, void *msgp, size_t sz, kernel_long_t msgtyp,
+	   int msgflg)
+{
+#if defined __x86_64__ && defined __ILP32__
+	return syscall(__NR_msgrcv, msqid, msgp, sz, msgtyp, msgflg);
+#else
+	return msgrcv(msqid, msgp, sz, msgtyp, msgflg);
+#endif
+}
+
+int
 main(void)
 {
-	const long mtype = 0xdefaced;
+	/* mtype has to be positive */
+	const kernel_long_t mtype = (kernel_long_t) 0x7facefed5adc0dedULL;
 	struct {
 		kernel_long_t mtype;
 		char mtext[msgsz];
@@ -64,11 +99,23 @@
 	msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRWXU);
 	if (msqid == -1)
 		perror_msg_and_skip("msgget");
+	printf("msgget\\(%s, %s\\|0700\\) = %d\n",
+	       str_ipc_private, str_ipc_creat, msqid);
+
 	typedef void (*atexit_func)(void);
 	atexit((atexit_func) cleanup);
+
+	printf("msgsnd\\(%d, \\{%lld, \"" text_string "\\\\0\"\\}, 14, 0\\)"
+	       " = 0\n",
+	       msqid, (long long) mtype);
 	if (msgsnd(msqid, &msg, msgsz, 0) == -1)
 		perror_msg_and_skip("msgsnd");
-	if (msgrcv(msqid, &msg, msgsz, mtype, 0) != msgsz)
+
+	if (sys_msgrcv(msqid, &msg, msgsz, -mtype, 0) != msgsz)
 		perror_msg_and_skip("msgrcv");
+	printf("msgrcv\\(%d, \\{%lld, \"" text_string "\\\\0\"\\}, 14, %lld"
+	       ", 0\\) = 14\n",
+	       msqid, (long long) mtype, -(long long) mtype);
+
 	return cleanup();
 }
diff --git a/tests-m32/ipc_msgbuf.test b/tests-m32/ipc_msgbuf.test
index d0b65d1..9e78785 100755
--- a/tests-m32/ipc_msgbuf.test
+++ b/tests-m32/ipc_msgbuf.test
@@ -5,7 +5,7 @@
 . "${srcdir=.}/init.sh"
 
 run_prog
-run_strace -v -e msgget,msgsnd,msgrcv,msgctl $args
-match_grep
+run_strace -a26 -v -e msgget,msgsnd,msgrcv,msgctl "$@" $args > "$EXP"
+match_grep "$LOG" "$EXP"
 
 exit 0
diff --git a/tests-m32/ipc_sem-Xabbrev.c b/tests-m32/ipc_sem-Xabbrev.c
new file mode 100644
index 0000000..727005a
--- /dev/null
+++ b/tests-m32/ipc_sem-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_sem.c"
diff --git a/tests-m32/ipc_sem-Xabbrev.gen.test b/tests-m32/ipc_sem-Xabbrev.gen.test
new file mode 100755
index 0000000..0757a48
--- /dev/null
+++ b/tests-m32/ipc_sem-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem-Xabbrev +ipc.sh -Xabbrev -a29); do not edit.
+set -- -Xabbrev -a29
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_sem-Xraw.c b/tests-m32/ipc_sem-Xraw.c
new file mode 100644
index 0000000..0a57c0a
--- /dev/null
+++ b/tests-m32/ipc_sem-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_sem.c"
diff --git a/tests-m32/ipc_sem-Xraw.gen.test b/tests-m32/ipc_sem-Xraw.gen.test
new file mode 100755
index 0000000..07d59e5
--- /dev/null
+++ b/tests-m32/ipc_sem-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem-Xraw +ipc.sh -Xraw -a19); do not edit.
+set -- -Xraw -a19
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_sem-Xverbose.c b/tests-m32/ipc_sem-Xverbose.c
new file mode 100644
index 0000000..56e8380
--- /dev/null
+++ b/tests-m32/ipc_sem-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_sem.c"
diff --git a/tests-m32/ipc_sem-Xverbose.gen.test b/tests-m32/ipc_sem-Xverbose.gen.test
new file mode 100755
index 0000000..43a61d0
--- /dev/null
+++ b/tests-m32/ipc_sem-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem-Xverbose +ipc.sh -Xverbose -a36); do not edit.
+set -- -Xverbose -a36
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_sem.c b/tests-m32/ipc_sem.c
index c883272..8cbbfaa 100644
--- a/tests-m32/ipc_sem.c
+++ b/tests-m32/ipc_sem.c
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2015 Andreas Schwab <schwab@suse.de>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,6 +36,43 @@
 #include "xlat.h"
 #include "xlat/resource_flags.h"
 
+#ifndef SEM_STAT_ANY
+# define SEM_STAT_ANY 20
+#endif
+
+#if XLAT_RAW
+# define str_ipc_flags "0xface1e00"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_stat "0x2"
+# define str_sem_stat "0x12"
+# define str_sem_info "0x13"
+# define str_sem_stat_any "0x14"
+# define str_ipc_64 "0x100"
+# define str_bogus_cmd "0xdeadbeef"
+#elif XLAT_VERBOSE
+# define str_ipc_flags \
+	"0xface1e00 /\\* IPC_CREAT\\|IPC_EXCL\\|IPC_NOWAIT\\|0xface1000 \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_stat "0x2 /\\* IPC_STAT \\*/"
+# define str_sem_stat "0x12 /\\* SEM_STAT \\*/"
+# define str_sem_info "0x13 /\\* SEM_INFO \\*/"
+# define str_sem_stat_any "0x14 /\\* SEM_STAT_ANY \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+# define str_bogus_cmd "0xdeadbeef /\\* SEM_\\?\\?\\? \\*/"
+#else
+# define str_ipc_flags "IPC_CREAT\\|IPC_EXCL\\|IPC_NOWAIT\\|0xface1000"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_stat "IPC_STAT"
+# define str_sem_stat "SEM_STAT"
+# define str_sem_info "SEM_INFO"
+# define str_sem_stat_any "SEM_STAT_ANY"
+# define str_ipc_64 "IPC_64"
+# define str_bogus_cmd "0xdeadbeef /\\* SEM_\\?\\?\\? \\*/"
+#endif
+
 union semun {
 	int		 val;    /* Value for SETVAL */
 	struct semid_ds	*buf;    /* Buffer for IPC_STAT, IPC_SET */
@@ -50,8 +87,8 @@
 cleanup(void)
 {
 	semctl(id, 0, IPC_RMID, 0);
-	printf("semctl\\(%d, 0, (IPC_64\\|)?IPC_RMID, \\[?NULL\\]?\\) += 0\n",
-	       id);
+	printf("semctl\\(%d, 0, (%s\\|)?%s, \\[?NULL\\]?\\) = 0\n",
+	       id, str_ipc_64, str_ipc_rmid);
 	id = -1;
 }
 
@@ -75,42 +112,41 @@
 	struct seminfo info;
 
 	rc = semget(bogus_key, bogus_size, bogus_flags);
-	printf("semget\\(%#llx, %d, %s%s%s%#x\\|%#04o\\) += %s\n",
+	printf("semget\\(%#llx, %d, %s\\|%#04o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       IPC_CREAT & bogus_flags ? "IPC_CREAT\\|" : "",
-	       IPC_EXCL & bogus_flags ? "IPC_EXCL\\|" : "",
-	       IPC_NOWAIT & bogus_flags ? "IPC_NOWAIT\\|" : "",
-	       bogus_flags & ~(0777 | IPC_CREAT | IPC_EXCL | IPC_NOWAIT),
-	       bogus_flags & 0777, sprintrc_grep(rc));
+	       str_ipc_flags, bogus_flags & 0777, sprintrc_grep(rc));
 
 	id = semget(private_key, 1, 0600);
 	if (id < 0)
 		perror_msg_and_skip("semget");
-	printf("semget\\(IPC_PRIVATE, 1, 0600\\) += %d\n", id);
+	printf("semget\\(%s, 1, 0600\\) = %d\n", str_ipc_private, id);
 	atexit(cleanup);
 
 	rc = semctl(bogus_semid, bogus_semnum, bogus_cmd, bogus_arg);
 #define SEMCTL_BOGUS_ARG_FMT "(%#lx|\\[(%#lx|NULL)\\]|NULL)"
-	printf("semctl\\(%d, %d, (IPC_64\\|)?%#x /\\* SEM_\\?\\?\\? \\*/"
-	       ", " SEMCTL_BOGUS_ARG_FMT "\\) += %s\n",
-	       bogus_semid, bogus_semnum, bogus_cmd,
+	printf("semctl\\(%d, %d, (%s\\|)?%s, " SEMCTL_BOGUS_ARG_FMT "\\) = %s\n",
+	       bogus_semid, bogus_semnum, str_ipc_64, str_bogus_cmd,
 	       bogus_arg, bogus_arg, sprintrc_grep(rc));
 
 	un.buf = &ds;
 	if (semctl(id, 0, IPC_STAT, un))
 		perror_msg_and_skip("semctl IPC_STAT");
-	printf("semctl\\(%d, 0, (IPC_64\\|)?IPC_STAT, \\[?%p\\]?\\) += 0\n",
-	       id, &ds);
+	printf("semctl\\(%d, 0, (%s\\|)?%s, \\[?%p\\]?\\) = 0\n",
+	       id, str_ipc_64, str_ipc_stat, &ds);
 
 	un.__buf = &info;
 	rc = semctl(0, 0, SEM_INFO, un);
-	printf("semctl\\(0, 0, (IPC_64\\|)?SEM_INFO, \\[?%p\\]?\\) += %s\n",
-	       &info, sprintrc_grep(rc));
+	printf("semctl\\(0, 0, (%s\\|)?%s, \\[?%p\\]?\\) = %s\n",
+	       str_ipc_64, str_sem_info, &info, sprintrc_grep(rc));
 
 	un.buf = &ds;
 	rc = semctl(id, 0, SEM_STAT, un);
-	printf("semctl\\(%d, 0, (IPC_64\\|)?SEM_STAT, \\[?%p\\]?\\) += %s\n",
-	       id, &ds, sprintrc_grep(rc));
+	printf("semctl\\(%d, 0, (%s\\|)?%s, \\[?%p\\]?\\) = %s\n",
+	       id, str_ipc_64, str_sem_stat, &ds, sprintrc_grep(rc));
+
+	rc = semctl(id, 0, SEM_STAT_ANY, un);
+	printf("semctl\\(%d, 0, (%s\\|)?%s, (%p|\\[(%p|NULL)\\]|NULL)\\) = %s\n",
+	       id, str_ipc_64, str_sem_stat_any, &ds, &ds, sprintrc_grep(rc));
 
 	return 0;
 }
diff --git a/tests-m32/ipc_sem.gen.test b/tests-m32/ipc_sem.gen.test
index a1c03d2..173b3af 100755
--- a/tests-m32/ipc_sem.gen.test
+++ b/tests-m32/ipc_sem.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem +ipc.sh ); do not edit.
-set -- 
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem +ipc.sh -a29); do not edit.
+set -- -a29
 . "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_shm-Xabbrev.c b/tests-m32/ipc_shm-Xabbrev.c
new file mode 100644
index 0000000..c191aea
--- /dev/null
+++ b/tests-m32/ipc_shm-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_shm.c"
diff --git a/tests-m32/ipc_shm-Xabbrev.gen.test b/tests-m32/ipc_shm-Xabbrev.gen.test
new file mode 100755
index 0000000..d68c246
--- /dev/null
+++ b/tests-m32/ipc_shm-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm-Xabbrev +ipc.sh -Xabbrev -a29); do not edit.
+set -- -Xabbrev -a29
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_shm-Xraw.c b/tests-m32/ipc_shm-Xraw.c
new file mode 100644
index 0000000..08e09ac
--- /dev/null
+++ b/tests-m32/ipc_shm-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_shm.c"
diff --git a/tests-m32/ipc_shm-Xraw.gen.test b/tests-m32/ipc_shm-Xraw.gen.test
new file mode 100755
index 0000000..071eef6
--- /dev/null
+++ b/tests-m32/ipc_shm-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm-Xraw +ipc.sh -Xraw -a19); do not edit.
+set -- -Xraw -a19
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_shm-Xverbose.c b/tests-m32/ipc_shm-Xverbose.c
new file mode 100644
index 0000000..b936785
--- /dev/null
+++ b/tests-m32/ipc_shm-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_shm.c"
diff --git a/tests-m32/ipc_shm-Xverbose.gen.test b/tests-m32/ipc_shm-Xverbose.gen.test
new file mode 100755
index 0000000..170adee
--- /dev/null
+++ b/tests-m32/ipc_shm-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm-Xverbose +ipc.sh -Xverbose -a36); do not edit.
+set -- -Xverbose -a36
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/ipc_shm.c b/tests-m32/ipc_shm.c
index 6586c8a..f5802cc 100644
--- a/tests-m32/ipc_shm.c
+++ b/tests-m32/ipc_shm.c
@@ -41,16 +41,62 @@
 # define SHM_HUGE_MASK 0x3f
 #endif
 
+#ifndef SHM_STAT_ANY
+# define SHM_STAT_ANY 15
+#endif
+
 #include "xlat.h"
 #include "xlat/shm_resource_flags.h"
 
+#if XLAT_RAW
+# define str_ipc_flags "0x2ce1e00"
+# define str_shm_huge "21<<26"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_set "0x1"
+# define str_ipc_stat "0x2"
+# define str_shm_stat "0xd"
+# define str_shm_info "0xe"
+# define str_shm_stat_any "0xf"
+# define str_ipc_64 "0x100"
+# define str_bogus_cmd "0xdefaced2"
+#elif XLAT_VERBOSE
+# define str_ipc_flags \
+	"0x2ce1e00 /\\* IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE" \
+	"\\|0x2ce0000 \\*/"
+# define str_shm_huge "21<<26 /\\* SHM_HUGE_SHIFT \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_set "0x1 /\\* IPC_SET \\*/"
+# define str_ipc_stat "0x2 /\\* IPC_STAT \\*/"
+# define str_shm_stat "0xd /\\* SHM_STAT \\*/"
+# define str_shm_info "0xe /\\* SHM_INFO \\*/"
+# define str_shm_stat_any "0xf /\\* SHM_STAT_ANY \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+# define str_bogus_cmd "0xdefaced2 /\\* SHM_\\?\\?\\? \\*/"
+#else
+# define str_ipc_flags \
+	"IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE\\|0x2ce0000"
+# define str_shm_huge "21<<SHM_HUGE_SHIFT"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_set "IPC_SET"
+# define str_ipc_stat "IPC_STAT"
+# define str_shm_stat "SHM_STAT"
+# define str_shm_info "SHM_INFO"
+# define str_shm_stat_any "SHM_STAT_ANY"
+# define str_ipc_64 "IPC_64"
+# define str_bogus_cmd "0xdefaced2 /\\* SHM_\\?\\?\\? \\*/"
+#endif
+
 static int id = -1;
 
 static void
 cleanup(void)
 {
 	shmctl(id, IPC_RMID, NULL);
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_RMID, NULL\\) += 0\n", id);
+	printf("shmctl\\(%d, (%s\\|)?%s, NULL\\) = 0\n",
+	       id, str_ipc_64, str_ipc_rmid);
 	id = -1;
 }
 
@@ -82,68 +128,67 @@
 	struct shmid_ds ds;
 
 	rc = shmget(bogus_key, bogus_size, 0);
-	printf("shmget\\(%#llx, %zu, 000\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, 000\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
 	       sprintrc_grep(rc));
 
 	rc = shmget(bogus_key, bogus_size, huge_flags);
-	printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       "21<<SHM_HUGE_SHIFT", 0, sprintrc_grep(rc));
+	       str_shm_huge, 0, sprintrc_grep(rc));
 
 	bogus_flags = 0xface1e55 & ~(bogus_ipc_shm_flags | huge_mask);
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %#x\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %#x\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
 	       bogus_flags & ~0777,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	bogus_flags |= bogus_ipc_shm_flags;
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %s\\|%#x\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       "IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE",
-	       bogus_flags & ~(0777 | bogus_ipc_shm_flags),
+	       str_ipc_flags,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	bogus_flags |= huge_flags;
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %s\\|%#x\\|%s\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %s\\|%s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       "IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE",
-	       bogus_flags & ~(0777 | bogus_ipc_shm_flags | huge_mask),
-	       "21<<SHM_HUGE_SHIFT",
+	       str_ipc_flags, str_shm_huge,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	bogus_flags &= ~bogus_ipc_shm_flags;
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %#x\\|%s\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %#x\\|%s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
 	       bogus_flags & ~(0777 | huge_mask),
-	       "21<<SHM_HUGE_SHIFT",
+	       str_shm_huge,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	id = shmget(private_key, 1, 0600);
 	if (id < 0)
 		perror_msg_and_skip("shmget");
-	printf("shmget\\(IPC_PRIVATE, 1, 0600\\) += %d\n", id);
+	printf("shmget\\(%s, 1, 0600\\) = %d\n", str_ipc_private, id);
 	atexit(cleanup);
 
 	rc = shmctl(bogus_id, bogus_cmd, NULL);
-	printf("shmctl\\(%d, (IPC_64\\|)?%#x /\\* SHM_\\?\\?\\? \\*/, NULL\\)"
-	       " += %s\n", bogus_id, bogus_cmd, sprintrc_grep(rc));
+	printf("shmctl\\(%d, (%s\\|)?%s, NULL\\) = %s\n",
+	       bogus_id, str_ipc_64, str_bogus_cmd, sprintrc_grep(rc));
 
 	rc = shmctl(bogus_id, IPC_STAT, bogus_addr);
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_STAT, %p\\) += %s\n",
-	       bogus_id, bogus_addr, sprintrc_grep(rc));
+	printf("shmctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       bogus_id, str_ipc_64, str_ipc_stat, bogus_addr,
+	       sprintrc_grep(rc));
 
 	if (shmctl(id, IPC_STAT, &ds))
 		perror_msg_and_skip("shmctl IPC_STAT");
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_STAT, \\{shm_perm=\\{uid=%u, gid=%u, "
+	printf("shmctl\\(%d, (%s\\|)?%s, \\{shm_perm=\\{uid=%u, gid=%u, "
 		"mode=%#o, key=%u, cuid=%u, cgid=%u\\}, shm_segsz=%u, shm_cpid=%u, "
 		"shm_lpid=%u, shm_nattch=%u, shm_atime=%u, shm_dtime=%u, "
-		"shm_ctime=%u\\}\\) += 0\n",
-		id, (unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
+		"shm_ctime=%u\\}\\) = 0\n",
+		id, str_ipc_64, str_ipc_stat,
+		(unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
 		(unsigned) ds.shm_perm.mode, (unsigned) ds.shm_perm.__key,
 		(unsigned) ds.shm_perm.cuid, (unsigned) ds.shm_perm.cgid,
 		(unsigned) ds.shm_segsz, (unsigned) ds.shm_cpid,
@@ -153,18 +198,23 @@
 
 	if (shmctl(id, IPC_SET, &ds))
 		perror_msg_and_skip("shmctl IPC_SET");
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_SET, \\{shm_perm=\\{uid=%u, gid=%u"
-	       ", mode=%#o\\}, ...\\}\\) += 0\n",
-	       id, (unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
+	printf("shmctl\\(%d, (%s\\|)?%s, \\{shm_perm=\\{uid=%u, gid=%u"
+	       ", mode=%#o\\}, ...\\}\\) = 0\n",
+	       id, str_ipc_64, str_ipc_set,
+	       (unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
 	       (unsigned) ds.shm_perm.mode);
 
 	rc = shmctl(0, SHM_INFO, &ds);
-	printf("shmctl\\(0, (IPC_64\\|)?SHM_INFO, %p\\) += %s\n",
-	       &ds, sprintrc_grep(rc));
+	printf("shmctl\\(0, (%s\\|)?%s, %p\\) = %s\n",
+	       str_ipc_64, str_shm_info, &ds, sprintrc_grep(rc));
 
 	rc = shmctl(id, SHM_STAT, &ds);
-	printf("shmctl\\(%d, (IPC_64\\|)?SHM_STAT, %p\\) += %s\n",
-	       id, &ds, sprintrc_grep(rc));
+	printf("shmctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_shm_stat, &ds, sprintrc_grep(rc));
+
+	rc = shmctl(id, SHM_STAT_ANY, &ds);
+	printf("shmctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_shm_stat_any, &ds, sprintrc_grep(rc));
 
 	return 0;
 }
diff --git a/tests-m32/ipc_shm.gen.test b/tests-m32/ipc_shm.gen.test
index 8c6df9b..2e697d3 100755
--- a/tests-m32/ipc_shm.gen.test
+++ b/tests-m32/ipc_shm.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm +ipc.sh ); do not edit.
-set -- 
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm +ipc.sh -a29); do not edit.
+set -- -a29
 . "${srcdir=.}/ipc.sh"
diff --git a/tests-m32/kcmp.c b/tests-m32/kcmp.c
index 60cd300..a6a05c5 100644
--- a/tests-m32/kcmp.c
+++ b/tests-m32/kcmp.c
@@ -2,6 +2,7 @@
  * Check decoding of kcmp syscall.
  *
  * Copyright (c) 2016-2017 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -167,7 +168,7 @@
 
 	int fd;
 	unsigned i;
-	struct kcmp_epoll_slot *slot = tail_alloc(sizeof(*slot));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct kcmp_epoll_slot, slot);
 
 	/* Open some files to test printpidfd */
 	fd = open(null_path, O_RDONLY);
diff --git a/tests-m32/kexec_load.c b/tests-m32/kexec_load.c
index 2a6b441..ff4507c 100644
--- a/tests-m32/kexec_load.c
+++ b/tests-m32/kexec_load.c
@@ -2,7 +2,7 @@
  * Check decoding of kexec_load syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -129,7 +129,7 @@
 		printf("{buf=%p, bufsz=%zu, mem=%p, memsz=%zu}, ",
 		       segms[i].buf, segms[i].bufsz,
 		       segms[i].mem, segms[i].memsz);
-	printf("%p], %s%s) = %s\n",
+	printf("... /* %p */], %s%s) = %s\n",
 	       segms + NUM_SEGMS,
 	       sizeof(long) == 8 ? flags[0].str64 : flags[0].str32,
 	       flags[0].str, errstr);
diff --git a/tests-m32/keyctl-Xabbrev.c b/tests-m32/keyctl-Xabbrev.c
new file mode 100644
index 0000000..7b6b0dc
--- /dev/null
+++ b/tests-m32/keyctl-Xabbrev.c
@@ -0,0 +1 @@
+#include "keyctl.c"
diff --git a/tests-m32/keyctl-Xabbrev.gen.test b/tests-m32/keyctl-Xabbrev.gen.test
new file mode 100755
index 0000000..0068a03
--- /dev/null
+++ b/tests-m32/keyctl-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (keyctl-Xabbrev -a31 -s10 -e trace=keyctl -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a31 -s10 -e trace=keyctl -Xabbrev
diff --git a/tests-m32/keyctl-Xraw.c b/tests-m32/keyctl-Xraw.c
new file mode 100644
index 0000000..202c22a
--- /dev/null
+++ b/tests-m32/keyctl-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "keyctl.c"
diff --git a/tests-m32/keyctl-Xraw.gen.test b/tests-m32/keyctl-Xraw.gen.test
new file mode 100755
index 0000000..2d89ea7
--- /dev/null
+++ b/tests-m32/keyctl-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (keyctl-Xraw -a13 -s10 -e trace=keyctl -Xraw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a13 -s10 -e trace=keyctl -Xraw
diff --git a/tests-m32/keyctl-Xverbose.c b/tests-m32/keyctl-Xverbose.c
new file mode 100644
index 0000000..9f9d744
--- /dev/null
+++ b/tests-m32/keyctl-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "keyctl.c"
diff --git a/tests-m32/keyctl-Xverbose.gen.test b/tests-m32/keyctl-Xverbose.gen.test
new file mode 100755
index 0000000..a0cdd7d
--- /dev/null
+++ b/tests-m32/keyctl-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (keyctl-Xverbose -a41 -s10 -e trace=keyctl -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a41 -s10 -e trace=keyctl -Xverbose
diff --git a/tests-m32/keyctl.c b/tests-m32/keyctl.c
index 5d46ab7..881f24b 100644
--- a/tests-m32/keyctl.c
+++ b/tests-m32/keyctl.c
@@ -89,6 +89,14 @@
 /* From ioctl_dm.c */
 # define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
 
+#if XLAT_RAW
+# define XARG_STR(v_) (v_), STRINGIFY(v_)
+#elif XLAT_VERBOSE
+# define XARG_STR(v_) (v_), STRINGIFY(v_) " /* " #v_ " */"
+#else
+# define XARG_STR ARG_STR
+#endif
+
 /*
  * When this is called with positive size, the buffer provided is an "out"
  * argument and rc contains resulting size (globally defined nul_terminated_buf
@@ -187,7 +195,13 @@
 
 	long rc = syscall(__NR_keyctl, cmd, args[0], args[1], args[2], args[3]);
 	const char *errstr = sprintrc(rc);
+#if XLAT_RAW
+	printf("keyctl(%#x", (unsigned) cmd);
+#elif XLAT_VERBOSE
+	printf("keyctl(%#x /* %s */", (unsigned) cmd, cmd_str);
+#else
 	printf("keyctl(%s", cmd_str);
+#endif
 	for (i = 0; i < cnt; i++) {
 		printf(", ");
 		print_arg(args[i], arg_str[i], arg_fmt[i], arg_sz[i], rc);
@@ -299,8 +313,20 @@
 
 	static const struct keyctl_dh_params kcdhp_data = {
 		KEY_SPEC_GROUP_KEYRING, 1234567890, 3141592653U };
-	static const char *kcdhp_str = "{private=KEY_SPEC_GROUP_KEYRING, "
-		"prime=1234567890, base=-1153374643}";
+	static const char *kcdhp_str = "{private="
+#if XLAT_RAW || XLAT_VERBOSE
+		"-6"
+#endif
+#if XLAT_VERBOSE
+		" /* "
+#endif
+#if !XLAT_RAW
+		"KEY_SPEC_GROUP_KEYRING"
+#endif
+#if XLAT_VERBOSE
+		" */"
+#endif
+		", prime=1234567890, base=-1153374643}";
 
 	/*
 	 * It's bigger than current hash name size limit, but since it's
@@ -418,7 +444,15 @@
 
 	/* Invalid command */
 	do_keyctl((kernel_ulong_t) 0xbadc0dedfacefeedULL,
-		  "0xfacefeed /* KEYCTL_??? */",
+#if XLAT_VERBOSE
+		  "KEYCTL_???"
+#else
+		  "0xfacefeed"
+# if !XLAT_RAW
+		  " /* KEYCTL_??? */"
+# endif
+#endif
+		  ,
 		  sizeof(kernel_ulong_t),
 			(kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL,
 			kulong_fmt,
@@ -440,7 +474,7 @@
 			(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(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), "%d",
 		  sizeof(int), 3141592653U, NULL, "%d", NULL,
 		  0UL);
 
@@ -469,7 +503,7 @@
 	buf_in_arg = true;
 
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(kernel_ulong_t), (kernel_ulong_t) 0, NULL, ksize_fmt,
 		  0UL);
@@ -498,7 +532,7 @@
 
 	/* KEYCTL_REVOKE */
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -513,7 +547,7 @@
 
 	/* KEYCTL_CHOWN */
 	do_keyctl(ARG_STR(KEYCTL_CHOWN),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(uid_t), ARG_STR(-1), NULL,
 		  sizeof(gid_t), ARG_STR(-1), NULL,
 		  0UL);
@@ -526,8 +560,15 @@
 
 	/* KEYCTL_SETPERM */
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
 		  sizeof(uint32_t), 0xffffffffU,
+#if XLAT_RAW || XLAT_VERBOSE
+			"0xffffffff"
+#endif
+#if XLAT_VERBOSE
+			" /* "
+#endif
+#if !XLAT_RAW
 			"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|"
@@ -536,7 +577,12 @@
 			"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,
+			"0xc0c0c0c0"
+#endif
+#if XLAT_VERBOSE
+			" */"
+#endif
+			, NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -544,7 +590,12 @@
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
-		  sizeof(uint32_t), 0xc0c0c0c0, "0xc0c0c0c0 /* KEY_??? */",
+		  sizeof(uint32_t), 0xc0c0c0c0,
+			  "0xc0c0c0c0"
+#if !XLAT_RAW
+			  " /* KEY_??? */"
+#endif
+			  ,
 			  NULL,
 		  0UL);
 
@@ -563,17 +614,17 @@
 			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
@@ -581,7 +632,7 @@
 
 	/* KEYCTL_CLEAR */
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -597,14 +648,14 @@
 	/* 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,
+		  sizeof(int32_t), XARG_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), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  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(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
 
@@ -612,14 +663,14 @@
 	/* KEYCTL_UNLINK */
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  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(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
 
@@ -628,7 +679,7 @@
 	buf_in_arg = true;
 
 	do_keyctl(ARG_STR(KEYCTL_SEARCH),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(int32_t), 0, NULL, "%d");
@@ -636,7 +687,7 @@
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  sizeof(char *), (char *) 0xfffff00dfffff157ULL, NULL, ptr_fmt,
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_USER_SESSION_KEYRING),
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_USER_SESSION_KEYRING),
 			  NULL);
 	do_keyctl(ARG_STR(KEYCTL_SEARCH),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
@@ -657,7 +708,7 @@
 	/* KEYCTL_RESTRICT_KEYRING */
 
 	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 			  NULL);
@@ -705,17 +756,17 @@
 			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_READ),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_READ),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
@@ -751,11 +802,11 @@
 			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(int32_t), XARG_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,
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 	buf_in_arg = false;
 
@@ -788,7 +839,7 @@
 
 	/* KEYCTL_SET_REQKEY_KEYRING */
 	do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
-		  sizeof(int32_t), ARG_STR(KEY_REQKEY_DEFL_NO_CHANGE), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_REQKEY_DEFL_NO_CHANGE), NULL,
 		  0UL);
 	/*
 	 * Keep it commented out until proper way of faking syscalls is not
@@ -796,11 +847,15 @@
 	 */
 	/* do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
 		  sizeof(int32_t),
-		  ARG_STR(KEY_REQKEY_DEFL_REQUESTOR_KEYRING), NULL, 0UL); */
+		  XARG_STR(KEY_REQKEY_DEFL_REQUESTOR_KEYRING), NULL, 0UL); */
 	do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
 		  sizeof(kernel_ulong_t),
 		  (kernel_ulong_t) 0xfeedf157badc0dedLLU,
-		  "0xbadc0ded /* KEY_REQKEY_DEFL_??? */", NULL, 0UL);
+		  "-1159983635"
+#if !XLAT_RAW
+		  " /* KEY_REQKEY_DEFL_??? */"
+#endif
+		  , NULL, 0UL);
 
 
 	/* KEYCTL_SET_TIMEOUT */
@@ -822,7 +877,7 @@
 
 	/* KEYCTL_ASSUME_AUTHORITY */
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -848,17 +903,17 @@
 			(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,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
@@ -893,7 +948,7 @@
 		  sizeof(kernel_ulong_t),
 			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
 			NULL,
-		  sizeof(uint32_t), ARG_STR(ENODEV), NULL,
+		  sizeof(uint32_t), XARG_STR(ENODEV), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 
 
@@ -923,16 +978,16 @@
 			  ksize_fmt,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 
 	/* KEYCTL_INVALIDATE */
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -948,7 +1003,7 @@
 	/* 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,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
diff --git a/tests-m32/mknod.c b/tests-m32/mknod.c
index b387149..4bcc274 100644
--- a/tests-m32/mknod.c
+++ b/tests-m32/mknod.c
@@ -59,7 +59,7 @@
 	rc = call_mknod(mode, dev);
 	printf("mknod(\"%s\", S_IFBLK|S_ISUID|S_ISGID|S_ISVTX|%#03ho"
 	       ", makedev(%u, %u)) = %ld %s (%m)\n",
-	       sample, mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX),
+	       sample, (short) (mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX)),
 	       major((unsigned) dev), minor((unsigned) dev),
 	       rc, errno2name());
 
diff --git a/tests-m32/mknodat.c b/tests-m32/mknodat.c
index 756e277..318dc5a 100644
--- a/tests-m32/mknodat.c
+++ b/tests-m32/mknodat.c
@@ -59,7 +59,7 @@
 	rc = call_mknodat(mode, dev);
 	printf("mknodat(-1, \"%s\", S_IFBLK|S_ISUID|S_ISGID|S_ISVTX|%#03ho"
 	       ", makedev(%u, %u)) = %ld %s (%m)\n",
-	       sample, mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX),
+	       sample, (short) (mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX)),
 	       major((unsigned) dev), minor((unsigned) dev),
 	       rc, errno2name());
 
diff --git a/tests-m32/mmap-Xabbrev.c b/tests-m32/mmap-Xabbrev.c
new file mode 100644
index 0000000..b31ce42
--- /dev/null
+++ b/tests-m32/mmap-Xabbrev.c
@@ -0,0 +1 @@
+#include "mmap.c"
diff --git a/tests-m32/mmap-Xabbrev.gen.test b/tests-m32/mmap-Xabbrev.gen.test
new file mode 100755
index 0000000..b11a84f
--- /dev/null
+++ b/tests-m32/mmap-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap-Xabbrev +mmap.test abbrev); do not edit.
+set -- abbrev
+. "${srcdir=.}/mmap.test"
diff --git a/tests-m32/mmap-Xraw.c b/tests-m32/mmap-Xraw.c
new file mode 100644
index 0000000..ef25c03
--- /dev/null
+++ b/tests-m32/mmap-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW     1
+#include "mmap.c"
diff --git a/tests-m32/mmap-Xraw.gen.test b/tests-m32/mmap-Xraw.gen.test
new file mode 100755
index 0000000..3caca91
--- /dev/null
+++ b/tests-m32/mmap-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap-Xraw +mmap.test raw 14); do not edit.
+set -- raw 14
+. "${srcdir=.}/mmap.test"
diff --git a/tests-m32/mmap-Xverbose.c b/tests-m32/mmap-Xverbose.c
new file mode 100644
index 0000000..08e9e30
--- /dev/null
+++ b/tests-m32/mmap-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "mmap.c"
diff --git a/tests-m32/mmap-Xverbose.gen.test b/tests-m32/mmap-Xverbose.gen.test
new file mode 100755
index 0000000..99b41c0
--- /dev/null
+++ b/tests-m32/mmap-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap-Xverbose +mmap.test verbose); do not edit.
+set -- verbose
+. "${srcdir=.}/mmap.test"
diff --git a/tests-m32/mmap.c b/tests-m32/mmap.c
index 0321bf5..e9f587e 100644
--- a/tests-m32/mmap.c
+++ b/tests-m32/mmap.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -58,25 +58,60 @@
 
 	(void) close(0);
 	(void) close(0);
+#if XLAT_RAW
+	printf("%s(NULL, 0, %#x, %#x, 0, 0) = -1 EBADF (%m)\n",
+	       name, PROT_NONE, MAP_FILE);
+#elif XLAT_VERBOSE
+	printf("%s(NULL, 0, %#x /* PROT_NONE */, %#x /* MAP_FILE */, 0, 0) "
+	       "= -1 EBADF (%m)\n",
+	       name, PROT_NONE, MAP_FILE);
+#else
 	printf("%s(NULL, 0, PROT_NONE, MAP_FILE, 0, 0) = -1 EBADF (%m)\n",
 	       name);
+#endif
 	mmap(NULL, 0, PROT_NONE, MAP_FILE, 0, 0);
 
 	p = mmap(addr, length1, PROT_READ | PROT_WRITE,
 		 MAP_PRIVATE | MAP_ANONYMOUS, fd, offset);
 	if (MAP_FAILED == p)
 		perror_msg_and_fail("mmap");
+#if XLAT_RAW
+	printf("%s(%p, %lu, %#x, "
+	       "%#x|%#x, %d, %#jx) = %p\n",
+	       name, addr, length1, PROT_READ | PROT_WRITE, MAP_PRIVATE,
+	       MAP_ANONYMOUS, fd, uoffset, p);
+#elif XLAT_VERBOSE
+	printf("%s(%p, %lu, %#x /* PROT_READ|PROT_WRITE */, "
+	       "%#x /* MAP_PRIVATE */|%#x /* MAP_ANONYMOUS */, %d, %#jx) "
+	       "= %p\n",
+	       name, addr, length1, PROT_READ | PROT_WRITE, MAP_PRIVATE,
+	       MAP_ANONYMOUS, fd, uoffset, p);
+#else
 	printf("%s(%p, %lu, PROT_READ|PROT_WRITE, "
 	       "MAP_PRIVATE|MAP_ANONYMOUS, %d, %#jx) = %p\n",
 	       name, addr, length1, fd, uoffset, p);
+#endif
 
 	if (msync(p, length1, MS_SYNC))
 		perror_msg_and_fail("msync");
+#if XLAT_RAW
+	printf("msync(%p, %lu, %#x) = 0\n", p, length1, MS_SYNC);
+#elif XLAT_VERBOSE
+	printf("msync(%p, %lu, %#x /* MS_SYNC */) = 0\n", p, length1, MS_SYNC);
+#else
 	printf("msync(%p, %lu, MS_SYNC) = 0\n", p, length1);
+#endif
 
 	if (mprotect(p, length1, PROT_NONE))
 		perror_msg_and_fail("mprotect");
+#if XLAT_RAW
+	printf("mprotect(%p, %lu, %#x) = 0\n", p, length1, PROT_NONE);
+#elif XLAT_VERBOSE
+	printf("mprotect(%p, %lu, %#x /* PROT_NONE */) = 0\n",
+	       p, length1, PROT_NONE);
+#else
 	printf("mprotect(%p, %lu, PROT_NONE) = 0\n", p, length1);
+#endif
 
 	addr = mremap(p, length1, length2, 0);
 	if (MAP_FAILED == addr)
@@ -87,8 +122,19 @@
 		    addr + length2);
 	if (MAP_FAILED == p)
 		perror_msg_and_fail("mremap");
+#if XLAT_RAW
+	printf("mremap(%p, %lu, %lu, %#x, %p) = %p\n",
+	       addr, length2, length3, MREMAP_MAYMOVE | MREMAP_FIXED,
+	       addr + length2, p);
+#elif XLAT_VERBOSE
+	printf("mremap(%p, %lu, %lu, %#x /* MREMAP_MAYMOVE|MREMAP_FIXED */"
+	       ", %p) = %p\n",
+	       addr, length2, length3, MREMAP_MAYMOVE | MREMAP_FIXED,
+	       addr + length2, p);
+#else
 	printf("mremap(%p, %lu, %lu, MREMAP_MAYMOVE|MREMAP_FIXED"
 	       ", %p) = %p\n", addr, length2, length3, addr + length2, p);
+#endif
 
 	if (munmap(p, length3))
 		perror_msg_and_fail("munmap");
@@ -96,7 +142,13 @@
 
 	if (mlockall(MCL_FUTURE))
 		perror_msg_and_fail("mlockall");
+#if XLAT_RAW
+	printf("mlockall(%#x) = 0\n", MCL_FUTURE);
+#elif XLAT_VERBOSE
+	printf("mlockall(%#x /* MCL_FUTURE */) = 0\n", MCL_FUTURE);
+#else
 	puts("mlockall(MCL_FUTURE) = 0");
+#endif
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-m32/mmap.test b/tests-m32/mmap.test
index 7ba664e..7fa2c70 100755
--- a/tests-m32/mmap.test
+++ b/tests-m32/mmap.test
@@ -4,7 +4,7 @@
 # syscalls decoding.
 #
 # Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2015-2017 The strace developers.
+# Copyright (c) 2015-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -35,15 +35,20 @@
 check_prog sed
 run_prog > /dev/null
 
+xlat_opt=""
+[ "$#" -gt 0 ] && xlat_opt="-X$1"
+align=20
+[ "$#" -gt 1 ] && align="$2"
+
 syscall=
 for n in mmap mmap2; do
 	$STRACE -e$n -h > /dev/null && syscall=$syscall,$n
 done
 run_strace -e$syscall $args > /dev/null
 
-if grep '^mmap(NULL, 0, PROT_NONE,' < "$LOG" > /dev/null; then
+if grep '^mmap(NULL, 0, \(0 /* PROT_NONE */\|0\|PROT_NONE\),' < "$LOG" > /dev/null; then
 	mmap=mmap
-elif grep '^mmap2(NULL, 0, PROT_NONE,' < "$LOG" > /dev/null; then
+elif grep '^mmap2(NULL, 0, \(0 \/\* PROT_NONE \*\/\|0\|PROT_NONE\),' < "$LOG" > /dev/null; then
 	mmap=mmap2
 else
 	dump_log_and_fail_with "mmap/mmap2 not found in $STRACE $args output"
@@ -52,6 +57,6 @@
 syscall=$mmap,madvise,mlockall,mprotect,mremap,msync,munmap
 
 run_prog "../$NAME" $mmap > /dev/null
-run_strace -a20 -e$syscall $args > "$EXP"
-sed -n "/^$mmap(NULL, 0, PROT_NONE,/,\$p" < "$LOG" > "$OUT"
+run_strace -a$align -e$syscall $xlat_opt $args > "$EXP"
+sed -n "/^$mmap(NULL, 0, \(0 \/\* PROT_NONE \*\/\|0\|PROT_NONE\),/,\$p" < "$LOG" > "$OUT"
 match_diff "$OUT" "$EXP"
diff --git a/tests-m32/mmap64-Xabbrev.c b/tests-m32/mmap64-Xabbrev.c
new file mode 100644
index 0000000..cbd7789
--- /dev/null
+++ b/tests-m32/mmap64-Xabbrev.c
@@ -0,0 +1 @@
+#include "mmap64.c"
diff --git a/tests-m32/mmap64-Xabbrev.gen.test b/tests-m32/mmap64-Xabbrev.gen.test
new file mode 100755
index 0000000..3e2c94b
--- /dev/null
+++ b/tests-m32/mmap64-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64-Xabbrev +mmap.test abbrev); do not edit.
+set -- abbrev
+. "${srcdir=.}/mmap.test"
diff --git a/tests-m32/mmap64-Xraw.c b/tests-m32/mmap64-Xraw.c
new file mode 100644
index 0000000..f75f235
--- /dev/null
+++ b/tests-m32/mmap64-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW     1
+#include "mmap64.c"
diff --git a/tests-m32/mmap64-Xraw.gen.test b/tests-m32/mmap64-Xraw.gen.test
new file mode 100755
index 0000000..7aeed02
--- /dev/null
+++ b/tests-m32/mmap64-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64-Xraw +mmap.test raw 14); do not edit.
+set -- raw 14
+. "${srcdir=.}/mmap.test"
diff --git a/tests-m32/mmap64-Xverbose.c b/tests-m32/mmap64-Xverbose.c
new file mode 100644
index 0000000..f72513e
--- /dev/null
+++ b/tests-m32/mmap64-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "mmap64.c"
diff --git a/tests-m32/mmap64-Xverbose.gen.test b/tests-m32/mmap64-Xverbose.gen.test
new file mode 100755
index 0000000..0d675d9
--- /dev/null
+++ b/tests-m32/mmap64-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64-Xverbose +mmap.test verbose); do not edit.
+set -- verbose
+. "${srcdir=.}/mmap.test"
diff --git a/tests-m32/mmsg_name.c b/tests-m32/mmsg_name.c
index 8c54a48..c17b13d 100644
--- a/tests-m32/mmsg_name.c
+++ b/tests-m32/mmsg_name.c
@@ -3,7 +3,7 @@
  * of sendmmsg and recvmmsg syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -152,7 +152,7 @@
 	printf("sendmmsg(-1, [{msg_hdr=");
 	print_msghdr(&send_mh[IOV_MAX].msg_hdr, 0);
 	errno = saved_errno;
-	printf("}, %p], %u, MSG_DONTWAIT) = %d %s (%m)\n",
+	printf("}, ... /* %p */], %u, MSG_DONTWAIT) = %d %s (%m)\n",
 	       &send_mh[IOV_MAX1], 2, rc, errno2name());
 
 	rc = send_mmsg(send_fd, send_mh, IOV_MAX1, MSG_DONTWAIT);
diff --git a/tests-m32/modify_ldt.c b/tests-m32/modify_ldt.c
index 1e26bda..2d527ac 100644
--- a/tests-m32/modify_ldt.c
+++ b/tests-m32/modify_ldt.c
@@ -67,8 +67,8 @@
 	static const kernel_ulong_t bogus_bytecount =
 		(kernel_ulong_t) 0xdeadfacefa57beefULL;
 
-	struct user_desc *us = tail_alloc(sizeof(*us));
-	unsigned int *bogus_int = tail_alloc(sizeof(*bogus_int));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct user_desc, us);
+	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned int, bogus_int);
 	long rc;
 
 	fill_memory(us, sizeof(*us));
diff --git a/tests-m32/mount-Xabbrev.c b/tests-m32/mount-Xabbrev.c
new file mode 100644
index 0000000..0f6fecd
--- /dev/null
+++ b/tests-m32/mount-Xabbrev.c
@@ -0,0 +1 @@
+#include "mount.c"
diff --git a/tests-m32/mount-Xabbrev.gen.test b/tests-m32/mount-Xabbrev.gen.test
new file mode 100755
index 0000000..10e261f
--- /dev/null
+++ b/tests-m32/mount-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount-Xabbrev -a33 -e trace=mount -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a33 -e trace=mount -Xabbrev
diff --git a/tests-m32/mount-Xraw.c b/tests-m32/mount-Xraw.c
new file mode 100644
index 0000000..3aa1f08
--- /dev/null
+++ b/tests-m32/mount-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "mount.c"
diff --git a/tests-m32/mount-Xraw.gen.test b/tests-m32/mount-Xraw.gen.test
new file mode 100755
index 0000000..ce852f8
--- /dev/null
+++ b/tests-m32/mount-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount-Xraw -a33 -e trace=mount -Xraw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a33 -e trace=mount -Xraw
diff --git a/tests-m32/mount-Xverbose.c b/tests-m32/mount-Xverbose.c
new file mode 100644
index 0000000..0b211c7
--- /dev/null
+++ b/tests-m32/mount-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "mount.c"
diff --git a/tests-m32/mount-Xverbose.gen.test b/tests-m32/mount-Xverbose.gen.test
new file mode 100755
index 0000000..c780070
--- /dev/null
+++ b/tests-m32/mount-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount-Xverbose -a33 -e trace=mount -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a33 -e trace=mount -Xverbose
diff --git a/tests-m32/mount.c b/tests-m32/mount.c
index cbfe42f8..2e58571 100644
--- a/tests-m32/mount.c
+++ b/tests-m32/mount.c
@@ -2,6 +2,7 @@
  * Check decoding of mount syscall.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,7 +41,34 @@
 # define MS_RELATIME (1ul << 21)
 #endif
 
-#define str_ro_nosuid_nodev_noexec "MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC"
+#if XLAT_RAW
+# define str_unknown "0x300"
+# define str_submount_200 "0x4000200"
+# define str_mgc_val "0xc0ed0000"
+# define str_remount "0x20"
+# define str_bind "0x1000"
+# define str_ro_nosuid_nodev_noexec "0xf"
+# define str_ro_nosuid_nodev_noexec_relatime "0x20000f"
+#elif XLAT_VERBOSE
+# define str_unknown "0x300 /* MS_??? */"
+# define str_submount_200 "0x4000200 /* MS_SUBMOUNT|0x200 */"
+# define str_mgc_val "0xc0ed0000 /* MS_MGC_VAL */"
+# define str_remount "0x20 /* MS_REMOUNT */"
+# define str_bind "0x1000 /* MS_BIND */"
+# define str_ro_nosuid_nodev_noexec \
+	"0xf /* MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC */"
+# define str_ro_nosuid_nodev_noexec_relatime \
+	"0x20000f /* MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME */"
+#else /* !XLAT_RAW && !XLAT_VERBOSE */
+# define str_unknown "0x300 /* MS_??? */"
+# define str_submount_200 "MS_SUBMOUNT|0x200"
+# define str_mgc_val "MS_MGC_VAL"
+# define str_remount "MS_REMOUNT"
+# define str_bind "MS_BIND"
+# define str_ro_nosuid_nodev_noexec "MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC"
+# define str_ro_nosuid_nodev_noexec_relatime \
+	"MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME"
+#endif /* XLAT_RAW, XLAT_VERBOSE */
 
 int
 main(void)
@@ -49,35 +77,59 @@
 	static const char target[] = "mount_target";
 	static const char fstype[] = "mount_fstype";
 	static const char data[] = "mount_data";
+	TAIL_ALLOC_OBJECT_CONST_PTR(char, bogus);
 
-	int rc = mount(source, target, fstype, 15, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
+	bogus[0] = 'a';
+
+	int rc = mount(NULL, NULL, NULL, 0, NULL);
+	printf("mount(NULL, NULL, NULL, 0, NULL) = %s\n",
+	       sprintrc(rc));
+
+	rc = mount(bogus, bogus, bogus, 768, bogus);
+	printf("mount(%p, %p, %p, %s, %p) = %s\n",
+	       bogus, bogus, bogus, str_unknown, bogus, sprintrc(rc));
+
+	rc = mount(bogus + 1, bogus + 1, bogus + 1, 0x4000200, bogus + 1);
+	printf("mount(%p, %p, %p, %s, %p) = %s\n",
+	       bogus + 1, bogus + 1, bogus + 1, str_submount_200,
+	       bogus + 1, sprintrc(rc));
+
+	rc = mount(source, target, fstype, 15, data);
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
 	       source, target, fstype, str_ro_nosuid_nodev_noexec,
-	       data, rc, errno2name());
+	       data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_RELATIME | 15, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
 	       source, target, fstype,
-	       str_ro_nosuid_nodev_noexec "|MS_RELATIME",
-	       data, rc, errno2name());
+	       str_ro_nosuid_nodev_noexec_relatime,
+	       data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_MGC_VAL, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
-	       source, target, fstype, "MS_MGC_VAL", data, rc, errno2name());
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
+	       source, target, fstype, str_mgc_val, data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_MGC_VAL | 15, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
 	       source, target, fstype,
-	       "MS_MGC_VAL|" str_ro_nosuid_nodev_noexec,
-	       data, rc, errno2name());
+	       str_mgc_val "|" str_ro_nosuid_nodev_noexec,
+	       data, sprintrc(rc));
+
+	rc = mount(source, target, NULL, MS_REMOUNT, data);
+	printf("mount(\"%s\", \"%s\", NULL, %s, \"%s\") = %s\n",
+	       source, target, str_remount, data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_REMOUNT, data);
-	printf("mount(\"%s\", \"%s\", %p, %s, \"%s\") = %d %s (%m)\n",
-	       source, target, fstype, "MS_REMOUNT", data, rc, errno2name());
+	printf("mount(\"%s\", \"%s\", %p, %s, \"%s\") = %s\n",
+	       source, target, fstype, str_remount, data, sprintrc(rc));
 
-	rc = mount(source, target, fstype, MS_BIND, data);
-	printf("mount(\"%s\", \"%s\", %p, %s, %p) = %d %s (%m)\n",
-	       source, target, fstype, "MS_BIND", data, rc, errno2name());
+	rc = mount(source, target, NULL, MS_BIND, data);
+	printf("mount(\"%s\", \"%s\", NULL, %s, %p) = %s\n",
+	       source, target, str_bind, data, sprintrc(rc));
+
+	rc = mount(source, target, fstype, MS_BIND, NULL);
+	printf("mount(\"%s\", \"%s\", %p, %s, NULL) = %s\n",
+	       source, target, fstype, str_bind, sprintrc(rc));
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-m32/mount.gen.test b/tests-m32/mount.gen.test
index 69bc99b..2a3639c 100755
--- a/tests-m32/mount.gen.test
+++ b/tests-m32/mount.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount  ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount -a33 ); do not edit.
 . "${srcdir=.}/init.sh"
-run_strace_match_diff  
+run_strace_match_diff -a33 
diff --git a/tests-m32/move_pages.c b/tests-m32/move_pages.c
index 5ec25aa..851a8c7 100644
--- a/tests-m32/move_pages.c
+++ b/tests-m32/move_pages.c
@@ -2,7 +2,7 @@
  * Check decoding of move_pages syscall.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -63,7 +63,7 @@
 				break;
 			}
 		} else {
-			printf("%p", pages + i);
+			printf("... /* %p */", pages + i);
 			break;
 		}
 		const void *const addr = pages[i];
@@ -99,7 +99,7 @@
 				break;
 			}
 		} else {
-			printf("%p", nodes + i);
+			printf("... /* %p */", nodes + i);
 			break;
 		}
 		printf("%d", nodes[i]);
diff --git a/tests-m32/msg_control.c b/tests-m32/msg_control.c
index 48b7347..01786d7 100644
--- a/tests-m32/msg_control.c
+++ b/tests-m32/msg_control.c
@@ -2,7 +2,7 @@
  * Check decoding of struct msghdr ancillary data.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -132,7 +132,7 @@
 		print_fds(cmsg, src_len);
 		printf("}");
 		if (aligned_cms_len < msg_controllen)
-			printf(", %p", (void *) cmsg + aligned_cms_len);
+			printf(", ... /* %p */", (void *) cmsg + aligned_cms_len);
 		printf("]");
 	}
 
@@ -195,7 +195,7 @@
 	print_fds(cmsg[1], src1_len);
 	printf("}");
 	if (aligned_cms_len[1] < msg_controllen1)
-		printf(", %p", (void *) cmsg[1] + aligned_cms_len[1]);
+		printf(", ... /* %p */", (void *) cmsg[1] + aligned_cms_len[1]);
 	printf("]");
 
 	errno = saved_errno;
@@ -425,7 +425,7 @@
 	print_security(cmsg, src_len);
 	printf("}");
 	if (aligned_cms_len < msg_controllen)
-		printf(", %p", (void *) cmsg + aligned_cms_len);
+		printf(", ... /* %p */", (void *) cmsg + aligned_cms_len);
 	printf("]");
 
 	errno = saved_errno;
diff --git a/tests-m32/net-sockaddr.c b/tests-m32/net-sockaddr.c
index fe933d4..22cbb26 100644
--- a/tests-m32/net-sockaddr.c
+++ b/tests-m32/net-sockaddr.c
@@ -2,7 +2,7 @@
  * Check decoding of sockaddr structures
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -436,25 +436,86 @@
 {
 	const unsigned short h_psm = 12345;
 	const unsigned short h_cid = 13579;
-	const struct sockaddr_l2 c_l2 = {
+	struct sockaddr_l2 c_l2 = {
 		.l2_family = AF_BLUETOOTH,
 		.l2_psm = htobs(h_psm),
 		.l2_bdaddr.b = "abcdef",
 		.l2_cid = htobs(h_cid),
-		.l2_bdaddr_type = 42
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+		.l2_bdaddr_type = 0xce,
+#endif
 	};
 	void *l2 = tail_memdup(&c_l2, sizeof(c_l2));
 	unsigned int len = sizeof(c_l2);
+
 	int ret = connect(-1, l2, len);
 	printf("connect(-1, {sa_family=AF_BLUETOOTH"
-	       ", l2_psm=htobs(%hu)"
+	       ", l2_psm=htobs(L2CAP_PSM_DYN_START + %hu)"
 	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
-	       ", l2_cid=htobs(%hu), l2_bdaddr_type=%u}"
-	       ", %u) = %d EBADF (%m)\n", h_psm,
+	       ", l2_cid=htobs(L2CAP_CID_DYN_START + %hu)"
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	       ", l2_bdaddr_type=0xce /* BDADDR_??? */"
+#endif
+	       "}, %u) = %d EBADF (%m)\n",
+	       (short) (h_psm - 0x1001),
 	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
 	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
 	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
-	       h_cid, c_l2.l2_bdaddr_type, len, ret);
+	       (short) (h_cid - 0x40), len, ret);
+
+	c_l2.l2_psm = htobs(1);
+	c_l2.l2_cid = htobs(1);
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	c_l2.l2_bdaddr_type = BDADDR_LE_RANDOM;
+#endif
+	memcpy(l2, &c_l2, sizeof(c_l2));
+	ret = connect(-1, l2, len);
+	printf("connect(-1, {sa_family=AF_BLUETOOTH"
+	       ", l2_psm=htobs(L2CAP_PSM_SDP)"
+	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+	       ", l2_cid=htobs(L2CAP_CID_SIGNALING)"
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	       ", l2_bdaddr_type=BDADDR_LE_RANDOM"
+#endif
+	       "}, %u) = %d EBADF (%m)\n",
+	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+	       len, ret);
+
+	c_l2.l2_psm = htobs(0xbad);
+	c_l2.l2_cid = htobs(8);
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	c_l2.l2_bdaddr_type = 3;
+#endif
+	memcpy(l2, &c_l2, sizeof(c_l2));
+	ret = connect(-1, l2, len);
+	printf("connect(-1, {sa_family=AF_BLUETOOTH"
+	       ", l2_psm=htobs(0xbad /* L2CAP_PSM_??? */)"
+	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+	       ", l2_cid=htobs(0x8 /* L2CAP_CID_??? */)"
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	       ", l2_bdaddr_type=0x3 /* BDADDR_??? */"
+#endif
+	       "}, %u) = %d EBADF (%m)\n",
+	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+	       len, ret);
+
+	c_l2.l2_psm = htobs(0x10ff);
+	c_l2.l2_cid = htobs(0xffff);
+	memcpy(l2, &c_l2, 12);
+	ret = connect(-1, l2, 12);
+	printf("connect(-1, {sa_family=AF_BLUETOOTH"
+	       ", l2_psm=htobs(L2CAP_PSM_AUTO_END)"
+	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+	       ", l2_cid=htobs(L2CAP_CID_DYN_END)"
+	       "}, 12) = %d EBADF (%m)\n",
+	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+	       ret);
 }
 #endif
 
diff --git a/tests-m32/netlink_crypto.c b/tests-m32/netlink_crypto.c
index d15c17c..5c3dc04 100644
--- a/tests-m32/netlink_crypto.c
+++ b/tests-m32/netlink_crypto.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -98,8 +98,6 @@
 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",
@@ -109,6 +107,8 @@
 		.cru_refcnt = 0xbcacfacd,
 		.cru_flags = 0xefacdbad
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(alg));
+
 	TEST_NETLINK_OBJECT_EX(fd, nlh0,
 			       CRYPTO_MSG_NEWALG, NLM_F_REQUEST,
 			       alg, print_quoted_memory,
@@ -149,7 +149,7 @@
 static void
 test_crypto_msg_unspec(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, 4);
 
 	TEST_NETLINK_(fd, nlh0,
 		      0xffff, "0xffff /* CRYPTO_MSG_??? */",
diff --git a/tests-m32/netlink_kobject_uevent.c b/tests-m32/netlink_kobject_uevent.c
index 7edacd7..b28af49 100644
--- a/tests-m32/netlink_kobject_uevent.c
+++ b/tests-m32/netlink_kobject_uevent.c
@@ -27,9 +27,12 @@
  */
 
 #include "tests.h"
+#include <string.h>
 #include <stdio.h>
 #include <sys/socket.h>
+#include <arpa/inet.h>
 #include "netlink.h"
+#include "netlink_kobject_uevent.h"
 
 static const char *errstr;
 
@@ -41,6 +44,94 @@
 	return rc;
 }
 
+static void
+test_nlmsg_type_udev(const int fd)
+{
+	static const char extra[] = "12345678";
+	struct udev_monitor_netlink_header uh = {
+		.prefix = "libudev",
+		.magic = htonl(0xfeedcafe),
+		.header_size = sizeof(uh),
+		.properties_off = 40,
+		.properties_len = 299,
+		.filter_subsystem_hash = htonl(0xc370b302),
+		.filter_devtype_hash = htonl(0x10800000),
+		.filter_tag_bloom_hi = htonl(0x2000400),
+		.filter_tag_bloom_lo = htonl(0x10800000),
+	};
+	const unsigned int extra_len = LENGTH_OF(extra);
+	const unsigned int uh_len = sizeof(uh);
+
+	char *const buf = tail_alloc(uh_len + extra_len);
+	memcpy(buf + extra_len, &uh, uh_len);
+
+	sys_send(fd, buf + extra_len, uh_len);
+	printf("sendto(%d, {{prefix=\"%s\", magic=htonl(%#x)"
+	       ", header_size=%u, properties_off=%u, properties_len=%u"
+	       ", filter_subsystem_hash=htonl(%#x)"
+	       ", filter_devtype_hash=htonl(%#x)"
+	       ", filter_tag_bloom_hi=htonl(%#x)"
+	       ", filter_tag_bloom_lo=htonl(%#x)}}, %u, MSG_DONTWAIT, NULL, "
+	       "0) = %s\n"
+	       , fd, uh.prefix,
+	       ntohl(uh.magic), uh.header_size, uh.properties_off,
+	       uh.properties_len, ntohl(uh.filter_subsystem_hash),
+	       ntohl(uh.filter_devtype_hash), ntohl(uh.filter_tag_bloom_hi),
+	       ntohl(uh.filter_tag_bloom_lo), uh_len, errstr);
+
+	memcpy(buf, &uh, uh_len);
+	memcpy(buf + uh_len, extra, extra_len);
+	sys_send(fd, buf, uh_len + extra_len);
+	printf("sendto(%d, {{prefix=\"%s\", magic=htonl(%#x)"
+	       ", header_size=%u, properties_off=%u, properties_len=%u"
+	       ", filter_subsystem_hash=htonl(%#x)"
+	       ", filter_devtype_hash=htonl(%#x)"
+	       ", filter_tag_bloom_hi=htonl(%#x)"
+	       ", filter_tag_bloom_lo=htonl(%#x)}, "
+	       , fd, uh.prefix,
+	       ntohl(uh.magic), uh.header_size, uh.properties_off,
+	       uh.properties_len, ntohl(uh.filter_subsystem_hash),
+	       ntohl(uh.filter_devtype_hash), ntohl(uh.filter_tag_bloom_hi),
+	       ntohl(uh.filter_tag_bloom_lo));
+	print_quoted_memory(buf + uh_len, extra_len);
+	printf("}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       uh_len + extra_len, errstr);
+
+	memcpy(buf + extra_len + 1, &uh, uh_len - 1);
+	sys_send(fd, buf + extra_len + 1, uh_len);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(&uh, MIN(uh_len - 1, DEFAULT_STRLEN));
+	printf("%s, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       (uh_len - 1 > DEFAULT_STRLEN ? "..." : ""),
+	       uh_len, errstr);
+}
+
+static void
+test_nlmsg_type_kernel(const int fd)
+{
+	struct udev_monitor_netlink_header uh = {
+		.prefix = "change@",
+		.magic = htonl(0xfeedcafe),
+		.header_size = sizeof(uh),
+		.properties_off = 10,
+		.properties_len = 299,
+		.filter_subsystem_hash = htonl(0xfffffff),
+		.filter_devtype_hash = htonl(0x10000000),
+		.filter_tag_bloom_hi = htonl(0x2000400),
+	};
+	const unsigned int uh_len = sizeof(uh);
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct udev_monitor_netlink_header, p);
+	memcpy(p, &uh, uh_len);
+
+	sys_send(fd, p, uh_len);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(&uh, MIN(uh_len, DEFAULT_STRLEN));
+	printf("%s, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       (uh_len > DEFAULT_STRLEN ? "..." : ""),
+	       uh_len, errstr);
+}
+
 int
 main(void)
 {
@@ -48,6 +139,8 @@
 
 	int fd = create_nl_socket(NETLINK_KOBJECT_UEVENT);
 
+	test_nlmsg_type_udev(fd);
+	test_nlmsg_type_kernel(fd);
 	/* test using data that looks like a zero-length C string */
 	char *const buf = tail_alloc(DEFAULT_STRLEN + 1);
 	buf[0] = '=';
diff --git a/tests-m32/netlink_netfilter.c b/tests-m32/netlink_netfilter.c
index 57532f5..2842e15 100644
--- a/tests-m32/netlink_netfilter.c
+++ b/tests-m32/netlink_netfilter.c
@@ -88,8 +88,8 @@
 static void
 test_nlmsg_done(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	const int num = 0xabcdefad;
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(num));
 
 	TEST_NETLINK(fd, nlh0, NLMSG_DONE, NLM_F_REQUEST,
 		     sizeof(num), &num, sizeof(num),
@@ -99,13 +99,21 @@
 static void
 test_nfgenmsg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = 0x0bcd
+	};
 
 	struct nfgenmsg msg = {
 		.nfgen_family = AF_UNIX,
 		.version = NFNETLINK_V0,
 		.res_id = NFNL_SUBSYS_NFTABLES
 	};
+	char str_buf[NLMSG_ALIGN(sizeof(msg)) + 4];
+	char nla_buf[NLMSG_ALIGN(sizeof(msg)) + sizeof(nla)];
+
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN,
+					 MAX(sizeof(str_buf), sizeof(nla_buf)));
 
 	TEST_NETLINK_OBJECT_EX_(fd, nlh0,
 				NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_NEWTABLE,
@@ -150,8 +158,6 @@
 		     printf(", version=NFNETLINK_V0");
 		     printf(", res_id=htons(%d)", NFNL_SUBSYS_NFTABLES));
 
-	char str_buf[NLMSG_ALIGN(sizeof(msg)) + 4];
-
 	msg.res_id = htons(0xabcd);
 	memcpy(str_buf, &msg, sizeof(msg));
 	memcpy(str_buf + NLMSG_ALIGN(sizeof(msg)), "1234", 4);
@@ -165,12 +171,6 @@
 			    ", \"\\x31\\x32\\x33\\x34\"", 0xabcd));
 # endif /* NFNL_MSG_BATCH_BEGIN */
 
-	static const struct nlattr nla = {
-		.nla_len = sizeof(nla),
-		.nla_type = 0x0bcd
-	};
-	char nla_buf[NLMSG_ALIGN(sizeof(msg)) + sizeof(nla)];
-
 	msg.res_id = htons(NFNL_SUBSYS_NFTABLES);
 	memcpy(nla_buf, &msg, sizeof(msg));
 	memcpy(nla_buf + NLMSG_ALIGN(sizeof(msg)), &nla, sizeof(nla));
diff --git a/tests-m32/netlink_netlink_diag.c b/tests-m32/netlink_netlink_diag.c
index 855e404..a682f7c 100644
--- a/tests-m32/netlink_netlink_diag.c
+++ b/tests-m32/netlink_netlink_diag.c
@@ -3,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -55,8 +55,7 @@
 		},
 		.ndr = {
 			.sdiag_family = AF_NETLINK,
-			.sdiag_protocol = NDIAG_PROTO_ALL,
-			.ndiag_show = NDIAG_SHOW_MEMINFO
+			.sdiag_protocol = NDIAG_PROTO_ALL
 		}
 	};
 	struct iovec iov = {
diff --git a/tests-m32/netlink_protocol.c b/tests-m32/netlink_protocol.c
index be1a652..47f0e92 100644
--- a/tests-m32/netlink_protocol.c
+++ b/tests-m32/netlink_protocol.c
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2014-2017 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -125,7 +126,8 @@
 		struct req req1;
 		char padding[NLMSG_ALIGN(sizeof(struct req)) - sizeof(struct req)];
 		struct req req2;
-	} *const reqs = tail_alloc(sizeof(*reqs));
+	};
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct reqs, reqs);
 	memcpy(&reqs->req1, &c_req, sizeof(c_req));
 	memcpy(&reqs->req2, &c_req, sizeof(c_req));
 
@@ -144,7 +146,7 @@
 	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}, \"\\x61\\x62\\x63\\x64\"}"
-	       ", %p], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", ... /* %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));
@@ -203,7 +205,7 @@
 {
 	struct nlmsgerr *err;
 	struct nlmsghdr *nlh;
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(*err) + 4);
 	long rc;
 
 	/* error message without enough room for the error code */
@@ -318,9 +320,9 @@
 test_nlmsg_done(const int fd)
 {
 	struct nlmsghdr *nlh;
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
 	const int num = 0xfacefeed;
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(num));
+	long rc;
 
 	/* NLMSG_DONE message without enough room for an integer payload */
 	nlh = nlh0;
diff --git a/tests-m32/netlink_route.c b/tests-m32/netlink_route.c
index a1c7d1f..a3fbac9 100644
--- a/tests-m32/netlink_route.c
+++ b/tests-m32/netlink_route.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -143,8 +144,8 @@
 static void
 test_nlmsg_done(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	const int num = 0xabcdefad;
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(num));
 
 	TEST_NETLINK(fd, nlh0, NLMSG_DONE, NLM_F_REQUEST,
 		     sizeof(num), &num, sizeof(num),
@@ -154,10 +155,11 @@
 static void
 test_rtnl_unspec(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	uint8_t family = 0;
+	char buf[sizeof(family) + 4];
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(buf));
 
 	/* unspecified family only */
-	uint8_t family = 0;
 	TEST_NETLINK_(fd, nlh0,
 		      0xffff, "0xffff /* RTM_??? */",
 		      NLM_F_REQUEST, "NLM_F_REQUEST",
@@ -180,7 +182,6 @@
 		      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);
@@ -204,7 +205,6 @@
 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,
@@ -212,6 +212,7 @@
 		.ifi_flags = IFF_UP,
 		.ifi_change = 0xfabcdeba
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(ifinfo));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETLINK, ifinfo,
 		      printf("{ifi_family=AF_UNIX"),
@@ -225,7 +226,6 @@
 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,
@@ -233,6 +233,7 @@
 		.ifa_scope = RT_SCOPE_UNIVERSE,
 		.ifa_index = ifindex_lo()
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDR, msg,
 		      printf("{ifa_family=AF_UNIX"),
@@ -246,7 +247,6 @@
 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,
@@ -258,6 +258,7 @@
 		.rtm_type = RTN_LOCAL,
 		.rtm_flags = RTM_F_NOTIFY
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETROUTE, msg,
 		      printf("{rtm_family=AF_UNIX"),
@@ -275,7 +276,6 @@
 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,
@@ -285,6 +285,7 @@
 		.rtm_type = FR_ACT_TO_TBL,
 		.rtm_flags = FIB_RULE_INVERT
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETRULE, msg,
 		      printf("{family=AF_UNIX"),
@@ -301,7 +302,6 @@
 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(),
@@ -309,6 +309,7 @@
 		.ndm_flags = NTF_PROXY,
 		.ndm_type = RTN_UNSPEC
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETNEIGH, msg,
 		      printf("{ndm_family=AF_UNIX"),
@@ -321,10 +322,10 @@
 static void
 test_rtnl_neightbl(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct ndtmsg msg = {
 		.ndtm_family = AF_NETLINK
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETNEIGHTBL, NLM_F_REQUEST,
@@ -335,7 +336,6 @@
 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(),
@@ -343,6 +343,7 @@
 		.tcm_parent = 0xafbcadab,
 		.tcm_info = 0xbcaedafa
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETQDISC, msg,
 		      printf("{tcm_family=AF_UNIX"),
@@ -356,10 +357,10 @@
 static void
 test_rtnl_tca(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct tcamsg msg = {
 		.tca_family = AF_INET
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETACTION, NLM_F_REQUEST,
@@ -371,7 +372,6 @@
 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,
@@ -379,6 +379,7 @@
 		.ifal_index = ifindex_lo(),
 		.ifal_seq = 0xfadcdafb
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDRLABEL, msg,
 		      printf("{ifal_family=AF_UNIX"),
@@ -394,11 +395,11 @@
 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
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETDCB, msg,
 		      printf("{dcb_family=AF_UNIX"),
@@ -410,10 +411,10 @@
 static void
 test_rtnl_netconf(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct netconfmsg msg = {
 		.ncm_family = AF_INET
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETNETCONF, NLM_F_REQUEST,
@@ -426,11 +427,11 @@
 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()
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETMDB, msg,
 		      printf("{family=AF_UNIX"),
@@ -442,10 +443,10 @@
 static void
 test_rtnl_nsid(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct rtgenmsg msg = {
 		.rtgen_family = AF_UNIX
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETNSID, NLM_F_REQUEST,
diff --git a/tests-m32/netlink_selinux.c b/tests-m32/netlink_selinux.c
index 2d76822..57cf8a5 100644
--- a/tests-m32/netlink_selinux.c
+++ b/tests-m32/netlink_selinux.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -53,7 +54,7 @@
 static void
 test_selnl_msg_unspec(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, 4);
 
 	TEST_NETLINK_(fd, nlh0,
 		      0xffff, "0xffff /* SELNL_MSG_??? */",
@@ -65,11 +66,11 @@
 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
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
+
 	TEST_NETLINK_OBJECT(fd, nlh0,
 			    SELNL_MSG_SETENFORCE, NLM_F_REQUEST, msg,
 			    PRINT_FIELD_D("{", msg, val);
@@ -79,11 +80,11 @@
 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
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
+
 	TEST_NETLINK_OBJECT(fd, nlh0,
 			    SELNL_MSG_POLICYLOAD, NLM_F_REQUEST, msg,
 			    PRINT_FIELD_U("{", msg, seqno);
diff --git a/tests-m32/netlink_sock_diag.c b/tests-m32/netlink_sock_diag.c
index c2ebf12..880069f 100644
--- a/tests-m32/netlink_sock_diag.c
+++ b/tests-m32/netlink_sock_diag.c
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -127,10 +127,11 @@
 static void
 test_odd_family_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	uint8_t family = 0;
+	char buf[sizeof(family) + 4];
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(buf));
 
 	/* unspecified family only */
-	uint8_t family = 0;
 	TEST_NETLINK(fd, nlh0,
 		     SOCK_DIAG_BY_FAMILY,
 		     NLM_F_REQUEST,
@@ -153,7 +154,6 @@
 		     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);
@@ -177,10 +177,11 @@
 static void
 test_odd_family_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	uint8_t family = 0;
+	char buf[sizeof(family) + 4];
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(buf));
 
 	/* unspecified family only */
-	uint8_t family = 0;
 	TEST_NETLINK(fd, nlh0,
 		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
 		     sizeof(family), &family, sizeof(family),
@@ -200,7 +201,6 @@
 		     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);
@@ -222,7 +222,6 @@
 static void
 test_unix_diag_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct unix_diag_req req = {
 		.sdiag_family = AF_UNIX,
 		.sdiag_protocol = 253,
@@ -231,6 +230,7 @@
 		.udiag_show = UDIAG_SHOW_NAME,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
 		       printf("{sdiag_family=AF_UNIX"),
@@ -245,7 +245,6 @@
 static void
 test_unix_diag_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct unix_diag_msg msg = {
 		.udiag_family = AF_UNIX,
 		.udiag_type = SOCK_STREAM,
@@ -253,6 +252,7 @@
 		.udiag_ino = 0xfacefeed,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
 		       printf("{udiag_family=AF_UNIX"),
@@ -266,7 +266,6 @@
 static void
 test_netlink_diag_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct netlink_diag_req req = {
 		.sdiag_family = AF_NETLINK,
 		.sdiag_protocol = NDIAG_PROTO_ALL,
@@ -274,6 +273,7 @@
 		.ndiag_show = NDIAG_SHOW_MEMINFO,
 		.ndiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
 		       printf("{sdiag_family=AF_NETLINK"),
@@ -298,7 +298,6 @@
 static void
 test_netlink_diag_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct netlink_diag_msg msg = {
 		.ndiag_family = AF_NETLINK,
 		.ndiag_type = SOCK_RAW,
@@ -310,6 +309,7 @@
 		.ndiag_ino = 0xdaeefacd,
 		.ndiag_cookie = { 0xbadc0ded, 0xdeadbeef }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
 		       printf("{ndiag_family=AF_NETLINK"),
@@ -327,7 +327,6 @@
 static void
 test_packet_diag_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct packet_diag_req req = {
 		.sdiag_family = AF_PACKET,
 		.sdiag_protocol = ETH_P_LOOP,
@@ -335,6 +334,7 @@
 		.pdiag_show = PACKET_SHOW_INFO,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
 		       printf("{sdiag_family=AF_PACKET"),
@@ -348,7 +348,6 @@
 static void
 test_packet_diag_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct packet_diag_msg msg = {
 		.pdiag_family = AF_PACKET,
 		.pdiag_type = SOCK_STREAM,
@@ -356,6 +355,7 @@
 		.pdiag_ino = 0xfacefeed,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
 		       printf("{pdiag_family=AF_PACKET"),
@@ -371,7 +371,6 @@
 {
 	const char address[] = "12.34.56.78";
 	const char address6[] = "12:34:56:78:90:ab:cd:ef";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
@@ -384,6 +383,7 @@
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -435,7 +435,6 @@
 test_inet_diag_req(const int fd)
 {
 	const char address[] = "12.34.56.78";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_req req = {
 		.idiag_family = AF_INET,
 		.idiag_src_len = 0xde,
@@ -450,6 +449,7 @@
 		.idiag_states = 1 << TCP_LAST_ACK,
 		.idiag_dbs = 0xfacefeed,
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -479,7 +479,6 @@
 test_inet_diag_req_v2(const int fd)
 {
 	const char address[] = "87.65.43.21";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
@@ -492,6 +491,7 @@
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -519,7 +519,6 @@
 test_inet_diag_msg(const int fd)
 {
 	const char address[] = "11.22.33.44";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_msg msg = {
 		.idiag_family = AF_INET,
 		.idiag_state = TCP_LISTEN,
@@ -537,6 +536,7 @@
 		.idiag_uid = 0xdecefaeb,
 		.idiag_inode = 0xbadc0ded,
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
@@ -570,7 +570,6 @@
 test_smc_diag_req(const int fd)
 {
 	const char address[] = "43.21.56.78";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct smc_diag_req req = {
 		.diag_family = AF_SMC,
 		.diag_ext = 1 << (SMC_DIAG_CONNINFO - 1),
@@ -581,6 +580,7 @@
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded },
 		},
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -606,7 +606,6 @@
 test_smc_diag_msg(const int fd)
 {
 	const char address[] = "34.87.12.90";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct smc_diag_msg msg = {
 		.diag_family = AF_SMC,
 		.diag_state = SMC_ACTIVE,
@@ -621,6 +620,7 @@
 		.diag_uid = 0xadcdfafc,
 		.diag_inode = 0xbadc0ded,
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
diff --git a/tests-m32/nlattr.c b/tests-m32/nlattr.c
index 41923c0..8556f68 100644
--- a/tests-m32/nlattr.c
+++ b/tests-m32/nlattr.c
@@ -2,7 +2,7 @@
  * Check decoding of netlink attribute.
  *
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -172,7 +172,7 @@
 	       ", 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}, %p]}, %u"
+	       ", nla_type=UNIX_DIAG_NAME}, ... /* %p */]}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, NLA_HDRLEN, nla + 1, msg_len, sprintrc(rc));
 
diff --git a/tests-m32/nlattr_br_port_msg.c b/tests-m32/nlattr_br_port_msg.c
index a2a4792..d339414 100644
--- a/tests-m32/nlattr_br_port_msg.c
+++ b/tests-m32/nlattr_br_port_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -69,7 +69,7 @@
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 
 	const unsigned int hdrlen = sizeof(struct br_port_msg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_crypto_user_alg.c b/tests-m32/nlattr_crypto_user_alg.c
index 2482b33..b8ceba6 100644
--- a/tests-m32/nlattr_crypto_user_alg.c
+++ b/tests-m32/nlattr_crypto_user_alg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -72,7 +72,12 @@
 
 	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));
+	/*
+	 * There are also other structures, but they are not bigger than
+	 * DEFAULT_STRLEN so far.
+	 */
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN + DEFAULT_STRLEN);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_dcbmsg.c b/tests-m32/nlattr_dcbmsg.c
index cd63bb6..b6eb772 100644
--- a/tests-m32/nlattr_dcbmsg.c
+++ b/tests-m32/nlattr_dcbmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,7 +67,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct dcbmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_fib_rule_hdr.c b/tests-m32/nlattr_fib_rule_hdr.c
index 394ab10..96ebadf 100644
--- a/tests-m32/nlattr_fib_rule_hdr.c
+++ b/tests-m32/nlattr_fib_rule_hdr.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -34,12 +34,24 @@
 # include <inttypes.h>
 # include "test_nlattr.h"
 # include <linux/fib_rules.h>
+# include <linux/in.h>
 # include <linux/ip.h>
 # include <linux/rtnetlink.h>
 
 #define FRA_TUN_ID 12
 #define FRA_TABLE 15
 #define FRA_UID_RANGE 20
+#define FRA_PROTOCOL 21
+#define FRA_IP_PROTO 22
+#define FRA_SPORT_RANGE 23
+#define FRA_DPORT_RANGE 24
+
+# ifndef HAVE_STRUCT_FIB_RULE_PORT_RANGE
+struct fib_rule_port_range {
+	uint16_t start;
+	uint16_t end;
+};
+# endif /* HAVE_STRUCT_FIB_RULE_PORT_RANGE */
 
 static void
 init_rtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
@@ -80,7 +92,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct rtmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 8);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
@@ -125,6 +137,62 @@
 			   printf("htobe64(%" PRIu64 ")", be64toh(tun_id)));
 #endif
 
+	uint8_t proto;
+
+	static const struct {
+		uint8_t arg;
+		const char *str;
+	} proto_args[] = {
+		{ ARG_STR(RTPROT_UNSPEC) },
+		{ 5, "0x5 /* RTPROT_??? */" },
+		{ 17, "RTPROT_MROUTED" },
+		{ 42, "RTPROT_BABEL" },
+		{ 43, "0x2b /* RTPROT_??? */" },
+		{ ARG_STR(0xde) " /* RTPROT_??? */" },
+	};
+
+	for (unsigned i = 0; i < ARRAY_SIZE(proto_args); i++) {
+		proto = proto_args[i].arg;
+		TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				   init_rtmsg, print_rtmsg,
+				   FRA_PROTOCOL, pattern, proto,
+				   printf("%s", proto_args[i].str));
+	}
+
+	static const struct {
+		uint8_t arg;
+		const char *str;
+	} ipproto_args[] = {
+		{ ARG_STR(IPPROTO_TCP) },
+		{ 254, "0xfe /* IPPROTO_??? */" },
+		{ ARG_STR(IPPROTO_RAW) },
+	};
+
+	for (unsigned i = 0; i < ARRAY_SIZE(ipproto_args); i++) {
+		proto = ipproto_args[i].arg;
+		TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				   init_rtmsg, print_rtmsg,
+				   FRA_IP_PROTO, pattern, proto,
+				   printf("%s", ipproto_args[i].str));
+	}
+
+	static const struct fib_rule_port_range prange = {
+		.start = 0xabcd,
+		.end = 0xfeed,
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_SPORT_RANGE, pattern, prange,
+			   PRINT_FIELD_U("{", prange, start);
+			   PRINT_FIELD_U(", ", prange, end);
+			   printf("}"));
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_DPORT_RANGE, pattern, prange,
+			   PRINT_FIELD_U("{", prange, start);
+			   PRINT_FIELD_U(", ", prange, end);
+			   printf("}"));
+
 	puts("+++ exited with 0 +++");
 	return 0;
 }
diff --git a/tests-m32/nlattr_ifaddrlblmsg.c b/tests-m32/nlattr_ifaddrlblmsg.c
index 6003634..53a928d 100644
--- a/tests-m32/nlattr_ifaddrlblmsg.c
+++ b/tests-m32/nlattr_ifaddrlblmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -69,7 +69,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ifaddrlblmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_ifaddrmsg.c b/tests-m32/nlattr_ifaddrmsg.c
index 93fbef1..c71ebb1 100644
--- a/tests-m32/nlattr_ifaddrmsg.c
+++ b/tests-m32/nlattr_ifaddrmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -83,9 +83,23 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	static const char address4[] = "12.34.56.78";
+	static const char address6[] = "12:34:56:78:90:ab:cd:ef";
+	static const struct ifa_cacheinfo ci = {
+		.ifa_prefered = 0xabcdefac,
+		.ifa_valid = 0xbcdadbca,
+		.cstamp = 0xcdabedba,
+		.tstamp = 0xdebabdac
+	};
+
+	struct in_addr a4;
+	struct in6_addr a6;
+	const uint32_t ifa_flags = IFA_F_SECONDARY | IFA_F_PERMANENT;
+
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ifaddrmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + MAX(sizeof(ci), sizeof(a6)));
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
@@ -106,8 +120,6 @@
 		    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");
@@ -118,8 +130,6 @@
 			   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");
@@ -129,12 +139,6 @@
 			   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,
@@ -144,7 +148,6 @@
 			   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,
diff --git a/tests-m32/nlattr_ifinfomsg.c b/tests-m32/nlattr_ifinfomsg.c
index 1fff52c..71b1bab 100644
--- a/tests-m32/nlattr_ifinfomsg.c
+++ b/tests-m32/nlattr_ifinfomsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -46,6 +46,7 @@
 # define IFLA_VF_PORTS 24
 #endif
 #define IFLA_LINK_NETNSID 37
+#define IFLA_EVENT 44
 
 #ifndef IFLA_INFO_KIND
 # define IFLA_INFO_KIND 1
@@ -89,28 +90,6 @@
 {
 	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,
@@ -136,6 +115,29 @@
 		.rx_compressed = 0xdeffadbd,
 		.tx_compressed = 0xefdadfab
 	};
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(st));
+
+	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));
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_ifinfomsg, print_ifinfomsg,
 			   IFLA_STATS, pattern, st,
@@ -343,6 +345,22 @@
 		    printf("{nla_len=%u, nla_type=IFLA_VF_PORT}",
 			   nla.nla_len));
 
+	static const struct {
+		uint32_t val;
+		const char *str;
+	} ifla_events[] = {
+		{ 0, "IFLA_EVENT_NONE" },
+		{ 6, "IFLA_EVENT_BONDING_OPTIONS" },
+		{ ARG_STR(0x7) " /* IFLA_EVENT_??? */" },
+		{ ARG_STR(0xdeadfeed) " /* IFLA_EVENT_??? */" },
+	};
+	for (size_t i = 0; i < ARRAY_SIZE(ifla_events); i++) {
+		TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				   init_ifinfomsg, print_ifinfomsg,
+				   IFLA_EVENT, pattern, ifla_events[i].val,
+				   printf("%s", ifla_events[i].str));
+	}
+
 	puts("+++ exited with 0 +++");
 	return 0;
 }
diff --git a/tests-m32/nlattr_ifla.h b/tests-m32/nlattr_ifla.h
new file mode 100644
index 0000000..6989225
--- /dev/null
+++ b/tests-m32/nlattr_ifla.h
@@ -0,0 +1,78 @@
+/*
+ * netlink attribute ifinfomsg common code.
+ *
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (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_TESTS_NLATTR_IFLA_H
+#define STRACE_TESTS_NLATTR_IFLA_H
+
+#include "tests.h"
+
+#ifndef IFLA_ATTR
+# error "Please define IFLA_ATTR before including this file"
+#endif
+
+static 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_ATTR
+	);
+}
+
+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=" STRINGIFY_VAL(IFLA_ATTR) "}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+#endif /* STRACE_TESTS_NLATTR_IFLA_H */
diff --git a/tests-m32/nlattr_ifla_af_spec.c b/tests-m32/nlattr_ifla_af_spec.c
new file mode 100644
index 0000000..24f55af
--- /dev/null
+++ b/tests-m32/nlattr_ifla_af_spec.c
@@ -0,0 +1,322 @@
+/*
+ * IFLA_AF_SPEC netlink attribute decoding check.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <inttypes.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>
+
+#if !HAVE_DECL_IFLA_AF_SPEC
+enum { IFLA_AF_SPEC = 26 };
+#endif
+
+#define XLAT_MACROS_ONLY
+# include "xlat/rtnl_ifla_af_spec_inet_attrs.h"
+# include "xlat/rtnl_ifla_af_spec_inet6_attrs.h"
+#undef XLAT_MACROS_ONLY
+
+#ifndef HAVE_STRUCT_IFLA_CACHEINFO
+struct ifla_cacheinfo {
+	uint32_t max_reasm_len;
+	uint32_t tstamp;
+	uint32_t reachable_time;
+	uint32_t retrans_time;
+};
+#endif
+
+#define IFLA_ATTR IFLA_AF_SPEC
+#include "nlattr_ifla.h"
+
+#define AF_SPEC_FUNCS(family_)						\
+	static void							\
+	init_##family_##_msg(struct nlmsghdr *const nlh,		\
+			     const unsigned int msg_len)		\
+	{								\
+		init_ifinfomsg(nlh, msg_len);				\
+									\
+		struct nlattr *nla = NLMSG_ATTR(nlh, hdrlen);		\
+		nla += 1;						\
+		SET_STRUCT(struct nlattr, nla,				\
+			.nla_len = msg_len - NLMSG_SPACE(hdrlen)	\
+				  - NLA_HDRLEN,				\
+			.nla_type = family_,				\
+		);							\
+	}								\
+									\
+	static void							\
+	print_##family_##_msg(const unsigned int msg_len)		\
+	{								\
+		print_ifinfomsg(msg_len);				\
+		printf(", {{nla_len=%u, nla_type=" #family_ "}",	\
+		       msg_len - NLMSG_SPACE(hdrlen) - NLA_HDRLEN);	\
+	}								\
+	/* end of AF_SPEC_FUNCS definition */
+
+AF_SPEC_FUNCS(AF_INET)
+AF_SPEC_FUNCS(AF_INET6)
+
+static void
+print_arr_val(uint32_t *val, size_t idx, const char *idx_str)
+{
+	if (idx_str)
+		printf("[%s] = ", idx_str);
+	else
+		printf("[%zu] = ", idx);
+
+	printf("%d", *val);
+}
+
+static void
+print_arr_uval(uint64_t *val, size_t idx, const char *idx_str)
+{
+	if (idx_str)
+		printf("[%s] = ", idx_str);
+	else
+		printf("[%zu] = ", idx);
+
+	printf("%" PRIu64, *val);
+}
+
+static void
+print_inet_conf_val(uint32_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"IPV4_DEVCONF_FORWARDING-1",
+		"IPV4_DEVCONF_MC_FORWARDING-1",
+	};
+
+	print_arr_val(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+
+static void
+print_inet6_conf_val(uint32_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"DEVCONF_FORWARDING",
+		"DEVCONF_HOPLIMIT",
+	};
+
+	print_arr_val(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+static void
+print_inet6_stats_val(uint64_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"IPSTATS_MIB_NUM",
+		"IPSTATS_MIB_INPKTS",
+	};
+
+	print_arr_uval(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+static void
+print_icmp6_stats_val(uint64_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"ICMP6_MIB_NUM",
+		"ICMP6_MIB_INMSGS",
+		"ICMP6_MIB_INERRORS",
+		"ICMP6_MIB_OUTMSGS",
+		"ICMP6_MIB_OUTERRORS",
+		"ICMP6_MIB_CSUMERRORS",
+		"6 /* ICMP6_MIB_??? */",
+	};
+
+	print_arr_uval(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+int
+main(void)
+{
+	static const uint8_t unknown_msg[] = { 0xab, 0xac, 0xdb, 0xcd };
+
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 3 * NLA_HDRLEN + 256);
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+
+	/* unknown AF_* */
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  AF_UNIX, pattern, unknown_msg,
+				  printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET_msg, print_AF_INET_msg,
+				      0, "IFLA_INET_UNSPEC", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET_msg, print_AF_INET_msg,
+				      2, "0x2 /* IFLA_INET_??? */", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET: IFLA_INET_CONF */
+	uint32_t inet_conf_vals[] = { 0xdeadc0de, 0xda7aface };
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET_msg, print_AF_INET_msg,
+				    IFLA_INET_CONF, pattern,
+				    inet_conf_vals, 2, print_inet_conf_val);
+
+	/* AF_INET6 */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      0, "IFLA_INET6_UNSPEC", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      9, "0x9 /* IFLA_INET6_??? */", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET6: IFLA_INET6_FLAGS */
+	static const struct {
+		uint32_t flags;
+		const char *str;
+	} inet6_flags[] = {
+		{ 0xf, "0xf /* IF_??? */" },
+		{ 0x10, "IF_RS_SENT" },
+		{ 0xc0, "IF_RA_MANAGED|IF_RA_OTHERCONF" },
+		{ 0xdeadc0de, "IF_RS_SENT|IF_RA_MANAGED|IF_RA_OTHERCONF"
+			      "|IF_READY|0x5eadc00e" },
+	};
+
+	for (size_t i = 0; i < ARRAY_SIZE(inet6_flags); i++) {
+		TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+					      init_AF_INET6_msg,
+					      print_AF_INET6_msg,
+					      1, "IFLA_INET6_FLAGS", pattern,
+					      inet6_flags[i].flags,
+					      print_quoted_hex, 2,
+					      printf("%s", inet6_flags[i].str));
+	}
+
+	/* AF_INET6: IFLA_INET6_CONF */
+	uint32_t inet6_conf_vals[] = { 0xdeadc0de, 0xda7aface };
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET6_msg, print_AF_INET6_msg,
+				    IFLA_INET6_CONF, pattern,
+				    inet6_conf_vals, 2, print_inet6_conf_val);
+
+	/* AF_INET6: IFLA_INET6_STATS */
+	uint64_t inet6_stats_vals[] = { 0xdeadc0deda7aface, 0xdec0deedbadc0ded };
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET6_msg, print_AF_INET6_msg,
+				    IFLA_INET6_STATS, pattern,
+				    inet6_stats_vals, 2, print_inet6_stats_val);
+
+	/* AF_INET6: IFLA_INET6_MCAST */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      4, "IFLA_INET6_MCAST", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET6: IFLA_INET6_CACHEINFO */
+	static const struct ifla_cacheinfo ci = {
+		0xbadc0ded, 0xfacebeef, 0xdecafeed, 0xdeadfeed,
+	};
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      5, "IFLA_INET6_CACHEINFO", pattern,
+				      ci, print_quoted_hex, 2,
+				      PRINT_FIELD_U("{", ci, max_reasm_len);
+				      PRINT_FIELD_U(", ", ci, tstamp);
+				      PRINT_FIELD_U(", ", ci, reachable_time);
+				      PRINT_FIELD_U(", ", ci, retrans_time);
+				      printf("}"));
+
+	/* AF_INET6: IFLA_INET6_ICMP6STATS */
+	uint64_t icmp6_stats_vals[] = {
+		0xdeadc0deda7aface, 0xdec0deedbadc0ded, 0xfacebeefdeadfeed,
+		0xdeadc0deda7afacd, 0xdec0deedbadc0dee, 0xfacebeefdeadfeef,
+		0xdeadc0deda7afacc
+	};
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET6_msg, print_AF_INET6_msg,
+				    IFLA_INET6_ICMP6STATS, pattern,
+				    icmp6_stats_vals, 2, print_icmp6_stats_val);
+
+	/* AF_INET6: IFLA_INET6_TOKEN */
+	uint8_t inet6_addr[16] = {
+		0xba, 0xdc, 0x0d, 0xed, 0xfa, 0xce, 0xbe, 0xef,
+		0xde, 0xca, 0xfe, 0xed, 0xde, 0xad, 0xfe, 0xed,
+	};
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      7, "IFLA_INET6_TOKEN", pattern,
+				      inet6_addr, print_quoted_hex, 2,
+				      printf("badc:ded:face:beef:deca:feed"
+					     ":dead:feed"));
+
+	/* AF_INET6: IFLA_INET6_ */
+	static const struct {
+		uint8_t flags;
+		const char *str;
+	} agms[] = {
+		{ 0x0, "IN6_ADDR_GEN_MODE_EUI64" },
+		{ 0x3, "IN6_ADDR_GEN_MODE_RANDOM" },
+		{ 0x4, "0x4 /* IN6_ADDR_GEN_MODE_??? */" },
+		{ 0xff, "0xff /* IN6_ADDR_GEN_MODE_??? */" },
+	};
+
+	for (size_t i = 0; i < ARRAY_SIZE(agms); i++) {
+		TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+					      init_AF_INET6_msg,
+					      print_AF_INET6_msg,
+					      8, "IFLA_INET6_ADDR_GEN_MODE",
+					      pattern, agms[i].flags,
+					      print_quoted_hex, 2,
+					      printf("%s", agms[i].str));
+	}
+
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_ifla_af_spec.gen.test b/tests-m32/nlattr_ifla_af_spec.gen.test
new file mode 100755
index 0000000..601eeb2
--- /dev/null
+++ b/tests-m32/nlattr_ifla_af_spec.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_af_spec +netlink_sock_diag.test ); do not edit.
+set -- 
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ifla_brport.c b/tests-m32/nlattr_ifla_brport.c
index ae7c9da..1968426 100644
--- a/tests-m32/nlattr_ifla_brport.c
+++ b/tests-m32/nlattr_ifla_brport.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,65 +38,35 @@
 #endif
 #include <linux/rtnetlink.h>
 
+#if !HAVE_DECL_IFLA_PROTINFO
+enum { IFLA_PROTINFO = 12 };
+#endif
+
 #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));
-}
+#define IFLA_ATTR IFLA_PROTINFO
+#include "nlattr_ifla.h"
 
 int
 main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	const uint16_t u16 = 0xabcd;
+	const uint64_t u64 = 0xabcdedeeefeafeab;
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN * 2 + sizeof(u64));
 
 	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,
diff --git a/tests-m32/nlattr_ifla_linkinfo.c b/tests-m32/nlattr_ifla_linkinfo.c
new file mode 100644
index 0000000..1bf1bef
--- /dev/null
+++ b/tests-m32/nlattr_ifla_linkinfo.c
@@ -0,0 +1,711 @@
+/*
+ * IFLA_LINKINFO netlink attribute decoding check.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <inttypes.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <arpa/inet.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 XLAT_MACROS_ONLY
+# include <xlat/rtnl_link_attrs.h>
+# include <xlat/rtnl_ifla_info_attrs.h>
+#undef XLAT_MACROS_ONLY
+
+#define IFLA_ATTR IFLA_LINKINFO
+#include "nlattr_ifla.h"
+
+#define COMMA ,
+#define TEST_UNKNOWN_TUNNELS(fd_, nlh0_, objtype_, objtype_str_,	\
+			     obj_, objsz_, arrstrs_, ...)		\
+	do {								\
+		/* 64 is guestimate for maximum unknown type len */	\
+		char buf[8 * 2 + 64 + objsz_];				\
+		const char **arrstrs[] = arrstrs_;			\
+		const char ***arrstrs_pos = arrstrs;			\
+		const char **arrstr = *arrstrs_pos;			\
+		const char *type = NULL;				\
+									\
+		for (type = arrstr ? arrstr[0] : NULL; type && arrstr;	\
+		     type = (++arrstr)[0] ? arrstr[0]			\
+					  : (++arrstrs_pos)[0]		\
+				             ? (arrstr = arrstrs_pos[0])[0] \
+					     : NULL)			\
+		{							\
+			size_t type_len = strlen(type) + 1;		\
+									\
+			if (type_len > 64)				\
+				error_msg_and_fail("Unexpectedly long "	\
+						   "unknown type: \"%s\" " \
+						   "(length is %zu)",	\
+						   type, type_len);	\
+									\
+			struct nlattr obj_nla = {			\
+				.nla_len = NLA_HDRLEN + (objsz_),	\
+				.nla_type = (objtype_),			\
+			};						\
+									\
+			char *pos = buf;				\
+			memcpy(pos, type, type_len);			\
+			pos += NLA_ALIGN(type_len);			\
+			memcpy(pos, &obj_nla, sizeof(obj_nla));		\
+			pos += sizeof(obj_nla);				\
+			memcpy(pos, (obj_), (objsz_));			\
+									\
+			TEST_NLATTR_EX_((fd_),				\
+					(nlh0_) - hdrlen - (pos - buf),	\
+					hdrlen + NLA_HDRLEN,		\
+					init_ifinfomsg, print_ifinfomsg, \
+					IFLA_INFO_KIND, "IFLA_INFO_KIND", \
+					type_len, objsz_ + (pos - buf),	\
+					buf, objsz_ + (pos - buf),	\
+					printf("\"%s\"}", type);	\
+					printf(", {{nla_len=%zu"	\
+				               ", nla_type=%s}, ",	\
+					       (objsz_) + NLA_HDRLEN,	\
+					       (objtype_str_));		\
+									\
+					{ __VA_ARGS__; }		\
+									\
+					printf("}"));			\
+		}							\
+	} while (0)
+
+#define TEST_LINKINFO_(fd_, nlh0_, nla_type_, nla_type_str_, tuntype_,	\
+		       obj_, objsz_, pattern_, fallback_func_, ...)	\
+	do {								\
+		size_t tuntype_len = strlen(tuntype_) + 1;		\
+		char *buf = tail_alloc(NLA_ALIGN(tuntype_len)		\
+				       + NLA_HDRLEN + (objsz_));	\
+		char *pos = buf;					\
+									\
+		struct nlattr obj_nla = {				\
+			.nla_len = NLA_HDRLEN + (objsz_),		\
+			.nla_type = (nla_type_),			\
+		};							\
+									\
+		memcpy(pos, (tuntype_), tuntype_len);			\
+		pos += NLA_ALIGN(tuntype_len);				\
+		memcpy(pos, &obj_nla, sizeof(obj_nla));			\
+		pos += sizeof(obj_nla);					\
+		memcpy(pos, &(obj_), (objsz_));				\
+									\
+		if (fallback_func_ == print_quoted_hex) {		\
+			TEST_NLATTR_EX_((fd_),				\
+					(nlh0_) - NLA_HDRLEN,		\
+					hdrlen + NLA_HDRLEN,		\
+					init_ifinfomsg, print_ifinfomsg, \
+					IFLA_INFO_KIND, "IFLA_INFO_KIND", \
+					tuntype_len,			\
+					objsz_ + (pos - buf) - 1,	\
+					buf, objsz_ + (pos - buf) - 1,	\
+					printf("\"%s\"}", (tuntype_));	\
+					printf(", {{nla_len=%zu"	\
+					       ", nla_type=%s}, ",	\
+					       (objsz_) + NLA_HDRLEN,	\
+					       (nla_type_str_));	\
+					(fallback_func_)((obj_),	\
+							 (objsz_) - 1);	\
+					printf("}"));			\
+		}							\
+									\
+		TEST_NLATTR_EX_((fd_), (nlh0_) - NLA_HDRLEN,		\
+				hdrlen + NLA_HDRLEN,			\
+				init_ifinfomsg, print_ifinfomsg,	\
+				IFLA_INFO_KIND, "IFLA_INFO_KIND",	\
+				tuntype_len, objsz_ + (pos - buf),	\
+				buf, objsz_ + (pos - buf) - 1,		\
+				printf("\"%s\"}", (tuntype_));		\
+				printf(", {{nla_len=%zu, nla_type=%s}, ", \
+				       (objsz_) + NLA_HDRLEN,		\
+				       (nla_type_str_));		\
+				printf("%p}",				\
+				       RTA_DATA(NLMSG_ATTR(nlh,		\
+				       (hdrlen + NLA_HDRLEN + (pos - buf)))) \
+				       )				\
+				);					\
+									\
+		TEST_NLATTR_EX_((fd_), (nlh0_) - NLA_HDRLEN,		\
+				hdrlen + NLA_HDRLEN,			\
+				init_ifinfomsg, print_ifinfomsg,	\
+				IFLA_INFO_KIND, "IFLA_INFO_KIND",	\
+				tuntype_len, objsz_ + (pos - buf),	\
+				buf, objsz_ + (pos - buf),		\
+				printf("\"%s\"}", (tuntype_));		\
+				printf(", {{nla_len=%zu, nla_type=%s}, ", \
+				       (objsz_) + NLA_HDRLEN,		\
+				       (nla_type_str_));		\
+									\
+				{ __VA_ARGS__; }			\
+									\
+				printf("}"));				\
+	} while (0)
+
+#define TEST_LINKINFO(fd_, nlh0_, nla_type_, tuntype_,	\
+		      obj_, pattern_, fallback_func_, ...)	\
+	TEST_LINKINFO_((fd_), (nlh0_), nla_type_, #nla_type_, (tuntype_), \
+		       (obj_), sizeof(obj_), pattern_, fallback_func_,	\
+		       __VA_ARGS__)
+
+#define TEST_NESTED_LINKINFO(fd_, nlh0_,				\
+			     nla_type_, nla_type_str_, tuntype_,	\
+			     subnla_type_, subnla_type_str_,		\
+			     obj_, pattern_, ...)			\
+	do {								\
+		size_t tuntype_len = strlen(tuntype_) + 1;		\
+		struct {						\
+			size_t sz;					\
+			const char *str;				\
+		} attrs[] = { __VA_ARGS__ };				\
+		size_t tunhdrlen;					\
+		size_t buflen = NLA_ALIGN(tuntype_len) + NLA_HDRLEN;	\
+		size_t attrsz = 0;					\
+									\
+		for (size_t i = 0; i < ARRAY_SIZE(attrs); i++)		\
+			attrsz += NLA_HDRLEN + NLA_ALIGN(attrs[i].sz);	\
+									\
+		buflen += attrsz;					\
+									\
+		char *buf = tail_alloc(buflen);				\
+		char *pos = buf;					\
+									\
+		struct nlattr nla = {					\
+			.nla_len = NLA_HDRLEN + attrsz,			\
+			.nla_type = (nla_type_),			\
+		};							\
+									\
+		memcpy(pos, (tuntype_), tuntype_len);			\
+		pos += NLA_ALIGN(tuntype_len);				\
+		memcpy(pos, &nla, sizeof(nla));				\
+		pos += sizeof(nla);					\
+									\
+		tunhdrlen = pos - buf;					\
+									\
+		nla.nla_type = subnla_type_;				\
+									\
+		for (size_t i = 0; i < ARRAY_SIZE(attrs); i++) {	\
+			nla.nla_len = NLA_HDRLEN + attrs[i].sz;		\
+			memcpy(pos, &nla, sizeof(nla));			\
+			pos += sizeof(nla);				\
+									\
+			memcpy(pos, &(obj_), MIN(sizeof(obj_), attrs[i].sz)); \
+									\
+			if (attrs[i].sz > sizeof(obj_))			\
+				memcpy(pos + sizeof(obj_),		\
+				       &(pattern_),			\
+				       attrs[i].sz - sizeof(obj_));	\
+									\
+			pos += NLA_ALIGN(attrs[i].sz);			\
+		}							\
+									\
+		TEST_NLATTR_EX_((fd_), (nlh0_) - hdrlen - tunhdrlen,	\
+				hdrlen + NLA_HDRLEN,			\
+				init_ifinfomsg, print_ifinfomsg,	\
+				IFLA_INFO_KIND, "IFLA_INFO_KIND",	\
+				tuntype_len, buflen,			\
+				buf, buflen,				\
+				printf("\"%s\"}", (tuntype_));		\
+				printf(", {{nla_len=%zu, nla_type=%s}, [", \
+				       attrsz + NLA_HDRLEN,		\
+				       (nla_type_str_));		\
+									\
+				for (size_t i = 0; i < ARRAY_SIZE(attrs); i++) \
+					printf("%s%s{nla_len=%zu"	\
+					       ", nla_type=%s}%s%s%s",	\
+					       i ? ", " : "",		\
+					       attrs[i].str ? "{": "",	\
+					       attrs[i].sz + NLA_HDRLEN, \
+					       subnla_type_str_,	\
+					       attrs[i].str ? ", ": "", \
+					       attrs[i].str ?: "",	\
+					       attrs[i].str ? "}" : ""); \
+									\
+				printf("]}"));				\
+	} while (0)
+
+int
+main(void)
+{
+	static const uint8_t unknown_msg[] = { 0xab, 0xac, 0xdb, 0xcd };
+	static const char *unsupported_tunnel_types[] = {
+		"batadv", "bond",
+		"caif", "cfhsi",
+		"dummy",
+		"erspan",
+		"geneve", "gre", "gretap", "gtp",
+		"hsr",
+		"ifb", "ip6erspan", "ip6gre", "ip6gretap", "ip6tnl",
+		"ipip", "ipoib", "ipvlan", "ipvtap",
+		"lowpan",
+		"macsec", "macvlan", "macvtap",
+		"netdevsim", "nlmon",
+		"openvswitch",
+		"ppp",
+		"rmnet",
+		"sit",
+		"team",
+		"vcan", "veth", "vlan", "vrf", "vsockmon",
+		"vti", "vti6", "vxcan", "vxlan",
+		NULL
+	};
+	static const char *unsupported_xstats_types[] = {
+		"bridge",
+		"tun",
+		NULL
+	};
+	static const char *unsupported_data_types[] = {
+		"can",
+		NULL
+	};
+
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 2 * NLA_HDRLEN + 256);
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+
+	/* unknown AF_INFO_* type */
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_INFO_UNSPEC, pattern, unknown_msg,
+			   printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+			       init_ifinfomsg, print_ifinfomsg,
+			       6, "0x6 /* IFLA_INFO_??? */", pattern,
+			       unknown_msg, print_quoted_hex, 1,
+			       printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	/* IFLA_INFO_KIND */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_ifinfomsg, print_ifinfomsg,
+				      IFLA_INFO_KIND, "IFLA_INFO_KIND", pattern,
+				      unknown_msg, print_quoted_stringn, 1,
+				      printf("\"\\253\\254\\333\\315\"..."));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_UNSPEC */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_UNSPEC, "IFLA_INFO_UNSPEC",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_KIND */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_KIND, "IFLA_INFO_KIND",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\253\\254\\333\\315\"..."));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_DATA */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_DATA, "IFLA_INFO_DATA",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	struct val_name {
+		unsigned int val;
+		const char *name;
+	};
+
+	static const uint64_t u64_val = 0xdeadc0defacefeedULL;
+	static const uint32_t u32_val = 0xbadc0dedU;
+	static const uint16_t u16_val = 0xdeed;
+	static const uint8_t  u8_val  = 0xa1;
+
+	/* bridge attrs */
+	static const struct val_name und_br_attrs[] = {
+		{ 0, "IFLA_BR_UNSPEC" },
+		{ 20, "IFLA_BR_GROUP_ADDR" },
+		{ 21, "IFLA_BR_FDB_FLUSH" },
+		{ 40, "IFLA_BR_PAD" },
+		{ 45, "0x2d /* IFLA_BR_??? */" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(und_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     und_br_attrs[k].val, und_br_attrs[k].name,
+				     unknown_msg, pattern,
+				     { 2, "\"\\xab\\xac\"" },
+				     { 4, "\"\\xab\\xac\\xdb\\xcd\"" },
+				     { 6,
+					"\"\\xab\\xac\\xdb\\xcd\\x61\\x62\"" },
+				     { 8, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\"" },
+				     { 10, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\\x65\\x66\"" });
+	}
+
+	static const struct val_name u64_br_attrs[] = {
+		{ 16, "IFLA_BR_HELLO_TIMER" },
+		{ 17, "IFLA_BR_TCN_TIMER" },
+		{ 18, "IFLA_BR_TOPOLOGY_CHANGE_TIMER" },
+		{ 19, "IFLA_BR_GC_TIMER" },
+		{ 30, "IFLA_BR_MCAST_LAST_MEMBER_INTVL" },
+		{ 31, "IFLA_BR_MCAST_MEMBERSHIP_INTVL" },
+		{ 32, "IFLA_BR_MCAST_QUERIER_INTVL" },
+		{ 33, "IFLA_BR_MCAST_QUERY_INTVL" },
+		{ 34, "IFLA_BR_MCAST_QUERY_RESPONSE_INTVL" },
+		{ 35, "IFLA_BR_MCAST_STARTUP_QUERY_INTVL" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u64_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u64_br_attrs[k].val, u64_br_attrs[k].name,
+				     u64_val, pattern,
+				     { 7, "\""
+#if WORDS_BIGENDIAN
+					"\\xde\\xad\\xc0\\xde\\xfa\\xce\\xfe"
+#else
+					"\\xed\\xfe\\xce\\xfa\\xde\\xc0\\xad"
+#endif
+					"\"" },
+				     { 8, "16045693111314087661" },
+				     { 9, "16045693111314087661" });
+	}
+
+	static const struct val_name u32_br_attrs[] = {
+		{  1, "IFLA_BR_FORWARD_DELAY" },
+		{  2, "IFLA_BR_HELLO_TIME" },
+		{  3, "IFLA_BR_MAX_AGE" },
+		{  4, "IFLA_BR_AGEING_TIME" },
+		{  5, "IFLA_BR_STP_STATE" },
+		{ 13, "IFLA_BR_ROOT_PATH_COST" },
+		{ 26, "IFLA_BR_MCAST_HASH_ELASTICITY" },
+		{ 27, "IFLA_BR_MCAST_HASH_MAX" },
+		{ 28, "IFLA_BR_MCAST_LAST_MEMBER_CNT" },
+		{ 29, "IFLA_BR_MCAST_STARTUP_QUERY_CNT" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u32_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u32_br_attrs[k].val, u32_br_attrs[k].name,
+				     u32_val, pattern,
+				     { 3, "\""
+#if WORDS_BIGENDIAN
+					"\\xba\\xdc\\x0d"
+#else
+					"\\xed\\x0d\\xdc"
+#endif
+					"\"" },
+				     { 4, "3134983661" },
+				     { 5, "3134983661" });
+	}
+
+	static const struct val_name u16_br_attrs[] = {
+		{  6, "IFLA_BR_PRIORITY" },
+		{ 12, "IFLA_BR_ROOT_PORT" },
+		{ 39, "IFLA_BR_VLAN_DEFAULT_PVID" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u16_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u16_br_attrs[k].val, u16_br_attrs[k].name,
+				     u16_val, pattern,
+				     { 1, "\""
+#if WORDS_BIGENDIAN
+					"\\xde"
+#else
+					"\\xed"
+#endif
+					"\"" },
+				     { 2, "57069" },
+				     { 3, "57069" });
+	}
+
+
+	static const struct val_name x16_br_attrs[] = {
+		{  9, "IFLA_BR_GROUP_FWD_MASK" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(x16_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     x16_br_attrs[k].val, x16_br_attrs[k].name,
+				     u16_val, pattern,
+				     { 1, "\""
+#if WORDS_BIGENDIAN
+					"\\xde"
+#else
+					"\\xed"
+#endif
+					"\"" },
+				     { 2, "0xdeed" },
+				     { 3, "0xdeed" });
+	}
+
+	static const struct val_name u8_br_attrs[] = {
+		{  7, "IFLA_BR_VLAN_FILTERING" },
+		{ 14, "IFLA_BR_TOPOLOGY_CHANGE" },
+		{ 15, "IFLA_BR_TOPOLOGY_CHANGE_DETECTED" },
+		{ 22, "IFLA_BR_MCAST_ROUTER" },
+		{ 23, "IFLA_BR_MCAST_SNOOPING" },
+		{ 24, "IFLA_BR_MCAST_QUERY_USE_IFADDR" },
+		{ 25, "IFLA_BR_MCAST_QUERIER" },
+		{ 36, "IFLA_BR_NF_CALL_IPTABLES" },
+		{ 37, "IFLA_BR_NF_CALL_IP6TABLES" },
+		{ 38, "IFLA_BR_NF_CALL_ARPTABLES" },
+		{ 41, "IFLA_BR_VLAN_STATS_ENABLED" },
+		{ 42, "IFLA_BR_MCAST_STATS_ENABLED" },
+		{ 43, "IFLA_BR_MCAST_IGMP_VERSION" },
+		{ 44, "IFLA_BR_MCAST_MLD_VERSION" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u8_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u8_br_attrs[k].val, u8_br_attrs[k].name,
+				     u8_val, pattern,
+				     { 0, NULL },
+				     { 1, "161" },
+				     { 2, "161" });
+	}
+
+	unsigned short eth_p = htons(0x88C7);
+	TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+			     8, "IFLA_BR_VLAN_PROTOCOL",
+			     eth_p, pattern,
+			     { 1, "\"\\x88\"" },
+			     { 2, "htons(ETH_P_PREAUTH)" },
+			     { 2, "htons(ETH_P_PREAUTH)" });
+
+	static const uint8_t bridge_id[]
+		= { 0xbe, 0xef, 0xfa, 0xce, 0xde, 0xc0, 0xde, 0xad };
+	static const struct val_name br_id_attrs[] = {
+		{ 10, "IFLA_BR_ROOT_ID" },
+		{ 11, "IFLA_BR_BRIDGE_ID" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(br_id_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     br_id_attrs[k].val, br_id_attrs[k].name,
+				     bridge_id, pattern,
+				     { 7, "\"\\xbe\\xef\\xfa\\xce"
+					  "\\xde\\xc0\\xde\"" },
+				     { 8, "{prio=[190, 239]"
+					  ", addr=fa:ce:de:c0:de:ad}" },
+				     { 9, "{prio=[190, 239]"
+					  ", addr=fa:ce:de:c0:de:ad}" });
+	}
+
+	/* tun attrs */
+	static const struct val_name u8_tun_attrs[] = {
+		{ 4, "IFLA_TUN_PI" },
+		{ 5, "IFLA_TUN_VNET_HDR" },
+		{ 6, "IFLA_TUN_PERSIST" },
+		{ 7, "IFLA_TUN_MULTI_QUEUE" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u8_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     u8_tun_attrs[k].val, u8_tun_attrs[k].name,
+				     u8_val, pattern,
+				     { 0, NULL },
+				     { 1, "161" },
+				     { 2, "161" });
+	}
+
+	static const struct val_name u32_tun_attrs[] = {
+		{ 8, "IFLA_TUN_NUM_QUEUES" },
+		{ 9, "IFLA_TUN_NUM_DISABLED_QUEUES" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u32_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     u32_tun_attrs[k].val,
+				     u32_tun_attrs[k].name,
+				     u32_val, pattern,
+				     { 3, "\""
+#if WORDS_BIGENDIAN
+					"\\xba\\xdc\\x0d"
+#else
+					"\\xed\\x0d\\xdc"
+#endif
+					"\"" },
+				     { 4, "3134983661" },
+				     { 5, "3134983661" });
+	}
+
+	static const struct val_name und_tun_attrs[] = {
+		{ 0,  "IFLA_TUN_UNSPEC" },
+		{ 10, "0xa /* IFLA_TUN_??? */" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(und_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     und_tun_attrs[k].val,
+				     und_tun_attrs[k].name,
+				     unknown_msg, pattern,
+				     { 2, "\"\\xab\\xac\"" },
+				     { 4, "\"\\xab\\xac\\xdb\\xcd\"" },
+				     { 6,
+					"\"\\xab\\xac\\xdb\\xcd\\x61\\x62\"" },
+				     { 8, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\"" },
+				     { 10, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\\x65\\x66\"" });
+	}
+
+	static const uint32_t minus_one = 0xffffffffU;
+	static const struct val_name uid_tun_attrs[] = {
+		{ 1, "IFLA_TUN_OWNER" },
+		{ 2, "IFLA_TUN_GROUP" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(uid_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     uid_tun_attrs[k].val,
+				     uid_tun_attrs[k].name,
+				     u32_val, pattern,
+				     { 3, "\""
+#if WORDS_BIGENDIAN
+					"\\xba\\xdc\\x0d"
+#else
+					"\\xed\\x0d\\xdc"
+#endif
+					"\"" },
+				     { 4, "3134983661" },
+				     { 5, "3134983661" });
+
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     uid_tun_attrs[k].val,
+				     uid_tun_attrs[k].name,
+				     minus_one, pattern,
+				     { 3, "\"\\xff\\xff\\xff\"" },
+				     { 4, "-1" },
+				     { 5, "-1" });
+	}
+
+	static const struct {
+		uint8_t val;
+		const char *str;
+	} tun_types[] = {
+		{ 0, "0 /* IFF_??? */"},
+		{ 1, "IFF_TUN"},
+		{ 2, "IFF_TAP"},
+		{ 3, "0x3 /* IFF_??? */"},
+		{ 0xda, "0xda /* IFF_??? */"},
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(tun_types); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     3, "IFLA_TUN_TYPE",
+				     tun_types[k].val, pattern,
+				     { 0, NULL },
+				     { 1, tun_types[k].str },
+				     { 2, tun_types[k].str });
+	}
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_XSTATS */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_XSTATS, "IFLA_INFO_XSTATS",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			     /*
+			      * can decoder decodes its data only if it's big
+			      * enough.
+			      */
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	uint32_t can_stats_data[] = {
+		0xbadc0de0, 0xbadc0de1, 0xbadc0de2, 0xbadc0de3,
+		0xbadc0de4, 0xbadc0de5,
+	};
+
+	TEST_LINKINFO(fd, nlh0, IFLA_INFO_XSTATS, "can",
+		      can_stats_data, pattern, print_quoted_hex,
+		      printf("{bus_error=3134983648"
+			     ", error_warning=3134983649"
+			     ", error_passive=3134983650"
+			     ", bus_off=3134983651"
+			     ", arbitration_lost=3134983652"
+			     ", restarts=3134983653}"));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_SLVAE_KIND */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0,
+			     IFLA_INFO_SLAVE_KIND, "IFLA_INFO_SLAVE_KIND",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\253\\254\\333\\315\"..."));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_SLAVE_DATA */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0,
+			     IFLA_INFO_SLAVE_DATA, "IFLA_INFO_SLAVE_DATA",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	/* IFLA_INFO_KIND + unknown type */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, 6, "0x6 /* IFLA_INFO_??? */",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_ifla_linkinfo.gen.test b/tests-m32/nlattr_ifla_linkinfo.gen.test
new file mode 100755
index 0000000..816ba99
--- /dev/null
+++ b/tests-m32/nlattr_ifla_linkinfo.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_linkinfo +netlink_sock_diag.test ); do not edit.
+set -- 
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_ifla_port.c b/tests-m32/nlattr_ifla_port.c
index 61e90fe..e6cb6a4 100644
--- a/tests-m32/nlattr_ifla_port.c
+++ b/tests-m32/nlattr_ifla_port.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,50 +37,15 @@
 #endif
 #include <linux/rtnetlink.h>
 
-#ifndef IFLA_PORT_SELF
-# define IFLA_PORT_SELF 25
+#if !HAVE_DECL_IFLA_PORT_SELF
+enum { 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));
-}
+#define IFLA_ATTR IFLA_PORT_SELF
+#include "nlattr_ifla.h"
 
 int
 main(void)
@@ -88,7 +53,7 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 2 * NLA_HDRLEN + 8);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_ifla_xdp.c b/tests-m32/nlattr_ifla_xdp.c
index cca5219..93149fa 100644
--- a/tests-m32/nlattr_ifla_xdp.c
+++ b/tests-m32/nlattr_ifla_xdp.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,63 +37,29 @@
 #endif
 #include <linux/rtnetlink.h>
 
-#ifndef IFLA_XDP
-# define IFLA_XDP 43
+#if !HAVE_DECL_IFLA_XDP
+enum { 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));
-}
+#define IFLA_ATTR IFLA_XDP
+#include "nlattr_ifla.h"
 
 int
 main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	const int32_t num = 0xabacdbcd;
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(num));
 
 	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,
diff --git a/tests-m32/nlattr_inet_diag_msg.c b/tests-m32/nlattr_inet_diag_msg.c
index ccc62ae..5984ee2 100644
--- a/tests-m32/nlattr_inet_diag_msg.c
+++ b/tests-m32/nlattr_inet_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,6 +37,18 @@
 #include <linux/inet_diag.h>
 #include <linux/sock_diag.h>
 
+static const char * const sk_meminfo_strs[] = {
+	"SK_MEMINFO_RMEM_ALLOC",
+	"SK_MEMINFO_RCVBUF",
+	"SK_MEMINFO_WMEM_ALLOC",
+	"SK_MEMINFO_SNDBUF",
+	"SK_MEMINFO_FWD_ALLOC",
+	"SK_MEMINFO_WMEM_QUEUED",
+	"SK_MEMINFO_OPTMEM",
+	"SK_MEMINFO_BACKLOG",
+	"SK_MEMINFO_DROPS",
+};
+
 static const char address[] = "10.11.12.13";
 
 static void
@@ -77,9 +89,14 @@
 }
 
 static void
-print_uint(const unsigned int *p)
+print_uint(const unsigned int *p, size_t i)
 {
-	printf("%u", *p);
+	if (i >= ARRAY_SIZE(sk_meminfo_strs))
+		printf("[%zu /* SK_MEMINFO_??? */", i);
+	else
+		printf("[%s", sk_meminfo_strs[i]);
+
+	printf("] = %u", *p);
 }
 
 int
@@ -87,19 +104,46 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
-	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	const unsigned int hdrlen = sizeof(struct inet_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 inet_diag_meminfo minfo = {
 		.idiag_rmem = 0xfadcacdb,
 		.idiag_wmem = 0xbdabcada,
 		.idiag_fmem = 0xbadbfafb,
 		.idiag_tmem = 0xfdacdadf
 	};
+	static const struct tcpvegas_info vegas = {
+		.tcpv_enabled = 0xfadcacdb,
+		.tcpv_rttcnt = 0xbdabcada,
+		.tcpv_rtt = 0xbadbfafb,
+		.tcpv_minrtt = 0xfdacdadf
+	};
+	static const struct tcp_dctcp_info dctcp = {
+		.dctcp_enabled = 0xfdac,
+		.dctcp_ce_state = 0xfadc,
+		.dctcp_alpha = 0xbdabcada,
+		.dctcp_ab_ecn = 0xbadbfafb,
+		.dctcp_ab_tot = 0xfdacdadf
+	};
+	static const struct tcp_bbr_info bbr = {
+		.bbr_bw_lo = 0xfdacdadf,
+		.bbr_bw_hi = 0xfadcacdb,
+		.bbr_min_rtt = 0xbdabcada,
+		.bbr_pacing_gain = 0xbadbfafb,
+		.bbr_cwnd_gain = 0xfdacdadf
+	};
+	static const uint32_t mem[] = { 0xaffacbad, 0xffadbcab };
+	static uint32_t bigmem[SK_MEMINFO_VARS + 1];
+	static const uint32_t mark = 0xabdfadca;
+	static const uint8_t shutdown = 0xcd;
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct inet_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN +
+					 MAX(sizeof(bigmem), DEFAULT_STRLEN));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_MEMINFO, pattern, minfo,
@@ -109,12 +153,6 @@
 			   PRINT_FIELD_U(", ", minfo, idiag_tmem);
 			   printf("}"));
 
-	static const struct tcpvegas_info vegas = {
-		.tcpv_enabled = 0xfadcacdb,
-		.tcpv_rttcnt = 0xbdabcada,
-		.tcpv_rtt = 0xbadbfafb,
-		.tcpv_minrtt = 0xfdacdadf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_VEGASINFO, pattern, vegas,
@@ -125,13 +163,6 @@
 			   printf("}"));
 
 
-	static const struct tcp_dctcp_info dctcp = {
-		.dctcp_enabled = 0xfdac,
-		.dctcp_ce_state = 0xfadc,
-		.dctcp_alpha = 0xbdabcada,
-		.dctcp_ab_ecn = 0xbadbfafb,
-		.dctcp_ab_tot = 0xfdacdadf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_DCTCPINFO, pattern, dctcp,
@@ -142,13 +173,6 @@
 			   PRINT_FIELD_U(", ", dctcp, dctcp_ab_tot);
 			   printf("}"));
 
-	static const struct tcp_bbr_info bbr = {
-		.bbr_bw_lo = 0xfdacdadf,
-		.bbr_bw_hi = 0xfadcacdb,
-		.bbr_min_rtt = 0xbdabcada,
-		.bbr_pacing_gain = 0xbadbfafb,
-		.bbr_cwnd_gain = 0xfdacdadf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_BBRINFO, pattern, bbr,
@@ -159,24 +183,16 @@
 			   PRINT_FIELD_U(", ", bbr, bbr_cwnd_gain);
 			   printf("}"));
 
-	static const uint32_t mem[] = { 0xaffacbad, 0xffadbcab };
 	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
 			  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(", ...]"));
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_inet_diag_msg, print_inet_diag_msg,
+			  INET_DIAG_SKMEMINFO, pattern, bigmem, print_uint);
 
-	static const uint32_t mark = 0xabdfadca;
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_MARK, pattern, mark,
@@ -187,7 +203,6 @@
 			   INET_DIAG_CLASS_ID, pattern, mark,
 			   printf("%u", mark));
 
-	static const uint8_t shutdown = 0xcd;
 	TEST_NLATTR(fd, nlh0, hdrlen,
 		    init_inet_diag_msg, print_inet_diag_msg, INET_DIAG_SHUTDOWN,
 		    sizeof(shutdown), &shutdown, sizeof(shutdown),
diff --git a/tests-m32/nlattr_inet_diag_req_compat.c b/tests-m32/nlattr_inet_diag_req_compat.c
index b0b2171..52fd53f 100644
--- a/tests-m32/nlattr_inet_diag_req_compat.c
+++ b/tests-m32/nlattr_inet_diag_req_compat.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -86,7 +86,7 @@
 
 	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
 	const unsigned int hdrlen = sizeof(struct inet_diag_req);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_inet_diag_req_v2.c b/tests-m32/nlattr_inet_diag_req_v2.c
index 1e09abe..cf19c60 100644
--- a/tests-m32/nlattr_inet_diag_req_v2.c
+++ b/tests-m32/nlattr_inet_diag_req_v2.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -407,7 +407,10 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN +
+			sizeof(struct inet_diag_bc_op) +
+				sizeof(struct inet_diag_hostcond) +
+				sizeof(struct in6_addr) + DEFAULT_STRLEN);
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
 
 	test_inet_diag_bc_op(fd);
diff --git a/tests-m32/nlattr_mdba_mdb_entry.c b/tests-m32/nlattr_mdba_mdb_entry.c
index 124fe1d..61bded2 100644
--- a/tests-m32/nlattr_mdba_mdb_entry.c
+++ b/tests-m32/nlattr_mdba_mdb_entry.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,12 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4
+# ifdef HAVE_STRUCT_BR_MDB_ENTRY
+			- 4 + NLA_HDRLEN * 2 + sizeof(struct nlattr)
+			+ sizeof(struct br_mdb_entry)
+# endif
+			);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_mdba_router_port.c b/tests-m32/nlattr_mdba_router_port.c
index af908cd..a6621ca 100644
--- a/tests-m32/nlattr_mdba_router_port.c
+++ b/tests-m32/nlattr_mdba_router_port.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -87,25 +87,27 @@
 {
 	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 ifindex = ifindex_lo();
-	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
-				  init_br_port_msg, print_br_port_msg,
-				  MDBA_ROUTER_PORT, pattern, ifindex,
-				  printf(IFINDEX_LO_STR));
-
 	const uint8_t type = MDB_RTR_TYPE_DISABLED;
 	static const struct nlattr nla = {
 		.nla_len = NLA_HDRLEN + sizeof(type),
 		.nla_type = MDBA_ROUTER_PATTR_TYPE
 	};
 	char buf[NLMSG_ALIGN(ifindex) + NLA_HDRLEN + sizeof(type)];
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(buf));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_br_port_msg, print_br_port_msg,
+				  MDBA_ROUTER_PORT, pattern, ifindex,
+				  printf(IFINDEX_LO_STR));
+
 	memcpy(buf, &ifindex, sizeof(ifindex));
 	memcpy(buf + NLMSG_ALIGN(ifindex), &nla, sizeof(nla));
 	memcpy(buf + NLMSG_ALIGN(ifindex) + NLA_HDRLEN, &type, sizeof(type));
diff --git a/tests-m32/nlattr_ndmsg.c b/tests-m32/nlattr_ndmsg.c
index 8538a82..aa28a57 100644
--- a/tests-m32/nlattr_ndmsg.c
+++ b/tests-m32/nlattr_ndmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -77,7 +77,8 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ndmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(struct nda_cacheinfo));
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_ndtmsg.c b/tests-m32/nlattr_ndtmsg.c
index d3f1bdb..d120059 100644
--- a/tests-m32/nlattr_ndtmsg.c
+++ b/tests-m32/nlattr_ndtmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -68,7 +68,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ndtmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 11 * 8);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_netconfmsg.c b/tests-m32/nlattr_netconfmsg.c
index 6866adc..f5f5993 100644
--- a/tests-m32/nlattr_netconfmsg.c
+++ b/tests-m32/nlattr_netconfmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,7 +66,7 @@
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 
 	const unsigned int hdrlen = sizeof(struct netconfmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_netlink_diag_msg.c b/tests-m32/nlattr_netlink_diag_msg.c
index 76a2d19..b598899 100644
--- a/tests-m32/nlattr_netlink_diag_msg.c
+++ b/tests-m32/nlattr_netlink_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,7 +66,7 @@
 }
 
 static void
-print_xlong(const unsigned long *p)
+print_xlong(const unsigned long *p, size_t i)
 {
 	printf("%#lx", *p);
 }
@@ -76,27 +76,32 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
-	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	const unsigned int hdrlen = sizeof(struct netlink_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 unsigned long groups[] = {
 		(unsigned long) 0xdeadbeefbadc0dedULL,
 		(unsigned long) 0xdeadbeefbadc0dedULL
 	};
-	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
-			  init_netlink_diag_msg, print_netlink_diag_msg,
-			  NETLINK_DIAG_GROUPS, pattern, groups, print_xlong);
-
 	static const struct netlink_diag_ring ndr = {
 		.ndr_block_size = 0xfabfabdc,
 		.ndr_block_nr = 0xabcdabda,
 		.ndr_frame_size = 0xcbadbafa,
 		.ndr_frame_nr = 0xdbcafadb
 	};
+	static const uint32_t flags =
+		NDIAG_FLAG_CB_RUNNING | NDIAG_FLAG_PKTINFO;
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct netlink_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN +
+					 MAX(sizeof(groups), sizeof(ndr)));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_netlink_diag_msg, print_netlink_diag_msg,
+			  NETLINK_DIAG_GROUPS, pattern, groups, print_xlong);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_netlink_diag_msg, print_netlink_diag_msg,
 			   NETLINK_DIAG_RX_RING, pattern, ndr,
@@ -106,8 +111,6 @@
 			   PRINT_FIELD_U(", ", ndr, ndr_frame_nr);
 			   printf("}"));
 
-	static const uint32_t flags =
-		NDIAG_FLAG_CB_RUNNING | NDIAG_FLAG_PKTINFO;
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_netlink_diag_msg, print_netlink_diag_msg,
 			   NETLINK_DIAG_FLAGS, pattern, flags,
diff --git a/tests-m32/nlattr_nlmsgerr.c b/tests-m32/nlattr_nlmsgerr.c
index 837283c..073fde2 100644
--- a/tests-m32/nlattr_nlmsgerr.c
+++ b/tests-m32/nlattr_nlmsgerr.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -69,11 +69,13 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	static const uint8_t cookie[] = { 0xab, 0xfe };
+
 	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
 	const unsigned int hdrlen = sizeof(struct nlmsgerr);
-	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+			NLA_HDRLEN + sizeof(cookie));
 
-	static const uint8_t cookie[] = { 0xab, 0xfe };
 	TEST_NLATTR(fd, nlh0, hdrlen,
 		    init_nlmsgerr, print_nlmsgerr,
 		    NLMSGERR_ATTR_COOKIE,
diff --git a/tests-m32/nlattr_packet_diag_msg.c b/tests-m32/nlattr_packet_diag_msg.c
index 4211e20..016d052 100644
--- a/tests-m32/nlattr_packet_diag_msg.c
+++ b/tests-m32/nlattr_packet_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,7 +67,7 @@
 }
 
 static void
-print_packet_diag_mclist(const struct packet_diag_mclist *const dml)
+print_packet_diag_mclist(const struct packet_diag_mclist *const dml, size_t i)
 {
 	printf("{pdmc_index=" IFINDEX_LO_STR);
 	PRINT_FIELD_U(", ", *dml, pdmc_count);
@@ -84,7 +84,7 @@
 };
 
 static void
-print_sock_filter(const struct sock_filter *const f)
+print_sock_filter(const struct sock_filter *const f, size_t i)
 {
 	if (f == filter)
 		printf("BPF_STMT(BPF_LD|BPF_B|BPF_ABS"
@@ -98,13 +98,6 @@
 {
 	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,
@@ -113,16 +106,6 @@
 		.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(),
@@ -139,11 +122,6 @@
 			.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,
@@ -153,6 +131,30 @@
 		.pdr_sizeof_priv = 0xfeadeacd,
 		.pdr_features = 0xadebadea
 	};
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct packet_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN + sizeof(dml));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	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}"));
+
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_packet_diag_msg, print_packet_diag_msg,
+			  PACKET_DIAG_MCLIST, pattern, dml,
+			  print_packet_diag_mclist);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_packet_diag_msg, print_packet_diag_msg,
 			   PACKET_DIAG_RX_RING, pattern, pdr,
diff --git a/tests-m32/nlattr_rtgenmsg.c b/tests-m32/nlattr_rtgenmsg.c
index ceb061d..bac21ef 100644
--- a/tests-m32/nlattr_rtgenmsg.c
+++ b/tests-m32/nlattr_rtgenmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,13 +66,14 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct rtgenmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(nla_type_str));
 
 	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,
diff --git a/tests-m32/nlattr_rtmsg.c b/tests-m32/nlattr_rtmsg.c
index 5f29f0c..db02929 100644
--- a/tests-m32/nlattr_rtmsg.c
+++ b/tests-m32/nlattr_rtmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -81,13 +81,14 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct rtmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(nla_type_str));
 
 	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,
diff --git a/tests-m32/nlattr_smc_diag_msg.c b/tests-m32/nlattr_smc_diag_msg.c
index a06ad62..2e65ebd 100644
--- a/tests-m32/nlattr_smc_diag_msg.c
+++ b/tests-m32/nlattr_smc_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -97,13 +97,6 @@
 {
 	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,
@@ -149,6 +142,25 @@
 			.count = 0xcdedbad7
 		}
 	};
+	static const struct smc_diag_lgrinfo linfo = {
+		.lnk[0] = {
+			.link_id = 0xaf,
+			.ibport = 0xfa,
+			.ibname = "123",
+			.gid = "456",
+			.peer_gid = "789"
+		},
+		.role = SMC_CLNT
+	};
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct smc_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN +
+					 MAX(sizeof(cinfo), sizeof(linfo)));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
 
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_smc_diag_msg, print_smc_diag_msg,
@@ -170,16 +182,6 @@
 			   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,
diff --git a/tests-m32/nlattr_tc_stats.c b/tests-m32/nlattr_tc_stats.c
index dd76cc7..8003ed3 100644
--- a/tests-m32/nlattr_tc_stats.c
+++ b/tests-m32/nlattr_tc_stats.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -77,7 +77,7 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 8 * 5);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_tca_stab.c b/tests-m32/nlattr_tca_stab.c
index de6d356..9889050 100644
--- a/tests-m32/nlattr_tca_stab.c
+++ b/tests-m32/nlattr_tca_stab.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,8 +36,8 @@
 #ifndef TCA_STAB
 # define TCA_STAB 8
 #endif
-#ifndef TCA_STAB_DATA
-# define TCA_STAB_DATA 2
+#if !HAVE_DECL_TCA_STAB_DATA
+enum { TCA_STAB_DATA = 2 };
 #endif
 
 const unsigned int hdrlen = sizeof(struct tcmsg);
@@ -76,7 +76,7 @@
 }
 
 static void
-print_uint16(const uint16_t *p)
+print_uint16(const uint16_t *p, size_t idx)
 {
 	printf("%u", *p);
 }
@@ -87,7 +87,11 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4
+#ifdef HAVE_STRUCT_TC_SIZESPEC
+			- 4 + sizeof(struct tc_sizespec)
+#endif
+			);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_tcamsg.c b/tests-m32/nlattr_tcamsg.c
index 7f61153..43715d2 100644
--- a/tests-m32/nlattr_tcamsg.c
+++ b/tests-m32/nlattr_tcamsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -62,7 +62,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct tcamsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_tcmsg.c b/tests-m32/nlattr_tcmsg.c
index 32ce479..da88a45 100644
--- a/tests-m32/nlattr_tcmsg.c
+++ b/tests-m32/nlattr_tcmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -68,7 +68,8 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct tcmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(struct tc_stats));
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-m32/nlattr_unix_diag_msg.c b/tests-m32/nlattr_unix_diag_msg.c
index 2295404..180b8cd 100644
--- a/tests-m32/nlattr_unix_diag_msg.c
+++ b/tests-m32/nlattr_unix_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -65,7 +65,7 @@
 }
 
 static void
-print_uint(const unsigned int *p)
+print_uint(const unsigned int *p, size_t i)
 {
 	printf("%u", *p);
 }
@@ -75,17 +75,24 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
-	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	const unsigned int hdrlen = sizeof(struct unix_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 unix_diag_vfs uv = {
 		.udiag_vfs_dev = 0xabcddafa,
 		.udiag_vfs_ino = 0xbafabcda
 	};
+	static const struct unix_diag_rqlen rql = {
+		.udiag_rqueue = 0xfabdcdad,
+		.udiag_wqueue = 0xbacdadcf
+	};
+	static const uint32_t inode[] = { 0xadbcadbc, 0xfabdcdac };
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct unix_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN + sizeof(inode));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_unix_diag_msg, print_unix_diag_msg,
 			   UNIX_DIAG_VFS, pattern, uv,
@@ -95,10 +102,6 @@
 			   PRINT_FIELD_U(", ", uv, udiag_vfs_ino);
 			   printf("}"));
 
-	static const struct unix_diag_rqlen rql = {
-		.udiag_rqueue = 0xfabdcdad,
-		.udiag_wqueue = 0xbacdadcf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_unix_diag_msg, print_unix_diag_msg,
 			   UNIX_DIAG_RQLEN, pattern, rql,
@@ -106,7 +109,6 @@
 			   PRINT_FIELD_U(", ", rql, udiag_wqueue);
 			   printf("}"));
 
-	static const uint32_t inode[] = { 0xadbcadbc, 0xfabdcdac };
 	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
 			  init_unix_diag_msg, print_unix_diag_msg,
 			  UNIX_DIAG_ICONS, pattern, inode, print_uint);
diff --git a/tests-m32/nsyscalls.c b/tests-m32/nsyscalls.c
index 9f74867..681fb31 100644
--- a/tests-m32/nsyscalls.c
+++ b/tests-m32/nsyscalls.c
@@ -86,14 +86,14 @@
 	       a[0], a[1], a[2], a[3], a[4], a[5], rc);
 #else
 	printf("syscall_%#lx(%#llx, %#llx, %#llx, %#llx, %#llx, %#llx)"
-	       " = %ld (errno %d)\n", nr | SYSCALL_BIT,
+	       " = %ld ENOSYS (%m)\n", nr | SYSCALL_BIT,
 	       (unsigned long long) a[0],
 	       (unsigned long long) a[1],
 	       (unsigned long long) a[2],
 	       (unsigned long long) a[3],
 	       (unsigned long long) a[4],
 	       (unsigned long long) a[5],
-	       rc, errno);
+	       rc);
 #endif
 }
 
diff --git a/tests-m32/old_mmap-Xabbrev.c b/tests-m32/old_mmap-Xabbrev.c
new file mode 100644
index 0000000..033503c
--- /dev/null
+++ b/tests-m32/old_mmap-Xabbrev.c
@@ -0,0 +1 @@
+#include "old_mmap.c"
diff --git a/tests-m32/old_mmap-Xabbrev.gen.test b/tests-m32/old_mmap-Xabbrev.gen.test
new file mode 100755
index 0000000..0ee5608
--- /dev/null
+++ b/tests-m32/old_mmap-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-Xabbrev -a11 -e trace=mmap -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -Xabbrev
diff --git a/tests-m32/old_mmap-Xraw.c b/tests-m32/old_mmap-Xraw.c
new file mode 100644
index 0000000..06de40b
--- /dev/null
+++ b/tests-m32/old_mmap-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "old_mmap.c"
diff --git a/tests-m32/old_mmap-Xraw.gen.test b/tests-m32/old_mmap-Xraw.gen.test
new file mode 100755
index 0000000..6d7d3cf
--- /dev/null
+++ b/tests-m32/old_mmap-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-Xraw -a11 -e trace=mmap -Xraw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -Xraw
diff --git a/tests-m32/old_mmap-Xverbose.c b/tests-m32/old_mmap-Xverbose.c
new file mode 100644
index 0000000..b141fec
--- /dev/null
+++ b/tests-m32/old_mmap-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "old_mmap.c"
diff --git a/tests-m32/old_mmap-Xverbose.gen.test b/tests-m32/old_mmap-Xverbose.gen.test
new file mode 100755
index 0000000..6534a93
--- /dev/null
+++ b/tests-m32/old_mmap-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-Xverbose -a11 -e trace=mmap -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -Xverbose
diff --git a/tests-m32/old_mmap.c b/tests-m32/old_mmap.c
index 35ec428..07d572c 100644
--- a/tests-m32/old_mmap.c
+++ b/tests-m32/old_mmap.c
@@ -79,17 +79,41 @@
 	void *args = tail_memdup(args1_c, sizeof(args1_c));
 
 	rc = syscall(__NR_mmap, args);
+# if XLAT_RAW
+	printf("mmap(%#lx, %lu, %#x, %#x|%#x, %d, %#lx) = %ld %s (%m)\n",
+	       args1_c[0], args1_c[1], PROT_READ|PROT_EXEC, MAP_FILE, MAP_FIXED,
+	       (int) args1_c[4], args1_c[5], rc, errno2name());
+# elif XLAT_VERBOSE
+	printf("mmap(%#lx, %lu, %#x /* PROT_READ|PROT_EXEC */"
+	       ", %#x /* MAP_FILE */|%#x /* MAP_FIXED */"
+	       ", %d, %#lx) = %ld %s (%m)\n",
+	       args1_c[0], args1_c[1], PROT_READ|PROT_EXEC, MAP_FILE, MAP_FIXED,
+	       (int) args1_c[4], args1_c[5], rc, errno2name());
+# else
 	printf("mmap(%#lx, %lu, PROT_READ|PROT_EXEC, MAP_FILE|MAP_FIXED"
 	       ", %d, %#lx) = %ld %s (%m)\n",
 	       args1_c[0], args1_c[1], (int) args1_c[4], args1_c[5],
 	       rc, errno2name());
+# endif
 
 	memcpy(args, args2_c, sizeof(args2_c));
 	rc = syscall(__NR_mmap, args);
 # ifndef PATH_TRACING
+#  if XLAT_RAW
+	printf("mmap(NULL, %lu, %#x, %#x|%#x, %d, %#lx) = %#lx\n",
+	       args2_c[1], PROT_READ|PROT_WRITE, MAP_PRIVATE, MAP_ANONYMOUS,
+	       (int) args2_c[4], args2_c[5], rc);
+#  elif XLAT_VERBOSE
+	printf("mmap(NULL, %lu, %#x /* PROT_READ|PROT_WRITE */"
+	       ", %#x /* MAP_PRIVATE */|%#x /* MAP_ANONYMOUS */"
+	       ", %d, %#lx) = %#lx\n",
+	       args2_c[1], PROT_READ|PROT_WRITE, MAP_PRIVATE, MAP_ANONYMOUS,
+	       (int) args2_c[4], args2_c[5], rc);
+#  else
 	printf("mmap(NULL, %lu, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS"
 	       ", %d, %#lx) = %#lx\n",
 	       args2_c[1], (int) args2_c[4], args2_c[5], rc);
+#  endif
 # endif
 
 	void *addr = (void *) rc;
diff --git a/tests-m32/opipe.test b/tests-m32/opipe.test
index f622045..db449bb 100755
--- a/tests-m32/opipe.test
+++ b/tests-m32/opipe.test
@@ -5,7 +5,7 @@
 . "${srcdir=.}/init.sh"
 
 check_prog grep
-run_prog grep chdir $srcdir/umovestr.expected > "$EXP"
+grep chdir $srcdir/umovestr.expected > "$EXP"
 run_prog ../umovestr
 
 $STRACE -o "|cat > $LOG && $SLEEP_A_BIT && grep chdir < $LOG > $OUT" -e chdir $args ||
diff --git a/tests-m32/options-syntax.test b/tests-m32/options-syntax.test
index af7002b..1a290d0 100755
--- a/tests-m32/options-syntax.test
+++ b/tests-m32/options-syntax.test
@@ -56,6 +56,40 @@
 check_h "invalid -s argument: '-42'" -s -42
 check_h "invalid -s argument: '1073741824'" -s 1073741824
 check_h "invalid -I argument: '5'" -I 5
+check_h "invalid -X argument: 'test'" -Xtest
+check_h "invalid -X argument: 'a'" -Xa
+check_h "invalid -X argument: 'abbreviated'" -X abbreviated
+
+check_h "incorrect personality designator '' in qualification 'getcwd@'" -e trace=getcwd@
+check_h "incorrect personality designator '42' in qualification 'getcwd@42'" -e trace=getcwd@42
+check_h "incorrect personality designator '42' in qualification 'getcwd@42'" -e trace=gettid,getcwd@42
+check_h "incorrect personality designator '42' in qualification '23@42'" -e trace=23@42,123
+
+check_e "invalid system call '/getcwd@ohmy'" -e trace=/getcwd@ohmy
+
+case "$STRACE_NATIVE_ARCH" in
+x86_64)
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@64
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@32
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@x32
+	;;
+x32)
+	check_h "incorrect personality designator '64' in qualification 'getcwd@64'" -e trace=getcwd@64
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@32
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@x32
+	;;
+aarch64|powerpc64|riscv|s390x|sparc64|tile)
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@64
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@32
+	check_h "incorrect personality designator 'x32' in qualification 'getcwd@x32'" -e trace=getcwd@x32
+	;;
+*)
+	pers="$((SIZEOF_LONG * 8))"
+	inv_pers="$((96 - pers))"
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@"$pers"
+	check_h "incorrect personality designator '$inv_pers' in qualification 'getcwd@$inv_pers'" -e trace=getcwd@"$inv_pers"
+	check_h "incorrect personality designator 'x32' in qualification 'getcwd@x32'" -e trace=getcwd@x32
+esac
 
 ../zeroargc "$STRACE_EXE" /bin/true 2> "$LOG" &&
 	dump_log_and_fail_with \
diff --git a/tests-m32/personality-Xabbrev.c b/tests-m32/personality-Xabbrev.c
new file mode 100644
index 0000000..2e993dc
--- /dev/null
+++ b/tests-m32/personality-Xabbrev.c
@@ -0,0 +1 @@
+#include "personality.c"
diff --git a/tests-m32/personality-Xabbrev.gen.test b/tests-m32/personality-Xabbrev.gen.test
new file mode 100755
index 0000000..df93e6c
--- /dev/null
+++ b/tests-m32/personality-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (personality-Xabbrev +personality.test -Xabbrev); do not edit.
+set -- -Xabbrev
+. "${srcdir=.}/personality.test"
diff --git a/tests-m32/personality-Xraw.c b/tests-m32/personality-Xraw.c
new file mode 100644
index 0000000..59702f8
--- /dev/null
+++ b/tests-m32/personality-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "personality.c"
diff --git a/tests-m32/personality-Xraw.gen.test b/tests-m32/personality-Xraw.gen.test
new file mode 100755
index 0000000..559f0f3
--- /dev/null
+++ b/tests-m32/personality-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (personality-Xraw +personality.test -a15 -Xraw); do not edit.
+set -- -a15 -Xraw
+. "${srcdir=.}/personality.test"
diff --git a/tests-m32/personality-Xverbose.c b/tests-m32/personality-Xverbose.c
new file mode 100644
index 0000000..545ebe7
--- /dev/null
+++ b/tests-m32/personality-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "personality.c"
diff --git a/tests-m32/personality-Xverbose.gen.test b/tests-m32/personality-Xverbose.gen.test
new file mode 100755
index 0000000..b6ce209
--- /dev/null
+++ b/tests-m32/personality-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (personality-Xverbose +personality.test -Xverbose); do not edit.
+set -- -Xverbose
+. "${srcdir=.}/personality.test"
diff --git a/tests-m32/personality.c b/tests-m32/personality.c
index 7a279a1..5d84807 100644
--- a/tests-m32/personality.c
+++ b/tests-m32/personality.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,51 +29,76 @@
 #include <stdio.h>
 #include <sys/personality.h>
 
+#if XLAT_RAW
+# define linux_type_str	"0"
+# define good_type_str	"0x6"
+# define bad_type_str	"0x1f"
+# define good_flags_str	"0x7000000"
+# define bad_flags_str	"0x10000"
+# define good_bad_flags_str	"0x7010000"
+#elif XLAT_VERBOSE
+# define linux_type_str	"0 /\\* PER_LINUX \\*/"
+# define good_type_str	"0x6 /\\* PER_BSD \\*/"
+# define bad_type_str	"0x1f /\\* PER_\\?\\?\\? \\*/"
+# define good_flags_str	\
+	"0x7000000 /\\* SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS \\*/"
+# define bad_flags_str	"0x10000"
+# define good_bad_flags_str	\
+	"0x7010000 /\\* SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS" \
+		"\\|0x10000 \\*/"
+#else
+# define linux_type_str	"PER_LINUX"
+# define good_type_str	"PER_BSD"
+# define bad_type_str	"0x1f /\\* PER_\\?\\?\\? \\*/"
+# define good_flags_str	"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS"
+# define bad_flags_str	"0x10000"
+# define good_bad_flags_str \
+	"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\|0x10000"
+#endif
+
 int main(void)
 {
 	const unsigned int good_type = PER_BSD;
-	const char *good_type_str = "PER_BSD";
 
 	const unsigned int bad_type = 0x1f;
-	const char *bad_type_str = "0x1f /\\* PER_\\?\\?\\? \\*/";
 
 	const unsigned int good_flags =
 		SHORT_INODE | WHOLE_SECONDS | STICKY_TIMEOUTS;
-	const char *good_flags_str =
-		"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS";
 
 	const unsigned int bad_flags = 0x10000;
-	const char *bad_flags_str = "0x10000";
 
 	const unsigned int saved_pers = personality(0xffffffff);
 	printf("personality\\(0xffffffff\\) = %#x \\([^)]*\\)\n", saved_pers);
 
 	/* PER_LINUX */
 	personality(PER_LINUX);
-	printf("personality\\(PER_LINUX\\) = %#x \\([^)]*\\)\n", saved_pers);
+	printf("personality\\(%s\\) = %#x \\([^)]*\\)\n",
+	       linux_type_str, saved_pers);
 
 	personality(0xffffffff);
-	puts("personality\\(0xffffffff\\) = 0 \\(PER_LINUX\\)");
+	printf("personality\\(0xffffffff\\) = 0 \\(%s\\)\n", linux_type_str);
 
 	personality(good_flags);
-	printf("personality\\(PER_LINUX\\|%s\\) = 0 \\(PER_LINUX\\)\n",
-	       good_flags_str);
+	printf("personality\\(%s\\|%s\\) = 0 \\(%s\\)\n",
+	       linux_type_str, good_flags_str, linux_type_str);
 
 	personality(bad_flags);
-	printf("personality\\(PER_LINUX\\|%s\\)"
-	       " = %#x \\(PER_LINUX\\|%s\\)\n",
-	       bad_flags_str, good_flags, good_flags_str);
+	printf("personality\\(%s\\|%s\\)"
+	       " = %#x \\(%s\\|%s\\)\n",
+	       linux_type_str, bad_flags_str,
+	       good_flags, linux_type_str, good_flags_str);
 
 	personality(good_flags | bad_flags);
-	printf("personality\\(PER_LINUX\\|%s\\|%s\\)"
-	       " = %#x \\(PER_LINUX\\|%s\\)\n",
-	       good_flags_str, bad_flags_str, bad_flags, bad_flags_str);
+	printf("personality\\(%s\\|%s\\)"
+	       " = %#x \\(%s\\|%s\\)\n",
+	       linux_type_str, good_bad_flags_str,
+	       bad_flags, linux_type_str, bad_flags_str);
 
 	/* another valid type */
 	personality(good_type);
-	printf("personality\\(%s\\) = %#x \\(PER_LINUX\\|%s\\|%s\\)\n",
+	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\)\n",
 	       good_type_str, good_flags | bad_flags,
-	       good_flags_str, bad_flags_str);
+	       linux_type_str, good_bad_flags_str);
 
 	personality(good_type | good_flags);
 	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\)\n",
@@ -84,16 +110,16 @@
 	       good_type_str, good_flags_str);
 
 	personality(good_type | good_flags | bad_flags);
-	printf("personality\\(%s\\|%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
-	       good_type_str, good_flags_str, bad_flags_str,
+	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
+	       good_type_str, good_bad_flags_str,
 	       good_type | bad_flags,
 	       good_type_str, bad_flags_str);
 
 	/* invalid type */
 	personality(bad_type);
-	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\|%s\\)\n",
+	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\)\n",
 	       bad_type_str, good_type | good_flags | bad_flags,
-	       good_type_str, good_flags_str, bad_flags_str);
+	       good_type_str, good_bad_flags_str);
 
 	personality(bad_type | good_flags);
 	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\)\n",
@@ -105,14 +131,14 @@
 	       bad_type_str, good_flags_str);
 
 	personality(bad_type | good_flags | bad_flags);
-	printf("personality\\(%s\\|%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
-	       bad_type_str, good_flags_str, bad_flags_str,
+	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
+	       bad_type_str, good_bad_flags_str,
 	       bad_type | bad_flags, bad_type_str, bad_flags_str);
 
 	personality(saved_pers);
-	printf("personality\\([^)]*\\) = %#x \\(%s\\|%s\\|%s\\)\n",
+	printf("personality\\([^)]*\\) = %#x \\(%s\\|%s\\)\n",
 	       bad_type | good_flags | bad_flags,
-	       bad_type_str, good_flags_str, bad_flags_str);
+	       bad_type_str, good_bad_flags_str);
 
 	return 0;
 }
diff --git a/tests-m32/personality.test b/tests-m32/personality.test
index ab2faf4..d279bd1 100755
--- a/tests-m32/personality.test
+++ b/tests-m32/personality.test
@@ -5,5 +5,5 @@
 . "${srcdir=.}/init.sh"
 
 run_prog > /dev/null
-run_strace -a20 -epersonality $args > "$EXP"
+run_strace -a20 -epersonality "$@" $args > "$EXP"
 match_grep "$LOG" "$EXP"
diff --git a/tests-m32/poll.c b/tests-m32/poll.c
index c5930a3..9624bd3 100644
--- a/tests-m32/poll.c
+++ b/tests-m32/poll.c
@@ -95,7 +95,7 @@
 		if (i)
 			tprintf(", ");
 		if (i >= valid) {
-			tprintf("%p", &pfd[i]);
+			tprintf("... /* %p */", &pfd[i]);
 			break;
 		}
 		if (i >= abbrev) {
diff --git a/tests-m32/prctl-spec-inject.c b/tests-m32/prctl-spec-inject.c
new file mode 100644
index 0000000..593c3a6
--- /dev/null
+++ b/tests-m32/prctl-spec-inject.c
@@ -0,0 +1,153 @@
+/*
+ * Check decoding of PR_SET_SPECULATION_CTRL and PR_GET_SPECULATION_CTRL
+ * prctl operations.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <asm/unistd.h>
+
+#ifdef __NR_prctl
+
+# include <stdio.h>
+# include <stdlib.h>
+# include <unistd.h>
+# include <linux/prctl.h>
+
+static long injected_val;
+
+long
+do_prctl(kernel_ulong_t cmd, kernel_ulong_t arg2, kernel_ulong_t arg3)
+{
+	long rc = syscall(__NR_prctl, cmd, arg2, arg3);
+
+	if (rc != injected_val)
+		error_msg_and_fail("Return value (%ld) differs from expected "
+				   "injected value (%ld)",
+				   rc, injected_val);
+
+	return rc;
+}
+
+int
+main(int argc, char **argv)
+{
+	static const kernel_ulong_t bogus_arg2 =
+		(kernel_ulong_t) 0xdeadfacebadc0dedULL;
+	static const kernel_ulong_t bogus_arg3 =
+		(kernel_ulong_t) 0xdecafeedbeefda7eULL;
+	static const struct {
+		long arg;
+		const char *str;
+	} get_strs[] = {
+		{ -1, "" },
+		{ 0, " (PR_SPEC_NOT_AFFECTED)" },
+		{ 1, " (PR_SPEC_PRCTL)" },
+		{ 3, " (PR_SPEC_PRCTL|PR_SPEC_ENABLE)" },
+		{ 8, " (PR_SPEC_FORCE_DISABLE)" },
+		{ 16, " (0x10)" },
+		{ 42, " (PR_SPEC_ENABLE|PR_SPEC_FORCE_DISABLE|0x20)" },
+	};
+	static const struct {
+		kernel_ulong_t arg;
+		const char *str;
+	} set_strs[] = {
+		{ 0, "0 /* PR_SPEC_??? */" },
+		{ 1, "0x1 /* PR_SPEC_??? */" },
+		{ 2, "PR_SPEC_ENABLE" },
+		{ 3, "0x3 /* PR_SPEC_??? */" },
+		{ 8, "PR_SPEC_FORCE_DISABLE" },
+		{ 16, "0x10 /* PR_SPEC_??? */" },
+		{ (kernel_ulong_t) 0xdecafeedbeefda7eULL, "0x"
+# if SIZEOF_KERNEL_LONG_T == 8
+			"decafeed"
+# endif
+			"beefda7e /* PR_SPEC_??? */" },
+	};
+
+	long rc;
+	const char *str = NULL;
+
+	if (argc < 2)
+		error_msg_and_fail("Usage: %s INJECTED_VAL", argv[0]);
+
+	injected_val = strtol(argv[1], NULL, 0);
+
+	/* PR_GET_SPECULATION_CTRL */
+	rc = do_prctl(52, 1, bogus_arg3);
+	printf("prctl(PR_GET_SPECULATION_CTRL, 0x1 /* PR_SPEC_??? */) "
+	       "= %s (INJECTED)\n", sprintrc(rc));
+
+	rc = do_prctl(52, bogus_arg2, bogus_arg3);
+	printf("prctl(PR_GET_SPECULATION_CTRL, %#llx /* PR_SPEC_??? */) "
+	       "= %s (INJECTED)\n",
+	       (unsigned long long) bogus_arg2, sprintrc(rc));
+
+	rc = do_prctl(52, 0, bogus_arg3);
+
+	for (unsigned i = 0; i < ARRAY_SIZE(get_strs); i++) {
+		if (get_strs[i].arg == rc) {
+			str = get_strs[i].str;
+			break;
+		}
+	}
+	if (!str)
+		error_msg_and_fail("Unknown return value: %ld", rc);
+
+	printf("prctl(PR_GET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS) "
+	       "= %s%s (INJECTED)\n", sprintrc(rc), str);
+
+
+	/* PR_SET_SPECULATION_CTRL*/
+	rc = do_prctl(53, 1, bogus_arg3);
+	printf("prctl(PR_SET_SPECULATION_CTRL, 0x1 /* PR_SPEC_??? */, %#llx) "
+	       "= %s (INJECTED)\n",
+	       (unsigned long long) bogus_arg3, sprintrc(rc));
+
+	rc = do_prctl(53, bogus_arg2, bogus_arg3);
+	printf("prctl(PR_SET_SPECULATION_CTRL, %#llx /* PR_SPEC_??? */, %#llx) "
+	       "= %s (INJECTED)\n",
+	       (unsigned long long) bogus_arg2,
+	       (unsigned long long) bogus_arg3,
+	       sprintrc(rc));
+
+	for (unsigned i = 0; i < ARRAY_SIZE(set_strs); i++) {
+		rc = do_prctl(53, 0, set_strs[i].arg);
+		printf("prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS"
+		       ", %s) = %s (INJECTED)\n",
+		       set_strs[i].str, sprintrc(rc));
+	}
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_prctl")
+
+#endif
diff --git a/tests-m32/prctl-spec-inject.test b/tests-m32/prctl-spec-inject.test
new file mode 100755
index 0000000..c8fbe97
--- /dev/null
+++ b/tests-m32/prctl-spec-inject.test
@@ -0,0 +1,55 @@
+#!/bin/sh -efu
+#
+# Check decoding of PR_SET_SPECULATION_CTRL and PR_GET_SPECULATION_CTRL
+# prctl operations.
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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"
+
+fault_args='-a53 -e trace=prctl -e inject=prctl:'
+prog="../$NAME"
+
+test_run_rval()
+{
+	local run rval injexpr
+	run="$1"; shift
+	rval="$1"; shift
+	injexpr="$1"; shift
+
+	run_strace $fault_args$injexpr $prog $rval > "$EXP"
+	LC_ALL=C grep -Ev '^prctl\(PR_[GS]ET_([^S][^P][^E][^C]])' \
+		< "$LOG" > "$OUT"
+	match_diff "$OUT" "$EXP"
+}
+
+test_run_rval 0 -1 "error=ENOTTY"
+test_run_rval 1 0 "retval=0"
+test_run_rval 2 1 "retval=1"
+test_run_rval 3 3 "retval=3"
+test_run_rval 4 8 "retval=8"
+test_run_rval 5 16 "retval=16"
+test_run_rval 6 42 "retval=42"
diff --git a/tests-m32/preadv-pwritev.c b/tests-m32/preadv-pwritev.c
index 44ed23a..57a08ad 100644
--- a/tests-m32/preadv-pwritev.c
+++ b/tests-m32/preadv-pwritev.c
@@ -2,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,7 @@
 	tprintf("pwritev(1, [], 0, 0) = 0\n");
 
 	rc = pwritev(1, w_iov + ARRAY_SIZE(w_iov_) - 1, 2, 0);
-	tprintf("pwritev(1, [{iov_base=\"%s\", iov_len=%u}, %p], 2, 0)"
+	tprintf("pwritev(1, [{iov_base=\"%s\", iov_len=%u}, ... /* %p */], 2, 0)"
 		" = %ld %s (%m)\n",
 		w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_),
 		rc, errno2name());
diff --git a/tests-m32/preadv2-pwritev2.c b/tests-m32/preadv2-pwritev2.c
index 89f37dd..7874b7a 100644
--- a/tests-m32/preadv2-pwritev2.c
+++ b/tests-m32/preadv2-pwritev2.c
@@ -2,7 +2,7 @@
  * Check decoding of preadv2 and pwritev2 syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -104,7 +104,7 @@
 	tprintf("pwritev2(1, [], 0, 0, 0) = 0\n");
 
 	rc = pw(1, w_iov + ARRAY_SIZE(w_iov_) - 1, 2, 0);
-	tprintf("pwritev2(1, [{iov_base=\"%s\", iov_len=%u}, %p], 2, 0, 0)"
+	tprintf("pwritev2(1, [{iov_base=\"%s\", iov_len=%u}, ... /* %p */], 2, 0, 0)"
 		" = %ld %s (%m)\n",
 		w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_),
 		rc, errno2name());
diff --git a/tests-m32/print_quoted_string.c b/tests-m32/print_quoted_string.c
index 3ca5631..a58b69a 100644
--- a/tests-m32/print_quoted_string.c
+++ b/tests-m32/print_quoted_string.c
@@ -33,6 +33,18 @@
 	}
 }
 
+void
+print_quoted_stringn(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);
+		printf("...");
+	}
+}
+
 static void
 print_octal(unsigned char c, char next)
 {
diff --git a/tests-m32/process_vm_readv_writev.c b/tests-m32/process_vm_readv_writev.c
index 5ee801b..328dc9f 100644
--- a/tests-m32/process_vm_readv_writev.c
+++ b/tests-m32/process_vm_readv_writev.c
@@ -2,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -135,7 +135,7 @@
 	}
 
 	if (arg->addr_term)
-		printf(", %p", iov + arg->count);
+		printf(", ... /* %p */", iov + arg->count);
 
 	printf("]");
 }
diff --git a/tests-m32/ptrace.c b/tests-m32/ptrace.c
index 5c09fa3..2ca9ceb 100644
--- a/tests-m32/ptrace.c
+++ b/tests-m32/ptrace.c
@@ -60,10 +60,11 @@
 	printf("ptrace(PTRACE_PEEKSIGINFO, %u, NULL, %#lx) = %s\n",
 	       (unsigned) pid, bad_request, errstr);
 
-	struct {
+	struct psi {
 		unsigned long long off;
 		unsigned int flags, nr;
-	} *const psi = tail_alloc(sizeof(*psi));
+	};
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct psi, psi);
 
 	psi->off = 0xdeadbeeffacefeedULL;
 	psi->flags = 1;
@@ -179,7 +180,7 @@
 	const unsigned long pid =
 		(unsigned long) 0xdefaced00000000ULL | (unsigned) getpid();
 
-	uint64_t *filter_off = tail_alloc(sizeof(*filter_off));
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, filter_off);
 
 	const unsigned int sigset_size = get_sigset_size();
 
diff --git a/tests-m32/pure_executables.am b/tests-m32/pure_executables.am
index bbb3ad9..c65f4ca 100644
--- a/tests-m32/pure_executables.am
+++ b/tests-m32/pure_executables.am
@@ -8,9 +8,14 @@
   add_key \
   adjtimex \
   aio \
+  aio_pgetevents \
   alarm \
   bpf \
   bpf-v \
+  bpf-obj_get_info_by_fd \
+  bpf-obj_get_info_by_fd-v \
+  bpf-obj_get_info_by_fd-prog \
+  bpf-obj_get_info_by_fd-prog-v \
   brk \
   btrfs \
   caps \
@@ -43,6 +48,9 @@
   fallocate \
   fanotify_init \
   fanotify_mark \
+  fanotify_mark-Xabbrev \
+  fanotify_mark-Xraw \
+  fanotify_mark-Xverbose \
   fchdir \
   fchmod \
   fchmodat \
@@ -105,10 +113,13 @@
   ioctl_block \
   ioctl_dm \
   ioctl_evdev \
+  ioctl_inotify \
   ioctl_kvm_run \
   ioctl_loop \
   ioctl_mtd \
   ioctl_rtc \
+  ioctl_perf \
+  ioctl_ptp \
   ioctl_scsi \
   ioctl_sg_io_v3 \
   ioctl_sg_io_v4 \
@@ -121,15 +132,30 @@
   ip_mreq \
   ipc \
   ipc_msg \
+  ipc_msg-Xabbrev \
+  ipc_msg-Xraw \
+  ipc_msg-Xverbose \
   ipc_msgbuf \
+  ipc_msgbuf-Xabbrev \
+  ipc_msgbuf-Xraw \
+  ipc_msgbuf-Xverbose \
   ipc_sem \
+  ipc_sem-Xabbrev \
+  ipc_sem-Xraw \
+  ipc_sem-Xverbose \
   ipc_shm \
+  ipc_shm-Xabbrev \
+  ipc_shm-Xraw \
+  ipc_shm-Xverbose \
   kcmp \
   kcmp-y \
   kern_features \
   kexec_file_load \
   kexec_load \
   keyctl \
+  keyctl-Xabbrev \
+  keyctl-Xraw \
+  keyctl-Xverbose \
   kill \
   lchown \
   lchown32 \
@@ -154,11 +180,20 @@
   mlock2 \
   mlockall \
   mmap \
+  mmap-Xabbrev \
+  mmap-Xraw \
+  mmap-Xverbose \
   mmap64 \
+  mmap64-Xabbrev \
+  mmap64-Xraw \
+  mmap64-Xverbose \
   mmsg \
   mmsg_name \
   modify_ldt \
   mount \
+  mount-Xabbrev \
+  mount-Xraw \
+  mount-Xverbose \
   move_pages \
   mq \
   mq_sendrecv \
@@ -205,7 +240,9 @@
   nlattr_ifaddrlblmsg \
   nlattr_ifaddrmsg \
   nlattr_ifinfomsg \
+  nlattr_ifla_af_spec \
   nlattr_ifla_brport \
+  nlattr_ifla_linkinfo \
   nlattr_ifla_port \
   nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
@@ -230,6 +267,9 @@
   old_mmap \
   old_mmap-P \
   old_mmap-v-none \
+  old_mmap-Xabbrev \
+  old_mmap-Xraw \
+  old_mmap-Xverbose \
   oldfstat \
   oldlstat \
   oldselect \
@@ -241,6 +281,9 @@
   pause \
   perf_event_open \
   personality \
+  personality-Xabbrev \
+  personality-Xraw \
+  personality-Xverbose \
   pipe \
   pipe2 \
   pkey_alloc \
@@ -357,7 +400,13 @@
   sigsuspend \
   so_linger \
   so_peercred \
+  so_peercred-Xabbrev \
+  so_peercred-Xraw \
+  so_peercred-Xverbose \
   sock_filter-v \
+  sock_filter-v-Xabbrev \
+  sock_filter-v-Xraw \
+  sock_filter-v-Xverbose \
   socketcall \
   sockopt-sol_netlink \
   splice \
diff --git a/tests-m32/pure_executables.list b/tests-m32/pure_executables.list
index d78bd4d..39565d0 100755
--- a/tests-m32/pure_executables.list
+++ b/tests-m32/pure_executables.list
@@ -7,9 +7,14 @@
 add_key
 adjtimex
 aio
+aio_pgetevents
 alarm
 bpf
 bpf-v
+bpf-obj_get_info_by_fd
+bpf-obj_get_info_by_fd-v
+bpf-obj_get_info_by_fd-prog
+bpf-obj_get_info_by_fd-prog-v
 brk
 btrfs
 caps
@@ -42,6 +47,9 @@
 fallocate
 fanotify_init
 fanotify_mark
+fanotify_mark-Xabbrev
+fanotify_mark-Xraw
+fanotify_mark-Xverbose
 fchdir
 fchmod
 fchmodat
@@ -104,10 +112,13 @@
 ioctl_block
 ioctl_dm
 ioctl_evdev
+ioctl_inotify
 ioctl_kvm_run
 ioctl_loop
 ioctl_mtd
 ioctl_rtc
+ioctl_perf
+ioctl_ptp
 ioctl_scsi
 ioctl_sg_io_v3
 ioctl_sg_io_v4
@@ -120,15 +131,30 @@
 ip_mreq
 ipc
 ipc_msg
+ipc_msg-Xabbrev
+ipc_msg-Xraw
+ipc_msg-Xverbose
 ipc_msgbuf
+ipc_msgbuf-Xabbrev
+ipc_msgbuf-Xraw
+ipc_msgbuf-Xverbose
 ipc_sem
+ipc_sem-Xabbrev
+ipc_sem-Xraw
+ipc_sem-Xverbose
 ipc_shm
+ipc_shm-Xabbrev
+ipc_shm-Xraw
+ipc_shm-Xverbose
 kcmp
 kcmp-y
 kern_features
 kexec_file_load
 kexec_load
 keyctl
+keyctl-Xabbrev
+keyctl-Xraw
+keyctl-Xverbose
 kill
 lchown
 lchown32
@@ -153,11 +179,20 @@
 mlock2
 mlockall
 mmap
+mmap-Xabbrev
+mmap-Xraw
+mmap-Xverbose
 mmap64
+mmap64-Xabbrev
+mmap64-Xraw
+mmap64-Xverbose
 mmsg
 mmsg_name
 modify_ldt
 mount
+mount-Xabbrev
+mount-Xraw
+mount-Xverbose
 move_pages
 mq
 mq_sendrecv
@@ -204,7 +239,9 @@
 nlattr_ifaddrlblmsg
 nlattr_ifaddrmsg
 nlattr_ifinfomsg
+nlattr_ifla_af_spec
 nlattr_ifla_brport
+nlattr_ifla_linkinfo
 nlattr_ifla_port
 nlattr_ifla_xdp
 nlattr_inet_diag_msg
@@ -229,6 +266,9 @@
 old_mmap
 old_mmap-P
 old_mmap-v-none
+old_mmap-Xabbrev
+old_mmap-Xraw
+old_mmap-Xverbose
 oldfstat
 oldlstat
 oldselect
@@ -240,6 +280,9 @@
 pause
 perf_event_open
 personality
+personality-Xabbrev
+personality-Xraw
+personality-Xverbose
 pipe
 pipe2
 pkey_alloc
@@ -356,7 +399,13 @@
 sigsuspend
 so_linger
 so_peercred
+so_peercred-Xabbrev
+so_peercred-Xraw
+so_peercred-Xverbose
 sock_filter-v
+sock_filter-v-Xabbrev
+sock_filter-v-Xraw
+sock_filter-v-Xverbose
 socketcall
 sockopt-sol_netlink
 splice
diff --git a/tests-m32/pwritev.c b/tests-m32/pwritev.c
index 58e5b41..3c2bdb6 100644
--- a/tests-m32/pwritev.c
+++ b/tests-m32/pwritev.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -65,7 +66,7 @@
 		if (i)
 			fputs(", ", stdout);
 		if (i == size) {
-			printf("%p", &iov[i]);
+			printf("... /* %p */", &iov[i]);
 			break;
 		}
 		if (i == LIM) {
diff --git a/tests-m32/qual_fault-syntax.test b/tests-m32/qual_fault-syntax.test
index 43ade76..7f7a515 100755
--- a/tests-m32/qual_fault-syntax.test
+++ b/tests-m32/qual_fault-syntax.test
@@ -86,6 +86,12 @@
 	   chdir:retval=0 \
 	   chdir:signal=1 \
 	   chdir:error=1:error=2 \
+	   chdir:syscall=invalid \
+	   chdir:syscall=chdir \
+	   chdir:syscall=%file \
+	   chdir:syscall=-42 \
+	   chdir:syscall=42 \
+	   chdir:syscall=gettid:syscall=gettid \
 	   ; do
 	$STRACE -e fault="$arg" true 2> "$LOG" &&
 		fail_with "$arg"
diff --git a/tests-m32/qual_fault-syscall.test b/tests-m32/qual_fault-syscall.test
new file mode 100755
index 0000000..cae97f5
--- /dev/null
+++ b/tests-m32/qual_fault-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_fault
+. "${srcdir=.}/qual_fault.test"
diff --git a/tests-m32/qual_fault.c b/tests-m32/qual_fault.c
index 670d9fe..d5d78bc 100644
--- a/tests-m32/qual_fault.c
+++ b/tests-m32/qual_fault.c
@@ -77,8 +77,9 @@
 					    err, rc, errno);
 
 		if (is_raw)
-			tprintf("writev(%#x, %p, 0x1) = -1 (errno %d)"
-				" (INJECTED)\n", got_fd, &io, err);
+			tprintf("writev(%#x, %p, 0x1)"
+				" = -1 %s (%m) (INJECTED)\n",
+				got_fd, &io, errstr);
 		else
 			tprintf("writev(%d, [{iov_base=\"%s\", iov_len=%d}], 1)"
 				" = -1 %s (%m) (INJECTED)\n",
diff --git a/tests-m32/qual_fault.test b/tests-m32/qual_fault.test
index 12b0a85..e166ffd 100755
--- a/tests-m32/qual_fault.test
+++ b/tests-m32/qual_fault.test
@@ -1,9 +1,9 @@
-#!/bin/sh
+#!/bin/sh -efu
 #
 # Check that fault injection works properly.
 #
 # Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2016-2017 The strace developers.
+# Copyright (c) 2016-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -37,6 +37,9 @@
 
 N=100
 
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
 check_fault_injection()
 {
 	local trace fault err first step procs extra
@@ -79,7 +82,7 @@
 	outpid="$NAME.pid"
 
 	run_strace -a11 -ff -e trace=$trace \
-		"$@" -e fault=$fault$when$error $extra \
+		"$@" -e fault=$fault$when$error$suffix $extra \
 		../$NAME $raw "$err" "$first" "$step" $N \
 		"$procs" "$outexp" "$outgot" "$outout" "$outpid"
 
@@ -87,8 +90,8 @@
 	do
 		pid=$(cat "$outpid.$i")
 
-		match_diff "$outout.$i" "$LOG.$pid"
-		match_diff "$outexp.$i" "$outgot.$i"
+		match_diff "$LOG.$pid" "$outout.$i"
+		match_diff "$outgot.$i" "$outexp.$i"
 	done
 }
 
diff --git a/tests-m32/qual_inject-error-signal-syscall.test b/tests-m32/qual_inject-error-signal-syscall.test
new file mode 100755
index 0000000..0adb35d
--- /dev/null
+++ b/tests-m32/qual_inject-error-signal-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_inject-error-signal
+. "${srcdir=.}/qual_inject-error-signal.test"
diff --git a/tests-m32/qual_inject-error-signal.test b/tests-m32/qual_inject-error-signal.test
index 1fe4612..93d8321 100755
--- a/tests-m32/qual_inject-error-signal.test
+++ b/tests-m32/qual_inject-error-signal.test
@@ -3,6 +3,10 @@
 # Check fault injection along with signal injection.
 . "${srcdir=.}/scno_tampering.sh"
 
-run_strace -a12 -echdir,exit_group -einject=chdir:error=ENOENT:signal=USR1 \
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
+run_strace -a12 -echdir,exit_group \
+	-einject=chdir:error=ENOENT:signal=USR1"$suffix" \
 	"../$NAME"
 match_diff
diff --git a/tests-m32/qual_inject-retval-syscall.test b/tests-m32/qual_inject-retval-syscall.test
new file mode 100755
index 0000000..fca9354
--- /dev/null
+++ b/tests-m32/qual_inject-retval-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_inject-retval
+. "${srcdir=.}/qual_inject-retval.test"
diff --git a/tests-m32/qual_inject-retval.test b/tests-m32/qual_inject-retval.test
index 5a4efd1..239ab0a 100755
--- a/tests-m32/qual_inject-retval.test
+++ b/tests-m32/qual_inject-retval.test
@@ -4,6 +4,9 @@
 
 . "${srcdir=.}/scno_tampering.sh"
 
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
 check_injection()
 {
 	local syscall rval
@@ -11,7 +14,7 @@
 	syscall=chdir
 	rval="$1"; shift
 
-	run_strace -a12 -e$syscall -einject="$syscall:retval=$rval" "$@" \
+	run_strace -a12 -e$syscall -einject="$syscall:retval=$rval$suffix" "$@" \
 		../qual_inject-retval "$rval" > "$EXP"
 	match_diff "$LOG" "$EXP"
 }
diff --git a/tests-m32/qual_inject-signal-syscall.test b/tests-m32/qual_inject-signal-syscall.test
new file mode 100755
index 0000000..42e9a26
--- /dev/null
+++ b/tests-m32/qual_inject-signal-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_inject-signal
+. "${srcdir=.}/qual_inject-signal.test"
diff --git a/tests-m32/qual_inject-signal.test b/tests-m32/qual_inject-signal.test
index f17e5a0..7f75a8e 100755
--- a/tests-m32/qual_inject-signal.test
+++ b/tests-m32/qual_inject-signal.test
@@ -3,6 +3,9 @@
 # Check signal injection.
 . "${srcdir=.}/init.sh"
 
-run_strace -a12 -echdir,exit_group -einject=chdir:signal=USR1 \
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
+run_strace -a12 -echdir,exit_group -einject=chdir:signal=USR1"$suffix" \
 	../$NAME
 match_diff
diff --git a/tests-m32/qual_inject-syntax.test b/tests-m32/qual_inject-syntax.test
index 20bc0c3..a53b01c 100755
--- a/tests-m32/qual_inject-syntax.test
+++ b/tests-m32/qual_inject-syntax.test
@@ -102,6 +102,12 @@
 	   chdir:delay_exit=3:delay_exit=4 \
 	   chdir:delay_enter=5:delay_exit=6:delay_enter=7 \
 	   chdir:delay_exit=8:delay_enter=9:delay_exit=10 \
+	   chdir:syscall=invalid \
+	   chdir:syscall=chdir \
+	   chdir:syscall=%file \
+	   chdir:syscall=-42 \
+	   chdir:syscall=42 \
+	   chdir:syscall=gettid:syscall=gettid \
 	   ; do
 	$STRACE -e inject="$arg" true 2> "$LOG" &&
 		fail_with "$arg"
diff --git a/tests-m32/qualify_personality.sh b/tests-m32/qualify_personality.sh
new file mode 100644
index 0000000..7b19a2e
--- /dev/null
+++ b/tests-m32/qualify_personality.sh
@@ -0,0 +1,94 @@
+#! /bin/sh -efu
+#
+# Common code for per-personality qualification tests
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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"
+
+[ 2 -le "$#" ] ||
+	fail_ 'No personality designation ("64", "32", "x32") specified'
+
+pers="$1"
+shift
+trace_expr="$1"
+shift
+skip="${1-}"
+
+case "$STRACE_NATIVE_ARCH" in
+x86_64)
+	supported_pers='64 32 x32'
+	;;
+x32)
+	supported_pers='x32 32'
+	;;
+aarch64|powerpc64|riscv|s390x|sparc64|tile)
+	supported_pers='64 32'
+	;;
+*)
+	supported_pers="$(($SIZEOF_LONG * 8))"
+	;;
+esac
+
+# Detect current personality designation
+if [ "x$STRACE_NATIVE_ARCH" = "x$STRACE_ARCH" ]; then
+	case "$STRACE_NATIVE_ARCH" in
+	x32)
+		cur_pers=x32
+		;;
+	*)
+		cur_pers="$(($SIZEOF_LONG * 8))"
+		;;
+	esac
+else
+	if [ "x$SIZEOF_KERNEL_LONG_T" = "x$SIZEOF_LONG" ]; then
+		[ 4 -eq "$SIZEOF_LONG" ] ||
+			fail_ "sizeof(long) = $SIZEOF_LONG != 4"
+		cur_pers=32
+	else
+		[ 8 -eq "$SIZEOF_KERNEL_LONG_T" ] ||
+			fail_ "sizeof(kernel_long_t) = $SIZEOF_KERNEL_LONG_T != 8"
+		[ 4 -eq "$SIZEOF_LONG" ] ||
+			fail_ "sizeof(long) = $SIZEOF_LONG != 4"
+		cur_pers=x32
+	fi
+fi
+
+pers_found=0
+set -- $supported_pers
+for i; do
+	[ "x$pers" != "x$i" ] || pers_found=1
+done
+
+[ "$pers_found" = 1 ] ||
+	skip_ "Personality '$pers' is not supported on architecture" \
+	      "'$STRACE_NATIVE_ARCH' (supported personalities: $supported_pers)"
+
+# If tested personality is not equivalent to current personality, reset $NAME,
+# so "$NAME.in", which is used by test_trace_expr, points to an empty file.
+[ "x$pers" = "x$cur_pers" ] || NAME=qualify_personality_empty
+
+test_trace_expr "$skip" -e trace="${trace_expr}@${pers}"
diff --git a/tests-m32/qualify_personality_empty.in b/tests-m32/qualify_personality_empty.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests-m32/qualify_personality_empty.in
diff --git a/tests-m32/readv.c b/tests-m32/readv.c
index 8430ca5..cae4e6b 100644
--- a/tests-m32/readv.c
+++ b/tests-m32/readv.c
@@ -2,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -89,7 +89,7 @@
 		fds[1], (long) writev(fds[1], w_iov, 0));
 
 	rc = writev(fds[1], w_iov + ARRAY_SIZE(w_iov_) - 1, 2);
-	tprintf("writev(%d, [{iov_base=\"%s\", iov_len=%u}, %p], 2)"
+	tprintf("writev(%d, [{iov_base=\"%s\", iov_len=%u}, ... /* %p */], 2)"
 		" = %ld %s (%m)\n",
 		fds[1], w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_),
 		rc, errno2name());
diff --git a/tests-m32/request_key.c b/tests-m32/request_key.c
index 866fe76..ce9b724 100644
--- a/tests-m32/request_key.c
+++ b/tests-m32/request_key.c
@@ -2,7 +2,7 @@
  * Check decoding of request_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -101,7 +101,7 @@
 		{ bogus_desc, NULL },
 		{ ARG_STR("\25\26\27\30\31") },
 		{ ARG_STR("desc") },
-		{ "overly long description", _STR("overly long ") "..." },
+		{ "overly long description", STRINGIFY("overly long ") "..." },
 	};
 
 	struct {
@@ -113,7 +113,7 @@
 		{ bogus_info, NULL },
 		{ ARG_STR("\32\33\34\35\36") },
 		{ ARG_STR("info") },
-		{ "overly long info", _STR("overly long ") "..." },
+		{ "overly long info", STRINGIFY("overly long ") "..." },
 	};
 
 	struct {
diff --git a/tests-m32/s390_guarded_storage.c b/tests-m32/s390_guarded_storage.c
index 69ac166..97475bb 100644
--- a/tests-m32/s390_guarded_storage.c
+++ b/tests-m32/s390_guarded_storage.c
@@ -175,8 +175,8 @@
 	static const kernel_ulong_t bogus_addr =
 		(kernel_ulong_t) 0xfacefeedac0ffeedULL;
 
-	struct gs_cb *gscb = tail_alloc(sizeof(*gscb));
-	struct gs_epl *gsepl = tail_alloc(sizeof(*gsepl));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct gs_cb, gscb);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct gs_epl, gsepl);
 
 	long rc;
 
diff --git a/tests-m32/s390_runtime_instr.c b/tests-m32/s390_runtime_instr.c
index 861bbd4..5d368a1 100644
--- a/tests-m32/s390_runtime_instr.c
+++ b/tests-m32/s390_runtime_instr.c
@@ -44,10 +44,11 @@
 		kernel_ulong_t cmd;
 		const char * cmd_str;
 	} cmd_args[] = {
-		{ 0, "???" },
-		{ 4, "???" },
-		{ (kernel_ulong_t) 0xdeafbeefdeadc0deULL, "???" },
-		{ 2, "STOP",  },
+		{ 0, "0 /* S390_RUNTIME_INSTR_??? */" },
+		{ 4, "4 /* S390_RUNTIME_INSTR_??? */" },
+		{ (kernel_ulong_t) 0xdeafbeefdeadc0deULL,
+			"-559038242 /* S390_RUNTIME_INSTR_??? */" },
+		{ 2, "S390_RUNTIME_INSTR_STOP"  },
 	};
 
 	static struct {
@@ -66,10 +67,8 @@
 
 	for (i = 0; i < ARRAY_SIZE(cmd_args); i++) {
 		rc = syscall(__NR_s390_runtime_instr, cmd_args[i].cmd, 0xdead);
-		printf("s390_runtime_instr(%d /* S390_RUNTIME_INSTR_%s */) = "
-		       "%s\n",
-		       (int) cmd_args[i].cmd, cmd_args[i].cmd_str,
-		       sprintrc(rc));
+		printf("s390_runtime_instr(%s) = %s\n",
+		       cmd_args[i].cmd_str, sprintrc(rc));
 	}
 
 	for (i = 0; i < ARRAY_SIZE(start_sig_args); i++) {
@@ -77,7 +76,7 @@
 
 		rc = syscall(__NR_s390_runtime_instr, 1, start_sig_args[i].sig);
 		saved_errno = errno;
-		printf("s390_runtime_instr(1 /* S390_RUNTIME_INSTR_START */, ");
+		printf("s390_runtime_instr(S390_RUNTIME_INSTR_START, ");
 
 		if (start_sig_args[i].sig_str)
 			printf("%s", start_sig_args[i].sig_str);
diff --git a/tests-m32/s390_runtime_instr.gen.test b/tests-m32/s390_runtime_instr.gen.test
index 9197dc3..83e8150 100755
--- a/tests-m32/s390_runtime_instr.gen.test
+++ b/tests-m32/s390_runtime_instr.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_runtime_instr -a50 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_runtime_instr -a44 ); do not edit.
 . "${srcdir=.}/init.sh"
-run_strace_match_diff -a50 
+run_strace_match_diff -a44 
diff --git a/tests-m32/s390_sthyi.c b/tests-m32/s390_sthyi.c
index 8f6bbfb..b7066e5 100644
--- a/tests-m32/s390_sthyi.c
+++ b/tests-m32/s390_sthyi.c
@@ -741,7 +741,7 @@
 		(kernel_ulong_t) 0xfee1deadfa57beefULL;
 
 	unsigned char *buf = tail_alloc(PAGE_SIZE);
-	uint64_t *ret = tail_alloc(sizeof(*ret));
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, ret);
 
 	long rc;
 
diff --git a/tests-m32/seccomp-filter-v.c b/tests-m32/seccomp-filter-v.c
index 34ab3b5..38def28 100644
--- a/tests-m32/seccomp-filter-v.c
+++ b/tests-m32/seccomp-filter-v.c
@@ -2,7 +2,7 @@
  * Check verbose decoding of seccomp SECCOMP_SET_MODE_FILTER.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -118,7 +118,7 @@
 	prog->len = 3;
 	syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, 0, prog);
 	tprintf("seccomp(SECCOMP_SET_MODE_FILTER, 0, {len=%u"
-		", filter=[%s, %p]}) = -1 EFAULT (%m)\n",
+		", filter=[%s, ... /* %p */]}) = -1 EFAULT (%m)\n",
 		prog->len, kill_stmt_txt, filter +  ARRAY_SIZE(filter_c));
 
 	prog->len = 0;
@@ -136,7 +136,8 @@
 	prog->filter = big_filter;
 	prog->len = BPF_MAXINSNS + 1;
 	tprintf("seccomp(SECCOMP_SET_MODE_FILTER, %s, {len=%u, filter=[",
-		"SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|0xfffffffc",
+		"SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|"
+		"SECCOMP_FILTER_FLAG_SPEC_ALLOW|0xfffffff8",
 		prog->len);
 	for (i = 0; i < BPF_MAXINSNS; ++i) {
 		if (i)
diff --git a/tests-m32/seccomp-filter.c b/tests-m32/seccomp-filter.c
index 7bc7656..53f8363 100644
--- a/tests-m32/seccomp-filter.c
+++ b/tests-m32/seccomp-filter.c
@@ -2,7 +2,7 @@
  * Check decoding of seccomp SECCOMP_SET_MODE_FILTER.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -56,12 +56,13 @@
 	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -1, prog);
 	printf("seccomp(SECCOMP_SET_MODE_FILTER, %s, {len=%u, filter=%p})"
 	       " = %ld %s (%m)\n",
-	       "SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|0xfffffffc",
+	       "SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|"
+	       "SECCOMP_FILTER_FLAG_SPEC_ALLOW|0xfffffff8",
 	       prog->len, prog->filter, rc, errno2name());
 
-	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -4L, efault);
+	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -8L, efault);
 	printf("seccomp(SECCOMP_SET_MODE_FILTER, %s, %p) = %ld %s (%m)\n",
-	       "0xfffffffc /* SECCOMP_FILTER_FLAG_??? */",
+	       "0xfffffff8 /* SECCOMP_FILTER_FLAG_??? */",
 	       efault, rc, errno2name());
 
 	puts("+++ exited with 0 +++");
diff --git a/tests-m32/semop.c b/tests-m32/semop.c
index 2366d38..4b14882 100644
--- a/tests-m32/semop.c
+++ b/tests-m32/semop.c
@@ -64,11 +64,11 @@
 	sem_b2->sem_flg = 0xbeef;
 
 	rc = semop(bogus_semid, sem_b2, 2);
-	printf("semop(%d, [{%hu, %hd, %s%s%#hx}, %p], %u) = %s\n",
+	printf("semop(%d, [{%hu, %hd, %s%s%#hx}, ... /* %p */], %u) = %s\n",
 		bogus_semid, sem_b2->sem_num, sem_b2->sem_op,
 		sem_b2->sem_flg & SEM_UNDO ? "SEM_UNDO|" : "",
 		sem_b2->sem_flg & IPC_NOWAIT ? "IPC_NOWAIT|" : "",
-		sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT),
+		(short) (sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT)),
 		sem_b2 + 1, 2, sprintrc(rc));
 
 	if (semop(id, sem_b, 1))
@@ -91,12 +91,12 @@
 	ts->tv_sec = 1;
 	ts->tv_nsec = 123456789;
 	rc = semtimedop(bogus_semid, sem_b2, 2, ts);
-	printf("semtimedop(%d, [{%hu, %hd, %s%s%#hx}, %p], %u"
+	printf("semtimedop(%d, [{%hu, %hd, %s%s%#hx}, ... /* %p */], %u"
 		", {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
 		bogus_semid, sem_b2->sem_num, sem_b2->sem_op,
 		sem_b2->sem_flg & SEM_UNDO ? "SEM_UNDO|" : "",
 		sem_b2->sem_flg & IPC_NOWAIT ? "IPC_NOWAIT|" : "",
-		sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT),
+		(short) (sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT)),
 		sem_b2 + 1, 2,
 		(long long) ts->tv_sec, zero_extend_signed_to_ull(ts->tv_nsec),
 		sprintrc(rc));
diff --git a/tests-m32/set_mempolicy.c b/tests-m32/set_mempolicy.c
index f3261a0..96ad7db 100644
--- a/tests-m32/set_mempolicy.c
+++ b/tests-m32/set_mempolicy.c
@@ -2,6 +2,7 @@
  * Check decoding of set_mempolicy syscall.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -76,7 +77,7 @@
 				printf("%#0*lx", (int) sizeof(long) * 2 + 2,
 				       nodemask[i]);
 			} else {
-				printf("%p", nodemask + i);
+				printf("... /* %p */", nodemask + i);
 				break;
 			}
 		}
diff --git a/tests-m32/setgroups.c b/tests-m32/setgroups.c
index 5645c22..a2851be 100644
--- a/tests-m32/setgroups.c
+++ b/tests-m32/setgroups.c
@@ -2,7 +2,7 @@
  * Check decoding of setgroups/setgroups32 syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -115,7 +115,7 @@
 	errstr = sprintrc(rc);
 	printf("%s(2, [", SYSCALL_NAME);
 	printuid(*g1);
-	printf(", %p]) = %s\n", g1 + 1, errstr);
+	printf(", ... /* %p */]) = %s\n", g1 + 1, errstr);
 
 	g2[0] = -2;
 	g2[1] = -3;
@@ -133,7 +133,7 @@
 	printuid(g2[0]);
 	printf(", ");
 	printuid(g2[1]);
-	printf(", %p]) = %s\n", g2 + 2, errstr);
+	printf(", ... /* %p */]) = %s\n", g2 + 2, errstr);
 
 	g3[0] = 0;
 	g3[1] = 1;
diff --git a/tests-m32/signal_receive.c b/tests-m32/signal_receive.c
index 01c52e8..a464b8c 100644
--- a/tests-m32/signal_receive.c
+++ b/tests-m32/signal_receive.c
@@ -1,43 +1,127 @@
+/*
+ * Check decoding of signal delivery.
+ *
+ * Copyright (c) 2016-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <signal.h>
 #include <stdio.h>
 #include <unistd.h>
 
-void sig_print(const char *signame, const int pid, const int uid)
-{
-	printf("kill(%d, %s) = 0\n"
-	       "--- %s {si_signo=%s, si_code=SI_USER, si_pid=%d"
-	       ", si_uid=%d} ---\n",
-	       pid, signame, signame, signame, pid, uid);
-}
+static volatile int s_sig, s_code, s_pid, s_uid;
 
 static void
-handler(int sig)
+handler(int sig, siginfo_t *info, void *ucontext)
 {
+	s_sig = info->si_signo;
+	s_code = info->si_code;
+	s_pid = info->si_pid;
+	s_uid = info->si_uid;
 }
 
 int
 main(void)
 {
-	int sig, pid = getpid(), uid = getuid();
-	const struct sigaction act = { .sa_handler = handler };
-	sigset_t mask;
-	sigemptyset(&mask);
+	static const char prefix[] = "KERNEL BUG";
+	int printed = 0;
 
-	for (sig = 1; sig <= 31; sig++) {
-		if (sig != SIGKILL && sig != SIGSTOP) {
-			sigaction(sig, &act, NULL);
-			sigaddset(&mask, sig);
+	const int pid = getpid();
+	const int uid = geteuid();
+
+	for (int sig = 1; sig <= 31; ++sig) {
+		if (sig == SIGKILL || sig == SIGSTOP)
+			continue;
+
+		sigset_t mask;
+		sigemptyset(&mask);
+		sigaddset(&mask, sig);
+		if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
+			perror_msg_and_fail("sigprocmask");
+
+		static const struct sigaction act = {
+			.sa_sigaction = handler,
+			.sa_flags = SA_SIGINFO
+		};
+		if (sigaction(sig, &act, NULL))
+			perror_msg_and_fail("sigaction: %d", sig);
+
+		if (kill(pid, sig) != 0)
+			perror_msg_and_fail("kill: %d", sig);
+
+#ifdef MPERS_IS_m32
+		/*
+		 * The tracee has received a compat siginfo_t but
+		 * the tracer has received a native siginfo_t.
+		 */
+		const int e_sig = sig;
+		const int e_pid = pid;
+		const int e_uid = uid;
+#else
+		/*
+		 * If the tracee is a native process,
+		 * then the tracer is also native.
+		 * If the tracee is a compat process,
+		 * then the tracer is also compat.
+		 * Anyway, both the tracee and the tracer
+		 * have received the same siginfo_t.
+		 */
+		const int e_sig = s_sig;
+		const int e_pid = s_pid;
+		const int e_uid = s_uid;
+#endif
+		printf("kill(%d, %s) = 0\n", pid, signal2name(sig));
+		printf("--- %s {si_signo=%s, si_code=SI_USER, si_pid=%d"
+		       ", si_uid=%d} ---\n",
+		       signal2name(sig), signal2name(e_sig), e_pid, e_uid);
+
+		if (s_code || sig != s_sig || pid != s_pid || uid != s_uid) {
+			/*
+			 * The kernel has failed to initialize siginfo_t
+			 * properly.  There is nothing that could be done
+			 * on the strace side to workaround the kernel bug,
+			 * so just print some useful diagnostics.
+			 */
+			if (!printed) {
+				printed = 1;
+				fprintf(stderr, "%s: siginfo_t\n", prefix);
+			}
+			fprintf(stderr,
+				"%s: expected: si_signo=%d, si_code=%d"
+				", si_pid=%d, si_uid=%d\n"
+				"%s: received: si_signo=%d, si_code=%d"
+				", si_pid=%d, si_uid=%d\n",
+				prefix, sig, SI_USER, pid, uid,
+				prefix, sig, s_code, s_pid, s_uid);
 		}
 	}
-	sigprocmask(SIG_UNBLOCK, &mask, NULL);
 
-	for (sig = 1; sig <= 31; sig++) {
-		if (sig != SIGKILL && sig != SIGSTOP) {
-			if (kill(pid, sig) != 0)
-				perror_msg_and_fail("kill: %d", sig);
-			sig_print(signal2name(sig), pid, uid);
-		}
+	if (printed) {
+		fprintf(stderr, "%s: end of diagnostics\n"
+			"*** PLEASE FIX THE KERNEL ***\n", prefix);
 	}
 
 	puts("+++ exited with 0 +++");
diff --git a/tests-m32/so_peercred-Xabbrev.c b/tests-m32/so_peercred-Xabbrev.c
new file mode 100644
index 0000000..a7056a6
--- /dev/null
+++ b/tests-m32/so_peercred-Xabbrev.c
@@ -0,0 +1 @@
+#include "so_peercred.c"
diff --git a/tests-m32/so_peercred-Xabbrev.gen.test b/tests-m32/so_peercred-Xabbrev.gen.test
new file mode 100755
index 0000000..64a5538
--- /dev/null
+++ b/tests-m32/so_peercred-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred-Xabbrev -e trace=getsockopt -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt -Xabbrev
diff --git a/tests-m32/so_peercred-Xraw.c b/tests-m32/so_peercred-Xraw.c
new file mode 100644
index 0000000..e45f2df
--- /dev/null
+++ b/tests-m32/so_peercred-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "so_peercred.c"
diff --git a/tests-m32/so_peercred-Xraw.gen.test b/tests-m32/so_peercred-Xraw.gen.test
new file mode 100755
index 0000000..471ae59
--- /dev/null
+++ b/tests-m32/so_peercred-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred-Xraw -e trace=getsockopt -Xraw -a39); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt -Xraw -a39
diff --git a/tests-m32/so_peercred-Xverbose.c b/tests-m32/so_peercred-Xverbose.c
new file mode 100644
index 0000000..1bb47e9
--- /dev/null
+++ b/tests-m32/so_peercred-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "so_peercred.c"
diff --git a/tests-m32/so_peercred-Xverbose.gen.test b/tests-m32/so_peercred-Xverbose.gen.test
new file mode 100755
index 0000000..2926517
--- /dev/null
+++ b/tests-m32/so_peercred-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred-Xverbose -e trace=getsockopt -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt -Xverbose
diff --git a/tests-m32/so_peercred.c b/tests-m32/so_peercred.c
index 53bf071..6eac846 100644
--- a/tests-m32/so_peercred.c
+++ b/tests-m32/so_peercred.c
@@ -2,6 +2,7 @@
  * Check decoding of SO_PEERCRED socket option.
  *
  * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -46,6 +47,28 @@
 	return rc;
 }
 
+static const char *
+so_str(void)
+{
+	static char buf[256];
+
+	if (!buf[0]) {
+#if XLAT_RAW
+		snprintf(buf, sizeof(buf),
+			 "%#x, %#x", SOL_SOCKET, SO_PEERCRED);
+#elif XLAT_VERBOSE
+		snprintf(buf, sizeof(buf),
+			 "%#x /* SOL_SOCKET */, %#x /* SO_PEERCRED */",
+			 SOL_SOCKET, SO_PEERCRED);
+#else
+		snprintf(buf, sizeof(buf),
+			 "SOL_SOCKET, SO_PEERCRED");
+#endif
+	}
+
+	return buf;
+}
+
 int
 main(void)
 {
@@ -59,7 +82,7 @@
 	/* classic getsockopt */
 	*len = sizeof(*peercred);
 	get_peercred(sv[0], peercred, len);
-	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", sv[0]);
+	printf("getsockopt(%d, %s", sv[0], so_str());
 	PRINT_FIELD_D(", {", *peercred, pid);
 	PRINT_FIELD_UID(", ", *peercred, uid);
 	PRINT_FIELD_UID(", ", *peercred, gid);
@@ -72,7 +95,7 @@
 	/* getsockopt with optlen larger than necessary - shortened */
 	*len = sizeof(*peercred) + 1;
 	get_peercred(fd, peercred, len);
-	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	printf("getsockopt(%d, %s", fd, so_str());
 	PRINT_FIELD_D(", {", *peercred, pid);
 	PRINT_FIELD_UID(", ", *peercred, uid);
 	PRINT_FIELD_UID(", ", *peercred, gid);
@@ -82,14 +105,14 @@
 	/* 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);
+	printf("getsockopt(%d, %s", fd, so_str());
 	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);
+	printf("getsockopt(%d, %s", fd, so_str());
 	PRINT_FIELD_D(", {", *peercred, pid);
 	PRINT_FIELD_UID(", ", *peercred, uid);
 	printf("}, [%d]) = %s\n", *len, errstr);
@@ -97,20 +120,20 @@
 	/* 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);
+	printf("getsockopt(%d, %s, ", fd, so_str());
 	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);
+	printf("getsockopt(%d, %s, %p, [%d]) = %s\n",
+	       fd, so_str(), &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);
+	printf("getsockopt(%d, %s, %p, %p) = %s\n",
+	       fd, so_str(), peercred, len + 1, errstr);
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-m32/sock_filter-v-Xabbrev.c b/tests-m32/sock_filter-v-Xabbrev.c
new file mode 100644
index 0000000..ac680e2
--- /dev/null
+++ b/tests-m32/sock_filter-v-Xabbrev.c
@@ -0,0 +1 @@
+#include "sock_filter-v.c"
diff --git a/tests-m32/sock_filter-v-Xabbrev.gen.test b/tests-m32/sock_filter-v-Xabbrev.gen.test
new file mode 100755
index 0000000..e52763f
--- /dev/null
+++ b/tests-m32/sock_filter-v-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v-Xabbrev -v -e trace=getsockopt,setsockopt -X abbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -v -e trace=getsockopt,setsockopt -X abbrev
diff --git a/tests-m32/sock_filter-v-Xraw.c b/tests-m32/sock_filter-v-Xraw.c
new file mode 100644
index 0000000..e85309c
--- /dev/null
+++ b/tests-m32/sock_filter-v-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "sock_filter-v.c"
diff --git a/tests-m32/sock_filter-v-Xraw.gen.test b/tests-m32/sock_filter-v-Xraw.gen.test
new file mode 100755
index 0000000..3c7df81
--- /dev/null
+++ b/tests-m32/sock_filter-v-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v-Xraw -a 37 -v -e trace=getsockopt,setsockopt -X raw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a 37 -v -e trace=getsockopt,setsockopt -X raw
diff --git a/tests-m32/sock_filter-v-Xverbose.c b/tests-m32/sock_filter-v-Xverbose.c
new file mode 100644
index 0000000..59d76bd
--- /dev/null
+++ b/tests-m32/sock_filter-v-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "sock_filter-v.c"
diff --git a/tests-m32/sock_filter-v-Xverbose.gen.test b/tests-m32/sock_filter-v-Xverbose.gen.test
new file mode 100755
index 0000000..b58c5b5
--- /dev/null
+++ b/tests-m32/sock_filter-v-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v-Xverbose -v -e trace=getsockopt,setsockopt -X verbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -v -e trace=getsockopt,setsockopt -X verbose
diff --git a/tests-m32/sock_filter-v.c b/tests-m32/sock_filter-v.c
index 16d5c1c..6829786 100644
--- a/tests-m32/sock_filter-v.c
+++ b/tests-m32/sock_filter-v.c
@@ -2,6 +2,7 @@
  * Check decoding of socket filters.
  *
  * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,16 +36,30 @@
 #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)
+/* SO_GET_FILTER was introduced by Linux commit v3.8-rc1~139^2~518 */
+#ifndef SO_GET_FILTER
+# define SO_GET_FILTER SO_ATTACH_FILTER
+#endif
 
-#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)
+#define HEX_FMT "%#x"
+
+#if XLAT_RAW
+# define XLAT_FMT HEX_FMT
+# define XLAT_ARGS(a_) (a_)
+#elif XLAT_VERBOSE
+# define XLAT_FMT HEX_FMT " /* %s */"
+# define XLAT_ARGS(a_) (a_), #a_
+#else
+# define XLAT_FMT "%s"
+# define XLAT_ARGS(a_) #a_
+#endif
+
+#define PRINT_STMT(pfx, code_fmt, k_fmt, ...)	\
+	printf("%sBPF_STMT(" code_fmt ", " k_fmt ")", pfx, __VA_ARGS__)
+
+#define PRINT_JUMP(pfx, code_fmt, k, jt, jf, ...)		\
+	printf("%sBPF_JUMP(" code_fmt ", %#x, %#x, %#x)",	\
+	       pfx, __VA_ARGS__, k, jt, jf)
 
 static const struct sock_filter bpf_filter[] = {
 	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_LL_OFF+4),
@@ -62,16 +77,43 @@
 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);
+	PRINT_STMT("[", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   XLAT_FMT "+4",
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   XLAT_ARGS(SKF_LL_OFF));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   XLAT_FMT "+8",
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   XLAT_ARGS(SKF_NET_OFF));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   XLAT_FMT "+" XLAT_FMT,
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   XLAT_ARGS(SKF_AD_OFF), XLAT_ARGS(SKF_AD_PROTOCOL));
+	PRINT_JUMP(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   IPPROTO_UDP, 0, 5,
+		   XLAT_ARGS(BPF_JMP), XLAT_ARGS(BPF_K), XLAT_ARGS(BPF_JEQ));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_W), XLAT_ARGS(BPF_LEN),
+		   0);
+	PRINT_JUMP(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   100, 0, 3,
+		   XLAT_ARGS(BPF_JMP), XLAT_ARGS(BPF_K), XLAT_ARGS(BPF_JGE));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   42);
+	PRINT_JUMP(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   'a', 0, 1,
+		   XLAT_ARGS(BPF_JMP), XLAT_ARGS(BPF_K), XLAT_ARGS(BPF_JEQ));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_RET), XLAT_ARGS(BPF_K),
+		   -1U);
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_RET), XLAT_ARGS(BPF_K),
+		   0);
 	putchar(']');
 }
 
@@ -80,7 +122,7 @@
 static int
 get_filter(int fd, void *val, socklen_t *len)
 {
-	int rc = getsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, val, len);
+	int rc = getsockopt(fd, SOL_SOCKET, SO_GET_FILTER, val, len);
 	errstr = sprintrc(rc);
 	return rc;
 }
@@ -114,35 +156,41 @@
 	*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);
+		perror_msg_and_skip("getsockopt SOL_SOCKET SO_GET_FILTER");
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", NULL, [%u->0]) "
+	       "= 0\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER),
+	       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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", NULL, NULL) "
+	       "= %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER), 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);
+	printf("setsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", {len=%u, filter=",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_ATTACH_FILTER),
+	       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);
+	printf("setsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, %u) = %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_ATTACH_FILTER), 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);
+	printf("setsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", {len=%u, filter=",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_ATTACH_REUSEPORT_CBPF),
+	       prog->len);
 	print_filter();
 	printf("}, %u) = %s\n", (unsigned int) sizeof(*prog), errstr);
 #endif
@@ -150,28 +198,30 @@
 	/* 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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, [0->%u]) "
+	       "= %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER), 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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, [%u]) = %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER), 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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, [%u]) = %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER),
+	       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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", ",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER));
 	print_filter();
 	printf(", [%u->%d]) = %s\n",
 	       (unsigned int) ARRAY_SIZE(bpf_filter) + 1, *len, errstr);
diff --git a/tests-m32/strace-V.test b/tests-m32/strace-V.test
index eb05e86..a0274c2 100755
--- a/tests-m32/strace-V.test
+++ b/tests-m32/strace-V.test
@@ -38,7 +38,8 @@
 	exit 1
 }
 
-option_unwind=$(getoption USE_LIBUNWIND " stack-unwind")
+option_unwind=$(getoption ENABLE_STACKTRACE \
+		" stack-trace=$(getstr USE_UNWINDER)")
 option_demangle=$(getoption USE_DEMANGLE " stack-demangle")
 
 option_m32=
diff --git a/tests-m32/strace-k-demangle.expected b/tests-m32/strace-k-demangle.expected
new file mode 100644
index 0000000..e42e78f
--- /dev/null
+++ b/tests-m32/strace-k-demangle.expected
@@ -0,0 +1 @@
+(__kernel_vsyscall )?(__)?getpid ns::f3\(int\) ns::f2\(int\) ns::f1\(int\) ns::f0\(int\) main
diff --git a/tests-m32/strace-k-demangle.test b/tests-m32/strace-k-demangle.test
index 1616449..106a700 100755
--- a/tests-m32/strace-k-demangle.test
+++ b/tests-m32/strace-k-demangle.test
@@ -2,6 +2,5 @@
 # Check strace -k symbol names demangling.
 
 test_prog=../stack-fcall-mangled
-expected='getpid ns::f3(int) ns::f2(int) ns::f1(int) ns::f0(int) main '
 
 . "${srcdir=.}"/strace-k.test
diff --git a/tests-m32/strace-k.expected b/tests-m32/strace-k.expected
new file mode 100644
index 0000000..840d648
--- /dev/null
+++ b/tests-m32/strace-k.expected
@@ -0,0 +1 @@
+(__kernel_vsyscall )?(__)?getpid f3 f2 f1 f0 main
diff --git a/tests-m32/strace-k.test b/tests-m32/strace-k.test
index 2a21a9d..fb1e2b3 100755
--- a/tests-m32/strace-k.test
+++ b/tests-m32/strace-k.test
@@ -4,7 +4,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.
+# Copyright (c) 2014-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -35,20 +35,41 @@
 [ -f /proc/self/maps ] ||
 	framework_skip_ '/proc/self/maps is not available'
 
+check_prog grep
 check_prog sed
 check_prog tr
 
-: ${test_prog=../stack-fcall}
-: ${expected='getpid f3 f2 f1 f0 main '}
-
-run_prog "$test_prog"
+run_prog "${test_prog=../stack-fcall}"
 run_strace -e getpid -k $args
 
-result=$(sed -r -n '1,/\(main\+0x[a-f0-9]+\) .*/ s/^[^(]+\(([^+]+)\+0x[a-f0-9]+\) .*/\1/p' "$LOG" |
-	tr '\n' ' ')
+expected="$srcdir/$NAME.expected"
+sed -r -n '1,/\(main\+0x[a-f0-9]+\) .*/ s/^[^(]+\(([^+]+)\+0x[a-f0-9]+\) .*/\1/p' "$LOG" |
+	tr '\n' ' ' |sed 's/ $//' > "$OUT"
 
-test "$result" = "$expected" || {
-	echo "expected: \"$expected\""
-	echo "result: \"$result\""
+LC_ALL=C grep -E -x -f "$expected" < "$OUT" > /dev/null || {
+	cat >&2 <<__EOF__
+Failed pattern of expected output: $(cat "$expected")
+Actual output: $(cat "$OUT")
+__EOF__
+
+	pattern=
+	case "$STRACE_ARCH" in
+		aarch64|i386|ppc*|s390*|sparc*|x32|x86*)
+			# These architectures are supported by elfutils libdw,
+			# see grep '\<HOOK\>.*\<abi_cfi\>' elfutils/backends
+			;;
+		arm) pattern='No DWARF information found'
+			# This is also supported by elfutils libdw
+			# but the latter needs debuginfo for unwinding.
+			;;
+		*) pattern='Unwinding not supported for this architecture'
+			;;
+	esac
+	if [ -n "$pattern" ] &&
+	   LC_ALL=C grep -x " > $pattern" < "$LOG" > /dev/null; then
+		cat < "$LOG" >&2
+		skip_ "stack tracing is not fully supported on $STRACE_ARCH yet"
+	fi
+
 	dump_log_and_fail_with "$STRACE $args output mismatch"
 }
diff --git a/tests-m32/struct_flock.c b/tests-m32/struct_flock.c
deleted file mode 100644
index 428c038..0000000
--- a/tests-m32/struct_flock.c
+++ /dev/null
@@ -1,108 +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 <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "flock.h"
-
-#define FILE_LEN 4096
-
-#define TEST_FLOCK_EINVAL(cmd) test_flock_einval(cmd, #cmd)
-
-#ifdef HAVE_TYPEOF
-# define TYPEOF_FLOCK_OFF_T typeof(((struct_kernel_flock *) NULL)->l_len)
-#else
-# define TYPEOF_FLOCK_OFF_T off_t
-#endif
-
-static long
-invoke_test_syscall(const unsigned int cmd, void *const p)
-{
-	const kernel_ulong_t fd = F8ILL_KULONG_MASK;
-	const kernel_ulong_t op = F8ILL_KULONG_MASK | cmd;
-
-	return syscall(TEST_SYSCALL_NR, fd, op, (unsigned long) p);
-}
-
-static void
-test_flock_einval(const int cmd, const char *name)
-{
-	struct_kernel_flock fl = {
-		.l_type = F_RDLCK,
-		.l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeedULL,
-		.l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00dULL
-	};
-	long rc = invoke_test_syscall(cmd, &fl);
-	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
-	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
-	       (intmax_t) fl.l_start, (intmax_t) fl.l_len, sprintrc(rc));
-}
-
-static void
-test_flock(void)
-{
-	TEST_FLOCK_EINVAL(F_SETLK);
-	TEST_FLOCK_EINVAL(F_SETLKW);
-
-	struct_kernel_flock fl = {
-		.l_type = F_RDLCK,
-		.l_len = FILE_LEN
-	};
-	long rc = invoke_test_syscall(F_SETLK, &fl);
-	printf("%s(0, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
-	       ", l_start=0, l_len=%d}) = %s\n",
-	       TEST_SYSCALL_STR, FILE_LEN, sprintrc(rc));
-	if (rc)
-		return;
-
-	invoke_test_syscall(F_GETLK, &fl);
-	printf("%s(0, F_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
-	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
-	       TEST_SYSCALL_STR, FILE_LEN);
-
-	invoke_test_syscall(F_SETLK, &fl);
-	printf("%s(0, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
-	       ", l_start=0, l_len=%d}) = 0\n",
-	       TEST_SYSCALL_STR, FILE_LEN);
-}
-
-static void
-create_sample(void)
-{
-	char fname[] = TEST_SYSCALL_STR "_XXXXXX";
-
-	(void) close(0);
-	if (mkstemp(fname))
-		perror_msg_and_fail("mkstemp: %s", fname);
-	if (unlink(fname))
-		perror_msg_and_fail("unlink: %s", fname);
-	if (ftruncate(0, FILE_LEN))
-		perror_msg_and_fail("ftruncate");
-}
diff --git a/tests-m32/test_nlattr.h b/tests-m32/test_nlattr.h
index 43f467f..9038c0e 100644
--- a/tests-m32/test_nlattr.h
+++ b/tests-m32/test_nlattr.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -51,15 +51,17 @@
 }
 
 static void
-print_nlattr(const unsigned int nla_len, const char *const nla_type)
+print_nlattr(const unsigned int nla_len, const char *const nla_type, bool add_data)
 {
-	printf(", {{nla_len=%u, nla_type=%s}, ", nla_len, nla_type);
+	printf(", %s{{nla_len=%u, nla_type=%s}, ",
+	       add_data ? "[" : "", nla_len, nla_type);
 }
 
-#define TEST_NLATTR_(fd_, nlh0_, hdrlen_,				\
+#define TEST_NLATTR_EX_(fd_, nlh0_, hdrlen_,				\
 		     init_msg_, print_msg_,				\
 		     nla_type_, nla_type_str_,				\
-		     nla_data_len_, src_, slen_, ...)			\
+		     nla_data_len_, nla_total_len_,			\
+		     src_, slen_, ...)					\
 	do {								\
 		struct nlmsghdr *const nlh =				\
 			(nlh0_) - (NLA_HDRLEN + (slen_));		\
@@ -68,7 +70,7 @@
 		const unsigned int nla_len =				\
 			NLA_HDRLEN + (nla_data_len_);			\
 		const unsigned int msg_len =				\
-			NLMSG_SPACE(hdrlen_) + nla_len;			\
+			NLMSG_SPACE(hdrlen_) + NLA_HDRLEN + (nla_total_len_); \
 									\
 		(init_msg_)(nlh, msg_len);				\
 		init_nlattr(TEST_NLATTR_nla, nla_len, (nla_type_),	\
@@ -80,14 +82,28 @@
 									\
 		printf("sendto(%d, {", (fd_));				\
 		(print_msg_)(msg_len);					\
-		print_nlattr(nla_len, (nla_type_str_));			\
+		print_nlattr(nla_len, (nla_type_str_),			\
+			     (nla_total_len_) > (nla_data_len_));	\
 									\
 		{ __VA_ARGS__; }					\
 									\
+		if ((nla_total_len_) > (nla_data_len_))			\
+			printf("]");					\
+									\
 		printf("}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",		\
 		       msg_len, errstr);				\
 	} while (0)
 
+#define TEST_NLATTR_(fd_, nlh0_, hdrlen_,				\
+		     init_msg_, print_msg_,				\
+		     nla_type_, nla_type_str_,				\
+		     nla_data_len_, src_, slen_, ...)			\
+	TEST_NLATTR_EX_((fd_), (nlh0_), (hdrlen_),			\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), (nla_type_str_),			\
+			(nla_data_len_), (nla_data_len_),		\
+			(src_), (slen_), __VA_ARGS__)
+
 #define TEST_NLATTR(fd_, nlh0_, hdrlen_,				\
 		    init_msg_, print_msg_,				\
 		    nla_type_,						\
@@ -106,11 +122,12 @@
 			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_str_),			\
-			plen, (pattern_), plen,				\
-			(fallback_func)((pattern_), plen));		\
+		if (plen > 0)						\
+			TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),		\
+				(init_msg_), (print_msg_),		\
+				(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_),			\
@@ -170,7 +187,7 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
 			printf("]"));					\
 		/* short read of sizeof(obj_) */			\
@@ -183,11 +200,11 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf(", %p]",					\
+			printf(", ... /* %p */]",			\
 			       RTA_DATA(NLMSG_ATTR(nlh, (hdrlen_)))	\
-			        + sizeof((obj_)[0])));			\
+			        + sizeof(obj_) - sizeof((obj_)[0])));	\
 		/* sizeof(obj_) */					\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
@@ -198,7 +215,7 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_); ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
 			printf("]"));					\
 	} while (0)
@@ -206,21 +223,23 @@
 #define TEST_NESTED_NLATTR_OBJECT_EX_(fd_, nlh0_, hdrlen_,		\
 				      init_msg_, print_msg_,		\
 				      nla_type_, nla_type_str_,		\
-				      pattern_, obj_, depth_, ...)	\
+				      pattern_, obj_, fallback_func,	\
+				      depth_, ...)	\
 	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 * depth_,	\
-			(hdrlen_) + NLA_HDRLEN * depth_,		\
-			(init_msg_), (print_msg_),			\
-			(nla_type_), (nla_type_str_),			\
-			plen, (pattern_), plen,				\
-			print_quoted_hex((pattern_), plen);		\
-			size_t i;					\
-			for (i = 0; i < depth_; ++i)			\
-				printf("}"));				\
+		if (plen > 0)						\
+			TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_, \
+				(hdrlen_) + NLA_HDRLEN * depth_,	\
+				(init_msg_), (print_msg_),		\
+				(nla_type_), (nla_type_str_),		\
+				plen, (pattern_), plen,			\
+				(fallback_func)((pattern_), plen);	\
+				size_t i;				\
+				for (i = 0; i < depth_; ++i)		\
+					printf("}"));			\
 		/* short read of sizeof(obj_) */			\
 		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
 			(hdrlen_) + NLA_HDRLEN * depth_,		\
@@ -252,7 +271,8 @@
 	TEST_NESTED_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),	\
 				      (init_msg_), (print_msg_),	\
 				      (nla_type_), #nla_type_,		\
-				      (pattern_), (obj_), (depth_),	\
+				      (pattern_), (obj_),		\
+				      print_quoted_hex, (depth_),	\
 				      __VA_ARGS__)
 
 #define TEST_NESTED_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,			\
@@ -261,27 +281,30 @@
 	TEST_NESTED_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),	\
 				      (init_msg_), (print_msg_),	\
 				      (nla_type_), #nla_type_,		\
-				      (pattern_), (obj_), 1,		\
+				      (pattern_), (obj_),		\
+				      print_quoted_hex, 1,		\
 				      __VA_ARGS__)
 
-#define TEST_NESTED_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,			\
+#define TEST_NESTED_NLATTR_ARRAY_EX(fd_, nlh0_, hdrlen_,		\
 				 init_msg_, print_msg_,			\
-				 nla_type_, pattern_, obj_, print_elem_)\
+				 nla_type_, pattern_, obj_, depth_,	\
+				 print_elem_)				\
 	do {								\
 		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_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			plen, (pattern_), plen,				\
 			print_quoted_hex((pattern_), plen);		\
-			printf("}"));					\
+			for (size_t i = 0; i < depth_; ++i)		\
+				printf("}"));				\
 		/* sizeof((obj_)[0]) < len < sizeof(obj_) */		\
-		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_) - 1,				\
@@ -290,12 +313,14 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf("]}"));					\
+			printf("]");					\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
 		/* short read of sizeof(obj_) */			\
-		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_),					\
@@ -304,14 +329,16 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf(", %p]}",				\
+			printf(", ... /* %p */]",			\
 			       RTA_DATA(TEST_NLATTR_nla)		\
-			        + sizeof((obj_)[0])));			\
+			        + sizeof(obj_) - sizeof((obj_)[0]));	\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
 		/* sizeof(obj_) */					\
-		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_),					\
@@ -320,7 +347,17 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_); ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf("]}"));					\
+			printf("]");					\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
 	} while (0)
+
+#define TEST_NESTED_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,			\
+				 init_msg_, print_msg_,			\
+				 nla_type_, pattern_, obj_, print_elem_)\
+	TEST_NESTED_NLATTR_ARRAY_EX((fd_), (nlh0_), (hdrlen_),		\
+				    (init_msg_), (print_msg_),		\
+				    nla_type_, (pattern_), (obj_), 1,	\
+				    (print_elem_))
diff --git a/tests-m32/tests.h b/tests-m32/tests.h
index 3bf454d..248e341 100644
--- a/tests-m32/tests.h
+++ b/tests-m32/tests.h
@@ -62,6 +62,14 @@
 # define VERBOSE 0
 #endif
 
+/* xlat verbosity defaults */
+#ifndef XLAT_RAW
+# define XLAT_RAW 0
+#endif
+#ifndef XLAT_VERBOSE
+# define XLAT_VERBOSE 0
+#endif
+
 #ifndef DEFAULT_STRLEN
 /* Default maximum # of bytes printed in printstr et al. */
 # define DEFAULT_STRLEN 32
@@ -109,6 +117,9 @@
 void *tail_memdup(const void *, const size_t)
 	ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((2));
 
+#define midtail_alloc(after_, before_) \
+	((void *) ((char *) tail_alloc(((before_) + (after_))) + (before_)))
+
 /*
  * Allocate an object of the specified type at the end
  * of a mapped memory region.
@@ -163,6 +174,12 @@
  */
 void print_quoted_cstring(const char *str, size_t size);
 
+/*
+ * Print a NUL-terminated string `str' of length up to `size'
+ * in a quoted form.
+ */
+void print_quoted_stringn(const char *str, size_t size);
+
 /* Print memory in a quoted form with optional escape characters. */
 void print_quoted_memory_ex(const void *, size_t, bool quote,
 			    const char *escape_chars);
@@ -277,7 +294,6 @@
 #endif
 #define LL_VAL_TO_PAIR(llval) LL_PAIR((long) ((llval) >> 32), (long) (llval))
 
-#define _STR(_arg) #_arg
 #define ARG_STR(_arg) (_arg), #_arg
 #define ARG_ULL_STR(_arg) _arg##ULL, #_arg
 
diff --git a/tests-m32/trace_personality_32.gen.test b/tests-m32/trace_personality_32.gen.test
new file mode 100755
index 0000000..a5f5c7d
--- /dev/null
+++ b/tests-m32/trace_personality_32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_32 +qualify_personality.sh 32 'getcwd' 'fsync-y'); do not edit.
+set -- 32 'getcwd' 'fsync-y'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-m32/trace_personality_32.in b/tests-m32/trace_personality_32.in
new file mode 100644
index 0000000..9da47c1
--- /dev/null
+++ b/tests-m32/trace_personality_32.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests-m32/trace_personality_64.gen.test b/tests-m32/trace_personality_64.gen.test
new file mode 100755
index 0000000..5b961ef
--- /dev/null
+++ b/tests-m32/trace_personality_64.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_64 +qualify_personality.sh 64 'getcwd' 'fsync-y'); do not edit.
+set -- 64 'getcwd' 'fsync-y'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-m32/trace_personality_64.in b/tests-m32/trace_personality_64.in
new file mode 100644
index 0000000..9da47c1
--- /dev/null
+++ b/tests-m32/trace_personality_64.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests-m32/trace_personality_regex_32.gen.test b/tests-m32/trace_personality_regex_32.gen.test
new file mode 100755
index 0000000..f2800d2
--- /dev/null
+++ b/tests-m32/trace_personality_regex_32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_regex_32 +qualify_personality.sh 32 '/clock.*' 'times|fcntl.*'); do not edit.
+set -- 32 '/clock.*' 'times|fcntl.*'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-m32/trace_personality_regex_32.in b/tests-m32/trace_personality_regex_32.in
new file mode 100755
index 0000000..864de29
--- /dev/null
+++ b/tests-m32/trace_personality_regex_32.in
@@ -0,0 +1,3 @@
+clock_adjtime	-a37
+clock_nanosleep
+clock_xettime	-a36
diff --git a/tests-m32/trace_personality_regex_64.gen.test b/tests-m32/trace_personality_regex_64.gen.test
new file mode 100755
index 0000000..4b19f1b
--- /dev/null
+++ b/tests-m32/trace_personality_regex_64.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_regex_64 +qualify_personality.sh 64 '/clock.*' 'times|fcntl.*'); do not edit.
+set -- 64 '/clock.*' 'times|fcntl.*'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-m32/trace_personality_regex_64.in b/tests-m32/trace_personality_regex_64.in
new file mode 100755
index 0000000..864de29
--- /dev/null
+++ b/tests-m32/trace_personality_regex_64.in
@@ -0,0 +1,3 @@
+clock_adjtime	-a37
+clock_nanosleep
+clock_xettime	-a36
diff --git a/tests-m32/trace_personality_regex_x32.gen.test b/tests-m32/trace_personality_regex_x32.gen.test
new file mode 100755
index 0000000..7f41671
--- /dev/null
+++ b/tests-m32/trace_personality_regex_x32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_regex_x32 +qualify_personality.sh x32 '/clock.*' 'times|fcntl.*'); do not edit.
+set -- x32 '/clock.*' 'times|fcntl.*'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-m32/trace_personality_regex_x32.in b/tests-m32/trace_personality_regex_x32.in
new file mode 100755
index 0000000..864de29
--- /dev/null
+++ b/tests-m32/trace_personality_regex_x32.in
@@ -0,0 +1,3 @@
+clock_adjtime	-a37
+clock_nanosleep
+clock_xettime	-a36
diff --git a/tests-m32/trace_personality_x32.gen.test b/tests-m32/trace_personality_x32.gen.test
new file mode 100755
index 0000000..724499a
--- /dev/null
+++ b/tests-m32/trace_personality_x32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_x32 +qualify_personality.sh x32 'getcwd' 'fsync-y'); do not edit.
+set -- x32 'getcwd' 'fsync-y'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-m32/trace_personality_x32.in b/tests-m32/trace_personality_x32.in
new file mode 100644
index 0000000..9da47c1
--- /dev/null
+++ b/tests-m32/trace_personality_x32.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests-m32/xet_thread_area_x86.c b/tests-m32/xet_thread_area_x86.c
index 36591ec..d5be69f 100644
--- a/tests-m32/xet_thread_area_x86.c
+++ b/tests-m32/xet_thread_area_x86.c
@@ -152,9 +152,9 @@
 
 int main(void)
 {
-	struct user_desc *ta1 = tail_alloc(sizeof(*ta1));
-	struct user_desc *ta2 = tail_alloc(sizeof(*ta2));
-	unsigned *bogus_entry_number = tail_alloc(sizeof(*bogus_entry_number));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct user_desc, ta1);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct user_desc, ta2);
+	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned int, bogus_entry_number);
 
 	long set_rc = -1;
 
diff --git a/tests-mx32/Makefile b/tests-mx32/Makefile
index c9275ea..16a8752 100644
--- a/tests-mx32/Makefile
+++ b/tests-mx32/Makefile
@@ -139,7 +139,11 @@
 check_PROGRAMS = $(am__EXEEXT_1) _newselect-P$(EXEEXT) 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) \
+	block_reset_raise_run$(EXEEXT) bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-v$(EXEEXT) bpf-success$(EXEEXT) \
+	bpf-success-v$(EXEEXT) caps-abbrev$(EXEEXT) \
 	check_sigblock$(EXEEXT) check_sigign$(EXEEXT) \
 	clone_parent$(EXEEXT) clone_ptrace$(EXEEXT) count-f$(EXEEXT) \
 	delay$(EXEEXT) execve-v$(EXEEXT) execveat-v$(EXEEXT) \
@@ -147,7 +151,8 @@
 	getpid$(EXEEXT) getppid$(EXEEXT) gettid$(EXEEXT) \
 	inject-nf$(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) \
+	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) \
+	ioctl_perf-success$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
 	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
 	list_sigaction_signum$(EXEEXT) localtime$(EXEEXT) \
 	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
@@ -159,18 +164,19 @@
 	perf_event_open_nonverbose$(EXEEXT) \
 	perf_event_open_unabbrev$(EXEEXT) ppoll-v$(EXEEXT) \
 	prctl-seccomp-filter-v$(EXEEXT) prctl-seccomp-strict$(EXEEXT) \
-	print_maxfd$(EXEEXT) qual_fault$(EXEEXT) \
-	qual_inject-error-signal$(EXEEXT) qual_inject-retval$(EXEEXT) \
-	qual_inject-signal$(EXEEXT) qual_signal$(EXEEXT) \
-	quotactl-v$(EXEEXT) quotactl-xfs-v$(EXEEXT) \
-	redirect-fds$(EXEEXT) restart_syscall$(EXEEXT) \
-	run_expect_termsig$(EXEEXT) scm_rights$(EXEEXT) \
-	seccomp-filter-v$(EXEEXT) seccomp-strict$(EXEEXT) \
-	select-P$(EXEEXT) set_ptracer_any$(EXEEXT) \
-	set_sigblock$(EXEEXT) set_sigign$(EXEEXT) \
-	signal_receive$(EXEEXT) sleep$(EXEEXT) stack-fcall$(EXEEXT) \
-	stack-fcall-mangled$(EXEEXT) threads-execve$(EXEEXT) \
-	unblock_reset_raise$(EXEEXT) unix-pair-send-recv$(EXEEXT) \
+	prctl-spec-inject$(EXEEXT) print_maxfd$(EXEEXT) \
+	qual_fault$(EXEEXT) qual_inject-error-signal$(EXEEXT) \
+	qual_inject-retval$(EXEEXT) qual_inject-signal$(EXEEXT) \
+	qual_signal$(EXEEXT) quotactl-v$(EXEEXT) \
+	quotactl-xfs-v$(EXEEXT) redirect-fds$(EXEEXT) \
+	restart_syscall$(EXEEXT) run_expect_termsig$(EXEEXT) \
+	scm_rights$(EXEEXT) seccomp-filter-v$(EXEEXT) \
+	seccomp-strict$(EXEEXT) select-P$(EXEEXT) \
+	set_ptracer_any$(EXEEXT) set_sigblock$(EXEEXT) \
+	set_sigign$(EXEEXT) signal_receive$(EXEEXT) sleep$(EXEEXT) \
+	stack-fcall$(EXEEXT) stack-fcall-mangled$(EXEEXT) \
+	threads-execve$(EXEEXT) unblock_reset_raise$(EXEEXT) \
+	unix-pair-send-recv$(EXEEXT) \
 	unix-pair-sendto-recvfrom$(EXEEXT) vfork-f$(EXEEXT) \
 	wait4-v$(EXEEXT) waitid-v$(EXEEXT) zeroargc$(EXEEXT)
 ##am__append_1 = strace-k-demangle.test
@@ -181,7 +187,10 @@
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
 	$(top_srcdir)/m4/bpf_attr.m4 $(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/st_demangle.m4 $(top_srcdir)/m4/st_libdw.m4 \
+	$(top_srcdir)/m4/st_libunwind.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
+	$(top_srcdir)/m4/st_stacktrace.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) \
@@ -223,18 +232,25 @@
 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) \
-	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) dev-yy$(EXEEXT) dup$(EXEEXT) \
-	dup2$(EXEEXT) dup3$(EXEEXT) epoll_create$(EXEEXT) \
-	epoll_create1$(EXEEXT) epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) \
-	epoll_wait$(EXEEXT) erestartsys$(EXEEXT) eventfd$(EXEEXT) \
-	execve$(EXEEXT) execveat$(EXEEXT) faccessat$(EXEEXT) \
-	fadvise64$(EXEEXT) fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
-	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) fchdir$(EXEEXT) \
+	adjtimex$(EXEEXT) aio$(EXEEXT) aio_pgetevents$(EXEEXT) \
+	alarm$(EXEEXT) bpf$(EXEEXT) bpf-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-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) \
+	dev-yy$(EXEEXT) dup$(EXEEXT) dup2$(EXEEXT) dup3$(EXEEXT) \
+	epoll_create$(EXEEXT) epoll_create1$(EXEEXT) \
+	epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) epoll_wait$(EXEEXT) \
+	erestartsys$(EXEEXT) eventfd$(EXEEXT) execve$(EXEEXT) \
+	execveat$(EXEEXT) faccessat$(EXEEXT) fadvise64$(EXEEXT) \
+	fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
+	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) \
+	fanotify_mark-Xabbrev$(EXEEXT) fanotify_mark-Xraw$(EXEEXT) \
+	fanotify_mark-Xverbose$(EXEEXT) fchdir$(EXEEXT) \
 	fchmod$(EXEEXT) fchmodat$(EXEEXT) fchown$(EXEEXT) \
 	fchown32$(EXEEXT) fchownat$(EXEEXT) fcntl$(EXEEXT) \
 	fcntl64$(EXEEXT) fdatasync$(EXEEXT) fflush$(EXEEXT) \
@@ -255,49 +271,62 @@
 	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_kvm_run$(EXEEXT) \
-	ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) \
+	ioctl_evdev$(EXEEXT) ioctl_inotify$(EXEEXT) \
+	ioctl_kvm_run$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
+	ioctl_rtc$(EXEEXT) ioctl_perf$(EXEEXT) ioctl_ptp$(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) kcmp-y$(EXEEXT) \
-	kern_features$(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) \
+	ipc_msg$(EXEEXT) ipc_msg-Xabbrev$(EXEEXT) \
+	ipc_msg-Xraw$(EXEEXT) ipc_msg-Xverbose$(EXEEXT) \
+	ipc_msgbuf$(EXEEXT) ipc_msgbuf-Xabbrev$(EXEEXT) \
+	ipc_msgbuf-Xraw$(EXEEXT) ipc_msgbuf-Xverbose$(EXEEXT) \
+	ipc_sem$(EXEEXT) ipc_sem-Xabbrev$(EXEEXT) \
+	ipc_sem-Xraw$(EXEEXT) ipc_sem-Xverbose$(EXEEXT) \
+	ipc_shm$(EXEEXT) ipc_shm-Xabbrev$(EXEEXT) \
+	ipc_shm-Xraw$(EXEEXT) ipc_shm-Xverbose$(EXEEXT) kcmp$(EXEEXT) \
+	kcmp-y$(EXEEXT) kern_features$(EXEEXT) \
+	kexec_file_load$(EXEEXT) kexec_load$(EXEEXT) keyctl$(EXEEXT) \
+	keyctl-Xabbrev$(EXEEXT) keyctl-Xraw$(EXEEXT) \
+	keyctl-Xverbose$(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) \
+	mmap-Xabbrev$(EXEEXT) mmap-Xraw$(EXEEXT) \
+	mmap-Xverbose$(EXEEXT) mmap64$(EXEEXT) mmap64-Xabbrev$(EXEEXT) \
+	mmap64-Xraw$(EXEEXT) mmap64-Xverbose$(EXEEXT) mmsg$(EXEEXT) \
 	mmsg_name$(EXEEXT) modify_ldt$(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-inet6$(EXEEXT) net-yy-netlink$(EXEEXT) \
-	net-yy-unix$(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) \
-	nfnetlink_acct$(EXEEXT) nfnetlink_cthelper$(EXEEXT) \
-	nfnetlink_ctnetlink$(EXEEXT) nfnetlink_ctnetlink_exp$(EXEEXT) \
-	nfnetlink_cttimeout$(EXEEXT) nfnetlink_nft_compat$(EXEEXT) \
-	nfnetlink_nftables$(EXEEXT) nfnetlink_ipset$(EXEEXT) \
-	nfnetlink_osf$(EXEEXT) nfnetlink_queue$(EXEEXT) \
-	nfnetlink_ulog$(EXEEXT) nlattr$(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) \
+	mount-Xabbrev$(EXEEXT) mount-Xraw$(EXEEXT) \
+	mount-Xverbose$(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-inet6$(EXEEXT) \
+	net-yy-netlink$(EXEEXT) net-yy-unix$(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) nfnetlink_acct$(EXEEXT) \
+	nfnetlink_cthelper$(EXEEXT) nfnetlink_ctnetlink$(EXEEXT) \
+	nfnetlink_ctnetlink_exp$(EXEEXT) nfnetlink_cttimeout$(EXEEXT) \
+	nfnetlink_nft_compat$(EXEEXT) nfnetlink_nftables$(EXEEXT) \
+	nfnetlink_ipset$(EXEEXT) nfnetlink_osf$(EXEEXT) \
+	nfnetlink_queue$(EXEEXT) nfnetlink_ulog$(EXEEXT) \
+	nlattr$(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_af_spec$(EXEEXT) nlattr_ifla_brport$(EXEEXT) \
+	nlattr_ifla_linkinfo$(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_mdba_mdb_entry$(EXEEXT) \
@@ -309,11 +338,14 @@
 	nlattr_tc_stats$(EXEEXT) nlattr_tca_stab$(EXEEXT) \
 	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
-	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) oldfstat$(EXEEXT) \
-	oldlstat$(EXEEXT) oldselect$(EXEEXT) oldselect-efault$(EXEEXT) \
-	oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
-	osf_utimes$(EXEEXT) pause$(EXEEXT) perf_event_open$(EXEEXT) \
-	personality$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
+	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) \
+	old_mmap-Xabbrev$(EXEEXT) old_mmap-Xraw$(EXEEXT) \
+	old_mmap-Xverbose$(EXEEXT) oldfstat$(EXEEXT) oldlstat$(EXEEXT) \
+	oldselect$(EXEEXT) oldselect-efault$(EXEEXT) oldstat$(EXEEXT) \
+	open$(EXEEXT) openat$(EXEEXT) osf_utimes$(EXEEXT) \
+	pause$(EXEEXT) perf_event_open$(EXEEXT) personality$(EXEEXT) \
+	personality-Xabbrev$(EXEEXT) personality-Xraw$(EXEEXT) \
+	personality-Xverbose$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
 	pkey_alloc$(EXEEXT) pkey_free$(EXEEXT) pkey_mprotect$(EXEEXT) \
 	poll$(EXEEXT) poll-P$(EXEEXT) ppoll$(EXEEXT) ppoll-P$(EXEEXT) \
 	prctl-arg2-intptr$(EXEEXT) prctl-dumpable$(EXEEXT) \
@@ -361,7 +393,10 @@
 	sigaltstack$(EXEEXT) siginfo$(EXEEXT) signal$(EXEEXT) \
 	signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
 	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
-	so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
+	so_peercred$(EXEEXT) so_peercred-Xabbrev$(EXEEXT) \
+	so_peercred-Xraw$(EXEEXT) so_peercred-Xverbose$(EXEEXT) \
+	sock_filter-v$(EXEEXT) sock_filter-v-Xabbrev$(EXEEXT) \
+	sock_filter-v-Xraw$(EXEEXT) sock_filter-v-Xverbose$(EXEEXT) \
 	socketcall$(EXEEXT) sockopt-sol_netlink$(EXEEXT) \
 	splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
 	statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
@@ -418,6 +453,10 @@
 aio_OBJECTS = aio.$(OBJEXT)
 aio_LDADD = $(LDADD)
 aio_DEPENDENCIES = libtests.a
+aio_pgetevents_SOURCES = aio_pgetevents.c
+aio_pgetevents_OBJECTS = aio_pgetevents.$(OBJEXT)
+aio_pgetevents_LDADD = $(LDADD)
+aio_pgetevents_DEPENDENCIES = libtests.a
 alarm_SOURCES = alarm.c
 alarm_OBJECTS = alarm.$(OBJEXT)
 alarm_LDADD = $(LDADD)
@@ -449,6 +488,33 @@
 bpf_OBJECTS = bpf.$(OBJEXT)
 bpf_LDADD = $(LDADD)
 bpf_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_SOURCES = bpf-obj_get_info_by_fd.c
+bpf_obj_get_info_by_fd_OBJECTS = bpf-obj_get_info_by_fd.$(OBJEXT)
+bpf_obj_get_info_by_fd_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_SOURCES = bpf-obj_get_info_by_fd-prog.c
+bpf_obj_get_info_by_fd_prog_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_v_SOURCES =  \
+	bpf-obj_get_info_by_fd-prog-v.c
+bpf_obj_get_info_by_fd_prog_v_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_v_SOURCES = bpf-obj_get_info_by_fd-v.c
+bpf_obj_get_info_by_fd_v_OBJECTS = bpf-obj_get_info_by_fd-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_v_DEPENDENCIES = libtests.a
+bpf_success_SOURCES = bpf-success.c
+bpf_success_OBJECTS = bpf-success.$(OBJEXT)
+bpf_success_LDADD = $(LDADD)
+bpf_success_DEPENDENCIES = libtests.a
+bpf_success_v_SOURCES = bpf-success-v.c
+bpf_success_v_OBJECTS = bpf-success-v.$(OBJEXT)
+bpf_success_v_LDADD = $(LDADD)
+bpf_success_v_DEPENDENCIES = libtests.a
 bpf_v_SOURCES = bpf-v.c
 bpf_v_OBJECTS = bpf-v.$(OBJEXT)
 bpf_v_LDADD = $(LDADD)
@@ -616,6 +682,18 @@
 fanotify_mark_OBJECTS = fanotify_mark.$(OBJEXT)
 fanotify_mark_LDADD = $(LDADD)
 fanotify_mark_DEPENDENCIES = libtests.a
+fanotify_mark_Xabbrev_SOURCES = fanotify_mark-Xabbrev.c
+fanotify_mark_Xabbrev_OBJECTS = fanotify_mark-Xabbrev.$(OBJEXT)
+fanotify_mark_Xabbrev_LDADD = $(LDADD)
+fanotify_mark_Xabbrev_DEPENDENCIES = libtests.a
+fanotify_mark_Xraw_SOURCES = fanotify_mark-Xraw.c
+fanotify_mark_Xraw_OBJECTS = fanotify_mark-Xraw.$(OBJEXT)
+fanotify_mark_Xraw_LDADD = $(LDADD)
+fanotify_mark_Xraw_DEPENDENCIES = libtests.a
+fanotify_mark_Xverbose_SOURCES = fanotify_mark-Xverbose.c
+fanotify_mark_Xverbose_OBJECTS = fanotify_mark-Xverbose.$(OBJEXT)
+fanotify_mark_Xverbose_LDADD = $(LDADD)
+fanotify_mark_Xverbose_DEPENDENCIES = libtests.a
 fchdir_SOURCES = fchdir.c
 fchdir_OBJECTS = fchdir.$(OBJEXT)
 fchdir_LDADD = $(LDADD)
@@ -895,6 +973,10 @@
 ioctl_evdev_v_OBJECTS = ioctl_evdev-v.$(OBJEXT)
 ioctl_evdev_v_LDADD = $(LDADD)
 ioctl_evdev_v_DEPENDENCIES = libtests.a
+ioctl_inotify_SOURCES = ioctl_inotify.c
+ioctl_inotify_OBJECTS = ioctl_inotify.$(OBJEXT)
+ioctl_inotify_LDADD = $(LDADD)
+ioctl_inotify_DEPENDENCIES = libtests.a
 ioctl_kvm_run_SOURCES = ioctl_kvm_run.c
 ioctl_kvm_run_OBJECTS = ioctl_kvm_run.$(OBJEXT)
 ioctl_kvm_run_LDADD = $(LDADD)
@@ -919,6 +1001,18 @@
 ioctl_nsfs_OBJECTS = ioctl_nsfs.$(OBJEXT)
 ioctl_nsfs_LDADD = $(LDADD)
 ioctl_nsfs_DEPENDENCIES = libtests.a
+ioctl_perf_SOURCES = ioctl_perf.c
+ioctl_perf_OBJECTS = ioctl_perf.$(OBJEXT)
+ioctl_perf_LDADD = $(LDADD)
+ioctl_perf_DEPENDENCIES = libtests.a
+ioctl_perf_success_SOURCES = ioctl_perf-success.c
+ioctl_perf_success_OBJECTS = ioctl_perf-success.$(OBJEXT)
+ioctl_perf_success_LDADD = $(LDADD)
+ioctl_perf_success_DEPENDENCIES = libtests.a
+ioctl_ptp_SOURCES = ioctl_ptp.c
+ioctl_ptp_OBJECTS = ioctl_ptp.$(OBJEXT)
+ioctl_ptp_LDADD = $(LDADD)
+ioctl_ptp_DEPENDENCIES = libtests.a
 ioctl_rtc_SOURCES = ioctl_rtc.c
 ioctl_rtc_OBJECTS = ioctl_rtc.$(OBJEXT)
 ioctl_rtc_LDADD = $(LDADD)
@@ -975,18 +1069,66 @@
 ipc_msg_OBJECTS = ipc_msg.$(OBJEXT)
 ipc_msg_LDADD = $(LDADD)
 ipc_msg_DEPENDENCIES = libtests.a
+ipc_msg_Xabbrev_SOURCES = ipc_msg-Xabbrev.c
+ipc_msg_Xabbrev_OBJECTS = ipc_msg-Xabbrev.$(OBJEXT)
+ipc_msg_Xabbrev_LDADD = $(LDADD)
+ipc_msg_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msg_Xraw_SOURCES = ipc_msg-Xraw.c
+ipc_msg_Xraw_OBJECTS = ipc_msg-Xraw.$(OBJEXT)
+ipc_msg_Xraw_LDADD = $(LDADD)
+ipc_msg_Xraw_DEPENDENCIES = libtests.a
+ipc_msg_Xverbose_SOURCES = ipc_msg-Xverbose.c
+ipc_msg_Xverbose_OBJECTS = ipc_msg-Xverbose.$(OBJEXT)
+ipc_msg_Xverbose_LDADD = $(LDADD)
+ipc_msg_Xverbose_DEPENDENCIES = libtests.a
 ipc_msgbuf_SOURCES = ipc_msgbuf.c
 ipc_msgbuf_OBJECTS = ipc_msgbuf.$(OBJEXT)
 ipc_msgbuf_LDADD = $(LDADD)
 ipc_msgbuf_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xabbrev_SOURCES = ipc_msgbuf-Xabbrev.c
+ipc_msgbuf_Xabbrev_OBJECTS = ipc_msgbuf-Xabbrev.$(OBJEXT)
+ipc_msgbuf_Xabbrev_LDADD = $(LDADD)
+ipc_msgbuf_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xraw_SOURCES = ipc_msgbuf-Xraw.c
+ipc_msgbuf_Xraw_OBJECTS = ipc_msgbuf-Xraw.$(OBJEXT)
+ipc_msgbuf_Xraw_LDADD = $(LDADD)
+ipc_msgbuf_Xraw_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xverbose_SOURCES = ipc_msgbuf-Xverbose.c
+ipc_msgbuf_Xverbose_OBJECTS = ipc_msgbuf-Xverbose.$(OBJEXT)
+ipc_msgbuf_Xverbose_LDADD = $(LDADD)
+ipc_msgbuf_Xverbose_DEPENDENCIES = libtests.a
 ipc_sem_SOURCES = ipc_sem.c
 ipc_sem_OBJECTS = ipc_sem.$(OBJEXT)
 ipc_sem_LDADD = $(LDADD)
 ipc_sem_DEPENDENCIES = libtests.a
+ipc_sem_Xabbrev_SOURCES = ipc_sem-Xabbrev.c
+ipc_sem_Xabbrev_OBJECTS = ipc_sem-Xabbrev.$(OBJEXT)
+ipc_sem_Xabbrev_LDADD = $(LDADD)
+ipc_sem_Xabbrev_DEPENDENCIES = libtests.a
+ipc_sem_Xraw_SOURCES = ipc_sem-Xraw.c
+ipc_sem_Xraw_OBJECTS = ipc_sem-Xraw.$(OBJEXT)
+ipc_sem_Xraw_LDADD = $(LDADD)
+ipc_sem_Xraw_DEPENDENCIES = libtests.a
+ipc_sem_Xverbose_SOURCES = ipc_sem-Xverbose.c
+ipc_sem_Xverbose_OBJECTS = ipc_sem-Xverbose.$(OBJEXT)
+ipc_sem_Xverbose_LDADD = $(LDADD)
+ipc_sem_Xverbose_DEPENDENCIES = libtests.a
 ipc_shm_SOURCES = ipc_shm.c
 ipc_shm_OBJECTS = ipc_shm.$(OBJEXT)
 ipc_shm_LDADD = $(LDADD)
 ipc_shm_DEPENDENCIES = libtests.a
+ipc_shm_Xabbrev_SOURCES = ipc_shm-Xabbrev.c
+ipc_shm_Xabbrev_OBJECTS = ipc_shm-Xabbrev.$(OBJEXT)
+ipc_shm_Xabbrev_LDADD = $(LDADD)
+ipc_shm_Xabbrev_DEPENDENCIES = libtests.a
+ipc_shm_Xraw_SOURCES = ipc_shm-Xraw.c
+ipc_shm_Xraw_OBJECTS = ipc_shm-Xraw.$(OBJEXT)
+ipc_shm_Xraw_LDADD = $(LDADD)
+ipc_shm_Xraw_DEPENDENCIES = libtests.a
+ipc_shm_Xverbose_SOURCES = ipc_shm-Xverbose.c
+ipc_shm_Xverbose_OBJECTS = ipc_shm-Xverbose.$(OBJEXT)
+ipc_shm_Xverbose_LDADD = $(LDADD)
+ipc_shm_Xverbose_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)
@@ -1015,6 +1157,18 @@
 keyctl_OBJECTS = keyctl.$(OBJEXT)
 keyctl_LDADD = $(LDADD)
 keyctl_DEPENDENCIES = libtests.a
+keyctl_Xabbrev_SOURCES = keyctl-Xabbrev.c
+keyctl_Xabbrev_OBJECTS = keyctl-Xabbrev.$(OBJEXT)
+keyctl_Xabbrev_LDADD = $(LDADD)
+keyctl_Xabbrev_DEPENDENCIES = libtests.a
+keyctl_Xraw_SOURCES = keyctl-Xraw.c
+keyctl_Xraw_OBJECTS = keyctl-Xraw.$(OBJEXT)
+keyctl_Xraw_LDADD = $(LDADD)
+keyctl_Xraw_DEPENDENCIES = libtests.a
+keyctl_Xverbose_SOURCES = keyctl-Xverbose.c
+keyctl_Xverbose_OBJECTS = keyctl-Xverbose.$(OBJEXT)
+keyctl_Xverbose_LDADD = $(LDADD)
+keyctl_Xverbose_DEPENDENCIES = libtests.a
 kill_SOURCES = kill.c
 kill_OBJECTS = kill.$(OBJEXT)
 kill_LDADD = $(LDADD)
@@ -1122,10 +1276,34 @@
 mmap_OBJECTS = mmap.$(OBJEXT)
 mmap_LDADD = $(LDADD)
 mmap_DEPENDENCIES = libtests.a
+mmap_Xabbrev_SOURCES = mmap-Xabbrev.c
+mmap_Xabbrev_OBJECTS = mmap-Xabbrev.$(OBJEXT)
+mmap_Xabbrev_LDADD = $(LDADD)
+mmap_Xabbrev_DEPENDENCIES = libtests.a
+mmap_Xraw_SOURCES = mmap-Xraw.c
+mmap_Xraw_OBJECTS = mmap-Xraw.$(OBJEXT)
+mmap_Xraw_LDADD = $(LDADD)
+mmap_Xraw_DEPENDENCIES = libtests.a
+mmap_Xverbose_SOURCES = mmap-Xverbose.c
+mmap_Xverbose_OBJECTS = mmap-Xverbose.$(OBJEXT)
+mmap_Xverbose_LDADD = $(LDADD)
+mmap_Xverbose_DEPENDENCIES = libtests.a
 mmap64_SOURCES = mmap64.c
 mmap64_OBJECTS = mmap64-mmap64.$(OBJEXT)
 mmap64_LDADD = $(LDADD)
 mmap64_DEPENDENCIES = libtests.a
+mmap64_Xabbrev_SOURCES = mmap64-Xabbrev.c
+mmap64_Xabbrev_OBJECTS = mmap64_Xabbrev-mmap64-Xabbrev.$(OBJEXT)
+mmap64_Xabbrev_LDADD = $(LDADD)
+mmap64_Xabbrev_DEPENDENCIES = libtests.a
+mmap64_Xraw_SOURCES = mmap64-Xraw.c
+mmap64_Xraw_OBJECTS = mmap64_Xraw-mmap64-Xraw.$(OBJEXT)
+mmap64_Xraw_LDADD = $(LDADD)
+mmap64_Xraw_DEPENDENCIES = libtests.a
+mmap64_Xverbose_SOURCES = mmap64-Xverbose.c
+mmap64_Xverbose_OBJECTS = mmap64_Xverbose-mmap64-Xverbose.$(OBJEXT)
+mmap64_Xverbose_LDADD = $(LDADD)
+mmap64_Xverbose_DEPENDENCIES = libtests.a
 mmsg_SOURCES = mmsg.c
 mmsg_OBJECTS = mmsg.$(OBJEXT)
 mmsg_LDADD = $(LDADD)
@@ -1150,6 +1328,18 @@
 mount_OBJECTS = mount.$(OBJEXT)
 mount_LDADD = $(LDADD)
 mount_DEPENDENCIES = libtests.a
+mount_Xabbrev_SOURCES = mount-Xabbrev.c
+mount_Xabbrev_OBJECTS = mount-Xabbrev.$(OBJEXT)
+mount_Xabbrev_LDADD = $(LDADD)
+mount_Xabbrev_DEPENDENCIES = libtests.a
+mount_Xraw_SOURCES = mount-Xraw.c
+mount_Xraw_OBJECTS = mount-Xraw.$(OBJEXT)
+mount_Xraw_LDADD = $(LDADD)
+mount_Xraw_DEPENDENCIES = libtests.a
+mount_Xverbose_SOURCES = mount-Xverbose.c
+mount_Xverbose_OBJECTS = mount-Xverbose.$(OBJEXT)
+mount_Xverbose_LDADD = $(LDADD)
+mount_Xverbose_DEPENDENCIES = libtests.a
 move_pages_SOURCES = move_pages.c
 move_pages_OBJECTS = move_pages.$(OBJEXT)
 move_pages_LDADD = $(LDADD)
@@ -1353,10 +1543,18 @@
 nlattr_ifinfomsg_OBJECTS = nlattr_ifinfomsg.$(OBJEXT)
 nlattr_ifinfomsg_LDADD = $(LDADD)
 nlattr_ifinfomsg_DEPENDENCIES = libtests.a
+nlattr_ifla_af_spec_SOURCES = nlattr_ifla_af_spec.c
+nlattr_ifla_af_spec_OBJECTS = nlattr_ifla_af_spec.$(OBJEXT)
+nlattr_ifla_af_spec_LDADD = $(LDADD)
+nlattr_ifla_af_spec_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_linkinfo_SOURCES = nlattr_ifla_linkinfo.c
+nlattr_ifla_linkinfo_OBJECTS = nlattr_ifla_linkinfo.$(OBJEXT)
+nlattr_ifla_linkinfo_LDADD = $(LDADD)
+nlattr_ifla_linkinfo_DEPENDENCIES = libtests.a
 nlattr_ifla_port_SOURCES = nlattr_ifla_port.c
 nlattr_ifla_port_OBJECTS = nlattr_ifla_port.$(OBJEXT)
 nlattr_ifla_port_LDADD = $(LDADD)
@@ -1458,6 +1656,18 @@
 old_mmap_P_OBJECTS = old_mmap-P.$(OBJEXT)
 old_mmap_P_LDADD = $(LDADD)
 old_mmap_P_DEPENDENCIES = libtests.a
+old_mmap_Xabbrev_SOURCES = old_mmap-Xabbrev.c
+old_mmap_Xabbrev_OBJECTS = old_mmap-Xabbrev.$(OBJEXT)
+old_mmap_Xabbrev_LDADD = $(LDADD)
+old_mmap_Xabbrev_DEPENDENCIES = libtests.a
+old_mmap_Xraw_SOURCES = old_mmap-Xraw.c
+old_mmap_Xraw_OBJECTS = old_mmap-Xraw.$(OBJEXT)
+old_mmap_Xraw_LDADD = $(LDADD)
+old_mmap_Xraw_DEPENDENCIES = libtests.a
+old_mmap_Xverbose_SOURCES = old_mmap-Xverbose.c
+old_mmap_Xverbose_OBJECTS = old_mmap-Xverbose.$(OBJEXT)
+old_mmap_Xverbose_LDADD = $(LDADD)
+old_mmap_Xverbose_DEPENDENCIES = libtests.a
 old_mmap_v_none_SOURCES = old_mmap-v-none.c
 old_mmap_v_none_OBJECTS = old_mmap-v-none.$(OBJEXT)
 old_mmap_v_none_LDADD = $(LDADD)
@@ -1526,6 +1736,18 @@
 personality_OBJECTS = personality.$(OBJEXT)
 personality_LDADD = $(LDADD)
 personality_DEPENDENCIES = libtests.a
+personality_Xabbrev_SOURCES = personality-Xabbrev.c
+personality_Xabbrev_OBJECTS = personality-Xabbrev.$(OBJEXT)
+personality_Xabbrev_LDADD = $(LDADD)
+personality_Xabbrev_DEPENDENCIES = libtests.a
+personality_Xraw_SOURCES = personality-Xraw.c
+personality_Xraw_OBJECTS = personality-Xraw.$(OBJEXT)
+personality_Xraw_LDADD = $(LDADD)
+personality_Xraw_DEPENDENCIES = libtests.a
+personality_Xverbose_SOURCES = personality-Xverbose.c
+personality_Xverbose_OBJECTS = personality-Xverbose.$(OBJEXT)
+personality_Xverbose_LDADD = $(LDADD)
+personality_Xverbose_DEPENDENCIES = libtests.a
 pipe_SOURCES = pipe.c
 pipe_OBJECTS = pipe.$(OBJEXT)
 pipe_LDADD = $(LDADD)
@@ -1598,6 +1820,10 @@
 prctl_securebits_OBJECTS = prctl-securebits.$(OBJEXT)
 prctl_securebits_LDADD = $(LDADD)
 prctl_securebits_DEPENDENCIES = libtests.a
+prctl_spec_inject_SOURCES = prctl-spec-inject.c
+prctl_spec_inject_OBJECTS = prctl-spec-inject.$(OBJEXT)
+prctl_spec_inject_LDADD = $(LDADD)
+prctl_spec_inject_DEPENDENCIES = libtests.a
 prctl_tid_address_SOURCES = prctl-tid_address.c
 prctl_tid_address_OBJECTS = prctl-tid_address.$(OBJEXT)
 prctl_tid_address_LDADD = $(LDADD)
@@ -2088,10 +2314,34 @@
 so_peercred_OBJECTS = so_peercred.$(OBJEXT)
 so_peercred_LDADD = $(LDADD)
 so_peercred_DEPENDENCIES = libtests.a
+so_peercred_Xabbrev_SOURCES = so_peercred-Xabbrev.c
+so_peercred_Xabbrev_OBJECTS = so_peercred-Xabbrev.$(OBJEXT)
+so_peercred_Xabbrev_LDADD = $(LDADD)
+so_peercred_Xabbrev_DEPENDENCIES = libtests.a
+so_peercred_Xraw_SOURCES = so_peercred-Xraw.c
+so_peercred_Xraw_OBJECTS = so_peercred-Xraw.$(OBJEXT)
+so_peercred_Xraw_LDADD = $(LDADD)
+so_peercred_Xraw_DEPENDENCIES = libtests.a
+so_peercred_Xverbose_SOURCES = so_peercred-Xverbose.c
+so_peercred_Xverbose_OBJECTS = so_peercred-Xverbose.$(OBJEXT)
+so_peercred_Xverbose_LDADD = $(LDADD)
+so_peercred_Xverbose_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
+sock_filter_v_Xabbrev_SOURCES = sock_filter-v-Xabbrev.c
+sock_filter_v_Xabbrev_OBJECTS = sock_filter-v-Xabbrev.$(OBJEXT)
+sock_filter_v_Xabbrev_LDADD = $(LDADD)
+sock_filter_v_Xabbrev_DEPENDENCIES = libtests.a
+sock_filter_v_Xraw_SOURCES = sock_filter-v-Xraw.c
+sock_filter_v_Xraw_OBJECTS = sock_filter-v-Xraw.$(OBJEXT)
+sock_filter_v_Xraw_LDADD = $(LDADD)
+sock_filter_v_Xraw_DEPENDENCIES = libtests.a
+sock_filter_v_Xverbose_SOURCES = sock_filter-v-Xverbose.c
+sock_filter_v_Xverbose_OBJECTS = sock_filter-v-Xverbose.$(OBJEXT)
+sock_filter_v_Xverbose_LDADD = $(LDADD)
+sock_filter_v_Xverbose_DEPENDENCIES = libtests.a
 socketcall_SOURCES = socketcall.c
 socketcall_OBJECTS = socketcall.$(OBJEXT)
 socketcall_LDADD = $(LDADD)
@@ -2402,45 +2652,58 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c \
-	btrfs.c caps.c caps-abbrev.c check_sigblock.c check_sigign.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 delay.c \
-	delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	accept4.c access.c acct.c add_key.c adjtimex.c aio.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2456,59 +2719,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2526,44 +2794,57 @@
 	xettimeofday.c zeroargc.c
 DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c \
-	check_sigblock.c check_sigign.c chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	fallocate.c fanotify_init.c fanotify_mark.c \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2579,59 +2860,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2879,12 +3165,12 @@
       b='$*';; \
   esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing aclocal-1.14
+ACLOCAL = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing aclocal-1.14
 AMTAR = $${TAR-tar}
 AM_DEFAULT_VERBOSITY = 1
-AUTOCONF = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing autoheader
-AUTOMAKE = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing automake-1.14
+AUTOCONF = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing autoconf
+AUTOHEADER = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing autoheader
+AUTOMAKE = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing automake-1.14
 AWK = gawk
 BUILD_EXEEXT = 
 BUILD_OBJEXT = 
@@ -2905,7 +3191,7 @@
 CPPFLAGS_FOR_BUILD = 
 CPP_FOR_BUILD = gcc -E
 CYGPATH_W = echo
-DEB_CHANGELOGTIME = Thu, 14 Jun 2018 16:29:09 -0700
+DEB_CHANGELOGTIME = Fri, 15 Jun 2018 17:54:18 +0000
 DEFS = -DHAVE_CONFIG_H
 DEPDIR = .deps
 ECHO_C = 
@@ -2932,23 +3218,23 @@
 LIBS = 
 LTLIBOBJS = 
 MAINT = #
-MAKEINFO = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing makeinfo
-MANPAGE_DATE = 2018-04-04
+MAKEINFO = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing makeinfo
+MANPAGE_DATE = 2018-06-13
 MIPS_ABI = 
 MKDIR_P = /bin/mkdir -p
 OBJEXT = o
 PACKAGE = strace
 PACKAGE_BUGREPORT = strace-devel@lists.strace.io
 PACKAGE_NAME = strace
-PACKAGE_STRING = strace 4.22
+PACKAGE_STRING = strace 4.23
 PACKAGE_TARNAME = strace
 PACKAGE_URL = https://strace.io
-PACKAGE_VERSION = 4.22
+PACKAGE_VERSION = 4.23
 PATH_SEPARATOR = :
 PERL = /usr/bin/perl
 RANLIB = aarch64-linux-android-ranlib
 READELF = aarch64-linux-android-readelf
-RPM_CHANGELOGTIME = Thu Jun 14 2018
+RPM_CHANGELOGTIME = Fri Jun 15 2018
 SED = /bin/sed
 SET_MAKE = 
 SHELL = /bin/sh
@@ -2957,13 +3243,13 @@
 STRIP = aarch64-linux-android-strip
 VALGRIND = valgrind
 VALGRIND_ENABLED = yes
-VERSION = 4.22
+VERSION = 4.23
 WARN_CFLAGS =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wnested-externs -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
 WARN_CFLAGS_FOR_BUILD =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Wimplicit-fallthrough=5 -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
-abs_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.22/tests-mx32
-abs_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.22/tests-mx32
-abs_top_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
-abs_top_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
+abs_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.23/tests-mx32
+abs_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.23/tests-mx32
+abs_top_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
+abs_top_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
 ac_ct_CC = 
 ac_ct_CC_FOR_BUILD = gcc
 am__include = include
@@ -2999,8 +3285,12 @@
 htmldir = ${docdir}
 includedir = ${prefix}/include
 infodir = ${datarootdir}/info
-install_sh = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/install-sh
+install_sh = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/install-sh
 libdir = ${exec_prefix}/lib
+libdw_CFLAGS = 
+libdw_CPPFLAGS = 
+libdw_LDFLAGS = 
+libdw_LIBS = 
 libexecdir = ${exec_prefix}/libexec
 libiberty_CPPFLAGS = 
 libiberty_LDFLAGS = 
@@ -3095,9 +3385,14 @@
   add_key \
   adjtimex \
   aio \
+  aio_pgetevents \
   alarm \
   bpf \
   bpf-v \
+  bpf-obj_get_info_by_fd \
+  bpf-obj_get_info_by_fd-v \
+  bpf-obj_get_info_by_fd-prog \
+  bpf-obj_get_info_by_fd-prog-v \
   brk \
   btrfs \
   caps \
@@ -3130,6 +3425,9 @@
   fallocate \
   fanotify_init \
   fanotify_mark \
+  fanotify_mark-Xabbrev \
+  fanotify_mark-Xraw \
+  fanotify_mark-Xverbose \
   fchdir \
   fchmod \
   fchmodat \
@@ -3192,10 +3490,13 @@
   ioctl_block \
   ioctl_dm \
   ioctl_evdev \
+  ioctl_inotify \
   ioctl_kvm_run \
   ioctl_loop \
   ioctl_mtd \
   ioctl_rtc \
+  ioctl_perf \
+  ioctl_ptp \
   ioctl_scsi \
   ioctl_sg_io_v3 \
   ioctl_sg_io_v4 \
@@ -3208,15 +3509,30 @@
   ip_mreq \
   ipc \
   ipc_msg \
+  ipc_msg-Xabbrev \
+  ipc_msg-Xraw \
+  ipc_msg-Xverbose \
   ipc_msgbuf \
+  ipc_msgbuf-Xabbrev \
+  ipc_msgbuf-Xraw \
+  ipc_msgbuf-Xverbose \
   ipc_sem \
+  ipc_sem-Xabbrev \
+  ipc_sem-Xraw \
+  ipc_sem-Xverbose \
   ipc_shm \
+  ipc_shm-Xabbrev \
+  ipc_shm-Xraw \
+  ipc_shm-Xverbose \
   kcmp \
   kcmp-y \
   kern_features \
   kexec_file_load \
   kexec_load \
   keyctl \
+  keyctl-Xabbrev \
+  keyctl-Xraw \
+  keyctl-Xverbose \
   kill \
   lchown \
   lchown32 \
@@ -3241,11 +3557,20 @@
   mlock2 \
   mlockall \
   mmap \
+  mmap-Xabbrev \
+  mmap-Xraw \
+  mmap-Xverbose \
   mmap64 \
+  mmap64-Xabbrev \
+  mmap64-Xraw \
+  mmap64-Xverbose \
   mmsg \
   mmsg_name \
   modify_ldt \
   mount \
+  mount-Xabbrev \
+  mount-Xraw \
+  mount-Xverbose \
   move_pages \
   mq \
   mq_sendrecv \
@@ -3292,7 +3617,9 @@
   nlattr_ifaddrlblmsg \
   nlattr_ifaddrmsg \
   nlattr_ifinfomsg \
+  nlattr_ifla_af_spec \
   nlattr_ifla_brport \
+  nlattr_ifla_linkinfo \
   nlattr_ifla_port \
   nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
@@ -3317,6 +3644,9 @@
   old_mmap \
   old_mmap-P \
   old_mmap-v-none \
+  old_mmap-Xabbrev \
+  old_mmap-Xraw \
+  old_mmap-Xverbose \
   oldfstat \
   oldlstat \
   oldselect \
@@ -3328,6 +3658,9 @@
   pause \
   perf_event_open \
   personality \
+  personality-Xabbrev \
+  personality-Xraw \
+  personality-Xverbose \
   pipe \
   pipe2 \
   pkey_alloc \
@@ -3444,7 +3777,13 @@
   sigsuspend \
   so_linger \
   so_peercred \
+  so_peercred-Xabbrev \
+  so_peercred-Xraw \
+  so_peercred-Xverbose \
   sock_filter-v \
+  sock_filter-v-Xabbrev \
+  sock_filter-v-Xraw \
+  sock_filter-v-Xverbose \
   socketcall \
   sockopt-sol_netlink \
   splice \
@@ -3515,6 +3854,9 @@
 localtime_LDADD = $(clock_LIBS) $(LDADD)
 lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xraw_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xverbose_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mq_LDADD = $(mq_LIBS) $(LDADD)
 newfstatat_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 pc_LDADD = $(dl_LIBS) $(LDADD)
@@ -3539,10 +3881,14 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
 GEN_TESTS = _newselect.gen.test _newselect-P.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 \
+	add_key.gen.test adjtimex.gen.test aio.gen.test \
+	aio_pgetevents.gen.test alarm.gen.test bpf.gen.test \
+	bpf-v.gen.test bpf-obj_get_info_by_fd.gen.test \
+	bpf-obj_get_info_by_fd-v.gen.test \
+	bpf-obj_get_info_by_fd-prog.gen.test \
+	bpf-obj_get_info_by_fd-prog-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 dev-yy.gen.test dup.gen.test \
 	dup2.gen.test dup3.gen.test epoll_create.gen.test \
@@ -3550,70 +3896,85 @@
 	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 \
-	fsync-y.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_dm.gen.test ioctl_dm-v.gen.test \
-	ioctl_evdev.gen.test ioctl_evdev-v.gen.test \
+	fanotify_mark.gen.test fanotify_mark-Xabbrev.gen.test \
+	fanotify_mark-Xraw.gen.test fanotify_mark-Xverbose.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 fsync-y.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_dm.gen.test \
+	ioctl_dm-v.gen.test ioctl_evdev.gen.test \
+	ioctl_evdev-v.gen.test ioctl_inotify.gen.test \
 	ioctl_kvm_run.gen.test ioctl_loop.gen.test \
 	ioctl_loop-nv.gen.test ioctl_loop-v.gen.test \
-	ioctl_mtd.gen.test ioctl_nsfs.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_sock_gifconf.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 \
-	kcmp-y.gen.test kern_features.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 \
+	ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_perf.gen.test \
+	ioctl_ptp.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_sock_gifconf.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_msg-Xabbrev.gen.test \
+	ipc_msg-Xraw.gen.test ipc_msg-Xverbose.gen.test \
+	ipc_msgbuf-Xabbrev.gen.test ipc_msgbuf-Xraw.gen.test \
+	ipc_msgbuf-Xverbose.gen.test ipc_sem.gen.test \
+	ipc_sem-Xabbrev.gen.test ipc_sem-Xraw.gen.test \
+	ipc_sem-Xverbose.gen.test ipc_shm.gen.test \
+	ipc_shm-Xabbrev.gen.test ipc_shm-Xraw.gen.test \
+	ipc_shm-Xverbose.gen.test kcmp.gen.test kcmp-y.gen.test \
+	kern_features.gen.test kexec_file_load.gen.test \
+	kexec_load.gen.test keyctl.gen.test keyctl-Xabbrev.gen.test \
+	keyctl-Xraw.gen.test keyctl-Xverbose.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 modify_ldt.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 net-yy-inet6.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 \
-	nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test \
-	nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test \
-	nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test \
-	nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test \
-	nfnetlink_osf.gen.test nfnetlink_queue.gen.test \
-	nfnetlink_ulog.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 \
+	mmap-Xabbrev.gen.test mmap-Xraw.gen.test \
+	mmap-Xverbose.gen.test mmap64.gen.test mmap64-Xabbrev.gen.test \
+	mmap64-Xraw.gen.test mmap64-Xverbose.gen.test mmsg.gen.test \
+	mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test \
+	modify_ldt.gen.test mount.gen.test mount-Xabbrev.gen.test \
+	mount-Xraw.gen.test mount-Xverbose.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 \
+	net-yy-inet6.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 nfnetlink_acct.gen.test \
+	nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test \
+	nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test \
+	nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test \
+	nfnetlink_nftables.gen.test nfnetlink_osf.gen.test \
+	nfnetlink_queue.gen.test nfnetlink_ulog.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_af_spec.gen.test \
+	nlattr_ifla_brport.gen.test nlattr_ifla_linkinfo.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_mdba_mdb_entry.gen.test \
@@ -3625,16 +3986,19 @@
 	nlattr_tc_stats.gen.test nlattr_tca_stab.gen.test \
 	nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
 	nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
-	old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test \
-	oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test \
+	old_mmap-P.gen.test old_mmap-v-none.gen.test \
+	old_mmap-Xabbrev.gen.test old_mmap-Xraw.gen.test \
+	old_mmap-Xverbose.gen.test oldfstat.gen.test oldlstat.gen.test \
+	oldselect.gen.test oldselect-P.gen.test \
 	oldselect-efault.gen.test oldselect-efault-P.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-P.gen.test ppoll-v.gen.test \
-	pread64-pwrite64.gen.test preadv.gen.test \
+	perf_event_open_unabbrev.gen.test personality-Xabbrev.gen.test \
+	personality-Xraw.gen.test personality-Xverbose.gen.test \
+	pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test \
+	pkey_mprotect.gen.test ppoll.gen.test ppoll-P.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 \
@@ -3675,22 +4039,29 @@
 	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 sockopt-sol_netlink.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 \
+	so_linger.gen.test so_peercred.gen.test \
+	so_peercred-Xabbrev.gen.test so_peercred-Xraw.gen.test \
+	so_peercred-Xverbose.gen.test sock_filter-v.gen.test \
+	sock_filter-v-Xabbrev.gen.test sock_filter-v-Xraw.gen.test \
+	sock_filter-v-Xverbose.gen.test socketcall.gen.test \
+	sockopt-sol_netlink.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_personality_32.gen.test \
+	trace_personality_64.gen.test trace_personality_x32.gen.test \
+	trace_personality_regex_32.gen.test \
+	trace_personality_regex_64.gen.test \
+	trace_personality_regex_x32.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 \
@@ -3700,13 +4071,20 @@
 	xattr-strings.gen.test xet_robust_list.gen.test \
 	xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test \
 	xettimeofday.gen.test
-LIBUNWIND_TESTS = 
-#LIBUNWIND_TESTS = strace-k.test $(am__append_1)
+STACKTRACE_TESTS = 
+#STACKTRACE_TESTS = strace-k.test \
+#	$(am__append_1)
 DECODER_TESTS = \
+	bpf-success.test \
+	bpf-success-v.test \
 	brk.test \
 	btrfs-v.test \
 	btrfs-vw.test \
+	btrfs-vwX.test \
+	btrfs-vX.test \
 	btrfs-w.test \
+	btrfs-wX.test \
+	btrfs-X.test \
 	caps-abbrev.test \
 	caps.test \
 	eventfd.test \
@@ -3716,6 +4094,7 @@
 	futex.test \
 	getuid.test \
 	ioctl.test \
+	ioctl_perf-success.test \
 	ipc_msgbuf.test \
 	kern_features-fault.test \
 	llseek.test \
@@ -3742,6 +4121,7 @@
 	prctl-seccomp-filter-v.test \
 	prctl-seccomp-strict.test \
 	prctl-securebits.test \
+	prctl-spec-inject.test \
 	prctl-tid_address.test \
 	prctl-tsc.test \
 	qual_fault-exit_group.test \
@@ -3790,9 +4170,13 @@
 	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
+	qual_fault-syscall.test \
 	qual_inject-error-signal.test \
+	qual_inject-error-signal-syscall.test \
 	qual_inject-retval.test \
+	qual_inject-retval-syscall.test \
 	qual_inject-signal.test \
+	qual_inject-signal-syscall.test \
 	qual_inject-syntax.test \
 	qual_signal.test \
 	qual_syscall.test \
@@ -3816,8 +4200,8 @@
 	# end of MISC_TESTS
 
 XFAIL_TESTS_ = 
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
@@ -3838,6 +4222,7 @@
 	count-f.expected \
 	eventfd.expected \
 	fadvise.h \
+	fcntl-common.c \
 	filter-unavailable.expected \
 	fstatat.c \
 	fstatx.c \
@@ -3848,12 +4233,12 @@
 	init.sh \
 	init_delete_module.h \
 	ipc.sh \
-	ipc_msgbuf.expected \
 	ksysent.sed \
 	lstatx.c \
 	match.awk \
 	net.expected \
 	netlink_sock_diag-v.sh \
+	nlattr_ifla.h \
 	pipe.expected \
 	print_user_desc.c \
 	process_vm_readv_writev.c \
@@ -3861,6 +4246,8 @@
 	qual_fault-exit_group.expected \
 	qual_inject-error-signal.expected \
 	qual_inject-signal.expected \
+	qualify_personality.sh \
+	qualify_personality_empty.in \
 	quotactl.h \
 	regex.in \
 	rt_sigaction.awk \
@@ -3878,16 +4265,23 @@
 	strace-E.expected \
 	strace-T.expected \
 	strace-ff.expected \
+	strace-k-demangle.expected \
 	strace-k-demangle.test \
+	strace-k.expected \
 	strace-k.test \
 	strace-r.expected \
 	strace.supp \
-	struct_flock.c \
 	sun_path.expected \
 	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
+	trace_personality_32.in \
+	trace_personality_64.in \
+	trace_personality_x32.in \
+	trace_personality_regex_32.in \
+	trace_personality_regex_64.in \
+	trace_personality_regex_x32.in \
 	trace_question.in \
 	trace_stat.in \
 	trace_stat_like.in \
@@ -4001,6 +4395,10 @@
 	@rm -f aio$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(aio_OBJECTS) $(aio_LDADD) $(LIBS)
 
+aio_pgetevents$(EXEEXT): $(aio_pgetevents_OBJECTS) $(aio_pgetevents_DEPENDENCIES) $(EXTRA_aio_pgetevents_DEPENDENCIES) 
+	@rm -f aio_pgetevents$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(aio_pgetevents_OBJECTS) $(aio_pgetevents_LDADD) $(LIBS)
+
 alarm$(EXEEXT): $(alarm_OBJECTS) $(alarm_DEPENDENCIES) $(EXTRA_alarm_DEPENDENCIES) 
 	@rm -f alarm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(alarm_OBJECTS) $(alarm_LDADD) $(LIBS)
@@ -4033,6 +4431,30 @@
 	@rm -f bpf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bpf_OBJECTS) $(bpf_LDADD) $(LIBS)
 
+bpf-obj_get_info_by_fd$(EXEEXT): $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog-v$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-v$(EXEEXT): $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_LDADD) $(LIBS)
+
+bpf-success$(EXEEXT): $(bpf_success_OBJECTS) $(bpf_success_DEPENDENCIES) $(EXTRA_bpf_success_DEPENDENCIES) 
+	@rm -f bpf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_OBJECTS) $(bpf_success_LDADD) $(LIBS)
+
+bpf-success-v$(EXEEXT): $(bpf_success_v_OBJECTS) $(bpf_success_v_DEPENDENCIES) $(EXTRA_bpf_success_v_DEPENDENCIES) 
+	@rm -f bpf-success-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_v_OBJECTS) $(bpf_success_v_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)
@@ -4201,6 +4623,18 @@
 	@rm -f fanotify_mark$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fanotify_mark_OBJECTS) $(fanotify_mark_LDADD) $(LIBS)
 
+fanotify_mark-Xabbrev$(EXEEXT): $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_DEPENDENCIES) $(EXTRA_fanotify_mark_Xabbrev_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_LDADD) $(LIBS)
+
+fanotify_mark-Xraw$(EXEEXT): $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_DEPENDENCIES) $(EXTRA_fanotify_mark_Xraw_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_LDADD) $(LIBS)
+
+fanotify_mark-Xverbose$(EXEEXT): $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_DEPENDENCIES) $(EXTRA_fanotify_mark_Xverbose_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_LDADD) $(LIBS)
+
 fchdir$(EXEEXT): $(fchdir_OBJECTS) $(fchdir_DEPENDENCIES) $(EXTRA_fchdir_DEPENDENCIES) 
 	@rm -f fchdir$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fchdir_OBJECTS) $(fchdir_LDADD) $(LIBS)
@@ -4481,6 +4915,10 @@
 	@rm -f ioctl_evdev-v$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_evdev_v_OBJECTS) $(ioctl_evdev_v_LDADD) $(LIBS)
 
+ioctl_inotify$(EXEEXT): $(ioctl_inotify_OBJECTS) $(ioctl_inotify_DEPENDENCIES) $(EXTRA_ioctl_inotify_DEPENDENCIES) 
+	@rm -f ioctl_inotify$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_inotify_OBJECTS) $(ioctl_inotify_LDADD) $(LIBS)
+
 ioctl_kvm_run$(EXEEXT): $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_DEPENDENCIES) $(EXTRA_ioctl_kvm_run_DEPENDENCIES) 
 	@rm -f ioctl_kvm_run$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_LDADD) $(LIBS)
@@ -4505,6 +4943,18 @@
 	@rm -f ioctl_nsfs$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_nsfs_OBJECTS) $(ioctl_nsfs_LDADD) $(LIBS)
 
+ioctl_perf$(EXEEXT): $(ioctl_perf_OBJECTS) $(ioctl_perf_DEPENDENCIES) $(EXTRA_ioctl_perf_DEPENDENCIES) 
+	@rm -f ioctl_perf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_OBJECTS) $(ioctl_perf_LDADD) $(LIBS)
+
+ioctl_perf-success$(EXEEXT): $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_DEPENDENCIES) $(EXTRA_ioctl_perf_success_DEPENDENCIES) 
+	@rm -f ioctl_perf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_LDADD) $(LIBS)
+
+ioctl_ptp$(EXEEXT): $(ioctl_ptp_OBJECTS) $(ioctl_ptp_DEPENDENCIES) $(EXTRA_ioctl_ptp_DEPENDENCIES) 
+	@rm -f ioctl_ptp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_ptp_OBJECTS) $(ioctl_ptp_LDADD) $(LIBS)
+
 ioctl_rtc$(EXEEXT): $(ioctl_rtc_OBJECTS) $(ioctl_rtc_DEPENDENCIES) $(EXTRA_ioctl_rtc_DEPENDENCIES) 
 	@rm -f ioctl_rtc$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_rtc_OBJECTS) $(ioctl_rtc_LDADD) $(LIBS)
@@ -4561,18 +5011,66 @@
 	@rm -f ipc_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msg_OBJECTS) $(ipc_msg_LDADD) $(LIBS)
 
+ipc_msg-Xabbrev$(EXEEXT): $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msg_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msg-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_LDADD) $(LIBS)
+
+ipc_msg-Xraw$(EXEEXT): $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_DEPENDENCIES) $(EXTRA_ipc_msg_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msg-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_LDADD) $(LIBS)
+
+ipc_msg-Xverbose$(EXEEXT): $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msg_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msg-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_LDADD) $(LIBS)
+
 ipc_msgbuf$(EXEEXT): $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_DEPENDENCIES) $(EXTRA_ipc_msgbuf_DEPENDENCIES) 
 	@rm -f ipc_msgbuf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_LDADD) $(LIBS)
 
+ipc_msgbuf-Xabbrev$(EXEEXT): $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_LDADD) $(LIBS)
+
+ipc_msgbuf-Xraw$(EXEEXT): $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_LDADD) $(LIBS)
+
+ipc_msgbuf-Xverbose$(EXEEXT): $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_LDADD) $(LIBS)
+
 ipc_sem$(EXEEXT): $(ipc_sem_OBJECTS) $(ipc_sem_DEPENDENCIES) $(EXTRA_ipc_sem_DEPENDENCIES) 
 	@rm -f ipc_sem$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_sem_OBJECTS) $(ipc_sem_LDADD) $(LIBS)
 
+ipc_sem-Xabbrev$(EXEEXT): $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_sem_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_sem-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_LDADD) $(LIBS)
+
+ipc_sem-Xraw$(EXEEXT): $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_DEPENDENCIES) $(EXTRA_ipc_sem_Xraw_DEPENDENCIES) 
+	@rm -f ipc_sem-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_LDADD) $(LIBS)
+
+ipc_sem-Xverbose$(EXEEXT): $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_DEPENDENCIES) $(EXTRA_ipc_sem_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_sem-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_LDADD) $(LIBS)
+
 ipc_shm$(EXEEXT): $(ipc_shm_OBJECTS) $(ipc_shm_DEPENDENCIES) $(EXTRA_ipc_shm_DEPENDENCIES) 
 	@rm -f ipc_shm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_shm_OBJECTS) $(ipc_shm_LDADD) $(LIBS)
 
+ipc_shm-Xabbrev$(EXEEXT): $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_shm_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_shm-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_LDADD) $(LIBS)
+
+ipc_shm-Xraw$(EXEEXT): $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_DEPENDENCIES) $(EXTRA_ipc_shm_Xraw_DEPENDENCIES) 
+	@rm -f ipc_shm-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_LDADD) $(LIBS)
+
+ipc_shm-Xverbose$(EXEEXT): $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_DEPENDENCIES) $(EXTRA_ipc_shm_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_shm-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_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)
@@ -4601,6 +5099,18 @@
 	@rm -f keyctl$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(keyctl_OBJECTS) $(keyctl_LDADD) $(LIBS)
 
+keyctl-Xabbrev$(EXEEXT): $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_DEPENDENCIES) $(EXTRA_keyctl_Xabbrev_DEPENDENCIES) 
+	@rm -f keyctl-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_LDADD) $(LIBS)
+
+keyctl-Xraw$(EXEEXT): $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_DEPENDENCIES) $(EXTRA_keyctl_Xraw_DEPENDENCIES) 
+	@rm -f keyctl-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_LDADD) $(LIBS)
+
+keyctl-Xverbose$(EXEEXT): $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_DEPENDENCIES) $(EXTRA_keyctl_Xverbose_DEPENDENCIES) 
+	@rm -f keyctl-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_LDADD) $(LIBS)
+
 kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) $(EXTRA_kill_DEPENDENCIES) 
 	@rm -f kill$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
@@ -4709,10 +5219,34 @@
 	@rm -f mmap$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap_OBJECTS) $(mmap_LDADD) $(LIBS)
 
+mmap-Xabbrev$(EXEEXT): $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_DEPENDENCIES) $(EXTRA_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_LDADD) $(LIBS)
+
+mmap-Xraw$(EXEEXT): $(mmap_Xraw_OBJECTS) $(mmap_Xraw_DEPENDENCIES) $(EXTRA_mmap_Xraw_DEPENDENCIES) 
+	@rm -f mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xraw_OBJECTS) $(mmap_Xraw_LDADD) $(LIBS)
+
+mmap-Xverbose$(EXEEXT): $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_DEPENDENCIES) $(EXTRA_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_LDADD) $(LIBS)
+
 mmap64$(EXEEXT): $(mmap64_OBJECTS) $(mmap64_DEPENDENCIES) $(EXTRA_mmap64_DEPENDENCIES) 
 	@rm -f mmap64$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap64_OBJECTS) $(mmap64_LDADD) $(LIBS)
 
+mmap64-Xabbrev$(EXEEXT): $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_DEPENDENCIES) $(EXTRA_mmap64_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap64-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_LDADD) $(LIBS)
+
+mmap64-Xraw$(EXEEXT): $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_DEPENDENCIES) $(EXTRA_mmap64_Xraw_DEPENDENCIES) 
+	@rm -f mmap64-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_LDADD) $(LIBS)
+
+mmap64-Xverbose$(EXEEXT): $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_DEPENDENCIES) $(EXTRA_mmap64_Xverbose_DEPENDENCIES) 
+	@rm -f mmap64-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_LDADD) $(LIBS)
+
 mmsg$(EXEEXT): $(mmsg_OBJECTS) $(mmsg_DEPENDENCIES) $(EXTRA_mmsg_DEPENDENCIES) 
 	@rm -f mmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmsg_OBJECTS) $(mmsg_LDADD) $(LIBS)
@@ -4737,6 +5271,18 @@
 	@rm -f mount$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
 
+mount-Xabbrev$(EXEEXT): $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_DEPENDENCIES) $(EXTRA_mount_Xabbrev_DEPENDENCIES) 
+	@rm -f mount-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_LDADD) $(LIBS)
+
+mount-Xraw$(EXEEXT): $(mount_Xraw_OBJECTS) $(mount_Xraw_DEPENDENCIES) $(EXTRA_mount_Xraw_DEPENDENCIES) 
+	@rm -f mount-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xraw_OBJECTS) $(mount_Xraw_LDADD) $(LIBS)
+
+mount-Xverbose$(EXEEXT): $(mount_Xverbose_OBJECTS) $(mount_Xverbose_DEPENDENCIES) $(EXTRA_mount_Xverbose_DEPENDENCIES) 
+	@rm -f mount-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xverbose_OBJECTS) $(mount_Xverbose_LDADD) $(LIBS)
+
 move_pages$(EXEEXT): $(move_pages_OBJECTS) $(move_pages_DEPENDENCIES) $(EXTRA_move_pages_DEPENDENCIES) 
 	@rm -f move_pages$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(move_pages_OBJECTS) $(move_pages_LDADD) $(LIBS)
@@ -4941,10 +5487,18 @@
 	@rm -f nlattr_ifinfomsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_LDADD) $(LIBS)
 
+nlattr_ifla_af_spec$(EXEEXT): $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_DEPENDENCIES) $(EXTRA_nlattr_ifla_af_spec_DEPENDENCIES) 
+	@rm -f nlattr_ifla_af_spec$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_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_linkinfo$(EXEEXT): $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_DEPENDENCIES) $(EXTRA_nlattr_ifla_linkinfo_DEPENDENCIES) 
+	@rm -f nlattr_ifla_linkinfo$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_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)
@@ -5045,6 +5599,18 @@
 	@rm -f old_mmap-P$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_P_OBJECTS) $(old_mmap_P_LDADD) $(LIBS)
 
+old_mmap-Xabbrev$(EXEEXT): $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_DEPENDENCIES) $(EXTRA_old_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f old_mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_LDADD) $(LIBS)
+
+old_mmap-Xraw$(EXEEXT): $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_DEPENDENCIES) $(EXTRA_old_mmap_Xraw_DEPENDENCIES) 
+	@rm -f old_mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_LDADD) $(LIBS)
+
+old_mmap-Xverbose$(EXEEXT): $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_DEPENDENCIES) $(EXTRA_old_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f old_mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_LDADD) $(LIBS)
+
 old_mmap-v-none$(EXEEXT): $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_DEPENDENCIES) $(EXTRA_old_mmap_v_none_DEPENDENCIES) 
 	@rm -f old_mmap-v-none$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_LDADD) $(LIBS)
@@ -5113,6 +5679,18 @@
 	@rm -f personality$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(personality_OBJECTS) $(personality_LDADD) $(LIBS)
 
+personality-Xabbrev$(EXEEXT): $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_DEPENDENCIES) $(EXTRA_personality_Xabbrev_DEPENDENCIES) 
+	@rm -f personality-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_LDADD) $(LIBS)
+
+personality-Xraw$(EXEEXT): $(personality_Xraw_OBJECTS) $(personality_Xraw_DEPENDENCIES) $(EXTRA_personality_Xraw_DEPENDENCIES) 
+	@rm -f personality-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xraw_OBJECTS) $(personality_Xraw_LDADD) $(LIBS)
+
+personality-Xverbose$(EXEEXT): $(personality_Xverbose_OBJECTS) $(personality_Xverbose_DEPENDENCIES) $(EXTRA_personality_Xverbose_DEPENDENCIES) 
+	@rm -f personality-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xverbose_OBJECTS) $(personality_Xverbose_LDADD) $(LIBS)
+
 pipe$(EXEEXT): $(pipe_OBJECTS) $(pipe_DEPENDENCIES) $(EXTRA_pipe_DEPENDENCIES) 
 	@rm -f pipe$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(pipe_OBJECTS) $(pipe_LDADD) $(LIBS)
@@ -5185,6 +5763,10 @@
 	@rm -f prctl-securebits$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_securebits_OBJECTS) $(prctl_securebits_LDADD) $(LIBS)
 
+prctl-spec-inject$(EXEEXT): $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_DEPENDENCIES) $(EXTRA_prctl_spec_inject_DEPENDENCIES) 
+	@rm -f prctl-spec-inject$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_LDADD) $(LIBS)
+
 prctl-tid_address$(EXEEXT): $(prctl_tid_address_OBJECTS) $(prctl_tid_address_DEPENDENCIES) $(EXTRA_prctl_tid_address_DEPENDENCIES) 
 	@rm -f prctl-tid_address$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_tid_address_OBJECTS) $(prctl_tid_address_LDADD) $(LIBS)
@@ -5669,10 +6251,34 @@
 	@rm -f so_peercred$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(so_peercred_OBJECTS) $(so_peercred_LDADD) $(LIBS)
 
+so_peercred-Xabbrev$(EXEEXT): $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_DEPENDENCIES) $(EXTRA_so_peercred_Xabbrev_DEPENDENCIES) 
+	@rm -f so_peercred-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_LDADD) $(LIBS)
+
+so_peercred-Xraw$(EXEEXT): $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_DEPENDENCIES) $(EXTRA_so_peercred_Xraw_DEPENDENCIES) 
+	@rm -f so_peercred-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_LDADD) $(LIBS)
+
+so_peercred-Xverbose$(EXEEXT): $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_DEPENDENCIES) $(EXTRA_so_peercred_Xverbose_DEPENDENCIES) 
+	@rm -f so_peercred-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_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)
 
+sock_filter-v-Xabbrev$(EXEEXT): $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_DEPENDENCIES) $(EXTRA_sock_filter_v_Xabbrev_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_LDADD) $(LIBS)
+
+sock_filter-v-Xraw$(EXEEXT): $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_DEPENDENCIES) $(EXTRA_sock_filter_v_Xraw_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_LDADD) $(LIBS)
+
+sock_filter-v-Xverbose$(EXEEXT): $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_DEPENDENCIES) $(EXTRA_sock_filter_v_Xverbose_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_LDADD) $(LIBS)
+
 socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_socketcall_DEPENDENCIES) 
 	@rm -f socketcall$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
@@ -5960,6 +6566,7 @@
 include ./$(DEPDIR)/add_key.Po
 include ./$(DEPDIR)/adjtimex.Po
 include ./$(DEPDIR)/aio.Po
+include ./$(DEPDIR)/aio_pgetevents.Po
 include ./$(DEPDIR)/alarm.Po
 include ./$(DEPDIR)/answer.Po
 include ./$(DEPDIR)/attach-f-p-cmd.Po
@@ -5967,6 +6574,12 @@
 include ./$(DEPDIR)/attach-p-cmd-cmd.Po
 include ./$(DEPDIR)/attach-p-cmd-p.Po
 include ./$(DEPDIR)/block_reset_raise_run.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd-prog-v.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd-prog.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd-v.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd.Po
+include ./$(DEPDIR)/bpf-success-v.Po
+include ./$(DEPDIR)/bpf-success.Po
 include ./$(DEPDIR)/bpf-v.Po
 include ./$(DEPDIR)/bpf.Po
 include ./$(DEPDIR)/brk.Po
@@ -6009,6 +6622,9 @@
 include ./$(DEPDIR)/fadvise64_64.Po
 include ./$(DEPDIR)/fallocate.Po
 include ./$(DEPDIR)/fanotify_init.Po
+include ./$(DEPDIR)/fanotify_mark-Xabbrev.Po
+include ./$(DEPDIR)/fanotify_mark-Xraw.Po
+include ./$(DEPDIR)/fanotify_mark-Xverbose.Po
 include ./$(DEPDIR)/fanotify_mark.Po
 include ./$(DEPDIR)/fchdir.Po
 include ./$(DEPDIR)/fchmod.Po
@@ -6080,12 +6696,16 @@
 include ./$(DEPDIR)/ioctl_dm.Po
 include ./$(DEPDIR)/ioctl_evdev-v.Po
 include ./$(DEPDIR)/ioctl_evdev.Po
+include ./$(DEPDIR)/ioctl_inotify.Po
 include ./$(DEPDIR)/ioctl_kvm_run.Po
 include ./$(DEPDIR)/ioctl_loop-nv.Po
 include ./$(DEPDIR)/ioctl_loop-v.Po
 include ./$(DEPDIR)/ioctl_loop.Po
 include ./$(DEPDIR)/ioctl_mtd.Po
 include ./$(DEPDIR)/ioctl_nsfs.Po
+include ./$(DEPDIR)/ioctl_perf-success.Po
+include ./$(DEPDIR)/ioctl_perf.Po
+include ./$(DEPDIR)/ioctl_ptp.Po
 include ./$(DEPDIR)/ioctl_rtc-v.Po
 include ./$(DEPDIR)/ioctl_rtc.Po
 include ./$(DEPDIR)/ioctl_scsi.Po
@@ -6099,9 +6719,21 @@
 include ./$(DEPDIR)/ioprio.Po
 include ./$(DEPDIR)/ip_mreq.Po
 include ./$(DEPDIR)/ipc.Po
+include ./$(DEPDIR)/ipc_msg-Xabbrev.Po
+include ./$(DEPDIR)/ipc_msg-Xraw.Po
+include ./$(DEPDIR)/ipc_msg-Xverbose.Po
 include ./$(DEPDIR)/ipc_msg.Po
+include ./$(DEPDIR)/ipc_msgbuf-Xabbrev.Po
+include ./$(DEPDIR)/ipc_msgbuf-Xraw.Po
+include ./$(DEPDIR)/ipc_msgbuf-Xverbose.Po
 include ./$(DEPDIR)/ipc_msgbuf.Po
+include ./$(DEPDIR)/ipc_sem-Xabbrev.Po
+include ./$(DEPDIR)/ipc_sem-Xraw.Po
+include ./$(DEPDIR)/ipc_sem-Xverbose.Po
 include ./$(DEPDIR)/ipc_sem.Po
+include ./$(DEPDIR)/ipc_shm-Xabbrev.Po
+include ./$(DEPDIR)/ipc_shm-Xraw.Po
+include ./$(DEPDIR)/ipc_shm-Xverbose.Po
 include ./$(DEPDIR)/ipc_shm.Po
 include ./$(DEPDIR)/is_linux_mips_n64.Po
 include ./$(DEPDIR)/kcmp-y.Po
@@ -6109,6 +6741,9 @@
 include ./$(DEPDIR)/kern_features.Po
 include ./$(DEPDIR)/kexec_file_load.Po
 include ./$(DEPDIR)/kexec_load.Po
+include ./$(DEPDIR)/keyctl-Xabbrev.Po
+include ./$(DEPDIR)/keyctl-Xraw.Po
+include ./$(DEPDIR)/keyctl-Xverbose.Po
 include ./$(DEPDIR)/keyctl.Po
 include ./$(DEPDIR)/kill.Po
 include ./$(DEPDIR)/ksysent.Po
@@ -6162,13 +6797,22 @@
 include ./$(DEPDIR)/mlock.Po
 include ./$(DEPDIR)/mlock2.Po
 include ./$(DEPDIR)/mlockall.Po
+include ./$(DEPDIR)/mmap-Xabbrev.Po
+include ./$(DEPDIR)/mmap-Xraw.Po
+include ./$(DEPDIR)/mmap-Xverbose.Po
 include ./$(DEPDIR)/mmap.Po
 include ./$(DEPDIR)/mmap64-mmap64.Po
+include ./$(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+include ./$(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+include ./$(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
 include ./$(DEPDIR)/mmsg-silent.Po
 include ./$(DEPDIR)/mmsg.Po
 include ./$(DEPDIR)/mmsg_name-v.Po
 include ./$(DEPDIR)/mmsg_name.Po
 include ./$(DEPDIR)/modify_ldt.Po
+include ./$(DEPDIR)/mount-Xabbrev.Po
+include ./$(DEPDIR)/mount-Xraw.Po
+include ./$(DEPDIR)/mount-Xverbose.Po
 include ./$(DEPDIR)/mount.Po
 include ./$(DEPDIR)/move_pages.Po
 include ./$(DEPDIR)/mq.Po
@@ -6221,7 +6865,9 @@
 include ./$(DEPDIR)/nlattr_ifaddrlblmsg.Po
 include ./$(DEPDIR)/nlattr_ifaddrmsg.Po
 include ./$(DEPDIR)/nlattr_ifinfomsg.Po
+include ./$(DEPDIR)/nlattr_ifla_af_spec.Po
 include ./$(DEPDIR)/nlattr_ifla_brport.Po
+include ./$(DEPDIR)/nlattr_ifla_linkinfo.Po
 include ./$(DEPDIR)/nlattr_ifla_port.Po
 include ./$(DEPDIR)/nlattr_ifla_xdp.Po
 include ./$(DEPDIR)/nlattr_inet_diag_msg.Po
@@ -6246,6 +6892,9 @@
 include ./$(DEPDIR)/nsyscalls-d.Po
 include ./$(DEPDIR)/nsyscalls.Po
 include ./$(DEPDIR)/old_mmap-P.Po
+include ./$(DEPDIR)/old_mmap-Xabbrev.Po
+include ./$(DEPDIR)/old_mmap-Xraw.Po
+include ./$(DEPDIR)/old_mmap-Xverbose.Po
 include ./$(DEPDIR)/old_mmap-v-none.Po
 include ./$(DEPDIR)/old_mmap.Po
 include ./$(DEPDIR)/oldfstat.Po
@@ -6263,6 +6912,9 @@
 include ./$(DEPDIR)/perf_event_open.Po
 include ./$(DEPDIR)/perf_event_open_nonverbose.Po
 include ./$(DEPDIR)/perf_event_open_unabbrev.Po
+include ./$(DEPDIR)/personality-Xabbrev.Po
+include ./$(DEPDIR)/personality-Xraw.Po
+include ./$(DEPDIR)/personality-Xverbose.Po
 include ./$(DEPDIR)/personality.Po
 include ./$(DEPDIR)/pipe.Po
 include ./$(DEPDIR)/pipe2.Po
@@ -6282,6 +6934,7 @@
 include ./$(DEPDIR)/prctl-seccomp-filter-v.Po
 include ./$(DEPDIR)/prctl-seccomp-strict.Po
 include ./$(DEPDIR)/prctl-securebits.Po
+include ./$(DEPDIR)/prctl-spec-inject.Po
 include ./$(DEPDIR)/prctl-tid_address.Po
 include ./$(DEPDIR)/prctl-tsc.Po
 include ./$(DEPDIR)/pread64_pwrite64-pread64-pwrite64.Po
@@ -6402,7 +7055,13 @@
 include ./$(DEPDIR)/sigsuspend.Po
 include ./$(DEPDIR)/sleep.Po
 include ./$(DEPDIR)/so_linger.Po
+include ./$(DEPDIR)/so_peercred-Xabbrev.Po
+include ./$(DEPDIR)/so_peercred-Xraw.Po
+include ./$(DEPDIR)/so_peercred-Xverbose.Po
 include ./$(DEPDIR)/so_peercred.Po
+include ./$(DEPDIR)/sock_filter-v-Xabbrev.Po
+include ./$(DEPDIR)/sock_filter-v-Xraw.Po
+include ./$(DEPDIR)/sock_filter-v-Xverbose.Po
 include ./$(DEPDIR)/sock_filter-v.Po
 include ./$(DEPDIR)/socketcall.Po
 include ./$(DEPDIR)/sockopt-sol_netlink.Po
@@ -6929,6 +7588,48 @@
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
 #	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64-mmap64.obj `if test -f 'mmap64.c'; then $(CYGPATH_W) 'mmap64.c'; else $(CYGPATH_W) '$(srcdir)/mmap64.c'; fi`
 
+mmap64_Xabbrev-mmap64-Xabbrev.o: mmap64-Xabbrev.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.o -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+#	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+
+mmap64_Xabbrev-mmap64-Xabbrev.obj: mmap64-Xabbrev.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.obj -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+#	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+
+mmap64_Xraw-mmap64-Xraw.o: mmap64-Xraw.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.o -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+#	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+
+mmap64_Xraw-mmap64-Xraw.obj: mmap64-Xraw.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.obj -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+#	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+
+mmap64_Xverbose-mmap64-Xverbose.o: mmap64-Xverbose.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.o -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+#	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+
+mmap64_Xverbose-mmap64-Xverbose.obj: mmap64-Xverbose.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.obj -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+#	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+
 newfstatat-newfstatat.o: newfstatat.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newfstatat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT newfstatat-newfstatat.o -MD -MP -MF $(DEPDIR)/newfstatat-newfstatat.Tpo -c -o newfstatat-newfstatat.o `test -f 'newfstatat.c' || echo '$(srcdir)/'`newfstatat.c
 	$(AM_V_at)$(am__mv) $(DEPDIR)/newfstatat-newfstatat.Tpo $(DEPDIR)/newfstatat-newfstatat.Po
@@ -7480,6 +8181,9 @@
 $(srcdir)/aio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/aio_pgetevents.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/alarm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7489,6 +8193,18 @@
 $(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-obj_get_info_by_fd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog-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) $^ $@
 
@@ -7576,6 +8292,15 @@
 $(srcdir)/fanotify_mark.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/fanotify_mark-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/fchdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7768,6 +8493,9 @@
 $(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_inotify.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7786,6 +8514,12 @@
 $(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_perf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_ptp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7828,12 +8562,48 @@
 $(srcdir)/ipc_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_msg-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_sem.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_sem-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_shm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_shm-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7852,6 +8622,15 @@
 $(srcdir)/keyctl.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/keyctl-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kill.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7915,9 +8694,27 @@
 $(srcdir)/mlockall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmap64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap64-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7936,6 +8733,15 @@
 $(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mount-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/move_pages.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8062,9 +8868,15 @@
 $(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_ifla_af_spec.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_linkinfo.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) $^ $@
 
@@ -8137,6 +8949,15 @@
 $(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/old_mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8179,6 +9000,15 @@
 $(srcdir)/perf_event_open_unabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/personality-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/pipe2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8509,9 +9339,27 @@
 $(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_peercred-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xverbose.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)/sock_filter-v-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xverbose.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) $^ $@
 
@@ -8593,6 +9441,24 @@
 $(srcdir)/trace_lstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/trace_personality_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/trace_question.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests-mx32/Makefile.am b/tests-mx32/Makefile.am
index 63372b0..0572992 100644
--- a/tests-mx32/Makefile.am
+++ b/tests-mx32/Makefile.am
@@ -93,6 +93,12 @@
 	attach-p-cmd-cmd \
 	attach-p-cmd-p \
 	block_reset_raise_run \
+	bpf-obj_get_info_by_fd \
+	bpf-obj_get_info_by_fd-v \
+	bpf-obj_get_info_by_fd-prog \
+	bpf-obj_get_info_by_fd-prog-v \
+	bpf-success \
+	bpf-success-v \
 	caps-abbrev \
 	check_sigblock \
 	check_sigign \
@@ -115,6 +121,7 @@
 	ioctl_loop-nv \
 	ioctl_loop-v \
 	ioctl_nsfs \
+	ioctl_perf-success \
 	ioctl_rtc-v \
 	is_linux_mips_n64 \
 	ksysent \
@@ -137,6 +144,7 @@
 	ppoll-v \
 	prctl-seccomp-filter-v \
 	prctl-seccomp-strict \
+	prctl-spec-inject \
 	print_maxfd \
 	qual_fault \
 	qual_inject-error-signal \
@@ -179,6 +187,9 @@
 localtime_LDADD = $(clock_LIBS) $(LDADD)
 lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xraw_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xverbose_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mq_LDADD = $(mq_LIBS) $(LDADD)
 newfstatat_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 pc_LDADD = $(dl_LIBS) $(LDADD)
@@ -202,20 +213,26 @@
 
 include gen_tests.am
 
-if USE_LIBUNWIND
-LIBUNWIND_TESTS = strace-k.test
+if ENABLE_STACKTRACE
+STACKTRACE_TESTS = strace-k.test
 if USE_DEMANGLE
-LIBUNWIND_TESTS += strace-k-demangle.test
+STACKTRACE_TESTS += strace-k-demangle.test
 endif
 else
-LIBUNWIND_TESTS =
+STACKTRACE_TESTS =
 endif
 
 DECODER_TESTS = \
+	bpf-success.test \
+	bpf-success-v.test \
 	brk.test \
 	btrfs-v.test \
 	btrfs-vw.test \
+	btrfs-vwX.test \
+	btrfs-vX.test \
 	btrfs-w.test \
+	btrfs-wX.test \
+	btrfs-X.test \
 	caps-abbrev.test \
 	caps.test \
 	eventfd.test \
@@ -225,6 +242,7 @@
 	futex.test \
 	getuid.test \
 	ioctl.test \
+	ioctl_perf-success.test \
 	ipc_msgbuf.test \
 	kern_features-fault.test \
 	llseek.test \
@@ -251,6 +269,7 @@
 	prctl-seccomp-filter-v.test \
 	prctl-seccomp-strict.test \
 	prctl-securebits.test \
+	prctl-spec-inject.test \
 	prctl-tid_address.test \
 	prctl-tsc.test \
 	qual_fault-exit_group.test \
@@ -299,9 +318,13 @@
 	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
+	qual_fault-syscall.test \
 	qual_inject-error-signal.test \
+	qual_inject-error-signal-syscall.test \
 	qual_inject-retval.test \
+	qual_inject-retval-syscall.test \
 	qual_inject-signal.test \
+	qual_inject-signal-syscall.test \
 	qual_inject-syntax.test \
 	qual_signal.test \
 	qual_syscall.test \
@@ -324,11 +347,11 @@
 	threads-execve.test \
 	# end of MISC_TESTS
 
-TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(LIBUNWIND_TESTS)
+TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(STACKTRACE_TESTS)
 
 XFAIL_TESTS_ =
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
@@ -352,6 +375,7 @@
 	count-f.expected \
 	eventfd.expected \
 	fadvise.h \
+	fcntl-common.c \
 	filter-unavailable.expected \
 	fstatat.c \
 	fstatx.c \
@@ -362,12 +386,12 @@
 	init.sh \
 	init_delete_module.h \
 	ipc.sh \
-	ipc_msgbuf.expected \
 	ksysent.sed \
 	lstatx.c \
 	match.awk \
 	net.expected \
 	netlink_sock_diag-v.sh \
+	nlattr_ifla.h \
 	pipe.expected \
 	print_user_desc.c \
 	process_vm_readv_writev.c \
@@ -375,6 +399,8 @@
 	qual_fault-exit_group.expected \
 	qual_inject-error-signal.expected \
 	qual_inject-signal.expected \
+	qualify_personality.sh \
+	qualify_personality_empty.in \
 	quotactl.h \
 	regex.in \
 	rt_sigaction.awk \
@@ -392,16 +418,23 @@
 	strace-E.expected \
 	strace-T.expected \
 	strace-ff.expected \
+	strace-k-demangle.expected \
 	strace-k-demangle.test \
+	strace-k.expected \
 	strace-k.test \
 	strace-r.expected \
 	strace.supp \
-	struct_flock.c \
 	sun_path.expected \
 	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
+	trace_personality_32.in \
+	trace_personality_64.in \
+	trace_personality_x32.in \
+	trace_personality_regex_32.in \
+	trace_personality_regex_64.in \
+	trace_personality_regex_x32.in \
 	trace_question.in \
 	trace_stat.in \
 	trace_stat_like.in \
diff --git a/tests-mx32/Makefile.in b/tests-mx32/Makefile.in
index 9558e7a..436af0d 100644
--- a/tests-mx32/Makefile.in
+++ b/tests-mx32/Makefile.in
@@ -139,7 +139,11 @@
 check_PROGRAMS = $(am__EXEEXT_1) _newselect-P$(EXEEXT) 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) \
+	block_reset_raise_run$(EXEEXT) bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-v$(EXEEXT) bpf-success$(EXEEXT) \
+	bpf-success-v$(EXEEXT) caps-abbrev$(EXEEXT) \
 	check_sigblock$(EXEEXT) check_sigign$(EXEEXT) \
 	clone_parent$(EXEEXT) clone_ptrace$(EXEEXT) count-f$(EXEEXT) \
 	delay$(EXEEXT) execve-v$(EXEEXT) execveat-v$(EXEEXT) \
@@ -147,7 +151,8 @@
 	getpid$(EXEEXT) getppid$(EXEEXT) gettid$(EXEEXT) \
 	inject-nf$(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) \
+	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) \
+	ioctl_perf-success$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
 	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
 	list_sigaction_signum$(EXEEXT) localtime$(EXEEXT) \
 	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
@@ -159,21 +164,22 @@
 	perf_event_open_nonverbose$(EXEEXT) \
 	perf_event_open_unabbrev$(EXEEXT) ppoll-v$(EXEEXT) \
 	prctl-seccomp-filter-v$(EXEEXT) prctl-seccomp-strict$(EXEEXT) \
-	print_maxfd$(EXEEXT) qual_fault$(EXEEXT) \
-	qual_inject-error-signal$(EXEEXT) qual_inject-retval$(EXEEXT) \
-	qual_inject-signal$(EXEEXT) qual_signal$(EXEEXT) \
-	quotactl-v$(EXEEXT) quotactl-xfs-v$(EXEEXT) \
-	redirect-fds$(EXEEXT) restart_syscall$(EXEEXT) \
-	run_expect_termsig$(EXEEXT) scm_rights$(EXEEXT) \
-	seccomp-filter-v$(EXEEXT) seccomp-strict$(EXEEXT) \
-	select-P$(EXEEXT) set_ptracer_any$(EXEEXT) \
-	set_sigblock$(EXEEXT) set_sigign$(EXEEXT) \
-	signal_receive$(EXEEXT) sleep$(EXEEXT) stack-fcall$(EXEEXT) \
-	stack-fcall-mangled$(EXEEXT) threads-execve$(EXEEXT) \
-	unblock_reset_raise$(EXEEXT) unix-pair-send-recv$(EXEEXT) \
+	prctl-spec-inject$(EXEEXT) print_maxfd$(EXEEXT) \
+	qual_fault$(EXEEXT) qual_inject-error-signal$(EXEEXT) \
+	qual_inject-retval$(EXEEXT) qual_inject-signal$(EXEEXT) \
+	qual_signal$(EXEEXT) quotactl-v$(EXEEXT) \
+	quotactl-xfs-v$(EXEEXT) redirect-fds$(EXEEXT) \
+	restart_syscall$(EXEEXT) run_expect_termsig$(EXEEXT) \
+	scm_rights$(EXEEXT) seccomp-filter-v$(EXEEXT) \
+	seccomp-strict$(EXEEXT) select-P$(EXEEXT) \
+	set_ptracer_any$(EXEEXT) set_sigblock$(EXEEXT) \
+	set_sigign$(EXEEXT) signal_receive$(EXEEXT) sleep$(EXEEXT) \
+	stack-fcall$(EXEEXT) stack-fcall-mangled$(EXEEXT) \
+	threads-execve$(EXEEXT) unblock_reset_raise$(EXEEXT) \
+	unix-pair-send-recv$(EXEEXT) \
 	unix-pair-sendto-recvfrom$(EXEEXT) vfork-f$(EXEEXT) \
 	wait4-v$(EXEEXT) waitid-v$(EXEEXT) zeroargc$(EXEEXT)
-@USE_DEMANGLE_TRUE@@USE_LIBUNWIND_TRUE@am__append_1 = strace-k-demangle.test
+@ENABLE_STACKTRACE_TRUE@@USE_DEMANGLE_TRUE@am__append_1 = strace-k-demangle.test
 TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(am__EXEEXT_2)
 subdir = tests-mx32
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -181,7 +187,10 @@
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
 	$(top_srcdir)/m4/bpf_attr.m4 $(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/st_demangle.m4 $(top_srcdir)/m4/st_libdw.m4 \
+	$(top_srcdir)/m4/st_libunwind.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
+	$(top_srcdir)/m4/st_stacktrace.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) \
@@ -223,18 +232,25 @@
 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) \
-	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) dev-yy$(EXEEXT) dup$(EXEEXT) \
-	dup2$(EXEEXT) dup3$(EXEEXT) epoll_create$(EXEEXT) \
-	epoll_create1$(EXEEXT) epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) \
-	epoll_wait$(EXEEXT) erestartsys$(EXEEXT) eventfd$(EXEEXT) \
-	execve$(EXEEXT) execveat$(EXEEXT) faccessat$(EXEEXT) \
-	fadvise64$(EXEEXT) fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
-	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) fchdir$(EXEEXT) \
+	adjtimex$(EXEEXT) aio$(EXEEXT) aio_pgetevents$(EXEEXT) \
+	alarm$(EXEEXT) bpf$(EXEEXT) bpf-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-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) \
+	dev-yy$(EXEEXT) dup$(EXEEXT) dup2$(EXEEXT) dup3$(EXEEXT) \
+	epoll_create$(EXEEXT) epoll_create1$(EXEEXT) \
+	epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) epoll_wait$(EXEEXT) \
+	erestartsys$(EXEEXT) eventfd$(EXEEXT) execve$(EXEEXT) \
+	execveat$(EXEEXT) faccessat$(EXEEXT) fadvise64$(EXEEXT) \
+	fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
+	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) \
+	fanotify_mark-Xabbrev$(EXEEXT) fanotify_mark-Xraw$(EXEEXT) \
+	fanotify_mark-Xverbose$(EXEEXT) fchdir$(EXEEXT) \
 	fchmod$(EXEEXT) fchmodat$(EXEEXT) fchown$(EXEEXT) \
 	fchown32$(EXEEXT) fchownat$(EXEEXT) fcntl$(EXEEXT) \
 	fcntl64$(EXEEXT) fdatasync$(EXEEXT) fflush$(EXEEXT) \
@@ -255,49 +271,62 @@
 	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_kvm_run$(EXEEXT) \
-	ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) \
+	ioctl_evdev$(EXEEXT) ioctl_inotify$(EXEEXT) \
+	ioctl_kvm_run$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
+	ioctl_rtc$(EXEEXT) ioctl_perf$(EXEEXT) ioctl_ptp$(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) kcmp-y$(EXEEXT) \
-	kern_features$(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) \
+	ipc_msg$(EXEEXT) ipc_msg-Xabbrev$(EXEEXT) \
+	ipc_msg-Xraw$(EXEEXT) ipc_msg-Xverbose$(EXEEXT) \
+	ipc_msgbuf$(EXEEXT) ipc_msgbuf-Xabbrev$(EXEEXT) \
+	ipc_msgbuf-Xraw$(EXEEXT) ipc_msgbuf-Xverbose$(EXEEXT) \
+	ipc_sem$(EXEEXT) ipc_sem-Xabbrev$(EXEEXT) \
+	ipc_sem-Xraw$(EXEEXT) ipc_sem-Xverbose$(EXEEXT) \
+	ipc_shm$(EXEEXT) ipc_shm-Xabbrev$(EXEEXT) \
+	ipc_shm-Xraw$(EXEEXT) ipc_shm-Xverbose$(EXEEXT) kcmp$(EXEEXT) \
+	kcmp-y$(EXEEXT) kern_features$(EXEEXT) \
+	kexec_file_load$(EXEEXT) kexec_load$(EXEEXT) keyctl$(EXEEXT) \
+	keyctl-Xabbrev$(EXEEXT) keyctl-Xraw$(EXEEXT) \
+	keyctl-Xverbose$(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) \
+	mmap-Xabbrev$(EXEEXT) mmap-Xraw$(EXEEXT) \
+	mmap-Xverbose$(EXEEXT) mmap64$(EXEEXT) mmap64-Xabbrev$(EXEEXT) \
+	mmap64-Xraw$(EXEEXT) mmap64-Xverbose$(EXEEXT) mmsg$(EXEEXT) \
 	mmsg_name$(EXEEXT) modify_ldt$(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-inet6$(EXEEXT) net-yy-netlink$(EXEEXT) \
-	net-yy-unix$(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) \
-	nfnetlink_acct$(EXEEXT) nfnetlink_cthelper$(EXEEXT) \
-	nfnetlink_ctnetlink$(EXEEXT) nfnetlink_ctnetlink_exp$(EXEEXT) \
-	nfnetlink_cttimeout$(EXEEXT) nfnetlink_nft_compat$(EXEEXT) \
-	nfnetlink_nftables$(EXEEXT) nfnetlink_ipset$(EXEEXT) \
-	nfnetlink_osf$(EXEEXT) nfnetlink_queue$(EXEEXT) \
-	nfnetlink_ulog$(EXEEXT) nlattr$(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) \
+	mount-Xabbrev$(EXEEXT) mount-Xraw$(EXEEXT) \
+	mount-Xverbose$(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-inet6$(EXEEXT) \
+	net-yy-netlink$(EXEEXT) net-yy-unix$(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) nfnetlink_acct$(EXEEXT) \
+	nfnetlink_cthelper$(EXEEXT) nfnetlink_ctnetlink$(EXEEXT) \
+	nfnetlink_ctnetlink_exp$(EXEEXT) nfnetlink_cttimeout$(EXEEXT) \
+	nfnetlink_nft_compat$(EXEEXT) nfnetlink_nftables$(EXEEXT) \
+	nfnetlink_ipset$(EXEEXT) nfnetlink_osf$(EXEEXT) \
+	nfnetlink_queue$(EXEEXT) nfnetlink_ulog$(EXEEXT) \
+	nlattr$(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_af_spec$(EXEEXT) nlattr_ifla_brport$(EXEEXT) \
+	nlattr_ifla_linkinfo$(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_mdba_mdb_entry$(EXEEXT) \
@@ -309,11 +338,14 @@
 	nlattr_tc_stats$(EXEEXT) nlattr_tca_stab$(EXEEXT) \
 	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
-	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) oldfstat$(EXEEXT) \
-	oldlstat$(EXEEXT) oldselect$(EXEEXT) oldselect-efault$(EXEEXT) \
-	oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
-	osf_utimes$(EXEEXT) pause$(EXEEXT) perf_event_open$(EXEEXT) \
-	personality$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
+	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) \
+	old_mmap-Xabbrev$(EXEEXT) old_mmap-Xraw$(EXEEXT) \
+	old_mmap-Xverbose$(EXEEXT) oldfstat$(EXEEXT) oldlstat$(EXEEXT) \
+	oldselect$(EXEEXT) oldselect-efault$(EXEEXT) oldstat$(EXEEXT) \
+	open$(EXEEXT) openat$(EXEEXT) osf_utimes$(EXEEXT) \
+	pause$(EXEEXT) perf_event_open$(EXEEXT) personality$(EXEEXT) \
+	personality-Xabbrev$(EXEEXT) personality-Xraw$(EXEEXT) \
+	personality-Xverbose$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
 	pkey_alloc$(EXEEXT) pkey_free$(EXEEXT) pkey_mprotect$(EXEEXT) \
 	poll$(EXEEXT) poll-P$(EXEEXT) ppoll$(EXEEXT) ppoll-P$(EXEEXT) \
 	prctl-arg2-intptr$(EXEEXT) prctl-dumpable$(EXEEXT) \
@@ -361,7 +393,10 @@
 	sigaltstack$(EXEEXT) siginfo$(EXEEXT) signal$(EXEEXT) \
 	signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
 	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
-	so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
+	so_peercred$(EXEEXT) so_peercred-Xabbrev$(EXEEXT) \
+	so_peercred-Xraw$(EXEEXT) so_peercred-Xverbose$(EXEEXT) \
+	sock_filter-v$(EXEEXT) sock_filter-v-Xabbrev$(EXEEXT) \
+	sock_filter-v-Xraw$(EXEEXT) sock_filter-v-Xverbose$(EXEEXT) \
 	socketcall$(EXEEXT) sockopt-sol_netlink$(EXEEXT) \
 	splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
 	statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
@@ -418,6 +453,10 @@
 aio_OBJECTS = aio.$(OBJEXT)
 aio_LDADD = $(LDADD)
 aio_DEPENDENCIES = libtests.a
+aio_pgetevents_SOURCES = aio_pgetevents.c
+aio_pgetevents_OBJECTS = aio_pgetevents.$(OBJEXT)
+aio_pgetevents_LDADD = $(LDADD)
+aio_pgetevents_DEPENDENCIES = libtests.a
 alarm_SOURCES = alarm.c
 alarm_OBJECTS = alarm.$(OBJEXT)
 alarm_LDADD = $(LDADD)
@@ -449,6 +488,33 @@
 bpf_OBJECTS = bpf.$(OBJEXT)
 bpf_LDADD = $(LDADD)
 bpf_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_SOURCES = bpf-obj_get_info_by_fd.c
+bpf_obj_get_info_by_fd_OBJECTS = bpf-obj_get_info_by_fd.$(OBJEXT)
+bpf_obj_get_info_by_fd_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_SOURCES = bpf-obj_get_info_by_fd-prog.c
+bpf_obj_get_info_by_fd_prog_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_v_SOURCES =  \
+	bpf-obj_get_info_by_fd-prog-v.c
+bpf_obj_get_info_by_fd_prog_v_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_v_SOURCES = bpf-obj_get_info_by_fd-v.c
+bpf_obj_get_info_by_fd_v_OBJECTS = bpf-obj_get_info_by_fd-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_v_DEPENDENCIES = libtests.a
+bpf_success_SOURCES = bpf-success.c
+bpf_success_OBJECTS = bpf-success.$(OBJEXT)
+bpf_success_LDADD = $(LDADD)
+bpf_success_DEPENDENCIES = libtests.a
+bpf_success_v_SOURCES = bpf-success-v.c
+bpf_success_v_OBJECTS = bpf-success-v.$(OBJEXT)
+bpf_success_v_LDADD = $(LDADD)
+bpf_success_v_DEPENDENCIES = libtests.a
 bpf_v_SOURCES = bpf-v.c
 bpf_v_OBJECTS = bpf-v.$(OBJEXT)
 bpf_v_LDADD = $(LDADD)
@@ -616,6 +682,18 @@
 fanotify_mark_OBJECTS = fanotify_mark.$(OBJEXT)
 fanotify_mark_LDADD = $(LDADD)
 fanotify_mark_DEPENDENCIES = libtests.a
+fanotify_mark_Xabbrev_SOURCES = fanotify_mark-Xabbrev.c
+fanotify_mark_Xabbrev_OBJECTS = fanotify_mark-Xabbrev.$(OBJEXT)
+fanotify_mark_Xabbrev_LDADD = $(LDADD)
+fanotify_mark_Xabbrev_DEPENDENCIES = libtests.a
+fanotify_mark_Xraw_SOURCES = fanotify_mark-Xraw.c
+fanotify_mark_Xraw_OBJECTS = fanotify_mark-Xraw.$(OBJEXT)
+fanotify_mark_Xraw_LDADD = $(LDADD)
+fanotify_mark_Xraw_DEPENDENCIES = libtests.a
+fanotify_mark_Xverbose_SOURCES = fanotify_mark-Xverbose.c
+fanotify_mark_Xverbose_OBJECTS = fanotify_mark-Xverbose.$(OBJEXT)
+fanotify_mark_Xverbose_LDADD = $(LDADD)
+fanotify_mark_Xverbose_DEPENDENCIES = libtests.a
 fchdir_SOURCES = fchdir.c
 fchdir_OBJECTS = fchdir.$(OBJEXT)
 fchdir_LDADD = $(LDADD)
@@ -895,6 +973,10 @@
 ioctl_evdev_v_OBJECTS = ioctl_evdev-v.$(OBJEXT)
 ioctl_evdev_v_LDADD = $(LDADD)
 ioctl_evdev_v_DEPENDENCIES = libtests.a
+ioctl_inotify_SOURCES = ioctl_inotify.c
+ioctl_inotify_OBJECTS = ioctl_inotify.$(OBJEXT)
+ioctl_inotify_LDADD = $(LDADD)
+ioctl_inotify_DEPENDENCIES = libtests.a
 ioctl_kvm_run_SOURCES = ioctl_kvm_run.c
 ioctl_kvm_run_OBJECTS = ioctl_kvm_run.$(OBJEXT)
 ioctl_kvm_run_LDADD = $(LDADD)
@@ -919,6 +1001,18 @@
 ioctl_nsfs_OBJECTS = ioctl_nsfs.$(OBJEXT)
 ioctl_nsfs_LDADD = $(LDADD)
 ioctl_nsfs_DEPENDENCIES = libtests.a
+ioctl_perf_SOURCES = ioctl_perf.c
+ioctl_perf_OBJECTS = ioctl_perf.$(OBJEXT)
+ioctl_perf_LDADD = $(LDADD)
+ioctl_perf_DEPENDENCIES = libtests.a
+ioctl_perf_success_SOURCES = ioctl_perf-success.c
+ioctl_perf_success_OBJECTS = ioctl_perf-success.$(OBJEXT)
+ioctl_perf_success_LDADD = $(LDADD)
+ioctl_perf_success_DEPENDENCIES = libtests.a
+ioctl_ptp_SOURCES = ioctl_ptp.c
+ioctl_ptp_OBJECTS = ioctl_ptp.$(OBJEXT)
+ioctl_ptp_LDADD = $(LDADD)
+ioctl_ptp_DEPENDENCIES = libtests.a
 ioctl_rtc_SOURCES = ioctl_rtc.c
 ioctl_rtc_OBJECTS = ioctl_rtc.$(OBJEXT)
 ioctl_rtc_LDADD = $(LDADD)
@@ -975,18 +1069,66 @@
 ipc_msg_OBJECTS = ipc_msg.$(OBJEXT)
 ipc_msg_LDADD = $(LDADD)
 ipc_msg_DEPENDENCIES = libtests.a
+ipc_msg_Xabbrev_SOURCES = ipc_msg-Xabbrev.c
+ipc_msg_Xabbrev_OBJECTS = ipc_msg-Xabbrev.$(OBJEXT)
+ipc_msg_Xabbrev_LDADD = $(LDADD)
+ipc_msg_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msg_Xraw_SOURCES = ipc_msg-Xraw.c
+ipc_msg_Xraw_OBJECTS = ipc_msg-Xraw.$(OBJEXT)
+ipc_msg_Xraw_LDADD = $(LDADD)
+ipc_msg_Xraw_DEPENDENCIES = libtests.a
+ipc_msg_Xverbose_SOURCES = ipc_msg-Xverbose.c
+ipc_msg_Xverbose_OBJECTS = ipc_msg-Xverbose.$(OBJEXT)
+ipc_msg_Xverbose_LDADD = $(LDADD)
+ipc_msg_Xverbose_DEPENDENCIES = libtests.a
 ipc_msgbuf_SOURCES = ipc_msgbuf.c
 ipc_msgbuf_OBJECTS = ipc_msgbuf.$(OBJEXT)
 ipc_msgbuf_LDADD = $(LDADD)
 ipc_msgbuf_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xabbrev_SOURCES = ipc_msgbuf-Xabbrev.c
+ipc_msgbuf_Xabbrev_OBJECTS = ipc_msgbuf-Xabbrev.$(OBJEXT)
+ipc_msgbuf_Xabbrev_LDADD = $(LDADD)
+ipc_msgbuf_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xraw_SOURCES = ipc_msgbuf-Xraw.c
+ipc_msgbuf_Xraw_OBJECTS = ipc_msgbuf-Xraw.$(OBJEXT)
+ipc_msgbuf_Xraw_LDADD = $(LDADD)
+ipc_msgbuf_Xraw_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xverbose_SOURCES = ipc_msgbuf-Xverbose.c
+ipc_msgbuf_Xverbose_OBJECTS = ipc_msgbuf-Xverbose.$(OBJEXT)
+ipc_msgbuf_Xverbose_LDADD = $(LDADD)
+ipc_msgbuf_Xverbose_DEPENDENCIES = libtests.a
 ipc_sem_SOURCES = ipc_sem.c
 ipc_sem_OBJECTS = ipc_sem.$(OBJEXT)
 ipc_sem_LDADD = $(LDADD)
 ipc_sem_DEPENDENCIES = libtests.a
+ipc_sem_Xabbrev_SOURCES = ipc_sem-Xabbrev.c
+ipc_sem_Xabbrev_OBJECTS = ipc_sem-Xabbrev.$(OBJEXT)
+ipc_sem_Xabbrev_LDADD = $(LDADD)
+ipc_sem_Xabbrev_DEPENDENCIES = libtests.a
+ipc_sem_Xraw_SOURCES = ipc_sem-Xraw.c
+ipc_sem_Xraw_OBJECTS = ipc_sem-Xraw.$(OBJEXT)
+ipc_sem_Xraw_LDADD = $(LDADD)
+ipc_sem_Xraw_DEPENDENCIES = libtests.a
+ipc_sem_Xverbose_SOURCES = ipc_sem-Xverbose.c
+ipc_sem_Xverbose_OBJECTS = ipc_sem-Xverbose.$(OBJEXT)
+ipc_sem_Xverbose_LDADD = $(LDADD)
+ipc_sem_Xverbose_DEPENDENCIES = libtests.a
 ipc_shm_SOURCES = ipc_shm.c
 ipc_shm_OBJECTS = ipc_shm.$(OBJEXT)
 ipc_shm_LDADD = $(LDADD)
 ipc_shm_DEPENDENCIES = libtests.a
+ipc_shm_Xabbrev_SOURCES = ipc_shm-Xabbrev.c
+ipc_shm_Xabbrev_OBJECTS = ipc_shm-Xabbrev.$(OBJEXT)
+ipc_shm_Xabbrev_LDADD = $(LDADD)
+ipc_shm_Xabbrev_DEPENDENCIES = libtests.a
+ipc_shm_Xraw_SOURCES = ipc_shm-Xraw.c
+ipc_shm_Xraw_OBJECTS = ipc_shm-Xraw.$(OBJEXT)
+ipc_shm_Xraw_LDADD = $(LDADD)
+ipc_shm_Xraw_DEPENDENCIES = libtests.a
+ipc_shm_Xverbose_SOURCES = ipc_shm-Xverbose.c
+ipc_shm_Xverbose_OBJECTS = ipc_shm-Xverbose.$(OBJEXT)
+ipc_shm_Xverbose_LDADD = $(LDADD)
+ipc_shm_Xverbose_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)
@@ -1015,6 +1157,18 @@
 keyctl_OBJECTS = keyctl.$(OBJEXT)
 keyctl_LDADD = $(LDADD)
 keyctl_DEPENDENCIES = libtests.a
+keyctl_Xabbrev_SOURCES = keyctl-Xabbrev.c
+keyctl_Xabbrev_OBJECTS = keyctl-Xabbrev.$(OBJEXT)
+keyctl_Xabbrev_LDADD = $(LDADD)
+keyctl_Xabbrev_DEPENDENCIES = libtests.a
+keyctl_Xraw_SOURCES = keyctl-Xraw.c
+keyctl_Xraw_OBJECTS = keyctl-Xraw.$(OBJEXT)
+keyctl_Xraw_LDADD = $(LDADD)
+keyctl_Xraw_DEPENDENCIES = libtests.a
+keyctl_Xverbose_SOURCES = keyctl-Xverbose.c
+keyctl_Xverbose_OBJECTS = keyctl-Xverbose.$(OBJEXT)
+keyctl_Xverbose_LDADD = $(LDADD)
+keyctl_Xverbose_DEPENDENCIES = libtests.a
 kill_SOURCES = kill.c
 kill_OBJECTS = kill.$(OBJEXT)
 kill_LDADD = $(LDADD)
@@ -1122,10 +1276,34 @@
 mmap_OBJECTS = mmap.$(OBJEXT)
 mmap_LDADD = $(LDADD)
 mmap_DEPENDENCIES = libtests.a
+mmap_Xabbrev_SOURCES = mmap-Xabbrev.c
+mmap_Xabbrev_OBJECTS = mmap-Xabbrev.$(OBJEXT)
+mmap_Xabbrev_LDADD = $(LDADD)
+mmap_Xabbrev_DEPENDENCIES = libtests.a
+mmap_Xraw_SOURCES = mmap-Xraw.c
+mmap_Xraw_OBJECTS = mmap-Xraw.$(OBJEXT)
+mmap_Xraw_LDADD = $(LDADD)
+mmap_Xraw_DEPENDENCIES = libtests.a
+mmap_Xverbose_SOURCES = mmap-Xverbose.c
+mmap_Xverbose_OBJECTS = mmap-Xverbose.$(OBJEXT)
+mmap_Xverbose_LDADD = $(LDADD)
+mmap_Xverbose_DEPENDENCIES = libtests.a
 mmap64_SOURCES = mmap64.c
 mmap64_OBJECTS = mmap64-mmap64.$(OBJEXT)
 mmap64_LDADD = $(LDADD)
 mmap64_DEPENDENCIES = libtests.a
+mmap64_Xabbrev_SOURCES = mmap64-Xabbrev.c
+mmap64_Xabbrev_OBJECTS = mmap64_Xabbrev-mmap64-Xabbrev.$(OBJEXT)
+mmap64_Xabbrev_LDADD = $(LDADD)
+mmap64_Xabbrev_DEPENDENCIES = libtests.a
+mmap64_Xraw_SOURCES = mmap64-Xraw.c
+mmap64_Xraw_OBJECTS = mmap64_Xraw-mmap64-Xraw.$(OBJEXT)
+mmap64_Xraw_LDADD = $(LDADD)
+mmap64_Xraw_DEPENDENCIES = libtests.a
+mmap64_Xverbose_SOURCES = mmap64-Xverbose.c
+mmap64_Xverbose_OBJECTS = mmap64_Xverbose-mmap64-Xverbose.$(OBJEXT)
+mmap64_Xverbose_LDADD = $(LDADD)
+mmap64_Xverbose_DEPENDENCIES = libtests.a
 mmsg_SOURCES = mmsg.c
 mmsg_OBJECTS = mmsg.$(OBJEXT)
 mmsg_LDADD = $(LDADD)
@@ -1150,6 +1328,18 @@
 mount_OBJECTS = mount.$(OBJEXT)
 mount_LDADD = $(LDADD)
 mount_DEPENDENCIES = libtests.a
+mount_Xabbrev_SOURCES = mount-Xabbrev.c
+mount_Xabbrev_OBJECTS = mount-Xabbrev.$(OBJEXT)
+mount_Xabbrev_LDADD = $(LDADD)
+mount_Xabbrev_DEPENDENCIES = libtests.a
+mount_Xraw_SOURCES = mount-Xraw.c
+mount_Xraw_OBJECTS = mount-Xraw.$(OBJEXT)
+mount_Xraw_LDADD = $(LDADD)
+mount_Xraw_DEPENDENCIES = libtests.a
+mount_Xverbose_SOURCES = mount-Xverbose.c
+mount_Xverbose_OBJECTS = mount-Xverbose.$(OBJEXT)
+mount_Xverbose_LDADD = $(LDADD)
+mount_Xverbose_DEPENDENCIES = libtests.a
 move_pages_SOURCES = move_pages.c
 move_pages_OBJECTS = move_pages.$(OBJEXT)
 move_pages_LDADD = $(LDADD)
@@ -1353,10 +1543,18 @@
 nlattr_ifinfomsg_OBJECTS = nlattr_ifinfomsg.$(OBJEXT)
 nlattr_ifinfomsg_LDADD = $(LDADD)
 nlattr_ifinfomsg_DEPENDENCIES = libtests.a
+nlattr_ifla_af_spec_SOURCES = nlattr_ifla_af_spec.c
+nlattr_ifla_af_spec_OBJECTS = nlattr_ifla_af_spec.$(OBJEXT)
+nlattr_ifla_af_spec_LDADD = $(LDADD)
+nlattr_ifla_af_spec_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_linkinfo_SOURCES = nlattr_ifla_linkinfo.c
+nlattr_ifla_linkinfo_OBJECTS = nlattr_ifla_linkinfo.$(OBJEXT)
+nlattr_ifla_linkinfo_LDADD = $(LDADD)
+nlattr_ifla_linkinfo_DEPENDENCIES = libtests.a
 nlattr_ifla_port_SOURCES = nlattr_ifla_port.c
 nlattr_ifla_port_OBJECTS = nlattr_ifla_port.$(OBJEXT)
 nlattr_ifla_port_LDADD = $(LDADD)
@@ -1458,6 +1656,18 @@
 old_mmap_P_OBJECTS = old_mmap-P.$(OBJEXT)
 old_mmap_P_LDADD = $(LDADD)
 old_mmap_P_DEPENDENCIES = libtests.a
+old_mmap_Xabbrev_SOURCES = old_mmap-Xabbrev.c
+old_mmap_Xabbrev_OBJECTS = old_mmap-Xabbrev.$(OBJEXT)
+old_mmap_Xabbrev_LDADD = $(LDADD)
+old_mmap_Xabbrev_DEPENDENCIES = libtests.a
+old_mmap_Xraw_SOURCES = old_mmap-Xraw.c
+old_mmap_Xraw_OBJECTS = old_mmap-Xraw.$(OBJEXT)
+old_mmap_Xraw_LDADD = $(LDADD)
+old_mmap_Xraw_DEPENDENCIES = libtests.a
+old_mmap_Xverbose_SOURCES = old_mmap-Xverbose.c
+old_mmap_Xverbose_OBJECTS = old_mmap-Xverbose.$(OBJEXT)
+old_mmap_Xverbose_LDADD = $(LDADD)
+old_mmap_Xverbose_DEPENDENCIES = libtests.a
 old_mmap_v_none_SOURCES = old_mmap-v-none.c
 old_mmap_v_none_OBJECTS = old_mmap-v-none.$(OBJEXT)
 old_mmap_v_none_LDADD = $(LDADD)
@@ -1526,6 +1736,18 @@
 personality_OBJECTS = personality.$(OBJEXT)
 personality_LDADD = $(LDADD)
 personality_DEPENDENCIES = libtests.a
+personality_Xabbrev_SOURCES = personality-Xabbrev.c
+personality_Xabbrev_OBJECTS = personality-Xabbrev.$(OBJEXT)
+personality_Xabbrev_LDADD = $(LDADD)
+personality_Xabbrev_DEPENDENCIES = libtests.a
+personality_Xraw_SOURCES = personality-Xraw.c
+personality_Xraw_OBJECTS = personality-Xraw.$(OBJEXT)
+personality_Xraw_LDADD = $(LDADD)
+personality_Xraw_DEPENDENCIES = libtests.a
+personality_Xverbose_SOURCES = personality-Xverbose.c
+personality_Xverbose_OBJECTS = personality-Xverbose.$(OBJEXT)
+personality_Xverbose_LDADD = $(LDADD)
+personality_Xverbose_DEPENDENCIES = libtests.a
 pipe_SOURCES = pipe.c
 pipe_OBJECTS = pipe.$(OBJEXT)
 pipe_LDADD = $(LDADD)
@@ -1598,6 +1820,10 @@
 prctl_securebits_OBJECTS = prctl-securebits.$(OBJEXT)
 prctl_securebits_LDADD = $(LDADD)
 prctl_securebits_DEPENDENCIES = libtests.a
+prctl_spec_inject_SOURCES = prctl-spec-inject.c
+prctl_spec_inject_OBJECTS = prctl-spec-inject.$(OBJEXT)
+prctl_spec_inject_LDADD = $(LDADD)
+prctl_spec_inject_DEPENDENCIES = libtests.a
 prctl_tid_address_SOURCES = prctl-tid_address.c
 prctl_tid_address_OBJECTS = prctl-tid_address.$(OBJEXT)
 prctl_tid_address_LDADD = $(LDADD)
@@ -2088,10 +2314,34 @@
 so_peercred_OBJECTS = so_peercred.$(OBJEXT)
 so_peercred_LDADD = $(LDADD)
 so_peercred_DEPENDENCIES = libtests.a
+so_peercred_Xabbrev_SOURCES = so_peercred-Xabbrev.c
+so_peercred_Xabbrev_OBJECTS = so_peercred-Xabbrev.$(OBJEXT)
+so_peercred_Xabbrev_LDADD = $(LDADD)
+so_peercred_Xabbrev_DEPENDENCIES = libtests.a
+so_peercred_Xraw_SOURCES = so_peercred-Xraw.c
+so_peercred_Xraw_OBJECTS = so_peercred-Xraw.$(OBJEXT)
+so_peercred_Xraw_LDADD = $(LDADD)
+so_peercred_Xraw_DEPENDENCIES = libtests.a
+so_peercred_Xverbose_SOURCES = so_peercred-Xverbose.c
+so_peercred_Xverbose_OBJECTS = so_peercred-Xverbose.$(OBJEXT)
+so_peercred_Xverbose_LDADD = $(LDADD)
+so_peercred_Xverbose_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
+sock_filter_v_Xabbrev_SOURCES = sock_filter-v-Xabbrev.c
+sock_filter_v_Xabbrev_OBJECTS = sock_filter-v-Xabbrev.$(OBJEXT)
+sock_filter_v_Xabbrev_LDADD = $(LDADD)
+sock_filter_v_Xabbrev_DEPENDENCIES = libtests.a
+sock_filter_v_Xraw_SOURCES = sock_filter-v-Xraw.c
+sock_filter_v_Xraw_OBJECTS = sock_filter-v-Xraw.$(OBJEXT)
+sock_filter_v_Xraw_LDADD = $(LDADD)
+sock_filter_v_Xraw_DEPENDENCIES = libtests.a
+sock_filter_v_Xverbose_SOURCES = sock_filter-v-Xverbose.c
+sock_filter_v_Xverbose_OBJECTS = sock_filter-v-Xverbose.$(OBJEXT)
+sock_filter_v_Xverbose_LDADD = $(LDADD)
+sock_filter_v_Xverbose_DEPENDENCIES = libtests.a
 socketcall_SOURCES = socketcall.c
 socketcall_OBJECTS = socketcall.$(OBJEXT)
 socketcall_LDADD = $(LDADD)
@@ -2402,45 +2652,58 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c \
-	btrfs.c caps.c caps-abbrev.c check_sigblock.c check_sigign.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 delay.c \
-	delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	accept4.c access.c acct.c add_key.c adjtimex.c aio.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2456,59 +2719,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2526,44 +2794,57 @@
 	xettimeofday.c zeroargc.c
 DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c \
-	check_sigblock.c check_sigign.c chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	fallocate.c fanotify_init.c fanotify_mark.c \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2579,59 +2860,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2859,7 +3145,7 @@
   bases=`echo $$bases`
 RECHECK_LOGS = $(TEST_LOGS)
 AM_RECURSIVE_TARGETS = check recheck
-@USE_LIBUNWIND_TRUE@am__EXEEXT_2 = strace-k.test $(am__append_1)
+@ENABLE_STACKTRACE_TRUE@am__EXEEXT_2 = strace-k.test $(am__append_1)
 TEST_SUITE_LOG = test-suite.log
 TEST_EXTENSIONS = @EXEEXT@ .test
 am__test_logs1 = $(TESTS:=.log)
@@ -3001,6 +3287,10 @@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
+libdw_CFLAGS = @libdw_CFLAGS@
+libdw_CPPFLAGS = @libdw_CPPFLAGS@
+libdw_LDFLAGS = @libdw_LDFLAGS@
+libdw_LIBS = @libdw_LIBS@
 libexecdir = @libexecdir@
 libiberty_CPPFLAGS = @libiberty_CPPFLAGS@
 libiberty_LDFLAGS = @libiberty_LDFLAGS@
@@ -3095,9 +3385,14 @@
   add_key \
   adjtimex \
   aio \
+  aio_pgetevents \
   alarm \
   bpf \
   bpf-v \
+  bpf-obj_get_info_by_fd \
+  bpf-obj_get_info_by_fd-v \
+  bpf-obj_get_info_by_fd-prog \
+  bpf-obj_get_info_by_fd-prog-v \
   brk \
   btrfs \
   caps \
@@ -3130,6 +3425,9 @@
   fallocate \
   fanotify_init \
   fanotify_mark \
+  fanotify_mark-Xabbrev \
+  fanotify_mark-Xraw \
+  fanotify_mark-Xverbose \
   fchdir \
   fchmod \
   fchmodat \
@@ -3192,10 +3490,13 @@
   ioctl_block \
   ioctl_dm \
   ioctl_evdev \
+  ioctl_inotify \
   ioctl_kvm_run \
   ioctl_loop \
   ioctl_mtd \
   ioctl_rtc \
+  ioctl_perf \
+  ioctl_ptp \
   ioctl_scsi \
   ioctl_sg_io_v3 \
   ioctl_sg_io_v4 \
@@ -3208,15 +3509,30 @@
   ip_mreq \
   ipc \
   ipc_msg \
+  ipc_msg-Xabbrev \
+  ipc_msg-Xraw \
+  ipc_msg-Xverbose \
   ipc_msgbuf \
+  ipc_msgbuf-Xabbrev \
+  ipc_msgbuf-Xraw \
+  ipc_msgbuf-Xverbose \
   ipc_sem \
+  ipc_sem-Xabbrev \
+  ipc_sem-Xraw \
+  ipc_sem-Xverbose \
   ipc_shm \
+  ipc_shm-Xabbrev \
+  ipc_shm-Xraw \
+  ipc_shm-Xverbose \
   kcmp \
   kcmp-y \
   kern_features \
   kexec_file_load \
   kexec_load \
   keyctl \
+  keyctl-Xabbrev \
+  keyctl-Xraw \
+  keyctl-Xverbose \
   kill \
   lchown \
   lchown32 \
@@ -3241,11 +3557,20 @@
   mlock2 \
   mlockall \
   mmap \
+  mmap-Xabbrev \
+  mmap-Xraw \
+  mmap-Xverbose \
   mmap64 \
+  mmap64-Xabbrev \
+  mmap64-Xraw \
+  mmap64-Xverbose \
   mmsg \
   mmsg_name \
   modify_ldt \
   mount \
+  mount-Xabbrev \
+  mount-Xraw \
+  mount-Xverbose \
   move_pages \
   mq \
   mq_sendrecv \
@@ -3292,7 +3617,9 @@
   nlattr_ifaddrlblmsg \
   nlattr_ifaddrmsg \
   nlattr_ifinfomsg \
+  nlattr_ifla_af_spec \
   nlattr_ifla_brport \
+  nlattr_ifla_linkinfo \
   nlattr_ifla_port \
   nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
@@ -3317,6 +3644,9 @@
   old_mmap \
   old_mmap-P \
   old_mmap-v-none \
+  old_mmap-Xabbrev \
+  old_mmap-Xraw \
+  old_mmap-Xverbose \
   oldfstat \
   oldlstat \
   oldselect \
@@ -3328,6 +3658,9 @@
   pause \
   perf_event_open \
   personality \
+  personality-Xabbrev \
+  personality-Xraw \
+  personality-Xverbose \
   pipe \
   pipe2 \
   pkey_alloc \
@@ -3444,7 +3777,13 @@
   sigsuspend \
   so_linger \
   so_peercred \
+  so_peercred-Xabbrev \
+  so_peercred-Xraw \
+  so_peercred-Xverbose \
   sock_filter-v \
+  sock_filter-v-Xabbrev \
+  sock_filter-v-Xraw \
+  sock_filter-v-Xverbose \
   socketcall \
   sockopt-sol_netlink \
   splice \
@@ -3515,6 +3854,9 @@
 localtime_LDADD = $(clock_LIBS) $(LDADD)
 lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xraw_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xverbose_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mq_LDADD = $(mq_LIBS) $(LDADD)
 newfstatat_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 pc_LDADD = $(dl_LIBS) $(LDADD)
@@ -3539,10 +3881,14 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
 GEN_TESTS = _newselect.gen.test _newselect-P.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 \
+	add_key.gen.test adjtimex.gen.test aio.gen.test \
+	aio_pgetevents.gen.test alarm.gen.test bpf.gen.test \
+	bpf-v.gen.test bpf-obj_get_info_by_fd.gen.test \
+	bpf-obj_get_info_by_fd-v.gen.test \
+	bpf-obj_get_info_by_fd-prog.gen.test \
+	bpf-obj_get_info_by_fd-prog-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 dev-yy.gen.test dup.gen.test \
 	dup2.gen.test dup3.gen.test epoll_create.gen.test \
@@ -3550,70 +3896,85 @@
 	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 \
-	fsync-y.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_dm.gen.test ioctl_dm-v.gen.test \
-	ioctl_evdev.gen.test ioctl_evdev-v.gen.test \
+	fanotify_mark.gen.test fanotify_mark-Xabbrev.gen.test \
+	fanotify_mark-Xraw.gen.test fanotify_mark-Xverbose.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 fsync-y.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_dm.gen.test \
+	ioctl_dm-v.gen.test ioctl_evdev.gen.test \
+	ioctl_evdev-v.gen.test ioctl_inotify.gen.test \
 	ioctl_kvm_run.gen.test ioctl_loop.gen.test \
 	ioctl_loop-nv.gen.test ioctl_loop-v.gen.test \
-	ioctl_mtd.gen.test ioctl_nsfs.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_sock_gifconf.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 \
-	kcmp-y.gen.test kern_features.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 \
+	ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_perf.gen.test \
+	ioctl_ptp.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_sock_gifconf.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_msg-Xabbrev.gen.test \
+	ipc_msg-Xraw.gen.test ipc_msg-Xverbose.gen.test \
+	ipc_msgbuf-Xabbrev.gen.test ipc_msgbuf-Xraw.gen.test \
+	ipc_msgbuf-Xverbose.gen.test ipc_sem.gen.test \
+	ipc_sem-Xabbrev.gen.test ipc_sem-Xraw.gen.test \
+	ipc_sem-Xverbose.gen.test ipc_shm.gen.test \
+	ipc_shm-Xabbrev.gen.test ipc_shm-Xraw.gen.test \
+	ipc_shm-Xverbose.gen.test kcmp.gen.test kcmp-y.gen.test \
+	kern_features.gen.test kexec_file_load.gen.test \
+	kexec_load.gen.test keyctl.gen.test keyctl-Xabbrev.gen.test \
+	keyctl-Xraw.gen.test keyctl-Xverbose.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 modify_ldt.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 net-yy-inet6.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 \
-	nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test \
-	nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test \
-	nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test \
-	nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test \
-	nfnetlink_osf.gen.test nfnetlink_queue.gen.test \
-	nfnetlink_ulog.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 \
+	mmap-Xabbrev.gen.test mmap-Xraw.gen.test \
+	mmap-Xverbose.gen.test mmap64.gen.test mmap64-Xabbrev.gen.test \
+	mmap64-Xraw.gen.test mmap64-Xverbose.gen.test mmsg.gen.test \
+	mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test \
+	modify_ldt.gen.test mount.gen.test mount-Xabbrev.gen.test \
+	mount-Xraw.gen.test mount-Xverbose.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 \
+	net-yy-inet6.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 nfnetlink_acct.gen.test \
+	nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test \
+	nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test \
+	nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test \
+	nfnetlink_nftables.gen.test nfnetlink_osf.gen.test \
+	nfnetlink_queue.gen.test nfnetlink_ulog.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_af_spec.gen.test \
+	nlattr_ifla_brport.gen.test nlattr_ifla_linkinfo.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_mdba_mdb_entry.gen.test \
@@ -3625,16 +3986,19 @@
 	nlattr_tc_stats.gen.test nlattr_tca_stab.gen.test \
 	nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
 	nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
-	old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test \
-	oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test \
+	old_mmap-P.gen.test old_mmap-v-none.gen.test \
+	old_mmap-Xabbrev.gen.test old_mmap-Xraw.gen.test \
+	old_mmap-Xverbose.gen.test oldfstat.gen.test oldlstat.gen.test \
+	oldselect.gen.test oldselect-P.gen.test \
 	oldselect-efault.gen.test oldselect-efault-P.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-P.gen.test ppoll-v.gen.test \
-	pread64-pwrite64.gen.test preadv.gen.test \
+	perf_event_open_unabbrev.gen.test personality-Xabbrev.gen.test \
+	personality-Xraw.gen.test personality-Xverbose.gen.test \
+	pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test \
+	pkey_mprotect.gen.test ppoll.gen.test ppoll-P.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 \
@@ -3675,22 +4039,29 @@
 	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 sockopt-sol_netlink.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 \
+	so_linger.gen.test so_peercred.gen.test \
+	so_peercred-Xabbrev.gen.test so_peercred-Xraw.gen.test \
+	so_peercred-Xverbose.gen.test sock_filter-v.gen.test \
+	sock_filter-v-Xabbrev.gen.test sock_filter-v-Xraw.gen.test \
+	sock_filter-v-Xverbose.gen.test socketcall.gen.test \
+	sockopt-sol_netlink.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_personality_32.gen.test \
+	trace_personality_64.gen.test trace_personality_x32.gen.test \
+	trace_personality_regex_32.gen.test \
+	trace_personality_regex_64.gen.test \
+	trace_personality_regex_x32.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 \
@@ -3700,13 +4071,20 @@
 	xattr-strings.gen.test xet_robust_list.gen.test \
 	xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test \
 	xettimeofday.gen.test
-@USE_LIBUNWIND_FALSE@LIBUNWIND_TESTS = 
-@USE_LIBUNWIND_TRUE@LIBUNWIND_TESTS = strace-k.test $(am__append_1)
+@ENABLE_STACKTRACE_FALSE@STACKTRACE_TESTS = 
+@ENABLE_STACKTRACE_TRUE@STACKTRACE_TESTS = strace-k.test \
+@ENABLE_STACKTRACE_TRUE@	$(am__append_1)
 DECODER_TESTS = \
+	bpf-success.test \
+	bpf-success-v.test \
 	brk.test \
 	btrfs-v.test \
 	btrfs-vw.test \
+	btrfs-vwX.test \
+	btrfs-vX.test \
 	btrfs-w.test \
+	btrfs-wX.test \
+	btrfs-X.test \
 	caps-abbrev.test \
 	caps.test \
 	eventfd.test \
@@ -3716,6 +4094,7 @@
 	futex.test \
 	getuid.test \
 	ioctl.test \
+	ioctl_perf-success.test \
 	ipc_msgbuf.test \
 	kern_features-fault.test \
 	llseek.test \
@@ -3742,6 +4121,7 @@
 	prctl-seccomp-filter-v.test \
 	prctl-seccomp-strict.test \
 	prctl-securebits.test \
+	prctl-spec-inject.test \
 	prctl-tid_address.test \
 	prctl-tsc.test \
 	qual_fault-exit_group.test \
@@ -3790,9 +4170,13 @@
 	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
+	qual_fault-syscall.test \
 	qual_inject-error-signal.test \
+	qual_inject-error-signal-syscall.test \
 	qual_inject-retval.test \
+	qual_inject-retval-syscall.test \
 	qual_inject-signal.test \
+	qual_inject-signal-syscall.test \
 	qual_inject-syntax.test \
 	qual_signal.test \
 	qual_syscall.test \
@@ -3816,8 +4200,8 @@
 	# end of MISC_TESTS
 
 XFAIL_TESTS_ = 
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
@@ -3838,6 +4222,7 @@
 	count-f.expected \
 	eventfd.expected \
 	fadvise.h \
+	fcntl-common.c \
 	filter-unavailable.expected \
 	fstatat.c \
 	fstatx.c \
@@ -3848,12 +4233,12 @@
 	init.sh \
 	init_delete_module.h \
 	ipc.sh \
-	ipc_msgbuf.expected \
 	ksysent.sed \
 	lstatx.c \
 	match.awk \
 	net.expected \
 	netlink_sock_diag-v.sh \
+	nlattr_ifla.h \
 	pipe.expected \
 	print_user_desc.c \
 	process_vm_readv_writev.c \
@@ -3861,6 +4246,8 @@
 	qual_fault-exit_group.expected \
 	qual_inject-error-signal.expected \
 	qual_inject-signal.expected \
+	qualify_personality.sh \
+	qualify_personality_empty.in \
 	quotactl.h \
 	regex.in \
 	rt_sigaction.awk \
@@ -3878,16 +4265,23 @@
 	strace-E.expected \
 	strace-T.expected \
 	strace-ff.expected \
+	strace-k-demangle.expected \
 	strace-k-demangle.test \
+	strace-k.expected \
 	strace-k.test \
 	strace-r.expected \
 	strace.supp \
-	struct_flock.c \
 	sun_path.expected \
 	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
+	trace_personality_32.in \
+	trace_personality_64.in \
+	trace_personality_x32.in \
+	trace_personality_regex_32.in \
+	trace_personality_regex_64.in \
+	trace_personality_regex_x32.in \
 	trace_question.in \
 	trace_stat.in \
 	trace_stat_like.in \
@@ -4001,6 +4395,10 @@
 	@rm -f aio$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(aio_OBJECTS) $(aio_LDADD) $(LIBS)
 
+aio_pgetevents$(EXEEXT): $(aio_pgetevents_OBJECTS) $(aio_pgetevents_DEPENDENCIES) $(EXTRA_aio_pgetevents_DEPENDENCIES) 
+	@rm -f aio_pgetevents$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(aio_pgetevents_OBJECTS) $(aio_pgetevents_LDADD) $(LIBS)
+
 alarm$(EXEEXT): $(alarm_OBJECTS) $(alarm_DEPENDENCIES) $(EXTRA_alarm_DEPENDENCIES) 
 	@rm -f alarm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(alarm_OBJECTS) $(alarm_LDADD) $(LIBS)
@@ -4033,6 +4431,30 @@
 	@rm -f bpf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bpf_OBJECTS) $(bpf_LDADD) $(LIBS)
 
+bpf-obj_get_info_by_fd$(EXEEXT): $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog-v$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-v$(EXEEXT): $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_LDADD) $(LIBS)
+
+bpf-success$(EXEEXT): $(bpf_success_OBJECTS) $(bpf_success_DEPENDENCIES) $(EXTRA_bpf_success_DEPENDENCIES) 
+	@rm -f bpf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_OBJECTS) $(bpf_success_LDADD) $(LIBS)
+
+bpf-success-v$(EXEEXT): $(bpf_success_v_OBJECTS) $(bpf_success_v_DEPENDENCIES) $(EXTRA_bpf_success_v_DEPENDENCIES) 
+	@rm -f bpf-success-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_v_OBJECTS) $(bpf_success_v_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)
@@ -4201,6 +4623,18 @@
 	@rm -f fanotify_mark$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fanotify_mark_OBJECTS) $(fanotify_mark_LDADD) $(LIBS)
 
+fanotify_mark-Xabbrev$(EXEEXT): $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_DEPENDENCIES) $(EXTRA_fanotify_mark_Xabbrev_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_LDADD) $(LIBS)
+
+fanotify_mark-Xraw$(EXEEXT): $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_DEPENDENCIES) $(EXTRA_fanotify_mark_Xraw_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_LDADD) $(LIBS)
+
+fanotify_mark-Xverbose$(EXEEXT): $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_DEPENDENCIES) $(EXTRA_fanotify_mark_Xverbose_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_LDADD) $(LIBS)
+
 fchdir$(EXEEXT): $(fchdir_OBJECTS) $(fchdir_DEPENDENCIES) $(EXTRA_fchdir_DEPENDENCIES) 
 	@rm -f fchdir$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fchdir_OBJECTS) $(fchdir_LDADD) $(LIBS)
@@ -4481,6 +4915,10 @@
 	@rm -f ioctl_evdev-v$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_evdev_v_OBJECTS) $(ioctl_evdev_v_LDADD) $(LIBS)
 
+ioctl_inotify$(EXEEXT): $(ioctl_inotify_OBJECTS) $(ioctl_inotify_DEPENDENCIES) $(EXTRA_ioctl_inotify_DEPENDENCIES) 
+	@rm -f ioctl_inotify$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_inotify_OBJECTS) $(ioctl_inotify_LDADD) $(LIBS)
+
 ioctl_kvm_run$(EXEEXT): $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_DEPENDENCIES) $(EXTRA_ioctl_kvm_run_DEPENDENCIES) 
 	@rm -f ioctl_kvm_run$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_LDADD) $(LIBS)
@@ -4505,6 +4943,18 @@
 	@rm -f ioctl_nsfs$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_nsfs_OBJECTS) $(ioctl_nsfs_LDADD) $(LIBS)
 
+ioctl_perf$(EXEEXT): $(ioctl_perf_OBJECTS) $(ioctl_perf_DEPENDENCIES) $(EXTRA_ioctl_perf_DEPENDENCIES) 
+	@rm -f ioctl_perf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_OBJECTS) $(ioctl_perf_LDADD) $(LIBS)
+
+ioctl_perf-success$(EXEEXT): $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_DEPENDENCIES) $(EXTRA_ioctl_perf_success_DEPENDENCIES) 
+	@rm -f ioctl_perf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_LDADD) $(LIBS)
+
+ioctl_ptp$(EXEEXT): $(ioctl_ptp_OBJECTS) $(ioctl_ptp_DEPENDENCIES) $(EXTRA_ioctl_ptp_DEPENDENCIES) 
+	@rm -f ioctl_ptp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_ptp_OBJECTS) $(ioctl_ptp_LDADD) $(LIBS)
+
 ioctl_rtc$(EXEEXT): $(ioctl_rtc_OBJECTS) $(ioctl_rtc_DEPENDENCIES) $(EXTRA_ioctl_rtc_DEPENDENCIES) 
 	@rm -f ioctl_rtc$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_rtc_OBJECTS) $(ioctl_rtc_LDADD) $(LIBS)
@@ -4561,18 +5011,66 @@
 	@rm -f ipc_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msg_OBJECTS) $(ipc_msg_LDADD) $(LIBS)
 
+ipc_msg-Xabbrev$(EXEEXT): $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msg_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msg-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_LDADD) $(LIBS)
+
+ipc_msg-Xraw$(EXEEXT): $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_DEPENDENCIES) $(EXTRA_ipc_msg_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msg-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_LDADD) $(LIBS)
+
+ipc_msg-Xverbose$(EXEEXT): $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msg_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msg-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_LDADD) $(LIBS)
+
 ipc_msgbuf$(EXEEXT): $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_DEPENDENCIES) $(EXTRA_ipc_msgbuf_DEPENDENCIES) 
 	@rm -f ipc_msgbuf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_LDADD) $(LIBS)
 
+ipc_msgbuf-Xabbrev$(EXEEXT): $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_LDADD) $(LIBS)
+
+ipc_msgbuf-Xraw$(EXEEXT): $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_LDADD) $(LIBS)
+
+ipc_msgbuf-Xverbose$(EXEEXT): $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_LDADD) $(LIBS)
+
 ipc_sem$(EXEEXT): $(ipc_sem_OBJECTS) $(ipc_sem_DEPENDENCIES) $(EXTRA_ipc_sem_DEPENDENCIES) 
 	@rm -f ipc_sem$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_sem_OBJECTS) $(ipc_sem_LDADD) $(LIBS)
 
+ipc_sem-Xabbrev$(EXEEXT): $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_sem_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_sem-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_LDADD) $(LIBS)
+
+ipc_sem-Xraw$(EXEEXT): $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_DEPENDENCIES) $(EXTRA_ipc_sem_Xraw_DEPENDENCIES) 
+	@rm -f ipc_sem-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_LDADD) $(LIBS)
+
+ipc_sem-Xverbose$(EXEEXT): $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_DEPENDENCIES) $(EXTRA_ipc_sem_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_sem-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_LDADD) $(LIBS)
+
 ipc_shm$(EXEEXT): $(ipc_shm_OBJECTS) $(ipc_shm_DEPENDENCIES) $(EXTRA_ipc_shm_DEPENDENCIES) 
 	@rm -f ipc_shm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_shm_OBJECTS) $(ipc_shm_LDADD) $(LIBS)
 
+ipc_shm-Xabbrev$(EXEEXT): $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_shm_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_shm-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_LDADD) $(LIBS)
+
+ipc_shm-Xraw$(EXEEXT): $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_DEPENDENCIES) $(EXTRA_ipc_shm_Xraw_DEPENDENCIES) 
+	@rm -f ipc_shm-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_LDADD) $(LIBS)
+
+ipc_shm-Xverbose$(EXEEXT): $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_DEPENDENCIES) $(EXTRA_ipc_shm_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_shm-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_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)
@@ -4601,6 +5099,18 @@
 	@rm -f keyctl$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(keyctl_OBJECTS) $(keyctl_LDADD) $(LIBS)
 
+keyctl-Xabbrev$(EXEEXT): $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_DEPENDENCIES) $(EXTRA_keyctl_Xabbrev_DEPENDENCIES) 
+	@rm -f keyctl-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_LDADD) $(LIBS)
+
+keyctl-Xraw$(EXEEXT): $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_DEPENDENCIES) $(EXTRA_keyctl_Xraw_DEPENDENCIES) 
+	@rm -f keyctl-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_LDADD) $(LIBS)
+
+keyctl-Xverbose$(EXEEXT): $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_DEPENDENCIES) $(EXTRA_keyctl_Xverbose_DEPENDENCIES) 
+	@rm -f keyctl-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_LDADD) $(LIBS)
+
 kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) $(EXTRA_kill_DEPENDENCIES) 
 	@rm -f kill$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
@@ -4709,10 +5219,34 @@
 	@rm -f mmap$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap_OBJECTS) $(mmap_LDADD) $(LIBS)
 
+mmap-Xabbrev$(EXEEXT): $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_DEPENDENCIES) $(EXTRA_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_LDADD) $(LIBS)
+
+mmap-Xraw$(EXEEXT): $(mmap_Xraw_OBJECTS) $(mmap_Xraw_DEPENDENCIES) $(EXTRA_mmap_Xraw_DEPENDENCIES) 
+	@rm -f mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xraw_OBJECTS) $(mmap_Xraw_LDADD) $(LIBS)
+
+mmap-Xverbose$(EXEEXT): $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_DEPENDENCIES) $(EXTRA_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_LDADD) $(LIBS)
+
 mmap64$(EXEEXT): $(mmap64_OBJECTS) $(mmap64_DEPENDENCIES) $(EXTRA_mmap64_DEPENDENCIES) 
 	@rm -f mmap64$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap64_OBJECTS) $(mmap64_LDADD) $(LIBS)
 
+mmap64-Xabbrev$(EXEEXT): $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_DEPENDENCIES) $(EXTRA_mmap64_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap64-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_LDADD) $(LIBS)
+
+mmap64-Xraw$(EXEEXT): $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_DEPENDENCIES) $(EXTRA_mmap64_Xraw_DEPENDENCIES) 
+	@rm -f mmap64-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_LDADD) $(LIBS)
+
+mmap64-Xverbose$(EXEEXT): $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_DEPENDENCIES) $(EXTRA_mmap64_Xverbose_DEPENDENCIES) 
+	@rm -f mmap64-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_LDADD) $(LIBS)
+
 mmsg$(EXEEXT): $(mmsg_OBJECTS) $(mmsg_DEPENDENCIES) $(EXTRA_mmsg_DEPENDENCIES) 
 	@rm -f mmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmsg_OBJECTS) $(mmsg_LDADD) $(LIBS)
@@ -4737,6 +5271,18 @@
 	@rm -f mount$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
 
+mount-Xabbrev$(EXEEXT): $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_DEPENDENCIES) $(EXTRA_mount_Xabbrev_DEPENDENCIES) 
+	@rm -f mount-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_LDADD) $(LIBS)
+
+mount-Xraw$(EXEEXT): $(mount_Xraw_OBJECTS) $(mount_Xraw_DEPENDENCIES) $(EXTRA_mount_Xraw_DEPENDENCIES) 
+	@rm -f mount-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xraw_OBJECTS) $(mount_Xraw_LDADD) $(LIBS)
+
+mount-Xverbose$(EXEEXT): $(mount_Xverbose_OBJECTS) $(mount_Xverbose_DEPENDENCIES) $(EXTRA_mount_Xverbose_DEPENDENCIES) 
+	@rm -f mount-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xverbose_OBJECTS) $(mount_Xverbose_LDADD) $(LIBS)
+
 move_pages$(EXEEXT): $(move_pages_OBJECTS) $(move_pages_DEPENDENCIES) $(EXTRA_move_pages_DEPENDENCIES) 
 	@rm -f move_pages$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(move_pages_OBJECTS) $(move_pages_LDADD) $(LIBS)
@@ -4941,10 +5487,18 @@
 	@rm -f nlattr_ifinfomsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_LDADD) $(LIBS)
 
+nlattr_ifla_af_spec$(EXEEXT): $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_DEPENDENCIES) $(EXTRA_nlattr_ifla_af_spec_DEPENDENCIES) 
+	@rm -f nlattr_ifla_af_spec$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_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_linkinfo$(EXEEXT): $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_DEPENDENCIES) $(EXTRA_nlattr_ifla_linkinfo_DEPENDENCIES) 
+	@rm -f nlattr_ifla_linkinfo$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_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)
@@ -5045,6 +5599,18 @@
 	@rm -f old_mmap-P$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_P_OBJECTS) $(old_mmap_P_LDADD) $(LIBS)
 
+old_mmap-Xabbrev$(EXEEXT): $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_DEPENDENCIES) $(EXTRA_old_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f old_mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_LDADD) $(LIBS)
+
+old_mmap-Xraw$(EXEEXT): $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_DEPENDENCIES) $(EXTRA_old_mmap_Xraw_DEPENDENCIES) 
+	@rm -f old_mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_LDADD) $(LIBS)
+
+old_mmap-Xverbose$(EXEEXT): $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_DEPENDENCIES) $(EXTRA_old_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f old_mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_LDADD) $(LIBS)
+
 old_mmap-v-none$(EXEEXT): $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_DEPENDENCIES) $(EXTRA_old_mmap_v_none_DEPENDENCIES) 
 	@rm -f old_mmap-v-none$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_LDADD) $(LIBS)
@@ -5113,6 +5679,18 @@
 	@rm -f personality$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(personality_OBJECTS) $(personality_LDADD) $(LIBS)
 
+personality-Xabbrev$(EXEEXT): $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_DEPENDENCIES) $(EXTRA_personality_Xabbrev_DEPENDENCIES) 
+	@rm -f personality-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_LDADD) $(LIBS)
+
+personality-Xraw$(EXEEXT): $(personality_Xraw_OBJECTS) $(personality_Xraw_DEPENDENCIES) $(EXTRA_personality_Xraw_DEPENDENCIES) 
+	@rm -f personality-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xraw_OBJECTS) $(personality_Xraw_LDADD) $(LIBS)
+
+personality-Xverbose$(EXEEXT): $(personality_Xverbose_OBJECTS) $(personality_Xverbose_DEPENDENCIES) $(EXTRA_personality_Xverbose_DEPENDENCIES) 
+	@rm -f personality-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xverbose_OBJECTS) $(personality_Xverbose_LDADD) $(LIBS)
+
 pipe$(EXEEXT): $(pipe_OBJECTS) $(pipe_DEPENDENCIES) $(EXTRA_pipe_DEPENDENCIES) 
 	@rm -f pipe$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(pipe_OBJECTS) $(pipe_LDADD) $(LIBS)
@@ -5185,6 +5763,10 @@
 	@rm -f prctl-securebits$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_securebits_OBJECTS) $(prctl_securebits_LDADD) $(LIBS)
 
+prctl-spec-inject$(EXEEXT): $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_DEPENDENCIES) $(EXTRA_prctl_spec_inject_DEPENDENCIES) 
+	@rm -f prctl-spec-inject$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_LDADD) $(LIBS)
+
 prctl-tid_address$(EXEEXT): $(prctl_tid_address_OBJECTS) $(prctl_tid_address_DEPENDENCIES) $(EXTRA_prctl_tid_address_DEPENDENCIES) 
 	@rm -f prctl-tid_address$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_tid_address_OBJECTS) $(prctl_tid_address_LDADD) $(LIBS)
@@ -5669,10 +6251,34 @@
 	@rm -f so_peercred$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(so_peercred_OBJECTS) $(so_peercred_LDADD) $(LIBS)
 
+so_peercred-Xabbrev$(EXEEXT): $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_DEPENDENCIES) $(EXTRA_so_peercred_Xabbrev_DEPENDENCIES) 
+	@rm -f so_peercred-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_LDADD) $(LIBS)
+
+so_peercred-Xraw$(EXEEXT): $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_DEPENDENCIES) $(EXTRA_so_peercred_Xraw_DEPENDENCIES) 
+	@rm -f so_peercred-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_LDADD) $(LIBS)
+
+so_peercred-Xverbose$(EXEEXT): $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_DEPENDENCIES) $(EXTRA_so_peercred_Xverbose_DEPENDENCIES) 
+	@rm -f so_peercred-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_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)
 
+sock_filter-v-Xabbrev$(EXEEXT): $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_DEPENDENCIES) $(EXTRA_sock_filter_v_Xabbrev_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_LDADD) $(LIBS)
+
+sock_filter-v-Xraw$(EXEEXT): $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_DEPENDENCIES) $(EXTRA_sock_filter_v_Xraw_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_LDADD) $(LIBS)
+
+sock_filter-v-Xverbose$(EXEEXT): $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_DEPENDENCIES) $(EXTRA_sock_filter_v_Xverbose_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_LDADD) $(LIBS)
+
 socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_socketcall_DEPENDENCIES) 
 	@rm -f socketcall$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
@@ -5960,6 +6566,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add_key.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adjtimex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aio_pgetevents.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alarm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/answer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach-f-p-cmd.Po@am__quote@
@@ -5967,6 +6574,12 @@
 @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-obj_get_info_by_fd-prog-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-obj_get_info_by_fd-prog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-obj_get_info_by_fd-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-obj_get_info_by_fd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-success-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-success.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@
@@ -6009,6 +6622,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fadvise64_64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fallocate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchdir.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchmod.Po@am__quote@
@@ -6080,12 +6696,16 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_dm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_evdev-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_evdev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_inotify.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_kvm_run.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop-nv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_mtd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_nsfs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_perf-success.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_perf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_ptp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_rtc-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_rtc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_scsi.Po@am__quote@
@@ -6099,9 +6719,21 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioprio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip_mreq.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm-Xverbose.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-y.Po@am__quote@
@@ -6109,6 +6741,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kern_features.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@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ksysent.Po@am__quote@
@@ -6162,13 +6797,22 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlock.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlock2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlockall.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64-mmap64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg-silent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg_name-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg_name.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modify_ldt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/move_pages.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mq.Po@am__quote@
@@ -6221,7 +6865,9 @@
 @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_af_spec.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_linkinfo.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@
@@ -6246,6 +6892,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls-d.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-P.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-v-none.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldfstat.Po@am__quote@
@@ -6263,6 +6912,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perf_event_open.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perf_event_open_nonverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perf_event_open_unabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe2.Po@am__quote@
@@ -6282,6 +6934,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-seccomp-filter-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-seccomp-strict.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-securebits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-spec-inject.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-tid_address.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-tsc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pread64_pwrite64-pread64-pwrite64.Po@am__quote@
@@ -6402,7 +7055,13 @@
 @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-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred-Xverbose.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-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v-Xverbose.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)/sockopt-sol_netlink.Po@am__quote@
@@ -6929,6 +7588,48 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64-mmap64.obj `if test -f 'mmap64.c'; then $(CYGPATH_W) 'mmap64.c'; else $(CYGPATH_W) '$(srcdir)/mmap64.c'; fi`
 
+mmap64_Xabbrev-mmap64-Xabbrev.o: mmap64-Xabbrev.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.o -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.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) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+
+mmap64_Xabbrev-mmap64-Xabbrev.obj: mmap64-Xabbrev.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.obj -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.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) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+
+mmap64_Xraw-mmap64-Xraw.o: mmap64-Xraw.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.o -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.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) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+
+mmap64_Xraw-mmap64-Xraw.obj: mmap64-Xraw.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.obj -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.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) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+
+mmap64_Xverbose-mmap64-Xverbose.o: mmap64-Xverbose.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.o -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.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) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+
+mmap64_Xverbose-mmap64-Xverbose.obj: mmap64-Xverbose.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.obj -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.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) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+
 newfstatat-newfstatat.o: newfstatat.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newfstatat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT newfstatat-newfstatat.o -MD -MP -MF $(DEPDIR)/newfstatat-newfstatat.Tpo -c -o newfstatat-newfstatat.o `test -f 'newfstatat.c' || echo '$(srcdir)/'`newfstatat.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/newfstatat-newfstatat.Tpo $(DEPDIR)/newfstatat-newfstatat.Po
@@ -7480,6 +8181,9 @@
 $(srcdir)/aio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/aio_pgetevents.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/alarm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7489,6 +8193,18 @@
 $(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-obj_get_info_by_fd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog-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) $^ $@
 
@@ -7576,6 +8292,15 @@
 $(srcdir)/fanotify_mark.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/fanotify_mark-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/fchdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7768,6 +8493,9 @@
 $(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_inotify.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7786,6 +8514,12 @@
 $(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_perf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_ptp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7828,12 +8562,48 @@
 $(srcdir)/ipc_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_msg-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_sem.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_sem-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_shm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_shm-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7852,6 +8622,15 @@
 $(srcdir)/keyctl.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/keyctl-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kill.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7915,9 +8694,27 @@
 $(srcdir)/mlockall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmap64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap64-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7936,6 +8733,15 @@
 $(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mount-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/move_pages.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8062,9 +8868,15 @@
 $(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_ifla_af_spec.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_linkinfo.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) $^ $@
 
@@ -8137,6 +8949,15 @@
 $(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/old_mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8179,6 +9000,15 @@
 $(srcdir)/perf_event_open_unabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/personality-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/pipe2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8509,9 +9339,27 @@
 $(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_peercred-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xverbose.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)/sock_filter-v-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xverbose.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) $^ $@
 
@@ -8593,6 +9441,24 @@
 $(srcdir)/trace_lstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/trace_personality_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/trace_question.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests-mx32/add_key.c b/tests-mx32/add_key.c
index 999da03..9ad5e28 100644
--- a/tests-mx32/add_key.c
+++ b/tests-mx32/add_key.c
@@ -2,7 +2,7 @@
  * Check decoding of add_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -102,7 +102,7 @@
 		{ bogus_desc, NULL },
 		{ ARG_STR("\25\26\27\30\31") },
 		{ ARG_STR("desc") },
-		{ "overly long description", _STR("overly long ") "..." },
+		{ "overly long description", STRINGIFY("overly long ") "..." },
 	};
 
 	struct {
@@ -113,10 +113,10 @@
 		{ ARG_STR(NULL), 0 },
 		{ bogus_payload + sizeof(unterminated3), NULL,
 			(size_t) 0xdeadbeefbadc0dedULL },
-		{ bogus_payload, _STR(""), 0 },
-		{ bogus_payload, _STR("\16\17\20\21\22"), 5 },
+		{ bogus_payload, STRINGIFY(""), 0 },
+		{ bogus_payload, STRINGIFY("\16\17\20\21\22"), 5 },
 		{ bogus_payload, NULL, 10 },
-		{ "overly long payload", _STR("overly long ") "...", 15 },
+		{ "overly long payload", STRINGIFY("overly long ") "...", 15 },
 	};
 
 	struct {
diff --git a/tests-mx32/aio.c b/tests-mx32/aio.c
index 335bb31..ea18700 100644
--- a/tests-mx32/aio.c
+++ b/tests-mx32/aio.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -335,7 +335,7 @@
 	       "}, {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",
+	       "}, {NULL}, {%#lx}, ... /* %p */]) = %s\n",
 	       *ctx, 1057L,
 	       cbv2[0].aio_data, cbv2[0].aio_key,
 	       cbv2[0].aio_lio_opcode, cbv2[0].aio_fildes,
diff --git a/tests-mx32/aio_pgetevents.c b/tests-mx32/aio_pgetevents.c
new file mode 100644
index 0000000..ba5ac71
--- /dev/null
+++ b/tests-mx32/aio_pgetevents.c
@@ -0,0 +1,190 @@
+/*
+ * Check decoding of io_pgetevents syscall.
+ *
+ * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <unistd.h>
+#include <asm/unistd.h>
+#include "scno.h"
+
+#if defined __NR_io_setup && defined __NR_io_pgetevents
+
+# include <fcntl.h>
+# include <inttypes.h>
+# include <stdio.h>
+# include <time.h>
+
+# include "nsig.h"
+
+# include <linux/aio_abi.h>
+
+# if !HAVE_STRUCT___AIO_SIGSET
+struct __aio_sigset {
+	sigset_t *sigmask;
+	size_t sigsetsize;
+};
+# endif
+
+static const char *errstr;
+
+static long
+sys_io_pgetevents(const kernel_ulong_t ctx_id,
+		  const kernel_long_t min_nr,
+		  const kernel_long_t nr,
+		  const kernel_ulong_t events,
+		  const kernel_ulong_t timeout,
+		  const kernel_ulong_t usig)
+{
+	long rc = syscall(__NR_io_pgetevents, ctx_id, min_nr, nr,
+			  events, timeout, usig);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	static const kernel_ulong_t bogus_ctx =
+		(kernel_ulong_t) 0xface1e55deadbeefLL;
+	static const kernel_long_t bogus_min_nr =
+		(kernel_long_t) 0xca7faceddeadf00dLL;
+	static const kernel_long_t bogus_nr =
+		(kernel_long_t) 0xba5e1e505ca571e0LL;
+	static const size_t bogus_sigsetsize =
+		(size_t) 0xdeadbeefbadcaffeULL;
+
+	const unsigned int sizeof_data0 = 4096;
+	const unsigned int sizeof_data1 = 8192;
+	void *data0 = tail_alloc(sizeof_data0);
+	void *data1 = tail_alloc(sizeof_data1);
+
+	const struct iocb proto_cb[] = {
+		{
+			.aio_data = (unsigned long) 0xfeedface11111111ULL,
+			.aio_reqprio = 11,
+			.aio_buf = (unsigned long) data0,
+			.aio_offset = (unsigned long) 0xdeface1facefeedULL,
+			.aio_nbytes = sizeof_data0
+		},
+		{
+			.aio_data = (unsigned long) 0xfeedface22222222ULL,
+			.aio_reqprio = 22,
+			.aio_buf = (unsigned long) data1,
+			.aio_offset = (unsigned long) 0xdeface2cafef00dULL,
+			.aio_nbytes = sizeof_data1
+		}
+	};
+	const struct iocb *cb = tail_memdup(proto_cb, sizeof(proto_cb));
+
+	const long proto_cbs[] = {
+		(long) &cb[0], (long) &cb[1]
+	};
+	const long *cbs = tail_memdup(proto_cbs, sizeof(proto_cbs));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned long, ctx);
+	*ctx = 0;
+
+	const unsigned int nr = ARRAY_SIZE(proto_cb);
+
+	const struct io_event *ev = tail_alloc(nr * sizeof(struct io_event));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct timespec, ts);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct __aio_sigset, ss);
+	TAIL_ALLOC_OBJECT_CONST_PTR(sigset_t, sigs);
+
+	(void) close(0);
+	if (open("/dev/zero", O_RDONLY))
+		perror_msg_and_skip("open: %s", "/dev/zero");
+
+	if (syscall(__NR_io_setup, nr, ctx))
+		perror_msg_and_skip("io_setup");
+
+	if (syscall(__NR_io_submit, *ctx, nr, cbs) != (long) nr)
+		perror_msg_and_skip("io_submit");
+
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  (uintptr_t) (ev + 1), 0, 0);
+	printf("io_pgetevents(%#jx, %ld, %ld, %p, NULL, NULL) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, ev + 1, errstr);
+
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  0, (uintptr_t) (ts + 1), 0);
+	printf("io_pgetevents(%#jx, %ld, %ld, NULL, %p, NULL) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, ts + 1, errstr);
+
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  0, 0, (uintptr_t) (ss + 1));
+	printf("io_pgetevents(%#jx, %ld, %ld, NULL, NULL, %p) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, ss + 1, errstr);
+
+	ss->sigmask = sigs + 1;
+	ss->sigsetsize =  bogus_sigsetsize;
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  0, 0, (uintptr_t) ss);
+	printf("io_pgetevents(%#jx, %ld, %ld, NULL, NULL"
+	       ", {sigmask=%p, sigsetsize=%zu}) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, sigs + 1, bogus_sigsetsize, errstr);
+
+	ts->tv_sec = 0xdeadbeefU;
+	ts->tv_nsec = 0xfacefeedU;
+	ss->sigmask = sigs;
+	ss->sigsetsize =  NSIG_BYTES;
+	sys_io_pgetevents(bogus_ctx, 0, 0, 0, (uintptr_t) ts, (uintptr_t) ss);
+	printf("io_pgetevents(%#jx, 0, 0, NULL"
+	       ", {tv_sec=%lld, tv_nsec=%llu}"
+	       ", {sigmask=~[], sigsetsize=%u}) = %s\n",
+	       (uintmax_t) bogus_ctx, (long long) ts->tv_sec,
+	       zero_extend_signed_to_ull(ts->tv_nsec), NSIG_BYTES,
+	       errstr);
+
+	sigemptyset(sigs);
+	sigaddset(sigs, SIGSYS);
+
+	ts->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+	ts->tv_nsec = (long) 0xbadc0dedfacefeedLL;
+	sys_io_pgetevents(bogus_ctx, 0, 0, 0, (uintptr_t) ts, (uintptr_t) ss);
+	printf("io_pgetevents(%#jx, 0, 0, NULL"
+	       ", {tv_sec=%lld, tv_nsec=%llu}"
+	       ", {sigmask=[SYS], sigsetsize=%u}) = %s\n",
+	       (uintmax_t) bogus_ctx, (long long) ts->tv_sec,
+	       zero_extend_signed_to_ull(ts->tv_nsec), NSIG_BYTES,
+	       errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_io_setup && __NR_io_pgetevents")
+
+#endif
diff --git a/tests-mx32/aio_pgetevents.gen.test b/tests-mx32/aio_pgetevents.gen.test
new file mode 100755
index 0000000..7ea3874
--- /dev/null
+++ b/tests-mx32/aio_pgetevents.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (aio_pgetevents -e trace=io_pgetevents); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=io_pgetevents
diff --git a/tests-mx32/bpf-obj_get_info_by_fd-prog-v.c b/tests-mx32/bpf-obj_get_info_by_fd-prog-v.c
new file mode 100644
index 0000000..d7e10b4
--- /dev/null
+++ b/tests-mx32/bpf-obj_get_info_by_fd-prog-v.c
@@ -0,0 +1,3 @@
+#define CHECK_OBJ_PROG 1
+#define VERBOSE 1
+#include "bpf-obj_get_info_by_fd.c"
diff --git a/tests-mx32/bpf-obj_get_info_by_fd-prog-v.gen.test b/tests-mx32/bpf-obj_get_info_by_fd-prog-v.gen.test
new file mode 100755
index 0000000..fcaa1d8
--- /dev/null
+++ b/tests-mx32/bpf-obj_get_info_by_fd-prog-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd-prog-v -a20 -y -v -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -v -e trace=bpf
diff --git a/tests-mx32/bpf-obj_get_info_by_fd-prog.c b/tests-mx32/bpf-obj_get_info_by_fd-prog.c
new file mode 100644
index 0000000..19a5f75
--- /dev/null
+++ b/tests-mx32/bpf-obj_get_info_by_fd-prog.c
@@ -0,0 +1,2 @@
+#define CHECK_OBJ_PROG 1
+#include "bpf-obj_get_info_by_fd.c"
diff --git a/tests-mx32/bpf-obj_get_info_by_fd-prog.gen.test b/tests-mx32/bpf-obj_get_info_by_fd-prog.gen.test
new file mode 100755
index 0000000..8cbd7c0
--- /dev/null
+++ b/tests-mx32/bpf-obj_get_info_by_fd-prog.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd-prog -a20 -y -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -e trace=bpf
diff --git a/tests-mx32/bpf-obj_get_info_by_fd-v.c b/tests-mx32/bpf-obj_get_info_by_fd-v.c
new file mode 100644
index 0000000..2debc5f
--- /dev/null
+++ b/tests-mx32/bpf-obj_get_info_by_fd-v.c
@@ -0,0 +1,2 @@
+#define VERBOSE 1
+#include "bpf-obj_get_info_by_fd.c"
diff --git a/tests-mx32/bpf-obj_get_info_by_fd-v.gen.test b/tests-mx32/bpf-obj_get_info_by_fd-v.gen.test
new file mode 100755
index 0000000..255d91e
--- /dev/null
+++ b/tests-mx32/bpf-obj_get_info_by_fd-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd-v -a20 -y -v -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -v -e trace=bpf
diff --git a/tests-mx32/bpf-obj_get_info_by_fd.c b/tests-mx32/bpf-obj_get_info_by_fd.c
new file mode 100644
index 0000000..67b5122
--- /dev/null
+++ b/tests-mx32/bpf-obj_get_info_by_fd.c
@@ -0,0 +1,499 @@
+/*
+ * Check bpf(BPF_OBJ_GET_INFO_BY_FD) decoding.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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"
+
+#ifndef CHECK_OBJ_PROG
+# define CHECK_OBJ_PROG 0
+#endif
+
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/sysmacros.h>
+#include <asm/unistd.h>
+
+#include "print_fields.h"
+#include "scno.h"
+
+#ifdef HAVE_LINUX_BPF_H
+# include <linux/bpf.h>
+#endif
+
+#include "bpf_attr.h"
+
+#include "xlat.h"
+#include "xlat/bpf_map_flags.h"
+#include "xlat/bpf_map_types.h"
+#include "xlat/bpf_prog_types.h"
+
+#define XLAT_MACROS_ONLY
+#include "xlat/bpf_commands.h"
+#include "xlat/bpf_op_alu.h"
+#include "xlat/bpf_op_jmp.h"
+#include "xlat/bpf_size.h"
+#include "xlat/bpf_src.h"
+#include "xlat/ebpf_class.h"
+#include "xlat/ebpf_mode.h"
+#include "xlat/ebpf_op_alu.h"
+#include "xlat/ebpf_regs.h"
+#include "xlat/ebpf_size.h"
+
+#ifndef HAVE_STRUCT_BPF_INSN
+struct bpf_insn {
+	uint8_t	code;
+	uint8_t	dst_reg:4;
+	uint8_t	src_reg:4;
+	int16_t	off;
+	int32_t	imm;
+};
+#endif
+
+static const char *errstr;
+
+static long
+sys_bpf(kernel_ulong_t cmd, void *attr, kernel_ulong_t size)
+{
+	long rc = syscall(__NR_bpf, cmd, attr, size);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static void
+print_map_create(void *attr_void, size_t size, long rc)
+{
+	/* struct BPF_MAP_CREATE_struct *attr = attr_void; */
+
+	printf("bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_ARRAY, key_size=4"
+	       ", value_size=8, max_entries=1");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, map_flags))
+		printf(", map_flags=0");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, inner_map_fd))
+		printf(", inner_map_fd=0</dev/null>");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, map_name))
+		printf(", map_name=\"test_map\"");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, map_ifindex))
+		printf(", map_ifindex=0");
+	printf("}, %zu) = ", size);
+	if (rc >= 0)
+		printf("%ld<anon_inode:bpf-map>\n", rc);
+	else
+		puts(errstr);
+}
+
+#if CHECK_OBJ_PROG
+static struct bpf_insn socket_prog[] = {
+	{ /* 0 */
+		.code    = BPF_ALU64 | BPF_K | BPF_MOV,
+		.dst_reg = BPF_REG_1,
+		.imm     = 0,
+	},
+	{ /* 1 */
+		.code    = BPF_STX | BPF_W | BPF_MEM,
+		.dst_reg = BPF_REG_10,
+		.src_reg = BPF_REG_1,
+		.off     = -4,
+	},
+	{ /* 2 */
+		.code = BPF_ALU64 | BPF_X | BPF_MOV,
+		.dst_reg = BPF_REG_2,
+		.src_reg = BPF_REG_10,
+	},
+	{ /* 3 */
+		.code    = BPF_ALU64 | BPF_K | BPF_ADD,
+		.dst_reg = BPF_REG_2,
+		.imm     = -4,
+	},
+	{ /* 4 */
+		.code    = BPF_LD | BPF_DW | BPF_IMM,
+		.dst_reg = BPF_REG_1,
+		.src_reg = 1 /* BPF_PSEUDO_MAP_FD */,
+		.imm     = 0, /* to be set to map fd */
+	},
+	{ /* 5 */
+		.imm     = 0,
+	},
+	{ /* 6 */
+		.code    = BPF_JMP | BPF_K | BPF_CALL,
+		.imm     = 0x1, /* BPF_FUNC_map_lookup_elem */
+	},
+	{ /* 7 */
+		.code    = BPF_ALU64 | BPF_K | BPF_MOV,
+		.dst_reg = BPF_REG_0,
+		.imm     = 0,
+	},
+	{ /* 8 */
+		.code    = BPF_JMP | BPF_K | BPF_EXIT,
+	},
+};
+
+# if VERBOSE
+static const char *socket_prog_fmt =
+	"[{code=BPF_ALU64|BPF_K|BPF_MOV"
+		", dst_reg=BPF_REG_1, src_reg=BPF_REG_0, off=0, imm=0}"
+	", {code=BPF_STX|BPF_W|BPF_MEM"
+		", dst_reg=BPF_REG_10, src_reg=BPF_REG_1, off=-4, imm=0}"
+	", {code=BPF_ALU64|BPF_X|BPF_MOV"
+		", dst_reg=BPF_REG_2, src_reg=BPF_REG_10, off=0, imm=0}"
+	", {code=BPF_ALU64|BPF_K|BPF_ADD"
+		", dst_reg=BPF_REG_2, src_reg=BPF_REG_0, off=0, imm=0xfffffffc}"
+	", {code=BPF_LD|BPF_DW|BPF_IMM"
+		", dst_reg=BPF_REG_1, src_reg=BPF_REG_1, off=0, imm=%#x}"
+	", {code=BPF_LD|BPF_W|BPF_IMM"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0}"
+	", {code=BPF_JMP|BPF_K|BPF_CALL"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0x1}"
+	", {code=BPF_ALU64|BPF_K|BPF_MOV"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0}"
+	", {code=BPF_JMP|BPF_K|BPF_EXIT"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0}"
+	"]";
+# endif /* VERBOSE */
+
+static const char *license = "BSD";
+static char log_buf[4096];
+
+static void
+print_prog_load(void *attr_void, size_t size, long rc)
+{
+	printf("bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER"
+	       ", insn_cnt=%zu, insns=", ARRAY_SIZE(socket_prog));
+# if VERBOSE
+	printf(socket_prog_fmt, socket_prog[4].imm);
+# else
+	printf("%p", socket_prog);
+# endif
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, license))
+		printf(", license=\"BSD\"");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, log_buf))
+		printf(", log_level=42, log_size=%zu, log_buf=\"\"",
+		       sizeof(log_buf));
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, kern_version))
+		printf(", kern_version=KERNEL_VERSION(57005, 192, 222)");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, prog_flags))
+		printf(", prog_flags=0");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, prog_name))
+		printf(", prog_name=\"test_prog\"");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, prog_ifindex))
+		printf(", prog_ifindex=0");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, expected_attach_type))
+		printf(", expected_attach_type=BPF_CGROUP_INET_INGRESS");
+	printf("}, %zu) = ", size);
+	if (rc >= 0)
+		printf("%ld<anon_inode:bpf-prog>\n", rc);
+	else
+		puts(errstr);
+}
+#endif /* CHECK_OBJ_PROG */
+
+static long
+try_bpf(kernel_ulong_t cmd, void (*printer)(void *attr, size_t size, long rc),
+	void *attr, size_t **sizes)
+{
+	long rc;
+
+	for (rc = -1; **sizes; (*sizes)++) {
+		rc = sys_bpf(cmd, attr, **sizes);
+		printer(attr, **sizes, rc);
+
+		if (rc >= 0)
+			break;
+	}
+
+	return rc;
+}
+
+int
+main(void)
+{
+	struct BPF_MAP_CREATE_struct bpf_map_create_attr = {
+		.map_type    = BPF_MAP_TYPE_ARRAY,
+		.key_size    = 4,
+		.value_size  = 8,
+		.max_entries = 1,
+		.map_name    = "test_map",
+	};
+	size_t bpf_map_create_attr_sizes[] = {
+		sizeof(bpf_map_create_attr),
+		offsetofend(struct BPF_MAP_CREATE_struct, max_entries),
+		0,
+	};
+
+#if CHECK_OBJ_PROG
+	struct BPF_PROG_LOAD_struct bpf_prog_load_attr = {
+		.prog_type    = BPF_PROG_TYPE_SOCKET_FILTER,
+		.insn_cnt     = ARRAY_SIZE(socket_prog),
+		.insns        = (uintptr_t) socket_prog,
+		.license      = (uintptr_t) license,
+		.log_level    = 42,
+		.log_size     = sizeof(log_buf),
+		.log_buf      = (uintptr_t) log_buf,
+		.kern_version = 0xdeadc0de,
+		.prog_name    = "test_prog",
+	};
+	size_t bpf_prog_load_attr_sizes[] = {
+		sizeof(bpf_prog_load_attr),
+		offsetofend(struct BPF_PROG_LOAD_struct, prog_name),
+		offsetofend(struct BPF_PROG_LOAD_struct, prog_flags),
+		offsetofend(struct BPF_PROG_LOAD_struct, kern_version),
+		offsetofend(struct BPF_PROG_LOAD_struct, log_buf),
+		offsetofend(struct BPF_PROG_LOAD_struct, license),
+		offsetofend(struct BPF_PROG_LOAD_struct, insns),
+		0,
+	};
+#endif /* CHECK_OBJ_PROG */
+
+	size_t *bpf_map_create_attr_size = bpf_map_create_attr_sizes;
+	int map_fd = try_bpf(BPF_MAP_CREATE, print_map_create,
+			     &bpf_map_create_attr, &bpf_map_create_attr_size);
+	if (map_fd < 0)
+		perror_msg_and_skip("BPF_MAP_CREATE failed");
+
+#if CHECK_OBJ_PROG
+	socket_prog[4].imm = map_fd;
+
+	size_t *bpf_prog_load_attr_size = bpf_prog_load_attr_sizes;
+	int prog_fd = try_bpf(BPF_PROG_LOAD, print_prog_load,
+			      &bpf_prog_load_attr, &bpf_prog_load_attr_size);
+	if (prog_fd < 0)
+		perror_msg_and_skip("BPF_PROG_LOAD failed (log: \"%s\")",
+				    log_buf);
+#endif /* CHECK_OBJ_PROG */
+
+	/*
+	 * This has to be a macro, otherwise the compiler complains that
+	 * initializer element is not constant.
+	 */
+	#define  MAP_INFO_SZ (sizeof(*map_info) + 64)
+	struct bpf_map_info_struct *map_info = calloc(1, MAP_INFO_SZ);
+	struct BPF_OBJ_GET_INFO_BY_FD_struct bpf_map_get_info_attr = {
+		.bpf_fd   = map_fd,
+		.info_len = MAP_INFO_SZ,
+		.info     = (uintptr_t) map_info,
+	};
+
+	int ret = sys_bpf(BPF_OBJ_GET_INFO_BY_FD, &bpf_map_get_info_attr,
+			  sizeof(bpf_map_get_info_attr));
+	if (ret < 0)
+		perror_msg_and_skip("BPF_OBJ_GET_INFO_BY_FD map failed");
+
+	printf("bpf(BPF_OBJ_GET_INFO_BY_FD"
+	       ", {info={bpf_fd=%d<anon_inode:bpf-map>, info_len=%zu",
+	       map_fd, MAP_INFO_SZ);
+	if (bpf_map_get_info_attr.info_len != MAP_INFO_SZ)
+		printf(" => %u", bpf_map_get_info_attr.info_len);
+
+	printf(", info=");
+#if VERBOSE
+	printf("{type=");
+	printxval(bpf_map_types, map_info->type, "BPF_MAP_TYPE_???");
+	PRINT_FIELD_U(", ", *map_info, id);
+	PRINT_FIELD_U(", ", *map_info, key_size);
+	PRINT_FIELD_U(", ", *map_info, value_size);
+	PRINT_FIELD_U(", ", *map_info, max_entries);
+	printf(", map_flags=");
+	printflags(bpf_map_flags, map_info->map_flags, "BPF_F_???");
+
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, name)) {
+		printf(", name=");
+		print_quoted_cstring(map_info->name, sizeof(map_info->name));
+	}
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, ifindex))
+		printf(", ifindex=%u", map_info->ifindex);
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, netns_dev))
+		printf(", netns_dev=makedev(%u, %u)",
+		       major(map_info->netns_dev), minor(map_info->netns_dev));
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, netns_ino))
+		printf(", netns_ino=%" PRIu64, map_info->netns_ino);
+	printf("}");
+#else /* !VERBOSE */
+	printf("%p", map_info);
+#endif /* VERBOSE */
+	printf("}}, %zu) = %s\n", sizeof(bpf_map_get_info_attr), errstr);
+
+#if CHECK_OBJ_PROG
+	/*
+	 * This has to be a macro, otherwise the compiler complains that
+	 * initializer element is not constant.
+	 */
+	#define  PROG_INFO_SZ (sizeof(*prog_info) + 64)
+	struct bpf_prog_info_struct *prog_info = calloc(1, PROG_INFO_SZ);
+	struct bpf_insn *xlated_prog = tail_alloc(sizeof(*xlated_prog) * 42);
+	uint32_t *map_ids = tail_alloc(sizeof(*map_ids) * 2);
+	struct BPF_OBJ_GET_INFO_BY_FD_struct bpf_prog_get_info_attr = {
+		.bpf_fd   = prog_fd,
+		.info_len = PROG_INFO_SZ,
+		.info     = (uintptr_t) prog_info,
+	};
+	size_t old_prog_info_len = PROG_INFO_SZ;
+
+	for (unsigned int i = 0; i < 4; i++) {
+		prog_info->jited_prog_len = 0;
+		switch (i) {
+		case 1:
+			prog_info->xlated_prog_insns =
+				(uintptr_t) (xlated_prog + 42);
+			prog_info->xlated_prog_len = 336;
+			prog_info->map_ids = (uintptr_t) (map_ids + 2);
+			prog_info->nr_map_ids = 2;
+			break;
+		case 2:
+			prog_info->xlated_prog_insns = (uintptr_t) xlated_prog;
+			/* TODO: check xlated_prog output */
+			prog_info->xlated_prog_len = 0;
+			prog_info->map_ids = (uintptr_t) map_ids;
+			prog_info->nr_map_ids = 0;
+			break;
+		case 3:
+			prog_info->xlated_prog_insns = (uintptr_t) xlated_prog;
+			prog_info->xlated_prog_len = 0;
+			prog_info->map_ids = (uintptr_t) map_ids;
+			prog_info->nr_map_ids = 2;
+			break;
+		}
+
+		ret = sys_bpf(BPF_OBJ_GET_INFO_BY_FD, &bpf_prog_get_info_attr,
+			      sizeof(bpf_prog_get_info_attr));
+		if (i != 1 && ret < 0)
+			perror_msg_and_skip("BPF_OBJ_GET_INFO_BY_FD"
+					    " prog %u failed", i);
+
+		printf("bpf(BPF_OBJ_GET_INFO_BY_FD"
+		       ", {info={bpf_fd=%d<anon_inode:bpf-prog>, info_len=%zu",
+		       prog_fd, old_prog_info_len);
+		if (!i && bpf_prog_get_info_attr.info_len != PROG_INFO_SZ)
+			printf(" => %u", bpf_prog_get_info_attr.info_len);
+		old_prog_info_len = bpf_prog_get_info_attr.info_len;
+
+		printf(", info=");
+# if VERBOSE
+		printf("{type=");
+		printxval(bpf_prog_types, prog_info->type, "BPF_PROG_TYPE_???");
+		PRINT_FIELD_U(", ", *prog_info, id);
+		printf(", tag=");
+		print_quoted_hex(prog_info->tag, sizeof(prog_info->tag));
+		printf(", jited_prog_len=0");
+		if (prog_info->jited_prog_len)
+			printf(" => %u", prog_info->jited_prog_len);
+		printf(", jited_prog_insns=NULL");
+		switch (i) {
+		case 0:
+			printf(", xlated_prog_len=0");
+			if (prog_info->xlated_prog_len)
+				printf(" => %u", prog_info->xlated_prog_len);
+			printf(", xlated_prog_insns=NULL");
+			break;
+		case 1:
+			printf(", xlated_prog_len=336");
+			if (prog_info->xlated_prog_len != 336)
+				printf(" => %u", prog_info->xlated_prog_len);
+			if (prog_info->xlated_prog_len)
+				printf(", xlated_prog_insns=%p", xlated_prog + 42);
+			else
+				printf(", xlated_prog_insns=[]");
+			break;
+		case 2:
+		case 3:
+			printf(", xlated_prog_len=0");
+			if (prog_info->xlated_prog_len)
+				printf(" => %u", prog_info->xlated_prog_len);
+			printf(", xlated_prog_insns=[]");
+			break;
+		}
+
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, load_time))
+			printf(", load_time=%" PRIu64, prog_info->load_time);
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, created_by_uid))
+			printf(", created_by_uid=%u",
+			       prog_info->created_by_uid);
+
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, map_ids)) {
+			switch (i) {
+			case 0:
+				printf(", nr_map_ids=0");
+				if (prog_info->nr_map_ids)
+					printf(" => 1");
+				printf(", map_ids=NULL");
+				break;
+			case 1:
+				printf(", nr_map_ids=2, map_ids=%p",
+				       map_ids + 2);
+				break;
+			case 2:
+				printf(", nr_map_ids=0");
+				if (prog_info->nr_map_ids)
+					printf(" => 1");
+				printf(", map_ids=[]");
+				break;
+			case 3:
+				printf(", nr_map_ids=2");
+				if (prog_info->nr_map_ids != 2)
+					printf(" => 1");
+				printf(", map_ids=[%u]", map_info->id);
+				break;
+			}
+		}
+
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, name))
+			printf(", name=\"test_prog\"");
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, ifindex))
+			printf(", ifindex=%u", prog_info->ifindex);
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, netns_dev))
+			printf(", netns_dev=makedev(%u, %u)",
+			       major(prog_info->netns_dev),
+			       minor(prog_info->netns_dev));
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, netns_ino))
+			printf(", netns_ino=%" PRIu64, prog_info->netns_ino);
+
+		printf("}");
+# else /* !VERBOSE */
+		printf("%p", prog_info);
+# endif /* VERBOSE */
+		printf("}}, %zu) = %s\n",
+		       sizeof(bpf_prog_get_info_attr), errstr);
+	}
+#endif /* CHECK_OBJ_PROG */
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/bpf-obj_get_info_by_fd.gen.test b/tests-mx32/bpf-obj_get_info_by_fd.gen.test
new file mode 100755
index 0000000..0efa59a
--- /dev/null
+++ b/tests-mx32/bpf-obj_get_info_by_fd.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd -a20 -y -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -e trace=bpf
diff --git a/tests-mx32/bpf-success-v.c b/tests-mx32/bpf-success-v.c
new file mode 100644
index 0000000..48c2a16
--- /dev/null
+++ b/tests-mx32/bpf-success-v.c
@@ -0,0 +1,2 @@
+#define INJECT_RETVAL 42
+#include "bpf-v.c"
diff --git a/tests-mx32/bpf-success-v.test b/tests-mx32/bpf-success-v.test
new file mode 100755
index 0000000..819afbb
--- /dev/null
+++ b/tests-mx32/bpf-success-v.test
@@ -0,0 +1,6 @@
+#!/bin/sh -efu
+
+. "${srcdir=.}/scno_tampering.sh"
+
+run_strace -a20 -v -e trace=bpf -e inject=bpf:retval=42 ../bpf-success-v > "$EXP"
+match_diff "$LOG" "$EXP"
diff --git a/tests-mx32/bpf-success.c b/tests-mx32/bpf-success.c
new file mode 100644
index 0000000..06f4695
--- /dev/null
+++ b/tests-mx32/bpf-success.c
@@ -0,0 +1,2 @@
+#define INJECT_RETVAL 42
+#include "bpf.c"
diff --git a/tests-mx32/bpf-success.test b/tests-mx32/bpf-success.test
new file mode 100755
index 0000000..3cdfd35
--- /dev/null
+++ b/tests-mx32/bpf-success.test
@@ -0,0 +1,6 @@
+#!/bin/sh -efu
+
+. "${srcdir=.}/scno_tampering.sh"
+
+run_strace -a20 -e trace=bpf -e inject=bpf:retval=42 ../bpf-success > "$EXP"
+match_diff "$LOG" "$EXP"
diff --git a/tests-mx32/bpf.c b/tests-mx32/bpf.c
index 72d7e8e..15ce713 100644
--- a/tests-mx32/bpf.c
+++ b/tests-mx32/bpf.c
@@ -49,6 +49,19 @@
 #include "xlat.h"
 #include "xlat/bpf_commands.h"
 
+#if defined MPERS_IS_m32 || SIZEOF_KERNEL_LONG_T > 4
+# define BIG_ADDR(addr64_, addr32_) addr64_
+# define BIG_ADDR_MAYBE(addr_)
+#elif defined __arm__ || defined __i386__ || defined __mips__ \
+   || defined __powerpc__ || defined __riscv__ || defined __s390__ \
+   || defined __sparc__ || defined __tile__
+# define BIG_ADDR(addr64_, addr32_) addr64_ " or " addr32_
+# define BIG_ADDR_MAYBE(addr_) addr_ " or "
+#else
+# define BIG_ADDR(addr64_, addr32_) addr32_
+# define BIG_ADDR_MAYBE(addr_)
+#endif
+
 #ifndef HAVE_STRUCT_BPF_INSN
 struct bpf_insn {
 	uint8_t	code;
@@ -76,6 +89,8 @@
 	BPF_ATTR_DATA_FIELD(BPF_PROG_GET_FD_BY_ID);
 	BPF_ATTR_DATA_FIELD(BPF_MAP_GET_FD_BY_ID);
 	BPF_ATTR_DATA_FIELD(BPF_OBJ_GET_INFO_BY_FD);
+	BPF_ATTR_DATA_FIELD(BPF_PROG_QUERY);
+	BPF_ATTR_DATA_FIELD(BPF_RAW_TRACEPOINT_OPEN);
 	char char_data[256];
 };
 
@@ -105,7 +120,20 @@
 sys_bpf(kernel_ulong_t cmd, kernel_ulong_t attr, kernel_ulong_t size)
 {
 	long rc = syscall(__NR_bpf, cmd, attr, size);
+
 	errstr = sprintrc(rc);
+
+#ifdef INJECT_RETVAL
+	if (rc != INJECT_RETVAL)
+		error_msg_and_fail("Got a return value of %ld != %d",
+				   rc, INJECT_RETVAL);
+
+	static char inj_errstr[4096];
+
+	snprintf(inj_errstr, sizeof(inj_errstr), "%s (INJECTED)", errstr);
+	errstr = inj_errstr;
+#endif
+
 	return rc;
 }
 
@@ -232,36 +260,173 @@
 	       cmd_check->cmd_str, addr, page_size + 1, errstr);
 }
 
-static const struct bpf_attr_check BPF_MAP_CREATE_checks[] = {
+static void
+init_BPF_MAP_CREATE_attr7(struct bpf_attr_check *check)
+{
+	struct BPF_MAP_CREATE_struct *attr = &check->data.BPF_MAP_CREATE_data;
+	attr->map_ifindex = ifindex_lo();
+}
+
+static struct bpf_attr_check BPF_MAP_CREATE_checks[] = {
 	{
 		.data = { .BPF_MAP_CREATE_data = { .map_type = 2 } },
 		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_type),
 		.str = "map_type=BPF_MAP_TYPE_ARRAY, key_size=0, value_size=0"
-		       ", max_entries=0, map_flags=0, inner_map_fd=0"
+		       ", max_entries=0"
 	},
-	{
+	{ /* 1 */
 		.data = { .BPF_MAP_CREATE_data = {
-			.map_type = 1,
+			.map_type = 16,
 			.key_size = 4,
 			.value_size = 8,
 			.max_entries = 256,
-			.map_flags = 7,
+			.map_flags = 63,
 			.inner_map_fd = -1,
-			.numa_node = 42
+			.numa_node = 3141592653,
+			.map_name = "0123456789abcde",
 		} },
-		.size = offsetofend(struct BPF_MAP_CREATE_struct, numa_node),
-		.str = "map_type=BPF_MAP_TYPE_HASH, key_size=4"
+		.size = offsetof(struct BPF_MAP_CREATE_struct, map_name) + 8,
+		.str = "map_type=BPF_MAP_TYPE_CPUMAP, key_size=4"
 		       ", value_size=8, max_entries=256"
 		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NO_COMMON_LRU"
-		       "|BPF_F_NUMA_NODE, inner_map_fd=-1, numa_node=42"
-	}
+				   "|BPF_F_NUMA_NODE|BPF_F_RDONLY|BPF_F_WRONLY"
+				   "|BPF_F_STACK_BUILD_ID"
+		       ", inner_map_fd=-1"
+		       ", numa_node=3141592653"
+		       ", map_name=\"0123456\"...",
+
+	},
+	{ /* 2 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 17,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xffffffc0,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+			.map_name = "",
+			.map_ifindex = 3141592653,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_ifindex),
+		.str = "map_type=0x11 /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=0xffffffc0 /* BPF_F_??? */"
+		       ", inner_map_fd=-1576685468"
+		       ", map_name=\"\", map_ifindex=3141592653",
+
+	},
+	{ /* 3 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_flags),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80",
+	},
+	{ /* 4 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, inner_map_fd),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468",
+	},
+	{ /* 5 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, numa_node),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468"
+		       ", numa_node=4294967295 /* NUMA_NO_NODE */",
+	},
+	{ /* 6 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+			.map_name = "fedcba9876543210",
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_name),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468"
+		       ", numa_node=4294967295 /* NUMA_NO_NODE */"
+		       ", map_name=\"fedcba987654321\"...",
+	},
+	{ /* 7 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+			.map_name = "0123456789abcde",
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_ifindex),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468"
+		       ", numa_node=4294967295 /* NUMA_NO_NODE */"
+		       ", map_name=\"0123456789abcde\""
+		       ", map_ifindex=" IFINDEX_LO_STR,
+		.init_fn = init_BPF_MAP_CREATE_attr7,
+	},
 };
 
 static const struct bpf_attr_check BPF_MAP_LOOKUP_ELEM_checks[] = {
 	{
 		.data = { .BPF_MAP_LOOKUP_ELEM_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_LOOKUP_ELEM_struct, map_fd),
-		.str = "map_fd=-1, key=0, value=0"
+		.str = "map_fd=-1, key=NULL, value=NULL"
 	},
 	{
 		.data = { .BPF_MAP_LOOKUP_ELEM_data = {
@@ -278,7 +443,7 @@
 	{
 		.data = { .BPF_MAP_UPDATE_ELEM_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_UPDATE_ELEM_struct, map_fd),
-		.str = "map_fd=-1, key=0, value=0, flags=BPF_ANY"
+		.str = "map_fd=-1, key=NULL, value=NULL, flags=BPF_ANY"
 	},
 	{
 		.data = { .BPF_MAP_UPDATE_ELEM_data = {
@@ -297,7 +462,7 @@
 	{
 		.data = { .BPF_MAP_DELETE_ELEM_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_DELETE_ELEM_struct, map_fd),
-		.str = "map_fd=-1, key=0"
+		.str = "map_fd=-1, key=NULL"
 	},
 	{
 		.data = { .BPF_MAP_DELETE_ELEM_data = {
@@ -313,7 +478,7 @@
 	{
 		.data = { .BPF_MAP_GET_NEXT_KEY_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_GET_NEXT_KEY_struct, map_fd),
-		.str = "map_fd=-1, key=0, next_key=0"
+		.str = "map_fd=-1, key=NULL, next_key=NULL"
 	},
 	{
 		.data = { .BPF_MAP_GET_NEXT_KEY_data = {
@@ -327,30 +492,96 @@
 };
 
 static const struct bpf_insn insns[] = {
-	{ .code = 0x95 }
+	{
+		.code = 0x95,
+		.dst_reg = 10,
+		.src_reg = 11,
+		.off = 0xdead,
+		.imm = 0xbadc0ded,
+	},
 };
 static const char license[] = "GPL";
-static char log_buf[4096];
 static const char pathname[] = "/sys/fs/bpf/foo/bar";
 
+static char *log_buf;
+/*
+ * This has to be a macro, otherwise the compiler complains that
+ * initializer element is not constant.
+ */
+#define log_buf_size 4096U
+
+static inline char *
+get_log_buf(void)
+{
+	if (!log_buf)
+		log_buf = tail_alloc(log_buf_size);
+	return log_buf;
+}
+
+static inline char *
+get_log_buf_tail(void)
+{
+	return get_log_buf() + log_buf_size;
+}
+
+#if VERBOSE
+# define INSNS_FMT \
+	"[{code=BPF_JMP|BPF_K|BPF_EXIT, dst_reg=BPF_REG_10" \
+	", src_reg=0xb /* BPF_REG_??? */, off=%d, imm=%#x}]"
+# define INSNS_ARG insns[0].off, insns[0].imm
+#else
+# define INSNS_FMT "%p"
+# define INSNS_ARG insns
+#endif
+
 static void
-init_BPF_PROG_LOAD_attr(struct bpf_attr_check *check)
+init_BPF_PROG_LOAD_attr3(struct bpf_attr_check *check)
 {
 	struct BPF_PROG_LOAD_struct *attr = &check->data.BPF_PROG_LOAD_data;
+
 	attr->insns = (uintptr_t) insns;
 	attr->license = (uintptr_t) license;
-	attr->log_buf = (uintptr_t) log_buf;
+	attr->log_buf = (uintptr_t) get_log_buf_tail();
 }
 
 static void
-print_BPF_PROG_LOAD_attr(const struct bpf_attr_check *check, unsigned long addr)
+print_BPF_PROG_LOAD_attr3(const struct bpf_attr_check *check, unsigned long addr)
 {
-	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=%u, insns=%p"
-	       ", license=\"%s\", log_level=42, log_size=4096, log_buf=%p"
+	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=%u"
+	       ", insns=" INSNS_FMT ", license=\"%s\", log_level=2718281828"
+	       ", log_size=%u, log_buf=%p"
 	       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
-	       ", prog_flags=BPF_F_STRICT_ALIGNMENT",
-	       (unsigned int) ARRAY_SIZE(insns), insns,
-	       license, log_buf);
+	       ", prog_flags=0x2 /* BPF_F_??? */"
+	       ", prog_name=\"0123456789abcde\"..., prog_ifindex=3203399405",
+	       (unsigned int) ARRAY_SIZE(insns), INSNS_ARG, license,
+	       log_buf_size, get_log_buf_tail());
+}
+
+static void
+init_BPF_PROG_LOAD_attr4(struct bpf_attr_check *check)
+{
+	struct BPF_PROG_LOAD_struct *attr = &check->data.BPF_PROG_LOAD_data;
+
+	attr->insns = (uintptr_t) insns;
+	attr->license = (uintptr_t) license;
+	attr->log_buf = (uintptr_t) get_log_buf();
+	attr->prog_ifindex = ifindex_lo();
+
+	strncpy(log_buf, "log test", 9);
+}
+
+static void
+print_BPF_PROG_LOAD_attr4(const struct bpf_attr_check *check, unsigned long addr)
+{
+	printf("prog_type=BPF_PROG_TYPE_UNSPEC, insn_cnt=%u, insns=" INSNS_FMT
+	       ", license=\"%s\", log_level=2718281828, log_size=4"
+	       ", log_buf=\"log \"..."
+	       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
+	       ", prog_flags=BPF_F_STRICT_ALIGNMENT|0x2"
+	       ", prog_name=\"0123456789abcde\"..., prog_ifindex=%s"
+	       ", expected_attach_type=BPF_CGROUP_INET6_BIND",
+	       (unsigned int) ARRAY_SIZE(insns), INSNS_ARG,
+	       license, IFINDEX_LO_STR);
 }
 
 static struct bpf_attr_check BPF_PROG_LOAD_checks[] = {
@@ -358,21 +589,82 @@
 		.data = { .BPF_PROG_LOAD_data = { .prog_type = 1 } },
 		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_type),
 		.str = "prog_type=BPF_PROG_TYPE_SOCKET_FILTER"
-		       ", insn_cnt=0, insns=0, license=NULL"
+		       ", insn_cnt=0, insns=NULL, license=NULL"
 	},
-	{
+	{ /* 1 */
+		.data = { .BPF_PROG_LOAD_data = {
+			.prog_type = 18,
+			.insn_cnt = 0xbadc0ded,
+			.insns = 0,
+			.license = 0,
+			.log_level = 42,
+			.log_size = 3141592653U,
+			.log_buf = 0,
+			.kern_version = 0xcafef00d,
+			.prog_flags = 0,
+		} },
+		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_flags),
+		.str = "prog_type=0x12 /* BPF_PROG_TYPE_??? */"
+		       ", insn_cnt=3134983661, insns=NULL, license=NULL"
+		       ", log_level=42, log_size=3141592653, log_buf=NULL"
+		       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
+		       ", prog_flags=0",
+	},
+	{ /* 2 */
+		.data = { .BPF_PROG_LOAD_data = {
+			.prog_type = 17,
+			.insn_cnt = 0xbadc0ded,
+			.insns = 0xffffffff00000000,
+			.license = 0xffffffff00000000,
+			.log_level = 2718281828U,
+			.log_size = log_buf_size,
+			.log_buf = 0xffffffff00000000,
+			.kern_version = 0xcafef00d,
+			.prog_flags = 1,
+			.prog_name = "fedcba987654321",
+		} },
+		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_name),
+		.str = "prog_type=BPF_PROG_TYPE_RAW_TRACEPOINT"
+		       ", insn_cnt=3134983661"
+		       ", insns=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", license=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", log_level=2718281828, log_size=4096"
+		       ", log_buf=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
+		       ", prog_flags=BPF_F_STRICT_ALIGNMENT"
+		       ", prog_name=\"fedcba987654321\"",
+	},
+	{ /* 3 */
 		.data = { .BPF_PROG_LOAD_data = {
 			.prog_type = 1,
 			.insn_cnt = ARRAY_SIZE(insns),
-			.log_level = 42,
-			.log_size = sizeof(log_buf),
+			.log_level = 2718281828U,
+			.log_size = log_buf_size,
 			.kern_version = 0xcafef00d,
-			.prog_flags = 1
+			.prog_flags = 2,
+			.prog_name = "0123456789abcdef",
+			.prog_ifindex = 0xbeeffeed,
 		} },
-		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_flags),
-		.init_fn = init_BPF_PROG_LOAD_attr,
-		.print_fn = print_BPF_PROG_LOAD_attr
-	}
+		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_ifindex),
+		.init_fn = init_BPF_PROG_LOAD_attr3,
+		.print_fn = print_BPF_PROG_LOAD_attr3
+	},
+	{ /* 4 */
+		.data = { .BPF_PROG_LOAD_data = {
+			.prog_type = 0,
+			.insn_cnt = ARRAY_SIZE(insns),
+			.log_level = 2718281828U,
+			.log_size = 4,
+			.kern_version = 0xcafef00d,
+			.prog_flags = 3,
+			.prog_name = "0123456789abcdef",
+			.expected_attach_type = 9,
+		} },
+		.size = offsetofend(struct BPF_PROG_LOAD_struct,
+				    expected_attach_type),
+		.init_fn = init_BPF_PROG_LOAD_attr4,
+		.print_fn = print_BPF_PROG_LOAD_attr4
+	},
 };
 
 static void
@@ -393,16 +685,7 @@
 			.pathname = 0xFFFFFFFFFFFFFFFFULL
 		} },
 		.size = offsetofend(struct BPF_OBJ_PIN_struct, pathname),
-		.str = "pathname="
-#if defined MPERS_IS_m32 || SIZEOF_KERNEL_LONG_T > 4
-		       "0xffffffffffffffff"
-#elif defined __arm__ || defined __i386__ || defined __mips__ || \
-      defined __powerpc__ || defined __riscv__ || defined __s390__ \
-      || defined __sparc__ || defined __tile__
-		       "0xffffffffffffffff or 0xffffffff"
-#else
-		       "0xffffffff"
-#endif
+		.str = "pathname=" BIG_ADDR("0xffffffffffffffff", "0xffffffff")
 		       ", bpf_fd=0",
 	},
 	{
@@ -468,7 +751,7 @@
 		.data = { .BPF_PROG_TEST_RUN_data = { .prog_fd = -1 } },
 		.size = offsetofend(struct BPF_PROG_TEST_RUN_struct, prog_fd),
 		.str = "test={prog_fd=-1, retval=0, data_size_in=0"
-		       ", data_size_out=0, data_in=0, data_out=0"
+		       ", data_size_out=0, data_in=NULL, data_out=NULL"
 		       ", repeat=0, duration=0}"
 	},
 	{
@@ -594,7 +877,7 @@
 	{
 		.data = { .BPF_OBJ_GET_INFO_BY_FD_data = { .bpf_fd = -1 } },
 		.size = offsetofend(struct BPF_OBJ_GET_INFO_BY_FD_struct, bpf_fd),
-		.str = "info={bpf_fd=-1, info_len=0, info=0}"
+		.str = "info={bpf_fd=-1, info_len=0, info=NULL}"
 	},
 	{
 		.data = { .BPF_OBJ_GET_INFO_BY_FD_data = {
@@ -608,6 +891,194 @@
 	}
 };
 
+
+static uint32_t prog_load_ids[] = { 0, 1, 0xffffffff, 2718281828, };
+uint32_t *prog_load_ids_ptr;
+
+static void
+init_BPF_PROG_QUERY_attr4(struct bpf_attr_check *check)
+{
+	struct BPF_PROG_QUERY_struct *attr = &check->data.BPF_PROG_QUERY_data;
+
+	if (!prog_load_ids_ptr)
+		prog_load_ids_ptr = tail_memdup(prog_load_ids,
+						sizeof(prog_load_ids));
+
+	attr->prog_ids = (uintptr_t) prog_load_ids_ptr;
+	attr->prog_cnt = ARRAY_SIZE(prog_load_ids);
+}
+
+static void
+print_BPF_PROG_QUERY_attr4(const struct bpf_attr_check *check, unsigned long addr)
+{
+	printf("query={target_fd=-1153374643"
+	       ", attach_type=0xfeedface /* BPF_??? */"
+	       ", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
+	       ", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
+#if defined(INJECT_RETVAL) && INJECT_RETVAL > 0
+	       ", prog_ids=[0, 1, 4294967295, 2718281828], prog_cnt=4}"
+#else
+	       ", prog_ids=%p, prog_cnt=4}", prog_load_ids_ptr
+#endif
+	       );
+}
+
+static void
+init_BPF_PROG_QUERY_attr5(struct bpf_attr_check *check)
+{
+	struct BPF_PROG_QUERY_struct *attr = &check->data.BPF_PROG_QUERY_data;
+
+	if (!prog_load_ids_ptr)
+		prog_load_ids_ptr = tail_memdup(prog_load_ids,
+						sizeof(prog_load_ids));
+
+	attr->prog_ids = (uintptr_t) prog_load_ids_ptr;
+	attr->prog_cnt = ARRAY_SIZE(prog_load_ids) + 1;
+}
+
+static void
+print_BPF_PROG_QUERY_attr5(const struct bpf_attr_check *check, unsigned long addr)
+{
+	printf("query={target_fd=-1153374643"
+	       ", attach_type=0xfeedface /* BPF_??? */"
+	       ", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
+	       ", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
+#if defined(INJECT_RETVAL) && INJECT_RETVAL > 0
+	       ", prog_ids=[0, 1, 4294967295, 2718281828, ... /* %p */]"
+	       ", prog_cnt=5}",
+	       prog_load_ids_ptr + ARRAY_SIZE(prog_load_ids)
+#else
+	       ", prog_ids=%p, prog_cnt=5}", prog_load_ids_ptr
+#endif
+	       );
+}
+
+static struct bpf_attr_check BPF_PROG_QUERY_checks[] = {
+	{
+		.data = { .BPF_PROG_QUERY_data = { .target_fd = -1 } },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, target_fd),
+		.str = "query={target_fd=-1"
+		       ", attach_type=BPF_CGROUP_INET_INGRESS, query_flags=0"
+		       ", attach_flags=0, prog_ids=NULL, prog_cnt=0}",
+	},
+	{ /* 1 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 13,
+			.query_flags = 1,
+			.attach_flags = 3,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, attach_flags),
+		.str = "query={target_fd=-1153374643"
+		       ", attach_type=BPF_CGROUP_INET6_POST_BIND"
+		       ", query_flags=BPF_F_QUERY_EFFECTIVE"
+		       ", attach_flags=BPF_F_ALLOW_OVERRIDE|BPF_F_ALLOW_MULTI"
+		       ", prog_ids=NULL, prog_cnt=0}",
+	},
+	{ /* 2 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 14,
+			.query_flags = 0xfffffffe,
+			.attach_flags = 0xfffffffc,
+			.prog_ids = 0xffffffffffffffffULL,
+			.prog_cnt = 2718281828,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.str = "query={target_fd=-1153374643"
+		       ", attach_type=0xe /* BPF_??? */"
+		       ", query_flags=0xfffffffe /* BPF_F_QUERY_??? */"
+		       ", attach_flags=0xfffffffc /* BPF_F_??? */"
+		       ", prog_ids="
+		       BIG_ADDR("0xffffffffffffffff", "0xffffffff")
+		       ", prog_cnt=2718281828}",
+	},
+	{ /* 3 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 0xfeedface,
+			.query_flags = 0xdeadf00d,
+			.attach_flags = 0xbeefcafe,
+			.prog_ids = 0xffffffffffffffffULL,
+			.prog_cnt = 0,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.str = "query={target_fd=-1153374643"
+		       ", attach_type=0xfeedface /* BPF_??? */"
+		       ", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
+		       ", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
+		       ", prog_ids=" BIG_ADDR_MAYBE("0xffffffffffffffff") "[]"
+		       ", prog_cnt=0}",
+	},
+	{ /* 4 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 0xfeedface,
+			.query_flags = 0xdeadf00d,
+			.attach_flags = 0xbeefcafe,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.init_fn = init_BPF_PROG_QUERY_attr4,
+		.print_fn = print_BPF_PROG_QUERY_attr4,
+	},
+	{ /* 5 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 0xfeedface,
+			.query_flags = 0xdeadf00d,
+			.attach_flags = 0xbeefcafe,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.init_fn = init_BPF_PROG_QUERY_attr5,
+		.print_fn = print_BPF_PROG_QUERY_attr5,
+	},
+};
+
+
+static void
+init_BPF_RAW_TRACEPOINT_attr2(struct bpf_attr_check *check)
+{
+	/* TODO: test the 128 byte limit */
+	static const char tp_name[] = "0123456789qwertyuiop0123456789qwe";
+
+	struct BPF_RAW_TRACEPOINT_OPEN_struct *attr =
+		&check->data.BPF_RAW_TRACEPOINT_OPEN_data;
+
+	attr->name = (uintptr_t) tp_name;
+}
+
+static struct bpf_attr_check BPF_RAW_TRACEPOINT_OPEN_checks[] = {
+	{
+		.data = { .BPF_RAW_TRACEPOINT_OPEN_data = { .name = 0 } },
+		.size = offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct,
+				    name),
+		.str = "raw_tracepoint={name=NULL, prog_fd=0}",
+	},
+	{ /* 1 */
+		.data = { .BPF_RAW_TRACEPOINT_OPEN_data = {
+			.name = 0xffffffff00000000ULL,
+			.prog_fd = 0xdeadbeef,
+		} },
+		.size = offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct,
+				    prog_fd),
+		.str = "raw_tracepoint="
+		       "{name=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", prog_fd=-559038737}",
+	},
+	{
+		.data = { .BPF_RAW_TRACEPOINT_OPEN_data = {
+			.prog_fd = 0xdeadbeef,
+		} },
+		.size = offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct,
+				    prog_fd),
+		.init_fn = init_BPF_RAW_TRACEPOINT_attr2,
+		.str = "raw_tracepoint="
+		       "{name=\"0123456789qwertyuiop0123456789qw\"..."
+		       ", prog_fd=-559038737}",
+	}
+};
+
+
 #define CHK(cmd_) \
 	{ \
 		cmd_, #cmd_, \
@@ -635,6 +1106,8 @@
 		CHK(BPF_PROG_GET_FD_BY_ID),
 		CHK(BPF_MAP_GET_FD_BY_ID),
 		CHK(BPF_OBJ_GET_INFO_BY_FD),
+		CHK(BPF_PROG_QUERY),
+		CHK(BPF_RAW_TRACEPOINT_OPEN),
 	};
 
 	page_size = get_page_size();
diff --git a/tests-mx32/btrfs-X.test b/tests-mx32/btrfs-X.test
new file mode 100755
index 0000000..c129be9
--- /dev/null
+++ b/tests-mx32/btrfs-X.test
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Check verbose xlat decoding of btrfs ioctl
+
+. "${srcdir=.}/init.sh"
+
+check_prog grep
+run_prog ../btrfs -X > /dev/null
+run_strace -a16 -Xverbose -eioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/btrfs-vX.test b/tests-mx32/btrfs-vX.test
new file mode 100755
index 0000000..163b29f
--- /dev/null
+++ b/tests-mx32/btrfs-vX.test
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Check verbose, verbose xlat decoding of btrfs ioctl
+
+. "${srcdir=.}/init.sh"
+
+check_prog grep
+run_prog ../btrfs -v -X > /dev/null
+run_strace -a16 -Xverbose -veioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/btrfs-vwX.test b/tests-mx32/btrfs-vwX.test
new file mode 100755
index 0000000..57c6891
--- /dev/null
+++ b/tests-mx32/btrfs-vwX.test
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Check verbose, verbose xlat decoding of btrfs ioctl w/ live ioctls.
+
+# WARNING: USE OF THIS TEST WILL MODIFY AN EXISTING BTRFS FILE SYSTEM
+
+# Typical usage:
+# mkfs.btrfs <dev>
+# mount <dev> /mnt
+# BTRFS_MOUNTPOINT=/mnt make check TESTS="btrfs-vwX"
+# umount /mnt
+
+. "${srcdir=.}/init.sh"
+
+if [ -z "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT not set"
+elif [ ! -d "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT does not point to a directory"
+fi
+
+check_prog grep
+run_prog ../btrfs -v -w -X "${BTRFS_MOUNTPOINT}" > /dev/null
+run_strace -a16 -Xverbose -veioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/btrfs-wX.test b/tests-mx32/btrfs-wX.test
new file mode 100755
index 0000000..5fb6949
--- /dev/null
+++ b/tests-mx32/btrfs-wX.test
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Check verbose xlat decoding of btrfs ioctl w/ live ioctls.
+
+# WARNING: USE OF THIS TEST WILL MODIFY AN EXISTING BTRFS FILE SYSTEM
+
+# Typical usage:
+# mkfs.btrfs <dev>
+# mount <dev> /mnt
+# BTRFS_MOUNTPOINT=/mnt make check TESTS="btrfs-wX"
+# umount /mnt
+
+. "${srcdir=.}/init.sh"
+
+if [ -z "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT not set"
+elif [ ! -d "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT does not point to a directory"
+fi
+
+check_prog grep
+run_prog ../btrfs -w -X "${BTRFS_MOUNTPOINT}" > /dev/null
+run_strace -a16 -Xverbose -eioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/btrfs.c b/tests-mx32/btrfs.c
index 415f692..b44bc87 100644
--- a/tests-mx32/btrfs.c
+++ b/tests-mx32/btrfs.c
@@ -13,6 +13,7 @@
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
+#include <sys/sysmacros.h>
 #include <sys/vfs.h>
 #include <linux/fs.h>
 #include <linux/btrfs.h>
@@ -23,6 +24,7 @@
 #include "xlat/btrfs_balance_flags.h"
 #include "xlat/btrfs_balance_state.h"
 #include "xlat/btrfs_compress_types.h"
+#include "xlat/btrfs_cont_reading_from_srcdev_mode.h"
 #include "xlat/btrfs_defrag_flags.h"
 #include "xlat/btrfs_dev_stats_values.h"
 #include "xlat/btrfs_dev_stats_flags.h"
@@ -62,6 +64,11 @@
 static int btrfs_test_dir_fd;
 static bool verbose;
 static bool write_ok;
+static bool verbose_xlat;
+
+static const char *path;
+static const char dir_name_fmt[] = "strace-test-%d";
+static char dir_name[sizeof(dir_name_fmt) + sizeof(int) * 3];
 
 const unsigned char uuid_reference[BTRFS_UUID_SIZE] = {
 	0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
@@ -152,11 +159,61 @@
 
 
 static const char *
-maybe_print_uint64max(uint64_t val)
+sprint_xlat_(uint32_t val, const char *xlat)
 {
-	if (val == UINT64_MAX)
-		return " /* UINT64_MAX */";
-	return "";
+	static char str[256];
+	int ret;
+
+	if (verbose_xlat) {
+		ret = snprintf(str, sizeof(str), "%#x /* %s */", val, xlat);
+
+		if (ret < 0)
+			perror_msg_and_fail("sprint_ioc(%#x, %s)", val, xlat);
+		if ((unsigned) ret >= sizeof(str))
+			error_msg_and_fail("sprint_ioc(%#x, %s): buffer "
+					   "overflow", val, xlat);
+
+		return str;
+	}
+
+	return xlat;
+}
+
+#define ioc(x_) sprint_xlat_(x_, #x_)
+
+void
+prfl_btrfs(const struct xlat *xlat, const unsigned long long val,
+	   const char *str)
+{
+	if (verbose_xlat && val)
+		printf("%#llx /* ", val);
+	printflags(xlat, val, str);
+	if (verbose_xlat && val)
+		printf(" */");
+}
+
+void
+prxval_btrfs(const struct xlat *xlat, const unsigned long long val,
+	     const char *str, bool known)
+{
+	if (verbose_xlat && known)
+		printf("%#llx /* ", val);
+	printxval(xlat, val, str);
+	if (verbose_xlat && known)
+		printf(" */");
+}
+
+static void
+print_uint64(const char *prefix, uint64_t val)
+{
+	if (val == UINT64_MAX) {
+		if (verbose_xlat)
+			printf("%s%" PRIu64 " /* UINT64_MAX */", prefix, val);
+		else
+			printf("%sUINT64_MAX", prefix);
+	} else {
+		printf("%s%" PRIu64, prefix, val);
+	}
 }
 
 /* takes highest valid flag bit */
@@ -182,10 +239,10 @@
 btrfs_test_trans_ioctls(void)
 {
 	ioctl(-1, BTRFS_IOC_TRANS_START, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TRANS_START) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_TRANS_START));
 
 	ioctl(-1, BTRFS_IOC_TRANS_END, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TRANS_END) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_TRANS_END));
 }
 
 /*
@@ -201,14 +258,15 @@
 	uint64_t u64val = 0xdeadbeefbadc0dedULL;
 
 	ioctl(-1, BTRFS_IOC_SYNC, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SYNC) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SYNC));
 
 	ioctl(-1, BTRFS_IOC_WAIT_SYNC, NULL);
-	printf("ioctl(-1, BTRFS_IOC_WAIT_SYNC, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_WAIT_SYNC));
 
 	ioctl(-1, BTRFS_IOC_WAIT_SYNC, &u64val);
-	printf("ioctl(-1, BTRFS_IOC_WAIT_SYNC, [%" PRIu64
-	       "]) = -1 EBADF (%m)\n", u64val);
+	printf("ioctl(-1, %s, [%" PRIu64 "]) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_WAIT_SYNC), u64val);
 
 	/*
 	 * The live test of BTRFS_IOC_SYNC happens as a part of the test
@@ -220,24 +278,24 @@
 btrfs_print_qgroup_inherit(struct btrfs_qgroup_inherit *inherit)
 {
 	printf("{flags=");
-	printflags(btrfs_qgroup_inherit_flags, inherit->flags,
+	prfl_btrfs(btrfs_qgroup_inherit_flags, inherit->flags,
 		   "BTRFS_QGROUP_INHERIT_???");
 	printf(", num_qgroups=%" PRI__u64
 	       ", num_ref_copies=%" PRI__u64
 	       ", num_excl_copies=%" PRI__u64 ", lim={flags=",
 	       inherit->num_qgroups, inherit->num_ref_copies,
 	       inherit->num_excl_copies);
-	printflags(btrfs_qgroup_limit_flags,
+	prfl_btrfs(btrfs_qgroup_limit_flags,
 		   inherit->lim.flags,
 		   "BTRFS_QGROUP_LIMIT_???");
 	printf(", max_rfer=%" PRI__u64 ", max_excl=%" PRI__u64
 	       ", rsv_rfer=%" PRI__u64 ", rsv_excl=%" PRI__u64
-	       "}, qgroups=",
+	       "}, ",
 	       inherit->lim.max_rfer, inherit->lim.max_excl,
 	       inherit->lim.rsv_rfer, inherit->lim.rsv_excl);
 	if (verbose) {
 		unsigned int i;
-		printf("[");
+		printf("qgroups=[");
 		for (i = 0; i < inherit->num_qgroups; i++) {
 			if (i > 0)
 				printf(", ");
@@ -254,7 +312,7 @@
 btrfs_print_vol_args_v2(struct btrfs_ioctl_vol_args_v2 *args, int print_qgroups)
 {
 	printf("{fd=%d, flags=", (int) args->fd);
-	printflags(btrfs_snap_flags_v2, args->flags, "BTRFS_SUBVOL_???");
+	prfl_btrfs(btrfs_snap_flags_v2, args->flags, "BTRFS_SUBVOL_???");
 
 	if (args->flags & BTRFS_SUBVOL_QGROUP_INHERIT) {
 		printf(", size=%" PRI__u64 ", qgroup_inherit=", args->size);
@@ -302,61 +360,64 @@
 	strcpy(vol_args.name, subvol_name);
 
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE));
 
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE, "
-	       "{fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE, "
-	       "{fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SUBVOL_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_DESTROY,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_DESTROY), vol_args.name);
 
 	strncpy(vol_args.name, long_subvol_name, BTRFS_PATH_NAME_MAX);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SUBVOL_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_DESTROY,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_DESTROY), vol_args.name);
 
 	long_subvol_name = realloc(long_subvol_name, BTRFS_SUBVOL_NAME_MAX);
 	if (!long_subvol_name)
 		perror_msg_and_fail("realloc failed");
 
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE_V2));
 
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 
 	strcpy(vol_args_v2.name, subvol_name);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
 	strncpy(vol_args_v2.name, long_subvol_name, BTRFS_SUBVOL_NAME_MAX);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
@@ -364,12 +425,12 @@
 	strcpy(vol_args_v2.name, subvol_name);
 	vol_args_v2.qgroup_inherit = bad_pointer;
 
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 0);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 0);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
@@ -394,31 +455,33 @@
 	inherit->lim.rsv_excl = u64val;
 	vol_args_v2.qgroup_inherit = inherit;
 
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
 	ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEFAULT_SUBVOL));
 
 	ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, &u64val);
-	printf("ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, [%"
-	       PRIu64 "]) = -1 EBADF (%m)\n", u64val);
+	printf("ioctl(-1, %s, [%" PRIu64 "]) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEFAULT_SUBVOL), u64val);
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_SETFLAGS, ");
-	printflags(btrfs_snap_flags_v2, vol_args_v2.flags,
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_SETFLAGS));
+	prfl_btrfs(btrfs_snap_flags_v2, vol_args_v2.flags,
 		   "BTRFS_SUBVOL_???");
 	ioctl(-1, BTRFS_IOC_SUBVOL_SETFLAGS, &vol_args_v2.flags);
 	printf(") = -1 EBADF (%m)\n");
 
 	if (write_ok) {
 		struct btrfs_ioctl_vol_args_v2 args_passed;
+		long ret;
 		/*
 		 * Returns transid if flags & BTRFS_SUBVOL_CREATE_ASYNC
 		 * - BTRFS_IOC_SNAP_CREATE_V2
@@ -432,11 +495,14 @@
 		vol_args_v2.size = 0;
 		vol_args_v2.qgroup_inherit = NULL;
 		args_passed = vol_args_v2;
-		printf("ioctl(%d, BTRFS_IOC_SUBVOL_CREATE_V2, ",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 		btrfs_print_vol_args_v2(&vol_args_v2, 1);
-		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SUBVOL_CREATE_V2,
+		ret = ioctl(btrfs_test_dir_fd, BTRFS_IOC_SUBVOL_CREATE_V2,
 		      &args_passed);
+		if (ret < 0)
+			perror_msg_and_fail("ioctl(BTRFS_IOC_SUBVOL_CREATE_V2) "
+					    "failed");
 		printf(" => {transid=%" PRI__u64 "}) = 0\n",
 			args_passed.transid);
 
@@ -448,8 +514,8 @@
 		strncpy(vol_args_v2.name, long_subvol_name, BTRFS_NAME_LEN);
 		vol_args_v2.fd = subvolfd;
 		args_passed = vol_args_v2;
-		printf("ioctl(%d, BTRFS_IOC_SNAP_CREATE_V2, ",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SNAP_CREATE_V2));
 		btrfs_print_vol_args_v2(&args_passed, 1);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SNAP_CREATE_V2,
 		      &args_passed);
@@ -460,15 +526,15 @@
 		strncpy(vol_args.name, long_subvol_name, 255);
 		vol_args.name[255] = 0;
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-		printf("ioctl(%d, BTRFS_IOC_SNAP_DESTROY, "
-		       "{fd=%d, name=\"%.*s\"}) = 0\n",
-		       btrfs_test_dir_fd, (int) vol_args.fd, 255, long_subvol_name);
+		printf("ioctl(%d, %s, {fd=%d, name=\"%.*s\"}) = 0\n",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SNAP_DESTROY),
+		       (int) vol_args.fd, 255, long_subvol_name);
 
 		strcpy(vol_args.name, subvol_name);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-		printf("ioctl(%d, BTRFS_IOC_SNAP_DESTROY, "
-		       "{fd=%d, name=\"%s\"}) = 0\n",
-		       btrfs_test_dir_fd, (int) vol_args.fd, subvol_name);
+		printf("ioctl(%d, %s, {fd=%d, name=\"%s\"}) = 0\n",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SNAP_DESTROY),
+		       (int) vol_args.fd, subvol_name);
 
 		close(subvolfd);
 	}
@@ -479,19 +545,18 @@
 btrfs_print_balance_args(struct btrfs_balance_args *args)
 {
 	printf("{profiles=");
-	printflags(btrfs_space_info_flags, args->profiles,
+	prfl_btrfs(btrfs_space_info_flags, args->profiles,
 		   "BTRFS_BLOCK_GROUP_???");
-	printf(", usage=%"PRI__u64 "%s, devid=%"PRI__u64 "%s, pstart=%"PRI__u64
-	       "%s, pend=%"PRI__u64 "%s, vstart=%"PRI__u64 "%s, vend=%"PRI__u64
-	       "%s, target=%"PRI__u64 "%s, flags=",
-		args->usage, maybe_print_uint64max(args->usage),
-		args->devid, maybe_print_uint64max(args->devid),
-		args->pstart, maybe_print_uint64max(args->pstart),
-		args->pend, maybe_print_uint64max(args->pend),
-		args->vstart, maybe_print_uint64max(args->vstart),
-		args->vend, maybe_print_uint64max(args->vend),
-		args->target, maybe_print_uint64max(args->target));
-	printflags(btrfs_balance_args, args->flags, "BTRFS_BALANCE_ARGS_???");
+	print_uint64(", usage=", args->usage);
+	printf(", devid=makedev(%u, %u)",
+	       major(args->devid), minor(args->devid));
+	print_uint64(", pstart=", args->pstart);
+	print_uint64(", pend=", args->pend);
+	print_uint64(", vstart=", args->vstart);
+	print_uint64(", vend=", args->vend);
+	print_uint64(", target=", args->target);
+	printf(", flags=");
+	prfl_btrfs(btrfs_balance_args, args->flags, "BTRFS_BALANCE_ARGS_???");
 	printf("}");
 }
 
@@ -531,25 +596,31 @@
 	struct btrfs_ioctl_vol_args vol_args = {};
 
 	ioctl(-1, BTRFS_IOC_BALANCE_CTL, 1);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_CTL, "
-	       "BTRFS_BALANCE_CTL_PAUSE) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, %sBTRFS_BALANCE_CTL_PAUSE%s) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_BALANCE_CTL),
+	       verbose_xlat ? "0x1 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	ioctl(-1, BTRFS_IOC_BALANCE_CTL, 2);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_CTL, "
-	       "BTRFS_BALANCE_CTL_CANCEL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, "
+	       "%sBTRFS_BALANCE_CTL_CANCEL%s) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_BALANCE_CTL),
+	       verbose_xlat ? "0x2 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	ioctl(-1, BTRFS_IOC_BALANCE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_BALANCE));
 
 	ioctl(-1, BTRFS_IOC_BALANCE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_BALANCE));
 
 	/* struct btrfs_ioctl_balance_args */
 	ioctl(-1, BTRFS_IOC_BALANCE_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_BALANCE_V2));
 
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_V2, {flags=");
-	printflags(btrfs_balance_flags, args.flags, "BTRFS_BALANCE_???");
+	printf("ioctl(-1, %s, {flags=", ioc(BTRFS_IOC_BALANCE_V2));
+	prfl_btrfs(btrfs_balance_flags, args.flags, "BTRFS_BALANCE_???");
 	printf(", data=");
 	btrfs_print_balance_args(&args.data);
 	printf(", meta=");
@@ -560,6 +631,8 @@
 	printf("}) = -1 EBADF (%m)\n");
 
 	if (write_ok) {
+		long ret;
+
 		args.flags = BTRFS_BALANCE_DATA | BTRFS_BALANCE_METADATA |
 			     BTRFS_BALANCE_SYSTEM;
 		args.data.flags = 0;
@@ -568,10 +641,18 @@
 		args.meta.profiles = 0;
 		args.sys.flags = 0;
 		args.sys.profiles = 0;
-		printf("ioctl(%d, BTRFS_IOC_BALANCE_V2, {flags=",
-			btrfs_test_dir_fd);
 
-		printflags(btrfs_balance_flags, args.flags,
+		/*
+		 * We should keep args the same for data in meta in case
+		 * volume-under-tests uses mixed groups data and metadata.
+		 */
+		args.meta.pend = -1ULL;
+		args.meta.vend = -1ULL;
+
+		printf("ioctl(%d, %s, {flags=",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_BALANCE_V2));
+
+		prfl_btrfs(btrfs_balance_flags, args.flags,
 			   "BTRFS_BALANCE_???");
 		printf(", data=");
 		btrfs_print_balance_args(&args.data);
@@ -579,20 +660,24 @@
 		btrfs_print_balance_args(&args.meta);
 		printf(", sys=");
 		btrfs_print_balance_args(&args.sys);
-		ioctl(btrfs_test_dir_fd, BTRFS_IOC_BALANCE_V2,  &args);
-		printf("} => {flags=");
-		printflags(btrfs_balance_flags, args.flags,
-			   "BTRFS_BALANCE_???");
-		printf(", state=");
-		printflags(btrfs_balance_state, args.state,
-			   "BTRFS_BALANCE_STATE_???");
-		printf(", data=");
-		btrfs_print_balance_args(&args.data);
-		printf(", meta=");
-		btrfs_print_balance_args(&args.meta);
-		printf(", sys=");
-		btrfs_print_balance_args(&args.sys);
-		printf("}) = 0\n");
+		ret = ioctl(btrfs_test_dir_fd, BTRFS_IOC_BALANCE_V2,  &args);
+		if (ret < 0) {
+			printf("}) = %s\n", sprintrc(ret));
+		} else {
+			printf("} => {flags=");
+			prfl_btrfs(btrfs_balance_flags, args.flags,
+				   "BTRFS_BALANCE_???");
+			printf(", state=");
+			prfl_btrfs(btrfs_balance_state, args.state,
+				   "BTRFS_BALANCE_STATE_???");
+			printf(", data=");
+			btrfs_print_balance_args(&args.data);
+			printf(", meta=");
+			btrfs_print_balance_args(&args.meta);
+			printf(", sys=");
+			btrfs_print_balance_args(&args.sys);
+			printf("}) = %ld\n", ret);
+		}
 	}
 }
 
@@ -615,38 +700,35 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_RESIZE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_RESIZE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_RESIZE));
 
 	strcpy(args.name, devid);
 	ioctl(-1, BTRFS_IOC_RESIZE, &args);
-	printf("ioctl(-1, BTRFS_IOC_RESIZE, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_RESIZE), (int) args.fd, args.name);
 
 	ioctl(-1, BTRFS_IOC_SCAN_DEV, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCAN_DEV, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCAN_DEV));
 
 	strcpy(args.name, devname);
 	ioctl(-1, BTRFS_IOC_SCAN_DEV, &args);
-	printf("ioctl(-1, BTRFS_IOC_SCAN_DEV, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCAN_DEV), (int) args.fd, args.name);
 
 	ioctl(-1, BTRFS_IOC_ADD_DEV, NULL);
-	printf("ioctl(-1, BTRFS_IOC_ADD_DEV, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_ADD_DEV));
 
 	ioctl(-1, BTRFS_IOC_ADD_DEV, &args);
-	printf("ioctl(-1, BTRFS_IOC_ADD_DEV, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_ADD_DEV), (int) args.fd, args.name);
 
 	ioctl(-1, BTRFS_IOC_RM_DEV, NULL);
-	printf("ioctl(-1, BTRFS_IOC_RM_DEV, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_RM_DEV));
 
 	ioctl(-1, BTRFS_IOC_RM_DEV, &args);
-	printf("ioctl(-1, BTRFS_IOC_RM_DEV, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_RM_DEV), (int) args.fd, args.name);
 
 }
 
@@ -667,17 +749,21 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_CLONE, clone_fd);
-	printf("ioctl(-1, BTRFS_IOC_CLONE or FICLONE, %x) = -1 EBADF (%m)\n",
-		clone_fd);
+	printf("ioctl(-1, %s, %x) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_CLONE, "BTRFS_IOC_CLONE or FICLONE"),
+	       clone_fd);
 
 	ioctl(-1, BTRFS_IOC_CLONE_RANGE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_CLONE_RANGE or FICLONERANGE, "
-	       "NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_CLONE_RANGE,
+			    "BTRFS_IOC_CLONE_RANGE or FICLONERANGE"));
 
 	ioctl(-1, BTRFS_IOC_CLONE_RANGE, &args);
-	printf("ioctl(-1, BTRFS_IOC_CLONE_RANGE or FICLONERANGE, "
+	printf("ioctl(-1, %s, "
 	       "{src_fd=%d, src_offset=%" PRI__u64 ", src_length=%" PRI__u64
 	       ", dest_offset=%" PRI__u64 "}) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_CLONE_RANGE,
+			    "BTRFS_IOC_CLONE_RANGE or FICLONERANGE"),
 		(int) args.src_fd, args.src_offset, args.src_length,
 		args.dest_offset);
 }
@@ -686,16 +772,17 @@
 #define BTRFS_INVALID_COMPRESS (BTRFS_COMPRESS_TYPES + 1)
 
 static void
-btrfs_print_defrag_range_args(struct btrfs_ioctl_defrag_range_args *args)
+btrfs_print_defrag_range_args(struct btrfs_ioctl_defrag_range_args *args,
+			      bool compress_type_known)
 {
-	printf("{start=%" PRIu64 ", len=%" PRIu64 "%s, flags=",
-		(uint64_t) args->start, (uint64_t) args->len,
-		maybe_print_uint64max(args->len));
+	printf("{start=%" PRIu64, (uint64_t) args->start);
+	print_uint64(", len=", args->len);
 
-	printflags(btrfs_defrag_flags, args->flags, "BTRFS_DEFRAG_RANGE_???");
+	printf(", flags=");
+	prfl_btrfs(btrfs_defrag_flags, args->flags, "BTRFS_DEFRAG_RANGE_???");
 	printf(", extent_thresh=%u, compress_type=", args->extent_thresh);
-	printxval(btrfs_compress_types, args->compress_type,
-		  "BTRFS_COMPRESS_???");
+	prxval_btrfs(btrfs_compress_types, args->compress_type,
+		     "BTRFS_COMPRESS_???", compress_type_known);
 	printf("}");
 }
 
@@ -721,29 +808,30 @@
 	 * actually consume it.
 	 */
 	ioctl(-1, BTRFS_IOC_DEFRAG, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEFRAG));
 
 	ioctl(-1, BTRFS_IOC_DEFRAG, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEFRAG));
 
 	/* struct btrfs_ioctl_defrag_range_args */
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEFRAG_RANGE));
 
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, ");
-	btrfs_print_defrag_range_args(&args);
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_DEFRAG_RANGE));
+	btrfs_print_defrag_range_args(&args, true);
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, &args);
 	printf(") = -1 EBADF (%m)\n");
 
 	args.compress_type = BTRFS_INVALID_COMPRESS;
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, ");
-	btrfs_print_defrag_range_args(&args);
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_DEFRAG_RANGE));
+	btrfs_print_defrag_range_args(&args, false);
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, &args);
 	printf(") = -1 EBADF (%m)\n");
 
 	args.len--;
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, ");
-	btrfs_print_defrag_range_args(&args);
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_DEFRAG_RANGE));
+	btrfs_print_defrag_range_args(&args, false);
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, &args);
 	printf(") = -1 EBADF (%m)\n");
 }
@@ -761,18 +849,28 @@
 btrfs_print_objectid(uint64_t objectid)
 {
 	const char *str = xlookup(btrfs_tree_objectids, objectid);
-	printf("%" PRIu64, objectid);
-	if (str)
-		printf(" /* %s */", str);
+	if (str) {
+		if (verbose_xlat)
+			printf("%" PRIu64 " /* %s */", objectid, str);
+		else
+			printf("%s", str);
+	} else {
+		printf("%" PRIu64, objectid);
+	}
 }
 
 static void
 btrfs_print_key_type(uint32_t type)
 {
 	const char *str = xlookup(btrfs_key_types, type);
-	printf("%u", type);
-	if (str)
-		printf(" /* %s */", str);
+	if (str) {
+		if (verbose_xlat)
+			printf("%u /* %s */", type, str);
+		else
+			printf("%s", str);
+	} else {
+		printf("%u", type);
+	}
 }
 
 static void
@@ -788,18 +886,10 @@
 		printf(", max_objectid=");
 		btrfs_print_objectid(key->max_objectid);
 	}
-	if (key->min_offset)
-		printf(", min_offset=%" PRI__u64 "%s",
-		       key->min_offset, maybe_print_uint64max(key->min_offset));
-	if (key->max_offset)
-		printf(", max_offset=%" PRI__u64 "%s",
-		       key->max_offset, maybe_print_uint64max(key->max_offset));
-	if (key->min_transid)
-		printf(", min_transid=%" PRI__u64 "%s", key->min_transid,
-		       maybe_print_uint64max(key->min_transid));
-	if (key->max_transid)
-		printf(", max_transid=%" PRI__u64 "%s", key->max_transid,
-		       maybe_print_uint64max(key->max_transid));
+	print_uint64(", min_offset=", key->min_offset);
+	print_uint64(", max_offset=", key->max_offset);
+	print_uint64(", min_transid=", key->min_transid);
+	print_uint64(", max_transid=", key->max_transid);
 	printf(", min_type=");
 	btrfs_print_key_type(key->min_type);
 	printf(", max_type=");
@@ -814,7 +904,7 @@
 	if (verbose) {
 		uint64_t i;
 		uint64_t off = 0;
-		printf("[");
+		printf("buf=[");
 		for (i = 0; i < key->nr_items; i++) {
 			struct btrfs_ioctl_search_header *sh;
 			sh = (typeof(sh))(buf + off);
@@ -859,19 +949,21 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_TREE_SEARCH));
 
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_TREE_SEARCH_V2));
 
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -880,13 +972,13 @@
 	key_reference.min_objectid = 6;
 	key_reference.max_objectid = 7;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -895,13 +987,13 @@
 	key_reference.min_offset++;
 	key_reference.max_offset--;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -910,13 +1002,13 @@
 	key_reference.min_transid++;
 	key_reference.max_transid--;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -925,13 +1017,13 @@
 	key_reference.min_type = 1;
 	key_reference.max_type = 12;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -950,11 +1042,11 @@
 		key_reference.max_offset = -1ULL;
 
 		search_args.key = key_reference;
-		printf("ioctl(%d, BTRFS_IOC_TREE_SEARCH, {",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_TREE_SEARCH));
 		btrfs_print_search_key(&search_args.key);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_TREE_SEARCH, &search_args);
-		printf("} => {key={nr_items=%u}, buf=",
+		printf("} => {key={nr_items=%u}, ",
 			search_args.key.nr_items);
 		btrfs_print_tree_search_buf(&search_args.key, search_args.buf,
 					    sizeof(search_args.buf));
@@ -966,12 +1058,12 @@
 
 		args->key = key_reference;
 		args->buf_size = bufsize;
-		printf("ioctl(%d, BTRFS_IOC_TREE_SEARCH_V2, {",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_TREE_SEARCH_V2));
 		btrfs_print_search_key(&key_reference);
 		printf(", buf_size=%" PRIu64 "}", (uint64_t) args->buf_size);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_TREE_SEARCH_V2, args);
-		printf(" => {key={nr_items=%u}, buf_size=%" PRIu64 ", buf=",
+		printf(" => {key={nr_items=%u}, buf_size=%" PRIu64 ", ",
 			args->key.nr_items, (uint64_t)args->buf_size);
 		btrfs_print_tree_search_buf(&args->key, args->buf,
 					    args->buf_size);
@@ -979,8 +1071,8 @@
 
 		args->key = key_reference;
 		args->buf_size = sizeof(struct btrfs_ioctl_search_header);
-		printf("ioctl(%d, BTRFS_IOC_TREE_SEARCH_V2, {",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_TREE_SEARCH_V2));
 		btrfs_print_search_key(&args->key);
 		printf(", buf_size=%" PRIu64 "}", (uint64_t)args->buf_size);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_TREE_SEARCH_V2, args);
@@ -1003,9 +1095,10 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_INO_LOOKUP, NULL);
-	printf("ioctl(-1, BTRFS_IOC_INO_LOOKUP, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_INO_LOOKUP));
 
-	printf("ioctl(-1, BTRFS_IOC_INO_LOOKUP, {treeid=");
+	printf("ioctl(-1, %s, {treeid=", ioc(BTRFS_IOC_INO_LOOKUP));
 	btrfs_print_objectid(args.treeid);
 	printf(", objectid=");
 	btrfs_print_objectid(args.objectid);
@@ -1013,8 +1106,8 @@
 	printf("}) = -1 EBADF (%m)\n");
 
 	if (btrfs_test_root) {
-		printf("ioctl(%d, BTRFS_IOC_INO_LOOKUP, {treeid=",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {treeid=",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_INO_LOOKUP));
 		btrfs_print_objectid(args.treeid);
 		printf(", objectid=");
 		btrfs_print_objectid(args.objectid);
@@ -1033,20 +1126,20 @@
 	struct btrfs_ioctl_space_args args = {};
 
 	ioctl(-1, BTRFS_IOC_SPACE_INFO, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SPACE_INFO, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SPACE_INFO));
 
 	ioctl(-1, BTRFS_IOC_SPACE_INFO, &args);
-	printf("ioctl(-1, BTRFS_IOC_SPACE_INFO, "
-	       "{space_slots=%" PRI__u64 "}) = -1 EBADF (%m)\n",
-		args.space_slots);
+	printf("ioctl(-1, %s, {space_slots=%" PRI__u64 "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SPACE_INFO), args.space_slots);
 
 	if (btrfs_test_root) {
 		struct btrfs_ioctl_space_args args_passed;
 		struct btrfs_ioctl_space_args *argsp;
 		args_passed = args;
-		printf("ioctl(%d, BTRFS_IOC_SPACE_INFO, "
-		       "{space_slots=%" PRI__u64 "}",
-		       btrfs_test_dir_fd, args_passed.space_slots);
+		printf("ioctl(%d, %s, {space_slots=%" PRI__u64 "}",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SPACE_INFO),
+		       args_passed.space_slots);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SPACE_INFO, &args_passed);
 		printf(" => {total_spaces=%" PRI__u64 "}) = 0\n",
 			args_passed.total_spaces);
@@ -1058,22 +1151,22 @@
 
 		*argsp = args;
 		argsp->space_slots = args_passed.total_spaces;
-		printf("ioctl(%d, BTRFS_IOC_SPACE_INFO, "
-		       "{space_slots=%" PRI__u64 "}",
-		       btrfs_test_dir_fd, argsp->space_slots);
+		printf("ioctl(%d, %s, {space_slots=%" PRI__u64 "}",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SPACE_INFO),
+		       argsp->space_slots);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SPACE_INFO, argsp);
-		printf(" => {total_spaces=%" PRI__u64 ", spaces=",
+		printf(" => {total_spaces=%" PRI__u64 ", ",
 			argsp->total_spaces);
 		if (verbose) {
 			unsigned int i;
-			printf("[");
+			printf("spaces=[");
 			for (i = 0; i < argsp->total_spaces; i++) {
 				struct btrfs_ioctl_space_info *info;
 				info = &argsp->spaces[i];
 				if (i)
 					printf(", ");
 				printf("{flags=");
-				printflags(btrfs_space_info_flags, info->flags,
+				prfl_btrfs(btrfs_space_info_flags, info->flags,
 					   "BTRFS_SPACE_INFO_???");
 				printf(", total_bytes=%" PRI__u64
 				       ", used_bytes=%" PRI__u64 "}",
@@ -1106,25 +1199,28 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_SCRUB, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SCRUB));
 
 	ioctl(-1, BTRFS_IOC_SCRUB_CANCEL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB_CANCEL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SCRUB_CANCEL));
 
-	printf("ioctl(-1, BTRFS_IOC_SCRUB, {devid=%" PRI__u64 ", start=%"
-		PRI__u64 "%s, end=%" PRI__u64 "%s, flags=",
-		args.devid, args.start, maybe_print_uint64max(args.start),
-		args.end, maybe_print_uint64max(args.end));
-	printflags(btrfs_scrub_flags, args.flags, "BTRFS_SCRUB_???");
+	printf("ioctl(-1, %s, {devid=makedev(%u, %u)",
+	       ioc(BTRFS_IOC_SCRUB), major(args.devid), minor(args.devid));
+	print_uint64(", start=", args.start);
+	print_uint64(", end=", args.end);
+	printf(", flags=");
+	prfl_btrfs(btrfs_scrub_flags, args.flags, "BTRFS_SCRUB_???");
 	ioctl(-1, BTRFS_IOC_SCRUB, &args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCRUB_PROGRESS));
 
 	ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, &args);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, "
-	       "{devid=%" PRI__u64 "}) = -1 EBADF (%m)\n", args.devid);
+	printf("ioctl(-1, %s, {devid=makedev(%u, %u)}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCRUB_PROGRESS),
+	       major(args.devid), minor(args.devid));
 }
 
 /*
@@ -1140,12 +1236,14 @@
 	memcpy(&args.uuid, uuid_reference, BTRFS_UUID_SIZE);
 
 	ioctl(-1, BTRFS_IOC_DEV_INFO, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEV_INFO, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEV_INFO));
 
 	ioctl(-1, BTRFS_IOC_DEV_INFO, &args);
-	printf("ioctl(-1, BTRFS_IOC_DEV_INFO, "
-	       "{devid=%" PRI__u64 ", uuid=%s}) = -1 EBADF (%m)\n",
-		args.devid, uuid_reference_string);
+	printf("ioctl(-1, %s, "
+	       "{devid=makedev(%u, %u), uuid=%s}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEV_INFO), major(args.devid), minor(args.devid),
+	       uuid_reference_string);
 }
 
 /*
@@ -1177,32 +1275,32 @@
 
 
 	ioctl(-1, BTRFS_IOC_INO_PATHS, NULL);
-	printf("ioctl(-1, BTRFS_IOC_INO_PATHS, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_INO_PATHS));
 
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, NULL);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_LOGICAL_INO));
 
 	ioctl(-1, BTRFS_IOC_INO_PATHS, &args);
-	printf("ioctl(-1, BTRFS_IOC_INO_PATHS, "
-	       "{inum=%" PRI__u64 ", size=%" PRI__u64
+	printf("ioctl(-1, %s, {inum=%" PRI__u64 ", size=%" PRI__u64
 	       ", fspath=NULL}) = -1 EBADF (%m)\n",
-	       args.inum, args.size);
+	       ioc(BTRFS_IOC_INO_PATHS), args.inum, args.size);
 
 	args.fspath = (uintptr_t) buf;
 	ioctl(-1, BTRFS_IOC_INO_PATHS, &args);
-	printf("ioctl(-1, BTRFS_IOC_INO_PATHS, "
-	       "{inum=%" PRI__u64 ", size=%" PRI__u64
+	printf("ioctl(-1, %s, {inum=%" PRI__u64 ", size=%" PRI__u64
 	       ", fspath=0x%" PRI__x64 "}) = -1 EBADF (%m)\n",
-	       args.inum, args.size, args.fspath);
+	       ioc(BTRFS_IOC_INO_PATHS), args.inum, args.size, args.fspath);
 
 	args.fspath = 0;
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, &args);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+	printf("ioctl(-1, %s, {logical=%" PRI__u64
 	       ", size=%" PRI__u64 ", reserved=[0xdeadc0defacefeeb"
 	       ", 0xdeadc0defacefeec, 0xdeadc0defacefeed]"
 	       ", flags=0xdeadc0defacefeee /* BTRFS_LOGICAL_INO_ARGS_??? */"
 	       ", inodes=NULL}) = -1 EBADF (%m)\n",
-	       args.inum, args.size);
+	       ioc(BTRFS_IOC_LOGICAL_INO), args.inum, args.size);
 
 	args.fspath = (uintptr_t) buf;
 	args.reserved[0] = 0;
@@ -1215,11 +1313,13 @@
 			1;
 
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, &args);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+	printf("ioctl(-1, %s, {logical=%" PRI__u64
 	       ", size=%" PRI__u64 ", reserved=[0, 0xdeadc0defacefeec, 0]"
-	       ", flags=BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET"
+	       ", flags=%sBTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET%s"
 	       ", inodes=0x%" PRI__x64 "}) = -1 EBADF (%m)\n",
-	       args.inum, args.size, args.fspath);
+	       ioc(BTRFS_IOC_LOGICAL_INO), args.inum, args.size,
+	       verbose_xlat ? "0x1 /* " : "", verbose_xlat ? " */" : "",
+	       args.fspath);
 
 	args.reserved[1] = 0;
 #ifdef HAVE_BTRFS_IOCTL_LOGICAL_INO_ARGS
@@ -1230,9 +1330,10 @@
 			0;
 
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, &args);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+	printf("ioctl(-1, %s, {logical=%" PRI__u64
 	       ", size=%" PRI__u64 ", flags=0, inodes=0x%" PRI__x64
-	       "}) = -1 EBADF (%m)\n", args.inum, args.size, args.fspath);
+	       "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_LOGICAL_INO), args.inum, args.size, args.fspath);
 
 #ifdef HAVE_LINUX_FIEMAP_H
 	if (btrfs_test_root) {
@@ -1248,17 +1349,16 @@
 			perror_msg_and_fail("fstat failed");
 
 		args.inum = si.st_ino;
-		printf("ioctl(%d, BTRFS_IOC_INO_PATHS, "
-		       "{inum=%" PRI__u64 ", size=%" PRI__u64
+		printf("ioctl(%d, %s, {inum=%" PRI__u64 ", size=%" PRI__u64
 		       ", fspath=0x%" PRI__x64 "}",
-		       btrfs_test_dir_fd, args.inum, args.size,
-		       args.fspath);
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_INO_PATHS),
+		       args.inum, args.size, args.fspath);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_INO_PATHS, &args);
-		printf(" => {fspath={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, val=",
+		printf(" => {fspath={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, ",
 			data->bytes_left, data->bytes_missing, data->elem_cnt,
 			data->elem_missed);
 		if (verbose) {
-			printf("[\"strace-test\"]");
+			printf("val=[\"%s\"]", dir_name);
 		} else
 			printf("...");
 		printf("}}) = 0\n");
@@ -1280,7 +1380,7 @@
 		 */
 		fsync(fd);
 		ioctl(fd, BTRFS_IOC_SYNC, NULL);
-		printf("ioctl(%d, BTRFS_IOC_SYNC) = 0\n", fd);
+		printf("ioctl(%d, %s) = 0\n", fd, ioc(BTRFS_IOC_SYNC));
 
 		size = sizeof(*fiemap) + 2 * sizeof(fiemap->fm_extents[0]);
 		fiemap = malloc(size);
@@ -1292,18 +1392,19 @@
 		fiemap->fm_extent_count = 2;
 
 		/* This is also a live test for FIEMAP */
-		printf("ioctl(%d, FS_IOC_FIEMAP, {fm_start=%" PRI__u64
+		printf("ioctl(%d, %s, {fm_start=%" PRI__u64
 		       ", fm_length=%" PRI__u64 ", fm_flags=",
-		       fd, fiemap->fm_start, fiemap->fm_length);
-		printflags(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
+		       fd, ioc(FS_IOC_FIEMAP),
+		       fiemap->fm_start, fiemap->fm_length);
+		prfl_btrfs(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
 		printf(", fm_extent_count=%u}", fiemap->fm_extent_count);
 		ioctl(fd, FS_IOC_FIEMAP, fiemap);
 		printf(" => {fm_flags=");
-		printflags(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
-		printf(", fm_mapped_extents=%u, fm_extents=",
+		prfl_btrfs(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
+		printf(", fm_mapped_extents=%u, ",
 			fiemap->fm_mapped_extents);
 		if (verbose) {
-			printf("[");
+			printf("fm_extents=[");
 			unsigned int i;
 			for (i = 0; i < fiemap->fm_mapped_extents; i++) {
 				struct fiemap_extent *fe;
@@ -1316,7 +1417,7 @@
 				       ", ",
 				       fe->fe_logical, fe->fe_physical,
 				       fe->fe_length);
-				printflags(fiemap_extent_flags, fe->fe_flags,
+				prfl_btrfs(fiemap_extent_flags, fe->fe_flags,
 					   "FIEMAP_EXTENT_???");
 				printf("}");
 			}
@@ -1326,15 +1427,16 @@
 		printf("}) = 0\n");
 
 		args.inum = fiemap->fm_extents[0].fe_physical;
-		printf("ioctl(%d, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+		printf("ioctl(%d, %s, {logical=%" PRI__u64
 		       ", size=%" PRI__u64 ", flags=0, inodes=0x%" PRI__x64 "}",
-		       fd, args.inum, args.size, args.fspath);
+		       fd, ioc(BTRFS_IOC_LOGICAL_INO),
+		       args.inum, args.size, args.fspath);
 		ioctl(fd, BTRFS_IOC_LOGICAL_INO, &args);
-		printf(" => {inodes={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, val=",
+		printf(" => {inodes={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, ",
 			data->bytes_left, data->bytes_missing, data->elem_cnt,
 			data->elem_missed);
 		if (verbose) {
-			printf("[{inum=%llu, offset=0, root=5}]",
+			printf("val=[{inum=%llu, offset=0, root=5}]",
 			       (unsigned long long) si.st_ino);
 		} else
 			printf("...");
@@ -1359,18 +1461,23 @@
 			.nsec = 12345,
 		},
 	};
+	int saved_errno;
+
 	memcpy(&args.uuid, uuid_reference, BTRFS_UUID_SIZE);
 
 	ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, "
-	       "NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_RECEIVED_SUBVOL));
 
 	ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, &args);
-	printf("ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, "
-	       "{uuid=%s, stransid=%" PRI__u64 ", stime=%" PRI__u64
-	       ".%u, flags=0}) = -1 EBADF (%m)\n",
-	       uuid_reference_string, args.stransid, args.stime.sec,
-	       args.stime.nsec);
+	saved_errno = errno;
+	printf("ioctl(-1, %s, {uuid=%s, stransid=%" PRI__u64
+	       ", stime={sec=%" PRI__u64 ", nsec=%u}",
+	       ioc(BTRFS_IOC_SET_RECEIVED_SUBVOL), uuid_reference_string,
+	       args.stransid, args.stime.sec, args.stime.nsec);
+	print_time_t_nsec(args.stime.sec, args.stime.nsec, true);
+	errno = saved_errno;
+	printf(", flags=0}) = -1 EBADF (%m)\n");
 }
 
 /*
@@ -1388,29 +1495,25 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_SEND, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SEND, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SEND));
 
-	printf("ioctl(-1, BTRFS_IOC_SEND, "
-	       "{send_fd=%d, clone_sources_count=%" PRI__u64
-	       ", clone_sources=",
+	printf("ioctl(-1, %s, {send_fd=%d, clone_sources_count=%" PRI__u64
+	       ", clone_sources=NULL",
+	       ioc(BTRFS_IOC_SEND),
 	       (int) args.send_fd, args.clone_sources_count);
-	if (verbose)
-		printf("NULL");
-	else
-		printf("...");
 	printf(", parent_root=");
 	btrfs_print_objectid(args.parent_root);
 	printf(", flags=");
-	printflags(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
+	prfl_btrfs(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
 	ioctl(-1, BTRFS_IOC_SEND, &args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	args.clone_sources_count = 2;
 	args.clone_sources = (__u64 *) (void *) u64_array;
 
-	printf("ioctl(-1, BTRFS_IOC_SEND, "
-	       "{send_fd=%d, clone_sources_count=%" PRI__u64
+	printf("ioctl(-1, %s, {send_fd=%d, clone_sources_count=%" PRI__u64
 	       ", clone_sources=",
+	       ioc(BTRFS_IOC_SEND),
 	       (int) args.send_fd, args.clone_sources_count);
 	if (verbose) {
 		printf("[");
@@ -1419,11 +1522,11 @@
 		btrfs_print_objectid(u64_array[1]);
 		printf("]");
 	} else
-		printf("...");
+		printf("%p", args.clone_sources);
 	printf(", parent_root=");
 	btrfs_print_objectid(args.parent_root);
 	printf(", flags=");
-	printflags(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
+	prfl_btrfs(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
 	ioctl(-1, BTRFS_IOC_SEND, &args);
 	printf("}) = -1 EBADF (%m)\n");
 }
@@ -1440,26 +1543,37 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL));
 
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "BTRFS_QUOTA_CTL_ENABLE}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {cmd=%sBTRFS_QUOTA_CTL_ENABLE%s}) "
+	       "= -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL),
+	       verbose_xlat ? "0x1 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	args.cmd = 2;
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "BTRFS_QUOTA_CTL_DISABLE}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {cmd=%sBTRFS_QUOTA_CTL_DISABLE%s}) "
+	       "= -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL),
+	       verbose_xlat ? "0x2 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	args.cmd = 3;
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "BTRFS_QUOTA_CTL_RESCAN__NOTUSED}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, "
+	       "{cmd=%sBTRFS_QUOTA_CTL_RESCAN__NOTUSED%s}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL),
+	       verbose_xlat ? "0x3 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	args.cmd = 4;
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "0x4 /* BTRFS_QUOTA_CTL_??? */}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, "
+	       "{cmd=0x4 /* BTRFS_QUOTA_CTL_??? */}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL));
 }
 
 /*
@@ -1476,12 +1590,14 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QGROUP_ASSIGN));
 
 	ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, &args);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, "
+	printf("ioctl(-1, %s, "
 	       "{assign=%" PRI__u64 ", src=%" PRI__u64 ", dst=%" PRI__u64
-	       "}) = -1 EBADF (%m)\n", args.assign, args.src, args.dst);
+	       "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QGROUP_ASSIGN), args.assign, args.src, args.dst);
 }
 
 /*
@@ -1497,12 +1613,13 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QGROUP_CREATE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_CREATE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_QGROUP_CREATE));
 
 	ioctl(-1, BTRFS_IOC_QGROUP_CREATE, &args);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_CREATE, "
+	printf("ioctl(-1, %s, "
 	       "{create=%" PRI__u64 ", qgroupid=%" PRI__u64
-	       "}) = -1 EBADF (%m)\n", args.create, args.qgroupid);
+	       "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QGROUP_CREATE), args.create, args.qgroupid);
 }
 
 /*
@@ -1519,13 +1636,15 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_RESCAN));
 
 	ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, "
-	       "{flags=0}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {flags=0}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_RESCAN));
 	ioctl(-1, BTRFS_IOC_QUOTA_RESCAN_WAIT, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_RESCAN_WAIT) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_RESCAN_WAIT));
 
 }
 
@@ -1542,20 +1661,21 @@
 	char label[BTRFS_LABEL_SIZE] = "btrfs-label";
 
 	ioctl(-1, BTRFS_IOC_SET_FSLABEL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SET_FSLABEL, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_FSLABEL));
 
 	ioctl(-1, BTRFS_IOC_SET_FSLABEL, label);
-	printf("ioctl(-1, BTRFS_IOC_SET_FSLABEL, \"%s\") = -1 EBADF (%m)\n",
-		label);
+	printf("ioctl(-1, %s, \"%s\") = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_FSLABEL), label);
 
 	if (write_ok) {
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SET_FSLABEL, label);
-		printf("ioctl(%d, BTRFS_IOC_SET_FSLABEL, \"%s\") = 0\n",
-			btrfs_test_dir_fd, label);
+		printf("ioctl(%d, %s, \"%s\") = 0\n",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_SET_FSLABEL), label);
 
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_FSLABEL, label);
-		printf("ioctl(%d, BTRFS_IOC_GET_FSLABEL, \"%s\") = 0\n",
-			btrfs_test_dir_fd, label);
+		printf("ioctl(%d, %s, \"%s\") = 0\n",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_GET_FSLABEL), label);
 	}
 }
 
@@ -1573,12 +1693,13 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_GET_DEV_STATS, NULL);
-	printf("ioctl(-1, BTRFS_IOC_GET_DEV_STATS, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_GET_DEV_STATS));
 
-	printf("ioctl(-1, BTRFS_IOC_GET_DEV_STATS, {devid=%" PRI__u64
-		", nr_items=%" PRI__u64 ", flags=",
-		args.devid, args.nr_items);
-	printflags(btrfs_dev_stats_flags, args.flags,
+	printf("ioctl(-1, %s, {devid=makedev(%u, %u)"
+	       ", nr_items=%" PRI__u64 ", flags=",
+	       ioc(BTRFS_IOC_GET_DEV_STATS),
+	       major(args.devid), minor(args.devid), args.nr_items);
+	prfl_btrfs(btrfs_dev_stats_flags, args.flags,
 		     "BTRFS_DEV_STATS_???");
 	ioctl(-1, BTRFS_IOC_GET_DEV_STATS, &args);
 	printf("}) = -1 EBADF (%m)\n");
@@ -1586,24 +1707,33 @@
 	if (write_ok) {
 		unsigned int i;
 		args.flags = BTRFS_DEV_STATS_RESET;
-		printf("ioctl(%d, BTRFS_IOC_GET_DEV_STATS, {devid=%" PRI__u64
+		printf("ioctl(%d, %s, {devid=makedev(%u, %u)"
 			", nr_items=%" PRI__u64 ", flags=",
-			btrfs_test_dir_fd, args.devid, args.nr_items);
-		printflags(btrfs_dev_stats_flags, args.flags,
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_GET_DEV_STATS),
+			major(args.devid), minor(args.devid), args.nr_items);
+		prfl_btrfs(btrfs_dev_stats_flags, args.flags,
 			     "BTRFS_DEV_STATS_???");
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_DEV_STATS, &args);
 		printf("} => {nr_items=%" PRI__u64 ", flags=",
 			args.nr_items);
-		printflags(btrfs_dev_stats_flags, args.flags,
+		prfl_btrfs(btrfs_dev_stats_flags, args.flags,
 			   "BTRFS_DEV_STATS_???");
 		printf(", [");
 		for (i = 0; i < args.nr_items; i++) {
 			const char *name = xlookup(btrfs_dev_stats_values, i);
 			if (i)
 				printf(", ");
+
+			if (name) {
+				if (verbose_xlat)
+					printf("[%u /* %s */] = ", i, name);
+				else
+					printf("[%s] = ", name);
+			} else {
+				printf("[%u] = ", i);
+			}
+
 			printf("%" PRI__u64, args.values[i]);
-			if (name)
-				printf(" /* %s */", name);
 		}
 		printf("]}) = 0\n");
 	}
@@ -1627,22 +1757,38 @@
 
 	/* struct btrfs_ioctl_dev_replace_args */
 	ioctl(-1, BTRFS_IOC_DEV_REPLACE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEV_REPLACE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEV_REPLACE));
 
-	ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args);
-	printf("ioctl(-1, BTRFS_IOC_DEV_REPLACE, "
-	       "{cmd=BTRFS_IOCTL_DEV_REPLACE_CMD_START, start={srcdevid=%"
-	       PRI__u64 ", cont_reading_from_srcdev_mode=%" PRI__u64
-	       ", srcdev_name=\"%s\", tgtdev_name=\"%s\"}}) = -1 EBADF (%m)\n",
-	       args.start.srcdevid,
-	       args.start.cont_reading_from_srcdev_mode,
-	       (char *)args.start.srcdev_name,
-	       (char *)args.start.tgtdev_name);
+	for (unsigned long i = 0; i < 3; i++) {
+		int saved_errno;
+
+		args.start.cont_reading_from_srcdev_mode = i;
+		ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args);
+		saved_errno = errno;
+		printf("ioctl(-1, %s, "
+		       "{cmd=%sBTRFS_IOCTL_DEV_REPLACE_CMD_START%s"
+		       ", start={srcdevid=makedev(%u, %u)"
+		       ", cont_reading_from_srcdev_mode=",
+		       ioc(BTRFS_IOC_DEV_REPLACE),
+		       verbose_xlat ? "0 /* " : "", verbose_xlat ? " */" : "",
+		       major(args.start.srcdevid), minor(args.start.srcdevid));
+		prxval_btrfs(btrfs_cont_reading_from_srcdev_mode,
+			     args.start.cont_reading_from_srcdev_mode,
+			     "BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV"
+			     "_MODE_???", i < 2);
+		errno = saved_errno;
+		printf(", srcdev_name=\"%s\", tgtdev_name=\"%s\"}}) "
+		       "= -1 EBADF (%m)\n",
+		       (char *)args.start.srcdev_name,
+		       (char *)args.start.tgtdev_name);
+	}
 
 	args.cmd = 1;
 	ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args);
-	printf("ioctl(-1, BTRFS_IOC_DEV_REPLACE, "
-	       "{cmd=BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {cmd=%sBTRFS_IOCTL_DEV_REPLACE_CMD_STATUS%s}) "
+	       "= -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEV_REPLACE),
+	       verbose_xlat ? "0x1 /* " : "", verbose_xlat ? " */" : "");
 }
 
 static void
@@ -1656,13 +1802,16 @@
 	struct file_dedupe_range *argsp;
 
 	ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME, NULL);
-	printf("ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
-	       "NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+			    "BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE"));
 
-	printf("ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
+	printf("ioctl(-1, %s, "
 	       "{src_offset=%" PRIu64
 	       ", src_length=%" PRIu64
 	       ", dest_count=%hu, info=[]",
+	       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+			    "BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE"),
 		(uint64_t)args.src_offset,
 		(uint64_t)args.src_length, args.dest_count);
 	ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME, &args);
@@ -1682,10 +1831,12 @@
 	argsp->info[2].dest_fd = 2;
 	argsp->info[2].dest_offset = 20480;
 
-	printf("ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
+	printf("ioctl(-1, %s, "
 	       "{src_offset=%" PRIu64
 	       ", src_length=%" PRIu64
 	       ", dest_count=%hu, info=",
+	       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+			    "BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE"),
 		(int64_t)argsp->src_offset,
 		(uint64_t)argsp->src_length, argsp->dest_count);
 		printf("[{dest_fd=%" PRId64 ", dest_offset=%" PRIu64
@@ -1744,9 +1895,12 @@
 		argsp->info[2].dest_fd = fd2;
 		argsp->info[2].dest_offset = 20480;
 
-		printf("ioctl(%d, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
+		printf("ioctl(%d, %s, "
 		       "{src_offset=%" PRIu64 ", src_length=%" PRIu64
 		       ", dest_count=%hu, info=", fd1,
+		       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+				    "BTRFS_IOC_FILE_EXTENT_SAME"
+				    " or FIDEDUPERANGE"),
 		       (uint64_t)argsp->src_offset,
 		       (uint64_t)argsp->src_length, argsp->dest_count);
 		printf("[{dest_fd=%" PRId64 ", dest_offset=%" PRIu64
@@ -1797,11 +1951,11 @@
 		   "BTRFS_FEATURE_COMPAT_???");
 
 	printf(", compat_ro_flags=");
-	printflags(btrfs_features_compat_ro, flags->compat_ro_flags,
+	prfl_btrfs(btrfs_features_compat_ro, flags->compat_ro_flags,
 		   "BTRFS_FEATURE_COMPAT_RO_???");
 
 	printf(", incompat_flags=");
-	printflags(btrfs_features_incompat, flags->incompat_flags,
+	prfl_btrfs(btrfs_features_incompat, flags->incompat_flags,
 		   "BTRFS_FEATURE_INCOMPAT_???");
 	printf("}");
 }
@@ -1831,9 +1985,10 @@
 	struct btrfs_ioctl_feature_flags supported_features[3];
 
 	ioctl(-1, BTRFS_IOC_SET_FEATURES, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SET_FEATURES, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_FEATURES));
 
-	printf("ioctl(-1, BTRFS_IOC_SET_FEATURES, [");
+	printf("ioctl(-1, %s, [", ioc(BTRFS_IOC_SET_FEATURES));
 	btrfs_print_features(&args[0]);
 	printf(", ");
 	btrfs_print_features(&args[1]);
@@ -1841,8 +1996,8 @@
 	printf("]) = -1 EBADF (%m)\n");
 
 	if (btrfs_test_root) {
-		printf("ioctl(%d, BTRFS_IOC_GET_FEATURES, ",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_GET_FEATURES));
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_FEATURES,
 		      &supported_features);
 		btrfs_print_features(&supported_features[0]);
@@ -1850,8 +2005,9 @@
 
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_SUPPORTED_FEATURES,
 		      &supported_features);
-		printf("ioctl(%d, BTRFS_IOC_GET_SUPPORTED_FEATURES, ",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd,
+		       ioc(BTRFS_IOC_GET_SUPPORTED_FEATURES));
 		printf("[");
 		btrfs_print_features(&supported_features[0]);
 		printf(" /* supported */, ");
@@ -1880,19 +2036,28 @@
 	unsigned int i;
 	for (i = 0; i < ARRAY_SIZE(btrfs_read_cmd); ++i) {
 		ioctl(-1, (unsigned long) btrfs_read_cmd[i].val, 0);
-		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", btrfs_read_cmd[i].str);
+		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+		       sprint_xlat_(btrfs_read_cmd[i].val,
+				    btrfs_read_cmd[i].str));
 	}
 }
 
+static void
+rm_test_dir(void)
+{
+	int rootfd = open(path, O_RDONLY|O_DIRECTORY);
+
+	unlinkat(rootfd, dir_name, AT_REMOVEDIR);
+}
+
 int
 main(int argc, char *argv[])
 {
 
 	int opt;
 	int ret;
-	const char *path;
 
-	while ((opt = getopt(argc, argv, "wv")) != -1) {
+	while ((opt = getopt(argc, argv, "wvX")) != -1) {
 		switch (opt) {
 		case 'v':
 			/*
@@ -1904,11 +2069,18 @@
 		case 'w':
 			write_ok = true;
 			break;
+		case 'X':
+			verbose_xlat = true;
+			break;
 		default:
-			error_msg_and_fail("usage: btrfs [-v] [-w] [path]");
+			error_msg_and_fail("usage: btrfs [-vwX] [path]");
 		}
 	}
 
+	ret = snprintf(dir_name, sizeof(dir_name), dir_name_fmt, getpid());
+	if (ret < 0)
+		perror_msg_and_fail("snprintf(dir_name)");
+
 	/*
 	 * This will enable optional tests that require a valid file descriptor
 	 */
@@ -1930,14 +2102,18 @@
 		if (rootfd < 0)
 			perror_msg_and_fail("open(%s) failed", path);
 
-		ret = mkdirat(rootfd, "strace-test", 0755);
+		ret = mkdirat(rootfd, dir_name, 0755);
 		if (ret < 0 && errno != EEXIST)
-			perror_msg_and_fail("mkdirat(strace-test) failed");
+			perror_msg_and_fail("mkdirat(%s) failed", dir_name);
 
-		btrfs_test_dir_fd = openat(rootfd, "strace-test",
+		/* Register removal of the created directory.  */
+		if (ret == 0)
+			atexit(rm_test_dir);
+
+		btrfs_test_dir_fd = openat(rootfd, dir_name,
 					   O_RDONLY|O_DIRECTORY);
 		if (btrfs_test_dir_fd < 0)
-			perror_msg_and_fail("openat(strace-test) failed");
+			perror_msg_and_fail("openat(%s) failed", dir_name);
 		close(rootfd);
 	} else
 		write_ok = false;
diff --git a/tests-mx32/execve.c b/tests-mx32/execve.c
index da3bc52..c1dedfc 100644
--- a/tests-mx32/execve.c
+++ b/tests-mx32/execve.c
@@ -2,7 +2,7 @@
  * This file is part of execve strace test.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -59,17 +59,18 @@
 
 	execve(FILENAME, tail_argv, tail_envp);
 	printf("execve(\"%s\""
-	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #if VERBOSE
-	       ", [\"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #else
 	       ", %p /* 5 vars, unterminated */"
 #endif
 	       ") = -1 ENOENT (%m)\n",
 	       Q_FILENAME, q_argv[0], q_argv[1], q_argv[2],
-	       argv[3], argv[4], argv[5]
+	       argv[3], argv[4], argv[5], (char *) tail_argv + sizeof(argv)
 #if VERBOSE
-	       , q_envp[0], q_envp[1], envp[2], envp[3], envp[4]
+	       , q_envp[0], q_envp[1], envp[2], envp[3], envp[4],
+	       (char *) tail_envp + sizeof(envp)
 #else
 	       , tail_envp
 #endif
diff --git a/tests-mx32/execveat.c b/tests-mx32/execveat.c
index 566a59f..853e26c 100644
--- a/tests-mx32/execveat.c
+++ b/tests-mx32/execveat.c
@@ -2,7 +2,7 @@
  * This file is part of execveat strace test.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -64,17 +64,18 @@
 
 	syscall(__NR_execveat, -100, FILENAME, tail_argv, tail_envp, 0x1100);
 	printf("execveat(AT_FDCWD, \"%s\""
-	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #if VERBOSE
-	       ", [\"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #else
 	       ", %p /* 5 vars, unterminated */"
 #endif
 	       ", AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) = -1 %s (%m)\n",
 	       Q_FILENAME, q_argv[0], q_argv[1], q_argv[2],
-	       argv[3], argv[4], argv[5],
+	       argv[3], argv[4], argv[5], (char *) tail_argv + sizeof(argv),
 #if VERBOSE
 	       q_envp[0], q_envp[1], envp[2], envp[3], envp[4],
+	       (char *) tail_envp + sizeof(envp),
 #else
 	       tail_envp,
 #endif
diff --git a/tests-mx32/fanotify_mark-Xabbrev.c b/tests-mx32/fanotify_mark-Xabbrev.c
new file mode 100644
index 0000000..2dc9fa1
--- /dev/null
+++ b/tests-mx32/fanotify_mark-Xabbrev.c
@@ -0,0 +1 @@
+#include "fanotify_mark.c"
diff --git a/tests-mx32/fanotify_mark-Xabbrev.gen.test b/tests-mx32/fanotify_mark-Xabbrev.gen.test
new file mode 100755
index 0000000..86c4034
--- /dev/null
+++ b/tests-mx32/fanotify_mark-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark-Xabbrev -a32 -Xabbrev -e trace=fanotify_mark); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32 -Xabbrev -e trace=fanotify_mark
diff --git a/tests-mx32/fanotify_mark-Xraw.c b/tests-mx32/fanotify_mark-Xraw.c
new file mode 100644
index 0000000..f02c886
--- /dev/null
+++ b/tests-mx32/fanotify_mark-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "fanotify_mark.c"
diff --git a/tests-mx32/fanotify_mark-Xraw.gen.test b/tests-mx32/fanotify_mark-Xraw.gen.test
new file mode 100755
index 0000000..5be964d
--- /dev/null
+++ b/tests-mx32/fanotify_mark-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark-Xraw -a32 -Xraw -e trace=fanotify_mark); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32 -Xraw -e trace=fanotify_mark
diff --git a/tests-mx32/fanotify_mark-Xverbose.c b/tests-mx32/fanotify_mark-Xverbose.c
new file mode 100644
index 0000000..b76f46f
--- /dev/null
+++ b/tests-mx32/fanotify_mark-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "fanotify_mark.c"
diff --git a/tests-mx32/fanotify_mark-Xverbose.gen.test b/tests-mx32/fanotify_mark-Xverbose.gen.test
new file mode 100755
index 0000000..ef1a99d
--- /dev/null
+++ b/tests-mx32/fanotify_mark-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark-Xverbose -a32 -Xverbose -e trace=fanotify_mark); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32 -Xverbose -e trace=fanotify_mark
diff --git a/tests-mx32/fanotify_mark.c b/tests-mx32/fanotify_mark.c
index 11cf7d0..9509b83 100644
--- a/tests-mx32/fanotify_mark.c
+++ b/tests-mx32/fanotify_mark.c
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -41,6 +41,20 @@
 # include <unistd.h>
 # include <sys/fanotify.h>
 
+#if XLAT_RAW
+# define str_fan_mark_add	"0x1"
+# define str_fan_modify_ondir	"0x40000002"
+# define str_at_fdcwd		"-100"
+#elif XLAT_VERBOSE
+# define str_fan_mark_add	"0x1 /* FAN_MARK_ADD */"
+# define str_fan_modify_ondir	"0x40000002 /* FAN_MODIFY|FAN_ONDIR */"
+# define str_at_fdcwd		"-100 /* AT_FDCWD */"
+#else
+# define str_fan_mark_add	"FAN_MARK_ADD"
+# define str_fan_modify_ondir	"FAN_MODIFY|FAN_ONDIR"
+# define str_at_fdcwd		"AT_FDCWD"
+#endif
+
 /* Performs fanotify_mark call via the syscall interface. */
 static void
 do_call(kernel_ulong_t fd, kernel_ulong_t flags, const char *flags_str,
@@ -97,26 +111,73 @@
 	static const struct strval flags[] = {
 		{ F8ILL_KULONG_MASK, "0" },
 		{ (kernel_ulong_t) 0xdec0deddefaced00ULL,
-			"0xefaced00 /* FAN_MARK_??? */" },
+			"0xefaced00"
+#if !XLAT_RAW
+			" /* FAN_MARK_??? */"
+#endif
+			},
 		{ (kernel_ulong_t) 0xda7a105700000040ULL,
-			"FAN_MARK_IGNORED_SURV_MODIFY" },
+#if XLAT_RAW
+			"0x40"
+#elif XLAT_VERBOSE
+			"0x40 /* FAN_MARK_IGNORED_SURV_MODIFY */"
+#else
+			"FAN_MARK_IGNORED_SURV_MODIFY"
+#endif
+			},
 		{ (kernel_ulong_t) 0xbadc0deddeadfeedULL,
+#if XLAT_RAW || XLAT_VERBOSE
+			"0xdeadfeed"
+#endif
+#if XLAT_VERBOSE
+			" /* "
+#endif
+#if !XLAT_RAW
 			"FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR|"
 			"FAN_MARK_IGNORED_MASK|FAN_MARK_IGNORED_SURV_MODIFY|"
-			"FAN_MARK_FLUSH|0xdeadfe00" },
+			"FAN_MARK_FLUSH|0xdeadfe00"
+#endif
+#if XLAT_VERBOSE
+			" */"
+#endif
+			},
 	};
 	static const struct strval64 masks[] = {
 		{ ARG_ULL_STR(0) },
 		{ 0xdeadfeedfacebeefULL,
+#if XLAT_RAW || XLAT_VERBOSE
+			"0xdeadfeedfacebeef"
+#endif
+#if XLAT_VERBOSE
+			" /* "
+#endif
+#if !XLAT_RAW
 			"FAN_ACCESS|FAN_MODIFY|FAN_CLOSE_WRITE|FAN_OPEN|"
 			"FAN_ACCESS_PERM|FAN_ONDIR|FAN_EVENT_ON_CHILD|"
-			"0xdeadfeedb2ccbec4" },
-		{ ARG_ULL_STR(0xffffffffb7fcbfc4) " /* FAN_??? */" },
+			"0xdeadfeedb2ccbec4"
+#endif
+#if XLAT_VERBOSE
+			" */"
+#endif
+			},
+		{ ARG_ULL_STR(0xffffffffb7fcbfc4)
+#if !XLAT_RAW
+			" /* FAN_??? */"
+#endif
+			},
 	};
 	static const struct strval dirfds[] = {
 		{ (kernel_ulong_t) 0xfacefeed00000001ULL, "1" },
-		{ (kernel_ulong_t) 0xdec0ded0ffffffffULL, "FAN_NOFD" },
-		{ (kernel_ulong_t) 0xbadfacedffffff9cULL, "AT_FDCWD" },
+		{ (kernel_ulong_t) 0xdec0ded0ffffffffULL,
+#if XLAT_RAW
+			"-1"
+#elif XLAT_VERBOSE
+			"-1 /* FAN_NOFD */"
+#else
+			"FAN_NOFD"
+#endif
+			},
+		{ (kernel_ulong_t) 0xbadfacedffffff9cULL, str_at_fdcwd },
 		{ (kernel_ulong_t) 0xdefaced1beeff00dULL, "-1091571699" },
 	};
 	static const char str64[] = STR64;
@@ -149,8 +210,9 @@
 
 	rc = fanotify_mark(-1, FAN_MARK_ADD, FAN_MODIFY | FAN_ONDIR,
 			       -100, ".");
-	printf("fanotify_mark(-1, FAN_MARK_ADD, FAN_MODIFY|FAN_ONDIR"
-	       ", AT_FDCWD, \".\") = %s\n", sprintrc(rc));
+	printf("fanotify_mark(-1, %s, %s, %s, \".\") = %s\n",
+	       str_fan_mark_add, str_fan_modify_ondir, str_at_fdcwd,
+	       sprintrc(rc));
 
 	for (i = 0; i < ARRAY_SIZE(fds); i++) {
 		for (j = 0; j < ARRAY_SIZE(flags); j++) {
diff --git a/tests-mx32/fcntl-common.c b/tests-mx32/fcntl-common.c
new file mode 100644
index 0000000..a35a837
--- /dev/null
+++ b/tests-mx32/fcntl-common.c
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "flock.h"
+
+#define FILE_LEN 4096
+
+#define TEST_FLOCK_EINVAL(cmd) test_flock_einval(cmd, #cmd)
+#define TEST_FLOCK64_EINVAL(cmd) test_flock64_einval(cmd, #cmd)
+
+#ifdef HAVE_TYPEOF
+# define TYPEOF_FLOCK_OFF_T typeof(((struct_kernel_flock *) NULL)->l_len)
+#else
+# define TYPEOF_FLOCK_OFF_T off_t
+#endif
+
+static const char *errstr;
+
+static long
+invoke_test_syscall(const unsigned int fd, const unsigned int cmd, void *const p)
+{
+	const kernel_ulong_t kfd = F8ILL_KULONG_MASK | fd;
+	const kernel_ulong_t op = F8ILL_KULONG_MASK | cmd;
+
+	long rc = syscall(TEST_SYSCALL_NR, kfd, op, (uintptr_t) p);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static void
+test_flock_einval(const int cmd, const char *name)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeedULL;
+	fl->l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00dULL;
+
+	invoke_test_syscall(0, cmd, fl);
+	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
+	       (intmax_t) fl->l_start, (intmax_t) fl->l_len, errstr);
+
+	void *const bad_addr = (void *) fl + 1;
+	invoke_test_syscall(0, cmd, bad_addr);
+	printf("%s(0, %s, %p) = %s\n",
+	       TEST_SYSCALL_STR, name, bad_addr, errstr);
+}
+
+/*
+ * This function is not declared static to avoid potential
+ * "defined but not used" warning when included by fcntl.c
+ */
+void
+test_flock64_einval(const int cmd, const char *name)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock64, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeedULL;
+	fl->l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00dULL;
+
+	invoke_test_syscall(0, cmd, fl);
+	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
+	       (intmax_t) fl->l_start, (intmax_t) fl->l_len, errstr);
+
+	void *const bad_addr = (void *) fl + 1;
+	invoke_test_syscall(0, cmd, bad_addr);
+	printf("%s(0, %s, %p) = %s\n",
+	       TEST_SYSCALL_STR, name, bad_addr, errstr);
+}
+
+static void
+test_flock(void)
+{
+	TEST_FLOCK_EINVAL(F_SETLK);
+	TEST_FLOCK_EINVAL(F_SETLKW);
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_len = FILE_LEN;
+
+	long rc = invoke_test_syscall(0, F_SETLK, fl);
+	printf("%s(0, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = %s\n",
+	       TEST_SYSCALL_STR, FILE_LEN, errstr);
+	if (rc)
+		return;
+
+	invoke_test_syscall(0, F_GETLK, fl);
+	printf("%s(0, F_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+
+	invoke_test_syscall(0, F_SETLKW, fl);
+	printf("%s(0, F_SETLKW, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+}
+
+static void
+test_flock64_ofd(void)
+{
+#if defined F_OFD_GETLK && defined F_OFD_SETLK && defined F_OFD_SETLKW
+	TEST_FLOCK64_EINVAL(F_OFD_SETLK);
+	TEST_FLOCK64_EINVAL(F_OFD_SETLKW);
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock64, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_len = FILE_LEN;
+
+	long rc = invoke_test_syscall(0, F_OFD_SETLK, fl);
+	printf("%s(0, F_OFD_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = %s\n",
+	       TEST_SYSCALL_STR, FILE_LEN, errstr);
+	if (rc)
+		return;
+
+	invoke_test_syscall(0, F_OFD_GETLK, fl);
+	printf("%s(0, F_OFD_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+
+	invoke_test_syscall(0, F_OFD_SETLKW, fl);
+	printf("%s(0, F_OFD_SETLKW, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+#endif /* F_OFD_GETLK && F_OFD_SETLK && F_OFD_SETLKW */
+}
+
+static void test_flock64_lk64(void);
+
+static void
+test_flock64(void)
+{
+	test_flock64_ofd();
+	test_flock64_lk64();
+}
+
+/*
+ * F_[GS]ETOWN_EX had conflicting values with F_[SG]ETLK64
+ * in kernel revisions v2.6.32-rc1~96..v2.6.32-rc7~23.
+ */
+#undef TEST_F_OWNER_EX
+#if defined F_GETOWN_EX && defined F_SETOWN_EX \
+ && (F_GETOWN_EX != F_SETLK64) && (F_SETOWN_EX != F_GETLK64)
+# define TEST_F_OWNER_EX
+#endif
+
+#ifdef TEST_F_OWNER_EX
+# include "f_owner_ex.h"
+
+static long
+test_f_owner_ex_type_pid(const int cmd, const char *const cmd_name,
+			 const int type, const char *const type_name,
+			 pid_t pid)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_f_owner_ex, fo);
+
+	fo->type = type;
+	fo->pid = pid;
+	long rc = invoke_test_syscall(0, cmd, fo);
+	printf("%s(0, %s, {type=%s, pid=%d}) = %s\n",
+	       TEST_SYSCALL_STR, cmd_name, type_name, fo->pid, errstr);
+
+	void *bad_addr = (void *) fo + 1;
+	invoke_test_syscall(0, cmd, bad_addr);
+	printf("%s(0, %s, %p) = %s\n",
+	       TEST_SYSCALL_STR, cmd_name, bad_addr, errstr);
+
+	return rc;
+}
+
+static void
+test_f_owner_ex_umove_or_printaddr(const int type, const char *const type_name,
+				   pid_t pid)
+{
+	long rc = test_f_owner_ex_type_pid(ARG_STR(F_SETOWN_EX),
+					   type, type_name, pid);
+	if (!rc)
+		test_f_owner_ex_type_pid(ARG_STR(F_GETOWN_EX),
+					 type, type_name, pid);
+}
+
+static void
+test_f_owner_ex(void)
+{
+	static const struct {
+		int type;
+		const char *type_name;
+		pid_t pid[2];
+	} a[] = {
+		{ ARG_STR(F_OWNER_TID), { 1234567890, 20 } },
+		{ ARG_STR(F_OWNER_PID), { 1298126790, 30 } },
+		{ ARG_STR(F_OWNER_PGRP), { 1294567890, 40 } }
+	};
+
+	for (unsigned int i = 0; i < ARRAY_SIZE(a); i++) {
+		for (unsigned int j = 0; j < ARRAY_SIZE(a[0].pid); j++) {
+			test_f_owner_ex_umove_or_printaddr(a[i].type,
+							   a[i].type_name,
+							   a[i].pid[j]);
+		}
+	}
+}
+#endif /* TEST_F_OWNER_EX */
+
+static void
+create_sample(void)
+{
+	char fname[] = TEST_SYSCALL_STR "_XXXXXX";
+
+	(void) close(0);
+	if (mkstemp(fname))
+		perror_msg_and_fail("mkstemp: %s", fname);
+	if (unlink(fname))
+		perror_msg_and_fail("unlink: %s", fname);
+	if (ftruncate(0, FILE_LEN))
+		perror_msg_and_fail("ftruncate");
+}
+
+int
+main(void)
+{
+	create_sample();
+	test_flock();
+	test_flock64();
+#ifdef TEST_F_OWNER_EX
+	test_f_owner_ex();
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/fcntl.c b/tests-mx32/fcntl.c
index 4f62ca2..7539f19 100644
--- a/tests-mx32/fcntl.c
+++ b/tests-mx32/fcntl.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,51 +33,40 @@
 
 # define TEST_SYSCALL_NR __NR_fcntl
 # define TEST_SYSCALL_STR "fcntl"
-# include "struct_flock.c"
-
-# define TEST_FLOCK64_EINVAL(cmd) test_flock64_einval(cmd, #cmd)
+# include "fcntl-common.c"
 
 static void
-test_flock64_einval(const int cmd, const char *name)
+test_flock64_undecoded(const int cmd, const char *name)
 {
 	struct_kernel_flock64 fl = {
 		.l_type = F_RDLCK,
 		.l_start = 0xdefaced1facefeedULL,
 		.l_len = 0xdefaced2cafef00dULL
 	};
-	long rc = invoke_test_syscall(cmd, &fl);
+	invoke_test_syscall(0, cmd, &fl);
 	printf("%s(0, %s, %p) = %s\n",
-	       TEST_SYSCALL_STR, name, &fl, sprintrc(rc));
+	       TEST_SYSCALL_STR, name, &fl, errstr);
 }
 
+#define TEST_FLOCK64_UNDECODED(cmd) test_flock64_undecoded(cmd, #cmd)
+
 static void
-test_flock64(void)
+test_flock64_lk64(void)
 {
 /*
  * F_[GS]ETOWN_EX had conflicting values with F_[GS]ETLK64
  * in kernel revisions v2.6.32-rc1~96..v2.6.32-rc7~23.
  */
-#if !defined(F_GETOWN_EX) || F_GETOWN_EX != F_SETLK64
-	TEST_FLOCK64_EINVAL(F_SETLK64);
-#endif
+# if !defined(F_GETOWN_EX) || F_GETOWN_EX != F_SETLK64
+	TEST_FLOCK64_UNDECODED(F_SETLK64);
+# endif
 /* F_GETLK and F_SETLKW64 have conflicting values on mips64 */
-#if !defined(__mips64) || F_GETLK != F_SETLKW64
-	TEST_FLOCK64_EINVAL(F_SETLKW64);
-#endif
-#if !defined(F_SETOWN_EX) || F_SETOWN_EX != F_GETLK64
-	TEST_FLOCK64_EINVAL(F_GETLK64);
-#endif
-}
-
-int
-main(void)
-{
-	create_sample();
-	test_flock();
-	test_flock64();
-
-	puts("+++ exited with 0 +++");
-	return 0;
+# if !defined(__mips64) || F_GETLK != F_SETLKW64
+	TEST_FLOCK64_UNDECODED(F_SETLKW64);
+# endif
+# if !defined(F_SETOWN_EX) || F_SETOWN_EX != F_GETLK64
+	TEST_FLOCK64_UNDECODED(F_GETLK64);
+# endif
 }
 
 #else
diff --git a/tests-mx32/fcntl64.c b/tests-mx32/fcntl64.c
index 068956e..f65f7cb 100644
--- a/tests-mx32/fcntl64.c
+++ b/tests-mx32/fcntl64.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,68 +33,38 @@
 
 # define TEST_SYSCALL_NR __NR_fcntl64
 # define TEST_SYSCALL_STR "fcntl64"
-# include "struct_flock.c"
-
-# define TEST_FLOCK64_EINVAL(cmd) test_flock64_einval(cmd, #cmd)
+# include "fcntl-common.c"
 
 static void
-test_flock64_einval(const int cmd, const char *name)
-{
-	struct_kernel_flock64 fl = {
-		.l_type = F_RDLCK,
-		.l_start = 0xdefaced1facefeedULL,
-		.l_len = 0xdefaced2cafef00dULL
-	};
-	long rc = invoke_test_syscall(cmd, &fl);
-	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
-	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
-	       (intmax_t) fl.l_start, (intmax_t) fl.l_len, sprintrc(rc));
-}
-
-static void
-test_flock64(void)
+test_flock64_lk64(void)
 {
 	TEST_FLOCK64_EINVAL(F_SETLK64);
 	TEST_FLOCK64_EINVAL(F_SETLKW64);
-# ifdef F_OFD_SETLK
-	TEST_FLOCK64_EINVAL(F_OFD_SETLK);
-	TEST_FLOCK64_EINVAL(F_OFD_SETLKW);
-# endif
 
-	struct_kernel_flock64 fl = {
-		.l_type = F_RDLCK,
-		.l_len = FILE_LEN
-	};
-	long rc = invoke_test_syscall(F_SETLK64, &fl);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock64, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_len = FILE_LEN;
+
+	long rc = invoke_test_syscall(0, F_SETLK64, fl);
 	printf("%s(0, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET"
 	       ", l_start=0, l_len=%d}) = %s\n",
-	       TEST_SYSCALL_STR, FILE_LEN, sprintrc(rc));
+	       TEST_SYSCALL_STR, FILE_LEN, errstr);
 
 	if (rc)
 		return;
 
-	invoke_test_syscall(F_GETLK64, &fl);
+	invoke_test_syscall(0, F_GETLK64, fl);
 	printf("%s(0, F_GETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET"
 	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
 	       TEST_SYSCALL_STR, FILE_LEN);
 
-	invoke_test_syscall(F_SETLK64, &fl);
-	printf("%s(0, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	invoke_test_syscall(0, F_SETLKW64, fl);
+	printf("%s(0, F_SETLKW64, {l_type=F_UNLCK, l_whence=SEEK_SET"
 	       ", l_start=0, l_len=%d}) = 0\n",
 	       TEST_SYSCALL_STR, FILE_LEN);
 }
 
-int
-main(void)
-{
-	create_sample();
-	test_flock();
-	test_flock64();
-
-	puts("+++ exited with 0 +++");
-	return 0;
-}
-
 #else
 
 SKIP_MAIN_UNDEFINED("__NR_fcntl64")
diff --git a/tests-mx32/gen_tests.am b/tests-mx32/gen_tests.am
index 2cd76bc..5db8375 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 _newselect-P.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 dev-yy.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 fsync-y.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_dm.gen.test ioctl_dm-v.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_kvm_run.gen.test ioctl_loop.gen.test ioctl_loop-nv.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_nsfs.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_sock_gifconf.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 kcmp-y.gen.test kern_features.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 modify_ldt.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 net-yy-inet6.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 nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test nfnetlink_osf.gen.test nfnetlink_queue.gen.test nfnetlink_ulog.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_mdba_mdb_entry.gen.test nlattr_mdba_router_port.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_tc_stats.gen.test nlattr_tca_stab.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test oldselect-efault.gen.test oldselect-efault-P.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-P.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 riscv_flush_icache.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 s390_guarded_storage.gen.test s390_guarded_storage-v.gen.test s390_pci_mmio_read_write.gen.test s390_runtime_instr.gen.test s390_sthyi.gen.test s390_sthyi-v.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 seccomp_get_action_avail.gen.test select.gen.test select-P.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 sockopt-sol_netlink.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 _newselect-P.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test aio_pgetevents.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test bpf-obj_get_info_by_fd.gen.test bpf-obj_get_info_by_fd-v.gen.test bpf-obj_get_info_by_fd-prog.gen.test bpf-obj_get_info_by_fd-prog-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 dev-yy.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 fanotify_mark-Xabbrev.gen.test fanotify_mark-Xraw.gen.test fanotify_mark-Xverbose.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 fsync-y.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_dm.gen.test ioctl_dm-v.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_inotify.gen.test ioctl_kvm_run.gen.test ioctl_loop.gen.test ioctl_loop-nv.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_perf.gen.test ioctl_ptp.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_sock_gifconf.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_msg-Xabbrev.gen.test ipc_msg-Xraw.gen.test ipc_msg-Xverbose.gen.test ipc_msgbuf-Xabbrev.gen.test ipc_msgbuf-Xraw.gen.test ipc_msgbuf-Xverbose.gen.test ipc_sem.gen.test ipc_sem-Xabbrev.gen.test ipc_sem-Xraw.gen.test ipc_sem-Xverbose.gen.test ipc_shm.gen.test ipc_shm-Xabbrev.gen.test ipc_shm-Xraw.gen.test ipc_shm-Xverbose.gen.test kcmp.gen.test kcmp-y.gen.test kern_features.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test keyctl-Xabbrev.gen.test keyctl-Xraw.gen.test keyctl-Xverbose.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 mmap-Xabbrev.gen.test mmap-Xraw.gen.test mmap-Xverbose.gen.test mmap64.gen.test mmap64-Xabbrev.gen.test mmap64-Xraw.gen.test mmap64-Xverbose.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test modify_ldt.gen.test mount.gen.test mount-Xabbrev.gen.test mount-Xraw.gen.test mount-Xverbose.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 net-yy-inet6.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 nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test nfnetlink_osf.gen.test nfnetlink_queue.gen.test nfnetlink_ulog.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_af_spec.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_linkinfo.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_mdba_mdb_entry.gen.test nlattr_mdba_router_port.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_tc_stats.gen.test nlattr_tca_stab.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test old_mmap-P.gen.test old_mmap-v-none.gen.test old_mmap-Xabbrev.gen.test old_mmap-Xraw.gen.test old_mmap-Xverbose.gen.test oldfstat.gen.test oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test oldselect-efault.gen.test oldselect-efault-P.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 personality-Xabbrev.gen.test personality-Xraw.gen.test personality-Xverbose.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-P.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 riscv_flush_icache.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 s390_guarded_storage.gen.test s390_guarded_storage-v.gen.test s390_pci_mmio_read_write.gen.test s390_runtime_instr.gen.test s390_sthyi.gen.test s390_sthyi-v.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 seccomp_get_action_avail.gen.test select.gen.test select-P.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 so_peercred-Xabbrev.gen.test so_peercred-Xraw.gen.test so_peercred-Xverbose.gen.test sock_filter-v.gen.test sock_filter-v-Xabbrev.gen.test sock_filter-v-Xraw.gen.test sock_filter-v-Xverbose.gen.test socketcall.gen.test sockopt-sol_netlink.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_personality_32.gen.test trace_personality_64.gen.test trace_personality_x32.gen.test trace_personality_regex_32.gen.test trace_personality_regex_64.gen.test trace_personality_regex_x32.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) $^ $@
@@ -28,6 +28,9 @@
 $(srcdir)/aio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/aio_pgetevents.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/alarm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -37,6 +40,18 @@
 $(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-obj_get_info_by_fd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog-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) $^ $@
 
@@ -124,6 +139,15 @@
 $(srcdir)/fanotify_mark.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/fanotify_mark-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/fchdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -316,6 +340,9 @@
 $(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_inotify.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -334,6 +361,12 @@
 $(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_perf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_ptp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -376,12 +409,48 @@
 $(srcdir)/ipc_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_msg-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_sem.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_sem-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_shm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_shm-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -400,6 +469,15 @@
 $(srcdir)/keyctl.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/keyctl-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kill.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -463,9 +541,27 @@
 $(srcdir)/mlockall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmap64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap64-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -484,6 +580,15 @@
 $(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mount-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/move_pages.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -610,9 +715,15 @@
 $(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_ifla_af_spec.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_linkinfo.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) $^ $@
 
@@ -685,6 +796,15 @@
 $(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/old_mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -727,6 +847,15 @@
 $(srcdir)/perf_event_open_unabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/personality-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/pipe2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -1057,9 +1186,27 @@
 $(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_peercred-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xverbose.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)/sock_filter-v-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xverbose.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) $^ $@
 
@@ -1141,6 +1288,24 @@
 $(srcdir)/trace_lstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/trace_personality_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/trace_question.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 a95ff3e..24e0510 100644
--- a/tests-mx32/gen_tests.in
+++ b/tests-mx32/gen_tests.in
@@ -34,9 +34,14 @@
 add_key	-a30 -s12
 adjtimex	-a15
 aio	-a14 -e trace=io_setup,io_submit,io_getevents,io_cancel,io_destroy
+aio_pgetevents	-e trace=io_pgetevents
 alarm	-a10
 bpf	-a20
 bpf-v	-a20 -v -e trace=bpf
+bpf-obj_get_info_by_fd	-a20 -y -e trace=bpf
+bpf-obj_get_info_by_fd-v	-a20 -y -v -e trace=bpf
+bpf-obj_get_info_by_fd-prog	-a20 -y -e trace=bpf
+bpf-obj_get_info_by_fd-prog-v	-a20 -y -v -e trace=bpf
 btrfs	+ioctl.test
 chmod	-a28
 chown	-a28
@@ -66,6 +71,9 @@
 fallocate	-a18
 fanotify_init
 fanotify_mark	-a32
+fanotify_mark-Xabbrev	-a32 -Xabbrev -e trace=fanotify_mark
+fanotify_mark-Xraw	-a32 -Xraw -e trace=fanotify_mark
+fanotify_mark-Xverbose	-a32 -Xverbose -e trace=fanotify_mark
 fchdir	-a11
 fchmod	-a15
 fchmodat
@@ -130,12 +138,15 @@
 ioctl_dm-v	+ioctl.test -v -s9
 ioctl_evdev	+ioctl.test
 ioctl_evdev-v	+ioctl.test -v
+ioctl_inotify	+ioctl.test
 ioctl_kvm_run	+ioctl.test -a36 -y
 ioctl_loop	+ioctl.test
 ioctl_loop-nv	+ioctl.test -a22 -e verbose=none
 ioctl_loop-v	+ioctl.test -v
 ioctl_mtd	+ioctl.test
 ioctl_nsfs	+ioctl.test -esignal=none
+ioctl_perf	+ioctl.test
+ioctl_ptp 	+ioctl.test
 ioctl_rtc	+ioctl.test
 ioctl_rtc-v	+ioctl.test -v
 ioctl_scsi	+ioctl.test
@@ -149,15 +160,30 @@
 ioprio	-a18 -e trace=ioprio_get,ioprio_set
 ip_mreq	-e trace=setsockopt
 ipc	-a19
-ipc_msg	+ipc.sh
-ipc_sem	+ipc.sh
-ipc_shm	+ipc.sh
+ipc_msg	+ipc.sh -a26
+ipc_msg-Xabbrev	+ipc.sh -Xabbrev -a26
+ipc_msg-Xraw	+ipc.sh -Xraw -a16
+ipc_msg-Xverbose	+ipc.sh -Xverbose -a34
+ipc_msgbuf-Xabbrev	+ipc_msgbuf.test -Xabbrev
+ipc_msgbuf-Xraw	+ipc_msgbuf.test -Xraw -a22
+ipc_msgbuf-Xverbose	+ipc_msgbuf.test -Xverbose
+ipc_sem	+ipc.sh -a29
+ipc_sem-Xabbrev	+ipc.sh -Xabbrev -a29
+ipc_sem-Xraw	+ipc.sh -Xraw -a19
+ipc_sem-Xverbose	+ipc.sh -Xverbose -a36
+ipc_shm	+ipc.sh -a29
+ipc_shm-Xabbrev	+ipc.sh -Xabbrev -a29
+ipc_shm-Xraw	+ipc.sh -Xraw -a19
+ipc_shm-Xverbose	+ipc.sh -Xverbose -a36
 kcmp	-a22
 kcmp-y	-a22 -y -e trace=kcmp
 kern_features -a16
 kexec_file_load	-s9
 kexec_load	-s9
 keyctl	-a31 -s10
+keyctl-Xabbrev	-a31 -s10 -e trace=keyctl -Xabbrev
+keyctl-Xraw	-a13 -s10 -e trace=keyctl -Xraw
+keyctl-Xverbose	-a41 -s10 -e trace=keyctl -Xverbose
 kill	-a12 -esignal=none
 lchown	-a30
 lchown32	-a32
@@ -179,13 +205,22 @@
 mlock	-a20 -e trace=mlock,munlock
 mlock2
 mlockall	-a12
+mmap-Xabbrev	+mmap.test abbrev
+mmap-Xraw	+mmap.test raw 14
+mmap-Xverbose	+mmap.test verbose
 mmap64	+mmap.test
+mmap64-Xabbrev	+mmap.test abbrev
+mmap64-Xraw	+mmap.test raw 14
+mmap64-Xverbose	+mmap.test verbose
 mmsg	-e read=0 -e write=1 -e trace=recvmmsg,sendmmsg
 mmsg-silent	-a25 -e verbose=none -e trace=sendmmsg,recvmmsg
 mmsg_name	-a25 -e trace=sendmmsg,recvmmsg
 mmsg_name-v	-v -a25 -e trace=sendmmsg,recvmmsg
 modify_ldt	-a23
-mount
+mount		-a33
+mount-Xabbrev	-a33 -e trace=mount -Xabbrev
+mount-Xraw	-a33 -e trace=mount -Xraw
+mount-Xverbose	-a33 -e trace=mount -Xverbose
 move_pages	-s3
 mq	-a32 -e trace=mq_getsetattr,mq_open,mq_unlink
 mq_sendrecv	-a14 -e trace=mq_open,mq_notify,mq_timedsend,mq_timedreceive,mq_unlink
@@ -228,7 +263,9 @@
 nlattr_ifaddrlblmsg		+netlink_sock_diag.test
 nlattr_ifaddrmsg		+netlink_sock_diag.test
 nlattr_ifinfomsg		+netlink_sock_diag.test
+nlattr_ifla_af_spec		+netlink_sock_diag.test
 nlattr_ifla_brport		+netlink_sock_diag.test
+nlattr_ifla_linkinfo		+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
@@ -253,6 +290,9 @@
 old_mmap	-a11 -e trace=mmap
 old_mmap-P	-e trace=mmap -P "/dev/full" 9>>/dev/full
 old_mmap-v-none	-a11 -e trace=mmap -e verbose=none
+old_mmap-Xabbrev	-a11 -e trace=mmap -Xabbrev
+old_mmap-Xraw	-a11 -e trace=mmap -Xraw
+old_mmap-Xverbose	-a11 -e trace=mmap -Xverbose
 oldfstat	-a18 -v -P stat.sample
 oldlstat	-a32 -v -P stat.sample -P /dev/full
 oldselect	-a13 -e trace=select
@@ -267,6 +307,9 @@
 perf_event_open	-a1
 perf_event_open_nonverbose	-a34 -e verbose=none -e trace=perf_event_open
 perf_event_open_unabbrev	-a1 -v -e trace=perf_event_open
+personality-Xabbrev	+personality.test -Xabbrev
+personality-Xraw	+personality.test -a15 -Xraw
+personality-Xverbose	+personality.test -Xverbose
 pipe2	-a15
 pkey_alloc	-a17
 pkey_free	-a13
@@ -322,7 +365,7 @@
 s390_guarded_storage	-a32
 s390_guarded_storage-v	-e trace=s390_guarded_storage -a32 -v
 s390_pci_mmio_read_write	-e trace=s390_pci_mmio_read,s390_pci_mmio_write -a30
-s390_runtime_instr	-a50
+s390_runtime_instr	-a44
 s390_sthyi	-a47
 s390_sthyi-v	-e trace=s390_sthyi -a47 -v
 sched	test_trace_expr times -e/sched
@@ -377,7 +420,13 @@
 sigsuspend	-a19 -esignal=none
 so_linger	-e trace=getsockopt,setsockopt
 so_peercred	-e trace=getsockopt
+so_peercred-Xabbrev	-e trace=getsockopt -Xabbrev
+so_peercred-Xraw	-e trace=getsockopt -Xraw -a39
+so_peercred-Xverbose	-e trace=getsockopt -Xverbose
 sock_filter-v	-v -e trace=getsockopt,setsockopt
+sock_filter-v-Xabbrev	-v -e trace=getsockopt,setsockopt -X abbrev
+sock_filter-v-Xraw	-a 37 -v -e trace=getsockopt,setsockopt -X raw
+sock_filter-v-Xverbose	-v -e trace=getsockopt,setsockopt -X verbose
 socketcall	-a20
 sockopt-sol_netlink	-e trace=getsockopt,setsockopt
 splice
@@ -405,6 +454,12 @@
 trace_fstat	test_trace_expr '' -e%fstat -v -P stat.sample -P /dev/full
 trace_fstatfs	test_trace_expr '' -e%fstatfs
 trace_lstat	test_trace_expr '' -e%lstat -v -P stat.sample -P /dev/full
+trace_personality_32	+qualify_personality.sh 32 'getcwd' 'fsync-y'
+trace_personality_64	+qualify_personality.sh 64 'getcwd' 'fsync-y'
+trace_personality_x32	+qualify_personality.sh x32 'getcwd' 'fsync-y'
+trace_personality_regex_32	+qualify_personality.sh 32 '/clock.*' 'times|fcntl.*'
+trace_personality_regex_64	+qualify_personality.sh 64 '/clock.*' 'times|fcntl.*'
+trace_personality_regex_x32	+qualify_personality.sh x32 '/clock.*' 'times|fcntl.*'
 trace_question	test_trace_expr '' -e?osf_utimes,?/^pkey_.*
 trace_stat	test_trace_expr '' -e%stat -v -P stat.sample -P /dev/full
 trace_stat_like	test_trace_expr '' -e%%stat -v -P stat.sample -P /dev/full
diff --git a/tests-mx32/init.sh b/tests-mx32/init.sh
index dffbfce..8861b70 100644
--- a/tests-mx32/init.sh
+++ b/tests-mx32/init.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 #
 # Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2011-2017 The strace developers.
+# Copyright (c) 2011-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -230,6 +230,17 @@
 	match_diff "$LOG" "$EXP"
 }
 
+# Usage: run_strace_match_grep [args to run_strace]
+run_strace_match_grep()
+{
+	args="$*"
+	[ -n "$args" -a -z "${args##*-e trace=*}" ] ||
+		set -- -e trace="$NAME" "$@"
+	run_prog > /dev/null
+	run_strace "$@" $args > "$EXP"
+	match_grep "$LOG" "$EXP"
+}
+
 # Print kernel version code.
 # usage: kernel_version_code $(uname -r)
 kernel_version_code()
diff --git a/tests-mx32/ioctl_evdev.c b/tests-mx32/ioctl_evdev.c
index 9d16cec..5eacac0 100644
--- a/tests-mx32/ioctl_evdev.c
+++ b/tests-mx32/ioctl_evdev.c
@@ -2,7 +2,7 @@
  * This file is part of ioctl_evdev strace test.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -39,6 +39,13 @@
 # include <sys/ioctl.h>
 # include <linux/input.h>
 
+# ifndef EV_SW
+#  define EV_SW 5
+# endif
+# ifndef ABS_MT_TOOL_Y
+#  define ABS_MT_TOOL_Y 0x3d
+# endif
+
 static const unsigned int magic = 0xdeadbeef;
 static const unsigned long lmagic = (unsigned long) 0xdeadbeefbadc0dedULL;
 
@@ -67,12 +74,14 @@
 # endif /* VERBOSE */
 }
 
-# define TEST_NULL_ARG(cmd)						\
+# define TEST_NULL_ARG_EX(cmd, str)						\
 	do {								\
 		ioctl(-1, cmd, 0);					\
-		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", #cmd);	\
+		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", str);	\
 	} while (0)
 
+# define TEST_NULL_ARG(cmd) TEST_NULL_ARG_EX(cmd, #cmd)
+
 int
 main(void)
 {
@@ -117,14 +126,24 @@
 	TEST_NULL_ARG(EVIOCGABS(ABS_X));
 	TEST_NULL_ARG(EVIOCSABS(ABS_X));
 
+	TEST_NULL_ARG_EX(EVIOCGABS(0xe), "EVIOCGABS(0xe /* ABS_??? */)");
+	TEST_NULL_ARG_EX(EVIOCSABS(0xe), "EVIOCSABS(0xe /* ABS_??? */)");
+
+	TEST_NULL_ARG(EVIOCGABS(ABS_MT_TOOL_Y));
+	TEST_NULL_ARG(EVIOCSABS(ABS_MT_TOOL_Y));
+
+	TEST_NULL_ARG_EX(EVIOCGABS(0x3e), "EVIOCGABS(0x3e /* ABS_??? */)");
+	TEST_NULL_ARG_EX(EVIOCSABS(0x3e), "EVIOCSABS(0x3e /* ABS_??? */)");
+
+	TEST_NULL_ARG_EX(EVIOCGABS(0x3f), "EVIOCGABS(0x3f /* ABS_??? */)");
+	TEST_NULL_ARG_EX(EVIOCSABS(0x3f), "EVIOCSABS(0x3f /* ABS_??? */)");
+
 	TEST_NULL_ARG(EVIOCGBIT(EV_SYN, 0));
 	TEST_NULL_ARG(EVIOCGBIT(EV_KEY, 1));
 	TEST_NULL_ARG(EVIOCGBIT(EV_REL, 2));
 	TEST_NULL_ARG(EVIOCGBIT(EV_ABS, 3));
 	TEST_NULL_ARG(EVIOCGBIT(EV_MSC, 4));
-# ifdef EV_SW
 	TEST_NULL_ARG(EVIOCGBIT(EV_SW, 5));
-# endif
 	TEST_NULL_ARG(EVIOCGBIT(EV_LED, 6));
 	TEST_NULL_ARG(EVIOCGBIT(EV_SND, 7));
 	TEST_NULL_ARG(EVIOCGBIT(EV_REP, 8));
@@ -132,6 +151,12 @@
 	TEST_NULL_ARG(EVIOCGBIT(EV_PWR, 10));
 	TEST_NULL_ARG(EVIOCGBIT(EV_FF_STATUS, 11));
 
+	TEST_NULL_ARG_EX(EVIOCGBIT(0x6, 12), "EVIOCGBIT(0x6 /* EV_??? */, 12)");
+	TEST_NULL_ARG_EX(EVIOCGBIT(0x18, 13),
+			 "EVIOCGBIT(0x18 /* EV_??? */, 13)");
+	TEST_NULL_ARG_EX(EVIOCGBIT(0x1f, 14),
+			 "EVIOCGBIT(0x1f /* EV_??? */, 14)");
+
 	ioctl(-1, EVIOCGBIT(EV_MAX, 42), 0);
 	printf("ioctl(-1, EVIOCGBIT(%#x /* EV_??? */, 42), NULL)"
 	       " = -1 EBADF (%m)\n", EV_MAX);
diff --git a/tests-mx32/ioctl_inotify.c b/tests-mx32/ioctl_inotify.c
new file mode 100644
index 0000000..0650c62
--- /dev/null
+++ b/tests-mx32/ioctl_inotify.c
@@ -0,0 +1,81 @@
+/*
+ * This file is part of ioctl_inotify strace test.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <inttypes.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <asm/unistd.h>
+#include <linux/ioctl.h>
+
+#ifndef INOTIFY_IOC_SETNEXTWD
+# define INOTIFY_IOC_SETNEXTWD  _IOW('I', 0, int32_t)
+#endif
+
+static long
+sys_ioctl(kernel_long_t fd, kernel_ulong_t cmd, kernel_ulong_t arg)
+{
+	return syscall(__NR_ioctl, fd, cmd, arg);
+}
+
+int
+main(void)
+{
+	static const kernel_ulong_t unknown_inotify_cmd =
+		(kernel_ulong_t) 0xbadc0dedfeed49edULL;
+	static const kernel_ulong_t magic =
+		(kernel_ulong_t) 0xdeadbeefbadc0dedULL;
+
+	/* Unknown inotify commands */
+	sys_ioctl(-1, unknown_inotify_cmd, magic);
+	printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x49, %#x, %#x), "
+	       "%#lx) = -1 EBADF (%m)\n",
+	       _IOC_DIR((unsigned int) unknown_inotify_cmd) & _IOC_NONE ?
+	       "|_IOC_NONE" : "",
+	       _IOC_NR((unsigned int) unknown_inotify_cmd),
+	       _IOC_SIZE((unsigned int) unknown_inotify_cmd),
+	       (unsigned long) magic);
+
+	sys_ioctl(-1, INOTIFY_IOC_SETNEXTWD + 1, magic);
+	printf("ioctl(-1, _IOC(_IOC_WRITE, 0x49, %#x, %#x), %#lx)"
+	       " = -1 EBADF (%m)\n",
+	       (unsigned int) _IOC_NR(INOTIFY_IOC_SETNEXTWD + 1),
+	       (unsigned int) _IOC_SIZE(INOTIFY_IOC_SETNEXTWD + 1),
+	       (unsigned long) magic);
+
+	/* INOTIFY_IOC_SETNEXTWD */
+	sys_ioctl(-1, INOTIFY_IOC_SETNEXTWD, magic);
+	printf("ioctl(-1, INOTIFY_IOC_SETNEXTWD, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/ioctl_inotify.gen.test b/tests-mx32/ioctl_inotify.gen.test
new file mode 100755
index 0000000..237a98b
--- /dev/null
+++ b/tests-mx32/ioctl_inotify.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_inotify +ioctl.test ); do not edit.
+set -- 
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_kvm_run.c b/tests-mx32/ioctl_kvm_run.c
index 1794614..e1bef57 100644
--- a/tests-mx32/ioctl_kvm_run.c
+++ b/tests-mx32/ioctl_kvm_run.c
@@ -40,6 +40,7 @@
 # include <string.h>
 # include <sys/ioctl.h>
 # include <sys/mman.h>
+# include <unistd.h>
 # include <linux/kvm.h>
 
 static int
@@ -56,7 +57,7 @@
 
 static const char dev[] = "/dev/kvm";
 static const char vm_dev[] = "anon_inode:kvm-vm";
-static const char vcpu_dev[] = "anon_inode:kvm-vcpu";
+static char vcpu_dev[] = "anon_inode:kvm-vcpu:0";
 static size_t page_size;
 
 extern const char code[];
@@ -165,6 +166,23 @@
 	}
 }
 
+static int
+vcpu_dev_should_have_cpuid(int fd)
+{
+	int r = 0;
+	char *filename = NULL;
+	char buf[sizeof(vcpu_dev)];
+
+	if (asprintf(&filename, "/proc/%d/fd/%d", getpid(), fd) < 0)
+		error_msg_and_fail("asprintf");
+
+	if (readlink(filename, buf, sizeof(buf)) == sizeof(buf) - 1
+	    && (memcmp(buf, vcpu_dev, sizeof(buf) - 1) == 0))
+		r = 1;
+	free(filename);
+	return r;
+}
+
 int
 main(void)
 {
@@ -208,6 +226,15 @@
 	       (unsigned long) page_size, (unsigned long) page_size, mem);
 
 	int vcpu_fd = KVM_IOCTL(vm_fd, KVM_CREATE_VCPU, NULL);
+	if (!vcpu_dev_should_have_cpuid(vcpu_fd))
+		/*
+		 * This is an older kernel that doesn't place a cpuid
+		 * at the end of the dentry associated with vcpu_fd.
+		 * Trim the cpuid part of vcpu_dev like:
+		 * "anon_inode:kvm-vcpu:0" -> "anon_inode:kvm-vcpu"
+		 */
+		vcpu_dev[strlen (vcpu_dev) - 2] = '\0';
+
 	printf("ioctl(%d<%s>, KVM_CREATE_VCPU, 0) = %d<%s>\n",
 	       vm_fd, vm_dev, vcpu_fd, vcpu_dev);
 
diff --git a/tests-mx32/ioctl_loop.c b/tests-mx32/ioctl_loop.c
index bafbd37..10b7dc3 100644
--- a/tests-mx32/ioctl_loop.c
+++ b/tests-mx32/ioctl_loop.c
@@ -34,8 +34,10 @@
 #include <stdio.h>
 #include <string.h>
 #include <inttypes.h>
+#include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/sysmacros.h>
+#include <asm/unistd.h>
 #include <linux/ioctl.h>
 #include <linux/loop.h>
 #include "print_fields.h"
@@ -45,6 +47,12 @@
 # define ABBREV 0
 #endif
 
+static long
+sys_ioctl(kernel_long_t fd, kernel_ulong_t cmd, kernel_ulong_t arg)
+{
+	return syscall(__NR_ioctl, fd, cmd, arg);
+}
+
 static void
 print_loop_info(struct loop_info * const info, bool print_encrypt,
 		const char *encrypt_type, const char *encrypt_key,
@@ -178,7 +186,7 @@
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct loop_info64, info64);
 
 	/* Unknown loop commands */
-	ioctl(-1, unknown_loop_cmd, magic);
+	sys_ioctl(-1, unknown_loop_cmd, magic);
 	printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x4c, %#x, %#x), "
 	       "%#lx) = -1 EBADF (%m)\n",
 	       _IOC_DIR((unsigned int) unknown_loop_cmd) & _IOC_NONE ?
@@ -187,14 +195,14 @@
 	       _IOC_SIZE((unsigned int) unknown_loop_cmd),
 	       (unsigned long) magic);
 
-	ioctl(-1, LOOP_SET_BLOCK_SIZE + 1, magic);
+	sys_ioctl(-1, LOOP_SET_BLOCK_SIZE + 1, magic);
 	printf("ioctl(-1, _IOC(0, 0x4c, %#x, %#x), %#lx) = "
 	       "-1 EBADF (%m)\n",
 	       _IOC_NR(LOOP_SET_BLOCK_SIZE + 1),
 	       _IOC_SIZE(LOOP_SET_BLOCK_SIZE + 1),
 	       (unsigned long) magic);
 
-	ioctl(-1, LOOP_CTL_GET_FREE + 1, magic);
+	sys_ioctl(-1, LOOP_CTL_GET_FREE + 1, magic);
 	printf("ioctl(-1, _IOC(0, 0x4c, %#x, %#x), %#lx) = "
 	       "-1 EBADF (%m)\n",
 	       _IOC_NR(LOOP_CTL_GET_FREE + 1),
@@ -202,7 +210,7 @@
 	       (unsigned long) magic);
 
 	/* LOOP_SET_FD */
-	ioctl(-1, LOOP_SET_FD, magic);
+	sys_ioctl(-1, LOOP_SET_FD, magic);
 	printf("ioctl(-1, LOOP_SET_FD, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
@@ -289,7 +297,7 @@
 	printf("ioctl(-1, LOOP_GET_STATUS64, %p) = -1 EBADF (%m)\n", info64);
 
 	/* LOOP_CHANGE_FD */
-	ioctl(-1, LOOP_CHANGE_FD, magic);
+	sys_ioctl(-1, LOOP_CHANGE_FD, magic);
 	printf("ioctl(-1, LOOP_CHANGE_FD, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
@@ -298,22 +306,22 @@
 	printf("ioctl(-1, LOOP_SET_CAPACITY) = -1 EBADF (%m)\n");
 
 	/* LOOP_SET_DIRECT_IO */
-	ioctl(-1, LOOP_SET_DIRECT_IO, magic);
+	sys_ioctl(-1, LOOP_SET_DIRECT_IO, magic);
 	printf("ioctl(-1, LOOP_SET_DIRECT_IO, %lu) = -1 EBADF (%m)\n",
 	       (unsigned long) magic);
 
 	/* LOOP_SET_BLOCK_SIZE */
-	ioctl(-1, LOOP_SET_BLOCK_SIZE, magic);
+	sys_ioctl(-1, LOOP_SET_BLOCK_SIZE, magic);
 	printf("ioctl(-1, LOOP_SET_BLOCK_SIZE, %lu) = -1 EBADF (%m)\n",
 	       (unsigned long) magic);
 
 	/* LOOP_CTL_ADD */
-	ioctl(-1, LOOP_CTL_ADD, magic);
+	sys_ioctl(-1, LOOP_CTL_ADD, magic);
 	printf("ioctl(-1, LOOP_CTL_ADD, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
 	/* LOOP_CTL_REMOVE */
-	ioctl(-1, LOOP_CTL_REMOVE, magic);
+	sys_ioctl(-1, LOOP_CTL_REMOVE, magic);
 	printf("ioctl(-1, LOOP_CTL_REMOVE, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
diff --git a/tests-mx32/ioctl_perf-success.c b/tests-mx32/ioctl_perf-success.c
new file mode 100644
index 0000000..9eade6a
--- /dev/null
+++ b/tests-mx32/ioctl_perf-success.c
@@ -0,0 +1,165 @@
+/*
+ * Check decoding of successful PERF_EVENT_IOC_{ID,QUERY_BPF} ioctls.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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_PERF_EVENT_H
+
+# include <assert.h>
+# include <inttypes.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+# include <sys/ioctl.h>
+# include <linux/perf_event.h>
+
+# ifndef PERF_EVENT_IOC_ID
+#  define PERF_EVENT_IOC_ID			_IOR('$', 7, void *)
+# endif
+
+# ifndef PERF_EVENT_IOC_QUERY_BPF
+#  define PERF_EVENT_IOC_QUERY_BPF		_IOWR('$', 10, void *)
+
+struct perf_event_query_bpf {
+        uint32_t ids_len;
+        uint32_t prog_cnt;
+        uint32_t ids[0];
+};
+# endif
+
+int
+main(int argc, char **argv)
+{
+	static const uint64_t magic64 = 0xfacefeeddeadc0deULL;
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, u64_ptr);
+	uint64_t *const u64_efault = u64_ptr + 1;
+	uint32_t *const u32_arr = tail_alloc(sizeof(uint32_t) * 4);
+	uint32_t *const u32_efault = u32_arr + 4;
+
+	unsigned long num_skip;
+	long inject_retval;
+	bool locked = false;
+
+	*u64_ptr = magic64;
+
+	if (argc == 1)
+		return 0;
+
+	if (argc < 3)
+		error_msg_and_fail("Usage: %s NUM_SKIP INJECT_RETVAL", argv[0]);
+
+	num_skip = strtoul(argv[1], NULL, 0);
+	inject_retval = strtol(argv[2], NULL, 0);
+
+	if (inject_retval < 0)
+		error_msg_and_fail("Expected non-negative INJECT_RETVAL, "
+				   "but got %ld", inject_retval);
+
+	for (unsigned long i = 0; i < num_skip; i++) {
+		long ret = ioctl(-1, PERF_EVENT_IOC_ID, NULL);
+
+		printf("ioctl(-1, PERF_EVENT_IOC_ID, NULL) = %s%s\n",
+		       sprintrc(ret),
+		       ret == inject_retval ? " (INJECTED)" : "");
+
+		if (ret != inject_retval)
+			continue;
+
+		locked = true;
+		break;
+	}
+
+	if (!locked)
+		error_msg_and_fail("Hasn't locked on ioctl(-1"
+				   ", PERF_EVENT_IOC_ID, NULL) returning %lu",
+				   inject_retval);
+
+	/* PERF_EVENT_IOC_ID */
+	assert(ioctl(-1, PERF_EVENT_IOC_ID, NULL) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, NULL) = %ld (INJECTED)\n",
+	       inject_retval);
+
+	assert(ioctl(-1, PERF_EVENT_IOC_ID, u64_efault) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, %p) = %ld (INJECTED)\n",
+	       u64_efault, inject_retval);
+
+	assert(ioctl(-1, PERF_EVENT_IOC_ID, u64_ptr) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, [%" PRIu64 "]) = %ld (INJECTED)\n",
+	       magic64, inject_retval);
+
+	/* PERF_EVENT_IOC_QUERY_BPF */
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL) = %ld (INJECTED)\n",
+	       inject_retval);
+
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_efault)
+	       == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, %p) = %ld (INJECTED)\n",
+	       u32_efault, inject_retval);
+
+	u32_arr[3] = 0xdeadbeef;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr + 3)
+	       == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3735928559, ...}) "
+	       "= %ld (INJECTED)\n",
+	       inject_retval);
+
+	u32_arr[2] = 0xdecaffed;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr + 2)
+	       == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3737845741"
+	       ", prog_cnt=3735928559, ids=%p})"
+	       " = %ld (INJECTED)\n",
+	       u32_efault, inject_retval);
+
+	u32_arr[0] = 0xbadc0ded;
+	u32_arr[1] = 5;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3134983661"
+	       ", prog_cnt=5, ids=[3737845741, 3735928559, ... /* %p */]})"
+	       " = %ld (INJECTED)\n",
+	       u32_efault, inject_retval);
+
+	u32_arr[1] = 2;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3134983661"
+	       ", prog_cnt=2, ids=[3737845741, 3735928559]})"
+	       " = %ld (INJECTED)\n",
+	       inject_retval);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_PERF_EVENT_H");
+
+#endif
diff --git a/tests-mx32/ioctl_perf-success.test b/tests-mx32/ioctl_perf-success.test
new file mode 100755
index 0000000..779a2a9
--- /dev/null
+++ b/tests-mx32/ioctl_perf-success.test
@@ -0,0 +1,15 @@
+#!/bin/sh -efu
+
+# Check decoding of successful PERF_EVENT_IOC_{ID,QUERY_BPF} ioctls.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+: ${IOCTL_INJECT_START=256}
+: ${IOCTL_INJECT_RETVAL=42}
+
+run_prog
+run_strace -a35 -e trace=ioctl \
+	-e inject=ioctl:retval="${IOCTL_INJECT_RETVAL}":when="${IOCTL_INJECT_START}+" \
+	../ioctl_perf-success "${IOCTL_INJECT_START}" "${IOCTL_INJECT_RETVAL}" > "$EXP"
+grep -v '^ioctl([012][,<]' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/ioctl_perf.c b/tests-mx32/ioctl_perf.c
new file mode 100644
index 0000000..7db01db
--- /dev/null
+++ b/tests-mx32/ioctl_perf.c
@@ -0,0 +1,238 @@
+/*
+ * Check decoding of PERF_EVENT_IOC_* commands of ioctl syscall.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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_PERF_EVENT_H
+
+# include <inttypes.h>
+# include <stdio.h>
+# include <string.h>
+# include <unistd.h>
+# include <sys/ioctl.h>
+# include <asm/unistd.h>
+# include <linux/perf_event.h>
+
+/*
+ * Workaround the bug in kernel UAPI that was fixed
+ * in Linux commit v2.6.33-rc1~48^2~288^2~19.
+ */
+# ifndef u64
+#  define u64 uint64_t
+# endif
+
+# define XLAT_MACROS_ONLY
+#  include "xlat/perf_ioctl_cmds.h"
+# undef XLAT_MACROS_ONLY
+
+# define STR16 "0123456789abcdef"
+
+static long
+sys_ioctl(kernel_long_t fd, kernel_ulong_t cmd, kernel_ulong_t arg)
+{
+	return syscall(__NR_ioctl, fd, cmd, arg);
+}
+
+int
+main(void)
+{
+	static const kernel_ulong_t unknown_perf_cmd =
+		(kernel_ulong_t) 0xbadc0dedfeed24edULL;
+	static const kernel_ulong_t magic =
+		(kernel_ulong_t) 0xdeadbeefbadc0dedULL;
+	static const uint64_t magic64 = 0xfacefeeddeadc0deULL;
+	static const char str[] = STR16 STR16 STR16 STR16;
+
+	static struct {
+		unsigned int cmd;
+		const char *str;
+	} flag_iocs[] = {
+		{ ARG_STR(PERF_EVENT_IOC_ENABLE) },
+		{ ARG_STR(PERF_EVENT_IOC_DISABLE) },
+		{ ARG_STR(PERF_EVENT_IOC_RESET) },
+	};
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, u64_ptr);
+	uint64_t *const u64_efault = u64_ptr + 1;
+	uint32_t *const u32_arr = tail_alloc(sizeof(uint32_t) * 4);
+	uint32_t *const u32_efault = u32_arr + 4;
+	char *const str_ptr = tail_memdup(str, sizeof(str));
+	char *const str_efault = str_ptr + sizeof(str);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct perf_event_attr, pea_ptr);
+
+	*u64_ptr = magic64;
+	fill_memory_ex(pea_ptr, sizeof(*pea_ptr), 0xaa, 0x55);
+
+	/* Unknown perf commands */
+	sys_ioctl(-1, unknown_perf_cmd, magic);
+	printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x24, %#x, %#x), "
+	       "%#lx) = -1 EBADF (%m)\n",
+	       _IOC_DIR((unsigned int) unknown_perf_cmd) & _IOC_NONE ?
+	       "|_IOC_NONE" : "",
+	       _IOC_NR((unsigned int) unknown_perf_cmd),
+	       _IOC_SIZE((unsigned int) unknown_perf_cmd),
+	       (unsigned long) magic);
+
+	sys_ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES + 1, magic);
+	printf("ioctl(-1, _IOC(_IOC_WRITE, 0x24, %#x, %#x), %#lx)"
+	       " = -1 EBADF (%m)\n",
+	       (unsigned int) _IOC_NR(PERF_EVENT_IOC_MODIFY_ATTRIBUTES + 1),
+	       (unsigned int) _IOC_SIZE(PERF_EVENT_IOC_MODIFY_ATTRIBUTES + 1),
+	       (unsigned long) magic);
+
+	/* PERF_EVENT_IOC_{ENABLE,DISABLE,RESET} */
+	for (unsigned i = 0; i < ARRAY_SIZE(flag_iocs); i++) {
+		ioctl(-1, flag_iocs[i].cmd, 0);
+		printf("ioctl(-1, %s, 0) = -1 EBADF (%m)\n", flag_iocs[i].str);
+
+		ioctl(-1, flag_iocs[i].cmd, 1);
+		printf("ioctl(-1, %s, PERF_IOC_FLAG_GROUP) = -1 EBADF (%m)\n",
+		       flag_iocs[i].str);
+
+		ioctl(-1, flag_iocs[i].cmd, 2);
+		printf("ioctl(-1, %s, 0x2 /* PERF_IOC_FLAG_??? */) "
+		       "= -1 EBADF (%m)\n",
+		       flag_iocs[i].str);
+
+		sys_ioctl(-1, flag_iocs[i].cmd, magic);
+		printf("ioctl(-1, %s, PERF_IOC_FLAG_GROUP|%#x) "
+		       "= -1 EBADF (%m)\n",
+		       flag_iocs[i].str, (unsigned int) magic & ~1U);
+	}
+
+	/* PERF_EVENT_IOC_REFRESH */
+	sys_ioctl(-1, PERF_EVENT_IOC_REFRESH, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_REFRESH, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	/* PERF_EVENT_IOC_PERIOD */
+	ioctl(-1, PERF_EVENT_IOC_PERIOD, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_PERIOD, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_PERIOD, u64_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_PERIOD, %p) = -1 EBADF (%m)\n",
+	      u64_efault);
+
+	ioctl(-1, PERF_EVENT_IOC_PERIOD, u64_ptr);
+	printf("ioctl(-1, PERF_EVENT_IOC_PERIOD, [%" PRIu64 "])"
+	       " = -1 EBADF (%m)\n",
+	       magic64);
+
+	/* PERF_EVENT_IOC_SET_OUTPUT */
+	sys_ioctl(-1, PERF_EVENT_IOC_SET_OUTPUT, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_OUTPUT, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	/* PERF_EVENT_IOC_SET_FILTER */
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, %p) = -1 EBADF (%m)\n",
+	       str_efault);
+
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_ptr);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, \"%.32s\"...)"
+	       " = -1 EBADF (%m)\n",
+	       str_ptr);
+
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_ptr + 40);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, \"%.32s\")"
+	       " = -1 EBADF (%m)\n",
+	       str_ptr + 40);
+
+	str_ptr[sizeof(str) - 1] = '0';
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_ptr + 40);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, %p)"
+	       " = -1 EBADF (%m)\n",
+	       str_ptr + 40);
+
+	/* PERF_EVENT_IOC_ID */
+	ioctl(-1, PERF_EVENT_IOC_ID, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_ID, u64_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, %p) = -1 EBADF (%m)\n",
+	      u64_efault);
+
+	ioctl(-1, PERF_EVENT_IOC_ID, u64_ptr);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, %p) = -1 EBADF (%m)\n",
+	       u64_ptr);
+
+	/* PERF_EVENT_IOC_SET_BPF */
+	sys_ioctl(-1, PERF_EVENT_IOC_SET_BPF, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_BPF, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	/* PERF_EVENT_IOC_PAUSE_OUTPUT */
+	sys_ioctl(-1, PERF_EVENT_IOC_PAUSE_OUTPUT, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_PAUSE_OUTPUT, %lu) = -1 EBADF (%m)\n",
+	       (unsigned long) magic);
+
+	/* PERF_EVENT_IOC_QUERY_BPF */
+	ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, %p) = -1 EBADF (%m)\n",
+	       u32_efault);
+
+	u32_arr[0] = 0xbadc0ded;
+	ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3134983661, ...})"
+	       " = -1 EBADF (%m)\n");
+
+	/* PERF_EVENT_IOC_MODIFY_ATTRIBUTES */
+	ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, NULL)"
+	       " = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, pea_ptr + 1);
+	printf("ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, %p)"
+	       " = -1 EBADF (%m)\n",
+	       pea_ptr + 1);
+
+	printf("ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES"
+	       ", {type=%#x /* PERF_TYPE_??? */"
+	       ", size=%#x /* PERF_ATTR_SIZE_??? */"
+	       ", config=%#llx, ...}) = -1 EBADF (%m)\n",
+	       (unsigned int) pea_ptr->type,
+	       (unsigned int) pea_ptr->size,
+	       (unsigned long long) pea_ptr->config);
+	ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, pea_ptr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_PERF_EVENT_H");
+
+#endif
diff --git a/tests-mx32/ioctl_perf.gen.test b/tests-mx32/ioctl_perf.gen.test
new file mode 100755
index 0000000..0264f34
--- /dev/null
+++ b/tests-mx32/ioctl_perf.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_perf +ioctl.test ); do not edit.
+set -- 
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_ptp.c b/tests-mx32/ioctl_ptp.c
new file mode 100644
index 0000000..1c82919
--- /dev/null
+++ b/tests-mx32/ioctl_ptp.c
@@ -0,0 +1,131 @@
+/*
+ * Check decoding of PTP_* commands of ioctl syscall.
+ *
+ * Copyright (c) 2018 Harsha Sharma <harshasharmaiitr@gmail.com>
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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_PTP_SYS_OFFSET
+
+#include <errno.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <linux/ptp_clock.h>
+
+#include "xlat.h"
+#include "xlat/ptp_flags_options.h"
+
+static void
+test_no_device(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_clock_caps, caps);
+	fill_memory(caps, sizeof(*caps));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_sys_offset, sysoff);
+	fill_memory(sysoff, sizeof(*sysoff));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_extts_request, extts);
+	fill_memory(extts, sizeof(*extts));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_perout_request, perout);
+	fill_memory(perout, sizeof(*perout));
+
+	int saved_errno;
+
+	/* PTP_CLOCK_GETCAPS */
+	ioctl(-1, PTP_CLOCK_GETCAPS, NULL);
+	printf("ioctl(-1, PTP_CLOCK_GETCAPS, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_CLOCK_GETCAPS, caps);
+	printf("ioctl(-1, PTP_CLOCK_GETCAPS, %p) = -1 EBADF (%m)\n", caps);
+
+	/* PTP_SYS_OFFSET */
+	ioctl(-1, PTP_SYS_OFFSET, NULL);
+	printf("ioctl(-1, PTP_SYS_OFFSET, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_SYS_OFFSET, sysoff);
+	printf("ioctl(-1, PTP_SYS_OFFSET, {n_samples=%u}) = -1 EBADF (%m)\n",
+	       sysoff->n_samples);
+
+	/* PTP_ENABLE_PPS */
+	ioctl(-1, PTP_ENABLE_PPS, 0);
+	printf("ioctl(-1, PTP_ENABLE_PPS, 0) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_ENABLE_PPS, 1);
+	printf("ioctl(-1, PTP_ENABLE_PPS, 1) = -1 EBADF (%m)\n");
+
+	/* PTP_EXTTS_REQUEST */
+	ioctl(-1, PTP_EXTTS_REQUEST, NULL);
+	printf("ioctl(-1, PTP_EXTTS_REQUEST, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_EXTTS_REQUEST, extts);
+	saved_errno = errno;
+	printf("ioctl(-1, PTP_EXTTS_REQUEST, {index=%d, flags=", extts->index);
+	printflags(ptp_flags_options, extts->flags, "PTP_???");
+	errno = saved_errno;
+	printf("}) = -1 EBADF (%m)\n");
+
+	/* PTP_PEROUT_REQUEST */
+	ioctl(-1, PTP_PEROUT_REQUEST, NULL);
+	printf("ioctl(-1, PTP_PEROUT_REQUEST, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_PEROUT_REQUEST, perout);
+	saved_errno = errno;
+	printf("ioctl(-1, PTP_PEROUT_REQUEST, {start={sec=%" PRId64
+	       ", nsec=%" PRIu32 "}, period={sec=%" PRId64 ", nsec=%" PRIu32 "}"
+	       ", index=%d, flags=",
+	       (int64_t) perout->start.sec, perout->start.nsec,
+	       (int64_t)perout->period.sec, perout->period.nsec, perout->index);
+	printflags(ptp_flags_options, perout->flags, "PTP_???");
+	errno = saved_errno;
+	printf("}) = -1 EBADF (%m)\n");
+
+	/* unrecognized */
+	ioctl(-1, _IOC(_IOC_READ, PTP_CLK_MAGIC, 0xff, 0xfe), 0);
+	printf("ioctl(-1, _IOC(_IOC_READ, %#x, 0xff, 0xfe), 0)"
+	       " = -1 EBADF (%m)\n", PTP_CLK_MAGIC);
+
+	const unsigned long arg = (unsigned long) 0xfacefeeddeadbeefULL;
+	ioctl(-1, _IOC(_IOC_WRITE, PTP_CLK_MAGIC, 0xfd, 0xfc), arg);
+	printf("ioctl(-1, _IOC(_IOC_WRITE, %#x, 0xfd, 0xfc), %#lx)"
+	       " = -1 EBADF (%m)\n", PTP_CLK_MAGIC, arg);
+}
+
+int
+main(void)
+{
+	test_no_device();
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_PTP_SYS_OFFSET")
+
+#endif /* HAVE_STRUCT_PTP_SYS_OFFSET */
diff --git a/tests-mx32/ioctl_ptp.gen.test b/tests-mx32/ioctl_ptp.gen.test
new file mode 100755
index 0000000..6c0b0a9
--- /dev/null
+++ b/tests-mx32/ioctl_ptp.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_ptp +ioctl.test ); do not edit.
+set -- 
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_v4l2.c b/tests-mx32/ioctl_v4l2.c
index 2736b39..a7dcc49 100644
--- a/tests-mx32/ioctl_v4l2.c
+++ b/tests-mx32/ioctl_v4l2.c
@@ -842,6 +842,21 @@
 	printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_USER"
 	       ", count=%u}) = -1 EBADF (%m)\n", p_ext_controls->count);
 
+	p_ext_controls->ctrl_class = 0x00a30000;
+	p_ext_controls->count = magic;
+	ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls);
+	printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_DETECT"
+	       ", count=%u, controls=%p}) = -1 EBADF (%m)\n",
+	       p_ext_controls->count, p_ext_controls->controls);
+
+	p_ext_controls->ctrl_class = 0x00a40000;
+	p_ext_controls->count = magic;
+	ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls);
+	printf("ioctl(-1, VIDIOC_S_EXT_CTRLS"
+	       ", {ctrl_class=0xa40000 /* V4L2_CTRL_CLASS_??? */"
+	       ", count=%u, controls=%p}) = -1 EBADF (%m)\n",
+	       p_ext_controls->count, p_ext_controls->controls);
+
 	p_ext_controls->ctrl_class = V4L2_CTRL_CLASS_MPEG;
 	p_ext_controls->count = magic;
 	ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls);
@@ -883,7 +898,7 @@
 	       ", {ctrl_class=V4L2_CTRL_CLASS_MPEG, count=%u, controls="
 	       "[{id=V4L2_CID_BRIGHTNESS, size=0, value=%d, value64=%lld}"
 	       ", {id=V4L2_CID_CONTRAST, size=2, string=\"\\377\\377\"}"
-	       ", %p]}) = -1 EBADF (%m)\n",
+	       ", ... /* %p */]}) = -1 EBADF (%m)\n",
 	       p_ext_controls->count,
 	       p_ext_controls->controls[0].value,
 	       (long long) p_ext_controls->controls[0].value64,
diff --git a/tests-mx32/ipc.sh b/tests-mx32/ipc.sh
index 5943c1a..ef55073 100644
--- a/tests-mx32/ipc.sh
+++ b/tests-mx32/ipc.sh
@@ -5,7 +5,7 @@
 . "${srcdir=.}/init.sh"
 
 run_prog > /dev/null
-run_strace -eipc $args > "$EXP"
+run_strace -eipc "$@" $args > "$EXP"
 match_grep "$LOG" "$EXP"
 
 exit 0
diff --git a/tests-mx32/ipc_msg-Xabbrev.c b/tests-mx32/ipc_msg-Xabbrev.c
new file mode 100644
index 0000000..f4535e8
--- /dev/null
+++ b/tests-mx32/ipc_msg-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_msg.c"
diff --git a/tests-mx32/ipc_msg-Xabbrev.gen.test b/tests-mx32/ipc_msg-Xabbrev.gen.test
new file mode 100755
index 0000000..0969ee1
--- /dev/null
+++ b/tests-mx32/ipc_msg-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg-Xabbrev +ipc.sh -Xabbrev -a26); do not edit.
+set -- -Xabbrev -a26
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_msg-Xraw.c b/tests-mx32/ipc_msg-Xraw.c
new file mode 100644
index 0000000..9c016d3
--- /dev/null
+++ b/tests-mx32/ipc_msg-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_msg.c"
diff --git a/tests-mx32/ipc_msg-Xraw.gen.test b/tests-mx32/ipc_msg-Xraw.gen.test
new file mode 100755
index 0000000..5d5d732
--- /dev/null
+++ b/tests-mx32/ipc_msg-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg-Xraw +ipc.sh -Xraw -a16); do not edit.
+set -- -Xraw -a16
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_msg-Xverbose.c b/tests-mx32/ipc_msg-Xverbose.c
new file mode 100644
index 0000000..3f59f98
--- /dev/null
+++ b/tests-mx32/ipc_msg-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_msg.c"
diff --git a/tests-mx32/ipc_msg-Xverbose.gen.test b/tests-mx32/ipc_msg-Xverbose.gen.test
new file mode 100755
index 0000000..88c79a0
--- /dev/null
+++ b/tests-mx32/ipc_msg-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg-Xverbose +ipc.sh -Xverbose -a34); do not edit.
+set -- -Xverbose -a34
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_msg.c b/tests-mx32/ipc_msg.c
index b493843..a74dba5 100644
--- a/tests-mx32/ipc_msg.c
+++ b/tests-mx32/ipc_msg.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-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,6 +36,10 @@
 #include "xlat.h"
 #include "xlat/resource_flags.h"
 
+#ifndef MSG_STAT_ANY
+# define MSG_STAT_ANY 13
+#endif
+
 /*
  * Before glibc-2.22-122-gbe48165, ppc64 code tried to retrieve data
  * provided in third argument of msgctl call (in case of IPC_SET cmd)
@@ -52,13 +57,50 @@
 # define TEST_MSGCTL_BOGUS_ADDR 1
 #endif
 
+#if XLAT_RAW
+# define str_ipc_excl_nowait "0xface1c00"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_set "0x1"
+# define str_ipc_stat "0x2"
+# define str_msg_stat "0xb"
+# define str_msg_info "0xc"
+# define str_msg_stat_any "0xd"
+# define str_ipc_64 "0x100"
+# define str_bogus_cmd "0xdeadbeef"
+#elif XLAT_VERBOSE
+# define str_ipc_excl_nowait \
+	"0xface1c00 /\\* IPC_EXCL\\|IPC_NOWAIT\\|0xface1000 \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_set "0x1 /\\* IPC_SET \\*/"
+# define str_ipc_stat "0x2 /\\* IPC_STAT \\*/"
+# define str_msg_stat "0xb /\\* MSG_STAT \\*/"
+# define str_msg_info "0xc /\\* MSG_INFO \\*/"
+# define str_msg_stat_any "0xd /\\* MSG_STAT_ANY \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+# define str_bogus_cmd "0xdeadbeef /\\* MSG_\\?\\?\\? \\*/"
+#else
+# define str_ipc_excl_nowait "IPC_EXCL\\|IPC_NOWAIT\\|0xface1000"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_set "IPC_SET"
+# define str_ipc_stat "IPC_STAT"
+# define str_msg_stat "MSG_STAT"
+# define str_msg_info "MSG_INFO"
+# define str_msg_stat_any "MSG_STAT_ANY"
+# define str_ipc_64 "IPC_64"
+# define str_bogus_cmd "0xdeadbeef /\\* MSG_\\?\\?\\? \\*/"
+#endif
+
 static int id = -1;
 
 static void
 cleanup(void)
 {
 	msgctl(id, IPC_RMID, NULL);
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_RMID, NULL\\) += 0\n", id);
+	printf("msgctl\\(%d, (%s\\|)?%s, NULL\\) += 0\n",
+	       id, str_ipc_64, str_ipc_rmid);
 	id = -1;
 }
 
@@ -67,7 +109,7 @@
 {
 	static const key_t private_key =
 		(key_t) (0xffffffff00000000ULL | IPC_PRIVATE);
-	static const key_t bogus_key = (key_t) 0xeca86420fdb97531ULL;
+	static const key_t bogus_key = (key_t) 0xeca86420fdb9f531ULL;
 	static const int bogus_msgid = 0xfdb97531;
 	static const int bogus_cmd = 0xdeadbeef;
 #if TEST_MSGCTL_BOGUS_ADDR
@@ -79,37 +121,36 @@
 	struct msqid_ds ds;
 
 	rc = msgget(bogus_key, bogus_flags);
-	printf("msgget\\(%#llx, %s%s%s%#x\\|%#04o\\) += %s\n",
+	printf("msgget\\(%#llx, %s\\|%#04o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key),
-	       IPC_CREAT & bogus_flags ? "IPC_CREAT\\|" : "",
-	       IPC_EXCL & bogus_flags ? "IPC_EXCL\\|" : "",
-	       IPC_NOWAIT & bogus_flags ? "IPC_NOWAIT\\|" : "",
-	       bogus_flags & ~(0777 | IPC_CREAT | IPC_EXCL | IPC_NOWAIT),
+	       str_ipc_excl_nowait,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	id = msgget(private_key, 0600);
 	if (id < 0)
 		perror_msg_and_skip("msgget");
-	printf("msgget\\(IPC_PRIVATE, 0600\\) += %d\n", id);
+	printf("msgget\\(%s, 0600\\) = %d\n", str_ipc_private, id);
 	atexit(cleanup);
 
 	rc = msgctl(bogus_msgid, bogus_cmd, NULL);
-	printf("msgctl\\(%d, (IPC_64\\|)?%#x /\\* MSG_\\?\\?\\? \\*/, NULL\\)"
-	       " += %s\n", bogus_msgid, bogus_cmd, sprintrc_grep(rc));
+	printf("msgctl\\(%d, (%s\\|)?%s, NULL\\) = %s\n",
+	       bogus_msgid, str_ipc_64, str_bogus_cmd, sprintrc_grep(rc));
 
 #if TEST_MSGCTL_BOGUS_ADDR
 	rc = msgctl(bogus_msgid, IPC_SET, bogus_addr);
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_SET, %p\\) += %s\n",
-	       bogus_msgid, bogus_addr, sprintrc_grep(rc));
+	printf("msgctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       bogus_msgid, str_ipc_64, str_ipc_set, bogus_addr,
+	       sprintrc_grep(rc));
 #endif
 
 	if (msgctl(id, IPC_STAT, &ds))
 		perror_msg_and_skip("msgctl IPC_STAT");
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_STAT, \\{msg_perm=\\{uid=%u"
+	printf("msgctl\\(%d, (%s\\|)?%s, \\{msg_perm=\\{uid=%u"
 	       ", gid=%u, mode=%#o, key=%u, cuid=%u, cgid=%u\\}, msg_stime=%u"
 	       ", msg_rtime=%u, msg_ctime=%u, msg_qnum=%u, msg_qbytes=%u"
-	       ", msg_lspid=%u, msg_lrpid=%u\\}\\) += 0\n",
-	       id, (unsigned) ds.msg_perm.uid, (unsigned) ds.msg_perm.gid,
+	       ", msg_lspid=%u, msg_lrpid=%u\\}\\) = 0\n",
+	       id, str_ipc_64, str_ipc_stat,
+	       (unsigned) ds.msg_perm.uid, (unsigned) ds.msg_perm.gid,
 	       (unsigned) ds.msg_perm.mode, (unsigned) ds.msg_perm.__key,
 	       (unsigned) ds.msg_perm.cuid, (unsigned) ds.msg_perm.cgid,
 	       (unsigned) ds.msg_stime, (unsigned) ds.msg_rtime,
@@ -119,18 +160,22 @@
 
 	if (msgctl(id, IPC_SET, &ds))
 		perror_msg_and_skip("msgctl IPC_SET");
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_SET, \\{msg_perm=\\{uid=%u"
-	       ", gid=%u, mode=%#o\\}, ...\\}\\) += 0\n",
-	       id, (unsigned) ds.msg_perm.uid, (unsigned) ds.msg_perm.gid,
-	       (unsigned) ds.msg_perm.mode);
+	printf("msgctl\\(%d, (%s\\|)?%s, \\{msg_perm=\\{uid=%u"
+	       ", gid=%u, mode=%#o\\}, ...\\}\\) = 0\n",
+	       id, str_ipc_64, str_ipc_set, (unsigned) ds.msg_perm.uid,
+	       (unsigned) ds.msg_perm.gid, (unsigned) ds.msg_perm.mode);
 
 	rc = msgctl(0, MSG_INFO, &ds);
-	printf("msgctl\\(0, (IPC_64\\|)?MSG_INFO, %p\\) += %s\n",
-	       &ds, sprintrc_grep(rc));
+	printf("msgctl\\(0, (%s\\|)?%s, %p\\) = %s\n",
+	       str_ipc_64, str_msg_info, &ds, sprintrc_grep(rc));
 
 	rc = msgctl(id, MSG_STAT, &ds);
-	printf("msgctl\\(%d, (IPC_64\\|)?MSG_STAT, %p\\) += %s\n",
-	       id, &ds, sprintrc_grep(rc));
+	printf("msgctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_msg_stat, &ds, sprintrc_grep(rc));
+
+	rc = msgctl(id, MSG_STAT_ANY, &ds);
+	printf("msgctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_msg_stat_any, &ds, sprintrc_grep(rc));
 
 	return 0;
 }
diff --git a/tests-mx32/ipc_msg.gen.test b/tests-mx32/ipc_msg.gen.test
index b1f1f7e..8202619 100755
--- a/tests-mx32/ipc_msg.gen.test
+++ b/tests-mx32/ipc_msg.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg +ipc.sh ); do not edit.
-set -- 
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg +ipc.sh -a26); do not edit.
+set -- -a26
 . "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_msgbuf-Xabbrev.c b/tests-mx32/ipc_msgbuf-Xabbrev.c
new file mode 100644
index 0000000..e2f09eb
--- /dev/null
+++ b/tests-mx32/ipc_msgbuf-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_msgbuf.c"
diff --git a/tests-mx32/ipc_msgbuf-Xabbrev.gen.test b/tests-mx32/ipc_msgbuf-Xabbrev.gen.test
new file mode 100755
index 0000000..402d804
--- /dev/null
+++ b/tests-mx32/ipc_msgbuf-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msgbuf-Xabbrev +ipc_msgbuf.test -Xabbrev); do not edit.
+set -- -Xabbrev
+. "${srcdir=.}/ipc_msgbuf.test"
diff --git a/tests-mx32/ipc_msgbuf-Xraw.c b/tests-mx32/ipc_msgbuf-Xraw.c
new file mode 100644
index 0000000..c6f8a31
--- /dev/null
+++ b/tests-mx32/ipc_msgbuf-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_msgbuf.c"
diff --git a/tests-mx32/ipc_msgbuf-Xraw.gen.test b/tests-mx32/ipc_msgbuf-Xraw.gen.test
new file mode 100755
index 0000000..c1112cb
--- /dev/null
+++ b/tests-mx32/ipc_msgbuf-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msgbuf-Xraw +ipc_msgbuf.test -Xraw -a22); do not edit.
+set -- -Xraw -a22
+. "${srcdir=.}/ipc_msgbuf.test"
diff --git a/tests-mx32/ipc_msgbuf-Xverbose.c b/tests-mx32/ipc_msgbuf-Xverbose.c
new file mode 100644
index 0000000..ae09a4a
--- /dev/null
+++ b/tests-mx32/ipc_msgbuf-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_msgbuf.c"
diff --git a/tests-mx32/ipc_msgbuf-Xverbose.gen.test b/tests-mx32/ipc_msgbuf-Xverbose.gen.test
new file mode 100755
index 0000000..2c72eb7
--- /dev/null
+++ b/tests-mx32/ipc_msgbuf-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msgbuf-Xverbose +ipc_msgbuf.test -Xverbose); do not edit.
+set -- -Xverbose
+. "${srcdir=.}/ipc_msgbuf.test"
diff --git a/tests-mx32/ipc_msgbuf.c b/tests-mx32/ipc_msgbuf.c
index c4af1be..e439c49 100644
--- a/tests-mx32/ipc_msgbuf.c
+++ b/tests-mx32/ipc_msgbuf.c
@@ -1,7 +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.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,10 @@
  */
 
 #include "tests.h"
+#include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <asm/unistd.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
 #include <sys/stat.h>
@@ -38,22 +41,54 @@
 
 static int msqid = -1;
 
+#if XLAT_RAW
+# define str_ipc_creat "0x200"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_64 "0x100"
+#elif XLAT_VERBOSE
+# define str_ipc_creat "0x200 /\\* IPC_CREAT \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+#else
+# define str_ipc_creat "IPC_CREAT"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_64 "IPC_64"
+#endif
+
 static int
 cleanup(void)
 {
 	if (msqid != -1) {
 		int rc = msgctl(msqid, IPC_RMID, 0);
+		printf("msgctl\\(%d, (%s\\|)?%s, NULL\\) = 0\n",
+		       msqid, str_ipc_64, str_ipc_rmid);
 		msqid = -1;
 		if (rc == -1)
 			return 77;
+		puts("\\+\\+\\+ exited with 0 \\+\\+\\+");
 	}
 	return 0;
 }
 
 int
+sys_msgrcv(int msqid, void *msgp, size_t sz, kernel_long_t msgtyp,
+	   int msgflg)
+{
+#if defined __x86_64__ && defined __ILP32__
+	return syscall(__NR_msgrcv, msqid, msgp, sz, msgtyp, msgflg);
+#else
+	return msgrcv(msqid, msgp, sz, msgtyp, msgflg);
+#endif
+}
+
+int
 main(void)
 {
-	const long mtype = 0xdefaced;
+	/* mtype has to be positive */
+	const kernel_long_t mtype = (kernel_long_t) 0x7facefed5adc0dedULL;
 	struct {
 		kernel_long_t mtype;
 		char mtext[msgsz];
@@ -64,11 +99,23 @@
 	msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRWXU);
 	if (msqid == -1)
 		perror_msg_and_skip("msgget");
+	printf("msgget\\(%s, %s\\|0700\\) = %d\n",
+	       str_ipc_private, str_ipc_creat, msqid);
+
 	typedef void (*atexit_func)(void);
 	atexit((atexit_func) cleanup);
+
+	printf("msgsnd\\(%d, \\{%lld, \"" text_string "\\\\0\"\\}, 14, 0\\)"
+	       " = 0\n",
+	       msqid, (long long) mtype);
 	if (msgsnd(msqid, &msg, msgsz, 0) == -1)
 		perror_msg_and_skip("msgsnd");
-	if (msgrcv(msqid, &msg, msgsz, mtype, 0) != msgsz)
+
+	if (sys_msgrcv(msqid, &msg, msgsz, -mtype, 0) != msgsz)
 		perror_msg_and_skip("msgrcv");
+	printf("msgrcv\\(%d, \\{%lld, \"" text_string "\\\\0\"\\}, 14, %lld"
+	       ", 0\\) = 14\n",
+	       msqid, (long long) mtype, -(long long) mtype);
+
 	return cleanup();
 }
diff --git a/tests-mx32/ipc_msgbuf.test b/tests-mx32/ipc_msgbuf.test
index d0b65d1..9e78785 100755
--- a/tests-mx32/ipc_msgbuf.test
+++ b/tests-mx32/ipc_msgbuf.test
@@ -5,7 +5,7 @@
 . "${srcdir=.}/init.sh"
 
 run_prog
-run_strace -v -e msgget,msgsnd,msgrcv,msgctl $args
-match_grep
+run_strace -a26 -v -e msgget,msgsnd,msgrcv,msgctl "$@" $args > "$EXP"
+match_grep "$LOG" "$EXP"
 
 exit 0
diff --git a/tests-mx32/ipc_sem-Xabbrev.c b/tests-mx32/ipc_sem-Xabbrev.c
new file mode 100644
index 0000000..727005a
--- /dev/null
+++ b/tests-mx32/ipc_sem-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_sem.c"
diff --git a/tests-mx32/ipc_sem-Xabbrev.gen.test b/tests-mx32/ipc_sem-Xabbrev.gen.test
new file mode 100755
index 0000000..0757a48
--- /dev/null
+++ b/tests-mx32/ipc_sem-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem-Xabbrev +ipc.sh -Xabbrev -a29); do not edit.
+set -- -Xabbrev -a29
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_sem-Xraw.c b/tests-mx32/ipc_sem-Xraw.c
new file mode 100644
index 0000000..0a57c0a
--- /dev/null
+++ b/tests-mx32/ipc_sem-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_sem.c"
diff --git a/tests-mx32/ipc_sem-Xraw.gen.test b/tests-mx32/ipc_sem-Xraw.gen.test
new file mode 100755
index 0000000..07d59e5
--- /dev/null
+++ b/tests-mx32/ipc_sem-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem-Xraw +ipc.sh -Xraw -a19); do not edit.
+set -- -Xraw -a19
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_sem-Xverbose.c b/tests-mx32/ipc_sem-Xverbose.c
new file mode 100644
index 0000000..56e8380
--- /dev/null
+++ b/tests-mx32/ipc_sem-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_sem.c"
diff --git a/tests-mx32/ipc_sem-Xverbose.gen.test b/tests-mx32/ipc_sem-Xverbose.gen.test
new file mode 100755
index 0000000..43a61d0
--- /dev/null
+++ b/tests-mx32/ipc_sem-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem-Xverbose +ipc.sh -Xverbose -a36); do not edit.
+set -- -Xverbose -a36
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_sem.c b/tests-mx32/ipc_sem.c
index c883272..8cbbfaa 100644
--- a/tests-mx32/ipc_sem.c
+++ b/tests-mx32/ipc_sem.c
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2015 Andreas Schwab <schwab@suse.de>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,6 +36,43 @@
 #include "xlat.h"
 #include "xlat/resource_flags.h"
 
+#ifndef SEM_STAT_ANY
+# define SEM_STAT_ANY 20
+#endif
+
+#if XLAT_RAW
+# define str_ipc_flags "0xface1e00"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_stat "0x2"
+# define str_sem_stat "0x12"
+# define str_sem_info "0x13"
+# define str_sem_stat_any "0x14"
+# define str_ipc_64 "0x100"
+# define str_bogus_cmd "0xdeadbeef"
+#elif XLAT_VERBOSE
+# define str_ipc_flags \
+	"0xface1e00 /\\* IPC_CREAT\\|IPC_EXCL\\|IPC_NOWAIT\\|0xface1000 \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_stat "0x2 /\\* IPC_STAT \\*/"
+# define str_sem_stat "0x12 /\\* SEM_STAT \\*/"
+# define str_sem_info "0x13 /\\* SEM_INFO \\*/"
+# define str_sem_stat_any "0x14 /\\* SEM_STAT_ANY \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+# define str_bogus_cmd "0xdeadbeef /\\* SEM_\\?\\?\\? \\*/"
+#else
+# define str_ipc_flags "IPC_CREAT\\|IPC_EXCL\\|IPC_NOWAIT\\|0xface1000"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_stat "IPC_STAT"
+# define str_sem_stat "SEM_STAT"
+# define str_sem_info "SEM_INFO"
+# define str_sem_stat_any "SEM_STAT_ANY"
+# define str_ipc_64 "IPC_64"
+# define str_bogus_cmd "0xdeadbeef /\\* SEM_\\?\\?\\? \\*/"
+#endif
+
 union semun {
 	int		 val;    /* Value for SETVAL */
 	struct semid_ds	*buf;    /* Buffer for IPC_STAT, IPC_SET */
@@ -50,8 +87,8 @@
 cleanup(void)
 {
 	semctl(id, 0, IPC_RMID, 0);
-	printf("semctl\\(%d, 0, (IPC_64\\|)?IPC_RMID, \\[?NULL\\]?\\) += 0\n",
-	       id);
+	printf("semctl\\(%d, 0, (%s\\|)?%s, \\[?NULL\\]?\\) = 0\n",
+	       id, str_ipc_64, str_ipc_rmid);
 	id = -1;
 }
 
@@ -75,42 +112,41 @@
 	struct seminfo info;
 
 	rc = semget(bogus_key, bogus_size, bogus_flags);
-	printf("semget\\(%#llx, %d, %s%s%s%#x\\|%#04o\\) += %s\n",
+	printf("semget\\(%#llx, %d, %s\\|%#04o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       IPC_CREAT & bogus_flags ? "IPC_CREAT\\|" : "",
-	       IPC_EXCL & bogus_flags ? "IPC_EXCL\\|" : "",
-	       IPC_NOWAIT & bogus_flags ? "IPC_NOWAIT\\|" : "",
-	       bogus_flags & ~(0777 | IPC_CREAT | IPC_EXCL | IPC_NOWAIT),
-	       bogus_flags & 0777, sprintrc_grep(rc));
+	       str_ipc_flags, bogus_flags & 0777, sprintrc_grep(rc));
 
 	id = semget(private_key, 1, 0600);
 	if (id < 0)
 		perror_msg_and_skip("semget");
-	printf("semget\\(IPC_PRIVATE, 1, 0600\\) += %d\n", id);
+	printf("semget\\(%s, 1, 0600\\) = %d\n", str_ipc_private, id);
 	atexit(cleanup);
 
 	rc = semctl(bogus_semid, bogus_semnum, bogus_cmd, bogus_arg);
 #define SEMCTL_BOGUS_ARG_FMT "(%#lx|\\[(%#lx|NULL)\\]|NULL)"
-	printf("semctl\\(%d, %d, (IPC_64\\|)?%#x /\\* SEM_\\?\\?\\? \\*/"
-	       ", " SEMCTL_BOGUS_ARG_FMT "\\) += %s\n",
-	       bogus_semid, bogus_semnum, bogus_cmd,
+	printf("semctl\\(%d, %d, (%s\\|)?%s, " SEMCTL_BOGUS_ARG_FMT "\\) = %s\n",
+	       bogus_semid, bogus_semnum, str_ipc_64, str_bogus_cmd,
 	       bogus_arg, bogus_arg, sprintrc_grep(rc));
 
 	un.buf = &ds;
 	if (semctl(id, 0, IPC_STAT, un))
 		perror_msg_and_skip("semctl IPC_STAT");
-	printf("semctl\\(%d, 0, (IPC_64\\|)?IPC_STAT, \\[?%p\\]?\\) += 0\n",
-	       id, &ds);
+	printf("semctl\\(%d, 0, (%s\\|)?%s, \\[?%p\\]?\\) = 0\n",
+	       id, str_ipc_64, str_ipc_stat, &ds);
 
 	un.__buf = &info;
 	rc = semctl(0, 0, SEM_INFO, un);
-	printf("semctl\\(0, 0, (IPC_64\\|)?SEM_INFO, \\[?%p\\]?\\) += %s\n",
-	       &info, sprintrc_grep(rc));
+	printf("semctl\\(0, 0, (%s\\|)?%s, \\[?%p\\]?\\) = %s\n",
+	       str_ipc_64, str_sem_info, &info, sprintrc_grep(rc));
 
 	un.buf = &ds;
 	rc = semctl(id, 0, SEM_STAT, un);
-	printf("semctl\\(%d, 0, (IPC_64\\|)?SEM_STAT, \\[?%p\\]?\\) += %s\n",
-	       id, &ds, sprintrc_grep(rc));
+	printf("semctl\\(%d, 0, (%s\\|)?%s, \\[?%p\\]?\\) = %s\n",
+	       id, str_ipc_64, str_sem_stat, &ds, sprintrc_grep(rc));
+
+	rc = semctl(id, 0, SEM_STAT_ANY, un);
+	printf("semctl\\(%d, 0, (%s\\|)?%s, (%p|\\[(%p|NULL)\\]|NULL)\\) = %s\n",
+	       id, str_ipc_64, str_sem_stat_any, &ds, &ds, sprintrc_grep(rc));
 
 	return 0;
 }
diff --git a/tests-mx32/ipc_sem.gen.test b/tests-mx32/ipc_sem.gen.test
index a1c03d2..173b3af 100755
--- a/tests-mx32/ipc_sem.gen.test
+++ b/tests-mx32/ipc_sem.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem +ipc.sh ); do not edit.
-set -- 
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem +ipc.sh -a29); do not edit.
+set -- -a29
 . "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_shm-Xabbrev.c b/tests-mx32/ipc_shm-Xabbrev.c
new file mode 100644
index 0000000..c191aea
--- /dev/null
+++ b/tests-mx32/ipc_shm-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_shm.c"
diff --git a/tests-mx32/ipc_shm-Xabbrev.gen.test b/tests-mx32/ipc_shm-Xabbrev.gen.test
new file mode 100755
index 0000000..d68c246
--- /dev/null
+++ b/tests-mx32/ipc_shm-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm-Xabbrev +ipc.sh -Xabbrev -a29); do not edit.
+set -- -Xabbrev -a29
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_shm-Xraw.c b/tests-mx32/ipc_shm-Xraw.c
new file mode 100644
index 0000000..08e09ac
--- /dev/null
+++ b/tests-mx32/ipc_shm-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_shm.c"
diff --git a/tests-mx32/ipc_shm-Xraw.gen.test b/tests-mx32/ipc_shm-Xraw.gen.test
new file mode 100755
index 0000000..071eef6
--- /dev/null
+++ b/tests-mx32/ipc_shm-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm-Xraw +ipc.sh -Xraw -a19); do not edit.
+set -- -Xraw -a19
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_shm-Xverbose.c b/tests-mx32/ipc_shm-Xverbose.c
new file mode 100644
index 0000000..b936785
--- /dev/null
+++ b/tests-mx32/ipc_shm-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_shm.c"
diff --git a/tests-mx32/ipc_shm-Xverbose.gen.test b/tests-mx32/ipc_shm-Xverbose.gen.test
new file mode 100755
index 0000000..170adee
--- /dev/null
+++ b/tests-mx32/ipc_shm-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm-Xverbose +ipc.sh -Xverbose -a36); do not edit.
+set -- -Xverbose -a36
+. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_shm.c b/tests-mx32/ipc_shm.c
index 6586c8a..f5802cc 100644
--- a/tests-mx32/ipc_shm.c
+++ b/tests-mx32/ipc_shm.c
@@ -41,16 +41,62 @@
 # define SHM_HUGE_MASK 0x3f
 #endif
 
+#ifndef SHM_STAT_ANY
+# define SHM_STAT_ANY 15
+#endif
+
 #include "xlat.h"
 #include "xlat/shm_resource_flags.h"
 
+#if XLAT_RAW
+# define str_ipc_flags "0x2ce1e00"
+# define str_shm_huge "21<<26"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_set "0x1"
+# define str_ipc_stat "0x2"
+# define str_shm_stat "0xd"
+# define str_shm_info "0xe"
+# define str_shm_stat_any "0xf"
+# define str_ipc_64 "0x100"
+# define str_bogus_cmd "0xdefaced2"
+#elif XLAT_VERBOSE
+# define str_ipc_flags \
+	"0x2ce1e00 /\\* IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE" \
+	"\\|0x2ce0000 \\*/"
+# define str_shm_huge "21<<26 /\\* SHM_HUGE_SHIFT \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_set "0x1 /\\* IPC_SET \\*/"
+# define str_ipc_stat "0x2 /\\* IPC_STAT \\*/"
+# define str_shm_stat "0xd /\\* SHM_STAT \\*/"
+# define str_shm_info "0xe /\\* SHM_INFO \\*/"
+# define str_shm_stat_any "0xf /\\* SHM_STAT_ANY \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+# define str_bogus_cmd "0xdefaced2 /\\* SHM_\\?\\?\\? \\*/"
+#else
+# define str_ipc_flags \
+	"IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE\\|0x2ce0000"
+# define str_shm_huge "21<<SHM_HUGE_SHIFT"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_set "IPC_SET"
+# define str_ipc_stat "IPC_STAT"
+# define str_shm_stat "SHM_STAT"
+# define str_shm_info "SHM_INFO"
+# define str_shm_stat_any "SHM_STAT_ANY"
+# define str_ipc_64 "IPC_64"
+# define str_bogus_cmd "0xdefaced2 /\\* SHM_\\?\\?\\? \\*/"
+#endif
+
 static int id = -1;
 
 static void
 cleanup(void)
 {
 	shmctl(id, IPC_RMID, NULL);
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_RMID, NULL\\) += 0\n", id);
+	printf("shmctl\\(%d, (%s\\|)?%s, NULL\\) = 0\n",
+	       id, str_ipc_64, str_ipc_rmid);
 	id = -1;
 }
 
@@ -82,68 +128,67 @@
 	struct shmid_ds ds;
 
 	rc = shmget(bogus_key, bogus_size, 0);
-	printf("shmget\\(%#llx, %zu, 000\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, 000\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
 	       sprintrc_grep(rc));
 
 	rc = shmget(bogus_key, bogus_size, huge_flags);
-	printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       "21<<SHM_HUGE_SHIFT", 0, sprintrc_grep(rc));
+	       str_shm_huge, 0, sprintrc_grep(rc));
 
 	bogus_flags = 0xface1e55 & ~(bogus_ipc_shm_flags | huge_mask);
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %#x\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %#x\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
 	       bogus_flags & ~0777,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	bogus_flags |= bogus_ipc_shm_flags;
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %s\\|%#x\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       "IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE",
-	       bogus_flags & ~(0777 | bogus_ipc_shm_flags),
+	       str_ipc_flags,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	bogus_flags |= huge_flags;
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %s\\|%#x\\|%s\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %s\\|%s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       "IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE",
-	       bogus_flags & ~(0777 | bogus_ipc_shm_flags | huge_mask),
-	       "21<<SHM_HUGE_SHIFT",
+	       str_ipc_flags, str_shm_huge,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	bogus_flags &= ~bogus_ipc_shm_flags;
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %#x\\|%s\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %#x\\|%s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
 	       bogus_flags & ~(0777 | huge_mask),
-	       "21<<SHM_HUGE_SHIFT",
+	       str_shm_huge,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	id = shmget(private_key, 1, 0600);
 	if (id < 0)
 		perror_msg_and_skip("shmget");
-	printf("shmget\\(IPC_PRIVATE, 1, 0600\\) += %d\n", id);
+	printf("shmget\\(%s, 1, 0600\\) = %d\n", str_ipc_private, id);
 	atexit(cleanup);
 
 	rc = shmctl(bogus_id, bogus_cmd, NULL);
-	printf("shmctl\\(%d, (IPC_64\\|)?%#x /\\* SHM_\\?\\?\\? \\*/, NULL\\)"
-	       " += %s\n", bogus_id, bogus_cmd, sprintrc_grep(rc));
+	printf("shmctl\\(%d, (%s\\|)?%s, NULL\\) = %s\n",
+	       bogus_id, str_ipc_64, str_bogus_cmd, sprintrc_grep(rc));
 
 	rc = shmctl(bogus_id, IPC_STAT, bogus_addr);
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_STAT, %p\\) += %s\n",
-	       bogus_id, bogus_addr, sprintrc_grep(rc));
+	printf("shmctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       bogus_id, str_ipc_64, str_ipc_stat, bogus_addr,
+	       sprintrc_grep(rc));
 
 	if (shmctl(id, IPC_STAT, &ds))
 		perror_msg_and_skip("shmctl IPC_STAT");
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_STAT, \\{shm_perm=\\{uid=%u, gid=%u, "
+	printf("shmctl\\(%d, (%s\\|)?%s, \\{shm_perm=\\{uid=%u, gid=%u, "
 		"mode=%#o, key=%u, cuid=%u, cgid=%u\\}, shm_segsz=%u, shm_cpid=%u, "
 		"shm_lpid=%u, shm_nattch=%u, shm_atime=%u, shm_dtime=%u, "
-		"shm_ctime=%u\\}\\) += 0\n",
-		id, (unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
+		"shm_ctime=%u\\}\\) = 0\n",
+		id, str_ipc_64, str_ipc_stat,
+		(unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
 		(unsigned) ds.shm_perm.mode, (unsigned) ds.shm_perm.__key,
 		(unsigned) ds.shm_perm.cuid, (unsigned) ds.shm_perm.cgid,
 		(unsigned) ds.shm_segsz, (unsigned) ds.shm_cpid,
@@ -153,18 +198,23 @@
 
 	if (shmctl(id, IPC_SET, &ds))
 		perror_msg_and_skip("shmctl IPC_SET");
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_SET, \\{shm_perm=\\{uid=%u, gid=%u"
-	       ", mode=%#o\\}, ...\\}\\) += 0\n",
-	       id, (unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
+	printf("shmctl\\(%d, (%s\\|)?%s, \\{shm_perm=\\{uid=%u, gid=%u"
+	       ", mode=%#o\\}, ...\\}\\) = 0\n",
+	       id, str_ipc_64, str_ipc_set,
+	       (unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
 	       (unsigned) ds.shm_perm.mode);
 
 	rc = shmctl(0, SHM_INFO, &ds);
-	printf("shmctl\\(0, (IPC_64\\|)?SHM_INFO, %p\\) += %s\n",
-	       &ds, sprintrc_grep(rc));
+	printf("shmctl\\(0, (%s\\|)?%s, %p\\) = %s\n",
+	       str_ipc_64, str_shm_info, &ds, sprintrc_grep(rc));
 
 	rc = shmctl(id, SHM_STAT, &ds);
-	printf("shmctl\\(%d, (IPC_64\\|)?SHM_STAT, %p\\) += %s\n",
-	       id, &ds, sprintrc_grep(rc));
+	printf("shmctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_shm_stat, &ds, sprintrc_grep(rc));
+
+	rc = shmctl(id, SHM_STAT_ANY, &ds);
+	printf("shmctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_shm_stat_any, &ds, sprintrc_grep(rc));
 
 	return 0;
 }
diff --git a/tests-mx32/ipc_shm.gen.test b/tests-mx32/ipc_shm.gen.test
index 8c6df9b..2e697d3 100755
--- a/tests-mx32/ipc_shm.gen.test
+++ b/tests-mx32/ipc_shm.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm +ipc.sh ); do not edit.
-set -- 
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm +ipc.sh -a29); do not edit.
+set -- -a29
 . "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/kcmp.c b/tests-mx32/kcmp.c
index 60cd300..a6a05c5 100644
--- a/tests-mx32/kcmp.c
+++ b/tests-mx32/kcmp.c
@@ -2,6 +2,7 @@
  * Check decoding of kcmp syscall.
  *
  * Copyright (c) 2016-2017 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -167,7 +168,7 @@
 
 	int fd;
 	unsigned i;
-	struct kcmp_epoll_slot *slot = tail_alloc(sizeof(*slot));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct kcmp_epoll_slot, slot);
 
 	/* Open some files to test printpidfd */
 	fd = open(null_path, O_RDONLY);
diff --git a/tests-mx32/kexec_load.c b/tests-mx32/kexec_load.c
index 2a6b441..ff4507c 100644
--- a/tests-mx32/kexec_load.c
+++ b/tests-mx32/kexec_load.c
@@ -2,7 +2,7 @@
  * Check decoding of kexec_load syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -129,7 +129,7 @@
 		printf("{buf=%p, bufsz=%zu, mem=%p, memsz=%zu}, ",
 		       segms[i].buf, segms[i].bufsz,
 		       segms[i].mem, segms[i].memsz);
-	printf("%p], %s%s) = %s\n",
+	printf("... /* %p */], %s%s) = %s\n",
 	       segms + NUM_SEGMS,
 	       sizeof(long) == 8 ? flags[0].str64 : flags[0].str32,
 	       flags[0].str, errstr);
diff --git a/tests-mx32/keyctl-Xabbrev.c b/tests-mx32/keyctl-Xabbrev.c
new file mode 100644
index 0000000..7b6b0dc
--- /dev/null
+++ b/tests-mx32/keyctl-Xabbrev.c
@@ -0,0 +1 @@
+#include "keyctl.c"
diff --git a/tests-mx32/keyctl-Xabbrev.gen.test b/tests-mx32/keyctl-Xabbrev.gen.test
new file mode 100755
index 0000000..0068a03
--- /dev/null
+++ b/tests-mx32/keyctl-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (keyctl-Xabbrev -a31 -s10 -e trace=keyctl -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a31 -s10 -e trace=keyctl -Xabbrev
diff --git a/tests-mx32/keyctl-Xraw.c b/tests-mx32/keyctl-Xraw.c
new file mode 100644
index 0000000..202c22a
--- /dev/null
+++ b/tests-mx32/keyctl-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "keyctl.c"
diff --git a/tests-mx32/keyctl-Xraw.gen.test b/tests-mx32/keyctl-Xraw.gen.test
new file mode 100755
index 0000000..2d89ea7
--- /dev/null
+++ b/tests-mx32/keyctl-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (keyctl-Xraw -a13 -s10 -e trace=keyctl -Xraw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a13 -s10 -e trace=keyctl -Xraw
diff --git a/tests-mx32/keyctl-Xverbose.c b/tests-mx32/keyctl-Xverbose.c
new file mode 100644
index 0000000..9f9d744
--- /dev/null
+++ b/tests-mx32/keyctl-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "keyctl.c"
diff --git a/tests-mx32/keyctl-Xverbose.gen.test b/tests-mx32/keyctl-Xverbose.gen.test
new file mode 100755
index 0000000..a0cdd7d
--- /dev/null
+++ b/tests-mx32/keyctl-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (keyctl-Xverbose -a41 -s10 -e trace=keyctl -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a41 -s10 -e trace=keyctl -Xverbose
diff --git a/tests-mx32/keyctl.c b/tests-mx32/keyctl.c
index 5d46ab7..881f24b 100644
--- a/tests-mx32/keyctl.c
+++ b/tests-mx32/keyctl.c
@@ -89,6 +89,14 @@
 /* From ioctl_dm.c */
 # define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
 
+#if XLAT_RAW
+# define XARG_STR(v_) (v_), STRINGIFY(v_)
+#elif XLAT_VERBOSE
+# define XARG_STR(v_) (v_), STRINGIFY(v_) " /* " #v_ " */"
+#else
+# define XARG_STR ARG_STR
+#endif
+
 /*
  * When this is called with positive size, the buffer provided is an "out"
  * argument and rc contains resulting size (globally defined nul_terminated_buf
@@ -187,7 +195,13 @@
 
 	long rc = syscall(__NR_keyctl, cmd, args[0], args[1], args[2], args[3]);
 	const char *errstr = sprintrc(rc);
+#if XLAT_RAW
+	printf("keyctl(%#x", (unsigned) cmd);
+#elif XLAT_VERBOSE
+	printf("keyctl(%#x /* %s */", (unsigned) cmd, cmd_str);
+#else
 	printf("keyctl(%s", cmd_str);
+#endif
 	for (i = 0; i < cnt; i++) {
 		printf(", ");
 		print_arg(args[i], arg_str[i], arg_fmt[i], arg_sz[i], rc);
@@ -299,8 +313,20 @@
 
 	static const struct keyctl_dh_params kcdhp_data = {
 		KEY_SPEC_GROUP_KEYRING, 1234567890, 3141592653U };
-	static const char *kcdhp_str = "{private=KEY_SPEC_GROUP_KEYRING, "
-		"prime=1234567890, base=-1153374643}";
+	static const char *kcdhp_str = "{private="
+#if XLAT_RAW || XLAT_VERBOSE
+		"-6"
+#endif
+#if XLAT_VERBOSE
+		" /* "
+#endif
+#if !XLAT_RAW
+		"KEY_SPEC_GROUP_KEYRING"
+#endif
+#if XLAT_VERBOSE
+		" */"
+#endif
+		", prime=1234567890, base=-1153374643}";
 
 	/*
 	 * It's bigger than current hash name size limit, but since it's
@@ -418,7 +444,15 @@
 
 	/* Invalid command */
 	do_keyctl((kernel_ulong_t) 0xbadc0dedfacefeedULL,
-		  "0xfacefeed /* KEYCTL_??? */",
+#if XLAT_VERBOSE
+		  "KEYCTL_???"
+#else
+		  "0xfacefeed"
+# if !XLAT_RAW
+		  " /* KEYCTL_??? */"
+# endif
+#endif
+		  ,
 		  sizeof(kernel_ulong_t),
 			(kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL,
 			kulong_fmt,
@@ -440,7 +474,7 @@
 			(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(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), "%d",
 		  sizeof(int), 3141592653U, NULL, "%d", NULL,
 		  0UL);
 
@@ -469,7 +503,7 @@
 	buf_in_arg = true;
 
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(kernel_ulong_t), (kernel_ulong_t) 0, NULL, ksize_fmt,
 		  0UL);
@@ -498,7 +532,7 @@
 
 	/* KEYCTL_REVOKE */
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -513,7 +547,7 @@
 
 	/* KEYCTL_CHOWN */
 	do_keyctl(ARG_STR(KEYCTL_CHOWN),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(uid_t), ARG_STR(-1), NULL,
 		  sizeof(gid_t), ARG_STR(-1), NULL,
 		  0UL);
@@ -526,8 +560,15 @@
 
 	/* KEYCTL_SETPERM */
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
 		  sizeof(uint32_t), 0xffffffffU,
+#if XLAT_RAW || XLAT_VERBOSE
+			"0xffffffff"
+#endif
+#if XLAT_VERBOSE
+			" /* "
+#endif
+#if !XLAT_RAW
 			"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|"
@@ -536,7 +577,12 @@
 			"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,
+			"0xc0c0c0c0"
+#endif
+#if XLAT_VERBOSE
+			" */"
+#endif
+			, NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -544,7 +590,12 @@
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
-		  sizeof(uint32_t), 0xc0c0c0c0, "0xc0c0c0c0 /* KEY_??? */",
+		  sizeof(uint32_t), 0xc0c0c0c0,
+			  "0xc0c0c0c0"
+#if !XLAT_RAW
+			  " /* KEY_??? */"
+#endif
+			  ,
 			  NULL,
 		  0UL);
 
@@ -563,17 +614,17 @@
 			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
@@ -581,7 +632,7 @@
 
 	/* KEYCTL_CLEAR */
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -597,14 +648,14 @@
 	/* 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,
+		  sizeof(int32_t), XARG_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), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  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(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
 
@@ -612,14 +663,14 @@
 	/* KEYCTL_UNLINK */
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  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(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
 
@@ -628,7 +679,7 @@
 	buf_in_arg = true;
 
 	do_keyctl(ARG_STR(KEYCTL_SEARCH),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(int32_t), 0, NULL, "%d");
@@ -636,7 +687,7 @@
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  sizeof(char *), (char *) 0xfffff00dfffff157ULL, NULL, ptr_fmt,
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_USER_SESSION_KEYRING),
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_USER_SESSION_KEYRING),
 			  NULL);
 	do_keyctl(ARG_STR(KEYCTL_SEARCH),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
@@ -657,7 +708,7 @@
 	/* KEYCTL_RESTRICT_KEYRING */
 
 	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 			  NULL);
@@ -705,17 +756,17 @@
 			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_READ),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_READ),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
@@ -751,11 +802,11 @@
 			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(int32_t), XARG_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,
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 	buf_in_arg = false;
 
@@ -788,7 +839,7 @@
 
 	/* KEYCTL_SET_REQKEY_KEYRING */
 	do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
-		  sizeof(int32_t), ARG_STR(KEY_REQKEY_DEFL_NO_CHANGE), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_REQKEY_DEFL_NO_CHANGE), NULL,
 		  0UL);
 	/*
 	 * Keep it commented out until proper way of faking syscalls is not
@@ -796,11 +847,15 @@
 	 */
 	/* do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
 		  sizeof(int32_t),
-		  ARG_STR(KEY_REQKEY_DEFL_REQUESTOR_KEYRING), NULL, 0UL); */
+		  XARG_STR(KEY_REQKEY_DEFL_REQUESTOR_KEYRING), NULL, 0UL); */
 	do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
 		  sizeof(kernel_ulong_t),
 		  (kernel_ulong_t) 0xfeedf157badc0dedLLU,
-		  "0xbadc0ded /* KEY_REQKEY_DEFL_??? */", NULL, 0UL);
+		  "-1159983635"
+#if !XLAT_RAW
+		  " /* KEY_REQKEY_DEFL_??? */"
+#endif
+		  , NULL, 0UL);
 
 
 	/* KEYCTL_SET_TIMEOUT */
@@ -822,7 +877,7 @@
 
 	/* KEYCTL_ASSUME_AUTHORITY */
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -848,17 +903,17 @@
 			(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,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
@@ -893,7 +948,7 @@
 		  sizeof(kernel_ulong_t),
 			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
 			NULL,
-		  sizeof(uint32_t), ARG_STR(ENODEV), NULL,
+		  sizeof(uint32_t), XARG_STR(ENODEV), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 
 
@@ -923,16 +978,16 @@
 			  ksize_fmt,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 
 	/* KEYCTL_INVALIDATE */
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -948,7 +1003,7 @@
 	/* 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,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
diff --git a/tests-mx32/mknod.c b/tests-mx32/mknod.c
index b387149..4bcc274 100644
--- a/tests-mx32/mknod.c
+++ b/tests-mx32/mknod.c
@@ -59,7 +59,7 @@
 	rc = call_mknod(mode, dev);
 	printf("mknod(\"%s\", S_IFBLK|S_ISUID|S_ISGID|S_ISVTX|%#03ho"
 	       ", makedev(%u, %u)) = %ld %s (%m)\n",
-	       sample, mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX),
+	       sample, (short) (mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX)),
 	       major((unsigned) dev), minor((unsigned) dev),
 	       rc, errno2name());
 
diff --git a/tests-mx32/mknodat.c b/tests-mx32/mknodat.c
index 756e277..318dc5a 100644
--- a/tests-mx32/mknodat.c
+++ b/tests-mx32/mknodat.c
@@ -59,7 +59,7 @@
 	rc = call_mknodat(mode, dev);
 	printf("mknodat(-1, \"%s\", S_IFBLK|S_ISUID|S_ISGID|S_ISVTX|%#03ho"
 	       ", makedev(%u, %u)) = %ld %s (%m)\n",
-	       sample, mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX),
+	       sample, (short) (mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX)),
 	       major((unsigned) dev), minor((unsigned) dev),
 	       rc, errno2name());
 
diff --git a/tests-mx32/mmap-Xabbrev.c b/tests-mx32/mmap-Xabbrev.c
new file mode 100644
index 0000000..b31ce42
--- /dev/null
+++ b/tests-mx32/mmap-Xabbrev.c
@@ -0,0 +1 @@
+#include "mmap.c"
diff --git a/tests-mx32/mmap-Xabbrev.gen.test b/tests-mx32/mmap-Xabbrev.gen.test
new file mode 100755
index 0000000..b11a84f
--- /dev/null
+++ b/tests-mx32/mmap-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap-Xabbrev +mmap.test abbrev); do not edit.
+set -- abbrev
+. "${srcdir=.}/mmap.test"
diff --git a/tests-mx32/mmap-Xraw.c b/tests-mx32/mmap-Xraw.c
new file mode 100644
index 0000000..ef25c03
--- /dev/null
+++ b/tests-mx32/mmap-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW     1
+#include "mmap.c"
diff --git a/tests-mx32/mmap-Xraw.gen.test b/tests-mx32/mmap-Xraw.gen.test
new file mode 100755
index 0000000..3caca91
--- /dev/null
+++ b/tests-mx32/mmap-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap-Xraw +mmap.test raw 14); do not edit.
+set -- raw 14
+. "${srcdir=.}/mmap.test"
diff --git a/tests-mx32/mmap-Xverbose.c b/tests-mx32/mmap-Xverbose.c
new file mode 100644
index 0000000..08e9e30
--- /dev/null
+++ b/tests-mx32/mmap-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "mmap.c"
diff --git a/tests-mx32/mmap-Xverbose.gen.test b/tests-mx32/mmap-Xverbose.gen.test
new file mode 100755
index 0000000..99b41c0
--- /dev/null
+++ b/tests-mx32/mmap-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap-Xverbose +mmap.test verbose); do not edit.
+set -- verbose
+. "${srcdir=.}/mmap.test"
diff --git a/tests-mx32/mmap.c b/tests-mx32/mmap.c
index 0321bf5..e9f587e 100644
--- a/tests-mx32/mmap.c
+++ b/tests-mx32/mmap.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -58,25 +58,60 @@
 
 	(void) close(0);
 	(void) close(0);
+#if XLAT_RAW
+	printf("%s(NULL, 0, %#x, %#x, 0, 0) = -1 EBADF (%m)\n",
+	       name, PROT_NONE, MAP_FILE);
+#elif XLAT_VERBOSE
+	printf("%s(NULL, 0, %#x /* PROT_NONE */, %#x /* MAP_FILE */, 0, 0) "
+	       "= -1 EBADF (%m)\n",
+	       name, PROT_NONE, MAP_FILE);
+#else
 	printf("%s(NULL, 0, PROT_NONE, MAP_FILE, 0, 0) = -1 EBADF (%m)\n",
 	       name);
+#endif
 	mmap(NULL, 0, PROT_NONE, MAP_FILE, 0, 0);
 
 	p = mmap(addr, length1, PROT_READ | PROT_WRITE,
 		 MAP_PRIVATE | MAP_ANONYMOUS, fd, offset);
 	if (MAP_FAILED == p)
 		perror_msg_and_fail("mmap");
+#if XLAT_RAW
+	printf("%s(%p, %lu, %#x, "
+	       "%#x|%#x, %d, %#jx) = %p\n",
+	       name, addr, length1, PROT_READ | PROT_WRITE, MAP_PRIVATE,
+	       MAP_ANONYMOUS, fd, uoffset, p);
+#elif XLAT_VERBOSE
+	printf("%s(%p, %lu, %#x /* PROT_READ|PROT_WRITE */, "
+	       "%#x /* MAP_PRIVATE */|%#x /* MAP_ANONYMOUS */, %d, %#jx) "
+	       "= %p\n",
+	       name, addr, length1, PROT_READ | PROT_WRITE, MAP_PRIVATE,
+	       MAP_ANONYMOUS, fd, uoffset, p);
+#else
 	printf("%s(%p, %lu, PROT_READ|PROT_WRITE, "
 	       "MAP_PRIVATE|MAP_ANONYMOUS, %d, %#jx) = %p\n",
 	       name, addr, length1, fd, uoffset, p);
+#endif
 
 	if (msync(p, length1, MS_SYNC))
 		perror_msg_and_fail("msync");
+#if XLAT_RAW
+	printf("msync(%p, %lu, %#x) = 0\n", p, length1, MS_SYNC);
+#elif XLAT_VERBOSE
+	printf("msync(%p, %lu, %#x /* MS_SYNC */) = 0\n", p, length1, MS_SYNC);
+#else
 	printf("msync(%p, %lu, MS_SYNC) = 0\n", p, length1);
+#endif
 
 	if (mprotect(p, length1, PROT_NONE))
 		perror_msg_and_fail("mprotect");
+#if XLAT_RAW
+	printf("mprotect(%p, %lu, %#x) = 0\n", p, length1, PROT_NONE);
+#elif XLAT_VERBOSE
+	printf("mprotect(%p, %lu, %#x /* PROT_NONE */) = 0\n",
+	       p, length1, PROT_NONE);
+#else
 	printf("mprotect(%p, %lu, PROT_NONE) = 0\n", p, length1);
+#endif
 
 	addr = mremap(p, length1, length2, 0);
 	if (MAP_FAILED == addr)
@@ -87,8 +122,19 @@
 		    addr + length2);
 	if (MAP_FAILED == p)
 		perror_msg_and_fail("mremap");
+#if XLAT_RAW
+	printf("mremap(%p, %lu, %lu, %#x, %p) = %p\n",
+	       addr, length2, length3, MREMAP_MAYMOVE | MREMAP_FIXED,
+	       addr + length2, p);
+#elif XLAT_VERBOSE
+	printf("mremap(%p, %lu, %lu, %#x /* MREMAP_MAYMOVE|MREMAP_FIXED */"
+	       ", %p) = %p\n",
+	       addr, length2, length3, MREMAP_MAYMOVE | MREMAP_FIXED,
+	       addr + length2, p);
+#else
 	printf("mremap(%p, %lu, %lu, MREMAP_MAYMOVE|MREMAP_FIXED"
 	       ", %p) = %p\n", addr, length2, length3, addr + length2, p);
+#endif
 
 	if (munmap(p, length3))
 		perror_msg_and_fail("munmap");
@@ -96,7 +142,13 @@
 
 	if (mlockall(MCL_FUTURE))
 		perror_msg_and_fail("mlockall");
+#if XLAT_RAW
+	printf("mlockall(%#x) = 0\n", MCL_FUTURE);
+#elif XLAT_VERBOSE
+	printf("mlockall(%#x /* MCL_FUTURE */) = 0\n", MCL_FUTURE);
+#else
 	puts("mlockall(MCL_FUTURE) = 0");
+#endif
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-mx32/mmap.test b/tests-mx32/mmap.test
index 7ba664e..7fa2c70 100755
--- a/tests-mx32/mmap.test
+++ b/tests-mx32/mmap.test
@@ -4,7 +4,7 @@
 # syscalls decoding.
 #
 # Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2015-2017 The strace developers.
+# Copyright (c) 2015-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -35,15 +35,20 @@
 check_prog sed
 run_prog > /dev/null
 
+xlat_opt=""
+[ "$#" -gt 0 ] && xlat_opt="-X$1"
+align=20
+[ "$#" -gt 1 ] && align="$2"
+
 syscall=
 for n in mmap mmap2; do
 	$STRACE -e$n -h > /dev/null && syscall=$syscall,$n
 done
 run_strace -e$syscall $args > /dev/null
 
-if grep '^mmap(NULL, 0, PROT_NONE,' < "$LOG" > /dev/null; then
+if grep '^mmap(NULL, 0, \(0 /* PROT_NONE */\|0\|PROT_NONE\),' < "$LOG" > /dev/null; then
 	mmap=mmap
-elif grep '^mmap2(NULL, 0, PROT_NONE,' < "$LOG" > /dev/null; then
+elif grep '^mmap2(NULL, 0, \(0 \/\* PROT_NONE \*\/\|0\|PROT_NONE\),' < "$LOG" > /dev/null; then
 	mmap=mmap2
 else
 	dump_log_and_fail_with "mmap/mmap2 not found in $STRACE $args output"
@@ -52,6 +57,6 @@
 syscall=$mmap,madvise,mlockall,mprotect,mremap,msync,munmap
 
 run_prog "../$NAME" $mmap > /dev/null
-run_strace -a20 -e$syscall $args > "$EXP"
-sed -n "/^$mmap(NULL, 0, PROT_NONE,/,\$p" < "$LOG" > "$OUT"
+run_strace -a$align -e$syscall $xlat_opt $args > "$EXP"
+sed -n "/^$mmap(NULL, 0, \(0 \/\* PROT_NONE \*\/\|0\|PROT_NONE\),/,\$p" < "$LOG" > "$OUT"
 match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/mmap64-Xabbrev.c b/tests-mx32/mmap64-Xabbrev.c
new file mode 100644
index 0000000..cbd7789
--- /dev/null
+++ b/tests-mx32/mmap64-Xabbrev.c
@@ -0,0 +1 @@
+#include "mmap64.c"
diff --git a/tests-mx32/mmap64-Xabbrev.gen.test b/tests-mx32/mmap64-Xabbrev.gen.test
new file mode 100755
index 0000000..3e2c94b
--- /dev/null
+++ b/tests-mx32/mmap64-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64-Xabbrev +mmap.test abbrev); do not edit.
+set -- abbrev
+. "${srcdir=.}/mmap.test"
diff --git a/tests-mx32/mmap64-Xraw.c b/tests-mx32/mmap64-Xraw.c
new file mode 100644
index 0000000..f75f235
--- /dev/null
+++ b/tests-mx32/mmap64-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW     1
+#include "mmap64.c"
diff --git a/tests-mx32/mmap64-Xraw.gen.test b/tests-mx32/mmap64-Xraw.gen.test
new file mode 100755
index 0000000..7aeed02
--- /dev/null
+++ b/tests-mx32/mmap64-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64-Xraw +mmap.test raw 14); do not edit.
+set -- raw 14
+. "${srcdir=.}/mmap.test"
diff --git a/tests-mx32/mmap64-Xverbose.c b/tests-mx32/mmap64-Xverbose.c
new file mode 100644
index 0000000..f72513e
--- /dev/null
+++ b/tests-mx32/mmap64-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "mmap64.c"
diff --git a/tests-mx32/mmap64-Xverbose.gen.test b/tests-mx32/mmap64-Xverbose.gen.test
new file mode 100755
index 0000000..0d675d9
--- /dev/null
+++ b/tests-mx32/mmap64-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64-Xverbose +mmap.test verbose); do not edit.
+set -- verbose
+. "${srcdir=.}/mmap.test"
diff --git a/tests-mx32/mmsg_name.c b/tests-mx32/mmsg_name.c
index 8c54a48..c17b13d 100644
--- a/tests-mx32/mmsg_name.c
+++ b/tests-mx32/mmsg_name.c
@@ -3,7 +3,7 @@
  * of sendmmsg and recvmmsg syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -152,7 +152,7 @@
 	printf("sendmmsg(-1, [{msg_hdr=");
 	print_msghdr(&send_mh[IOV_MAX].msg_hdr, 0);
 	errno = saved_errno;
-	printf("}, %p], %u, MSG_DONTWAIT) = %d %s (%m)\n",
+	printf("}, ... /* %p */], %u, MSG_DONTWAIT) = %d %s (%m)\n",
 	       &send_mh[IOV_MAX1], 2, rc, errno2name());
 
 	rc = send_mmsg(send_fd, send_mh, IOV_MAX1, MSG_DONTWAIT);
diff --git a/tests-mx32/modify_ldt.c b/tests-mx32/modify_ldt.c
index 1e26bda..2d527ac 100644
--- a/tests-mx32/modify_ldt.c
+++ b/tests-mx32/modify_ldt.c
@@ -67,8 +67,8 @@
 	static const kernel_ulong_t bogus_bytecount =
 		(kernel_ulong_t) 0xdeadfacefa57beefULL;
 
-	struct user_desc *us = tail_alloc(sizeof(*us));
-	unsigned int *bogus_int = tail_alloc(sizeof(*bogus_int));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct user_desc, us);
+	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned int, bogus_int);
 	long rc;
 
 	fill_memory(us, sizeof(*us));
diff --git a/tests-mx32/mount-Xabbrev.c b/tests-mx32/mount-Xabbrev.c
new file mode 100644
index 0000000..0f6fecd
--- /dev/null
+++ b/tests-mx32/mount-Xabbrev.c
@@ -0,0 +1 @@
+#include "mount.c"
diff --git a/tests-mx32/mount-Xabbrev.gen.test b/tests-mx32/mount-Xabbrev.gen.test
new file mode 100755
index 0000000..10e261f
--- /dev/null
+++ b/tests-mx32/mount-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount-Xabbrev -a33 -e trace=mount -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a33 -e trace=mount -Xabbrev
diff --git a/tests-mx32/mount-Xraw.c b/tests-mx32/mount-Xraw.c
new file mode 100644
index 0000000..3aa1f08
--- /dev/null
+++ b/tests-mx32/mount-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "mount.c"
diff --git a/tests-mx32/mount-Xraw.gen.test b/tests-mx32/mount-Xraw.gen.test
new file mode 100755
index 0000000..ce852f8
--- /dev/null
+++ b/tests-mx32/mount-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount-Xraw -a33 -e trace=mount -Xraw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a33 -e trace=mount -Xraw
diff --git a/tests-mx32/mount-Xverbose.c b/tests-mx32/mount-Xverbose.c
new file mode 100644
index 0000000..0b211c7
--- /dev/null
+++ b/tests-mx32/mount-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "mount.c"
diff --git a/tests-mx32/mount-Xverbose.gen.test b/tests-mx32/mount-Xverbose.gen.test
new file mode 100755
index 0000000..c780070
--- /dev/null
+++ b/tests-mx32/mount-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount-Xverbose -a33 -e trace=mount -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a33 -e trace=mount -Xverbose
diff --git a/tests-mx32/mount.c b/tests-mx32/mount.c
index cbfe42f8..2e58571 100644
--- a/tests-mx32/mount.c
+++ b/tests-mx32/mount.c
@@ -2,6 +2,7 @@
  * Check decoding of mount syscall.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,7 +41,34 @@
 # define MS_RELATIME (1ul << 21)
 #endif
 
-#define str_ro_nosuid_nodev_noexec "MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC"
+#if XLAT_RAW
+# define str_unknown "0x300"
+# define str_submount_200 "0x4000200"
+# define str_mgc_val "0xc0ed0000"
+# define str_remount "0x20"
+# define str_bind "0x1000"
+# define str_ro_nosuid_nodev_noexec "0xf"
+# define str_ro_nosuid_nodev_noexec_relatime "0x20000f"
+#elif XLAT_VERBOSE
+# define str_unknown "0x300 /* MS_??? */"
+# define str_submount_200 "0x4000200 /* MS_SUBMOUNT|0x200 */"
+# define str_mgc_val "0xc0ed0000 /* MS_MGC_VAL */"
+# define str_remount "0x20 /* MS_REMOUNT */"
+# define str_bind "0x1000 /* MS_BIND */"
+# define str_ro_nosuid_nodev_noexec \
+	"0xf /* MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC */"
+# define str_ro_nosuid_nodev_noexec_relatime \
+	"0x20000f /* MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME */"
+#else /* !XLAT_RAW && !XLAT_VERBOSE */
+# define str_unknown "0x300 /* MS_??? */"
+# define str_submount_200 "MS_SUBMOUNT|0x200"
+# define str_mgc_val "MS_MGC_VAL"
+# define str_remount "MS_REMOUNT"
+# define str_bind "MS_BIND"
+# define str_ro_nosuid_nodev_noexec "MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC"
+# define str_ro_nosuid_nodev_noexec_relatime \
+	"MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME"
+#endif /* XLAT_RAW, XLAT_VERBOSE */
 
 int
 main(void)
@@ -49,35 +77,59 @@
 	static const char target[] = "mount_target";
 	static const char fstype[] = "mount_fstype";
 	static const char data[] = "mount_data";
+	TAIL_ALLOC_OBJECT_CONST_PTR(char, bogus);
 
-	int rc = mount(source, target, fstype, 15, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
+	bogus[0] = 'a';
+
+	int rc = mount(NULL, NULL, NULL, 0, NULL);
+	printf("mount(NULL, NULL, NULL, 0, NULL) = %s\n",
+	       sprintrc(rc));
+
+	rc = mount(bogus, bogus, bogus, 768, bogus);
+	printf("mount(%p, %p, %p, %s, %p) = %s\n",
+	       bogus, bogus, bogus, str_unknown, bogus, sprintrc(rc));
+
+	rc = mount(bogus + 1, bogus + 1, bogus + 1, 0x4000200, bogus + 1);
+	printf("mount(%p, %p, %p, %s, %p) = %s\n",
+	       bogus + 1, bogus + 1, bogus + 1, str_submount_200,
+	       bogus + 1, sprintrc(rc));
+
+	rc = mount(source, target, fstype, 15, data);
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
 	       source, target, fstype, str_ro_nosuid_nodev_noexec,
-	       data, rc, errno2name());
+	       data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_RELATIME | 15, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
 	       source, target, fstype,
-	       str_ro_nosuid_nodev_noexec "|MS_RELATIME",
-	       data, rc, errno2name());
+	       str_ro_nosuid_nodev_noexec_relatime,
+	       data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_MGC_VAL, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
-	       source, target, fstype, "MS_MGC_VAL", data, rc, errno2name());
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
+	       source, target, fstype, str_mgc_val, data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_MGC_VAL | 15, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
 	       source, target, fstype,
-	       "MS_MGC_VAL|" str_ro_nosuid_nodev_noexec,
-	       data, rc, errno2name());
+	       str_mgc_val "|" str_ro_nosuid_nodev_noexec,
+	       data, sprintrc(rc));
+
+	rc = mount(source, target, NULL, MS_REMOUNT, data);
+	printf("mount(\"%s\", \"%s\", NULL, %s, \"%s\") = %s\n",
+	       source, target, str_remount, data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_REMOUNT, data);
-	printf("mount(\"%s\", \"%s\", %p, %s, \"%s\") = %d %s (%m)\n",
-	       source, target, fstype, "MS_REMOUNT", data, rc, errno2name());
+	printf("mount(\"%s\", \"%s\", %p, %s, \"%s\") = %s\n",
+	       source, target, fstype, str_remount, data, sprintrc(rc));
 
-	rc = mount(source, target, fstype, MS_BIND, data);
-	printf("mount(\"%s\", \"%s\", %p, %s, %p) = %d %s (%m)\n",
-	       source, target, fstype, "MS_BIND", data, rc, errno2name());
+	rc = mount(source, target, NULL, MS_BIND, data);
+	printf("mount(\"%s\", \"%s\", NULL, %s, %p) = %s\n",
+	       source, target, str_bind, data, sprintrc(rc));
+
+	rc = mount(source, target, fstype, MS_BIND, NULL);
+	printf("mount(\"%s\", \"%s\", %p, %s, NULL) = %s\n",
+	       source, target, fstype, str_bind, sprintrc(rc));
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-mx32/mount.gen.test b/tests-mx32/mount.gen.test
index 69bc99b..2a3639c 100755
--- a/tests-mx32/mount.gen.test
+++ b/tests-mx32/mount.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount  ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount -a33 ); do not edit.
 . "${srcdir=.}/init.sh"
-run_strace_match_diff  
+run_strace_match_diff -a33 
diff --git a/tests-mx32/move_pages.c b/tests-mx32/move_pages.c
index 5ec25aa..851a8c7 100644
--- a/tests-mx32/move_pages.c
+++ b/tests-mx32/move_pages.c
@@ -2,7 +2,7 @@
  * Check decoding of move_pages syscall.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -63,7 +63,7 @@
 				break;
 			}
 		} else {
-			printf("%p", pages + i);
+			printf("... /* %p */", pages + i);
 			break;
 		}
 		const void *const addr = pages[i];
@@ -99,7 +99,7 @@
 				break;
 			}
 		} else {
-			printf("%p", nodes + i);
+			printf("... /* %p */", nodes + i);
 			break;
 		}
 		printf("%d", nodes[i]);
diff --git a/tests-mx32/msg_control.c b/tests-mx32/msg_control.c
index 48b7347..01786d7 100644
--- a/tests-mx32/msg_control.c
+++ b/tests-mx32/msg_control.c
@@ -2,7 +2,7 @@
  * Check decoding of struct msghdr ancillary data.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -132,7 +132,7 @@
 		print_fds(cmsg, src_len);
 		printf("}");
 		if (aligned_cms_len < msg_controllen)
-			printf(", %p", (void *) cmsg + aligned_cms_len);
+			printf(", ... /* %p */", (void *) cmsg + aligned_cms_len);
 		printf("]");
 	}
 
@@ -195,7 +195,7 @@
 	print_fds(cmsg[1], src1_len);
 	printf("}");
 	if (aligned_cms_len[1] < msg_controllen1)
-		printf(", %p", (void *) cmsg[1] + aligned_cms_len[1]);
+		printf(", ... /* %p */", (void *) cmsg[1] + aligned_cms_len[1]);
 	printf("]");
 
 	errno = saved_errno;
@@ -425,7 +425,7 @@
 	print_security(cmsg, src_len);
 	printf("}");
 	if (aligned_cms_len < msg_controllen)
-		printf(", %p", (void *) cmsg + aligned_cms_len);
+		printf(", ... /* %p */", (void *) cmsg + aligned_cms_len);
 	printf("]");
 
 	errno = saved_errno;
diff --git a/tests-mx32/net-sockaddr.c b/tests-mx32/net-sockaddr.c
index fe933d4..22cbb26 100644
--- a/tests-mx32/net-sockaddr.c
+++ b/tests-mx32/net-sockaddr.c
@@ -2,7 +2,7 @@
  * Check decoding of sockaddr structures
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -436,25 +436,86 @@
 {
 	const unsigned short h_psm = 12345;
 	const unsigned short h_cid = 13579;
-	const struct sockaddr_l2 c_l2 = {
+	struct sockaddr_l2 c_l2 = {
 		.l2_family = AF_BLUETOOTH,
 		.l2_psm = htobs(h_psm),
 		.l2_bdaddr.b = "abcdef",
 		.l2_cid = htobs(h_cid),
-		.l2_bdaddr_type = 42
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+		.l2_bdaddr_type = 0xce,
+#endif
 	};
 	void *l2 = tail_memdup(&c_l2, sizeof(c_l2));
 	unsigned int len = sizeof(c_l2);
+
 	int ret = connect(-1, l2, len);
 	printf("connect(-1, {sa_family=AF_BLUETOOTH"
-	       ", l2_psm=htobs(%hu)"
+	       ", l2_psm=htobs(L2CAP_PSM_DYN_START + %hu)"
 	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
-	       ", l2_cid=htobs(%hu), l2_bdaddr_type=%u}"
-	       ", %u) = %d EBADF (%m)\n", h_psm,
+	       ", l2_cid=htobs(L2CAP_CID_DYN_START + %hu)"
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	       ", l2_bdaddr_type=0xce /* BDADDR_??? */"
+#endif
+	       "}, %u) = %d EBADF (%m)\n",
+	       (short) (h_psm - 0x1001),
 	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
 	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
 	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
-	       h_cid, c_l2.l2_bdaddr_type, len, ret);
+	       (short) (h_cid - 0x40), len, ret);
+
+	c_l2.l2_psm = htobs(1);
+	c_l2.l2_cid = htobs(1);
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	c_l2.l2_bdaddr_type = BDADDR_LE_RANDOM;
+#endif
+	memcpy(l2, &c_l2, sizeof(c_l2));
+	ret = connect(-1, l2, len);
+	printf("connect(-1, {sa_family=AF_BLUETOOTH"
+	       ", l2_psm=htobs(L2CAP_PSM_SDP)"
+	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+	       ", l2_cid=htobs(L2CAP_CID_SIGNALING)"
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	       ", l2_bdaddr_type=BDADDR_LE_RANDOM"
+#endif
+	       "}, %u) = %d EBADF (%m)\n",
+	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+	       len, ret);
+
+	c_l2.l2_psm = htobs(0xbad);
+	c_l2.l2_cid = htobs(8);
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	c_l2.l2_bdaddr_type = 3;
+#endif
+	memcpy(l2, &c_l2, sizeof(c_l2));
+	ret = connect(-1, l2, len);
+	printf("connect(-1, {sa_family=AF_BLUETOOTH"
+	       ", l2_psm=htobs(0xbad /* L2CAP_PSM_??? */)"
+	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+	       ", l2_cid=htobs(0x8 /* L2CAP_CID_??? */)"
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	       ", l2_bdaddr_type=0x3 /* BDADDR_??? */"
+#endif
+	       "}, %u) = %d EBADF (%m)\n",
+	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+	       len, ret);
+
+	c_l2.l2_psm = htobs(0x10ff);
+	c_l2.l2_cid = htobs(0xffff);
+	memcpy(l2, &c_l2, 12);
+	ret = connect(-1, l2, 12);
+	printf("connect(-1, {sa_family=AF_BLUETOOTH"
+	       ", l2_psm=htobs(L2CAP_PSM_AUTO_END)"
+	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+	       ", l2_cid=htobs(L2CAP_CID_DYN_END)"
+	       "}, 12) = %d EBADF (%m)\n",
+	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+	       ret);
 }
 #endif
 
diff --git a/tests-mx32/netlink_crypto.c b/tests-mx32/netlink_crypto.c
index d15c17c..5c3dc04 100644
--- a/tests-mx32/netlink_crypto.c
+++ b/tests-mx32/netlink_crypto.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -98,8 +98,6 @@
 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",
@@ -109,6 +107,8 @@
 		.cru_refcnt = 0xbcacfacd,
 		.cru_flags = 0xefacdbad
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(alg));
+
 	TEST_NETLINK_OBJECT_EX(fd, nlh0,
 			       CRYPTO_MSG_NEWALG, NLM_F_REQUEST,
 			       alg, print_quoted_memory,
@@ -149,7 +149,7 @@
 static void
 test_crypto_msg_unspec(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, 4);
 
 	TEST_NETLINK_(fd, nlh0,
 		      0xffff, "0xffff /* CRYPTO_MSG_??? */",
diff --git a/tests-mx32/netlink_kobject_uevent.c b/tests-mx32/netlink_kobject_uevent.c
index 7edacd7..b28af49 100644
--- a/tests-mx32/netlink_kobject_uevent.c
+++ b/tests-mx32/netlink_kobject_uevent.c
@@ -27,9 +27,12 @@
  */
 
 #include "tests.h"
+#include <string.h>
 #include <stdio.h>
 #include <sys/socket.h>
+#include <arpa/inet.h>
 #include "netlink.h"
+#include "netlink_kobject_uevent.h"
 
 static const char *errstr;
 
@@ -41,6 +44,94 @@
 	return rc;
 }
 
+static void
+test_nlmsg_type_udev(const int fd)
+{
+	static const char extra[] = "12345678";
+	struct udev_monitor_netlink_header uh = {
+		.prefix = "libudev",
+		.magic = htonl(0xfeedcafe),
+		.header_size = sizeof(uh),
+		.properties_off = 40,
+		.properties_len = 299,
+		.filter_subsystem_hash = htonl(0xc370b302),
+		.filter_devtype_hash = htonl(0x10800000),
+		.filter_tag_bloom_hi = htonl(0x2000400),
+		.filter_tag_bloom_lo = htonl(0x10800000),
+	};
+	const unsigned int extra_len = LENGTH_OF(extra);
+	const unsigned int uh_len = sizeof(uh);
+
+	char *const buf = tail_alloc(uh_len + extra_len);
+	memcpy(buf + extra_len, &uh, uh_len);
+
+	sys_send(fd, buf + extra_len, uh_len);
+	printf("sendto(%d, {{prefix=\"%s\", magic=htonl(%#x)"
+	       ", header_size=%u, properties_off=%u, properties_len=%u"
+	       ", filter_subsystem_hash=htonl(%#x)"
+	       ", filter_devtype_hash=htonl(%#x)"
+	       ", filter_tag_bloom_hi=htonl(%#x)"
+	       ", filter_tag_bloom_lo=htonl(%#x)}}, %u, MSG_DONTWAIT, NULL, "
+	       "0) = %s\n"
+	       , fd, uh.prefix,
+	       ntohl(uh.magic), uh.header_size, uh.properties_off,
+	       uh.properties_len, ntohl(uh.filter_subsystem_hash),
+	       ntohl(uh.filter_devtype_hash), ntohl(uh.filter_tag_bloom_hi),
+	       ntohl(uh.filter_tag_bloom_lo), uh_len, errstr);
+
+	memcpy(buf, &uh, uh_len);
+	memcpy(buf + uh_len, extra, extra_len);
+	sys_send(fd, buf, uh_len + extra_len);
+	printf("sendto(%d, {{prefix=\"%s\", magic=htonl(%#x)"
+	       ", header_size=%u, properties_off=%u, properties_len=%u"
+	       ", filter_subsystem_hash=htonl(%#x)"
+	       ", filter_devtype_hash=htonl(%#x)"
+	       ", filter_tag_bloom_hi=htonl(%#x)"
+	       ", filter_tag_bloom_lo=htonl(%#x)}, "
+	       , fd, uh.prefix,
+	       ntohl(uh.magic), uh.header_size, uh.properties_off,
+	       uh.properties_len, ntohl(uh.filter_subsystem_hash),
+	       ntohl(uh.filter_devtype_hash), ntohl(uh.filter_tag_bloom_hi),
+	       ntohl(uh.filter_tag_bloom_lo));
+	print_quoted_memory(buf + uh_len, extra_len);
+	printf("}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       uh_len + extra_len, errstr);
+
+	memcpy(buf + extra_len + 1, &uh, uh_len - 1);
+	sys_send(fd, buf + extra_len + 1, uh_len);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(&uh, MIN(uh_len - 1, DEFAULT_STRLEN));
+	printf("%s, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       (uh_len - 1 > DEFAULT_STRLEN ? "..." : ""),
+	       uh_len, errstr);
+}
+
+static void
+test_nlmsg_type_kernel(const int fd)
+{
+	struct udev_monitor_netlink_header uh = {
+		.prefix = "change@",
+		.magic = htonl(0xfeedcafe),
+		.header_size = sizeof(uh),
+		.properties_off = 10,
+		.properties_len = 299,
+		.filter_subsystem_hash = htonl(0xfffffff),
+		.filter_devtype_hash = htonl(0x10000000),
+		.filter_tag_bloom_hi = htonl(0x2000400),
+	};
+	const unsigned int uh_len = sizeof(uh);
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct udev_monitor_netlink_header, p);
+	memcpy(p, &uh, uh_len);
+
+	sys_send(fd, p, uh_len);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(&uh, MIN(uh_len, DEFAULT_STRLEN));
+	printf("%s, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       (uh_len > DEFAULT_STRLEN ? "..." : ""),
+	       uh_len, errstr);
+}
+
 int
 main(void)
 {
@@ -48,6 +139,8 @@
 
 	int fd = create_nl_socket(NETLINK_KOBJECT_UEVENT);
 
+	test_nlmsg_type_udev(fd);
+	test_nlmsg_type_kernel(fd);
 	/* test using data that looks like a zero-length C string */
 	char *const buf = tail_alloc(DEFAULT_STRLEN + 1);
 	buf[0] = '=';
diff --git a/tests-mx32/netlink_netfilter.c b/tests-mx32/netlink_netfilter.c
index 57532f5..2842e15 100644
--- a/tests-mx32/netlink_netfilter.c
+++ b/tests-mx32/netlink_netfilter.c
@@ -88,8 +88,8 @@
 static void
 test_nlmsg_done(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	const int num = 0xabcdefad;
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(num));
 
 	TEST_NETLINK(fd, nlh0, NLMSG_DONE, NLM_F_REQUEST,
 		     sizeof(num), &num, sizeof(num),
@@ -99,13 +99,21 @@
 static void
 test_nfgenmsg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = 0x0bcd
+	};
 
 	struct nfgenmsg msg = {
 		.nfgen_family = AF_UNIX,
 		.version = NFNETLINK_V0,
 		.res_id = NFNL_SUBSYS_NFTABLES
 	};
+	char str_buf[NLMSG_ALIGN(sizeof(msg)) + 4];
+	char nla_buf[NLMSG_ALIGN(sizeof(msg)) + sizeof(nla)];
+
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN,
+					 MAX(sizeof(str_buf), sizeof(nla_buf)));
 
 	TEST_NETLINK_OBJECT_EX_(fd, nlh0,
 				NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_NEWTABLE,
@@ -150,8 +158,6 @@
 		     printf(", version=NFNETLINK_V0");
 		     printf(", res_id=htons(%d)", NFNL_SUBSYS_NFTABLES));
 
-	char str_buf[NLMSG_ALIGN(sizeof(msg)) + 4];
-
 	msg.res_id = htons(0xabcd);
 	memcpy(str_buf, &msg, sizeof(msg));
 	memcpy(str_buf + NLMSG_ALIGN(sizeof(msg)), "1234", 4);
@@ -165,12 +171,6 @@
 			    ", \"\\x31\\x32\\x33\\x34\"", 0xabcd));
 # endif /* NFNL_MSG_BATCH_BEGIN */
 
-	static const struct nlattr nla = {
-		.nla_len = sizeof(nla),
-		.nla_type = 0x0bcd
-	};
-	char nla_buf[NLMSG_ALIGN(sizeof(msg)) + sizeof(nla)];
-
 	msg.res_id = htons(NFNL_SUBSYS_NFTABLES);
 	memcpy(nla_buf, &msg, sizeof(msg));
 	memcpy(nla_buf + NLMSG_ALIGN(sizeof(msg)), &nla, sizeof(nla));
diff --git a/tests-mx32/netlink_netlink_diag.c b/tests-mx32/netlink_netlink_diag.c
index 855e404..a682f7c 100644
--- a/tests-mx32/netlink_netlink_diag.c
+++ b/tests-mx32/netlink_netlink_diag.c
@@ -3,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -55,8 +55,7 @@
 		},
 		.ndr = {
 			.sdiag_family = AF_NETLINK,
-			.sdiag_protocol = NDIAG_PROTO_ALL,
-			.ndiag_show = NDIAG_SHOW_MEMINFO
+			.sdiag_protocol = NDIAG_PROTO_ALL
 		}
 	};
 	struct iovec iov = {
diff --git a/tests-mx32/netlink_protocol.c b/tests-mx32/netlink_protocol.c
index be1a652..47f0e92 100644
--- a/tests-mx32/netlink_protocol.c
+++ b/tests-mx32/netlink_protocol.c
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2014-2017 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -125,7 +126,8 @@
 		struct req req1;
 		char padding[NLMSG_ALIGN(sizeof(struct req)) - sizeof(struct req)];
 		struct req req2;
-	} *const reqs = tail_alloc(sizeof(*reqs));
+	};
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct reqs, reqs);
 	memcpy(&reqs->req1, &c_req, sizeof(c_req));
 	memcpy(&reqs->req2, &c_req, sizeof(c_req));
 
@@ -144,7 +146,7 @@
 	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}, \"\\x61\\x62\\x63\\x64\"}"
-	       ", %p], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", ... /* %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));
@@ -203,7 +205,7 @@
 {
 	struct nlmsgerr *err;
 	struct nlmsghdr *nlh;
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(*err) + 4);
 	long rc;
 
 	/* error message without enough room for the error code */
@@ -318,9 +320,9 @@
 test_nlmsg_done(const int fd)
 {
 	struct nlmsghdr *nlh;
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
 	const int num = 0xfacefeed;
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(num));
+	long rc;
 
 	/* NLMSG_DONE message without enough room for an integer payload */
 	nlh = nlh0;
diff --git a/tests-mx32/netlink_route.c b/tests-mx32/netlink_route.c
index a1c7d1f..a3fbac9 100644
--- a/tests-mx32/netlink_route.c
+++ b/tests-mx32/netlink_route.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -143,8 +144,8 @@
 static void
 test_nlmsg_done(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	const int num = 0xabcdefad;
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(num));
 
 	TEST_NETLINK(fd, nlh0, NLMSG_DONE, NLM_F_REQUEST,
 		     sizeof(num), &num, sizeof(num),
@@ -154,10 +155,11 @@
 static void
 test_rtnl_unspec(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	uint8_t family = 0;
+	char buf[sizeof(family) + 4];
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(buf));
 
 	/* unspecified family only */
-	uint8_t family = 0;
 	TEST_NETLINK_(fd, nlh0,
 		      0xffff, "0xffff /* RTM_??? */",
 		      NLM_F_REQUEST, "NLM_F_REQUEST",
@@ -180,7 +182,6 @@
 		      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);
@@ -204,7 +205,6 @@
 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,
@@ -212,6 +212,7 @@
 		.ifi_flags = IFF_UP,
 		.ifi_change = 0xfabcdeba
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(ifinfo));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETLINK, ifinfo,
 		      printf("{ifi_family=AF_UNIX"),
@@ -225,7 +226,6 @@
 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,
@@ -233,6 +233,7 @@
 		.ifa_scope = RT_SCOPE_UNIVERSE,
 		.ifa_index = ifindex_lo()
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDR, msg,
 		      printf("{ifa_family=AF_UNIX"),
@@ -246,7 +247,6 @@
 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,
@@ -258,6 +258,7 @@
 		.rtm_type = RTN_LOCAL,
 		.rtm_flags = RTM_F_NOTIFY
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETROUTE, msg,
 		      printf("{rtm_family=AF_UNIX"),
@@ -275,7 +276,6 @@
 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,
@@ -285,6 +285,7 @@
 		.rtm_type = FR_ACT_TO_TBL,
 		.rtm_flags = FIB_RULE_INVERT
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETRULE, msg,
 		      printf("{family=AF_UNIX"),
@@ -301,7 +302,6 @@
 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(),
@@ -309,6 +309,7 @@
 		.ndm_flags = NTF_PROXY,
 		.ndm_type = RTN_UNSPEC
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETNEIGH, msg,
 		      printf("{ndm_family=AF_UNIX"),
@@ -321,10 +322,10 @@
 static void
 test_rtnl_neightbl(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct ndtmsg msg = {
 		.ndtm_family = AF_NETLINK
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETNEIGHTBL, NLM_F_REQUEST,
@@ -335,7 +336,6 @@
 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(),
@@ -343,6 +343,7 @@
 		.tcm_parent = 0xafbcadab,
 		.tcm_info = 0xbcaedafa
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETQDISC, msg,
 		      printf("{tcm_family=AF_UNIX"),
@@ -356,10 +357,10 @@
 static void
 test_rtnl_tca(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct tcamsg msg = {
 		.tca_family = AF_INET
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETACTION, NLM_F_REQUEST,
@@ -371,7 +372,6 @@
 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,
@@ -379,6 +379,7 @@
 		.ifal_index = ifindex_lo(),
 		.ifal_seq = 0xfadcdafb
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDRLABEL, msg,
 		      printf("{ifal_family=AF_UNIX"),
@@ -394,11 +395,11 @@
 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
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETDCB, msg,
 		      printf("{dcb_family=AF_UNIX"),
@@ -410,10 +411,10 @@
 static void
 test_rtnl_netconf(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct netconfmsg msg = {
 		.ncm_family = AF_INET
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETNETCONF, NLM_F_REQUEST,
@@ -426,11 +427,11 @@
 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()
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETMDB, msg,
 		      printf("{family=AF_UNIX"),
@@ -442,10 +443,10 @@
 static void
 test_rtnl_nsid(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct rtgenmsg msg = {
 		.rtgen_family = AF_UNIX
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETNSID, NLM_F_REQUEST,
diff --git a/tests-mx32/netlink_selinux.c b/tests-mx32/netlink_selinux.c
index 2d76822..57cf8a5 100644
--- a/tests-mx32/netlink_selinux.c
+++ b/tests-mx32/netlink_selinux.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -53,7 +54,7 @@
 static void
 test_selnl_msg_unspec(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, 4);
 
 	TEST_NETLINK_(fd, nlh0,
 		      0xffff, "0xffff /* SELNL_MSG_??? */",
@@ -65,11 +66,11 @@
 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
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
+
 	TEST_NETLINK_OBJECT(fd, nlh0,
 			    SELNL_MSG_SETENFORCE, NLM_F_REQUEST, msg,
 			    PRINT_FIELD_D("{", msg, val);
@@ -79,11 +80,11 @@
 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
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
+
 	TEST_NETLINK_OBJECT(fd, nlh0,
 			    SELNL_MSG_POLICYLOAD, NLM_F_REQUEST, msg,
 			    PRINT_FIELD_U("{", msg, seqno);
diff --git a/tests-mx32/netlink_sock_diag.c b/tests-mx32/netlink_sock_diag.c
index c2ebf12..880069f 100644
--- a/tests-mx32/netlink_sock_diag.c
+++ b/tests-mx32/netlink_sock_diag.c
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -127,10 +127,11 @@
 static void
 test_odd_family_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	uint8_t family = 0;
+	char buf[sizeof(family) + 4];
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(buf));
 
 	/* unspecified family only */
-	uint8_t family = 0;
 	TEST_NETLINK(fd, nlh0,
 		     SOCK_DIAG_BY_FAMILY,
 		     NLM_F_REQUEST,
@@ -153,7 +154,6 @@
 		     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);
@@ -177,10 +177,11 @@
 static void
 test_odd_family_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	uint8_t family = 0;
+	char buf[sizeof(family) + 4];
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(buf));
 
 	/* unspecified family only */
-	uint8_t family = 0;
 	TEST_NETLINK(fd, nlh0,
 		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
 		     sizeof(family), &family, sizeof(family),
@@ -200,7 +201,6 @@
 		     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);
@@ -222,7 +222,6 @@
 static void
 test_unix_diag_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct unix_diag_req req = {
 		.sdiag_family = AF_UNIX,
 		.sdiag_protocol = 253,
@@ -231,6 +230,7 @@
 		.udiag_show = UDIAG_SHOW_NAME,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
 		       printf("{sdiag_family=AF_UNIX"),
@@ -245,7 +245,6 @@
 static void
 test_unix_diag_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct unix_diag_msg msg = {
 		.udiag_family = AF_UNIX,
 		.udiag_type = SOCK_STREAM,
@@ -253,6 +252,7 @@
 		.udiag_ino = 0xfacefeed,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
 		       printf("{udiag_family=AF_UNIX"),
@@ -266,7 +266,6 @@
 static void
 test_netlink_diag_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct netlink_diag_req req = {
 		.sdiag_family = AF_NETLINK,
 		.sdiag_protocol = NDIAG_PROTO_ALL,
@@ -274,6 +273,7 @@
 		.ndiag_show = NDIAG_SHOW_MEMINFO,
 		.ndiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
 		       printf("{sdiag_family=AF_NETLINK"),
@@ -298,7 +298,6 @@
 static void
 test_netlink_diag_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct netlink_diag_msg msg = {
 		.ndiag_family = AF_NETLINK,
 		.ndiag_type = SOCK_RAW,
@@ -310,6 +309,7 @@
 		.ndiag_ino = 0xdaeefacd,
 		.ndiag_cookie = { 0xbadc0ded, 0xdeadbeef }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
 		       printf("{ndiag_family=AF_NETLINK"),
@@ -327,7 +327,6 @@
 static void
 test_packet_diag_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct packet_diag_req req = {
 		.sdiag_family = AF_PACKET,
 		.sdiag_protocol = ETH_P_LOOP,
@@ -335,6 +334,7 @@
 		.pdiag_show = PACKET_SHOW_INFO,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
 		       printf("{sdiag_family=AF_PACKET"),
@@ -348,7 +348,6 @@
 static void
 test_packet_diag_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct packet_diag_msg msg = {
 		.pdiag_family = AF_PACKET,
 		.pdiag_type = SOCK_STREAM,
@@ -356,6 +355,7 @@
 		.pdiag_ino = 0xfacefeed,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
 		       printf("{pdiag_family=AF_PACKET"),
@@ -371,7 +371,6 @@
 {
 	const char address[] = "12.34.56.78";
 	const char address6[] = "12:34:56:78:90:ab:cd:ef";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
@@ -384,6 +383,7 @@
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -435,7 +435,6 @@
 test_inet_diag_req(const int fd)
 {
 	const char address[] = "12.34.56.78";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_req req = {
 		.idiag_family = AF_INET,
 		.idiag_src_len = 0xde,
@@ -450,6 +449,7 @@
 		.idiag_states = 1 << TCP_LAST_ACK,
 		.idiag_dbs = 0xfacefeed,
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -479,7 +479,6 @@
 test_inet_diag_req_v2(const int fd)
 {
 	const char address[] = "87.65.43.21";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
@@ -492,6 +491,7 @@
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -519,7 +519,6 @@
 test_inet_diag_msg(const int fd)
 {
 	const char address[] = "11.22.33.44";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_msg msg = {
 		.idiag_family = AF_INET,
 		.idiag_state = TCP_LISTEN,
@@ -537,6 +536,7 @@
 		.idiag_uid = 0xdecefaeb,
 		.idiag_inode = 0xbadc0ded,
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
@@ -570,7 +570,6 @@
 test_smc_diag_req(const int fd)
 {
 	const char address[] = "43.21.56.78";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct smc_diag_req req = {
 		.diag_family = AF_SMC,
 		.diag_ext = 1 << (SMC_DIAG_CONNINFO - 1),
@@ -581,6 +580,7 @@
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded },
 		},
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -606,7 +606,6 @@
 test_smc_diag_msg(const int fd)
 {
 	const char address[] = "34.87.12.90";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct smc_diag_msg msg = {
 		.diag_family = AF_SMC,
 		.diag_state = SMC_ACTIVE,
@@ -621,6 +620,7 @@
 		.diag_uid = 0xadcdfafc,
 		.diag_inode = 0xbadc0ded,
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
diff --git a/tests-mx32/nlattr.c b/tests-mx32/nlattr.c
index 41923c0..8556f68 100644
--- a/tests-mx32/nlattr.c
+++ b/tests-mx32/nlattr.c
@@ -2,7 +2,7 @@
  * Check decoding of netlink attribute.
  *
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -172,7 +172,7 @@
 	       ", 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}, %p]}, %u"
+	       ", nla_type=UNIX_DIAG_NAME}, ... /* %p */]}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, NLA_HDRLEN, nla + 1, msg_len, sprintrc(rc));
 
diff --git a/tests-mx32/nlattr_br_port_msg.c b/tests-mx32/nlattr_br_port_msg.c
index a2a4792..d339414 100644
--- a/tests-mx32/nlattr_br_port_msg.c
+++ b/tests-mx32/nlattr_br_port_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -69,7 +69,7 @@
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 
 	const unsigned int hdrlen = sizeof(struct br_port_msg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_crypto_user_alg.c b/tests-mx32/nlattr_crypto_user_alg.c
index 2482b33..b8ceba6 100644
--- a/tests-mx32/nlattr_crypto_user_alg.c
+++ b/tests-mx32/nlattr_crypto_user_alg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -72,7 +72,12 @@
 
 	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));
+	/*
+	 * There are also other structures, but they are not bigger than
+	 * DEFAULT_STRLEN so far.
+	 */
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN + DEFAULT_STRLEN);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_dcbmsg.c b/tests-mx32/nlattr_dcbmsg.c
index cd63bb6..b6eb772 100644
--- a/tests-mx32/nlattr_dcbmsg.c
+++ b/tests-mx32/nlattr_dcbmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,7 +67,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct dcbmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_fib_rule_hdr.c b/tests-mx32/nlattr_fib_rule_hdr.c
index 394ab10..96ebadf 100644
--- a/tests-mx32/nlattr_fib_rule_hdr.c
+++ b/tests-mx32/nlattr_fib_rule_hdr.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -34,12 +34,24 @@
 # include <inttypes.h>
 # include "test_nlattr.h"
 # include <linux/fib_rules.h>
+# include <linux/in.h>
 # include <linux/ip.h>
 # include <linux/rtnetlink.h>
 
 #define FRA_TUN_ID 12
 #define FRA_TABLE 15
 #define FRA_UID_RANGE 20
+#define FRA_PROTOCOL 21
+#define FRA_IP_PROTO 22
+#define FRA_SPORT_RANGE 23
+#define FRA_DPORT_RANGE 24
+
+# ifndef HAVE_STRUCT_FIB_RULE_PORT_RANGE
+struct fib_rule_port_range {
+	uint16_t start;
+	uint16_t end;
+};
+# endif /* HAVE_STRUCT_FIB_RULE_PORT_RANGE */
 
 static void
 init_rtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
@@ -80,7 +92,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct rtmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 8);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
@@ -125,6 +137,62 @@
 			   printf("htobe64(%" PRIu64 ")", be64toh(tun_id)));
 #endif
 
+	uint8_t proto;
+
+	static const struct {
+		uint8_t arg;
+		const char *str;
+	} proto_args[] = {
+		{ ARG_STR(RTPROT_UNSPEC) },
+		{ 5, "0x5 /* RTPROT_??? */" },
+		{ 17, "RTPROT_MROUTED" },
+		{ 42, "RTPROT_BABEL" },
+		{ 43, "0x2b /* RTPROT_??? */" },
+		{ ARG_STR(0xde) " /* RTPROT_??? */" },
+	};
+
+	for (unsigned i = 0; i < ARRAY_SIZE(proto_args); i++) {
+		proto = proto_args[i].arg;
+		TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				   init_rtmsg, print_rtmsg,
+				   FRA_PROTOCOL, pattern, proto,
+				   printf("%s", proto_args[i].str));
+	}
+
+	static const struct {
+		uint8_t arg;
+		const char *str;
+	} ipproto_args[] = {
+		{ ARG_STR(IPPROTO_TCP) },
+		{ 254, "0xfe /* IPPROTO_??? */" },
+		{ ARG_STR(IPPROTO_RAW) },
+	};
+
+	for (unsigned i = 0; i < ARRAY_SIZE(ipproto_args); i++) {
+		proto = ipproto_args[i].arg;
+		TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				   init_rtmsg, print_rtmsg,
+				   FRA_IP_PROTO, pattern, proto,
+				   printf("%s", ipproto_args[i].str));
+	}
+
+	static const struct fib_rule_port_range prange = {
+		.start = 0xabcd,
+		.end = 0xfeed,
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_SPORT_RANGE, pattern, prange,
+			   PRINT_FIELD_U("{", prange, start);
+			   PRINT_FIELD_U(", ", prange, end);
+			   printf("}"));
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_DPORT_RANGE, pattern, prange,
+			   PRINT_FIELD_U("{", prange, start);
+			   PRINT_FIELD_U(", ", prange, end);
+			   printf("}"));
+
 	puts("+++ exited with 0 +++");
 	return 0;
 }
diff --git a/tests-mx32/nlattr_ifaddrlblmsg.c b/tests-mx32/nlattr_ifaddrlblmsg.c
index 6003634..53a928d 100644
--- a/tests-mx32/nlattr_ifaddrlblmsg.c
+++ b/tests-mx32/nlattr_ifaddrlblmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -69,7 +69,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ifaddrlblmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_ifaddrmsg.c b/tests-mx32/nlattr_ifaddrmsg.c
index 93fbef1..c71ebb1 100644
--- a/tests-mx32/nlattr_ifaddrmsg.c
+++ b/tests-mx32/nlattr_ifaddrmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -83,9 +83,23 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	static const char address4[] = "12.34.56.78";
+	static const char address6[] = "12:34:56:78:90:ab:cd:ef";
+	static const struct ifa_cacheinfo ci = {
+		.ifa_prefered = 0xabcdefac,
+		.ifa_valid = 0xbcdadbca,
+		.cstamp = 0xcdabedba,
+		.tstamp = 0xdebabdac
+	};
+
+	struct in_addr a4;
+	struct in6_addr a6;
+	const uint32_t ifa_flags = IFA_F_SECONDARY | IFA_F_PERMANENT;
+
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ifaddrmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + MAX(sizeof(ci), sizeof(a6)));
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
@@ -106,8 +120,6 @@
 		    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");
@@ -118,8 +130,6 @@
 			   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");
@@ -129,12 +139,6 @@
 			   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,
@@ -144,7 +148,6 @@
 			   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,
diff --git a/tests-mx32/nlattr_ifinfomsg.c b/tests-mx32/nlattr_ifinfomsg.c
index 1fff52c..71b1bab 100644
--- a/tests-mx32/nlattr_ifinfomsg.c
+++ b/tests-mx32/nlattr_ifinfomsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -46,6 +46,7 @@
 # define IFLA_VF_PORTS 24
 #endif
 #define IFLA_LINK_NETNSID 37
+#define IFLA_EVENT 44
 
 #ifndef IFLA_INFO_KIND
 # define IFLA_INFO_KIND 1
@@ -89,28 +90,6 @@
 {
 	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,
@@ -136,6 +115,29 @@
 		.rx_compressed = 0xdeffadbd,
 		.tx_compressed = 0xefdadfab
 	};
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(st));
+
+	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));
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_ifinfomsg, print_ifinfomsg,
 			   IFLA_STATS, pattern, st,
@@ -343,6 +345,22 @@
 		    printf("{nla_len=%u, nla_type=IFLA_VF_PORT}",
 			   nla.nla_len));
 
+	static const struct {
+		uint32_t val;
+		const char *str;
+	} ifla_events[] = {
+		{ 0, "IFLA_EVENT_NONE" },
+		{ 6, "IFLA_EVENT_BONDING_OPTIONS" },
+		{ ARG_STR(0x7) " /* IFLA_EVENT_??? */" },
+		{ ARG_STR(0xdeadfeed) " /* IFLA_EVENT_??? */" },
+	};
+	for (size_t i = 0; i < ARRAY_SIZE(ifla_events); i++) {
+		TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				   init_ifinfomsg, print_ifinfomsg,
+				   IFLA_EVENT, pattern, ifla_events[i].val,
+				   printf("%s", ifla_events[i].str));
+	}
+
 	puts("+++ exited with 0 +++");
 	return 0;
 }
diff --git a/tests-mx32/nlattr_ifla.h b/tests-mx32/nlattr_ifla.h
new file mode 100644
index 0000000..6989225
--- /dev/null
+++ b/tests-mx32/nlattr_ifla.h
@@ -0,0 +1,78 @@
+/*
+ * netlink attribute ifinfomsg common code.
+ *
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (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_TESTS_NLATTR_IFLA_H
+#define STRACE_TESTS_NLATTR_IFLA_H
+
+#include "tests.h"
+
+#ifndef IFLA_ATTR
+# error "Please define IFLA_ATTR before including this file"
+#endif
+
+static 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_ATTR
+	);
+}
+
+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=" STRINGIFY_VAL(IFLA_ATTR) "}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+#endif /* STRACE_TESTS_NLATTR_IFLA_H */
diff --git a/tests-mx32/nlattr_ifla_af_spec.c b/tests-mx32/nlattr_ifla_af_spec.c
new file mode 100644
index 0000000..24f55af
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_af_spec.c
@@ -0,0 +1,322 @@
+/*
+ * IFLA_AF_SPEC netlink attribute decoding check.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <inttypes.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>
+
+#if !HAVE_DECL_IFLA_AF_SPEC
+enum { IFLA_AF_SPEC = 26 };
+#endif
+
+#define XLAT_MACROS_ONLY
+# include "xlat/rtnl_ifla_af_spec_inet_attrs.h"
+# include "xlat/rtnl_ifla_af_spec_inet6_attrs.h"
+#undef XLAT_MACROS_ONLY
+
+#ifndef HAVE_STRUCT_IFLA_CACHEINFO
+struct ifla_cacheinfo {
+	uint32_t max_reasm_len;
+	uint32_t tstamp;
+	uint32_t reachable_time;
+	uint32_t retrans_time;
+};
+#endif
+
+#define IFLA_ATTR IFLA_AF_SPEC
+#include "nlattr_ifla.h"
+
+#define AF_SPEC_FUNCS(family_)						\
+	static void							\
+	init_##family_##_msg(struct nlmsghdr *const nlh,		\
+			     const unsigned int msg_len)		\
+	{								\
+		init_ifinfomsg(nlh, msg_len);				\
+									\
+		struct nlattr *nla = NLMSG_ATTR(nlh, hdrlen);		\
+		nla += 1;						\
+		SET_STRUCT(struct nlattr, nla,				\
+			.nla_len = msg_len - NLMSG_SPACE(hdrlen)	\
+				  - NLA_HDRLEN,				\
+			.nla_type = family_,				\
+		);							\
+	}								\
+									\
+	static void							\
+	print_##family_##_msg(const unsigned int msg_len)		\
+	{								\
+		print_ifinfomsg(msg_len);				\
+		printf(", {{nla_len=%u, nla_type=" #family_ "}",	\
+		       msg_len - NLMSG_SPACE(hdrlen) - NLA_HDRLEN);	\
+	}								\
+	/* end of AF_SPEC_FUNCS definition */
+
+AF_SPEC_FUNCS(AF_INET)
+AF_SPEC_FUNCS(AF_INET6)
+
+static void
+print_arr_val(uint32_t *val, size_t idx, const char *idx_str)
+{
+	if (idx_str)
+		printf("[%s] = ", idx_str);
+	else
+		printf("[%zu] = ", idx);
+
+	printf("%d", *val);
+}
+
+static void
+print_arr_uval(uint64_t *val, size_t idx, const char *idx_str)
+{
+	if (idx_str)
+		printf("[%s] = ", idx_str);
+	else
+		printf("[%zu] = ", idx);
+
+	printf("%" PRIu64, *val);
+}
+
+static void
+print_inet_conf_val(uint32_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"IPV4_DEVCONF_FORWARDING-1",
+		"IPV4_DEVCONF_MC_FORWARDING-1",
+	};
+
+	print_arr_val(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+
+static void
+print_inet6_conf_val(uint32_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"DEVCONF_FORWARDING",
+		"DEVCONF_HOPLIMIT",
+	};
+
+	print_arr_val(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+static void
+print_inet6_stats_val(uint64_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"IPSTATS_MIB_NUM",
+		"IPSTATS_MIB_INPKTS",
+	};
+
+	print_arr_uval(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+static void
+print_icmp6_stats_val(uint64_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"ICMP6_MIB_NUM",
+		"ICMP6_MIB_INMSGS",
+		"ICMP6_MIB_INERRORS",
+		"ICMP6_MIB_OUTMSGS",
+		"ICMP6_MIB_OUTERRORS",
+		"ICMP6_MIB_CSUMERRORS",
+		"6 /* ICMP6_MIB_??? */",
+	};
+
+	print_arr_uval(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+int
+main(void)
+{
+	static const uint8_t unknown_msg[] = { 0xab, 0xac, 0xdb, 0xcd };
+
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 3 * NLA_HDRLEN + 256);
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+
+	/* unknown AF_* */
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  AF_UNIX, pattern, unknown_msg,
+				  printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET_msg, print_AF_INET_msg,
+				      0, "IFLA_INET_UNSPEC", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET_msg, print_AF_INET_msg,
+				      2, "0x2 /* IFLA_INET_??? */", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET: IFLA_INET_CONF */
+	uint32_t inet_conf_vals[] = { 0xdeadc0de, 0xda7aface };
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET_msg, print_AF_INET_msg,
+				    IFLA_INET_CONF, pattern,
+				    inet_conf_vals, 2, print_inet_conf_val);
+
+	/* AF_INET6 */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      0, "IFLA_INET6_UNSPEC", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      9, "0x9 /* IFLA_INET6_??? */", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET6: IFLA_INET6_FLAGS */
+	static const struct {
+		uint32_t flags;
+		const char *str;
+	} inet6_flags[] = {
+		{ 0xf, "0xf /* IF_??? */" },
+		{ 0x10, "IF_RS_SENT" },
+		{ 0xc0, "IF_RA_MANAGED|IF_RA_OTHERCONF" },
+		{ 0xdeadc0de, "IF_RS_SENT|IF_RA_MANAGED|IF_RA_OTHERCONF"
+			      "|IF_READY|0x5eadc00e" },
+	};
+
+	for (size_t i = 0; i < ARRAY_SIZE(inet6_flags); i++) {
+		TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+					      init_AF_INET6_msg,
+					      print_AF_INET6_msg,
+					      1, "IFLA_INET6_FLAGS", pattern,
+					      inet6_flags[i].flags,
+					      print_quoted_hex, 2,
+					      printf("%s", inet6_flags[i].str));
+	}
+
+	/* AF_INET6: IFLA_INET6_CONF */
+	uint32_t inet6_conf_vals[] = { 0xdeadc0de, 0xda7aface };
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET6_msg, print_AF_INET6_msg,
+				    IFLA_INET6_CONF, pattern,
+				    inet6_conf_vals, 2, print_inet6_conf_val);
+
+	/* AF_INET6: IFLA_INET6_STATS */
+	uint64_t inet6_stats_vals[] = { 0xdeadc0deda7aface, 0xdec0deedbadc0ded };
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET6_msg, print_AF_INET6_msg,
+				    IFLA_INET6_STATS, pattern,
+				    inet6_stats_vals, 2, print_inet6_stats_val);
+
+	/* AF_INET6: IFLA_INET6_MCAST */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      4, "IFLA_INET6_MCAST", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET6: IFLA_INET6_CACHEINFO */
+	static const struct ifla_cacheinfo ci = {
+		0xbadc0ded, 0xfacebeef, 0xdecafeed, 0xdeadfeed,
+	};
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      5, "IFLA_INET6_CACHEINFO", pattern,
+				      ci, print_quoted_hex, 2,
+				      PRINT_FIELD_U("{", ci, max_reasm_len);
+				      PRINT_FIELD_U(", ", ci, tstamp);
+				      PRINT_FIELD_U(", ", ci, reachable_time);
+				      PRINT_FIELD_U(", ", ci, retrans_time);
+				      printf("}"));
+
+	/* AF_INET6: IFLA_INET6_ICMP6STATS */
+	uint64_t icmp6_stats_vals[] = {
+		0xdeadc0deda7aface, 0xdec0deedbadc0ded, 0xfacebeefdeadfeed,
+		0xdeadc0deda7afacd, 0xdec0deedbadc0dee, 0xfacebeefdeadfeef,
+		0xdeadc0deda7afacc
+	};
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET6_msg, print_AF_INET6_msg,
+				    IFLA_INET6_ICMP6STATS, pattern,
+				    icmp6_stats_vals, 2, print_icmp6_stats_val);
+
+	/* AF_INET6: IFLA_INET6_TOKEN */
+	uint8_t inet6_addr[16] = {
+		0xba, 0xdc, 0x0d, 0xed, 0xfa, 0xce, 0xbe, 0xef,
+		0xde, 0xca, 0xfe, 0xed, 0xde, 0xad, 0xfe, 0xed,
+	};
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      7, "IFLA_INET6_TOKEN", pattern,
+				      inet6_addr, print_quoted_hex, 2,
+				      printf("badc:ded:face:beef:deca:feed"
+					     ":dead:feed"));
+
+	/* AF_INET6: IFLA_INET6_ */
+	static const struct {
+		uint8_t flags;
+		const char *str;
+	} agms[] = {
+		{ 0x0, "IN6_ADDR_GEN_MODE_EUI64" },
+		{ 0x3, "IN6_ADDR_GEN_MODE_RANDOM" },
+		{ 0x4, "0x4 /* IN6_ADDR_GEN_MODE_??? */" },
+		{ 0xff, "0xff /* IN6_ADDR_GEN_MODE_??? */" },
+	};
+
+	for (size_t i = 0; i < ARRAY_SIZE(agms); i++) {
+		TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+					      init_AF_INET6_msg,
+					      print_AF_INET6_msg,
+					      8, "IFLA_INET6_ADDR_GEN_MODE",
+					      pattern, agms[i].flags,
+					      print_quoted_hex, 2,
+					      printf("%s", agms[i].str));
+	}
+
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_ifla_af_spec.gen.test b/tests-mx32/nlattr_ifla_af_spec.gen.test
new file mode 100755
index 0000000..601eeb2
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_af_spec.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_af_spec +netlink_sock_diag.test ); do not edit.
+set -- 
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifla_brport.c b/tests-mx32/nlattr_ifla_brport.c
index ae7c9da..1968426 100644
--- a/tests-mx32/nlattr_ifla_brport.c
+++ b/tests-mx32/nlattr_ifla_brport.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,65 +38,35 @@
 #endif
 #include <linux/rtnetlink.h>
 
+#if !HAVE_DECL_IFLA_PROTINFO
+enum { IFLA_PROTINFO = 12 };
+#endif
+
 #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));
-}
+#define IFLA_ATTR IFLA_PROTINFO
+#include "nlattr_ifla.h"
 
 int
 main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	const uint16_t u16 = 0xabcd;
+	const uint64_t u64 = 0xabcdedeeefeafeab;
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN * 2 + sizeof(u64));
 
 	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,
diff --git a/tests-mx32/nlattr_ifla_linkinfo.c b/tests-mx32/nlattr_ifla_linkinfo.c
new file mode 100644
index 0000000..1bf1bef
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_linkinfo.c
@@ -0,0 +1,711 @@
+/*
+ * IFLA_LINKINFO netlink attribute decoding check.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <inttypes.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <arpa/inet.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 XLAT_MACROS_ONLY
+# include <xlat/rtnl_link_attrs.h>
+# include <xlat/rtnl_ifla_info_attrs.h>
+#undef XLAT_MACROS_ONLY
+
+#define IFLA_ATTR IFLA_LINKINFO
+#include "nlattr_ifla.h"
+
+#define COMMA ,
+#define TEST_UNKNOWN_TUNNELS(fd_, nlh0_, objtype_, objtype_str_,	\
+			     obj_, objsz_, arrstrs_, ...)		\
+	do {								\
+		/* 64 is guestimate for maximum unknown type len */	\
+		char buf[8 * 2 + 64 + objsz_];				\
+		const char **arrstrs[] = arrstrs_;			\
+		const char ***arrstrs_pos = arrstrs;			\
+		const char **arrstr = *arrstrs_pos;			\
+		const char *type = NULL;				\
+									\
+		for (type = arrstr ? arrstr[0] : NULL; type && arrstr;	\
+		     type = (++arrstr)[0] ? arrstr[0]			\
+					  : (++arrstrs_pos)[0]		\
+				             ? (arrstr = arrstrs_pos[0])[0] \
+					     : NULL)			\
+		{							\
+			size_t type_len = strlen(type) + 1;		\
+									\
+			if (type_len > 64)				\
+				error_msg_and_fail("Unexpectedly long "	\
+						   "unknown type: \"%s\" " \
+						   "(length is %zu)",	\
+						   type, type_len);	\
+									\
+			struct nlattr obj_nla = {			\
+				.nla_len = NLA_HDRLEN + (objsz_),	\
+				.nla_type = (objtype_),			\
+			};						\
+									\
+			char *pos = buf;				\
+			memcpy(pos, type, type_len);			\
+			pos += NLA_ALIGN(type_len);			\
+			memcpy(pos, &obj_nla, sizeof(obj_nla));		\
+			pos += sizeof(obj_nla);				\
+			memcpy(pos, (obj_), (objsz_));			\
+									\
+			TEST_NLATTR_EX_((fd_),				\
+					(nlh0_) - hdrlen - (pos - buf),	\
+					hdrlen + NLA_HDRLEN,		\
+					init_ifinfomsg, print_ifinfomsg, \
+					IFLA_INFO_KIND, "IFLA_INFO_KIND", \
+					type_len, objsz_ + (pos - buf),	\
+					buf, objsz_ + (pos - buf),	\
+					printf("\"%s\"}", type);	\
+					printf(", {{nla_len=%zu"	\
+				               ", nla_type=%s}, ",	\
+					       (objsz_) + NLA_HDRLEN,	\
+					       (objtype_str_));		\
+									\
+					{ __VA_ARGS__; }		\
+									\
+					printf("}"));			\
+		}							\
+	} while (0)
+
+#define TEST_LINKINFO_(fd_, nlh0_, nla_type_, nla_type_str_, tuntype_,	\
+		       obj_, objsz_, pattern_, fallback_func_, ...)	\
+	do {								\
+		size_t tuntype_len = strlen(tuntype_) + 1;		\
+		char *buf = tail_alloc(NLA_ALIGN(tuntype_len)		\
+				       + NLA_HDRLEN + (objsz_));	\
+		char *pos = buf;					\
+									\
+		struct nlattr obj_nla = {				\
+			.nla_len = NLA_HDRLEN + (objsz_),		\
+			.nla_type = (nla_type_),			\
+		};							\
+									\
+		memcpy(pos, (tuntype_), tuntype_len);			\
+		pos += NLA_ALIGN(tuntype_len);				\
+		memcpy(pos, &obj_nla, sizeof(obj_nla));			\
+		pos += sizeof(obj_nla);					\
+		memcpy(pos, &(obj_), (objsz_));				\
+									\
+		if (fallback_func_ == print_quoted_hex) {		\
+			TEST_NLATTR_EX_((fd_),				\
+					(nlh0_) - NLA_HDRLEN,		\
+					hdrlen + NLA_HDRLEN,		\
+					init_ifinfomsg, print_ifinfomsg, \
+					IFLA_INFO_KIND, "IFLA_INFO_KIND", \
+					tuntype_len,			\
+					objsz_ + (pos - buf) - 1,	\
+					buf, objsz_ + (pos - buf) - 1,	\
+					printf("\"%s\"}", (tuntype_));	\
+					printf(", {{nla_len=%zu"	\
+					       ", nla_type=%s}, ",	\
+					       (objsz_) + NLA_HDRLEN,	\
+					       (nla_type_str_));	\
+					(fallback_func_)((obj_),	\
+							 (objsz_) - 1);	\
+					printf("}"));			\
+		}							\
+									\
+		TEST_NLATTR_EX_((fd_), (nlh0_) - NLA_HDRLEN,		\
+				hdrlen + NLA_HDRLEN,			\
+				init_ifinfomsg, print_ifinfomsg,	\
+				IFLA_INFO_KIND, "IFLA_INFO_KIND",	\
+				tuntype_len, objsz_ + (pos - buf),	\
+				buf, objsz_ + (pos - buf) - 1,		\
+				printf("\"%s\"}", (tuntype_));		\
+				printf(", {{nla_len=%zu, nla_type=%s}, ", \
+				       (objsz_) + NLA_HDRLEN,		\
+				       (nla_type_str_));		\
+				printf("%p}",				\
+				       RTA_DATA(NLMSG_ATTR(nlh,		\
+				       (hdrlen + NLA_HDRLEN + (pos - buf)))) \
+				       )				\
+				);					\
+									\
+		TEST_NLATTR_EX_((fd_), (nlh0_) - NLA_HDRLEN,		\
+				hdrlen + NLA_HDRLEN,			\
+				init_ifinfomsg, print_ifinfomsg,	\
+				IFLA_INFO_KIND, "IFLA_INFO_KIND",	\
+				tuntype_len, objsz_ + (pos - buf),	\
+				buf, objsz_ + (pos - buf),		\
+				printf("\"%s\"}", (tuntype_));		\
+				printf(", {{nla_len=%zu, nla_type=%s}, ", \
+				       (objsz_) + NLA_HDRLEN,		\
+				       (nla_type_str_));		\
+									\
+				{ __VA_ARGS__; }			\
+									\
+				printf("}"));				\
+	} while (0)
+
+#define TEST_LINKINFO(fd_, nlh0_, nla_type_, tuntype_,	\
+		      obj_, pattern_, fallback_func_, ...)	\
+	TEST_LINKINFO_((fd_), (nlh0_), nla_type_, #nla_type_, (tuntype_), \
+		       (obj_), sizeof(obj_), pattern_, fallback_func_,	\
+		       __VA_ARGS__)
+
+#define TEST_NESTED_LINKINFO(fd_, nlh0_,				\
+			     nla_type_, nla_type_str_, tuntype_,	\
+			     subnla_type_, subnla_type_str_,		\
+			     obj_, pattern_, ...)			\
+	do {								\
+		size_t tuntype_len = strlen(tuntype_) + 1;		\
+		struct {						\
+			size_t sz;					\
+			const char *str;				\
+		} attrs[] = { __VA_ARGS__ };				\
+		size_t tunhdrlen;					\
+		size_t buflen = NLA_ALIGN(tuntype_len) + NLA_HDRLEN;	\
+		size_t attrsz = 0;					\
+									\
+		for (size_t i = 0; i < ARRAY_SIZE(attrs); i++)		\
+			attrsz += NLA_HDRLEN + NLA_ALIGN(attrs[i].sz);	\
+									\
+		buflen += attrsz;					\
+									\
+		char *buf = tail_alloc(buflen);				\
+		char *pos = buf;					\
+									\
+		struct nlattr nla = {					\
+			.nla_len = NLA_HDRLEN + attrsz,			\
+			.nla_type = (nla_type_),			\
+		};							\
+									\
+		memcpy(pos, (tuntype_), tuntype_len);			\
+		pos += NLA_ALIGN(tuntype_len);				\
+		memcpy(pos, &nla, sizeof(nla));				\
+		pos += sizeof(nla);					\
+									\
+		tunhdrlen = pos - buf;					\
+									\
+		nla.nla_type = subnla_type_;				\
+									\
+		for (size_t i = 0; i < ARRAY_SIZE(attrs); i++) {	\
+			nla.nla_len = NLA_HDRLEN + attrs[i].sz;		\
+			memcpy(pos, &nla, sizeof(nla));			\
+			pos += sizeof(nla);				\
+									\
+			memcpy(pos, &(obj_), MIN(sizeof(obj_), attrs[i].sz)); \
+									\
+			if (attrs[i].sz > sizeof(obj_))			\
+				memcpy(pos + sizeof(obj_),		\
+				       &(pattern_),			\
+				       attrs[i].sz - sizeof(obj_));	\
+									\
+			pos += NLA_ALIGN(attrs[i].sz);			\
+		}							\
+									\
+		TEST_NLATTR_EX_((fd_), (nlh0_) - hdrlen - tunhdrlen,	\
+				hdrlen + NLA_HDRLEN,			\
+				init_ifinfomsg, print_ifinfomsg,	\
+				IFLA_INFO_KIND, "IFLA_INFO_KIND",	\
+				tuntype_len, buflen,			\
+				buf, buflen,				\
+				printf("\"%s\"}", (tuntype_));		\
+				printf(", {{nla_len=%zu, nla_type=%s}, [", \
+				       attrsz + NLA_HDRLEN,		\
+				       (nla_type_str_));		\
+									\
+				for (size_t i = 0; i < ARRAY_SIZE(attrs); i++) \
+					printf("%s%s{nla_len=%zu"	\
+					       ", nla_type=%s}%s%s%s",	\
+					       i ? ", " : "",		\
+					       attrs[i].str ? "{": "",	\
+					       attrs[i].sz + NLA_HDRLEN, \
+					       subnla_type_str_,	\
+					       attrs[i].str ? ", ": "", \
+					       attrs[i].str ?: "",	\
+					       attrs[i].str ? "}" : ""); \
+									\
+				printf("]}"));				\
+	} while (0)
+
+int
+main(void)
+{
+	static const uint8_t unknown_msg[] = { 0xab, 0xac, 0xdb, 0xcd };
+	static const char *unsupported_tunnel_types[] = {
+		"batadv", "bond",
+		"caif", "cfhsi",
+		"dummy",
+		"erspan",
+		"geneve", "gre", "gretap", "gtp",
+		"hsr",
+		"ifb", "ip6erspan", "ip6gre", "ip6gretap", "ip6tnl",
+		"ipip", "ipoib", "ipvlan", "ipvtap",
+		"lowpan",
+		"macsec", "macvlan", "macvtap",
+		"netdevsim", "nlmon",
+		"openvswitch",
+		"ppp",
+		"rmnet",
+		"sit",
+		"team",
+		"vcan", "veth", "vlan", "vrf", "vsockmon",
+		"vti", "vti6", "vxcan", "vxlan",
+		NULL
+	};
+	static const char *unsupported_xstats_types[] = {
+		"bridge",
+		"tun",
+		NULL
+	};
+	static const char *unsupported_data_types[] = {
+		"can",
+		NULL
+	};
+
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 2 * NLA_HDRLEN + 256);
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+
+	/* unknown AF_INFO_* type */
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_INFO_UNSPEC, pattern, unknown_msg,
+			   printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+			       init_ifinfomsg, print_ifinfomsg,
+			       6, "0x6 /* IFLA_INFO_??? */", pattern,
+			       unknown_msg, print_quoted_hex, 1,
+			       printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	/* IFLA_INFO_KIND */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_ifinfomsg, print_ifinfomsg,
+				      IFLA_INFO_KIND, "IFLA_INFO_KIND", pattern,
+				      unknown_msg, print_quoted_stringn, 1,
+				      printf("\"\\253\\254\\333\\315\"..."));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_UNSPEC */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_UNSPEC, "IFLA_INFO_UNSPEC",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_KIND */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_KIND, "IFLA_INFO_KIND",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\253\\254\\333\\315\"..."));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_DATA */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_DATA, "IFLA_INFO_DATA",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	struct val_name {
+		unsigned int val;
+		const char *name;
+	};
+
+	static const uint64_t u64_val = 0xdeadc0defacefeedULL;
+	static const uint32_t u32_val = 0xbadc0dedU;
+	static const uint16_t u16_val = 0xdeed;
+	static const uint8_t  u8_val  = 0xa1;
+
+	/* bridge attrs */
+	static const struct val_name und_br_attrs[] = {
+		{ 0, "IFLA_BR_UNSPEC" },
+		{ 20, "IFLA_BR_GROUP_ADDR" },
+		{ 21, "IFLA_BR_FDB_FLUSH" },
+		{ 40, "IFLA_BR_PAD" },
+		{ 45, "0x2d /* IFLA_BR_??? */" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(und_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     und_br_attrs[k].val, und_br_attrs[k].name,
+				     unknown_msg, pattern,
+				     { 2, "\"\\xab\\xac\"" },
+				     { 4, "\"\\xab\\xac\\xdb\\xcd\"" },
+				     { 6,
+					"\"\\xab\\xac\\xdb\\xcd\\x61\\x62\"" },
+				     { 8, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\"" },
+				     { 10, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\\x65\\x66\"" });
+	}
+
+	static const struct val_name u64_br_attrs[] = {
+		{ 16, "IFLA_BR_HELLO_TIMER" },
+		{ 17, "IFLA_BR_TCN_TIMER" },
+		{ 18, "IFLA_BR_TOPOLOGY_CHANGE_TIMER" },
+		{ 19, "IFLA_BR_GC_TIMER" },
+		{ 30, "IFLA_BR_MCAST_LAST_MEMBER_INTVL" },
+		{ 31, "IFLA_BR_MCAST_MEMBERSHIP_INTVL" },
+		{ 32, "IFLA_BR_MCAST_QUERIER_INTVL" },
+		{ 33, "IFLA_BR_MCAST_QUERY_INTVL" },
+		{ 34, "IFLA_BR_MCAST_QUERY_RESPONSE_INTVL" },
+		{ 35, "IFLA_BR_MCAST_STARTUP_QUERY_INTVL" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u64_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u64_br_attrs[k].val, u64_br_attrs[k].name,
+				     u64_val, pattern,
+				     { 7, "\""
+#if WORDS_BIGENDIAN
+					"\\xde\\xad\\xc0\\xde\\xfa\\xce\\xfe"
+#else
+					"\\xed\\xfe\\xce\\xfa\\xde\\xc0\\xad"
+#endif
+					"\"" },
+				     { 8, "16045693111314087661" },
+				     { 9, "16045693111314087661" });
+	}
+
+	static const struct val_name u32_br_attrs[] = {
+		{  1, "IFLA_BR_FORWARD_DELAY" },
+		{  2, "IFLA_BR_HELLO_TIME" },
+		{  3, "IFLA_BR_MAX_AGE" },
+		{  4, "IFLA_BR_AGEING_TIME" },
+		{  5, "IFLA_BR_STP_STATE" },
+		{ 13, "IFLA_BR_ROOT_PATH_COST" },
+		{ 26, "IFLA_BR_MCAST_HASH_ELASTICITY" },
+		{ 27, "IFLA_BR_MCAST_HASH_MAX" },
+		{ 28, "IFLA_BR_MCAST_LAST_MEMBER_CNT" },
+		{ 29, "IFLA_BR_MCAST_STARTUP_QUERY_CNT" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u32_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u32_br_attrs[k].val, u32_br_attrs[k].name,
+				     u32_val, pattern,
+				     { 3, "\""
+#if WORDS_BIGENDIAN
+					"\\xba\\xdc\\x0d"
+#else
+					"\\xed\\x0d\\xdc"
+#endif
+					"\"" },
+				     { 4, "3134983661" },
+				     { 5, "3134983661" });
+	}
+
+	static const struct val_name u16_br_attrs[] = {
+		{  6, "IFLA_BR_PRIORITY" },
+		{ 12, "IFLA_BR_ROOT_PORT" },
+		{ 39, "IFLA_BR_VLAN_DEFAULT_PVID" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u16_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u16_br_attrs[k].val, u16_br_attrs[k].name,
+				     u16_val, pattern,
+				     { 1, "\""
+#if WORDS_BIGENDIAN
+					"\\xde"
+#else
+					"\\xed"
+#endif
+					"\"" },
+				     { 2, "57069" },
+				     { 3, "57069" });
+	}
+
+
+	static const struct val_name x16_br_attrs[] = {
+		{  9, "IFLA_BR_GROUP_FWD_MASK" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(x16_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     x16_br_attrs[k].val, x16_br_attrs[k].name,
+				     u16_val, pattern,
+				     { 1, "\""
+#if WORDS_BIGENDIAN
+					"\\xde"
+#else
+					"\\xed"
+#endif
+					"\"" },
+				     { 2, "0xdeed" },
+				     { 3, "0xdeed" });
+	}
+
+	static const struct val_name u8_br_attrs[] = {
+		{  7, "IFLA_BR_VLAN_FILTERING" },
+		{ 14, "IFLA_BR_TOPOLOGY_CHANGE" },
+		{ 15, "IFLA_BR_TOPOLOGY_CHANGE_DETECTED" },
+		{ 22, "IFLA_BR_MCAST_ROUTER" },
+		{ 23, "IFLA_BR_MCAST_SNOOPING" },
+		{ 24, "IFLA_BR_MCAST_QUERY_USE_IFADDR" },
+		{ 25, "IFLA_BR_MCAST_QUERIER" },
+		{ 36, "IFLA_BR_NF_CALL_IPTABLES" },
+		{ 37, "IFLA_BR_NF_CALL_IP6TABLES" },
+		{ 38, "IFLA_BR_NF_CALL_ARPTABLES" },
+		{ 41, "IFLA_BR_VLAN_STATS_ENABLED" },
+		{ 42, "IFLA_BR_MCAST_STATS_ENABLED" },
+		{ 43, "IFLA_BR_MCAST_IGMP_VERSION" },
+		{ 44, "IFLA_BR_MCAST_MLD_VERSION" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u8_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u8_br_attrs[k].val, u8_br_attrs[k].name,
+				     u8_val, pattern,
+				     { 0, NULL },
+				     { 1, "161" },
+				     { 2, "161" });
+	}
+
+	unsigned short eth_p = htons(0x88C7);
+	TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+			     8, "IFLA_BR_VLAN_PROTOCOL",
+			     eth_p, pattern,
+			     { 1, "\"\\x88\"" },
+			     { 2, "htons(ETH_P_PREAUTH)" },
+			     { 2, "htons(ETH_P_PREAUTH)" });
+
+	static const uint8_t bridge_id[]
+		= { 0xbe, 0xef, 0xfa, 0xce, 0xde, 0xc0, 0xde, 0xad };
+	static const struct val_name br_id_attrs[] = {
+		{ 10, "IFLA_BR_ROOT_ID" },
+		{ 11, "IFLA_BR_BRIDGE_ID" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(br_id_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     br_id_attrs[k].val, br_id_attrs[k].name,
+				     bridge_id, pattern,
+				     { 7, "\"\\xbe\\xef\\xfa\\xce"
+					  "\\xde\\xc0\\xde\"" },
+				     { 8, "{prio=[190, 239]"
+					  ", addr=fa:ce:de:c0:de:ad}" },
+				     { 9, "{prio=[190, 239]"
+					  ", addr=fa:ce:de:c0:de:ad}" });
+	}
+
+	/* tun attrs */
+	static const struct val_name u8_tun_attrs[] = {
+		{ 4, "IFLA_TUN_PI" },
+		{ 5, "IFLA_TUN_VNET_HDR" },
+		{ 6, "IFLA_TUN_PERSIST" },
+		{ 7, "IFLA_TUN_MULTI_QUEUE" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u8_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     u8_tun_attrs[k].val, u8_tun_attrs[k].name,
+				     u8_val, pattern,
+				     { 0, NULL },
+				     { 1, "161" },
+				     { 2, "161" });
+	}
+
+	static const struct val_name u32_tun_attrs[] = {
+		{ 8, "IFLA_TUN_NUM_QUEUES" },
+		{ 9, "IFLA_TUN_NUM_DISABLED_QUEUES" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u32_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     u32_tun_attrs[k].val,
+				     u32_tun_attrs[k].name,
+				     u32_val, pattern,
+				     { 3, "\""
+#if WORDS_BIGENDIAN
+					"\\xba\\xdc\\x0d"
+#else
+					"\\xed\\x0d\\xdc"
+#endif
+					"\"" },
+				     { 4, "3134983661" },
+				     { 5, "3134983661" });
+	}
+
+	static const struct val_name und_tun_attrs[] = {
+		{ 0,  "IFLA_TUN_UNSPEC" },
+		{ 10, "0xa /* IFLA_TUN_??? */" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(und_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     und_tun_attrs[k].val,
+				     und_tun_attrs[k].name,
+				     unknown_msg, pattern,
+				     { 2, "\"\\xab\\xac\"" },
+				     { 4, "\"\\xab\\xac\\xdb\\xcd\"" },
+				     { 6,
+					"\"\\xab\\xac\\xdb\\xcd\\x61\\x62\"" },
+				     { 8, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\"" },
+				     { 10, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\\x65\\x66\"" });
+	}
+
+	static const uint32_t minus_one = 0xffffffffU;
+	static const struct val_name uid_tun_attrs[] = {
+		{ 1, "IFLA_TUN_OWNER" },
+		{ 2, "IFLA_TUN_GROUP" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(uid_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     uid_tun_attrs[k].val,
+				     uid_tun_attrs[k].name,
+				     u32_val, pattern,
+				     { 3, "\""
+#if WORDS_BIGENDIAN
+					"\\xba\\xdc\\x0d"
+#else
+					"\\xed\\x0d\\xdc"
+#endif
+					"\"" },
+				     { 4, "3134983661" },
+				     { 5, "3134983661" });
+
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     uid_tun_attrs[k].val,
+				     uid_tun_attrs[k].name,
+				     minus_one, pattern,
+				     { 3, "\"\\xff\\xff\\xff\"" },
+				     { 4, "-1" },
+				     { 5, "-1" });
+	}
+
+	static const struct {
+		uint8_t val;
+		const char *str;
+	} tun_types[] = {
+		{ 0, "0 /* IFF_??? */"},
+		{ 1, "IFF_TUN"},
+		{ 2, "IFF_TAP"},
+		{ 3, "0x3 /* IFF_??? */"},
+		{ 0xda, "0xda /* IFF_??? */"},
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(tun_types); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     3, "IFLA_TUN_TYPE",
+				     tun_types[k].val, pattern,
+				     { 0, NULL },
+				     { 1, tun_types[k].str },
+				     { 2, tun_types[k].str });
+	}
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_XSTATS */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_XSTATS, "IFLA_INFO_XSTATS",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			     /*
+			      * can decoder decodes its data only if it's big
+			      * enough.
+			      */
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	uint32_t can_stats_data[] = {
+		0xbadc0de0, 0xbadc0de1, 0xbadc0de2, 0xbadc0de3,
+		0xbadc0de4, 0xbadc0de5,
+	};
+
+	TEST_LINKINFO(fd, nlh0, IFLA_INFO_XSTATS, "can",
+		      can_stats_data, pattern, print_quoted_hex,
+		      printf("{bus_error=3134983648"
+			     ", error_warning=3134983649"
+			     ", error_passive=3134983650"
+			     ", bus_off=3134983651"
+			     ", arbitration_lost=3134983652"
+			     ", restarts=3134983653}"));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_SLVAE_KIND */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0,
+			     IFLA_INFO_SLAVE_KIND, "IFLA_INFO_SLAVE_KIND",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\253\\254\\333\\315\"..."));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_SLAVE_DATA */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0,
+			     IFLA_INFO_SLAVE_DATA, "IFLA_INFO_SLAVE_DATA",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	/* IFLA_INFO_KIND + unknown type */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, 6, "0x6 /* IFLA_INFO_??? */",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_ifla_linkinfo.gen.test b/tests-mx32/nlattr_ifla_linkinfo.gen.test
new file mode 100755
index 0000000..816ba99
--- /dev/null
+++ b/tests-mx32/nlattr_ifla_linkinfo.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_linkinfo +netlink_sock_diag.test ); do not edit.
+set -- 
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifla_port.c b/tests-mx32/nlattr_ifla_port.c
index 61e90fe..e6cb6a4 100644
--- a/tests-mx32/nlattr_ifla_port.c
+++ b/tests-mx32/nlattr_ifla_port.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,50 +37,15 @@
 #endif
 #include <linux/rtnetlink.h>
 
-#ifndef IFLA_PORT_SELF
-# define IFLA_PORT_SELF 25
+#if !HAVE_DECL_IFLA_PORT_SELF
+enum { 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));
-}
+#define IFLA_ATTR IFLA_PORT_SELF
+#include "nlattr_ifla.h"
 
 int
 main(void)
@@ -88,7 +53,7 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 2 * NLA_HDRLEN + 8);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_ifla_xdp.c b/tests-mx32/nlattr_ifla_xdp.c
index cca5219..93149fa 100644
--- a/tests-mx32/nlattr_ifla_xdp.c
+++ b/tests-mx32/nlattr_ifla_xdp.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,63 +37,29 @@
 #endif
 #include <linux/rtnetlink.h>
 
-#ifndef IFLA_XDP
-# define IFLA_XDP 43
+#if !HAVE_DECL_IFLA_XDP
+enum { 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));
-}
+#define IFLA_ATTR IFLA_XDP
+#include "nlattr_ifla.h"
 
 int
 main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	const int32_t num = 0xabacdbcd;
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(num));
 
 	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,
diff --git a/tests-mx32/nlattr_inet_diag_msg.c b/tests-mx32/nlattr_inet_diag_msg.c
index ccc62ae..5984ee2 100644
--- a/tests-mx32/nlattr_inet_diag_msg.c
+++ b/tests-mx32/nlattr_inet_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,6 +37,18 @@
 #include <linux/inet_diag.h>
 #include <linux/sock_diag.h>
 
+static const char * const sk_meminfo_strs[] = {
+	"SK_MEMINFO_RMEM_ALLOC",
+	"SK_MEMINFO_RCVBUF",
+	"SK_MEMINFO_WMEM_ALLOC",
+	"SK_MEMINFO_SNDBUF",
+	"SK_MEMINFO_FWD_ALLOC",
+	"SK_MEMINFO_WMEM_QUEUED",
+	"SK_MEMINFO_OPTMEM",
+	"SK_MEMINFO_BACKLOG",
+	"SK_MEMINFO_DROPS",
+};
+
 static const char address[] = "10.11.12.13";
 
 static void
@@ -77,9 +89,14 @@
 }
 
 static void
-print_uint(const unsigned int *p)
+print_uint(const unsigned int *p, size_t i)
 {
-	printf("%u", *p);
+	if (i >= ARRAY_SIZE(sk_meminfo_strs))
+		printf("[%zu /* SK_MEMINFO_??? */", i);
+	else
+		printf("[%s", sk_meminfo_strs[i]);
+
+	printf("] = %u", *p);
 }
 
 int
@@ -87,19 +104,46 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
-	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	const unsigned int hdrlen = sizeof(struct inet_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 inet_diag_meminfo minfo = {
 		.idiag_rmem = 0xfadcacdb,
 		.idiag_wmem = 0xbdabcada,
 		.idiag_fmem = 0xbadbfafb,
 		.idiag_tmem = 0xfdacdadf
 	};
+	static const struct tcpvegas_info vegas = {
+		.tcpv_enabled = 0xfadcacdb,
+		.tcpv_rttcnt = 0xbdabcada,
+		.tcpv_rtt = 0xbadbfafb,
+		.tcpv_minrtt = 0xfdacdadf
+	};
+	static const struct tcp_dctcp_info dctcp = {
+		.dctcp_enabled = 0xfdac,
+		.dctcp_ce_state = 0xfadc,
+		.dctcp_alpha = 0xbdabcada,
+		.dctcp_ab_ecn = 0xbadbfafb,
+		.dctcp_ab_tot = 0xfdacdadf
+	};
+	static const struct tcp_bbr_info bbr = {
+		.bbr_bw_lo = 0xfdacdadf,
+		.bbr_bw_hi = 0xfadcacdb,
+		.bbr_min_rtt = 0xbdabcada,
+		.bbr_pacing_gain = 0xbadbfafb,
+		.bbr_cwnd_gain = 0xfdacdadf
+	};
+	static const uint32_t mem[] = { 0xaffacbad, 0xffadbcab };
+	static uint32_t bigmem[SK_MEMINFO_VARS + 1];
+	static const uint32_t mark = 0xabdfadca;
+	static const uint8_t shutdown = 0xcd;
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct inet_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN +
+					 MAX(sizeof(bigmem), DEFAULT_STRLEN));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_MEMINFO, pattern, minfo,
@@ -109,12 +153,6 @@
 			   PRINT_FIELD_U(", ", minfo, idiag_tmem);
 			   printf("}"));
 
-	static const struct tcpvegas_info vegas = {
-		.tcpv_enabled = 0xfadcacdb,
-		.tcpv_rttcnt = 0xbdabcada,
-		.tcpv_rtt = 0xbadbfafb,
-		.tcpv_minrtt = 0xfdacdadf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_VEGASINFO, pattern, vegas,
@@ -125,13 +163,6 @@
 			   printf("}"));
 
 
-	static const struct tcp_dctcp_info dctcp = {
-		.dctcp_enabled = 0xfdac,
-		.dctcp_ce_state = 0xfadc,
-		.dctcp_alpha = 0xbdabcada,
-		.dctcp_ab_ecn = 0xbadbfafb,
-		.dctcp_ab_tot = 0xfdacdadf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_DCTCPINFO, pattern, dctcp,
@@ -142,13 +173,6 @@
 			   PRINT_FIELD_U(", ", dctcp, dctcp_ab_tot);
 			   printf("}"));
 
-	static const struct tcp_bbr_info bbr = {
-		.bbr_bw_lo = 0xfdacdadf,
-		.bbr_bw_hi = 0xfadcacdb,
-		.bbr_min_rtt = 0xbdabcada,
-		.bbr_pacing_gain = 0xbadbfafb,
-		.bbr_cwnd_gain = 0xfdacdadf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_BBRINFO, pattern, bbr,
@@ -159,24 +183,16 @@
 			   PRINT_FIELD_U(", ", bbr, bbr_cwnd_gain);
 			   printf("}"));
 
-	static const uint32_t mem[] = { 0xaffacbad, 0xffadbcab };
 	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
 			  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(", ...]"));
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_inet_diag_msg, print_inet_diag_msg,
+			  INET_DIAG_SKMEMINFO, pattern, bigmem, print_uint);
 
-	static const uint32_t mark = 0xabdfadca;
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_MARK, pattern, mark,
@@ -187,7 +203,6 @@
 			   INET_DIAG_CLASS_ID, pattern, mark,
 			   printf("%u", mark));
 
-	static const uint8_t shutdown = 0xcd;
 	TEST_NLATTR(fd, nlh0, hdrlen,
 		    init_inet_diag_msg, print_inet_diag_msg, INET_DIAG_SHUTDOWN,
 		    sizeof(shutdown), &shutdown, sizeof(shutdown),
diff --git a/tests-mx32/nlattr_inet_diag_req_compat.c b/tests-mx32/nlattr_inet_diag_req_compat.c
index b0b2171..52fd53f 100644
--- a/tests-mx32/nlattr_inet_diag_req_compat.c
+++ b/tests-mx32/nlattr_inet_diag_req_compat.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -86,7 +86,7 @@
 
 	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
 	const unsigned int hdrlen = sizeof(struct inet_diag_req);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_inet_diag_req_v2.c b/tests-mx32/nlattr_inet_diag_req_v2.c
index 1e09abe..cf19c60 100644
--- a/tests-mx32/nlattr_inet_diag_req_v2.c
+++ b/tests-mx32/nlattr_inet_diag_req_v2.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -407,7 +407,10 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN +
+			sizeof(struct inet_diag_bc_op) +
+				sizeof(struct inet_diag_hostcond) +
+				sizeof(struct in6_addr) + DEFAULT_STRLEN);
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
 
 	test_inet_diag_bc_op(fd);
diff --git a/tests-mx32/nlattr_mdba_mdb_entry.c b/tests-mx32/nlattr_mdba_mdb_entry.c
index 124fe1d..61bded2 100644
--- a/tests-mx32/nlattr_mdba_mdb_entry.c
+++ b/tests-mx32/nlattr_mdba_mdb_entry.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,12 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4
+# ifdef HAVE_STRUCT_BR_MDB_ENTRY
+			- 4 + NLA_HDRLEN * 2 + sizeof(struct nlattr)
+			+ sizeof(struct br_mdb_entry)
+# endif
+			);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_mdba_router_port.c b/tests-mx32/nlattr_mdba_router_port.c
index af908cd..a6621ca 100644
--- a/tests-mx32/nlattr_mdba_router_port.c
+++ b/tests-mx32/nlattr_mdba_router_port.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -87,25 +87,27 @@
 {
 	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 ifindex = ifindex_lo();
-	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
-				  init_br_port_msg, print_br_port_msg,
-				  MDBA_ROUTER_PORT, pattern, ifindex,
-				  printf(IFINDEX_LO_STR));
-
 	const uint8_t type = MDB_RTR_TYPE_DISABLED;
 	static const struct nlattr nla = {
 		.nla_len = NLA_HDRLEN + sizeof(type),
 		.nla_type = MDBA_ROUTER_PATTR_TYPE
 	};
 	char buf[NLMSG_ALIGN(ifindex) + NLA_HDRLEN + sizeof(type)];
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(buf));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_br_port_msg, print_br_port_msg,
+				  MDBA_ROUTER_PORT, pattern, ifindex,
+				  printf(IFINDEX_LO_STR));
+
 	memcpy(buf, &ifindex, sizeof(ifindex));
 	memcpy(buf + NLMSG_ALIGN(ifindex), &nla, sizeof(nla));
 	memcpy(buf + NLMSG_ALIGN(ifindex) + NLA_HDRLEN, &type, sizeof(type));
diff --git a/tests-mx32/nlattr_ndmsg.c b/tests-mx32/nlattr_ndmsg.c
index 8538a82..aa28a57 100644
--- a/tests-mx32/nlattr_ndmsg.c
+++ b/tests-mx32/nlattr_ndmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -77,7 +77,8 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ndmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(struct nda_cacheinfo));
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_ndtmsg.c b/tests-mx32/nlattr_ndtmsg.c
index d3f1bdb..d120059 100644
--- a/tests-mx32/nlattr_ndtmsg.c
+++ b/tests-mx32/nlattr_ndtmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -68,7 +68,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ndtmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 11 * 8);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_netconfmsg.c b/tests-mx32/nlattr_netconfmsg.c
index 6866adc..f5f5993 100644
--- a/tests-mx32/nlattr_netconfmsg.c
+++ b/tests-mx32/nlattr_netconfmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,7 +66,7 @@
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 
 	const unsigned int hdrlen = sizeof(struct netconfmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_netlink_diag_msg.c b/tests-mx32/nlattr_netlink_diag_msg.c
index 76a2d19..b598899 100644
--- a/tests-mx32/nlattr_netlink_diag_msg.c
+++ b/tests-mx32/nlattr_netlink_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,7 +66,7 @@
 }
 
 static void
-print_xlong(const unsigned long *p)
+print_xlong(const unsigned long *p, size_t i)
 {
 	printf("%#lx", *p);
 }
@@ -76,27 +76,32 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
-	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	const unsigned int hdrlen = sizeof(struct netlink_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 unsigned long groups[] = {
 		(unsigned long) 0xdeadbeefbadc0dedULL,
 		(unsigned long) 0xdeadbeefbadc0dedULL
 	};
-	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
-			  init_netlink_diag_msg, print_netlink_diag_msg,
-			  NETLINK_DIAG_GROUPS, pattern, groups, print_xlong);
-
 	static const struct netlink_diag_ring ndr = {
 		.ndr_block_size = 0xfabfabdc,
 		.ndr_block_nr = 0xabcdabda,
 		.ndr_frame_size = 0xcbadbafa,
 		.ndr_frame_nr = 0xdbcafadb
 	};
+	static const uint32_t flags =
+		NDIAG_FLAG_CB_RUNNING | NDIAG_FLAG_PKTINFO;
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct netlink_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN +
+					 MAX(sizeof(groups), sizeof(ndr)));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_netlink_diag_msg, print_netlink_diag_msg,
+			  NETLINK_DIAG_GROUPS, pattern, groups, print_xlong);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_netlink_diag_msg, print_netlink_diag_msg,
 			   NETLINK_DIAG_RX_RING, pattern, ndr,
@@ -106,8 +111,6 @@
 			   PRINT_FIELD_U(", ", ndr, ndr_frame_nr);
 			   printf("}"));
 
-	static const uint32_t flags =
-		NDIAG_FLAG_CB_RUNNING | NDIAG_FLAG_PKTINFO;
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_netlink_diag_msg, print_netlink_diag_msg,
 			   NETLINK_DIAG_FLAGS, pattern, flags,
diff --git a/tests-mx32/nlattr_nlmsgerr.c b/tests-mx32/nlattr_nlmsgerr.c
index 837283c..073fde2 100644
--- a/tests-mx32/nlattr_nlmsgerr.c
+++ b/tests-mx32/nlattr_nlmsgerr.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -69,11 +69,13 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	static const uint8_t cookie[] = { 0xab, 0xfe };
+
 	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
 	const unsigned int hdrlen = sizeof(struct nlmsgerr);
-	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+			NLA_HDRLEN + sizeof(cookie));
 
-	static const uint8_t cookie[] = { 0xab, 0xfe };
 	TEST_NLATTR(fd, nlh0, hdrlen,
 		    init_nlmsgerr, print_nlmsgerr,
 		    NLMSGERR_ATTR_COOKIE,
diff --git a/tests-mx32/nlattr_packet_diag_msg.c b/tests-mx32/nlattr_packet_diag_msg.c
index 4211e20..016d052 100644
--- a/tests-mx32/nlattr_packet_diag_msg.c
+++ b/tests-mx32/nlattr_packet_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,7 +67,7 @@
 }
 
 static void
-print_packet_diag_mclist(const struct packet_diag_mclist *const dml)
+print_packet_diag_mclist(const struct packet_diag_mclist *const dml, size_t i)
 {
 	printf("{pdmc_index=" IFINDEX_LO_STR);
 	PRINT_FIELD_U(", ", *dml, pdmc_count);
@@ -84,7 +84,7 @@
 };
 
 static void
-print_sock_filter(const struct sock_filter *const f)
+print_sock_filter(const struct sock_filter *const f, size_t i)
 {
 	if (f == filter)
 		printf("BPF_STMT(BPF_LD|BPF_B|BPF_ABS"
@@ -98,13 +98,6 @@
 {
 	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,
@@ -113,16 +106,6 @@
 		.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(),
@@ -139,11 +122,6 @@
 			.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,
@@ -153,6 +131,30 @@
 		.pdr_sizeof_priv = 0xfeadeacd,
 		.pdr_features = 0xadebadea
 	};
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct packet_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN + sizeof(dml));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	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}"));
+
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_packet_diag_msg, print_packet_diag_msg,
+			  PACKET_DIAG_MCLIST, pattern, dml,
+			  print_packet_diag_mclist);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_packet_diag_msg, print_packet_diag_msg,
 			   PACKET_DIAG_RX_RING, pattern, pdr,
diff --git a/tests-mx32/nlattr_rtgenmsg.c b/tests-mx32/nlattr_rtgenmsg.c
index ceb061d..bac21ef 100644
--- a/tests-mx32/nlattr_rtgenmsg.c
+++ b/tests-mx32/nlattr_rtgenmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,13 +66,14 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct rtgenmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(nla_type_str));
 
 	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,
diff --git a/tests-mx32/nlattr_rtmsg.c b/tests-mx32/nlattr_rtmsg.c
index 5f29f0c..db02929 100644
--- a/tests-mx32/nlattr_rtmsg.c
+++ b/tests-mx32/nlattr_rtmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -81,13 +81,14 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct rtmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(nla_type_str));
 
 	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,
diff --git a/tests-mx32/nlattr_smc_diag_msg.c b/tests-mx32/nlattr_smc_diag_msg.c
index a06ad62..2e65ebd 100644
--- a/tests-mx32/nlattr_smc_diag_msg.c
+++ b/tests-mx32/nlattr_smc_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -97,13 +97,6 @@
 {
 	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,
@@ -149,6 +142,25 @@
 			.count = 0xcdedbad7
 		}
 	};
+	static const struct smc_diag_lgrinfo linfo = {
+		.lnk[0] = {
+			.link_id = 0xaf,
+			.ibport = 0xfa,
+			.ibname = "123",
+			.gid = "456",
+			.peer_gid = "789"
+		},
+		.role = SMC_CLNT
+	};
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct smc_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN +
+					 MAX(sizeof(cinfo), sizeof(linfo)));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
 
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_smc_diag_msg, print_smc_diag_msg,
@@ -170,16 +182,6 @@
 			   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,
diff --git a/tests-mx32/nlattr_tc_stats.c b/tests-mx32/nlattr_tc_stats.c
index dd76cc7..8003ed3 100644
--- a/tests-mx32/nlattr_tc_stats.c
+++ b/tests-mx32/nlattr_tc_stats.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -77,7 +77,7 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 8 * 5);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_tca_stab.c b/tests-mx32/nlattr_tca_stab.c
index de6d356..9889050 100644
--- a/tests-mx32/nlattr_tca_stab.c
+++ b/tests-mx32/nlattr_tca_stab.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,8 +36,8 @@
 #ifndef TCA_STAB
 # define TCA_STAB 8
 #endif
-#ifndef TCA_STAB_DATA
-# define TCA_STAB_DATA 2
+#if !HAVE_DECL_TCA_STAB_DATA
+enum { TCA_STAB_DATA = 2 };
 #endif
 
 const unsigned int hdrlen = sizeof(struct tcmsg);
@@ -76,7 +76,7 @@
 }
 
 static void
-print_uint16(const uint16_t *p)
+print_uint16(const uint16_t *p, size_t idx)
 {
 	printf("%u", *p);
 }
@@ -87,7 +87,11 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4
+#ifdef HAVE_STRUCT_TC_SIZESPEC
+			- 4 + sizeof(struct tc_sizespec)
+#endif
+			);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_tcamsg.c b/tests-mx32/nlattr_tcamsg.c
index 7f61153..43715d2 100644
--- a/tests-mx32/nlattr_tcamsg.c
+++ b/tests-mx32/nlattr_tcamsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -62,7 +62,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct tcamsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_tcmsg.c b/tests-mx32/nlattr_tcmsg.c
index 32ce479..da88a45 100644
--- a/tests-mx32/nlattr_tcmsg.c
+++ b/tests-mx32/nlattr_tcmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -68,7 +68,8 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct tcmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(struct tc_stats));
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests-mx32/nlattr_unix_diag_msg.c b/tests-mx32/nlattr_unix_diag_msg.c
index 2295404..180b8cd 100644
--- a/tests-mx32/nlattr_unix_diag_msg.c
+++ b/tests-mx32/nlattr_unix_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -65,7 +65,7 @@
 }
 
 static void
-print_uint(const unsigned int *p)
+print_uint(const unsigned int *p, size_t i)
 {
 	printf("%u", *p);
 }
@@ -75,17 +75,24 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
-	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	const unsigned int hdrlen = sizeof(struct unix_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 unix_diag_vfs uv = {
 		.udiag_vfs_dev = 0xabcddafa,
 		.udiag_vfs_ino = 0xbafabcda
 	};
+	static const struct unix_diag_rqlen rql = {
+		.udiag_rqueue = 0xfabdcdad,
+		.udiag_wqueue = 0xbacdadcf
+	};
+	static const uint32_t inode[] = { 0xadbcadbc, 0xfabdcdac };
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct unix_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN + sizeof(inode));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_unix_diag_msg, print_unix_diag_msg,
 			   UNIX_DIAG_VFS, pattern, uv,
@@ -95,10 +102,6 @@
 			   PRINT_FIELD_U(", ", uv, udiag_vfs_ino);
 			   printf("}"));
 
-	static const struct unix_diag_rqlen rql = {
-		.udiag_rqueue = 0xfabdcdad,
-		.udiag_wqueue = 0xbacdadcf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_unix_diag_msg, print_unix_diag_msg,
 			   UNIX_DIAG_RQLEN, pattern, rql,
@@ -106,7 +109,6 @@
 			   PRINT_FIELD_U(", ", rql, udiag_wqueue);
 			   printf("}"));
 
-	static const uint32_t inode[] = { 0xadbcadbc, 0xfabdcdac };
 	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
 			  init_unix_diag_msg, print_unix_diag_msg,
 			  UNIX_DIAG_ICONS, pattern, inode, print_uint);
diff --git a/tests-mx32/nsyscalls.c b/tests-mx32/nsyscalls.c
index 9f74867..681fb31 100644
--- a/tests-mx32/nsyscalls.c
+++ b/tests-mx32/nsyscalls.c
@@ -86,14 +86,14 @@
 	       a[0], a[1], a[2], a[3], a[4], a[5], rc);
 #else
 	printf("syscall_%#lx(%#llx, %#llx, %#llx, %#llx, %#llx, %#llx)"
-	       " = %ld (errno %d)\n", nr | SYSCALL_BIT,
+	       " = %ld ENOSYS (%m)\n", nr | SYSCALL_BIT,
 	       (unsigned long long) a[0],
 	       (unsigned long long) a[1],
 	       (unsigned long long) a[2],
 	       (unsigned long long) a[3],
 	       (unsigned long long) a[4],
 	       (unsigned long long) a[5],
-	       rc, errno);
+	       rc);
 #endif
 }
 
diff --git a/tests-mx32/old_mmap-Xabbrev.c b/tests-mx32/old_mmap-Xabbrev.c
new file mode 100644
index 0000000..033503c
--- /dev/null
+++ b/tests-mx32/old_mmap-Xabbrev.c
@@ -0,0 +1 @@
+#include "old_mmap.c"
diff --git a/tests-mx32/old_mmap-Xabbrev.gen.test b/tests-mx32/old_mmap-Xabbrev.gen.test
new file mode 100755
index 0000000..0ee5608
--- /dev/null
+++ b/tests-mx32/old_mmap-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-Xabbrev -a11 -e trace=mmap -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -Xabbrev
diff --git a/tests-mx32/old_mmap-Xraw.c b/tests-mx32/old_mmap-Xraw.c
new file mode 100644
index 0000000..06de40b
--- /dev/null
+++ b/tests-mx32/old_mmap-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "old_mmap.c"
diff --git a/tests-mx32/old_mmap-Xraw.gen.test b/tests-mx32/old_mmap-Xraw.gen.test
new file mode 100755
index 0000000..6d7d3cf
--- /dev/null
+++ b/tests-mx32/old_mmap-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-Xraw -a11 -e trace=mmap -Xraw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -Xraw
diff --git a/tests-mx32/old_mmap-Xverbose.c b/tests-mx32/old_mmap-Xverbose.c
new file mode 100644
index 0000000..b141fec
--- /dev/null
+++ b/tests-mx32/old_mmap-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "old_mmap.c"
diff --git a/tests-mx32/old_mmap-Xverbose.gen.test b/tests-mx32/old_mmap-Xverbose.gen.test
new file mode 100755
index 0000000..6534a93
--- /dev/null
+++ b/tests-mx32/old_mmap-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-Xverbose -a11 -e trace=mmap -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -Xverbose
diff --git a/tests-mx32/old_mmap.c b/tests-mx32/old_mmap.c
index 35ec428..07d572c 100644
--- a/tests-mx32/old_mmap.c
+++ b/tests-mx32/old_mmap.c
@@ -79,17 +79,41 @@
 	void *args = tail_memdup(args1_c, sizeof(args1_c));
 
 	rc = syscall(__NR_mmap, args);
+# if XLAT_RAW
+	printf("mmap(%#lx, %lu, %#x, %#x|%#x, %d, %#lx) = %ld %s (%m)\n",
+	       args1_c[0], args1_c[1], PROT_READ|PROT_EXEC, MAP_FILE, MAP_FIXED,
+	       (int) args1_c[4], args1_c[5], rc, errno2name());
+# elif XLAT_VERBOSE
+	printf("mmap(%#lx, %lu, %#x /* PROT_READ|PROT_EXEC */"
+	       ", %#x /* MAP_FILE */|%#x /* MAP_FIXED */"
+	       ", %d, %#lx) = %ld %s (%m)\n",
+	       args1_c[0], args1_c[1], PROT_READ|PROT_EXEC, MAP_FILE, MAP_FIXED,
+	       (int) args1_c[4], args1_c[5], rc, errno2name());
+# else
 	printf("mmap(%#lx, %lu, PROT_READ|PROT_EXEC, MAP_FILE|MAP_FIXED"
 	       ", %d, %#lx) = %ld %s (%m)\n",
 	       args1_c[0], args1_c[1], (int) args1_c[4], args1_c[5],
 	       rc, errno2name());
+# endif
 
 	memcpy(args, args2_c, sizeof(args2_c));
 	rc = syscall(__NR_mmap, args);
 # ifndef PATH_TRACING
+#  if XLAT_RAW
+	printf("mmap(NULL, %lu, %#x, %#x|%#x, %d, %#lx) = %#lx\n",
+	       args2_c[1], PROT_READ|PROT_WRITE, MAP_PRIVATE, MAP_ANONYMOUS,
+	       (int) args2_c[4], args2_c[5], rc);
+#  elif XLAT_VERBOSE
+	printf("mmap(NULL, %lu, %#x /* PROT_READ|PROT_WRITE */"
+	       ", %#x /* MAP_PRIVATE */|%#x /* MAP_ANONYMOUS */"
+	       ", %d, %#lx) = %#lx\n",
+	       args2_c[1], PROT_READ|PROT_WRITE, MAP_PRIVATE, MAP_ANONYMOUS,
+	       (int) args2_c[4], args2_c[5], rc);
+#  else
 	printf("mmap(NULL, %lu, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS"
 	       ", %d, %#lx) = %#lx\n",
 	       args2_c[1], (int) args2_c[4], args2_c[5], rc);
+#  endif
 # endif
 
 	void *addr = (void *) rc;
diff --git a/tests-mx32/opipe.test b/tests-mx32/opipe.test
index f622045..db449bb 100755
--- a/tests-mx32/opipe.test
+++ b/tests-mx32/opipe.test
@@ -5,7 +5,7 @@
 . "${srcdir=.}/init.sh"
 
 check_prog grep
-run_prog grep chdir $srcdir/umovestr.expected > "$EXP"
+grep chdir $srcdir/umovestr.expected > "$EXP"
 run_prog ../umovestr
 
 $STRACE -o "|cat > $LOG && $SLEEP_A_BIT && grep chdir < $LOG > $OUT" -e chdir $args ||
diff --git a/tests-mx32/options-syntax.test b/tests-mx32/options-syntax.test
index af7002b..1a290d0 100755
--- a/tests-mx32/options-syntax.test
+++ b/tests-mx32/options-syntax.test
@@ -56,6 +56,40 @@
 check_h "invalid -s argument: '-42'" -s -42
 check_h "invalid -s argument: '1073741824'" -s 1073741824
 check_h "invalid -I argument: '5'" -I 5
+check_h "invalid -X argument: 'test'" -Xtest
+check_h "invalid -X argument: 'a'" -Xa
+check_h "invalid -X argument: 'abbreviated'" -X abbreviated
+
+check_h "incorrect personality designator '' in qualification 'getcwd@'" -e trace=getcwd@
+check_h "incorrect personality designator '42' in qualification 'getcwd@42'" -e trace=getcwd@42
+check_h "incorrect personality designator '42' in qualification 'getcwd@42'" -e trace=gettid,getcwd@42
+check_h "incorrect personality designator '42' in qualification '23@42'" -e trace=23@42,123
+
+check_e "invalid system call '/getcwd@ohmy'" -e trace=/getcwd@ohmy
+
+case "$STRACE_NATIVE_ARCH" in
+x86_64)
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@64
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@32
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@x32
+	;;
+x32)
+	check_h "incorrect personality designator '64' in qualification 'getcwd@64'" -e trace=getcwd@64
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@32
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@x32
+	;;
+aarch64|powerpc64|riscv|s390x|sparc64|tile)
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@64
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@32
+	check_h "incorrect personality designator 'x32' in qualification 'getcwd@x32'" -e trace=getcwd@x32
+	;;
+*)
+	pers="$((SIZEOF_LONG * 8))"
+	inv_pers="$((96 - pers))"
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@"$pers"
+	check_h "incorrect personality designator '$inv_pers' in qualification 'getcwd@$inv_pers'" -e trace=getcwd@"$inv_pers"
+	check_h "incorrect personality designator 'x32' in qualification 'getcwd@x32'" -e trace=getcwd@x32
+esac
 
 ../zeroargc "$STRACE_EXE" /bin/true 2> "$LOG" &&
 	dump_log_and_fail_with \
diff --git a/tests-mx32/personality-Xabbrev.c b/tests-mx32/personality-Xabbrev.c
new file mode 100644
index 0000000..2e993dc
--- /dev/null
+++ b/tests-mx32/personality-Xabbrev.c
@@ -0,0 +1 @@
+#include "personality.c"
diff --git a/tests-mx32/personality-Xabbrev.gen.test b/tests-mx32/personality-Xabbrev.gen.test
new file mode 100755
index 0000000..df93e6c
--- /dev/null
+++ b/tests-mx32/personality-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (personality-Xabbrev +personality.test -Xabbrev); do not edit.
+set -- -Xabbrev
+. "${srcdir=.}/personality.test"
diff --git a/tests-mx32/personality-Xraw.c b/tests-mx32/personality-Xraw.c
new file mode 100644
index 0000000..59702f8
--- /dev/null
+++ b/tests-mx32/personality-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "personality.c"
diff --git a/tests-mx32/personality-Xraw.gen.test b/tests-mx32/personality-Xraw.gen.test
new file mode 100755
index 0000000..559f0f3
--- /dev/null
+++ b/tests-mx32/personality-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (personality-Xraw +personality.test -a15 -Xraw); do not edit.
+set -- -a15 -Xraw
+. "${srcdir=.}/personality.test"
diff --git a/tests-mx32/personality-Xverbose.c b/tests-mx32/personality-Xverbose.c
new file mode 100644
index 0000000..545ebe7
--- /dev/null
+++ b/tests-mx32/personality-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "personality.c"
diff --git a/tests-mx32/personality-Xverbose.gen.test b/tests-mx32/personality-Xverbose.gen.test
new file mode 100755
index 0000000..b6ce209
--- /dev/null
+++ b/tests-mx32/personality-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (personality-Xverbose +personality.test -Xverbose); do not edit.
+set -- -Xverbose
+. "${srcdir=.}/personality.test"
diff --git a/tests-mx32/personality.c b/tests-mx32/personality.c
index 7a279a1..5d84807 100644
--- a/tests-mx32/personality.c
+++ b/tests-mx32/personality.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,51 +29,76 @@
 #include <stdio.h>
 #include <sys/personality.h>
 
+#if XLAT_RAW
+# define linux_type_str	"0"
+# define good_type_str	"0x6"
+# define bad_type_str	"0x1f"
+# define good_flags_str	"0x7000000"
+# define bad_flags_str	"0x10000"
+# define good_bad_flags_str	"0x7010000"
+#elif XLAT_VERBOSE
+# define linux_type_str	"0 /\\* PER_LINUX \\*/"
+# define good_type_str	"0x6 /\\* PER_BSD \\*/"
+# define bad_type_str	"0x1f /\\* PER_\\?\\?\\? \\*/"
+# define good_flags_str	\
+	"0x7000000 /\\* SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS \\*/"
+# define bad_flags_str	"0x10000"
+# define good_bad_flags_str	\
+	"0x7010000 /\\* SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS" \
+		"\\|0x10000 \\*/"
+#else
+# define linux_type_str	"PER_LINUX"
+# define good_type_str	"PER_BSD"
+# define bad_type_str	"0x1f /\\* PER_\\?\\?\\? \\*/"
+# define good_flags_str	"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS"
+# define bad_flags_str	"0x10000"
+# define good_bad_flags_str \
+	"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\|0x10000"
+#endif
+
 int main(void)
 {
 	const unsigned int good_type = PER_BSD;
-	const char *good_type_str = "PER_BSD";
 
 	const unsigned int bad_type = 0x1f;
-	const char *bad_type_str = "0x1f /\\* PER_\\?\\?\\? \\*/";
 
 	const unsigned int good_flags =
 		SHORT_INODE | WHOLE_SECONDS | STICKY_TIMEOUTS;
-	const char *good_flags_str =
-		"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS";
 
 	const unsigned int bad_flags = 0x10000;
-	const char *bad_flags_str = "0x10000";
 
 	const unsigned int saved_pers = personality(0xffffffff);
 	printf("personality\\(0xffffffff\\) = %#x \\([^)]*\\)\n", saved_pers);
 
 	/* PER_LINUX */
 	personality(PER_LINUX);
-	printf("personality\\(PER_LINUX\\) = %#x \\([^)]*\\)\n", saved_pers);
+	printf("personality\\(%s\\) = %#x \\([^)]*\\)\n",
+	       linux_type_str, saved_pers);
 
 	personality(0xffffffff);
-	puts("personality\\(0xffffffff\\) = 0 \\(PER_LINUX\\)");
+	printf("personality\\(0xffffffff\\) = 0 \\(%s\\)\n", linux_type_str);
 
 	personality(good_flags);
-	printf("personality\\(PER_LINUX\\|%s\\) = 0 \\(PER_LINUX\\)\n",
-	       good_flags_str);
+	printf("personality\\(%s\\|%s\\) = 0 \\(%s\\)\n",
+	       linux_type_str, good_flags_str, linux_type_str);
 
 	personality(bad_flags);
-	printf("personality\\(PER_LINUX\\|%s\\)"
-	       " = %#x \\(PER_LINUX\\|%s\\)\n",
-	       bad_flags_str, good_flags, good_flags_str);
+	printf("personality\\(%s\\|%s\\)"
+	       " = %#x \\(%s\\|%s\\)\n",
+	       linux_type_str, bad_flags_str,
+	       good_flags, linux_type_str, good_flags_str);
 
 	personality(good_flags | bad_flags);
-	printf("personality\\(PER_LINUX\\|%s\\|%s\\)"
-	       " = %#x \\(PER_LINUX\\|%s\\)\n",
-	       good_flags_str, bad_flags_str, bad_flags, bad_flags_str);
+	printf("personality\\(%s\\|%s\\)"
+	       " = %#x \\(%s\\|%s\\)\n",
+	       linux_type_str, good_bad_flags_str,
+	       bad_flags, linux_type_str, bad_flags_str);
 
 	/* another valid type */
 	personality(good_type);
-	printf("personality\\(%s\\) = %#x \\(PER_LINUX\\|%s\\|%s\\)\n",
+	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\)\n",
 	       good_type_str, good_flags | bad_flags,
-	       good_flags_str, bad_flags_str);
+	       linux_type_str, good_bad_flags_str);
 
 	personality(good_type | good_flags);
 	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\)\n",
@@ -84,16 +110,16 @@
 	       good_type_str, good_flags_str);
 
 	personality(good_type | good_flags | bad_flags);
-	printf("personality\\(%s\\|%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
-	       good_type_str, good_flags_str, bad_flags_str,
+	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
+	       good_type_str, good_bad_flags_str,
 	       good_type | bad_flags,
 	       good_type_str, bad_flags_str);
 
 	/* invalid type */
 	personality(bad_type);
-	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\|%s\\)\n",
+	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\)\n",
 	       bad_type_str, good_type | good_flags | bad_flags,
-	       good_type_str, good_flags_str, bad_flags_str);
+	       good_type_str, good_bad_flags_str);
 
 	personality(bad_type | good_flags);
 	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\)\n",
@@ -105,14 +131,14 @@
 	       bad_type_str, good_flags_str);
 
 	personality(bad_type | good_flags | bad_flags);
-	printf("personality\\(%s\\|%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
-	       bad_type_str, good_flags_str, bad_flags_str,
+	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
+	       bad_type_str, good_bad_flags_str,
 	       bad_type | bad_flags, bad_type_str, bad_flags_str);
 
 	personality(saved_pers);
-	printf("personality\\([^)]*\\) = %#x \\(%s\\|%s\\|%s\\)\n",
+	printf("personality\\([^)]*\\) = %#x \\(%s\\|%s\\)\n",
 	       bad_type | good_flags | bad_flags,
-	       bad_type_str, good_flags_str, bad_flags_str);
+	       bad_type_str, good_bad_flags_str);
 
 	return 0;
 }
diff --git a/tests-mx32/personality.test b/tests-mx32/personality.test
index ab2faf4..d279bd1 100755
--- a/tests-mx32/personality.test
+++ b/tests-mx32/personality.test
@@ -5,5 +5,5 @@
 . "${srcdir=.}/init.sh"
 
 run_prog > /dev/null
-run_strace -a20 -epersonality $args > "$EXP"
+run_strace -a20 -epersonality "$@" $args > "$EXP"
 match_grep "$LOG" "$EXP"
diff --git a/tests-mx32/poll.c b/tests-mx32/poll.c
index c5930a3..9624bd3 100644
--- a/tests-mx32/poll.c
+++ b/tests-mx32/poll.c
@@ -95,7 +95,7 @@
 		if (i)
 			tprintf(", ");
 		if (i >= valid) {
-			tprintf("%p", &pfd[i]);
+			tprintf("... /* %p */", &pfd[i]);
 			break;
 		}
 		if (i >= abbrev) {
diff --git a/tests-mx32/prctl-spec-inject.c b/tests-mx32/prctl-spec-inject.c
new file mode 100644
index 0000000..593c3a6
--- /dev/null
+++ b/tests-mx32/prctl-spec-inject.c
@@ -0,0 +1,153 @@
+/*
+ * Check decoding of PR_SET_SPECULATION_CTRL and PR_GET_SPECULATION_CTRL
+ * prctl operations.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <asm/unistd.h>
+
+#ifdef __NR_prctl
+
+# include <stdio.h>
+# include <stdlib.h>
+# include <unistd.h>
+# include <linux/prctl.h>
+
+static long injected_val;
+
+long
+do_prctl(kernel_ulong_t cmd, kernel_ulong_t arg2, kernel_ulong_t arg3)
+{
+	long rc = syscall(__NR_prctl, cmd, arg2, arg3);
+
+	if (rc != injected_val)
+		error_msg_and_fail("Return value (%ld) differs from expected "
+				   "injected value (%ld)",
+				   rc, injected_val);
+
+	return rc;
+}
+
+int
+main(int argc, char **argv)
+{
+	static const kernel_ulong_t bogus_arg2 =
+		(kernel_ulong_t) 0xdeadfacebadc0dedULL;
+	static const kernel_ulong_t bogus_arg3 =
+		(kernel_ulong_t) 0xdecafeedbeefda7eULL;
+	static const struct {
+		long arg;
+		const char *str;
+	} get_strs[] = {
+		{ -1, "" },
+		{ 0, " (PR_SPEC_NOT_AFFECTED)" },
+		{ 1, " (PR_SPEC_PRCTL)" },
+		{ 3, " (PR_SPEC_PRCTL|PR_SPEC_ENABLE)" },
+		{ 8, " (PR_SPEC_FORCE_DISABLE)" },
+		{ 16, " (0x10)" },
+		{ 42, " (PR_SPEC_ENABLE|PR_SPEC_FORCE_DISABLE|0x20)" },
+	};
+	static const struct {
+		kernel_ulong_t arg;
+		const char *str;
+	} set_strs[] = {
+		{ 0, "0 /* PR_SPEC_??? */" },
+		{ 1, "0x1 /* PR_SPEC_??? */" },
+		{ 2, "PR_SPEC_ENABLE" },
+		{ 3, "0x3 /* PR_SPEC_??? */" },
+		{ 8, "PR_SPEC_FORCE_DISABLE" },
+		{ 16, "0x10 /* PR_SPEC_??? */" },
+		{ (kernel_ulong_t) 0xdecafeedbeefda7eULL, "0x"
+# if SIZEOF_KERNEL_LONG_T == 8
+			"decafeed"
+# endif
+			"beefda7e /* PR_SPEC_??? */" },
+	};
+
+	long rc;
+	const char *str = NULL;
+
+	if (argc < 2)
+		error_msg_and_fail("Usage: %s INJECTED_VAL", argv[0]);
+
+	injected_val = strtol(argv[1], NULL, 0);
+
+	/* PR_GET_SPECULATION_CTRL */
+	rc = do_prctl(52, 1, bogus_arg3);
+	printf("prctl(PR_GET_SPECULATION_CTRL, 0x1 /* PR_SPEC_??? */) "
+	       "= %s (INJECTED)\n", sprintrc(rc));
+
+	rc = do_prctl(52, bogus_arg2, bogus_arg3);
+	printf("prctl(PR_GET_SPECULATION_CTRL, %#llx /* PR_SPEC_??? */) "
+	       "= %s (INJECTED)\n",
+	       (unsigned long long) bogus_arg2, sprintrc(rc));
+
+	rc = do_prctl(52, 0, bogus_arg3);
+
+	for (unsigned i = 0; i < ARRAY_SIZE(get_strs); i++) {
+		if (get_strs[i].arg == rc) {
+			str = get_strs[i].str;
+			break;
+		}
+	}
+	if (!str)
+		error_msg_and_fail("Unknown return value: %ld", rc);
+
+	printf("prctl(PR_GET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS) "
+	       "= %s%s (INJECTED)\n", sprintrc(rc), str);
+
+
+	/* PR_SET_SPECULATION_CTRL*/
+	rc = do_prctl(53, 1, bogus_arg3);
+	printf("prctl(PR_SET_SPECULATION_CTRL, 0x1 /* PR_SPEC_??? */, %#llx) "
+	       "= %s (INJECTED)\n",
+	       (unsigned long long) bogus_arg3, sprintrc(rc));
+
+	rc = do_prctl(53, bogus_arg2, bogus_arg3);
+	printf("prctl(PR_SET_SPECULATION_CTRL, %#llx /* PR_SPEC_??? */, %#llx) "
+	       "= %s (INJECTED)\n",
+	       (unsigned long long) bogus_arg2,
+	       (unsigned long long) bogus_arg3,
+	       sprintrc(rc));
+
+	for (unsigned i = 0; i < ARRAY_SIZE(set_strs); i++) {
+		rc = do_prctl(53, 0, set_strs[i].arg);
+		printf("prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS"
+		       ", %s) = %s (INJECTED)\n",
+		       set_strs[i].str, sprintrc(rc));
+	}
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_prctl")
+
+#endif
diff --git a/tests-mx32/prctl-spec-inject.test b/tests-mx32/prctl-spec-inject.test
new file mode 100755
index 0000000..c8fbe97
--- /dev/null
+++ b/tests-mx32/prctl-spec-inject.test
@@ -0,0 +1,55 @@
+#!/bin/sh -efu
+#
+# Check decoding of PR_SET_SPECULATION_CTRL and PR_GET_SPECULATION_CTRL
+# prctl operations.
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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"
+
+fault_args='-a53 -e trace=prctl -e inject=prctl:'
+prog="../$NAME"
+
+test_run_rval()
+{
+	local run rval injexpr
+	run="$1"; shift
+	rval="$1"; shift
+	injexpr="$1"; shift
+
+	run_strace $fault_args$injexpr $prog $rval > "$EXP"
+	LC_ALL=C grep -Ev '^prctl\(PR_[GS]ET_([^S][^P][^E][^C]])' \
+		< "$LOG" > "$OUT"
+	match_diff "$OUT" "$EXP"
+}
+
+test_run_rval 0 -1 "error=ENOTTY"
+test_run_rval 1 0 "retval=0"
+test_run_rval 2 1 "retval=1"
+test_run_rval 3 3 "retval=3"
+test_run_rval 4 8 "retval=8"
+test_run_rval 5 16 "retval=16"
+test_run_rval 6 42 "retval=42"
diff --git a/tests-mx32/preadv-pwritev.c b/tests-mx32/preadv-pwritev.c
index 44ed23a..57a08ad 100644
--- a/tests-mx32/preadv-pwritev.c
+++ b/tests-mx32/preadv-pwritev.c
@@ -2,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,7 @@
 	tprintf("pwritev(1, [], 0, 0) = 0\n");
 
 	rc = pwritev(1, w_iov + ARRAY_SIZE(w_iov_) - 1, 2, 0);
-	tprintf("pwritev(1, [{iov_base=\"%s\", iov_len=%u}, %p], 2, 0)"
+	tprintf("pwritev(1, [{iov_base=\"%s\", iov_len=%u}, ... /* %p */], 2, 0)"
 		" = %ld %s (%m)\n",
 		w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_),
 		rc, errno2name());
diff --git a/tests-mx32/preadv2-pwritev2.c b/tests-mx32/preadv2-pwritev2.c
index 89f37dd..7874b7a 100644
--- a/tests-mx32/preadv2-pwritev2.c
+++ b/tests-mx32/preadv2-pwritev2.c
@@ -2,7 +2,7 @@
  * Check decoding of preadv2 and pwritev2 syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -104,7 +104,7 @@
 	tprintf("pwritev2(1, [], 0, 0, 0) = 0\n");
 
 	rc = pw(1, w_iov + ARRAY_SIZE(w_iov_) - 1, 2, 0);
-	tprintf("pwritev2(1, [{iov_base=\"%s\", iov_len=%u}, %p], 2, 0, 0)"
+	tprintf("pwritev2(1, [{iov_base=\"%s\", iov_len=%u}, ... /* %p */], 2, 0, 0)"
 		" = %ld %s (%m)\n",
 		w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_),
 		rc, errno2name());
diff --git a/tests-mx32/print_quoted_string.c b/tests-mx32/print_quoted_string.c
index 3ca5631..a58b69a 100644
--- a/tests-mx32/print_quoted_string.c
+++ b/tests-mx32/print_quoted_string.c
@@ -33,6 +33,18 @@
 	}
 }
 
+void
+print_quoted_stringn(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);
+		printf("...");
+	}
+}
+
 static void
 print_octal(unsigned char c, char next)
 {
diff --git a/tests-mx32/process_vm_readv_writev.c b/tests-mx32/process_vm_readv_writev.c
index 5ee801b..328dc9f 100644
--- a/tests-mx32/process_vm_readv_writev.c
+++ b/tests-mx32/process_vm_readv_writev.c
@@ -2,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -135,7 +135,7 @@
 	}
 
 	if (arg->addr_term)
-		printf(", %p", iov + arg->count);
+		printf(", ... /* %p */", iov + arg->count);
 
 	printf("]");
 }
diff --git a/tests-mx32/ptrace.c b/tests-mx32/ptrace.c
index 5c09fa3..2ca9ceb 100644
--- a/tests-mx32/ptrace.c
+++ b/tests-mx32/ptrace.c
@@ -60,10 +60,11 @@
 	printf("ptrace(PTRACE_PEEKSIGINFO, %u, NULL, %#lx) = %s\n",
 	       (unsigned) pid, bad_request, errstr);
 
-	struct {
+	struct psi {
 		unsigned long long off;
 		unsigned int flags, nr;
-	} *const psi = tail_alloc(sizeof(*psi));
+	};
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct psi, psi);
 
 	psi->off = 0xdeadbeeffacefeedULL;
 	psi->flags = 1;
@@ -179,7 +180,7 @@
 	const unsigned long pid =
 		(unsigned long) 0xdefaced00000000ULL | (unsigned) getpid();
 
-	uint64_t *filter_off = tail_alloc(sizeof(*filter_off));
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, filter_off);
 
 	const unsigned int sigset_size = get_sigset_size();
 
diff --git a/tests-mx32/pure_executables.am b/tests-mx32/pure_executables.am
index bbb3ad9..c65f4ca 100644
--- a/tests-mx32/pure_executables.am
+++ b/tests-mx32/pure_executables.am
@@ -8,9 +8,14 @@
   add_key \
   adjtimex \
   aio \
+  aio_pgetevents \
   alarm \
   bpf \
   bpf-v \
+  bpf-obj_get_info_by_fd \
+  bpf-obj_get_info_by_fd-v \
+  bpf-obj_get_info_by_fd-prog \
+  bpf-obj_get_info_by_fd-prog-v \
   brk \
   btrfs \
   caps \
@@ -43,6 +48,9 @@
   fallocate \
   fanotify_init \
   fanotify_mark \
+  fanotify_mark-Xabbrev \
+  fanotify_mark-Xraw \
+  fanotify_mark-Xverbose \
   fchdir \
   fchmod \
   fchmodat \
@@ -105,10 +113,13 @@
   ioctl_block \
   ioctl_dm \
   ioctl_evdev \
+  ioctl_inotify \
   ioctl_kvm_run \
   ioctl_loop \
   ioctl_mtd \
   ioctl_rtc \
+  ioctl_perf \
+  ioctl_ptp \
   ioctl_scsi \
   ioctl_sg_io_v3 \
   ioctl_sg_io_v4 \
@@ -121,15 +132,30 @@
   ip_mreq \
   ipc \
   ipc_msg \
+  ipc_msg-Xabbrev \
+  ipc_msg-Xraw \
+  ipc_msg-Xverbose \
   ipc_msgbuf \
+  ipc_msgbuf-Xabbrev \
+  ipc_msgbuf-Xraw \
+  ipc_msgbuf-Xverbose \
   ipc_sem \
+  ipc_sem-Xabbrev \
+  ipc_sem-Xraw \
+  ipc_sem-Xverbose \
   ipc_shm \
+  ipc_shm-Xabbrev \
+  ipc_shm-Xraw \
+  ipc_shm-Xverbose \
   kcmp \
   kcmp-y \
   kern_features \
   kexec_file_load \
   kexec_load \
   keyctl \
+  keyctl-Xabbrev \
+  keyctl-Xraw \
+  keyctl-Xverbose \
   kill \
   lchown \
   lchown32 \
@@ -154,11 +180,20 @@
   mlock2 \
   mlockall \
   mmap \
+  mmap-Xabbrev \
+  mmap-Xraw \
+  mmap-Xverbose \
   mmap64 \
+  mmap64-Xabbrev \
+  mmap64-Xraw \
+  mmap64-Xverbose \
   mmsg \
   mmsg_name \
   modify_ldt \
   mount \
+  mount-Xabbrev \
+  mount-Xraw \
+  mount-Xverbose \
   move_pages \
   mq \
   mq_sendrecv \
@@ -205,7 +240,9 @@
   nlattr_ifaddrlblmsg \
   nlattr_ifaddrmsg \
   nlattr_ifinfomsg \
+  nlattr_ifla_af_spec \
   nlattr_ifla_brport \
+  nlattr_ifla_linkinfo \
   nlattr_ifla_port \
   nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
@@ -230,6 +267,9 @@
   old_mmap \
   old_mmap-P \
   old_mmap-v-none \
+  old_mmap-Xabbrev \
+  old_mmap-Xraw \
+  old_mmap-Xverbose \
   oldfstat \
   oldlstat \
   oldselect \
@@ -241,6 +281,9 @@
   pause \
   perf_event_open \
   personality \
+  personality-Xabbrev \
+  personality-Xraw \
+  personality-Xverbose \
   pipe \
   pipe2 \
   pkey_alloc \
@@ -357,7 +400,13 @@
   sigsuspend \
   so_linger \
   so_peercred \
+  so_peercred-Xabbrev \
+  so_peercred-Xraw \
+  so_peercred-Xverbose \
   sock_filter-v \
+  sock_filter-v-Xabbrev \
+  sock_filter-v-Xraw \
+  sock_filter-v-Xverbose \
   socketcall \
   sockopt-sol_netlink \
   splice \
diff --git a/tests-mx32/pure_executables.list b/tests-mx32/pure_executables.list
index d78bd4d..39565d0 100755
--- a/tests-mx32/pure_executables.list
+++ b/tests-mx32/pure_executables.list
@@ -7,9 +7,14 @@
 add_key
 adjtimex
 aio
+aio_pgetevents
 alarm
 bpf
 bpf-v
+bpf-obj_get_info_by_fd
+bpf-obj_get_info_by_fd-v
+bpf-obj_get_info_by_fd-prog
+bpf-obj_get_info_by_fd-prog-v
 brk
 btrfs
 caps
@@ -42,6 +47,9 @@
 fallocate
 fanotify_init
 fanotify_mark
+fanotify_mark-Xabbrev
+fanotify_mark-Xraw
+fanotify_mark-Xverbose
 fchdir
 fchmod
 fchmodat
@@ -104,10 +112,13 @@
 ioctl_block
 ioctl_dm
 ioctl_evdev
+ioctl_inotify
 ioctl_kvm_run
 ioctl_loop
 ioctl_mtd
 ioctl_rtc
+ioctl_perf
+ioctl_ptp
 ioctl_scsi
 ioctl_sg_io_v3
 ioctl_sg_io_v4
@@ -120,15 +131,30 @@
 ip_mreq
 ipc
 ipc_msg
+ipc_msg-Xabbrev
+ipc_msg-Xraw
+ipc_msg-Xverbose
 ipc_msgbuf
+ipc_msgbuf-Xabbrev
+ipc_msgbuf-Xraw
+ipc_msgbuf-Xverbose
 ipc_sem
+ipc_sem-Xabbrev
+ipc_sem-Xraw
+ipc_sem-Xverbose
 ipc_shm
+ipc_shm-Xabbrev
+ipc_shm-Xraw
+ipc_shm-Xverbose
 kcmp
 kcmp-y
 kern_features
 kexec_file_load
 kexec_load
 keyctl
+keyctl-Xabbrev
+keyctl-Xraw
+keyctl-Xverbose
 kill
 lchown
 lchown32
@@ -153,11 +179,20 @@
 mlock2
 mlockall
 mmap
+mmap-Xabbrev
+mmap-Xraw
+mmap-Xverbose
 mmap64
+mmap64-Xabbrev
+mmap64-Xraw
+mmap64-Xverbose
 mmsg
 mmsg_name
 modify_ldt
 mount
+mount-Xabbrev
+mount-Xraw
+mount-Xverbose
 move_pages
 mq
 mq_sendrecv
@@ -204,7 +239,9 @@
 nlattr_ifaddrlblmsg
 nlattr_ifaddrmsg
 nlattr_ifinfomsg
+nlattr_ifla_af_spec
 nlattr_ifla_brport
+nlattr_ifla_linkinfo
 nlattr_ifla_port
 nlattr_ifla_xdp
 nlattr_inet_diag_msg
@@ -229,6 +266,9 @@
 old_mmap
 old_mmap-P
 old_mmap-v-none
+old_mmap-Xabbrev
+old_mmap-Xraw
+old_mmap-Xverbose
 oldfstat
 oldlstat
 oldselect
@@ -240,6 +280,9 @@
 pause
 perf_event_open
 personality
+personality-Xabbrev
+personality-Xraw
+personality-Xverbose
 pipe
 pipe2
 pkey_alloc
@@ -356,7 +399,13 @@
 sigsuspend
 so_linger
 so_peercred
+so_peercred-Xabbrev
+so_peercred-Xraw
+so_peercred-Xverbose
 sock_filter-v
+sock_filter-v-Xabbrev
+sock_filter-v-Xraw
+sock_filter-v-Xverbose
 socketcall
 sockopt-sol_netlink
 splice
diff --git a/tests-mx32/pwritev.c b/tests-mx32/pwritev.c
index 58e5b41..3c2bdb6 100644
--- a/tests-mx32/pwritev.c
+++ b/tests-mx32/pwritev.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -65,7 +66,7 @@
 		if (i)
 			fputs(", ", stdout);
 		if (i == size) {
-			printf("%p", &iov[i]);
+			printf("... /* %p */", &iov[i]);
 			break;
 		}
 		if (i == LIM) {
diff --git a/tests-mx32/qual_fault-syntax.test b/tests-mx32/qual_fault-syntax.test
index 43ade76..7f7a515 100755
--- a/tests-mx32/qual_fault-syntax.test
+++ b/tests-mx32/qual_fault-syntax.test
@@ -86,6 +86,12 @@
 	   chdir:retval=0 \
 	   chdir:signal=1 \
 	   chdir:error=1:error=2 \
+	   chdir:syscall=invalid \
+	   chdir:syscall=chdir \
+	   chdir:syscall=%file \
+	   chdir:syscall=-42 \
+	   chdir:syscall=42 \
+	   chdir:syscall=gettid:syscall=gettid \
 	   ; do
 	$STRACE -e fault="$arg" true 2> "$LOG" &&
 		fail_with "$arg"
diff --git a/tests-mx32/qual_fault-syscall.test b/tests-mx32/qual_fault-syscall.test
new file mode 100755
index 0000000..cae97f5
--- /dev/null
+++ b/tests-mx32/qual_fault-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_fault
+. "${srcdir=.}/qual_fault.test"
diff --git a/tests-mx32/qual_fault.c b/tests-mx32/qual_fault.c
index 670d9fe..d5d78bc 100644
--- a/tests-mx32/qual_fault.c
+++ b/tests-mx32/qual_fault.c
@@ -77,8 +77,9 @@
 					    err, rc, errno);
 
 		if (is_raw)
-			tprintf("writev(%#x, %p, 0x1) = -1 (errno %d)"
-				" (INJECTED)\n", got_fd, &io, err);
+			tprintf("writev(%#x, %p, 0x1)"
+				" = -1 %s (%m) (INJECTED)\n",
+				got_fd, &io, errstr);
 		else
 			tprintf("writev(%d, [{iov_base=\"%s\", iov_len=%d}], 1)"
 				" = -1 %s (%m) (INJECTED)\n",
diff --git a/tests-mx32/qual_fault.test b/tests-mx32/qual_fault.test
index 12b0a85..e166ffd 100755
--- a/tests-mx32/qual_fault.test
+++ b/tests-mx32/qual_fault.test
@@ -1,9 +1,9 @@
-#!/bin/sh
+#!/bin/sh -efu
 #
 # Check that fault injection works properly.
 #
 # Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2016-2017 The strace developers.
+# Copyright (c) 2016-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -37,6 +37,9 @@
 
 N=100
 
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
 check_fault_injection()
 {
 	local trace fault err first step procs extra
@@ -79,7 +82,7 @@
 	outpid="$NAME.pid"
 
 	run_strace -a11 -ff -e trace=$trace \
-		"$@" -e fault=$fault$when$error $extra \
+		"$@" -e fault=$fault$when$error$suffix $extra \
 		../$NAME $raw "$err" "$first" "$step" $N \
 		"$procs" "$outexp" "$outgot" "$outout" "$outpid"
 
@@ -87,8 +90,8 @@
 	do
 		pid=$(cat "$outpid.$i")
 
-		match_diff "$outout.$i" "$LOG.$pid"
-		match_diff "$outexp.$i" "$outgot.$i"
+		match_diff "$LOG.$pid" "$outout.$i"
+		match_diff "$outgot.$i" "$outexp.$i"
 	done
 }
 
diff --git a/tests-mx32/qual_inject-error-signal-syscall.test b/tests-mx32/qual_inject-error-signal-syscall.test
new file mode 100755
index 0000000..0adb35d
--- /dev/null
+++ b/tests-mx32/qual_inject-error-signal-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_inject-error-signal
+. "${srcdir=.}/qual_inject-error-signal.test"
diff --git a/tests-mx32/qual_inject-error-signal.test b/tests-mx32/qual_inject-error-signal.test
index 1fe4612..93d8321 100755
--- a/tests-mx32/qual_inject-error-signal.test
+++ b/tests-mx32/qual_inject-error-signal.test
@@ -3,6 +3,10 @@
 # Check fault injection along with signal injection.
 . "${srcdir=.}/scno_tampering.sh"
 
-run_strace -a12 -echdir,exit_group -einject=chdir:error=ENOENT:signal=USR1 \
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
+run_strace -a12 -echdir,exit_group \
+	-einject=chdir:error=ENOENT:signal=USR1"$suffix" \
 	"../$NAME"
 match_diff
diff --git a/tests-mx32/qual_inject-retval-syscall.test b/tests-mx32/qual_inject-retval-syscall.test
new file mode 100755
index 0000000..fca9354
--- /dev/null
+++ b/tests-mx32/qual_inject-retval-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_inject-retval
+. "${srcdir=.}/qual_inject-retval.test"
diff --git a/tests-mx32/qual_inject-retval.test b/tests-mx32/qual_inject-retval.test
index 5a4efd1..239ab0a 100755
--- a/tests-mx32/qual_inject-retval.test
+++ b/tests-mx32/qual_inject-retval.test
@@ -4,6 +4,9 @@
 
 . "${srcdir=.}/scno_tampering.sh"
 
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
 check_injection()
 {
 	local syscall rval
@@ -11,7 +14,7 @@
 	syscall=chdir
 	rval="$1"; shift
 
-	run_strace -a12 -e$syscall -einject="$syscall:retval=$rval" "$@" \
+	run_strace -a12 -e$syscall -einject="$syscall:retval=$rval$suffix" "$@" \
 		../qual_inject-retval "$rval" > "$EXP"
 	match_diff "$LOG" "$EXP"
 }
diff --git a/tests-mx32/qual_inject-signal-syscall.test b/tests-mx32/qual_inject-signal-syscall.test
new file mode 100755
index 0000000..42e9a26
--- /dev/null
+++ b/tests-mx32/qual_inject-signal-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_inject-signal
+. "${srcdir=.}/qual_inject-signal.test"
diff --git a/tests-mx32/qual_inject-signal.test b/tests-mx32/qual_inject-signal.test
index f17e5a0..7f75a8e 100755
--- a/tests-mx32/qual_inject-signal.test
+++ b/tests-mx32/qual_inject-signal.test
@@ -3,6 +3,9 @@
 # Check signal injection.
 . "${srcdir=.}/init.sh"
 
-run_strace -a12 -echdir,exit_group -einject=chdir:signal=USR1 \
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
+run_strace -a12 -echdir,exit_group -einject=chdir:signal=USR1"$suffix" \
 	../$NAME
 match_diff
diff --git a/tests-mx32/qual_inject-syntax.test b/tests-mx32/qual_inject-syntax.test
index 20bc0c3..a53b01c 100755
--- a/tests-mx32/qual_inject-syntax.test
+++ b/tests-mx32/qual_inject-syntax.test
@@ -102,6 +102,12 @@
 	   chdir:delay_exit=3:delay_exit=4 \
 	   chdir:delay_enter=5:delay_exit=6:delay_enter=7 \
 	   chdir:delay_exit=8:delay_enter=9:delay_exit=10 \
+	   chdir:syscall=invalid \
+	   chdir:syscall=chdir \
+	   chdir:syscall=%file \
+	   chdir:syscall=-42 \
+	   chdir:syscall=42 \
+	   chdir:syscall=gettid:syscall=gettid \
 	   ; do
 	$STRACE -e inject="$arg" true 2> "$LOG" &&
 		fail_with "$arg"
diff --git a/tests-mx32/qualify_personality.sh b/tests-mx32/qualify_personality.sh
new file mode 100644
index 0000000..7b19a2e
--- /dev/null
+++ b/tests-mx32/qualify_personality.sh
@@ -0,0 +1,94 @@
+#! /bin/sh -efu
+#
+# Common code for per-personality qualification tests
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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"
+
+[ 2 -le "$#" ] ||
+	fail_ 'No personality designation ("64", "32", "x32") specified'
+
+pers="$1"
+shift
+trace_expr="$1"
+shift
+skip="${1-}"
+
+case "$STRACE_NATIVE_ARCH" in
+x86_64)
+	supported_pers='64 32 x32'
+	;;
+x32)
+	supported_pers='x32 32'
+	;;
+aarch64|powerpc64|riscv|s390x|sparc64|tile)
+	supported_pers='64 32'
+	;;
+*)
+	supported_pers="$(($SIZEOF_LONG * 8))"
+	;;
+esac
+
+# Detect current personality designation
+if [ "x$STRACE_NATIVE_ARCH" = "x$STRACE_ARCH" ]; then
+	case "$STRACE_NATIVE_ARCH" in
+	x32)
+		cur_pers=x32
+		;;
+	*)
+		cur_pers="$(($SIZEOF_LONG * 8))"
+		;;
+	esac
+else
+	if [ "x$SIZEOF_KERNEL_LONG_T" = "x$SIZEOF_LONG" ]; then
+		[ 4 -eq "$SIZEOF_LONG" ] ||
+			fail_ "sizeof(long) = $SIZEOF_LONG != 4"
+		cur_pers=32
+	else
+		[ 8 -eq "$SIZEOF_KERNEL_LONG_T" ] ||
+			fail_ "sizeof(kernel_long_t) = $SIZEOF_KERNEL_LONG_T != 8"
+		[ 4 -eq "$SIZEOF_LONG" ] ||
+			fail_ "sizeof(long) = $SIZEOF_LONG != 4"
+		cur_pers=x32
+	fi
+fi
+
+pers_found=0
+set -- $supported_pers
+for i; do
+	[ "x$pers" != "x$i" ] || pers_found=1
+done
+
+[ "$pers_found" = 1 ] ||
+	skip_ "Personality '$pers' is not supported on architecture" \
+	      "'$STRACE_NATIVE_ARCH' (supported personalities: $supported_pers)"
+
+# If tested personality is not equivalent to current personality, reset $NAME,
+# so "$NAME.in", which is used by test_trace_expr, points to an empty file.
+[ "x$pers" = "x$cur_pers" ] || NAME=qualify_personality_empty
+
+test_trace_expr "$skip" -e trace="${trace_expr}@${pers}"
diff --git a/tests-mx32/qualify_personality_empty.in b/tests-mx32/qualify_personality_empty.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests-mx32/qualify_personality_empty.in
diff --git a/tests-mx32/readv.c b/tests-mx32/readv.c
index 8430ca5..cae4e6b 100644
--- a/tests-mx32/readv.c
+++ b/tests-mx32/readv.c
@@ -2,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -89,7 +89,7 @@
 		fds[1], (long) writev(fds[1], w_iov, 0));
 
 	rc = writev(fds[1], w_iov + ARRAY_SIZE(w_iov_) - 1, 2);
-	tprintf("writev(%d, [{iov_base=\"%s\", iov_len=%u}, %p], 2)"
+	tprintf("writev(%d, [{iov_base=\"%s\", iov_len=%u}, ... /* %p */], 2)"
 		" = %ld %s (%m)\n",
 		fds[1], w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_),
 		rc, errno2name());
diff --git a/tests-mx32/request_key.c b/tests-mx32/request_key.c
index 866fe76..ce9b724 100644
--- a/tests-mx32/request_key.c
+++ b/tests-mx32/request_key.c
@@ -2,7 +2,7 @@
  * Check decoding of request_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -101,7 +101,7 @@
 		{ bogus_desc, NULL },
 		{ ARG_STR("\25\26\27\30\31") },
 		{ ARG_STR("desc") },
-		{ "overly long description", _STR("overly long ") "..." },
+		{ "overly long description", STRINGIFY("overly long ") "..." },
 	};
 
 	struct {
@@ -113,7 +113,7 @@
 		{ bogus_info, NULL },
 		{ ARG_STR("\32\33\34\35\36") },
 		{ ARG_STR("info") },
-		{ "overly long info", _STR("overly long ") "..." },
+		{ "overly long info", STRINGIFY("overly long ") "..." },
 	};
 
 	struct {
diff --git a/tests-mx32/s390_guarded_storage.c b/tests-mx32/s390_guarded_storage.c
index 69ac166..97475bb 100644
--- a/tests-mx32/s390_guarded_storage.c
+++ b/tests-mx32/s390_guarded_storage.c
@@ -175,8 +175,8 @@
 	static const kernel_ulong_t bogus_addr =
 		(kernel_ulong_t) 0xfacefeedac0ffeedULL;
 
-	struct gs_cb *gscb = tail_alloc(sizeof(*gscb));
-	struct gs_epl *gsepl = tail_alloc(sizeof(*gsepl));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct gs_cb, gscb);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct gs_epl, gsepl);
 
 	long rc;
 
diff --git a/tests-mx32/s390_runtime_instr.c b/tests-mx32/s390_runtime_instr.c
index 861bbd4..5d368a1 100644
--- a/tests-mx32/s390_runtime_instr.c
+++ b/tests-mx32/s390_runtime_instr.c
@@ -44,10 +44,11 @@
 		kernel_ulong_t cmd;
 		const char * cmd_str;
 	} cmd_args[] = {
-		{ 0, "???" },
-		{ 4, "???" },
-		{ (kernel_ulong_t) 0xdeafbeefdeadc0deULL, "???" },
-		{ 2, "STOP",  },
+		{ 0, "0 /* S390_RUNTIME_INSTR_??? */" },
+		{ 4, "4 /* S390_RUNTIME_INSTR_??? */" },
+		{ (kernel_ulong_t) 0xdeafbeefdeadc0deULL,
+			"-559038242 /* S390_RUNTIME_INSTR_??? */" },
+		{ 2, "S390_RUNTIME_INSTR_STOP"  },
 	};
 
 	static struct {
@@ -66,10 +67,8 @@
 
 	for (i = 0; i < ARRAY_SIZE(cmd_args); i++) {
 		rc = syscall(__NR_s390_runtime_instr, cmd_args[i].cmd, 0xdead);
-		printf("s390_runtime_instr(%d /* S390_RUNTIME_INSTR_%s */) = "
-		       "%s\n",
-		       (int) cmd_args[i].cmd, cmd_args[i].cmd_str,
-		       sprintrc(rc));
+		printf("s390_runtime_instr(%s) = %s\n",
+		       cmd_args[i].cmd_str, sprintrc(rc));
 	}
 
 	for (i = 0; i < ARRAY_SIZE(start_sig_args); i++) {
@@ -77,7 +76,7 @@
 
 		rc = syscall(__NR_s390_runtime_instr, 1, start_sig_args[i].sig);
 		saved_errno = errno;
-		printf("s390_runtime_instr(1 /* S390_RUNTIME_INSTR_START */, ");
+		printf("s390_runtime_instr(S390_RUNTIME_INSTR_START, ");
 
 		if (start_sig_args[i].sig_str)
 			printf("%s", start_sig_args[i].sig_str);
diff --git a/tests-mx32/s390_runtime_instr.gen.test b/tests-mx32/s390_runtime_instr.gen.test
index 9197dc3..83e8150 100755
--- a/tests-mx32/s390_runtime_instr.gen.test
+++ b/tests-mx32/s390_runtime_instr.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_runtime_instr -a50 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_runtime_instr -a44 ); do not edit.
 . "${srcdir=.}/init.sh"
-run_strace_match_diff -a50 
+run_strace_match_diff -a44 
diff --git a/tests-mx32/s390_sthyi.c b/tests-mx32/s390_sthyi.c
index 8f6bbfb..b7066e5 100644
--- a/tests-mx32/s390_sthyi.c
+++ b/tests-mx32/s390_sthyi.c
@@ -741,7 +741,7 @@
 		(kernel_ulong_t) 0xfee1deadfa57beefULL;
 
 	unsigned char *buf = tail_alloc(PAGE_SIZE);
-	uint64_t *ret = tail_alloc(sizeof(*ret));
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, ret);
 
 	long rc;
 
diff --git a/tests-mx32/seccomp-filter-v.c b/tests-mx32/seccomp-filter-v.c
index 34ab3b5..38def28 100644
--- a/tests-mx32/seccomp-filter-v.c
+++ b/tests-mx32/seccomp-filter-v.c
@@ -2,7 +2,7 @@
  * Check verbose decoding of seccomp SECCOMP_SET_MODE_FILTER.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -118,7 +118,7 @@
 	prog->len = 3;
 	syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, 0, prog);
 	tprintf("seccomp(SECCOMP_SET_MODE_FILTER, 0, {len=%u"
-		", filter=[%s, %p]}) = -1 EFAULT (%m)\n",
+		", filter=[%s, ... /* %p */]}) = -1 EFAULT (%m)\n",
 		prog->len, kill_stmt_txt, filter +  ARRAY_SIZE(filter_c));
 
 	prog->len = 0;
@@ -136,7 +136,8 @@
 	prog->filter = big_filter;
 	prog->len = BPF_MAXINSNS + 1;
 	tprintf("seccomp(SECCOMP_SET_MODE_FILTER, %s, {len=%u, filter=[",
-		"SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|0xfffffffc",
+		"SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|"
+		"SECCOMP_FILTER_FLAG_SPEC_ALLOW|0xfffffff8",
 		prog->len);
 	for (i = 0; i < BPF_MAXINSNS; ++i) {
 		if (i)
diff --git a/tests-mx32/seccomp-filter.c b/tests-mx32/seccomp-filter.c
index 7bc7656..53f8363 100644
--- a/tests-mx32/seccomp-filter.c
+++ b/tests-mx32/seccomp-filter.c
@@ -2,7 +2,7 @@
  * Check decoding of seccomp SECCOMP_SET_MODE_FILTER.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -56,12 +56,13 @@
 	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -1, prog);
 	printf("seccomp(SECCOMP_SET_MODE_FILTER, %s, {len=%u, filter=%p})"
 	       " = %ld %s (%m)\n",
-	       "SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|0xfffffffc",
+	       "SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|"
+	       "SECCOMP_FILTER_FLAG_SPEC_ALLOW|0xfffffff8",
 	       prog->len, prog->filter, rc, errno2name());
 
-	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -4L, efault);
+	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -8L, efault);
 	printf("seccomp(SECCOMP_SET_MODE_FILTER, %s, %p) = %ld %s (%m)\n",
-	       "0xfffffffc /* SECCOMP_FILTER_FLAG_??? */",
+	       "0xfffffff8 /* SECCOMP_FILTER_FLAG_??? */",
 	       efault, rc, errno2name());
 
 	puts("+++ exited with 0 +++");
diff --git a/tests-mx32/semop.c b/tests-mx32/semop.c
index 2366d38..4b14882 100644
--- a/tests-mx32/semop.c
+++ b/tests-mx32/semop.c
@@ -64,11 +64,11 @@
 	sem_b2->sem_flg = 0xbeef;
 
 	rc = semop(bogus_semid, sem_b2, 2);
-	printf("semop(%d, [{%hu, %hd, %s%s%#hx}, %p], %u) = %s\n",
+	printf("semop(%d, [{%hu, %hd, %s%s%#hx}, ... /* %p */], %u) = %s\n",
 		bogus_semid, sem_b2->sem_num, sem_b2->sem_op,
 		sem_b2->sem_flg & SEM_UNDO ? "SEM_UNDO|" : "",
 		sem_b2->sem_flg & IPC_NOWAIT ? "IPC_NOWAIT|" : "",
-		sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT),
+		(short) (sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT)),
 		sem_b2 + 1, 2, sprintrc(rc));
 
 	if (semop(id, sem_b, 1))
@@ -91,12 +91,12 @@
 	ts->tv_sec = 1;
 	ts->tv_nsec = 123456789;
 	rc = semtimedop(bogus_semid, sem_b2, 2, ts);
-	printf("semtimedop(%d, [{%hu, %hd, %s%s%#hx}, %p], %u"
+	printf("semtimedop(%d, [{%hu, %hd, %s%s%#hx}, ... /* %p */], %u"
 		", {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
 		bogus_semid, sem_b2->sem_num, sem_b2->sem_op,
 		sem_b2->sem_flg & SEM_UNDO ? "SEM_UNDO|" : "",
 		sem_b2->sem_flg & IPC_NOWAIT ? "IPC_NOWAIT|" : "",
-		sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT),
+		(short) (sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT)),
 		sem_b2 + 1, 2,
 		(long long) ts->tv_sec, zero_extend_signed_to_ull(ts->tv_nsec),
 		sprintrc(rc));
diff --git a/tests-mx32/set_mempolicy.c b/tests-mx32/set_mempolicy.c
index f3261a0..96ad7db 100644
--- a/tests-mx32/set_mempolicy.c
+++ b/tests-mx32/set_mempolicy.c
@@ -2,6 +2,7 @@
  * Check decoding of set_mempolicy syscall.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -76,7 +77,7 @@
 				printf("%#0*lx", (int) sizeof(long) * 2 + 2,
 				       nodemask[i]);
 			} else {
-				printf("%p", nodemask + i);
+				printf("... /* %p */", nodemask + i);
 				break;
 			}
 		}
diff --git a/tests-mx32/setgroups.c b/tests-mx32/setgroups.c
index 5645c22..a2851be 100644
--- a/tests-mx32/setgroups.c
+++ b/tests-mx32/setgroups.c
@@ -2,7 +2,7 @@
  * Check decoding of setgroups/setgroups32 syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -115,7 +115,7 @@
 	errstr = sprintrc(rc);
 	printf("%s(2, [", SYSCALL_NAME);
 	printuid(*g1);
-	printf(", %p]) = %s\n", g1 + 1, errstr);
+	printf(", ... /* %p */]) = %s\n", g1 + 1, errstr);
 
 	g2[0] = -2;
 	g2[1] = -3;
@@ -133,7 +133,7 @@
 	printuid(g2[0]);
 	printf(", ");
 	printuid(g2[1]);
-	printf(", %p]) = %s\n", g2 + 2, errstr);
+	printf(", ... /* %p */]) = %s\n", g2 + 2, errstr);
 
 	g3[0] = 0;
 	g3[1] = 1;
diff --git a/tests-mx32/signal_receive.c b/tests-mx32/signal_receive.c
index 01c52e8..a464b8c 100644
--- a/tests-mx32/signal_receive.c
+++ b/tests-mx32/signal_receive.c
@@ -1,43 +1,127 @@
+/*
+ * Check decoding of signal delivery.
+ *
+ * Copyright (c) 2016-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <signal.h>
 #include <stdio.h>
 #include <unistd.h>
 
-void sig_print(const char *signame, const int pid, const int uid)
-{
-	printf("kill(%d, %s) = 0\n"
-	       "--- %s {si_signo=%s, si_code=SI_USER, si_pid=%d"
-	       ", si_uid=%d} ---\n",
-	       pid, signame, signame, signame, pid, uid);
-}
+static volatile int s_sig, s_code, s_pid, s_uid;
 
 static void
-handler(int sig)
+handler(int sig, siginfo_t *info, void *ucontext)
 {
+	s_sig = info->si_signo;
+	s_code = info->si_code;
+	s_pid = info->si_pid;
+	s_uid = info->si_uid;
 }
 
 int
 main(void)
 {
-	int sig, pid = getpid(), uid = getuid();
-	const struct sigaction act = { .sa_handler = handler };
-	sigset_t mask;
-	sigemptyset(&mask);
+	static const char prefix[] = "KERNEL BUG";
+	int printed = 0;
 
-	for (sig = 1; sig <= 31; sig++) {
-		if (sig != SIGKILL && sig != SIGSTOP) {
-			sigaction(sig, &act, NULL);
-			sigaddset(&mask, sig);
+	const int pid = getpid();
+	const int uid = geteuid();
+
+	for (int sig = 1; sig <= 31; ++sig) {
+		if (sig == SIGKILL || sig == SIGSTOP)
+			continue;
+
+		sigset_t mask;
+		sigemptyset(&mask);
+		sigaddset(&mask, sig);
+		if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
+			perror_msg_and_fail("sigprocmask");
+
+		static const struct sigaction act = {
+			.sa_sigaction = handler,
+			.sa_flags = SA_SIGINFO
+		};
+		if (sigaction(sig, &act, NULL))
+			perror_msg_and_fail("sigaction: %d", sig);
+
+		if (kill(pid, sig) != 0)
+			perror_msg_and_fail("kill: %d", sig);
+
+#ifdef MPERS_IS_m32
+		/*
+		 * The tracee has received a compat siginfo_t but
+		 * the tracer has received a native siginfo_t.
+		 */
+		const int e_sig = sig;
+		const int e_pid = pid;
+		const int e_uid = uid;
+#else
+		/*
+		 * If the tracee is a native process,
+		 * then the tracer is also native.
+		 * If the tracee is a compat process,
+		 * then the tracer is also compat.
+		 * Anyway, both the tracee and the tracer
+		 * have received the same siginfo_t.
+		 */
+		const int e_sig = s_sig;
+		const int e_pid = s_pid;
+		const int e_uid = s_uid;
+#endif
+		printf("kill(%d, %s) = 0\n", pid, signal2name(sig));
+		printf("--- %s {si_signo=%s, si_code=SI_USER, si_pid=%d"
+		       ", si_uid=%d} ---\n",
+		       signal2name(sig), signal2name(e_sig), e_pid, e_uid);
+
+		if (s_code || sig != s_sig || pid != s_pid || uid != s_uid) {
+			/*
+			 * The kernel has failed to initialize siginfo_t
+			 * properly.  There is nothing that could be done
+			 * on the strace side to workaround the kernel bug,
+			 * so just print some useful diagnostics.
+			 */
+			if (!printed) {
+				printed = 1;
+				fprintf(stderr, "%s: siginfo_t\n", prefix);
+			}
+			fprintf(stderr,
+				"%s: expected: si_signo=%d, si_code=%d"
+				", si_pid=%d, si_uid=%d\n"
+				"%s: received: si_signo=%d, si_code=%d"
+				", si_pid=%d, si_uid=%d\n",
+				prefix, sig, SI_USER, pid, uid,
+				prefix, sig, s_code, s_pid, s_uid);
 		}
 	}
-	sigprocmask(SIG_UNBLOCK, &mask, NULL);
 
-	for (sig = 1; sig <= 31; sig++) {
-		if (sig != SIGKILL && sig != SIGSTOP) {
-			if (kill(pid, sig) != 0)
-				perror_msg_and_fail("kill: %d", sig);
-			sig_print(signal2name(sig), pid, uid);
-		}
+	if (printed) {
+		fprintf(stderr, "%s: end of diagnostics\n"
+			"*** PLEASE FIX THE KERNEL ***\n", prefix);
 	}
 
 	puts("+++ exited with 0 +++");
diff --git a/tests-mx32/so_peercred-Xabbrev.c b/tests-mx32/so_peercred-Xabbrev.c
new file mode 100644
index 0000000..a7056a6
--- /dev/null
+++ b/tests-mx32/so_peercred-Xabbrev.c
@@ -0,0 +1 @@
+#include "so_peercred.c"
diff --git a/tests-mx32/so_peercred-Xabbrev.gen.test b/tests-mx32/so_peercred-Xabbrev.gen.test
new file mode 100755
index 0000000..64a5538
--- /dev/null
+++ b/tests-mx32/so_peercred-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred-Xabbrev -e trace=getsockopt -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt -Xabbrev
diff --git a/tests-mx32/so_peercred-Xraw.c b/tests-mx32/so_peercred-Xraw.c
new file mode 100644
index 0000000..e45f2df
--- /dev/null
+++ b/tests-mx32/so_peercred-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "so_peercred.c"
diff --git a/tests-mx32/so_peercred-Xraw.gen.test b/tests-mx32/so_peercred-Xraw.gen.test
new file mode 100755
index 0000000..471ae59
--- /dev/null
+++ b/tests-mx32/so_peercred-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred-Xraw -e trace=getsockopt -Xraw -a39); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt -Xraw -a39
diff --git a/tests-mx32/so_peercred-Xverbose.c b/tests-mx32/so_peercred-Xverbose.c
new file mode 100644
index 0000000..1bb47e9
--- /dev/null
+++ b/tests-mx32/so_peercred-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "so_peercred.c"
diff --git a/tests-mx32/so_peercred-Xverbose.gen.test b/tests-mx32/so_peercred-Xverbose.gen.test
new file mode 100755
index 0000000..2926517
--- /dev/null
+++ b/tests-mx32/so_peercred-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred-Xverbose -e trace=getsockopt -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt -Xverbose
diff --git a/tests-mx32/so_peercred.c b/tests-mx32/so_peercred.c
index 53bf071..6eac846 100644
--- a/tests-mx32/so_peercred.c
+++ b/tests-mx32/so_peercred.c
@@ -2,6 +2,7 @@
  * Check decoding of SO_PEERCRED socket option.
  *
  * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -46,6 +47,28 @@
 	return rc;
 }
 
+static const char *
+so_str(void)
+{
+	static char buf[256];
+
+	if (!buf[0]) {
+#if XLAT_RAW
+		snprintf(buf, sizeof(buf),
+			 "%#x, %#x", SOL_SOCKET, SO_PEERCRED);
+#elif XLAT_VERBOSE
+		snprintf(buf, sizeof(buf),
+			 "%#x /* SOL_SOCKET */, %#x /* SO_PEERCRED */",
+			 SOL_SOCKET, SO_PEERCRED);
+#else
+		snprintf(buf, sizeof(buf),
+			 "SOL_SOCKET, SO_PEERCRED");
+#endif
+	}
+
+	return buf;
+}
+
 int
 main(void)
 {
@@ -59,7 +82,7 @@
 	/* classic getsockopt */
 	*len = sizeof(*peercred);
 	get_peercred(sv[0], peercred, len);
-	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", sv[0]);
+	printf("getsockopt(%d, %s", sv[0], so_str());
 	PRINT_FIELD_D(", {", *peercred, pid);
 	PRINT_FIELD_UID(", ", *peercred, uid);
 	PRINT_FIELD_UID(", ", *peercred, gid);
@@ -72,7 +95,7 @@
 	/* getsockopt with optlen larger than necessary - shortened */
 	*len = sizeof(*peercred) + 1;
 	get_peercred(fd, peercred, len);
-	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	printf("getsockopt(%d, %s", fd, so_str());
 	PRINT_FIELD_D(", {", *peercred, pid);
 	PRINT_FIELD_UID(", ", *peercred, uid);
 	PRINT_FIELD_UID(", ", *peercred, gid);
@@ -82,14 +105,14 @@
 	/* 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);
+	printf("getsockopt(%d, %s", fd, so_str());
 	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);
+	printf("getsockopt(%d, %s", fd, so_str());
 	PRINT_FIELD_D(", {", *peercred, pid);
 	PRINT_FIELD_UID(", ", *peercred, uid);
 	printf("}, [%d]) = %s\n", *len, errstr);
@@ -97,20 +120,20 @@
 	/* 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);
+	printf("getsockopt(%d, %s, ", fd, so_str());
 	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);
+	printf("getsockopt(%d, %s, %p, [%d]) = %s\n",
+	       fd, so_str(), &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);
+	printf("getsockopt(%d, %s, %p, %p) = %s\n",
+	       fd, so_str(), peercred, len + 1, errstr);
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-mx32/sock_filter-v-Xabbrev.c b/tests-mx32/sock_filter-v-Xabbrev.c
new file mode 100644
index 0000000..ac680e2
--- /dev/null
+++ b/tests-mx32/sock_filter-v-Xabbrev.c
@@ -0,0 +1 @@
+#include "sock_filter-v.c"
diff --git a/tests-mx32/sock_filter-v-Xabbrev.gen.test b/tests-mx32/sock_filter-v-Xabbrev.gen.test
new file mode 100755
index 0000000..e52763f
--- /dev/null
+++ b/tests-mx32/sock_filter-v-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v-Xabbrev -v -e trace=getsockopt,setsockopt -X abbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -v -e trace=getsockopt,setsockopt -X abbrev
diff --git a/tests-mx32/sock_filter-v-Xraw.c b/tests-mx32/sock_filter-v-Xraw.c
new file mode 100644
index 0000000..e85309c
--- /dev/null
+++ b/tests-mx32/sock_filter-v-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "sock_filter-v.c"
diff --git a/tests-mx32/sock_filter-v-Xraw.gen.test b/tests-mx32/sock_filter-v-Xraw.gen.test
new file mode 100755
index 0000000..3c7df81
--- /dev/null
+++ b/tests-mx32/sock_filter-v-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v-Xraw -a 37 -v -e trace=getsockopt,setsockopt -X raw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a 37 -v -e trace=getsockopt,setsockopt -X raw
diff --git a/tests-mx32/sock_filter-v-Xverbose.c b/tests-mx32/sock_filter-v-Xverbose.c
new file mode 100644
index 0000000..59d76bd
--- /dev/null
+++ b/tests-mx32/sock_filter-v-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "sock_filter-v.c"
diff --git a/tests-mx32/sock_filter-v-Xverbose.gen.test b/tests-mx32/sock_filter-v-Xverbose.gen.test
new file mode 100755
index 0000000..b58c5b5
--- /dev/null
+++ b/tests-mx32/sock_filter-v-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v-Xverbose -v -e trace=getsockopt,setsockopt -X verbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -v -e trace=getsockopt,setsockopt -X verbose
diff --git a/tests-mx32/sock_filter-v.c b/tests-mx32/sock_filter-v.c
index 16d5c1c..6829786 100644
--- a/tests-mx32/sock_filter-v.c
+++ b/tests-mx32/sock_filter-v.c
@@ -2,6 +2,7 @@
  * Check decoding of socket filters.
  *
  * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,16 +36,30 @@
 #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)
+/* SO_GET_FILTER was introduced by Linux commit v3.8-rc1~139^2~518 */
+#ifndef SO_GET_FILTER
+# define SO_GET_FILTER SO_ATTACH_FILTER
+#endif
 
-#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)
+#define HEX_FMT "%#x"
+
+#if XLAT_RAW
+# define XLAT_FMT HEX_FMT
+# define XLAT_ARGS(a_) (a_)
+#elif XLAT_VERBOSE
+# define XLAT_FMT HEX_FMT " /* %s */"
+# define XLAT_ARGS(a_) (a_), #a_
+#else
+# define XLAT_FMT "%s"
+# define XLAT_ARGS(a_) #a_
+#endif
+
+#define PRINT_STMT(pfx, code_fmt, k_fmt, ...)	\
+	printf("%sBPF_STMT(" code_fmt ", " k_fmt ")", pfx, __VA_ARGS__)
+
+#define PRINT_JUMP(pfx, code_fmt, k, jt, jf, ...)		\
+	printf("%sBPF_JUMP(" code_fmt ", %#x, %#x, %#x)",	\
+	       pfx, __VA_ARGS__, k, jt, jf)
 
 static const struct sock_filter bpf_filter[] = {
 	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_LL_OFF+4),
@@ -62,16 +77,43 @@
 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);
+	PRINT_STMT("[", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   XLAT_FMT "+4",
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   XLAT_ARGS(SKF_LL_OFF));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   XLAT_FMT "+8",
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   XLAT_ARGS(SKF_NET_OFF));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   XLAT_FMT "+" XLAT_FMT,
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   XLAT_ARGS(SKF_AD_OFF), XLAT_ARGS(SKF_AD_PROTOCOL));
+	PRINT_JUMP(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   IPPROTO_UDP, 0, 5,
+		   XLAT_ARGS(BPF_JMP), XLAT_ARGS(BPF_K), XLAT_ARGS(BPF_JEQ));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_W), XLAT_ARGS(BPF_LEN),
+		   0);
+	PRINT_JUMP(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   100, 0, 3,
+		   XLAT_ARGS(BPF_JMP), XLAT_ARGS(BPF_K), XLAT_ARGS(BPF_JGE));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   42);
+	PRINT_JUMP(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   'a', 0, 1,
+		   XLAT_ARGS(BPF_JMP), XLAT_ARGS(BPF_K), XLAT_ARGS(BPF_JEQ));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_RET), XLAT_ARGS(BPF_K),
+		   -1U);
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_RET), XLAT_ARGS(BPF_K),
+		   0);
 	putchar(']');
 }
 
@@ -80,7 +122,7 @@
 static int
 get_filter(int fd, void *val, socklen_t *len)
 {
-	int rc = getsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, val, len);
+	int rc = getsockopt(fd, SOL_SOCKET, SO_GET_FILTER, val, len);
 	errstr = sprintrc(rc);
 	return rc;
 }
@@ -114,35 +156,41 @@
 	*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);
+		perror_msg_and_skip("getsockopt SOL_SOCKET SO_GET_FILTER");
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", NULL, [%u->0]) "
+	       "= 0\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER),
+	       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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", NULL, NULL) "
+	       "= %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER), 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);
+	printf("setsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", {len=%u, filter=",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_ATTACH_FILTER),
+	       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);
+	printf("setsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, %u) = %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_ATTACH_FILTER), 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);
+	printf("setsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", {len=%u, filter=",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_ATTACH_REUSEPORT_CBPF),
+	       prog->len);
 	print_filter();
 	printf("}, %u) = %s\n", (unsigned int) sizeof(*prog), errstr);
 #endif
@@ -150,28 +198,30 @@
 	/* 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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, [0->%u]) "
+	       "= %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER), 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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, [%u]) = %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER), 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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, [%u]) = %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER),
+	       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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", ",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER));
 	print_filter();
 	printf(", [%u->%d]) = %s\n",
 	       (unsigned int) ARRAY_SIZE(bpf_filter) + 1, *len, errstr);
diff --git a/tests-mx32/strace-V.test b/tests-mx32/strace-V.test
index eb05e86..a0274c2 100755
--- a/tests-mx32/strace-V.test
+++ b/tests-mx32/strace-V.test
@@ -38,7 +38,8 @@
 	exit 1
 }
 
-option_unwind=$(getoption USE_LIBUNWIND " stack-unwind")
+option_unwind=$(getoption ENABLE_STACKTRACE \
+		" stack-trace=$(getstr USE_UNWINDER)")
 option_demangle=$(getoption USE_DEMANGLE " stack-demangle")
 
 option_m32=
diff --git a/tests-mx32/strace-k-demangle.expected b/tests-mx32/strace-k-demangle.expected
new file mode 100644
index 0000000..e42e78f
--- /dev/null
+++ b/tests-mx32/strace-k-demangle.expected
@@ -0,0 +1 @@
+(__kernel_vsyscall )?(__)?getpid ns::f3\(int\) ns::f2\(int\) ns::f1\(int\) ns::f0\(int\) main
diff --git a/tests-mx32/strace-k-demangle.test b/tests-mx32/strace-k-demangle.test
index 1616449..106a700 100755
--- a/tests-mx32/strace-k-demangle.test
+++ b/tests-mx32/strace-k-demangle.test
@@ -2,6 +2,5 @@
 # Check strace -k symbol names demangling.
 
 test_prog=../stack-fcall-mangled
-expected='getpid ns::f3(int) ns::f2(int) ns::f1(int) ns::f0(int) main '
 
 . "${srcdir=.}"/strace-k.test
diff --git a/tests-mx32/strace-k.expected b/tests-mx32/strace-k.expected
new file mode 100644
index 0000000..840d648
--- /dev/null
+++ b/tests-mx32/strace-k.expected
@@ -0,0 +1 @@
+(__kernel_vsyscall )?(__)?getpid f3 f2 f1 f0 main
diff --git a/tests-mx32/strace-k.test b/tests-mx32/strace-k.test
index 2a21a9d..fb1e2b3 100755
--- a/tests-mx32/strace-k.test
+++ b/tests-mx32/strace-k.test
@@ -4,7 +4,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.
+# Copyright (c) 2014-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -35,20 +35,41 @@
 [ -f /proc/self/maps ] ||
 	framework_skip_ '/proc/self/maps is not available'
 
+check_prog grep
 check_prog sed
 check_prog tr
 
-: ${test_prog=../stack-fcall}
-: ${expected='getpid f3 f2 f1 f0 main '}
-
-run_prog "$test_prog"
+run_prog "${test_prog=../stack-fcall}"
 run_strace -e getpid -k $args
 
-result=$(sed -r -n '1,/\(main\+0x[a-f0-9]+\) .*/ s/^[^(]+\(([^+]+)\+0x[a-f0-9]+\) .*/\1/p' "$LOG" |
-	tr '\n' ' ')
+expected="$srcdir/$NAME.expected"
+sed -r -n '1,/\(main\+0x[a-f0-9]+\) .*/ s/^[^(]+\(([^+]+)\+0x[a-f0-9]+\) .*/\1/p' "$LOG" |
+	tr '\n' ' ' |sed 's/ $//' > "$OUT"
 
-test "$result" = "$expected" || {
-	echo "expected: \"$expected\""
-	echo "result: \"$result\""
+LC_ALL=C grep -E -x -f "$expected" < "$OUT" > /dev/null || {
+	cat >&2 <<__EOF__
+Failed pattern of expected output: $(cat "$expected")
+Actual output: $(cat "$OUT")
+__EOF__
+
+	pattern=
+	case "$STRACE_ARCH" in
+		aarch64|i386|ppc*|s390*|sparc*|x32|x86*)
+			# These architectures are supported by elfutils libdw,
+			# see grep '\<HOOK\>.*\<abi_cfi\>' elfutils/backends
+			;;
+		arm) pattern='No DWARF information found'
+			# This is also supported by elfutils libdw
+			# but the latter needs debuginfo for unwinding.
+			;;
+		*) pattern='Unwinding not supported for this architecture'
+			;;
+	esac
+	if [ -n "$pattern" ] &&
+	   LC_ALL=C grep -x " > $pattern" < "$LOG" > /dev/null; then
+		cat < "$LOG" >&2
+		skip_ "stack tracing is not fully supported on $STRACE_ARCH yet"
+	fi
+
 	dump_log_and_fail_with "$STRACE $args output mismatch"
 }
diff --git a/tests-mx32/struct_flock.c b/tests-mx32/struct_flock.c
deleted file mode 100644
index 428c038..0000000
--- a/tests-mx32/struct_flock.c
+++ /dev/null
@@ -1,108 +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 <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "flock.h"
-
-#define FILE_LEN 4096
-
-#define TEST_FLOCK_EINVAL(cmd) test_flock_einval(cmd, #cmd)
-
-#ifdef HAVE_TYPEOF
-# define TYPEOF_FLOCK_OFF_T typeof(((struct_kernel_flock *) NULL)->l_len)
-#else
-# define TYPEOF_FLOCK_OFF_T off_t
-#endif
-
-static long
-invoke_test_syscall(const unsigned int cmd, void *const p)
-{
-	const kernel_ulong_t fd = F8ILL_KULONG_MASK;
-	const kernel_ulong_t op = F8ILL_KULONG_MASK | cmd;
-
-	return syscall(TEST_SYSCALL_NR, fd, op, (unsigned long) p);
-}
-
-static void
-test_flock_einval(const int cmd, const char *name)
-{
-	struct_kernel_flock fl = {
-		.l_type = F_RDLCK,
-		.l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeedULL,
-		.l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00dULL
-	};
-	long rc = invoke_test_syscall(cmd, &fl);
-	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
-	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
-	       (intmax_t) fl.l_start, (intmax_t) fl.l_len, sprintrc(rc));
-}
-
-static void
-test_flock(void)
-{
-	TEST_FLOCK_EINVAL(F_SETLK);
-	TEST_FLOCK_EINVAL(F_SETLKW);
-
-	struct_kernel_flock fl = {
-		.l_type = F_RDLCK,
-		.l_len = FILE_LEN
-	};
-	long rc = invoke_test_syscall(F_SETLK, &fl);
-	printf("%s(0, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
-	       ", l_start=0, l_len=%d}) = %s\n",
-	       TEST_SYSCALL_STR, FILE_LEN, sprintrc(rc));
-	if (rc)
-		return;
-
-	invoke_test_syscall(F_GETLK, &fl);
-	printf("%s(0, F_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
-	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
-	       TEST_SYSCALL_STR, FILE_LEN);
-
-	invoke_test_syscall(F_SETLK, &fl);
-	printf("%s(0, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
-	       ", l_start=0, l_len=%d}) = 0\n",
-	       TEST_SYSCALL_STR, FILE_LEN);
-}
-
-static void
-create_sample(void)
-{
-	char fname[] = TEST_SYSCALL_STR "_XXXXXX";
-
-	(void) close(0);
-	if (mkstemp(fname))
-		perror_msg_and_fail("mkstemp: %s", fname);
-	if (unlink(fname))
-		perror_msg_and_fail("unlink: %s", fname);
-	if (ftruncate(0, FILE_LEN))
-		perror_msg_and_fail("ftruncate");
-}
diff --git a/tests-mx32/test_nlattr.h b/tests-mx32/test_nlattr.h
index 43f467f..9038c0e 100644
--- a/tests-mx32/test_nlattr.h
+++ b/tests-mx32/test_nlattr.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -51,15 +51,17 @@
 }
 
 static void
-print_nlattr(const unsigned int nla_len, const char *const nla_type)
+print_nlattr(const unsigned int nla_len, const char *const nla_type, bool add_data)
 {
-	printf(", {{nla_len=%u, nla_type=%s}, ", nla_len, nla_type);
+	printf(", %s{{nla_len=%u, nla_type=%s}, ",
+	       add_data ? "[" : "", nla_len, nla_type);
 }
 
-#define TEST_NLATTR_(fd_, nlh0_, hdrlen_,				\
+#define TEST_NLATTR_EX_(fd_, nlh0_, hdrlen_,				\
 		     init_msg_, print_msg_,				\
 		     nla_type_, nla_type_str_,				\
-		     nla_data_len_, src_, slen_, ...)			\
+		     nla_data_len_, nla_total_len_,			\
+		     src_, slen_, ...)					\
 	do {								\
 		struct nlmsghdr *const nlh =				\
 			(nlh0_) - (NLA_HDRLEN + (slen_));		\
@@ -68,7 +70,7 @@
 		const unsigned int nla_len =				\
 			NLA_HDRLEN + (nla_data_len_);			\
 		const unsigned int msg_len =				\
-			NLMSG_SPACE(hdrlen_) + nla_len;			\
+			NLMSG_SPACE(hdrlen_) + NLA_HDRLEN + (nla_total_len_); \
 									\
 		(init_msg_)(nlh, msg_len);				\
 		init_nlattr(TEST_NLATTR_nla, nla_len, (nla_type_),	\
@@ -80,14 +82,28 @@
 									\
 		printf("sendto(%d, {", (fd_));				\
 		(print_msg_)(msg_len);					\
-		print_nlattr(nla_len, (nla_type_str_));			\
+		print_nlattr(nla_len, (nla_type_str_),			\
+			     (nla_total_len_) > (nla_data_len_));	\
 									\
 		{ __VA_ARGS__; }					\
 									\
+		if ((nla_total_len_) > (nla_data_len_))			\
+			printf("]");					\
+									\
 		printf("}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",		\
 		       msg_len, errstr);				\
 	} while (0)
 
+#define TEST_NLATTR_(fd_, nlh0_, hdrlen_,				\
+		     init_msg_, print_msg_,				\
+		     nla_type_, nla_type_str_,				\
+		     nla_data_len_, src_, slen_, ...)			\
+	TEST_NLATTR_EX_((fd_), (nlh0_), (hdrlen_),			\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), (nla_type_str_),			\
+			(nla_data_len_), (nla_data_len_),		\
+			(src_), (slen_), __VA_ARGS__)
+
 #define TEST_NLATTR(fd_, nlh0_, hdrlen_,				\
 		    init_msg_, print_msg_,				\
 		    nla_type_,						\
@@ -106,11 +122,12 @@
 			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_str_),			\
-			plen, (pattern_), plen,				\
-			(fallback_func)((pattern_), plen));		\
+		if (plen > 0)						\
+			TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),		\
+				(init_msg_), (print_msg_),		\
+				(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_),			\
@@ -170,7 +187,7 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
 			printf("]"));					\
 		/* short read of sizeof(obj_) */			\
@@ -183,11 +200,11 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf(", %p]",					\
+			printf(", ... /* %p */]",			\
 			       RTA_DATA(NLMSG_ATTR(nlh, (hdrlen_)))	\
-			        + sizeof((obj_)[0])));			\
+			        + sizeof(obj_) - sizeof((obj_)[0])));	\
 		/* sizeof(obj_) */					\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
@@ -198,7 +215,7 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_); ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
 			printf("]"));					\
 	} while (0)
@@ -206,21 +223,23 @@
 #define TEST_NESTED_NLATTR_OBJECT_EX_(fd_, nlh0_, hdrlen_,		\
 				      init_msg_, print_msg_,		\
 				      nla_type_, nla_type_str_,		\
-				      pattern_, obj_, depth_, ...)	\
+				      pattern_, obj_, fallback_func,	\
+				      depth_, ...)	\
 	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 * depth_,	\
-			(hdrlen_) + NLA_HDRLEN * depth_,		\
-			(init_msg_), (print_msg_),			\
-			(nla_type_), (nla_type_str_),			\
-			plen, (pattern_), plen,				\
-			print_quoted_hex((pattern_), plen);		\
-			size_t i;					\
-			for (i = 0; i < depth_; ++i)			\
-				printf("}"));				\
+		if (plen > 0)						\
+			TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_, \
+				(hdrlen_) + NLA_HDRLEN * depth_,	\
+				(init_msg_), (print_msg_),		\
+				(nla_type_), (nla_type_str_),		\
+				plen, (pattern_), plen,			\
+				(fallback_func)((pattern_), plen);	\
+				size_t i;				\
+				for (i = 0; i < depth_; ++i)		\
+					printf("}"));			\
 		/* short read of sizeof(obj_) */			\
 		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
 			(hdrlen_) + NLA_HDRLEN * depth_,		\
@@ -252,7 +271,8 @@
 	TEST_NESTED_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),	\
 				      (init_msg_), (print_msg_),	\
 				      (nla_type_), #nla_type_,		\
-				      (pattern_), (obj_), (depth_),	\
+				      (pattern_), (obj_),		\
+				      print_quoted_hex, (depth_),	\
 				      __VA_ARGS__)
 
 #define TEST_NESTED_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,			\
@@ -261,27 +281,30 @@
 	TEST_NESTED_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),	\
 				      (init_msg_), (print_msg_),	\
 				      (nla_type_), #nla_type_,		\
-				      (pattern_), (obj_), 1,		\
+				      (pattern_), (obj_),		\
+				      print_quoted_hex, 1,		\
 				      __VA_ARGS__)
 
-#define TEST_NESTED_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,			\
+#define TEST_NESTED_NLATTR_ARRAY_EX(fd_, nlh0_, hdrlen_,		\
 				 init_msg_, print_msg_,			\
-				 nla_type_, pattern_, obj_, print_elem_)\
+				 nla_type_, pattern_, obj_, depth_,	\
+				 print_elem_)				\
 	do {								\
 		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_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			plen, (pattern_), plen,				\
 			print_quoted_hex((pattern_), plen);		\
-			printf("}"));					\
+			for (size_t i = 0; i < depth_; ++i)		\
+				printf("}"));				\
 		/* sizeof((obj_)[0]) < len < sizeof(obj_) */		\
-		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_) - 1,				\
@@ -290,12 +313,14 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf("]}"));					\
+			printf("]");					\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
 		/* short read of sizeof(obj_) */			\
-		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_),					\
@@ -304,14 +329,16 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf(", %p]}",				\
+			printf(", ... /* %p */]",			\
 			       RTA_DATA(TEST_NLATTR_nla)		\
-			        + sizeof((obj_)[0])));			\
+			        + sizeof(obj_) - sizeof((obj_)[0]));	\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
 		/* sizeof(obj_) */					\
-		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_),					\
@@ -320,7 +347,17 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_); ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf("]}"));					\
+			printf("]");					\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
 	} while (0)
+
+#define TEST_NESTED_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,			\
+				 init_msg_, print_msg_,			\
+				 nla_type_, pattern_, obj_, print_elem_)\
+	TEST_NESTED_NLATTR_ARRAY_EX((fd_), (nlh0_), (hdrlen_),		\
+				    (init_msg_), (print_msg_),		\
+				    nla_type_, (pattern_), (obj_), 1,	\
+				    (print_elem_))
diff --git a/tests-mx32/tests.h b/tests-mx32/tests.h
index 3bf454d..248e341 100644
--- a/tests-mx32/tests.h
+++ b/tests-mx32/tests.h
@@ -62,6 +62,14 @@
 # define VERBOSE 0
 #endif
 
+/* xlat verbosity defaults */
+#ifndef XLAT_RAW
+# define XLAT_RAW 0
+#endif
+#ifndef XLAT_VERBOSE
+# define XLAT_VERBOSE 0
+#endif
+
 #ifndef DEFAULT_STRLEN
 /* Default maximum # of bytes printed in printstr et al. */
 # define DEFAULT_STRLEN 32
@@ -109,6 +117,9 @@
 void *tail_memdup(const void *, const size_t)
 	ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((2));
 
+#define midtail_alloc(after_, before_) \
+	((void *) ((char *) tail_alloc(((before_) + (after_))) + (before_)))
+
 /*
  * Allocate an object of the specified type at the end
  * of a mapped memory region.
@@ -163,6 +174,12 @@
  */
 void print_quoted_cstring(const char *str, size_t size);
 
+/*
+ * Print a NUL-terminated string `str' of length up to `size'
+ * in a quoted form.
+ */
+void print_quoted_stringn(const char *str, size_t size);
+
 /* Print memory in a quoted form with optional escape characters. */
 void print_quoted_memory_ex(const void *, size_t, bool quote,
 			    const char *escape_chars);
@@ -277,7 +294,6 @@
 #endif
 #define LL_VAL_TO_PAIR(llval) LL_PAIR((long) ((llval) >> 32), (long) (llval))
 
-#define _STR(_arg) #_arg
 #define ARG_STR(_arg) (_arg), #_arg
 #define ARG_ULL_STR(_arg) _arg##ULL, #_arg
 
diff --git a/tests-mx32/trace_personality_32.gen.test b/tests-mx32/trace_personality_32.gen.test
new file mode 100755
index 0000000..a5f5c7d
--- /dev/null
+++ b/tests-mx32/trace_personality_32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_32 +qualify_personality.sh 32 'getcwd' 'fsync-y'); do not edit.
+set -- 32 'getcwd' 'fsync-y'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-mx32/trace_personality_32.in b/tests-mx32/trace_personality_32.in
new file mode 100644
index 0000000..9da47c1
--- /dev/null
+++ b/tests-mx32/trace_personality_32.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests-mx32/trace_personality_64.gen.test b/tests-mx32/trace_personality_64.gen.test
new file mode 100755
index 0000000..5b961ef
--- /dev/null
+++ b/tests-mx32/trace_personality_64.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_64 +qualify_personality.sh 64 'getcwd' 'fsync-y'); do not edit.
+set -- 64 'getcwd' 'fsync-y'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-mx32/trace_personality_64.in b/tests-mx32/trace_personality_64.in
new file mode 100644
index 0000000..9da47c1
--- /dev/null
+++ b/tests-mx32/trace_personality_64.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests-mx32/trace_personality_regex_32.gen.test b/tests-mx32/trace_personality_regex_32.gen.test
new file mode 100755
index 0000000..f2800d2
--- /dev/null
+++ b/tests-mx32/trace_personality_regex_32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_regex_32 +qualify_personality.sh 32 '/clock.*' 'times|fcntl.*'); do not edit.
+set -- 32 '/clock.*' 'times|fcntl.*'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-mx32/trace_personality_regex_32.in b/tests-mx32/trace_personality_regex_32.in
new file mode 100755
index 0000000..864de29
--- /dev/null
+++ b/tests-mx32/trace_personality_regex_32.in
@@ -0,0 +1,3 @@
+clock_adjtime	-a37
+clock_nanosleep
+clock_xettime	-a36
diff --git a/tests-mx32/trace_personality_regex_64.gen.test b/tests-mx32/trace_personality_regex_64.gen.test
new file mode 100755
index 0000000..4b19f1b
--- /dev/null
+++ b/tests-mx32/trace_personality_regex_64.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_regex_64 +qualify_personality.sh 64 '/clock.*' 'times|fcntl.*'); do not edit.
+set -- 64 '/clock.*' 'times|fcntl.*'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-mx32/trace_personality_regex_64.in b/tests-mx32/trace_personality_regex_64.in
new file mode 100755
index 0000000..864de29
--- /dev/null
+++ b/tests-mx32/trace_personality_regex_64.in
@@ -0,0 +1,3 @@
+clock_adjtime	-a37
+clock_nanosleep
+clock_xettime	-a36
diff --git a/tests-mx32/trace_personality_regex_x32.gen.test b/tests-mx32/trace_personality_regex_x32.gen.test
new file mode 100755
index 0000000..7f41671
--- /dev/null
+++ b/tests-mx32/trace_personality_regex_x32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_regex_x32 +qualify_personality.sh x32 '/clock.*' 'times|fcntl.*'); do not edit.
+set -- x32 '/clock.*' 'times|fcntl.*'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-mx32/trace_personality_regex_x32.in b/tests-mx32/trace_personality_regex_x32.in
new file mode 100755
index 0000000..864de29
--- /dev/null
+++ b/tests-mx32/trace_personality_regex_x32.in
@@ -0,0 +1,3 @@
+clock_adjtime	-a37
+clock_nanosleep
+clock_xettime	-a36
diff --git a/tests-mx32/trace_personality_x32.gen.test b/tests-mx32/trace_personality_x32.gen.test
new file mode 100755
index 0000000..724499a
--- /dev/null
+++ b/tests-mx32/trace_personality_x32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_x32 +qualify_personality.sh x32 'getcwd' 'fsync-y'); do not edit.
+set -- x32 'getcwd' 'fsync-y'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests-mx32/trace_personality_x32.in b/tests-mx32/trace_personality_x32.in
new file mode 100644
index 0000000..9da47c1
--- /dev/null
+++ b/tests-mx32/trace_personality_x32.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests-mx32/xet_thread_area_x86.c b/tests-mx32/xet_thread_area_x86.c
index 36591ec..d5be69f 100644
--- a/tests-mx32/xet_thread_area_x86.c
+++ b/tests-mx32/xet_thread_area_x86.c
@@ -152,9 +152,9 @@
 
 int main(void)
 {
-	struct user_desc *ta1 = tail_alloc(sizeof(*ta1));
-	struct user_desc *ta2 = tail_alloc(sizeof(*ta2));
-	unsigned *bogus_entry_number = tail_alloc(sizeof(*bogus_entry_number));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct user_desc, ta1);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct user_desc, ta2);
+	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned int, bogus_entry_number);
 
 	long set_rc = -1;
 
diff --git a/tests/Makefile b/tests/Makefile
index 3637df7..09d6bfa 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -139,7 +139,11 @@
 check_PROGRAMS = $(am__EXEEXT_1) _newselect-P$(EXEEXT) 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) \
+	block_reset_raise_run$(EXEEXT) bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-v$(EXEEXT) bpf-success$(EXEEXT) \
+	bpf-success-v$(EXEEXT) caps-abbrev$(EXEEXT) \
 	check_sigblock$(EXEEXT) check_sigign$(EXEEXT) \
 	clone_parent$(EXEEXT) clone_ptrace$(EXEEXT) count-f$(EXEEXT) \
 	delay$(EXEEXT) execve-v$(EXEEXT) execveat-v$(EXEEXT) \
@@ -147,7 +151,8 @@
 	getpid$(EXEEXT) getppid$(EXEEXT) gettid$(EXEEXT) \
 	inject-nf$(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) \
+	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) \
+	ioctl_perf-success$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
 	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
 	list_sigaction_signum$(EXEEXT) localtime$(EXEEXT) \
 	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
@@ -159,18 +164,19 @@
 	perf_event_open_nonverbose$(EXEEXT) \
 	perf_event_open_unabbrev$(EXEEXT) ppoll-v$(EXEEXT) \
 	prctl-seccomp-filter-v$(EXEEXT) prctl-seccomp-strict$(EXEEXT) \
-	print_maxfd$(EXEEXT) qual_fault$(EXEEXT) \
-	qual_inject-error-signal$(EXEEXT) qual_inject-retval$(EXEEXT) \
-	qual_inject-signal$(EXEEXT) qual_signal$(EXEEXT) \
-	quotactl-v$(EXEEXT) quotactl-xfs-v$(EXEEXT) \
-	redirect-fds$(EXEEXT) restart_syscall$(EXEEXT) \
-	run_expect_termsig$(EXEEXT) scm_rights$(EXEEXT) \
-	seccomp-filter-v$(EXEEXT) seccomp-strict$(EXEEXT) \
-	select-P$(EXEEXT) set_ptracer_any$(EXEEXT) \
-	set_sigblock$(EXEEXT) set_sigign$(EXEEXT) \
-	signal_receive$(EXEEXT) sleep$(EXEEXT) stack-fcall$(EXEEXT) \
-	stack-fcall-mangled$(EXEEXT) threads-execve$(EXEEXT) \
-	unblock_reset_raise$(EXEEXT) unix-pair-send-recv$(EXEEXT) \
+	prctl-spec-inject$(EXEEXT) print_maxfd$(EXEEXT) \
+	qual_fault$(EXEEXT) qual_inject-error-signal$(EXEEXT) \
+	qual_inject-retval$(EXEEXT) qual_inject-signal$(EXEEXT) \
+	qual_signal$(EXEEXT) quotactl-v$(EXEEXT) \
+	quotactl-xfs-v$(EXEEXT) redirect-fds$(EXEEXT) \
+	restart_syscall$(EXEEXT) run_expect_termsig$(EXEEXT) \
+	scm_rights$(EXEEXT) seccomp-filter-v$(EXEEXT) \
+	seccomp-strict$(EXEEXT) select-P$(EXEEXT) \
+	set_ptracer_any$(EXEEXT) set_sigblock$(EXEEXT) \
+	set_sigign$(EXEEXT) signal_receive$(EXEEXT) sleep$(EXEEXT) \
+	stack-fcall$(EXEEXT) stack-fcall-mangled$(EXEEXT) \
+	threads-execve$(EXEEXT) unblock_reset_raise$(EXEEXT) \
+	unix-pair-send-recv$(EXEEXT) \
 	unix-pair-sendto-recvfrom$(EXEEXT) vfork-f$(EXEEXT) \
 	wait4-v$(EXEEXT) waitid-v$(EXEEXT) zeroargc$(EXEEXT)
 ##am__append_1 = strace-k-demangle.test
@@ -181,7 +187,10 @@
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
 	$(top_srcdir)/m4/bpf_attr.m4 $(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/st_demangle.m4 $(top_srcdir)/m4/st_libdw.m4 \
+	$(top_srcdir)/m4/st_libunwind.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
+	$(top_srcdir)/m4/st_stacktrace.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) \
@@ -223,18 +232,25 @@
 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) \
-	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) dev-yy$(EXEEXT) dup$(EXEEXT) \
-	dup2$(EXEEXT) dup3$(EXEEXT) epoll_create$(EXEEXT) \
-	epoll_create1$(EXEEXT) epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) \
-	epoll_wait$(EXEEXT) erestartsys$(EXEEXT) eventfd$(EXEEXT) \
-	execve$(EXEEXT) execveat$(EXEEXT) faccessat$(EXEEXT) \
-	fadvise64$(EXEEXT) fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
-	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) fchdir$(EXEEXT) \
+	adjtimex$(EXEEXT) aio$(EXEEXT) aio_pgetevents$(EXEEXT) \
+	alarm$(EXEEXT) bpf$(EXEEXT) bpf-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-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) \
+	dev-yy$(EXEEXT) dup$(EXEEXT) dup2$(EXEEXT) dup3$(EXEEXT) \
+	epoll_create$(EXEEXT) epoll_create1$(EXEEXT) \
+	epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) epoll_wait$(EXEEXT) \
+	erestartsys$(EXEEXT) eventfd$(EXEEXT) execve$(EXEEXT) \
+	execveat$(EXEEXT) faccessat$(EXEEXT) fadvise64$(EXEEXT) \
+	fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
+	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) \
+	fanotify_mark-Xabbrev$(EXEEXT) fanotify_mark-Xraw$(EXEEXT) \
+	fanotify_mark-Xverbose$(EXEEXT) fchdir$(EXEEXT) \
 	fchmod$(EXEEXT) fchmodat$(EXEEXT) fchown$(EXEEXT) \
 	fchown32$(EXEEXT) fchownat$(EXEEXT) fcntl$(EXEEXT) \
 	fcntl64$(EXEEXT) fdatasync$(EXEEXT) fflush$(EXEEXT) \
@@ -255,49 +271,62 @@
 	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_kvm_run$(EXEEXT) \
-	ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) \
+	ioctl_evdev$(EXEEXT) ioctl_inotify$(EXEEXT) \
+	ioctl_kvm_run$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
+	ioctl_rtc$(EXEEXT) ioctl_perf$(EXEEXT) ioctl_ptp$(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) kcmp-y$(EXEEXT) \
-	kern_features$(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) \
+	ipc_msg$(EXEEXT) ipc_msg-Xabbrev$(EXEEXT) \
+	ipc_msg-Xraw$(EXEEXT) ipc_msg-Xverbose$(EXEEXT) \
+	ipc_msgbuf$(EXEEXT) ipc_msgbuf-Xabbrev$(EXEEXT) \
+	ipc_msgbuf-Xraw$(EXEEXT) ipc_msgbuf-Xverbose$(EXEEXT) \
+	ipc_sem$(EXEEXT) ipc_sem-Xabbrev$(EXEEXT) \
+	ipc_sem-Xraw$(EXEEXT) ipc_sem-Xverbose$(EXEEXT) \
+	ipc_shm$(EXEEXT) ipc_shm-Xabbrev$(EXEEXT) \
+	ipc_shm-Xraw$(EXEEXT) ipc_shm-Xverbose$(EXEEXT) kcmp$(EXEEXT) \
+	kcmp-y$(EXEEXT) kern_features$(EXEEXT) \
+	kexec_file_load$(EXEEXT) kexec_load$(EXEEXT) keyctl$(EXEEXT) \
+	keyctl-Xabbrev$(EXEEXT) keyctl-Xraw$(EXEEXT) \
+	keyctl-Xverbose$(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) \
+	mmap-Xabbrev$(EXEEXT) mmap-Xraw$(EXEEXT) \
+	mmap-Xverbose$(EXEEXT) mmap64$(EXEEXT) mmap64-Xabbrev$(EXEEXT) \
+	mmap64-Xraw$(EXEEXT) mmap64-Xverbose$(EXEEXT) mmsg$(EXEEXT) \
 	mmsg_name$(EXEEXT) modify_ldt$(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-inet6$(EXEEXT) net-yy-netlink$(EXEEXT) \
-	net-yy-unix$(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) \
-	nfnetlink_acct$(EXEEXT) nfnetlink_cthelper$(EXEEXT) \
-	nfnetlink_ctnetlink$(EXEEXT) nfnetlink_ctnetlink_exp$(EXEEXT) \
-	nfnetlink_cttimeout$(EXEEXT) nfnetlink_nft_compat$(EXEEXT) \
-	nfnetlink_nftables$(EXEEXT) nfnetlink_ipset$(EXEEXT) \
-	nfnetlink_osf$(EXEEXT) nfnetlink_queue$(EXEEXT) \
-	nfnetlink_ulog$(EXEEXT) nlattr$(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) \
+	mount-Xabbrev$(EXEEXT) mount-Xraw$(EXEEXT) \
+	mount-Xverbose$(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-inet6$(EXEEXT) \
+	net-yy-netlink$(EXEEXT) net-yy-unix$(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) nfnetlink_acct$(EXEEXT) \
+	nfnetlink_cthelper$(EXEEXT) nfnetlink_ctnetlink$(EXEEXT) \
+	nfnetlink_ctnetlink_exp$(EXEEXT) nfnetlink_cttimeout$(EXEEXT) \
+	nfnetlink_nft_compat$(EXEEXT) nfnetlink_nftables$(EXEEXT) \
+	nfnetlink_ipset$(EXEEXT) nfnetlink_osf$(EXEEXT) \
+	nfnetlink_queue$(EXEEXT) nfnetlink_ulog$(EXEEXT) \
+	nlattr$(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_af_spec$(EXEEXT) nlattr_ifla_brport$(EXEEXT) \
+	nlattr_ifla_linkinfo$(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_mdba_mdb_entry$(EXEEXT) \
@@ -309,11 +338,14 @@
 	nlattr_tc_stats$(EXEEXT) nlattr_tca_stab$(EXEEXT) \
 	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
-	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) oldfstat$(EXEEXT) \
-	oldlstat$(EXEEXT) oldselect$(EXEEXT) oldselect-efault$(EXEEXT) \
-	oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
-	osf_utimes$(EXEEXT) pause$(EXEEXT) perf_event_open$(EXEEXT) \
-	personality$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
+	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) \
+	old_mmap-Xabbrev$(EXEEXT) old_mmap-Xraw$(EXEEXT) \
+	old_mmap-Xverbose$(EXEEXT) oldfstat$(EXEEXT) oldlstat$(EXEEXT) \
+	oldselect$(EXEEXT) oldselect-efault$(EXEEXT) oldstat$(EXEEXT) \
+	open$(EXEEXT) openat$(EXEEXT) osf_utimes$(EXEEXT) \
+	pause$(EXEEXT) perf_event_open$(EXEEXT) personality$(EXEEXT) \
+	personality-Xabbrev$(EXEEXT) personality-Xraw$(EXEEXT) \
+	personality-Xverbose$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
 	pkey_alloc$(EXEEXT) pkey_free$(EXEEXT) pkey_mprotect$(EXEEXT) \
 	poll$(EXEEXT) poll-P$(EXEEXT) ppoll$(EXEEXT) ppoll-P$(EXEEXT) \
 	prctl-arg2-intptr$(EXEEXT) prctl-dumpable$(EXEEXT) \
@@ -361,7 +393,10 @@
 	sigaltstack$(EXEEXT) siginfo$(EXEEXT) signal$(EXEEXT) \
 	signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
 	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
-	so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
+	so_peercred$(EXEEXT) so_peercred-Xabbrev$(EXEEXT) \
+	so_peercred-Xraw$(EXEEXT) so_peercred-Xverbose$(EXEEXT) \
+	sock_filter-v$(EXEEXT) sock_filter-v-Xabbrev$(EXEEXT) \
+	sock_filter-v-Xraw$(EXEEXT) sock_filter-v-Xverbose$(EXEEXT) \
 	socketcall$(EXEEXT) sockopt-sol_netlink$(EXEEXT) \
 	splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
 	statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
@@ -418,6 +453,10 @@
 aio_OBJECTS = aio.$(OBJEXT)
 aio_LDADD = $(LDADD)
 aio_DEPENDENCIES = libtests.a
+aio_pgetevents_SOURCES = aio_pgetevents.c
+aio_pgetevents_OBJECTS = aio_pgetevents.$(OBJEXT)
+aio_pgetevents_LDADD = $(LDADD)
+aio_pgetevents_DEPENDENCIES = libtests.a
 alarm_SOURCES = alarm.c
 alarm_OBJECTS = alarm.$(OBJEXT)
 alarm_LDADD = $(LDADD)
@@ -449,6 +488,33 @@
 bpf_OBJECTS = bpf.$(OBJEXT)
 bpf_LDADD = $(LDADD)
 bpf_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_SOURCES = bpf-obj_get_info_by_fd.c
+bpf_obj_get_info_by_fd_OBJECTS = bpf-obj_get_info_by_fd.$(OBJEXT)
+bpf_obj_get_info_by_fd_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_SOURCES = bpf-obj_get_info_by_fd-prog.c
+bpf_obj_get_info_by_fd_prog_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_v_SOURCES =  \
+	bpf-obj_get_info_by_fd-prog-v.c
+bpf_obj_get_info_by_fd_prog_v_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_v_SOURCES = bpf-obj_get_info_by_fd-v.c
+bpf_obj_get_info_by_fd_v_OBJECTS = bpf-obj_get_info_by_fd-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_v_DEPENDENCIES = libtests.a
+bpf_success_SOURCES = bpf-success.c
+bpf_success_OBJECTS = bpf-success.$(OBJEXT)
+bpf_success_LDADD = $(LDADD)
+bpf_success_DEPENDENCIES = libtests.a
+bpf_success_v_SOURCES = bpf-success-v.c
+bpf_success_v_OBJECTS = bpf-success-v.$(OBJEXT)
+bpf_success_v_LDADD = $(LDADD)
+bpf_success_v_DEPENDENCIES = libtests.a
 bpf_v_SOURCES = bpf-v.c
 bpf_v_OBJECTS = bpf-v.$(OBJEXT)
 bpf_v_LDADD = $(LDADD)
@@ -616,6 +682,18 @@
 fanotify_mark_OBJECTS = fanotify_mark.$(OBJEXT)
 fanotify_mark_LDADD = $(LDADD)
 fanotify_mark_DEPENDENCIES = libtests.a
+fanotify_mark_Xabbrev_SOURCES = fanotify_mark-Xabbrev.c
+fanotify_mark_Xabbrev_OBJECTS = fanotify_mark-Xabbrev.$(OBJEXT)
+fanotify_mark_Xabbrev_LDADD = $(LDADD)
+fanotify_mark_Xabbrev_DEPENDENCIES = libtests.a
+fanotify_mark_Xraw_SOURCES = fanotify_mark-Xraw.c
+fanotify_mark_Xraw_OBJECTS = fanotify_mark-Xraw.$(OBJEXT)
+fanotify_mark_Xraw_LDADD = $(LDADD)
+fanotify_mark_Xraw_DEPENDENCIES = libtests.a
+fanotify_mark_Xverbose_SOURCES = fanotify_mark-Xverbose.c
+fanotify_mark_Xverbose_OBJECTS = fanotify_mark-Xverbose.$(OBJEXT)
+fanotify_mark_Xverbose_LDADD = $(LDADD)
+fanotify_mark_Xverbose_DEPENDENCIES = libtests.a
 fchdir_SOURCES = fchdir.c
 fchdir_OBJECTS = fchdir.$(OBJEXT)
 fchdir_LDADD = $(LDADD)
@@ -895,6 +973,10 @@
 ioctl_evdev_v_OBJECTS = ioctl_evdev-v.$(OBJEXT)
 ioctl_evdev_v_LDADD = $(LDADD)
 ioctl_evdev_v_DEPENDENCIES = libtests.a
+ioctl_inotify_SOURCES = ioctl_inotify.c
+ioctl_inotify_OBJECTS = ioctl_inotify.$(OBJEXT)
+ioctl_inotify_LDADD = $(LDADD)
+ioctl_inotify_DEPENDENCIES = libtests.a
 ioctl_kvm_run_SOURCES = ioctl_kvm_run.c
 ioctl_kvm_run_OBJECTS = ioctl_kvm_run.$(OBJEXT)
 ioctl_kvm_run_LDADD = $(LDADD)
@@ -919,6 +1001,18 @@
 ioctl_nsfs_OBJECTS = ioctl_nsfs.$(OBJEXT)
 ioctl_nsfs_LDADD = $(LDADD)
 ioctl_nsfs_DEPENDENCIES = libtests.a
+ioctl_perf_SOURCES = ioctl_perf.c
+ioctl_perf_OBJECTS = ioctl_perf.$(OBJEXT)
+ioctl_perf_LDADD = $(LDADD)
+ioctl_perf_DEPENDENCIES = libtests.a
+ioctl_perf_success_SOURCES = ioctl_perf-success.c
+ioctl_perf_success_OBJECTS = ioctl_perf-success.$(OBJEXT)
+ioctl_perf_success_LDADD = $(LDADD)
+ioctl_perf_success_DEPENDENCIES = libtests.a
+ioctl_ptp_SOURCES = ioctl_ptp.c
+ioctl_ptp_OBJECTS = ioctl_ptp.$(OBJEXT)
+ioctl_ptp_LDADD = $(LDADD)
+ioctl_ptp_DEPENDENCIES = libtests.a
 ioctl_rtc_SOURCES = ioctl_rtc.c
 ioctl_rtc_OBJECTS = ioctl_rtc.$(OBJEXT)
 ioctl_rtc_LDADD = $(LDADD)
@@ -975,18 +1069,66 @@
 ipc_msg_OBJECTS = ipc_msg.$(OBJEXT)
 ipc_msg_LDADD = $(LDADD)
 ipc_msg_DEPENDENCIES = libtests.a
+ipc_msg_Xabbrev_SOURCES = ipc_msg-Xabbrev.c
+ipc_msg_Xabbrev_OBJECTS = ipc_msg-Xabbrev.$(OBJEXT)
+ipc_msg_Xabbrev_LDADD = $(LDADD)
+ipc_msg_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msg_Xraw_SOURCES = ipc_msg-Xraw.c
+ipc_msg_Xraw_OBJECTS = ipc_msg-Xraw.$(OBJEXT)
+ipc_msg_Xraw_LDADD = $(LDADD)
+ipc_msg_Xraw_DEPENDENCIES = libtests.a
+ipc_msg_Xverbose_SOURCES = ipc_msg-Xverbose.c
+ipc_msg_Xverbose_OBJECTS = ipc_msg-Xverbose.$(OBJEXT)
+ipc_msg_Xverbose_LDADD = $(LDADD)
+ipc_msg_Xverbose_DEPENDENCIES = libtests.a
 ipc_msgbuf_SOURCES = ipc_msgbuf.c
 ipc_msgbuf_OBJECTS = ipc_msgbuf.$(OBJEXT)
 ipc_msgbuf_LDADD = $(LDADD)
 ipc_msgbuf_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xabbrev_SOURCES = ipc_msgbuf-Xabbrev.c
+ipc_msgbuf_Xabbrev_OBJECTS = ipc_msgbuf-Xabbrev.$(OBJEXT)
+ipc_msgbuf_Xabbrev_LDADD = $(LDADD)
+ipc_msgbuf_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xraw_SOURCES = ipc_msgbuf-Xraw.c
+ipc_msgbuf_Xraw_OBJECTS = ipc_msgbuf-Xraw.$(OBJEXT)
+ipc_msgbuf_Xraw_LDADD = $(LDADD)
+ipc_msgbuf_Xraw_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xverbose_SOURCES = ipc_msgbuf-Xverbose.c
+ipc_msgbuf_Xverbose_OBJECTS = ipc_msgbuf-Xverbose.$(OBJEXT)
+ipc_msgbuf_Xverbose_LDADD = $(LDADD)
+ipc_msgbuf_Xverbose_DEPENDENCIES = libtests.a
 ipc_sem_SOURCES = ipc_sem.c
 ipc_sem_OBJECTS = ipc_sem.$(OBJEXT)
 ipc_sem_LDADD = $(LDADD)
 ipc_sem_DEPENDENCIES = libtests.a
+ipc_sem_Xabbrev_SOURCES = ipc_sem-Xabbrev.c
+ipc_sem_Xabbrev_OBJECTS = ipc_sem-Xabbrev.$(OBJEXT)
+ipc_sem_Xabbrev_LDADD = $(LDADD)
+ipc_sem_Xabbrev_DEPENDENCIES = libtests.a
+ipc_sem_Xraw_SOURCES = ipc_sem-Xraw.c
+ipc_sem_Xraw_OBJECTS = ipc_sem-Xraw.$(OBJEXT)
+ipc_sem_Xraw_LDADD = $(LDADD)
+ipc_sem_Xraw_DEPENDENCIES = libtests.a
+ipc_sem_Xverbose_SOURCES = ipc_sem-Xverbose.c
+ipc_sem_Xverbose_OBJECTS = ipc_sem-Xverbose.$(OBJEXT)
+ipc_sem_Xverbose_LDADD = $(LDADD)
+ipc_sem_Xverbose_DEPENDENCIES = libtests.a
 ipc_shm_SOURCES = ipc_shm.c
 ipc_shm_OBJECTS = ipc_shm.$(OBJEXT)
 ipc_shm_LDADD = $(LDADD)
 ipc_shm_DEPENDENCIES = libtests.a
+ipc_shm_Xabbrev_SOURCES = ipc_shm-Xabbrev.c
+ipc_shm_Xabbrev_OBJECTS = ipc_shm-Xabbrev.$(OBJEXT)
+ipc_shm_Xabbrev_LDADD = $(LDADD)
+ipc_shm_Xabbrev_DEPENDENCIES = libtests.a
+ipc_shm_Xraw_SOURCES = ipc_shm-Xraw.c
+ipc_shm_Xraw_OBJECTS = ipc_shm-Xraw.$(OBJEXT)
+ipc_shm_Xraw_LDADD = $(LDADD)
+ipc_shm_Xraw_DEPENDENCIES = libtests.a
+ipc_shm_Xverbose_SOURCES = ipc_shm-Xverbose.c
+ipc_shm_Xverbose_OBJECTS = ipc_shm-Xverbose.$(OBJEXT)
+ipc_shm_Xverbose_LDADD = $(LDADD)
+ipc_shm_Xverbose_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)
@@ -1015,6 +1157,18 @@
 keyctl_OBJECTS = keyctl.$(OBJEXT)
 keyctl_LDADD = $(LDADD)
 keyctl_DEPENDENCIES = libtests.a
+keyctl_Xabbrev_SOURCES = keyctl-Xabbrev.c
+keyctl_Xabbrev_OBJECTS = keyctl-Xabbrev.$(OBJEXT)
+keyctl_Xabbrev_LDADD = $(LDADD)
+keyctl_Xabbrev_DEPENDENCIES = libtests.a
+keyctl_Xraw_SOURCES = keyctl-Xraw.c
+keyctl_Xraw_OBJECTS = keyctl-Xraw.$(OBJEXT)
+keyctl_Xraw_LDADD = $(LDADD)
+keyctl_Xraw_DEPENDENCIES = libtests.a
+keyctl_Xverbose_SOURCES = keyctl-Xverbose.c
+keyctl_Xverbose_OBJECTS = keyctl-Xverbose.$(OBJEXT)
+keyctl_Xverbose_LDADD = $(LDADD)
+keyctl_Xverbose_DEPENDENCIES = libtests.a
 kill_SOURCES = kill.c
 kill_OBJECTS = kill.$(OBJEXT)
 kill_LDADD = $(LDADD)
@@ -1122,10 +1276,34 @@
 mmap_OBJECTS = mmap.$(OBJEXT)
 mmap_LDADD = $(LDADD)
 mmap_DEPENDENCIES = libtests.a
+mmap_Xabbrev_SOURCES = mmap-Xabbrev.c
+mmap_Xabbrev_OBJECTS = mmap-Xabbrev.$(OBJEXT)
+mmap_Xabbrev_LDADD = $(LDADD)
+mmap_Xabbrev_DEPENDENCIES = libtests.a
+mmap_Xraw_SOURCES = mmap-Xraw.c
+mmap_Xraw_OBJECTS = mmap-Xraw.$(OBJEXT)
+mmap_Xraw_LDADD = $(LDADD)
+mmap_Xraw_DEPENDENCIES = libtests.a
+mmap_Xverbose_SOURCES = mmap-Xverbose.c
+mmap_Xverbose_OBJECTS = mmap-Xverbose.$(OBJEXT)
+mmap_Xverbose_LDADD = $(LDADD)
+mmap_Xverbose_DEPENDENCIES = libtests.a
 mmap64_SOURCES = mmap64.c
 mmap64_OBJECTS = mmap64-mmap64.$(OBJEXT)
 mmap64_LDADD = $(LDADD)
 mmap64_DEPENDENCIES = libtests.a
+mmap64_Xabbrev_SOURCES = mmap64-Xabbrev.c
+mmap64_Xabbrev_OBJECTS = mmap64_Xabbrev-mmap64-Xabbrev.$(OBJEXT)
+mmap64_Xabbrev_LDADD = $(LDADD)
+mmap64_Xabbrev_DEPENDENCIES = libtests.a
+mmap64_Xraw_SOURCES = mmap64-Xraw.c
+mmap64_Xraw_OBJECTS = mmap64_Xraw-mmap64-Xraw.$(OBJEXT)
+mmap64_Xraw_LDADD = $(LDADD)
+mmap64_Xraw_DEPENDENCIES = libtests.a
+mmap64_Xverbose_SOURCES = mmap64-Xverbose.c
+mmap64_Xverbose_OBJECTS = mmap64_Xverbose-mmap64-Xverbose.$(OBJEXT)
+mmap64_Xverbose_LDADD = $(LDADD)
+mmap64_Xverbose_DEPENDENCIES = libtests.a
 mmsg_SOURCES = mmsg.c
 mmsg_OBJECTS = mmsg.$(OBJEXT)
 mmsg_LDADD = $(LDADD)
@@ -1150,6 +1328,18 @@
 mount_OBJECTS = mount.$(OBJEXT)
 mount_LDADD = $(LDADD)
 mount_DEPENDENCIES = libtests.a
+mount_Xabbrev_SOURCES = mount-Xabbrev.c
+mount_Xabbrev_OBJECTS = mount-Xabbrev.$(OBJEXT)
+mount_Xabbrev_LDADD = $(LDADD)
+mount_Xabbrev_DEPENDENCIES = libtests.a
+mount_Xraw_SOURCES = mount-Xraw.c
+mount_Xraw_OBJECTS = mount-Xraw.$(OBJEXT)
+mount_Xraw_LDADD = $(LDADD)
+mount_Xraw_DEPENDENCIES = libtests.a
+mount_Xverbose_SOURCES = mount-Xverbose.c
+mount_Xverbose_OBJECTS = mount-Xverbose.$(OBJEXT)
+mount_Xverbose_LDADD = $(LDADD)
+mount_Xverbose_DEPENDENCIES = libtests.a
 move_pages_SOURCES = move_pages.c
 move_pages_OBJECTS = move_pages.$(OBJEXT)
 move_pages_LDADD = $(LDADD)
@@ -1353,10 +1543,18 @@
 nlattr_ifinfomsg_OBJECTS = nlattr_ifinfomsg.$(OBJEXT)
 nlattr_ifinfomsg_LDADD = $(LDADD)
 nlattr_ifinfomsg_DEPENDENCIES = libtests.a
+nlattr_ifla_af_spec_SOURCES = nlattr_ifla_af_spec.c
+nlattr_ifla_af_spec_OBJECTS = nlattr_ifla_af_spec.$(OBJEXT)
+nlattr_ifla_af_spec_LDADD = $(LDADD)
+nlattr_ifla_af_spec_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_linkinfo_SOURCES = nlattr_ifla_linkinfo.c
+nlattr_ifla_linkinfo_OBJECTS = nlattr_ifla_linkinfo.$(OBJEXT)
+nlattr_ifla_linkinfo_LDADD = $(LDADD)
+nlattr_ifla_linkinfo_DEPENDENCIES = libtests.a
 nlattr_ifla_port_SOURCES = nlattr_ifla_port.c
 nlattr_ifla_port_OBJECTS = nlattr_ifla_port.$(OBJEXT)
 nlattr_ifla_port_LDADD = $(LDADD)
@@ -1458,6 +1656,18 @@
 old_mmap_P_OBJECTS = old_mmap-P.$(OBJEXT)
 old_mmap_P_LDADD = $(LDADD)
 old_mmap_P_DEPENDENCIES = libtests.a
+old_mmap_Xabbrev_SOURCES = old_mmap-Xabbrev.c
+old_mmap_Xabbrev_OBJECTS = old_mmap-Xabbrev.$(OBJEXT)
+old_mmap_Xabbrev_LDADD = $(LDADD)
+old_mmap_Xabbrev_DEPENDENCIES = libtests.a
+old_mmap_Xraw_SOURCES = old_mmap-Xraw.c
+old_mmap_Xraw_OBJECTS = old_mmap-Xraw.$(OBJEXT)
+old_mmap_Xraw_LDADD = $(LDADD)
+old_mmap_Xraw_DEPENDENCIES = libtests.a
+old_mmap_Xverbose_SOURCES = old_mmap-Xverbose.c
+old_mmap_Xverbose_OBJECTS = old_mmap-Xverbose.$(OBJEXT)
+old_mmap_Xverbose_LDADD = $(LDADD)
+old_mmap_Xverbose_DEPENDENCIES = libtests.a
 old_mmap_v_none_SOURCES = old_mmap-v-none.c
 old_mmap_v_none_OBJECTS = old_mmap-v-none.$(OBJEXT)
 old_mmap_v_none_LDADD = $(LDADD)
@@ -1526,6 +1736,18 @@
 personality_OBJECTS = personality.$(OBJEXT)
 personality_LDADD = $(LDADD)
 personality_DEPENDENCIES = libtests.a
+personality_Xabbrev_SOURCES = personality-Xabbrev.c
+personality_Xabbrev_OBJECTS = personality-Xabbrev.$(OBJEXT)
+personality_Xabbrev_LDADD = $(LDADD)
+personality_Xabbrev_DEPENDENCIES = libtests.a
+personality_Xraw_SOURCES = personality-Xraw.c
+personality_Xraw_OBJECTS = personality-Xraw.$(OBJEXT)
+personality_Xraw_LDADD = $(LDADD)
+personality_Xraw_DEPENDENCIES = libtests.a
+personality_Xverbose_SOURCES = personality-Xverbose.c
+personality_Xverbose_OBJECTS = personality-Xverbose.$(OBJEXT)
+personality_Xverbose_LDADD = $(LDADD)
+personality_Xverbose_DEPENDENCIES = libtests.a
 pipe_SOURCES = pipe.c
 pipe_OBJECTS = pipe.$(OBJEXT)
 pipe_LDADD = $(LDADD)
@@ -1598,6 +1820,10 @@
 prctl_securebits_OBJECTS = prctl-securebits.$(OBJEXT)
 prctl_securebits_LDADD = $(LDADD)
 prctl_securebits_DEPENDENCIES = libtests.a
+prctl_spec_inject_SOURCES = prctl-spec-inject.c
+prctl_spec_inject_OBJECTS = prctl-spec-inject.$(OBJEXT)
+prctl_spec_inject_LDADD = $(LDADD)
+prctl_spec_inject_DEPENDENCIES = libtests.a
 prctl_tid_address_SOURCES = prctl-tid_address.c
 prctl_tid_address_OBJECTS = prctl-tid_address.$(OBJEXT)
 prctl_tid_address_LDADD = $(LDADD)
@@ -2088,10 +2314,34 @@
 so_peercred_OBJECTS = so_peercred.$(OBJEXT)
 so_peercred_LDADD = $(LDADD)
 so_peercred_DEPENDENCIES = libtests.a
+so_peercred_Xabbrev_SOURCES = so_peercred-Xabbrev.c
+so_peercred_Xabbrev_OBJECTS = so_peercred-Xabbrev.$(OBJEXT)
+so_peercred_Xabbrev_LDADD = $(LDADD)
+so_peercred_Xabbrev_DEPENDENCIES = libtests.a
+so_peercred_Xraw_SOURCES = so_peercred-Xraw.c
+so_peercred_Xraw_OBJECTS = so_peercred-Xraw.$(OBJEXT)
+so_peercred_Xraw_LDADD = $(LDADD)
+so_peercred_Xraw_DEPENDENCIES = libtests.a
+so_peercred_Xverbose_SOURCES = so_peercred-Xverbose.c
+so_peercred_Xverbose_OBJECTS = so_peercred-Xverbose.$(OBJEXT)
+so_peercred_Xverbose_LDADD = $(LDADD)
+so_peercred_Xverbose_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
+sock_filter_v_Xabbrev_SOURCES = sock_filter-v-Xabbrev.c
+sock_filter_v_Xabbrev_OBJECTS = sock_filter-v-Xabbrev.$(OBJEXT)
+sock_filter_v_Xabbrev_LDADD = $(LDADD)
+sock_filter_v_Xabbrev_DEPENDENCIES = libtests.a
+sock_filter_v_Xraw_SOURCES = sock_filter-v-Xraw.c
+sock_filter_v_Xraw_OBJECTS = sock_filter-v-Xraw.$(OBJEXT)
+sock_filter_v_Xraw_LDADD = $(LDADD)
+sock_filter_v_Xraw_DEPENDENCIES = libtests.a
+sock_filter_v_Xverbose_SOURCES = sock_filter-v-Xverbose.c
+sock_filter_v_Xverbose_OBJECTS = sock_filter-v-Xverbose.$(OBJEXT)
+sock_filter_v_Xverbose_LDADD = $(LDADD)
+sock_filter_v_Xverbose_DEPENDENCIES = libtests.a
 socketcall_SOURCES = socketcall.c
 socketcall_OBJECTS = socketcall.$(OBJEXT)
 socketcall_LDADD = $(LDADD)
@@ -2402,45 +2652,58 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c \
-	btrfs.c caps.c caps-abbrev.c check_sigblock.c check_sigign.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 delay.c \
-	delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	accept4.c access.c acct.c add_key.c adjtimex.c aio.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2456,59 +2719,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2526,44 +2794,57 @@
 	xettimeofday.c zeroargc.c
 DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c \
-	check_sigblock.c check_sigign.c chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	fallocate.c fanotify_init.c fanotify_mark.c \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2579,59 +2860,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2879,12 +3165,12 @@
       b='$*';; \
   esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing aclocal-1.14
+ACLOCAL = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing aclocal-1.14
 AMTAR = $${TAR-tar}
 AM_DEFAULT_VERBOSITY = 1
-AUTOCONF = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing autoheader
-AUTOMAKE = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing automake-1.14
+AUTOCONF = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing autoconf
+AUTOHEADER = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing autoheader
+AUTOMAKE = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing automake-1.14
 AWK = gawk
 BUILD_EXEEXT = 
 BUILD_OBJEXT = 
@@ -2905,7 +3191,7 @@
 CPPFLAGS_FOR_BUILD = 
 CPP_FOR_BUILD = gcc -E
 CYGPATH_W = echo
-DEB_CHANGELOGTIME = Thu, 14 Jun 2018 16:29:09 -0700
+DEB_CHANGELOGTIME = Fri, 15 Jun 2018 17:54:18 +0000
 DEFS = -DHAVE_CONFIG_H
 DEPDIR = .deps
 ECHO_C = 
@@ -2932,23 +3218,23 @@
 LIBS = 
 LTLIBOBJS = 
 MAINT = #
-MAKEINFO = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/missing makeinfo
-MANPAGE_DATE = 2018-04-04
+MAKEINFO = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/missing makeinfo
+MANPAGE_DATE = 2018-06-13
 MIPS_ABI = 
 MKDIR_P = /bin/mkdir -p
 OBJEXT = o
 PACKAGE = strace
 PACKAGE_BUGREPORT = strace-devel@lists.strace.io
 PACKAGE_NAME = strace
-PACKAGE_STRING = strace 4.22
+PACKAGE_STRING = strace 4.23
 PACKAGE_TARNAME = strace
 PACKAGE_URL = https://strace.io
-PACKAGE_VERSION = 4.22
+PACKAGE_VERSION = 4.23
 PATH_SEPARATOR = :
 PERL = /usr/bin/perl
 RANLIB = aarch64-linux-android-ranlib
 READELF = aarch64-linux-android-readelf
-RPM_CHANGELOGTIME = Thu Jun 14 2018
+RPM_CHANGELOGTIME = Fri Jun 15 2018
 SED = /bin/sed
 SET_MAKE = 
 SHELL = /bin/sh
@@ -2957,13 +3243,13 @@
 STRIP = aarch64-linux-android-strip
 VALGRIND = valgrind
 VALGRIND_ENABLED = yes
-VERSION = 4.22
+VERSION = 4.23
 WARN_CFLAGS =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wnested-externs -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
 WARN_CFLAGS_FOR_BUILD =  -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Wimplicit-fallthrough=5 -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings
-abs_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.22/tests
-abs_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.22/tests
-abs_top_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
-abs_top_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.22
+abs_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.23/tests
+abs_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.23/tests
+abs_top_builddir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
+abs_top_srcdir = /usr/local/google/ndkports/.out/strace/package/strace-4.23
 ac_ct_CC = 
 ac_ct_CC_FOR_BUILD = gcc
 am__include = include
@@ -2999,8 +3285,12 @@
 htmldir = ${docdir}
 includedir = ${prefix}/include
 infodir = ${datarootdir}/info
-install_sh = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.22/install-sh
+install_sh = ${SHELL} /usr/local/google/ndkports/.out/strace/package/strace-4.23/install-sh
 libdir = ${exec_prefix}/lib
+libdw_CFLAGS = 
+libdw_CPPFLAGS = 
+libdw_LDFLAGS = 
+libdw_LIBS = 
 libexecdir = ${exec_prefix}/libexec
 libiberty_CPPFLAGS = 
 libiberty_LDFLAGS = 
@@ -3095,9 +3385,14 @@
   add_key \
   adjtimex \
   aio \
+  aio_pgetevents \
   alarm \
   bpf \
   bpf-v \
+  bpf-obj_get_info_by_fd \
+  bpf-obj_get_info_by_fd-v \
+  bpf-obj_get_info_by_fd-prog \
+  bpf-obj_get_info_by_fd-prog-v \
   brk \
   btrfs \
   caps \
@@ -3130,6 +3425,9 @@
   fallocate \
   fanotify_init \
   fanotify_mark \
+  fanotify_mark-Xabbrev \
+  fanotify_mark-Xraw \
+  fanotify_mark-Xverbose \
   fchdir \
   fchmod \
   fchmodat \
@@ -3192,10 +3490,13 @@
   ioctl_block \
   ioctl_dm \
   ioctl_evdev \
+  ioctl_inotify \
   ioctl_kvm_run \
   ioctl_loop \
   ioctl_mtd \
   ioctl_rtc \
+  ioctl_perf \
+  ioctl_ptp \
   ioctl_scsi \
   ioctl_sg_io_v3 \
   ioctl_sg_io_v4 \
@@ -3208,15 +3509,30 @@
   ip_mreq \
   ipc \
   ipc_msg \
+  ipc_msg-Xabbrev \
+  ipc_msg-Xraw \
+  ipc_msg-Xverbose \
   ipc_msgbuf \
+  ipc_msgbuf-Xabbrev \
+  ipc_msgbuf-Xraw \
+  ipc_msgbuf-Xverbose \
   ipc_sem \
+  ipc_sem-Xabbrev \
+  ipc_sem-Xraw \
+  ipc_sem-Xverbose \
   ipc_shm \
+  ipc_shm-Xabbrev \
+  ipc_shm-Xraw \
+  ipc_shm-Xverbose \
   kcmp \
   kcmp-y \
   kern_features \
   kexec_file_load \
   kexec_load \
   keyctl \
+  keyctl-Xabbrev \
+  keyctl-Xraw \
+  keyctl-Xverbose \
   kill \
   lchown \
   lchown32 \
@@ -3241,11 +3557,20 @@
   mlock2 \
   mlockall \
   mmap \
+  mmap-Xabbrev \
+  mmap-Xraw \
+  mmap-Xverbose \
   mmap64 \
+  mmap64-Xabbrev \
+  mmap64-Xraw \
+  mmap64-Xverbose \
   mmsg \
   mmsg_name \
   modify_ldt \
   mount \
+  mount-Xabbrev \
+  mount-Xraw \
+  mount-Xverbose \
   move_pages \
   mq \
   mq_sendrecv \
@@ -3292,7 +3617,9 @@
   nlattr_ifaddrlblmsg \
   nlattr_ifaddrmsg \
   nlattr_ifinfomsg \
+  nlattr_ifla_af_spec \
   nlattr_ifla_brport \
+  nlattr_ifla_linkinfo \
   nlattr_ifla_port \
   nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
@@ -3317,6 +3644,9 @@
   old_mmap \
   old_mmap-P \
   old_mmap-v-none \
+  old_mmap-Xabbrev \
+  old_mmap-Xraw \
+  old_mmap-Xverbose \
   oldfstat \
   oldlstat \
   oldselect \
@@ -3328,6 +3658,9 @@
   pause \
   perf_event_open \
   personality \
+  personality-Xabbrev \
+  personality-Xraw \
+  personality-Xverbose \
   pipe \
   pipe2 \
   pkey_alloc \
@@ -3444,7 +3777,13 @@
   sigsuspend \
   so_linger \
   so_peercred \
+  so_peercred-Xabbrev \
+  so_peercred-Xraw \
+  so_peercred-Xverbose \
   sock_filter-v \
+  sock_filter-v-Xabbrev \
+  sock_filter-v-Xraw \
+  sock_filter-v-Xverbose \
   socketcall \
   sockopt-sol_netlink \
   splice \
@@ -3515,6 +3854,9 @@
 localtime_LDADD = $(clock_LIBS) $(LDADD)
 lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xraw_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xverbose_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mq_LDADD = $(mq_LIBS) $(LDADD)
 newfstatat_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 pc_LDADD = $(dl_LIBS) $(LDADD)
@@ -3539,10 +3881,14 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
 GEN_TESTS = _newselect.gen.test _newselect-P.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 \
+	add_key.gen.test adjtimex.gen.test aio.gen.test \
+	aio_pgetevents.gen.test alarm.gen.test bpf.gen.test \
+	bpf-v.gen.test bpf-obj_get_info_by_fd.gen.test \
+	bpf-obj_get_info_by_fd-v.gen.test \
+	bpf-obj_get_info_by_fd-prog.gen.test \
+	bpf-obj_get_info_by_fd-prog-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 dev-yy.gen.test dup.gen.test \
 	dup2.gen.test dup3.gen.test epoll_create.gen.test \
@@ -3550,70 +3896,85 @@
 	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 \
-	fsync-y.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_dm.gen.test ioctl_dm-v.gen.test \
-	ioctl_evdev.gen.test ioctl_evdev-v.gen.test \
+	fanotify_mark.gen.test fanotify_mark-Xabbrev.gen.test \
+	fanotify_mark-Xraw.gen.test fanotify_mark-Xverbose.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 fsync-y.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_dm.gen.test \
+	ioctl_dm-v.gen.test ioctl_evdev.gen.test \
+	ioctl_evdev-v.gen.test ioctl_inotify.gen.test \
 	ioctl_kvm_run.gen.test ioctl_loop.gen.test \
 	ioctl_loop-nv.gen.test ioctl_loop-v.gen.test \
-	ioctl_mtd.gen.test ioctl_nsfs.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_sock_gifconf.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 \
-	kcmp-y.gen.test kern_features.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 \
+	ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_perf.gen.test \
+	ioctl_ptp.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_sock_gifconf.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_msg-Xabbrev.gen.test \
+	ipc_msg-Xraw.gen.test ipc_msg-Xverbose.gen.test \
+	ipc_msgbuf-Xabbrev.gen.test ipc_msgbuf-Xraw.gen.test \
+	ipc_msgbuf-Xverbose.gen.test ipc_sem.gen.test \
+	ipc_sem-Xabbrev.gen.test ipc_sem-Xraw.gen.test \
+	ipc_sem-Xverbose.gen.test ipc_shm.gen.test \
+	ipc_shm-Xabbrev.gen.test ipc_shm-Xraw.gen.test \
+	ipc_shm-Xverbose.gen.test kcmp.gen.test kcmp-y.gen.test \
+	kern_features.gen.test kexec_file_load.gen.test \
+	kexec_load.gen.test keyctl.gen.test keyctl-Xabbrev.gen.test \
+	keyctl-Xraw.gen.test keyctl-Xverbose.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 modify_ldt.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 net-yy-inet6.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 \
-	nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test \
-	nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test \
-	nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test \
-	nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test \
-	nfnetlink_osf.gen.test nfnetlink_queue.gen.test \
-	nfnetlink_ulog.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 \
+	mmap-Xabbrev.gen.test mmap-Xraw.gen.test \
+	mmap-Xverbose.gen.test mmap64.gen.test mmap64-Xabbrev.gen.test \
+	mmap64-Xraw.gen.test mmap64-Xverbose.gen.test mmsg.gen.test \
+	mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test \
+	modify_ldt.gen.test mount.gen.test mount-Xabbrev.gen.test \
+	mount-Xraw.gen.test mount-Xverbose.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 \
+	net-yy-inet6.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 nfnetlink_acct.gen.test \
+	nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test \
+	nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test \
+	nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test \
+	nfnetlink_nftables.gen.test nfnetlink_osf.gen.test \
+	nfnetlink_queue.gen.test nfnetlink_ulog.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_af_spec.gen.test \
+	nlattr_ifla_brport.gen.test nlattr_ifla_linkinfo.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_mdba_mdb_entry.gen.test \
@@ -3625,16 +3986,19 @@
 	nlattr_tc_stats.gen.test nlattr_tca_stab.gen.test \
 	nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
 	nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
-	old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test \
-	oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test \
+	old_mmap-P.gen.test old_mmap-v-none.gen.test \
+	old_mmap-Xabbrev.gen.test old_mmap-Xraw.gen.test \
+	old_mmap-Xverbose.gen.test oldfstat.gen.test oldlstat.gen.test \
+	oldselect.gen.test oldselect-P.gen.test \
 	oldselect-efault.gen.test oldselect-efault-P.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-P.gen.test ppoll-v.gen.test \
-	pread64-pwrite64.gen.test preadv.gen.test \
+	perf_event_open_unabbrev.gen.test personality-Xabbrev.gen.test \
+	personality-Xraw.gen.test personality-Xverbose.gen.test \
+	pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test \
+	pkey_mprotect.gen.test ppoll.gen.test ppoll-P.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 \
@@ -3675,22 +4039,29 @@
 	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 sockopt-sol_netlink.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 \
+	so_linger.gen.test so_peercred.gen.test \
+	so_peercred-Xabbrev.gen.test so_peercred-Xraw.gen.test \
+	so_peercred-Xverbose.gen.test sock_filter-v.gen.test \
+	sock_filter-v-Xabbrev.gen.test sock_filter-v-Xraw.gen.test \
+	sock_filter-v-Xverbose.gen.test socketcall.gen.test \
+	sockopt-sol_netlink.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_personality_32.gen.test \
+	trace_personality_64.gen.test trace_personality_x32.gen.test \
+	trace_personality_regex_32.gen.test \
+	trace_personality_regex_64.gen.test \
+	trace_personality_regex_x32.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 \
@@ -3700,13 +4071,20 @@
 	xattr-strings.gen.test xet_robust_list.gen.test \
 	xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test \
 	xettimeofday.gen.test
-LIBUNWIND_TESTS = 
-#LIBUNWIND_TESTS = strace-k.test $(am__append_1)
+STACKTRACE_TESTS = 
+#STACKTRACE_TESTS = strace-k.test \
+#	$(am__append_1)
 DECODER_TESTS = \
+	bpf-success.test \
+	bpf-success-v.test \
 	brk.test \
 	btrfs-v.test \
 	btrfs-vw.test \
+	btrfs-vwX.test \
+	btrfs-vX.test \
 	btrfs-w.test \
+	btrfs-wX.test \
+	btrfs-X.test \
 	caps-abbrev.test \
 	caps.test \
 	eventfd.test \
@@ -3716,6 +4094,7 @@
 	futex.test \
 	getuid.test \
 	ioctl.test \
+	ioctl_perf-success.test \
 	ipc_msgbuf.test \
 	kern_features-fault.test \
 	llseek.test \
@@ -3742,6 +4121,7 @@
 	prctl-seccomp-filter-v.test \
 	prctl-seccomp-strict.test \
 	prctl-securebits.test \
+	prctl-spec-inject.test \
 	prctl-tid_address.test \
 	prctl-tsc.test \
 	qual_fault-exit_group.test \
@@ -3790,9 +4170,13 @@
 	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
+	qual_fault-syscall.test \
 	qual_inject-error-signal.test \
+	qual_inject-error-signal-syscall.test \
 	qual_inject-retval.test \
+	qual_inject-retval-syscall.test \
 	qual_inject-signal.test \
+	qual_inject-signal-syscall.test \
 	qual_inject-syntax.test \
 	qual_signal.test \
 	qual_syscall.test \
@@ -3816,8 +4200,8 @@
 	# end of MISC_TESTS
 
 XFAIL_TESTS_ = 
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
@@ -3838,6 +4222,7 @@
 	count-f.expected \
 	eventfd.expected \
 	fadvise.h \
+	fcntl-common.c \
 	filter-unavailable.expected \
 	fstatat.c \
 	fstatx.c \
@@ -3848,12 +4233,12 @@
 	init.sh \
 	init_delete_module.h \
 	ipc.sh \
-	ipc_msgbuf.expected \
 	ksysent.sed \
 	lstatx.c \
 	match.awk \
 	net.expected \
 	netlink_sock_diag-v.sh \
+	nlattr_ifla.h \
 	pipe.expected \
 	print_user_desc.c \
 	process_vm_readv_writev.c \
@@ -3861,6 +4246,8 @@
 	qual_fault-exit_group.expected \
 	qual_inject-error-signal.expected \
 	qual_inject-signal.expected \
+	qualify_personality.sh \
+	qualify_personality_empty.in \
 	quotactl.h \
 	regex.in \
 	rt_sigaction.awk \
@@ -3878,16 +4265,23 @@
 	strace-E.expected \
 	strace-T.expected \
 	strace-ff.expected \
+	strace-k-demangle.expected \
 	strace-k-demangle.test \
+	strace-k.expected \
 	strace-k.test \
 	strace-r.expected \
 	strace.supp \
-	struct_flock.c \
 	sun_path.expected \
 	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
+	trace_personality_32.in \
+	trace_personality_64.in \
+	trace_personality_x32.in \
+	trace_personality_regex_32.in \
+	trace_personality_regex_64.in \
+	trace_personality_regex_x32.in \
 	trace_question.in \
 	trace_stat.in \
 	trace_stat_like.in \
@@ -4001,6 +4395,10 @@
 	@rm -f aio$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(aio_OBJECTS) $(aio_LDADD) $(LIBS)
 
+aio_pgetevents$(EXEEXT): $(aio_pgetevents_OBJECTS) $(aio_pgetevents_DEPENDENCIES) $(EXTRA_aio_pgetevents_DEPENDENCIES) 
+	@rm -f aio_pgetevents$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(aio_pgetevents_OBJECTS) $(aio_pgetevents_LDADD) $(LIBS)
+
 alarm$(EXEEXT): $(alarm_OBJECTS) $(alarm_DEPENDENCIES) $(EXTRA_alarm_DEPENDENCIES) 
 	@rm -f alarm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(alarm_OBJECTS) $(alarm_LDADD) $(LIBS)
@@ -4033,6 +4431,30 @@
 	@rm -f bpf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bpf_OBJECTS) $(bpf_LDADD) $(LIBS)
 
+bpf-obj_get_info_by_fd$(EXEEXT): $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog-v$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-v$(EXEEXT): $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_LDADD) $(LIBS)
+
+bpf-success$(EXEEXT): $(bpf_success_OBJECTS) $(bpf_success_DEPENDENCIES) $(EXTRA_bpf_success_DEPENDENCIES) 
+	@rm -f bpf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_OBJECTS) $(bpf_success_LDADD) $(LIBS)
+
+bpf-success-v$(EXEEXT): $(bpf_success_v_OBJECTS) $(bpf_success_v_DEPENDENCIES) $(EXTRA_bpf_success_v_DEPENDENCIES) 
+	@rm -f bpf-success-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_v_OBJECTS) $(bpf_success_v_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)
@@ -4201,6 +4623,18 @@
 	@rm -f fanotify_mark$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fanotify_mark_OBJECTS) $(fanotify_mark_LDADD) $(LIBS)
 
+fanotify_mark-Xabbrev$(EXEEXT): $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_DEPENDENCIES) $(EXTRA_fanotify_mark_Xabbrev_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_LDADD) $(LIBS)
+
+fanotify_mark-Xraw$(EXEEXT): $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_DEPENDENCIES) $(EXTRA_fanotify_mark_Xraw_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_LDADD) $(LIBS)
+
+fanotify_mark-Xverbose$(EXEEXT): $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_DEPENDENCIES) $(EXTRA_fanotify_mark_Xverbose_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_LDADD) $(LIBS)
+
 fchdir$(EXEEXT): $(fchdir_OBJECTS) $(fchdir_DEPENDENCIES) $(EXTRA_fchdir_DEPENDENCIES) 
 	@rm -f fchdir$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fchdir_OBJECTS) $(fchdir_LDADD) $(LIBS)
@@ -4481,6 +4915,10 @@
 	@rm -f ioctl_evdev-v$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_evdev_v_OBJECTS) $(ioctl_evdev_v_LDADD) $(LIBS)
 
+ioctl_inotify$(EXEEXT): $(ioctl_inotify_OBJECTS) $(ioctl_inotify_DEPENDENCIES) $(EXTRA_ioctl_inotify_DEPENDENCIES) 
+	@rm -f ioctl_inotify$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_inotify_OBJECTS) $(ioctl_inotify_LDADD) $(LIBS)
+
 ioctl_kvm_run$(EXEEXT): $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_DEPENDENCIES) $(EXTRA_ioctl_kvm_run_DEPENDENCIES) 
 	@rm -f ioctl_kvm_run$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_LDADD) $(LIBS)
@@ -4505,6 +4943,18 @@
 	@rm -f ioctl_nsfs$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_nsfs_OBJECTS) $(ioctl_nsfs_LDADD) $(LIBS)
 
+ioctl_perf$(EXEEXT): $(ioctl_perf_OBJECTS) $(ioctl_perf_DEPENDENCIES) $(EXTRA_ioctl_perf_DEPENDENCIES) 
+	@rm -f ioctl_perf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_OBJECTS) $(ioctl_perf_LDADD) $(LIBS)
+
+ioctl_perf-success$(EXEEXT): $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_DEPENDENCIES) $(EXTRA_ioctl_perf_success_DEPENDENCIES) 
+	@rm -f ioctl_perf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_LDADD) $(LIBS)
+
+ioctl_ptp$(EXEEXT): $(ioctl_ptp_OBJECTS) $(ioctl_ptp_DEPENDENCIES) $(EXTRA_ioctl_ptp_DEPENDENCIES) 
+	@rm -f ioctl_ptp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_ptp_OBJECTS) $(ioctl_ptp_LDADD) $(LIBS)
+
 ioctl_rtc$(EXEEXT): $(ioctl_rtc_OBJECTS) $(ioctl_rtc_DEPENDENCIES) $(EXTRA_ioctl_rtc_DEPENDENCIES) 
 	@rm -f ioctl_rtc$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_rtc_OBJECTS) $(ioctl_rtc_LDADD) $(LIBS)
@@ -4561,18 +5011,66 @@
 	@rm -f ipc_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msg_OBJECTS) $(ipc_msg_LDADD) $(LIBS)
 
+ipc_msg-Xabbrev$(EXEEXT): $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msg_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msg-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_LDADD) $(LIBS)
+
+ipc_msg-Xraw$(EXEEXT): $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_DEPENDENCIES) $(EXTRA_ipc_msg_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msg-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_LDADD) $(LIBS)
+
+ipc_msg-Xverbose$(EXEEXT): $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msg_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msg-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_LDADD) $(LIBS)
+
 ipc_msgbuf$(EXEEXT): $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_DEPENDENCIES) $(EXTRA_ipc_msgbuf_DEPENDENCIES) 
 	@rm -f ipc_msgbuf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_LDADD) $(LIBS)
 
+ipc_msgbuf-Xabbrev$(EXEEXT): $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_LDADD) $(LIBS)
+
+ipc_msgbuf-Xraw$(EXEEXT): $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_LDADD) $(LIBS)
+
+ipc_msgbuf-Xverbose$(EXEEXT): $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_LDADD) $(LIBS)
+
 ipc_sem$(EXEEXT): $(ipc_sem_OBJECTS) $(ipc_sem_DEPENDENCIES) $(EXTRA_ipc_sem_DEPENDENCIES) 
 	@rm -f ipc_sem$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_sem_OBJECTS) $(ipc_sem_LDADD) $(LIBS)
 
+ipc_sem-Xabbrev$(EXEEXT): $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_sem_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_sem-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_LDADD) $(LIBS)
+
+ipc_sem-Xraw$(EXEEXT): $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_DEPENDENCIES) $(EXTRA_ipc_sem_Xraw_DEPENDENCIES) 
+	@rm -f ipc_sem-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_LDADD) $(LIBS)
+
+ipc_sem-Xverbose$(EXEEXT): $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_DEPENDENCIES) $(EXTRA_ipc_sem_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_sem-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_LDADD) $(LIBS)
+
 ipc_shm$(EXEEXT): $(ipc_shm_OBJECTS) $(ipc_shm_DEPENDENCIES) $(EXTRA_ipc_shm_DEPENDENCIES) 
 	@rm -f ipc_shm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_shm_OBJECTS) $(ipc_shm_LDADD) $(LIBS)
 
+ipc_shm-Xabbrev$(EXEEXT): $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_shm_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_shm-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_LDADD) $(LIBS)
+
+ipc_shm-Xraw$(EXEEXT): $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_DEPENDENCIES) $(EXTRA_ipc_shm_Xraw_DEPENDENCIES) 
+	@rm -f ipc_shm-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_LDADD) $(LIBS)
+
+ipc_shm-Xverbose$(EXEEXT): $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_DEPENDENCIES) $(EXTRA_ipc_shm_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_shm-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_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)
@@ -4601,6 +5099,18 @@
 	@rm -f keyctl$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(keyctl_OBJECTS) $(keyctl_LDADD) $(LIBS)
 
+keyctl-Xabbrev$(EXEEXT): $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_DEPENDENCIES) $(EXTRA_keyctl_Xabbrev_DEPENDENCIES) 
+	@rm -f keyctl-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_LDADD) $(LIBS)
+
+keyctl-Xraw$(EXEEXT): $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_DEPENDENCIES) $(EXTRA_keyctl_Xraw_DEPENDENCIES) 
+	@rm -f keyctl-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_LDADD) $(LIBS)
+
+keyctl-Xverbose$(EXEEXT): $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_DEPENDENCIES) $(EXTRA_keyctl_Xverbose_DEPENDENCIES) 
+	@rm -f keyctl-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_LDADD) $(LIBS)
+
 kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) $(EXTRA_kill_DEPENDENCIES) 
 	@rm -f kill$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
@@ -4709,10 +5219,34 @@
 	@rm -f mmap$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap_OBJECTS) $(mmap_LDADD) $(LIBS)
 
+mmap-Xabbrev$(EXEEXT): $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_DEPENDENCIES) $(EXTRA_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_LDADD) $(LIBS)
+
+mmap-Xraw$(EXEEXT): $(mmap_Xraw_OBJECTS) $(mmap_Xraw_DEPENDENCIES) $(EXTRA_mmap_Xraw_DEPENDENCIES) 
+	@rm -f mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xraw_OBJECTS) $(mmap_Xraw_LDADD) $(LIBS)
+
+mmap-Xverbose$(EXEEXT): $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_DEPENDENCIES) $(EXTRA_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_LDADD) $(LIBS)
+
 mmap64$(EXEEXT): $(mmap64_OBJECTS) $(mmap64_DEPENDENCIES) $(EXTRA_mmap64_DEPENDENCIES) 
 	@rm -f mmap64$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap64_OBJECTS) $(mmap64_LDADD) $(LIBS)
 
+mmap64-Xabbrev$(EXEEXT): $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_DEPENDENCIES) $(EXTRA_mmap64_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap64-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_LDADD) $(LIBS)
+
+mmap64-Xraw$(EXEEXT): $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_DEPENDENCIES) $(EXTRA_mmap64_Xraw_DEPENDENCIES) 
+	@rm -f mmap64-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_LDADD) $(LIBS)
+
+mmap64-Xverbose$(EXEEXT): $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_DEPENDENCIES) $(EXTRA_mmap64_Xverbose_DEPENDENCIES) 
+	@rm -f mmap64-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_LDADD) $(LIBS)
+
 mmsg$(EXEEXT): $(mmsg_OBJECTS) $(mmsg_DEPENDENCIES) $(EXTRA_mmsg_DEPENDENCIES) 
 	@rm -f mmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmsg_OBJECTS) $(mmsg_LDADD) $(LIBS)
@@ -4737,6 +5271,18 @@
 	@rm -f mount$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
 
+mount-Xabbrev$(EXEEXT): $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_DEPENDENCIES) $(EXTRA_mount_Xabbrev_DEPENDENCIES) 
+	@rm -f mount-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_LDADD) $(LIBS)
+
+mount-Xraw$(EXEEXT): $(mount_Xraw_OBJECTS) $(mount_Xraw_DEPENDENCIES) $(EXTRA_mount_Xraw_DEPENDENCIES) 
+	@rm -f mount-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xraw_OBJECTS) $(mount_Xraw_LDADD) $(LIBS)
+
+mount-Xverbose$(EXEEXT): $(mount_Xverbose_OBJECTS) $(mount_Xverbose_DEPENDENCIES) $(EXTRA_mount_Xverbose_DEPENDENCIES) 
+	@rm -f mount-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xverbose_OBJECTS) $(mount_Xverbose_LDADD) $(LIBS)
+
 move_pages$(EXEEXT): $(move_pages_OBJECTS) $(move_pages_DEPENDENCIES) $(EXTRA_move_pages_DEPENDENCIES) 
 	@rm -f move_pages$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(move_pages_OBJECTS) $(move_pages_LDADD) $(LIBS)
@@ -4941,10 +5487,18 @@
 	@rm -f nlattr_ifinfomsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_LDADD) $(LIBS)
 
+nlattr_ifla_af_spec$(EXEEXT): $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_DEPENDENCIES) $(EXTRA_nlattr_ifla_af_spec_DEPENDENCIES) 
+	@rm -f nlattr_ifla_af_spec$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_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_linkinfo$(EXEEXT): $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_DEPENDENCIES) $(EXTRA_nlattr_ifla_linkinfo_DEPENDENCIES) 
+	@rm -f nlattr_ifla_linkinfo$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_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)
@@ -5045,6 +5599,18 @@
 	@rm -f old_mmap-P$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_P_OBJECTS) $(old_mmap_P_LDADD) $(LIBS)
 
+old_mmap-Xabbrev$(EXEEXT): $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_DEPENDENCIES) $(EXTRA_old_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f old_mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_LDADD) $(LIBS)
+
+old_mmap-Xraw$(EXEEXT): $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_DEPENDENCIES) $(EXTRA_old_mmap_Xraw_DEPENDENCIES) 
+	@rm -f old_mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_LDADD) $(LIBS)
+
+old_mmap-Xverbose$(EXEEXT): $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_DEPENDENCIES) $(EXTRA_old_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f old_mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_LDADD) $(LIBS)
+
 old_mmap-v-none$(EXEEXT): $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_DEPENDENCIES) $(EXTRA_old_mmap_v_none_DEPENDENCIES) 
 	@rm -f old_mmap-v-none$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_LDADD) $(LIBS)
@@ -5113,6 +5679,18 @@
 	@rm -f personality$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(personality_OBJECTS) $(personality_LDADD) $(LIBS)
 
+personality-Xabbrev$(EXEEXT): $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_DEPENDENCIES) $(EXTRA_personality_Xabbrev_DEPENDENCIES) 
+	@rm -f personality-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_LDADD) $(LIBS)
+
+personality-Xraw$(EXEEXT): $(personality_Xraw_OBJECTS) $(personality_Xraw_DEPENDENCIES) $(EXTRA_personality_Xraw_DEPENDENCIES) 
+	@rm -f personality-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xraw_OBJECTS) $(personality_Xraw_LDADD) $(LIBS)
+
+personality-Xverbose$(EXEEXT): $(personality_Xverbose_OBJECTS) $(personality_Xverbose_DEPENDENCIES) $(EXTRA_personality_Xverbose_DEPENDENCIES) 
+	@rm -f personality-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xverbose_OBJECTS) $(personality_Xverbose_LDADD) $(LIBS)
+
 pipe$(EXEEXT): $(pipe_OBJECTS) $(pipe_DEPENDENCIES) $(EXTRA_pipe_DEPENDENCIES) 
 	@rm -f pipe$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(pipe_OBJECTS) $(pipe_LDADD) $(LIBS)
@@ -5185,6 +5763,10 @@
 	@rm -f prctl-securebits$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_securebits_OBJECTS) $(prctl_securebits_LDADD) $(LIBS)
 
+prctl-spec-inject$(EXEEXT): $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_DEPENDENCIES) $(EXTRA_prctl_spec_inject_DEPENDENCIES) 
+	@rm -f prctl-spec-inject$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_LDADD) $(LIBS)
+
 prctl-tid_address$(EXEEXT): $(prctl_tid_address_OBJECTS) $(prctl_tid_address_DEPENDENCIES) $(EXTRA_prctl_tid_address_DEPENDENCIES) 
 	@rm -f prctl-tid_address$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_tid_address_OBJECTS) $(prctl_tid_address_LDADD) $(LIBS)
@@ -5669,10 +6251,34 @@
 	@rm -f so_peercred$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(so_peercred_OBJECTS) $(so_peercred_LDADD) $(LIBS)
 
+so_peercred-Xabbrev$(EXEEXT): $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_DEPENDENCIES) $(EXTRA_so_peercred_Xabbrev_DEPENDENCIES) 
+	@rm -f so_peercred-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_LDADD) $(LIBS)
+
+so_peercred-Xraw$(EXEEXT): $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_DEPENDENCIES) $(EXTRA_so_peercred_Xraw_DEPENDENCIES) 
+	@rm -f so_peercred-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_LDADD) $(LIBS)
+
+so_peercred-Xverbose$(EXEEXT): $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_DEPENDENCIES) $(EXTRA_so_peercred_Xverbose_DEPENDENCIES) 
+	@rm -f so_peercred-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_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)
 
+sock_filter-v-Xabbrev$(EXEEXT): $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_DEPENDENCIES) $(EXTRA_sock_filter_v_Xabbrev_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_LDADD) $(LIBS)
+
+sock_filter-v-Xraw$(EXEEXT): $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_DEPENDENCIES) $(EXTRA_sock_filter_v_Xraw_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_LDADD) $(LIBS)
+
+sock_filter-v-Xverbose$(EXEEXT): $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_DEPENDENCIES) $(EXTRA_sock_filter_v_Xverbose_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_LDADD) $(LIBS)
+
 socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_socketcall_DEPENDENCIES) 
 	@rm -f socketcall$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
@@ -5960,6 +6566,7 @@
 include ./$(DEPDIR)/add_key.Po
 include ./$(DEPDIR)/adjtimex.Po
 include ./$(DEPDIR)/aio.Po
+include ./$(DEPDIR)/aio_pgetevents.Po
 include ./$(DEPDIR)/alarm.Po
 include ./$(DEPDIR)/answer.Po
 include ./$(DEPDIR)/attach-f-p-cmd.Po
@@ -5967,6 +6574,12 @@
 include ./$(DEPDIR)/attach-p-cmd-cmd.Po
 include ./$(DEPDIR)/attach-p-cmd-p.Po
 include ./$(DEPDIR)/block_reset_raise_run.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd-prog-v.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd-prog.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd-v.Po
+include ./$(DEPDIR)/bpf-obj_get_info_by_fd.Po
+include ./$(DEPDIR)/bpf-success-v.Po
+include ./$(DEPDIR)/bpf-success.Po
 include ./$(DEPDIR)/bpf-v.Po
 include ./$(DEPDIR)/bpf.Po
 include ./$(DEPDIR)/brk.Po
@@ -6009,6 +6622,9 @@
 include ./$(DEPDIR)/fadvise64_64.Po
 include ./$(DEPDIR)/fallocate.Po
 include ./$(DEPDIR)/fanotify_init.Po
+include ./$(DEPDIR)/fanotify_mark-Xabbrev.Po
+include ./$(DEPDIR)/fanotify_mark-Xraw.Po
+include ./$(DEPDIR)/fanotify_mark-Xverbose.Po
 include ./$(DEPDIR)/fanotify_mark.Po
 include ./$(DEPDIR)/fchdir.Po
 include ./$(DEPDIR)/fchmod.Po
@@ -6080,12 +6696,16 @@
 include ./$(DEPDIR)/ioctl_dm.Po
 include ./$(DEPDIR)/ioctl_evdev-v.Po
 include ./$(DEPDIR)/ioctl_evdev.Po
+include ./$(DEPDIR)/ioctl_inotify.Po
 include ./$(DEPDIR)/ioctl_kvm_run.Po
 include ./$(DEPDIR)/ioctl_loop-nv.Po
 include ./$(DEPDIR)/ioctl_loop-v.Po
 include ./$(DEPDIR)/ioctl_loop.Po
 include ./$(DEPDIR)/ioctl_mtd.Po
 include ./$(DEPDIR)/ioctl_nsfs.Po
+include ./$(DEPDIR)/ioctl_perf-success.Po
+include ./$(DEPDIR)/ioctl_perf.Po
+include ./$(DEPDIR)/ioctl_ptp.Po
 include ./$(DEPDIR)/ioctl_rtc-v.Po
 include ./$(DEPDIR)/ioctl_rtc.Po
 include ./$(DEPDIR)/ioctl_scsi.Po
@@ -6099,9 +6719,21 @@
 include ./$(DEPDIR)/ioprio.Po
 include ./$(DEPDIR)/ip_mreq.Po
 include ./$(DEPDIR)/ipc.Po
+include ./$(DEPDIR)/ipc_msg-Xabbrev.Po
+include ./$(DEPDIR)/ipc_msg-Xraw.Po
+include ./$(DEPDIR)/ipc_msg-Xverbose.Po
 include ./$(DEPDIR)/ipc_msg.Po
+include ./$(DEPDIR)/ipc_msgbuf-Xabbrev.Po
+include ./$(DEPDIR)/ipc_msgbuf-Xraw.Po
+include ./$(DEPDIR)/ipc_msgbuf-Xverbose.Po
 include ./$(DEPDIR)/ipc_msgbuf.Po
+include ./$(DEPDIR)/ipc_sem-Xabbrev.Po
+include ./$(DEPDIR)/ipc_sem-Xraw.Po
+include ./$(DEPDIR)/ipc_sem-Xverbose.Po
 include ./$(DEPDIR)/ipc_sem.Po
+include ./$(DEPDIR)/ipc_shm-Xabbrev.Po
+include ./$(DEPDIR)/ipc_shm-Xraw.Po
+include ./$(DEPDIR)/ipc_shm-Xverbose.Po
 include ./$(DEPDIR)/ipc_shm.Po
 include ./$(DEPDIR)/is_linux_mips_n64.Po
 include ./$(DEPDIR)/kcmp-y.Po
@@ -6109,6 +6741,9 @@
 include ./$(DEPDIR)/kern_features.Po
 include ./$(DEPDIR)/kexec_file_load.Po
 include ./$(DEPDIR)/kexec_load.Po
+include ./$(DEPDIR)/keyctl-Xabbrev.Po
+include ./$(DEPDIR)/keyctl-Xraw.Po
+include ./$(DEPDIR)/keyctl-Xverbose.Po
 include ./$(DEPDIR)/keyctl.Po
 include ./$(DEPDIR)/kill.Po
 include ./$(DEPDIR)/ksysent.Po
@@ -6162,13 +6797,22 @@
 include ./$(DEPDIR)/mlock.Po
 include ./$(DEPDIR)/mlock2.Po
 include ./$(DEPDIR)/mlockall.Po
+include ./$(DEPDIR)/mmap-Xabbrev.Po
+include ./$(DEPDIR)/mmap-Xraw.Po
+include ./$(DEPDIR)/mmap-Xverbose.Po
 include ./$(DEPDIR)/mmap.Po
 include ./$(DEPDIR)/mmap64-mmap64.Po
+include ./$(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+include ./$(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+include ./$(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
 include ./$(DEPDIR)/mmsg-silent.Po
 include ./$(DEPDIR)/mmsg.Po
 include ./$(DEPDIR)/mmsg_name-v.Po
 include ./$(DEPDIR)/mmsg_name.Po
 include ./$(DEPDIR)/modify_ldt.Po
+include ./$(DEPDIR)/mount-Xabbrev.Po
+include ./$(DEPDIR)/mount-Xraw.Po
+include ./$(DEPDIR)/mount-Xverbose.Po
 include ./$(DEPDIR)/mount.Po
 include ./$(DEPDIR)/move_pages.Po
 include ./$(DEPDIR)/mq.Po
@@ -6221,7 +6865,9 @@
 include ./$(DEPDIR)/nlattr_ifaddrlblmsg.Po
 include ./$(DEPDIR)/nlattr_ifaddrmsg.Po
 include ./$(DEPDIR)/nlattr_ifinfomsg.Po
+include ./$(DEPDIR)/nlattr_ifla_af_spec.Po
 include ./$(DEPDIR)/nlattr_ifla_brport.Po
+include ./$(DEPDIR)/nlattr_ifla_linkinfo.Po
 include ./$(DEPDIR)/nlattr_ifla_port.Po
 include ./$(DEPDIR)/nlattr_ifla_xdp.Po
 include ./$(DEPDIR)/nlattr_inet_diag_msg.Po
@@ -6246,6 +6892,9 @@
 include ./$(DEPDIR)/nsyscalls-d.Po
 include ./$(DEPDIR)/nsyscalls.Po
 include ./$(DEPDIR)/old_mmap-P.Po
+include ./$(DEPDIR)/old_mmap-Xabbrev.Po
+include ./$(DEPDIR)/old_mmap-Xraw.Po
+include ./$(DEPDIR)/old_mmap-Xverbose.Po
 include ./$(DEPDIR)/old_mmap-v-none.Po
 include ./$(DEPDIR)/old_mmap.Po
 include ./$(DEPDIR)/oldfstat.Po
@@ -6263,6 +6912,9 @@
 include ./$(DEPDIR)/perf_event_open.Po
 include ./$(DEPDIR)/perf_event_open_nonverbose.Po
 include ./$(DEPDIR)/perf_event_open_unabbrev.Po
+include ./$(DEPDIR)/personality-Xabbrev.Po
+include ./$(DEPDIR)/personality-Xraw.Po
+include ./$(DEPDIR)/personality-Xverbose.Po
 include ./$(DEPDIR)/personality.Po
 include ./$(DEPDIR)/pipe.Po
 include ./$(DEPDIR)/pipe2.Po
@@ -6282,6 +6934,7 @@
 include ./$(DEPDIR)/prctl-seccomp-filter-v.Po
 include ./$(DEPDIR)/prctl-seccomp-strict.Po
 include ./$(DEPDIR)/prctl-securebits.Po
+include ./$(DEPDIR)/prctl-spec-inject.Po
 include ./$(DEPDIR)/prctl-tid_address.Po
 include ./$(DEPDIR)/prctl-tsc.Po
 include ./$(DEPDIR)/pread64_pwrite64-pread64-pwrite64.Po
@@ -6402,7 +7055,13 @@
 include ./$(DEPDIR)/sigsuspend.Po
 include ./$(DEPDIR)/sleep.Po
 include ./$(DEPDIR)/so_linger.Po
+include ./$(DEPDIR)/so_peercred-Xabbrev.Po
+include ./$(DEPDIR)/so_peercred-Xraw.Po
+include ./$(DEPDIR)/so_peercred-Xverbose.Po
 include ./$(DEPDIR)/so_peercred.Po
+include ./$(DEPDIR)/sock_filter-v-Xabbrev.Po
+include ./$(DEPDIR)/sock_filter-v-Xraw.Po
+include ./$(DEPDIR)/sock_filter-v-Xverbose.Po
 include ./$(DEPDIR)/sock_filter-v.Po
 include ./$(DEPDIR)/socketcall.Po
 include ./$(DEPDIR)/sockopt-sol_netlink.Po
@@ -6929,6 +7588,48 @@
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
 #	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64-mmap64.obj `if test -f 'mmap64.c'; then $(CYGPATH_W) 'mmap64.c'; else $(CYGPATH_W) '$(srcdir)/mmap64.c'; fi`
 
+mmap64_Xabbrev-mmap64-Xabbrev.o: mmap64-Xabbrev.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.o -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+#	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+
+mmap64_Xabbrev-mmap64-Xabbrev.obj: mmap64-Xabbrev.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.obj -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+#	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+
+mmap64_Xraw-mmap64-Xraw.o: mmap64-Xraw.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.o -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+#	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+
+mmap64_Xraw-mmap64-Xraw.obj: mmap64-Xraw.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.obj -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+#	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+
+mmap64_Xverbose-mmap64-Xverbose.o: mmap64-Xverbose.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.o -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+#	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+
+mmap64_Xverbose-mmap64-Xverbose.obj: mmap64-Xverbose.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.obj -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+#	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+
 newfstatat-newfstatat.o: newfstatat.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newfstatat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT newfstatat-newfstatat.o -MD -MP -MF $(DEPDIR)/newfstatat-newfstatat.Tpo -c -o newfstatat-newfstatat.o `test -f 'newfstatat.c' || echo '$(srcdir)/'`newfstatat.c
 	$(AM_V_at)$(am__mv) $(DEPDIR)/newfstatat-newfstatat.Tpo $(DEPDIR)/newfstatat-newfstatat.Po
@@ -7480,6 +8181,9 @@
 $(srcdir)/aio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/aio_pgetevents.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/alarm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7489,6 +8193,18 @@
 $(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-obj_get_info_by_fd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog-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) $^ $@
 
@@ -7576,6 +8292,15 @@
 $(srcdir)/fanotify_mark.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/fanotify_mark-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/fchdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7768,6 +8493,9 @@
 $(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_inotify.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7786,6 +8514,12 @@
 $(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_perf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_ptp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7828,12 +8562,48 @@
 $(srcdir)/ipc_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_msg-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_sem.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_sem-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_shm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_shm-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7852,6 +8622,15 @@
 $(srcdir)/keyctl.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/keyctl-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kill.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7915,9 +8694,27 @@
 $(srcdir)/mlockall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmap64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap64-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7936,6 +8733,15 @@
 $(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mount-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/move_pages.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8062,9 +8868,15 @@
 $(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_ifla_af_spec.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_linkinfo.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) $^ $@
 
@@ -8137,6 +8949,15 @@
 $(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/old_mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8179,6 +9000,15 @@
 $(srcdir)/perf_event_open_unabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/personality-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/pipe2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8509,9 +9339,27 @@
 $(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_peercred-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xverbose.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)/sock_filter-v-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xverbose.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) $^ $@
 
@@ -8593,6 +9441,24 @@
 $(srcdir)/trace_lstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/trace_personality_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/trace_question.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d88a09b..34b08a9 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -93,6 +93,12 @@
 	attach-p-cmd-cmd \
 	attach-p-cmd-p \
 	block_reset_raise_run \
+	bpf-obj_get_info_by_fd \
+	bpf-obj_get_info_by_fd-v \
+	bpf-obj_get_info_by_fd-prog \
+	bpf-obj_get_info_by_fd-prog-v \
+	bpf-success \
+	bpf-success-v \
 	caps-abbrev \
 	check_sigblock \
 	check_sigign \
@@ -115,6 +121,7 @@
 	ioctl_loop-nv \
 	ioctl_loop-v \
 	ioctl_nsfs \
+	ioctl_perf-success \
 	ioctl_rtc-v \
 	is_linux_mips_n64 \
 	ksysent \
@@ -137,6 +144,7 @@
 	ppoll-v \
 	prctl-seccomp-filter-v \
 	prctl-seccomp-strict \
+	prctl-spec-inject \
 	print_maxfd \
 	qual_fault \
 	qual_inject-error-signal \
@@ -179,6 +187,9 @@
 localtime_LDADD = $(clock_LIBS) $(LDADD)
 lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xraw_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xverbose_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mq_LDADD = $(mq_LIBS) $(LDADD)
 newfstatat_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 pc_LDADD = $(dl_LIBS) $(LDADD)
@@ -202,20 +213,26 @@
 
 include gen_tests.am
 
-if USE_LIBUNWIND
-LIBUNWIND_TESTS = strace-k.test
+if ENABLE_STACKTRACE
+STACKTRACE_TESTS = strace-k.test
 if USE_DEMANGLE
-LIBUNWIND_TESTS += strace-k-demangle.test
+STACKTRACE_TESTS += strace-k-demangle.test
 endif
 else
-LIBUNWIND_TESTS =
+STACKTRACE_TESTS =
 endif
 
 DECODER_TESTS = \
+	bpf-success.test \
+	bpf-success-v.test \
 	brk.test \
 	btrfs-v.test \
 	btrfs-vw.test \
+	btrfs-vwX.test \
+	btrfs-vX.test \
 	btrfs-w.test \
+	btrfs-wX.test \
+	btrfs-X.test \
 	caps-abbrev.test \
 	caps.test \
 	eventfd.test \
@@ -225,6 +242,7 @@
 	futex.test \
 	getuid.test \
 	ioctl.test \
+	ioctl_perf-success.test \
 	ipc_msgbuf.test \
 	kern_features-fault.test \
 	llseek.test \
@@ -251,6 +269,7 @@
 	prctl-seccomp-filter-v.test \
 	prctl-seccomp-strict.test \
 	prctl-securebits.test \
+	prctl-spec-inject.test \
 	prctl-tid_address.test \
 	prctl-tsc.test \
 	qual_fault-exit_group.test \
@@ -299,9 +318,13 @@
 	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
+	qual_fault-syscall.test \
 	qual_inject-error-signal.test \
+	qual_inject-error-signal-syscall.test \
 	qual_inject-retval.test \
+	qual_inject-retval-syscall.test \
 	qual_inject-signal.test \
+	qual_inject-signal-syscall.test \
 	qual_inject-syntax.test \
 	qual_signal.test \
 	qual_syscall.test \
@@ -324,11 +347,11 @@
 	threads-execve.test \
 	# end of MISC_TESTS
 
-TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(LIBUNWIND_TESTS)
+TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(STACKTRACE_TESTS)
 
 XFAIL_TESTS_ =
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
@@ -352,6 +375,7 @@
 	count-f.expected \
 	eventfd.expected \
 	fadvise.h \
+	fcntl-common.c \
 	filter-unavailable.expected \
 	fstatat.c \
 	fstatx.c \
@@ -362,12 +386,12 @@
 	init.sh \
 	init_delete_module.h \
 	ipc.sh \
-	ipc_msgbuf.expected \
 	ksysent.sed \
 	lstatx.c \
 	match.awk \
 	net.expected \
 	netlink_sock_diag-v.sh \
+	nlattr_ifla.h \
 	pipe.expected \
 	print_user_desc.c \
 	process_vm_readv_writev.c \
@@ -375,6 +399,8 @@
 	qual_fault-exit_group.expected \
 	qual_inject-error-signal.expected \
 	qual_inject-signal.expected \
+	qualify_personality.sh \
+	qualify_personality_empty.in \
 	quotactl.h \
 	regex.in \
 	rt_sigaction.awk \
@@ -392,16 +418,23 @@
 	strace-E.expected \
 	strace-T.expected \
 	strace-ff.expected \
+	strace-k-demangle.expected \
 	strace-k-demangle.test \
+	strace-k.expected \
 	strace-k.test \
 	strace-r.expected \
 	strace.supp \
-	struct_flock.c \
 	sun_path.expected \
 	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
+	trace_personality_32.in \
+	trace_personality_64.in \
+	trace_personality_x32.in \
+	trace_personality_regex_32.in \
+	trace_personality_regex_64.in \
+	trace_personality_regex_x32.in \
 	trace_question.in \
 	trace_stat.in \
 	trace_stat_like.in \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 01cf6f4..4b8dee9 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -139,7 +139,11 @@
 check_PROGRAMS = $(am__EXEEXT_1) _newselect-P$(EXEEXT) 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) \
+	block_reset_raise_run$(EXEEXT) bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-v$(EXEEXT) bpf-success$(EXEEXT) \
+	bpf-success-v$(EXEEXT) caps-abbrev$(EXEEXT) \
 	check_sigblock$(EXEEXT) check_sigign$(EXEEXT) \
 	clone_parent$(EXEEXT) clone_ptrace$(EXEEXT) count-f$(EXEEXT) \
 	delay$(EXEEXT) execve-v$(EXEEXT) execveat-v$(EXEEXT) \
@@ -147,7 +151,8 @@
 	getpid$(EXEEXT) getppid$(EXEEXT) gettid$(EXEEXT) \
 	inject-nf$(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) \
+	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) \
+	ioctl_perf-success$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
 	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
 	list_sigaction_signum$(EXEEXT) localtime$(EXEEXT) \
 	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
@@ -159,21 +164,22 @@
 	perf_event_open_nonverbose$(EXEEXT) \
 	perf_event_open_unabbrev$(EXEEXT) ppoll-v$(EXEEXT) \
 	prctl-seccomp-filter-v$(EXEEXT) prctl-seccomp-strict$(EXEEXT) \
-	print_maxfd$(EXEEXT) qual_fault$(EXEEXT) \
-	qual_inject-error-signal$(EXEEXT) qual_inject-retval$(EXEEXT) \
-	qual_inject-signal$(EXEEXT) qual_signal$(EXEEXT) \
-	quotactl-v$(EXEEXT) quotactl-xfs-v$(EXEEXT) \
-	redirect-fds$(EXEEXT) restart_syscall$(EXEEXT) \
-	run_expect_termsig$(EXEEXT) scm_rights$(EXEEXT) \
-	seccomp-filter-v$(EXEEXT) seccomp-strict$(EXEEXT) \
-	select-P$(EXEEXT) set_ptracer_any$(EXEEXT) \
-	set_sigblock$(EXEEXT) set_sigign$(EXEEXT) \
-	signal_receive$(EXEEXT) sleep$(EXEEXT) stack-fcall$(EXEEXT) \
-	stack-fcall-mangled$(EXEEXT) threads-execve$(EXEEXT) \
-	unblock_reset_raise$(EXEEXT) unix-pair-send-recv$(EXEEXT) \
+	prctl-spec-inject$(EXEEXT) print_maxfd$(EXEEXT) \
+	qual_fault$(EXEEXT) qual_inject-error-signal$(EXEEXT) \
+	qual_inject-retval$(EXEEXT) qual_inject-signal$(EXEEXT) \
+	qual_signal$(EXEEXT) quotactl-v$(EXEEXT) \
+	quotactl-xfs-v$(EXEEXT) redirect-fds$(EXEEXT) \
+	restart_syscall$(EXEEXT) run_expect_termsig$(EXEEXT) \
+	scm_rights$(EXEEXT) seccomp-filter-v$(EXEEXT) \
+	seccomp-strict$(EXEEXT) select-P$(EXEEXT) \
+	set_ptracer_any$(EXEEXT) set_sigblock$(EXEEXT) \
+	set_sigign$(EXEEXT) signal_receive$(EXEEXT) sleep$(EXEEXT) \
+	stack-fcall$(EXEEXT) stack-fcall-mangled$(EXEEXT) \
+	threads-execve$(EXEEXT) unblock_reset_raise$(EXEEXT) \
+	unix-pair-send-recv$(EXEEXT) \
 	unix-pair-sendto-recvfrom$(EXEEXT) vfork-f$(EXEEXT) \
 	wait4-v$(EXEEXT) waitid-v$(EXEEXT) zeroargc$(EXEEXT)
-@USE_DEMANGLE_TRUE@@USE_LIBUNWIND_TRUE@am__append_1 = strace-k-demangle.test
+@ENABLE_STACKTRACE_TRUE@@USE_DEMANGLE_TRUE@am__append_1 = strace-k-demangle.test
 TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(am__EXEEXT_2)
 subdir = tests
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -181,7 +187,10 @@
 	$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
 	$(top_srcdir)/m4/ax_valgrind_check.m4 \
 	$(top_srcdir)/m4/bpf_attr.m4 $(top_srcdir)/m4/mpers.m4 \
+	$(top_srcdir)/m4/st_demangle.m4 $(top_srcdir)/m4/st_libdw.m4 \
+	$(top_srcdir)/m4/st_libunwind.m4 \
 	$(top_srcdir)/m4/st_save_restore_var.m4 \
+	$(top_srcdir)/m4/st_stacktrace.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) \
@@ -223,18 +232,25 @@
 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) \
-	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) dev-yy$(EXEEXT) dup$(EXEEXT) \
-	dup2$(EXEEXT) dup3$(EXEEXT) epoll_create$(EXEEXT) \
-	epoll_create1$(EXEEXT) epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) \
-	epoll_wait$(EXEEXT) erestartsys$(EXEEXT) eventfd$(EXEEXT) \
-	execve$(EXEEXT) execveat$(EXEEXT) faccessat$(EXEEXT) \
-	fadvise64$(EXEEXT) fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
-	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) fchdir$(EXEEXT) \
+	adjtimex$(EXEEXT) aio$(EXEEXT) aio_pgetevents$(EXEEXT) \
+	alarm$(EXEEXT) bpf$(EXEEXT) bpf-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd$(EXEEXT) \
+	bpf-obj_get_info_by_fd-v$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog$(EXEEXT) \
+	bpf-obj_get_info_by_fd-prog-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) \
+	dev-yy$(EXEEXT) dup$(EXEEXT) dup2$(EXEEXT) dup3$(EXEEXT) \
+	epoll_create$(EXEEXT) epoll_create1$(EXEEXT) \
+	epoll_ctl$(EXEEXT) epoll_pwait$(EXEEXT) epoll_wait$(EXEEXT) \
+	erestartsys$(EXEEXT) eventfd$(EXEEXT) execve$(EXEEXT) \
+	execveat$(EXEEXT) faccessat$(EXEEXT) fadvise64$(EXEEXT) \
+	fadvise64_64$(EXEEXT) fallocate$(EXEEXT) \
+	fanotify_init$(EXEEXT) fanotify_mark$(EXEEXT) \
+	fanotify_mark-Xabbrev$(EXEEXT) fanotify_mark-Xraw$(EXEEXT) \
+	fanotify_mark-Xverbose$(EXEEXT) fchdir$(EXEEXT) \
 	fchmod$(EXEEXT) fchmodat$(EXEEXT) fchown$(EXEEXT) \
 	fchown32$(EXEEXT) fchownat$(EXEEXT) fcntl$(EXEEXT) \
 	fcntl64$(EXEEXT) fdatasync$(EXEEXT) fflush$(EXEEXT) \
@@ -255,49 +271,62 @@
 	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_kvm_run$(EXEEXT) \
-	ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) \
+	ioctl_evdev$(EXEEXT) ioctl_inotify$(EXEEXT) \
+	ioctl_kvm_run$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
+	ioctl_rtc$(EXEEXT) ioctl_perf$(EXEEXT) ioctl_ptp$(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) kcmp-y$(EXEEXT) \
-	kern_features$(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) \
+	ipc_msg$(EXEEXT) ipc_msg-Xabbrev$(EXEEXT) \
+	ipc_msg-Xraw$(EXEEXT) ipc_msg-Xverbose$(EXEEXT) \
+	ipc_msgbuf$(EXEEXT) ipc_msgbuf-Xabbrev$(EXEEXT) \
+	ipc_msgbuf-Xraw$(EXEEXT) ipc_msgbuf-Xverbose$(EXEEXT) \
+	ipc_sem$(EXEEXT) ipc_sem-Xabbrev$(EXEEXT) \
+	ipc_sem-Xraw$(EXEEXT) ipc_sem-Xverbose$(EXEEXT) \
+	ipc_shm$(EXEEXT) ipc_shm-Xabbrev$(EXEEXT) \
+	ipc_shm-Xraw$(EXEEXT) ipc_shm-Xverbose$(EXEEXT) kcmp$(EXEEXT) \
+	kcmp-y$(EXEEXT) kern_features$(EXEEXT) \
+	kexec_file_load$(EXEEXT) kexec_load$(EXEEXT) keyctl$(EXEEXT) \
+	keyctl-Xabbrev$(EXEEXT) keyctl-Xraw$(EXEEXT) \
+	keyctl-Xverbose$(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) \
+	mmap-Xabbrev$(EXEEXT) mmap-Xraw$(EXEEXT) \
+	mmap-Xverbose$(EXEEXT) mmap64$(EXEEXT) mmap64-Xabbrev$(EXEEXT) \
+	mmap64-Xraw$(EXEEXT) mmap64-Xverbose$(EXEEXT) mmsg$(EXEEXT) \
 	mmsg_name$(EXEEXT) modify_ldt$(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-inet6$(EXEEXT) net-yy-netlink$(EXEEXT) \
-	net-yy-unix$(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) \
-	nfnetlink_acct$(EXEEXT) nfnetlink_cthelper$(EXEEXT) \
-	nfnetlink_ctnetlink$(EXEEXT) nfnetlink_ctnetlink_exp$(EXEEXT) \
-	nfnetlink_cttimeout$(EXEEXT) nfnetlink_nft_compat$(EXEEXT) \
-	nfnetlink_nftables$(EXEEXT) nfnetlink_ipset$(EXEEXT) \
-	nfnetlink_osf$(EXEEXT) nfnetlink_queue$(EXEEXT) \
-	nfnetlink_ulog$(EXEEXT) nlattr$(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) \
+	mount-Xabbrev$(EXEEXT) mount-Xraw$(EXEEXT) \
+	mount-Xverbose$(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-inet6$(EXEEXT) \
+	net-yy-netlink$(EXEEXT) net-yy-unix$(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) nfnetlink_acct$(EXEEXT) \
+	nfnetlink_cthelper$(EXEEXT) nfnetlink_ctnetlink$(EXEEXT) \
+	nfnetlink_ctnetlink_exp$(EXEEXT) nfnetlink_cttimeout$(EXEEXT) \
+	nfnetlink_nft_compat$(EXEEXT) nfnetlink_nftables$(EXEEXT) \
+	nfnetlink_ipset$(EXEEXT) nfnetlink_osf$(EXEEXT) \
+	nfnetlink_queue$(EXEEXT) nfnetlink_ulog$(EXEEXT) \
+	nlattr$(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_af_spec$(EXEEXT) nlattr_ifla_brport$(EXEEXT) \
+	nlattr_ifla_linkinfo$(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_mdba_mdb_entry$(EXEEXT) \
@@ -309,11 +338,14 @@
 	nlattr_tc_stats$(EXEEXT) nlattr_tca_stab$(EXEEXT) \
 	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
-	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) oldfstat$(EXEEXT) \
-	oldlstat$(EXEEXT) oldselect$(EXEEXT) oldselect-efault$(EXEEXT) \
-	oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
-	osf_utimes$(EXEEXT) pause$(EXEEXT) perf_event_open$(EXEEXT) \
-	personality$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
+	old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) \
+	old_mmap-Xabbrev$(EXEEXT) old_mmap-Xraw$(EXEEXT) \
+	old_mmap-Xverbose$(EXEEXT) oldfstat$(EXEEXT) oldlstat$(EXEEXT) \
+	oldselect$(EXEEXT) oldselect-efault$(EXEEXT) oldstat$(EXEEXT) \
+	open$(EXEEXT) openat$(EXEEXT) osf_utimes$(EXEEXT) \
+	pause$(EXEEXT) perf_event_open$(EXEEXT) personality$(EXEEXT) \
+	personality-Xabbrev$(EXEEXT) personality-Xraw$(EXEEXT) \
+	personality-Xverbose$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
 	pkey_alloc$(EXEEXT) pkey_free$(EXEEXT) pkey_mprotect$(EXEEXT) \
 	poll$(EXEEXT) poll-P$(EXEEXT) ppoll$(EXEEXT) ppoll-P$(EXEEXT) \
 	prctl-arg2-intptr$(EXEEXT) prctl-dumpable$(EXEEXT) \
@@ -361,7 +393,10 @@
 	sigaltstack$(EXEEXT) siginfo$(EXEEXT) signal$(EXEEXT) \
 	signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
 	sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
-	so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
+	so_peercred$(EXEEXT) so_peercred-Xabbrev$(EXEEXT) \
+	so_peercred-Xraw$(EXEEXT) so_peercred-Xverbose$(EXEEXT) \
+	sock_filter-v$(EXEEXT) sock_filter-v-Xabbrev$(EXEEXT) \
+	sock_filter-v-Xraw$(EXEEXT) sock_filter-v-Xverbose$(EXEEXT) \
 	socketcall$(EXEEXT) sockopt-sol_netlink$(EXEEXT) \
 	splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
 	statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
@@ -418,6 +453,10 @@
 aio_OBJECTS = aio.$(OBJEXT)
 aio_LDADD = $(LDADD)
 aio_DEPENDENCIES = libtests.a
+aio_pgetevents_SOURCES = aio_pgetevents.c
+aio_pgetevents_OBJECTS = aio_pgetevents.$(OBJEXT)
+aio_pgetevents_LDADD = $(LDADD)
+aio_pgetevents_DEPENDENCIES = libtests.a
 alarm_SOURCES = alarm.c
 alarm_OBJECTS = alarm.$(OBJEXT)
 alarm_LDADD = $(LDADD)
@@ -449,6 +488,33 @@
 bpf_OBJECTS = bpf.$(OBJEXT)
 bpf_LDADD = $(LDADD)
 bpf_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_SOURCES = bpf-obj_get_info_by_fd.c
+bpf_obj_get_info_by_fd_OBJECTS = bpf-obj_get_info_by_fd.$(OBJEXT)
+bpf_obj_get_info_by_fd_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_SOURCES = bpf-obj_get_info_by_fd-prog.c
+bpf_obj_get_info_by_fd_prog_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_prog_v_SOURCES =  \
+	bpf-obj_get_info_by_fd-prog-v.c
+bpf_obj_get_info_by_fd_prog_v_OBJECTS =  \
+	bpf-obj_get_info_by_fd-prog-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_prog_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES = libtests.a
+bpf_obj_get_info_by_fd_v_SOURCES = bpf-obj_get_info_by_fd-v.c
+bpf_obj_get_info_by_fd_v_OBJECTS = bpf-obj_get_info_by_fd-v.$(OBJEXT)
+bpf_obj_get_info_by_fd_v_LDADD = $(LDADD)
+bpf_obj_get_info_by_fd_v_DEPENDENCIES = libtests.a
+bpf_success_SOURCES = bpf-success.c
+bpf_success_OBJECTS = bpf-success.$(OBJEXT)
+bpf_success_LDADD = $(LDADD)
+bpf_success_DEPENDENCIES = libtests.a
+bpf_success_v_SOURCES = bpf-success-v.c
+bpf_success_v_OBJECTS = bpf-success-v.$(OBJEXT)
+bpf_success_v_LDADD = $(LDADD)
+bpf_success_v_DEPENDENCIES = libtests.a
 bpf_v_SOURCES = bpf-v.c
 bpf_v_OBJECTS = bpf-v.$(OBJEXT)
 bpf_v_LDADD = $(LDADD)
@@ -616,6 +682,18 @@
 fanotify_mark_OBJECTS = fanotify_mark.$(OBJEXT)
 fanotify_mark_LDADD = $(LDADD)
 fanotify_mark_DEPENDENCIES = libtests.a
+fanotify_mark_Xabbrev_SOURCES = fanotify_mark-Xabbrev.c
+fanotify_mark_Xabbrev_OBJECTS = fanotify_mark-Xabbrev.$(OBJEXT)
+fanotify_mark_Xabbrev_LDADD = $(LDADD)
+fanotify_mark_Xabbrev_DEPENDENCIES = libtests.a
+fanotify_mark_Xraw_SOURCES = fanotify_mark-Xraw.c
+fanotify_mark_Xraw_OBJECTS = fanotify_mark-Xraw.$(OBJEXT)
+fanotify_mark_Xraw_LDADD = $(LDADD)
+fanotify_mark_Xraw_DEPENDENCIES = libtests.a
+fanotify_mark_Xverbose_SOURCES = fanotify_mark-Xverbose.c
+fanotify_mark_Xverbose_OBJECTS = fanotify_mark-Xverbose.$(OBJEXT)
+fanotify_mark_Xverbose_LDADD = $(LDADD)
+fanotify_mark_Xverbose_DEPENDENCIES = libtests.a
 fchdir_SOURCES = fchdir.c
 fchdir_OBJECTS = fchdir.$(OBJEXT)
 fchdir_LDADD = $(LDADD)
@@ -895,6 +973,10 @@
 ioctl_evdev_v_OBJECTS = ioctl_evdev-v.$(OBJEXT)
 ioctl_evdev_v_LDADD = $(LDADD)
 ioctl_evdev_v_DEPENDENCIES = libtests.a
+ioctl_inotify_SOURCES = ioctl_inotify.c
+ioctl_inotify_OBJECTS = ioctl_inotify.$(OBJEXT)
+ioctl_inotify_LDADD = $(LDADD)
+ioctl_inotify_DEPENDENCIES = libtests.a
 ioctl_kvm_run_SOURCES = ioctl_kvm_run.c
 ioctl_kvm_run_OBJECTS = ioctl_kvm_run.$(OBJEXT)
 ioctl_kvm_run_LDADD = $(LDADD)
@@ -919,6 +1001,18 @@
 ioctl_nsfs_OBJECTS = ioctl_nsfs.$(OBJEXT)
 ioctl_nsfs_LDADD = $(LDADD)
 ioctl_nsfs_DEPENDENCIES = libtests.a
+ioctl_perf_SOURCES = ioctl_perf.c
+ioctl_perf_OBJECTS = ioctl_perf.$(OBJEXT)
+ioctl_perf_LDADD = $(LDADD)
+ioctl_perf_DEPENDENCIES = libtests.a
+ioctl_perf_success_SOURCES = ioctl_perf-success.c
+ioctl_perf_success_OBJECTS = ioctl_perf-success.$(OBJEXT)
+ioctl_perf_success_LDADD = $(LDADD)
+ioctl_perf_success_DEPENDENCIES = libtests.a
+ioctl_ptp_SOURCES = ioctl_ptp.c
+ioctl_ptp_OBJECTS = ioctl_ptp.$(OBJEXT)
+ioctl_ptp_LDADD = $(LDADD)
+ioctl_ptp_DEPENDENCIES = libtests.a
 ioctl_rtc_SOURCES = ioctl_rtc.c
 ioctl_rtc_OBJECTS = ioctl_rtc.$(OBJEXT)
 ioctl_rtc_LDADD = $(LDADD)
@@ -975,18 +1069,66 @@
 ipc_msg_OBJECTS = ipc_msg.$(OBJEXT)
 ipc_msg_LDADD = $(LDADD)
 ipc_msg_DEPENDENCIES = libtests.a
+ipc_msg_Xabbrev_SOURCES = ipc_msg-Xabbrev.c
+ipc_msg_Xabbrev_OBJECTS = ipc_msg-Xabbrev.$(OBJEXT)
+ipc_msg_Xabbrev_LDADD = $(LDADD)
+ipc_msg_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msg_Xraw_SOURCES = ipc_msg-Xraw.c
+ipc_msg_Xraw_OBJECTS = ipc_msg-Xraw.$(OBJEXT)
+ipc_msg_Xraw_LDADD = $(LDADD)
+ipc_msg_Xraw_DEPENDENCIES = libtests.a
+ipc_msg_Xverbose_SOURCES = ipc_msg-Xverbose.c
+ipc_msg_Xverbose_OBJECTS = ipc_msg-Xverbose.$(OBJEXT)
+ipc_msg_Xverbose_LDADD = $(LDADD)
+ipc_msg_Xverbose_DEPENDENCIES = libtests.a
 ipc_msgbuf_SOURCES = ipc_msgbuf.c
 ipc_msgbuf_OBJECTS = ipc_msgbuf.$(OBJEXT)
 ipc_msgbuf_LDADD = $(LDADD)
 ipc_msgbuf_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xabbrev_SOURCES = ipc_msgbuf-Xabbrev.c
+ipc_msgbuf_Xabbrev_OBJECTS = ipc_msgbuf-Xabbrev.$(OBJEXT)
+ipc_msgbuf_Xabbrev_LDADD = $(LDADD)
+ipc_msgbuf_Xabbrev_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xraw_SOURCES = ipc_msgbuf-Xraw.c
+ipc_msgbuf_Xraw_OBJECTS = ipc_msgbuf-Xraw.$(OBJEXT)
+ipc_msgbuf_Xraw_LDADD = $(LDADD)
+ipc_msgbuf_Xraw_DEPENDENCIES = libtests.a
+ipc_msgbuf_Xverbose_SOURCES = ipc_msgbuf-Xverbose.c
+ipc_msgbuf_Xverbose_OBJECTS = ipc_msgbuf-Xverbose.$(OBJEXT)
+ipc_msgbuf_Xverbose_LDADD = $(LDADD)
+ipc_msgbuf_Xverbose_DEPENDENCIES = libtests.a
 ipc_sem_SOURCES = ipc_sem.c
 ipc_sem_OBJECTS = ipc_sem.$(OBJEXT)
 ipc_sem_LDADD = $(LDADD)
 ipc_sem_DEPENDENCIES = libtests.a
+ipc_sem_Xabbrev_SOURCES = ipc_sem-Xabbrev.c
+ipc_sem_Xabbrev_OBJECTS = ipc_sem-Xabbrev.$(OBJEXT)
+ipc_sem_Xabbrev_LDADD = $(LDADD)
+ipc_sem_Xabbrev_DEPENDENCIES = libtests.a
+ipc_sem_Xraw_SOURCES = ipc_sem-Xraw.c
+ipc_sem_Xraw_OBJECTS = ipc_sem-Xraw.$(OBJEXT)
+ipc_sem_Xraw_LDADD = $(LDADD)
+ipc_sem_Xraw_DEPENDENCIES = libtests.a
+ipc_sem_Xverbose_SOURCES = ipc_sem-Xverbose.c
+ipc_sem_Xverbose_OBJECTS = ipc_sem-Xverbose.$(OBJEXT)
+ipc_sem_Xverbose_LDADD = $(LDADD)
+ipc_sem_Xverbose_DEPENDENCIES = libtests.a
 ipc_shm_SOURCES = ipc_shm.c
 ipc_shm_OBJECTS = ipc_shm.$(OBJEXT)
 ipc_shm_LDADD = $(LDADD)
 ipc_shm_DEPENDENCIES = libtests.a
+ipc_shm_Xabbrev_SOURCES = ipc_shm-Xabbrev.c
+ipc_shm_Xabbrev_OBJECTS = ipc_shm-Xabbrev.$(OBJEXT)
+ipc_shm_Xabbrev_LDADD = $(LDADD)
+ipc_shm_Xabbrev_DEPENDENCIES = libtests.a
+ipc_shm_Xraw_SOURCES = ipc_shm-Xraw.c
+ipc_shm_Xraw_OBJECTS = ipc_shm-Xraw.$(OBJEXT)
+ipc_shm_Xraw_LDADD = $(LDADD)
+ipc_shm_Xraw_DEPENDENCIES = libtests.a
+ipc_shm_Xverbose_SOURCES = ipc_shm-Xverbose.c
+ipc_shm_Xverbose_OBJECTS = ipc_shm-Xverbose.$(OBJEXT)
+ipc_shm_Xverbose_LDADD = $(LDADD)
+ipc_shm_Xverbose_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)
@@ -1015,6 +1157,18 @@
 keyctl_OBJECTS = keyctl.$(OBJEXT)
 keyctl_LDADD = $(LDADD)
 keyctl_DEPENDENCIES = libtests.a
+keyctl_Xabbrev_SOURCES = keyctl-Xabbrev.c
+keyctl_Xabbrev_OBJECTS = keyctl-Xabbrev.$(OBJEXT)
+keyctl_Xabbrev_LDADD = $(LDADD)
+keyctl_Xabbrev_DEPENDENCIES = libtests.a
+keyctl_Xraw_SOURCES = keyctl-Xraw.c
+keyctl_Xraw_OBJECTS = keyctl-Xraw.$(OBJEXT)
+keyctl_Xraw_LDADD = $(LDADD)
+keyctl_Xraw_DEPENDENCIES = libtests.a
+keyctl_Xverbose_SOURCES = keyctl-Xverbose.c
+keyctl_Xverbose_OBJECTS = keyctl-Xverbose.$(OBJEXT)
+keyctl_Xverbose_LDADD = $(LDADD)
+keyctl_Xverbose_DEPENDENCIES = libtests.a
 kill_SOURCES = kill.c
 kill_OBJECTS = kill.$(OBJEXT)
 kill_LDADD = $(LDADD)
@@ -1122,10 +1276,34 @@
 mmap_OBJECTS = mmap.$(OBJEXT)
 mmap_LDADD = $(LDADD)
 mmap_DEPENDENCIES = libtests.a
+mmap_Xabbrev_SOURCES = mmap-Xabbrev.c
+mmap_Xabbrev_OBJECTS = mmap-Xabbrev.$(OBJEXT)
+mmap_Xabbrev_LDADD = $(LDADD)
+mmap_Xabbrev_DEPENDENCIES = libtests.a
+mmap_Xraw_SOURCES = mmap-Xraw.c
+mmap_Xraw_OBJECTS = mmap-Xraw.$(OBJEXT)
+mmap_Xraw_LDADD = $(LDADD)
+mmap_Xraw_DEPENDENCIES = libtests.a
+mmap_Xverbose_SOURCES = mmap-Xverbose.c
+mmap_Xverbose_OBJECTS = mmap-Xverbose.$(OBJEXT)
+mmap_Xverbose_LDADD = $(LDADD)
+mmap_Xverbose_DEPENDENCIES = libtests.a
 mmap64_SOURCES = mmap64.c
 mmap64_OBJECTS = mmap64-mmap64.$(OBJEXT)
 mmap64_LDADD = $(LDADD)
 mmap64_DEPENDENCIES = libtests.a
+mmap64_Xabbrev_SOURCES = mmap64-Xabbrev.c
+mmap64_Xabbrev_OBJECTS = mmap64_Xabbrev-mmap64-Xabbrev.$(OBJEXT)
+mmap64_Xabbrev_LDADD = $(LDADD)
+mmap64_Xabbrev_DEPENDENCIES = libtests.a
+mmap64_Xraw_SOURCES = mmap64-Xraw.c
+mmap64_Xraw_OBJECTS = mmap64_Xraw-mmap64-Xraw.$(OBJEXT)
+mmap64_Xraw_LDADD = $(LDADD)
+mmap64_Xraw_DEPENDENCIES = libtests.a
+mmap64_Xverbose_SOURCES = mmap64-Xverbose.c
+mmap64_Xverbose_OBJECTS = mmap64_Xverbose-mmap64-Xverbose.$(OBJEXT)
+mmap64_Xverbose_LDADD = $(LDADD)
+mmap64_Xverbose_DEPENDENCIES = libtests.a
 mmsg_SOURCES = mmsg.c
 mmsg_OBJECTS = mmsg.$(OBJEXT)
 mmsg_LDADD = $(LDADD)
@@ -1150,6 +1328,18 @@
 mount_OBJECTS = mount.$(OBJEXT)
 mount_LDADD = $(LDADD)
 mount_DEPENDENCIES = libtests.a
+mount_Xabbrev_SOURCES = mount-Xabbrev.c
+mount_Xabbrev_OBJECTS = mount-Xabbrev.$(OBJEXT)
+mount_Xabbrev_LDADD = $(LDADD)
+mount_Xabbrev_DEPENDENCIES = libtests.a
+mount_Xraw_SOURCES = mount-Xraw.c
+mount_Xraw_OBJECTS = mount-Xraw.$(OBJEXT)
+mount_Xraw_LDADD = $(LDADD)
+mount_Xraw_DEPENDENCIES = libtests.a
+mount_Xverbose_SOURCES = mount-Xverbose.c
+mount_Xverbose_OBJECTS = mount-Xverbose.$(OBJEXT)
+mount_Xverbose_LDADD = $(LDADD)
+mount_Xverbose_DEPENDENCIES = libtests.a
 move_pages_SOURCES = move_pages.c
 move_pages_OBJECTS = move_pages.$(OBJEXT)
 move_pages_LDADD = $(LDADD)
@@ -1353,10 +1543,18 @@
 nlattr_ifinfomsg_OBJECTS = nlattr_ifinfomsg.$(OBJEXT)
 nlattr_ifinfomsg_LDADD = $(LDADD)
 nlattr_ifinfomsg_DEPENDENCIES = libtests.a
+nlattr_ifla_af_spec_SOURCES = nlattr_ifla_af_spec.c
+nlattr_ifla_af_spec_OBJECTS = nlattr_ifla_af_spec.$(OBJEXT)
+nlattr_ifla_af_spec_LDADD = $(LDADD)
+nlattr_ifla_af_spec_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_linkinfo_SOURCES = nlattr_ifla_linkinfo.c
+nlattr_ifla_linkinfo_OBJECTS = nlattr_ifla_linkinfo.$(OBJEXT)
+nlattr_ifla_linkinfo_LDADD = $(LDADD)
+nlattr_ifla_linkinfo_DEPENDENCIES = libtests.a
 nlattr_ifla_port_SOURCES = nlattr_ifla_port.c
 nlattr_ifla_port_OBJECTS = nlattr_ifla_port.$(OBJEXT)
 nlattr_ifla_port_LDADD = $(LDADD)
@@ -1458,6 +1656,18 @@
 old_mmap_P_OBJECTS = old_mmap-P.$(OBJEXT)
 old_mmap_P_LDADD = $(LDADD)
 old_mmap_P_DEPENDENCIES = libtests.a
+old_mmap_Xabbrev_SOURCES = old_mmap-Xabbrev.c
+old_mmap_Xabbrev_OBJECTS = old_mmap-Xabbrev.$(OBJEXT)
+old_mmap_Xabbrev_LDADD = $(LDADD)
+old_mmap_Xabbrev_DEPENDENCIES = libtests.a
+old_mmap_Xraw_SOURCES = old_mmap-Xraw.c
+old_mmap_Xraw_OBJECTS = old_mmap-Xraw.$(OBJEXT)
+old_mmap_Xraw_LDADD = $(LDADD)
+old_mmap_Xraw_DEPENDENCIES = libtests.a
+old_mmap_Xverbose_SOURCES = old_mmap-Xverbose.c
+old_mmap_Xverbose_OBJECTS = old_mmap-Xverbose.$(OBJEXT)
+old_mmap_Xverbose_LDADD = $(LDADD)
+old_mmap_Xverbose_DEPENDENCIES = libtests.a
 old_mmap_v_none_SOURCES = old_mmap-v-none.c
 old_mmap_v_none_OBJECTS = old_mmap-v-none.$(OBJEXT)
 old_mmap_v_none_LDADD = $(LDADD)
@@ -1526,6 +1736,18 @@
 personality_OBJECTS = personality.$(OBJEXT)
 personality_LDADD = $(LDADD)
 personality_DEPENDENCIES = libtests.a
+personality_Xabbrev_SOURCES = personality-Xabbrev.c
+personality_Xabbrev_OBJECTS = personality-Xabbrev.$(OBJEXT)
+personality_Xabbrev_LDADD = $(LDADD)
+personality_Xabbrev_DEPENDENCIES = libtests.a
+personality_Xraw_SOURCES = personality-Xraw.c
+personality_Xraw_OBJECTS = personality-Xraw.$(OBJEXT)
+personality_Xraw_LDADD = $(LDADD)
+personality_Xraw_DEPENDENCIES = libtests.a
+personality_Xverbose_SOURCES = personality-Xverbose.c
+personality_Xverbose_OBJECTS = personality-Xverbose.$(OBJEXT)
+personality_Xverbose_LDADD = $(LDADD)
+personality_Xverbose_DEPENDENCIES = libtests.a
 pipe_SOURCES = pipe.c
 pipe_OBJECTS = pipe.$(OBJEXT)
 pipe_LDADD = $(LDADD)
@@ -1598,6 +1820,10 @@
 prctl_securebits_OBJECTS = prctl-securebits.$(OBJEXT)
 prctl_securebits_LDADD = $(LDADD)
 prctl_securebits_DEPENDENCIES = libtests.a
+prctl_spec_inject_SOURCES = prctl-spec-inject.c
+prctl_spec_inject_OBJECTS = prctl-spec-inject.$(OBJEXT)
+prctl_spec_inject_LDADD = $(LDADD)
+prctl_spec_inject_DEPENDENCIES = libtests.a
 prctl_tid_address_SOURCES = prctl-tid_address.c
 prctl_tid_address_OBJECTS = prctl-tid_address.$(OBJEXT)
 prctl_tid_address_LDADD = $(LDADD)
@@ -2088,10 +2314,34 @@
 so_peercred_OBJECTS = so_peercred.$(OBJEXT)
 so_peercred_LDADD = $(LDADD)
 so_peercred_DEPENDENCIES = libtests.a
+so_peercred_Xabbrev_SOURCES = so_peercred-Xabbrev.c
+so_peercred_Xabbrev_OBJECTS = so_peercred-Xabbrev.$(OBJEXT)
+so_peercred_Xabbrev_LDADD = $(LDADD)
+so_peercred_Xabbrev_DEPENDENCIES = libtests.a
+so_peercred_Xraw_SOURCES = so_peercred-Xraw.c
+so_peercred_Xraw_OBJECTS = so_peercred-Xraw.$(OBJEXT)
+so_peercred_Xraw_LDADD = $(LDADD)
+so_peercred_Xraw_DEPENDENCIES = libtests.a
+so_peercred_Xverbose_SOURCES = so_peercred-Xverbose.c
+so_peercred_Xverbose_OBJECTS = so_peercred-Xverbose.$(OBJEXT)
+so_peercred_Xverbose_LDADD = $(LDADD)
+so_peercred_Xverbose_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
+sock_filter_v_Xabbrev_SOURCES = sock_filter-v-Xabbrev.c
+sock_filter_v_Xabbrev_OBJECTS = sock_filter-v-Xabbrev.$(OBJEXT)
+sock_filter_v_Xabbrev_LDADD = $(LDADD)
+sock_filter_v_Xabbrev_DEPENDENCIES = libtests.a
+sock_filter_v_Xraw_SOURCES = sock_filter-v-Xraw.c
+sock_filter_v_Xraw_OBJECTS = sock_filter-v-Xraw.$(OBJEXT)
+sock_filter_v_Xraw_LDADD = $(LDADD)
+sock_filter_v_Xraw_DEPENDENCIES = libtests.a
+sock_filter_v_Xverbose_SOURCES = sock_filter-v-Xverbose.c
+sock_filter_v_Xverbose_OBJECTS = sock_filter-v-Xverbose.$(OBJEXT)
+sock_filter_v_Xverbose_LDADD = $(LDADD)
+sock_filter_v_Xverbose_DEPENDENCIES = libtests.a
 socketcall_SOURCES = socketcall.c
 socketcall_OBJECTS = socketcall.$(OBJEXT)
 socketcall_LDADD = $(LDADD)
@@ -2402,45 +2652,58 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c \
-	btrfs.c caps.c caps-abbrev.c check_sigblock.c check_sigign.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 delay.c \
-	delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	accept4.c access.c acct.c add_key.c adjtimex.c aio.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2456,59 +2719,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2526,44 +2794,57 @@
 	xettimeofday.c zeroargc.c
 DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.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 bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c \
-	check_sigblock.c check_sigign.c chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+	aio_pgetevents.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 bpf-obj_get_info_by_fd.c \
+	bpf-obj_get_info_by_fd-prog.c bpf-obj_get_info_by_fd-prog-v.c \
+	bpf-obj_get_info_by_fd-v.c bpf-success.c bpf-success-v.c \
+	bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c check_sigblock.c \
+	check_sigign.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 delay.c delete_module.c dev-yy.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 fsync-y.c \
-	ftruncate.c ftruncate64.c futex.c futimesat.c get_mempolicy.c \
-	getcpu.c getcwd.c getdents.c getdents64.c getegid.c \
-	getegid32.c geteuid.c geteuid32.c getgid.c getgid32.c \
-	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 group_req.c inet-cmsg.c \
+	fallocate.c fanotify_init.c fanotify_mark.c \
+	fanotify_mark-Xabbrev.c fanotify_mark-Xraw.c \
+	fanotify_mark-Xverbose.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 fsync-y.c ftruncate.c ftruncate64.c \
+	futex.c futimesat.c get_mempolicy.c getcpu.c getcwd.c \
+	getdents.c getdents64.c getegid.c getegid32.c geteuid.c \
+	geteuid32.c getgid.c getgid32.c 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 group_req.c inet-cmsg.c \
 	init_module.c inject-nf.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_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
-	ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+	ioctl_evdev-v.c ioctl_inotify.c ioctl_kvm_run.c ioctl_loop.c \
+	ioctl_loop-nv.c ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c \
+	ioctl_perf.c ioctl_perf-success.c ioctl_ptp.c ioctl_rtc.c \
 	ioctl_rtc-v.c 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 is_linux_mips_n64.c kcmp.c kcmp-y.c \
-	kern_features.c kexec_file_load.c kexec_load.c keyctl.c kill.c \
-	ksysent.c lchown.c lchown32.c link.c linkat.c \
-	list_sigaction_signum.c llseek.c localtime.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 \
+	iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msg-Xabbrev.c \
+	ipc_msg-Xraw.c ipc_msg-Xverbose.c ipc_msgbuf.c \
+	ipc_msgbuf-Xabbrev.c ipc_msgbuf-Xraw.c ipc_msgbuf-Xverbose.c \
+	ipc_sem.c ipc_sem-Xabbrev.c ipc_sem-Xraw.c ipc_sem-Xverbose.c \
+	ipc_shm.c ipc_shm-Xabbrev.c ipc_shm-Xraw.c ipc_shm-Xverbose.c \
+	is_linux_mips_n64.c kcmp.c kcmp-y.c kern_features.c \
+	kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
+	keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
+	lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
+	localtime.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 mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
+	mmap64.c mmap64-Xabbrev.c mmap64-Xraw.c mmap64-Xverbose.c \
 	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c modify_ldt.c \
-	mount.c move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
+	mount.c mount-Xabbrev.c mount-Xraw.c mount-Xverbose.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 \
@@ -2579,59 +2860,64 @@
 	nfnetlink_osf.c nfnetlink_queue.c nfnetlink_ulog.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_mdba_mdb_entry.c nlattr_mdba_router_port.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_tc_stats.c nlattr_tca_stab.c \
-	nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
-	nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
-	old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
-	oldselect-P.c oldselect-efault.c oldselect-efault-P.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 \
+	nlattr_ifinfomsg.c nlattr_ifla_af_spec.c nlattr_ifla_brport.c \
+	nlattr_ifla_linkinfo.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_mdba_mdb_entry.c \
+	nlattr_mdba_router_port.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_tc_stats.c \
+	nlattr_tca_stab.c nlattr_tcamsg.c nlattr_tcmsg.c \
+	nlattr_unix_diag_msg.c nsyscalls.c nsyscalls-d.c old_mmap.c \
+	old_mmap-P.c old_mmap-Xabbrev.c old_mmap-Xraw.c \
+	old_mmap-Xverbose.c old_mmap-v-none.c oldfstat.c oldlstat.c \
+	oldselect.c oldselect-P.c oldselect-efault.c \
+	oldselect-efault-P.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 personality-Xabbrev.c \
+	personality-Xraw.c personality-Xverbose.c pipe.c pipe2.c \
 	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
 	ppoll.c ppoll-P.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 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 riscv_flush_icache.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 \
-	s390_guarded_storage.c s390_guarded_storage-v.c \
-	s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
-	s390_sthyi-v.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 seccomp_get_action_avail.c select.c \
-	select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
-	set_ptracer_any.c set_sigblock.c set_sigign.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 \
+	prctl-seccomp-strict.c prctl-securebits.c prctl-spec-inject.c \
+	prctl-tid_address.c prctl-tsc.c pread64-pwrite64.c preadv.c \
+	preadv-pwritev.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 \
+	riscv_flush_icache.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 s390_guarded_storage.c \
+	s390_guarded_storage-v.c s390_pci_mmio_read_write.c \
+	s390_runtime_instr.c s390_sthyi.c s390_sthyi-v.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 \
+	seccomp_get_action_avail.c select.c select-P.c semop.c \
+	sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
+	set_sigblock.c set_sigign.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 \
+	so_peercred.c so_peercred-Xabbrev.c so_peercred-Xraw.c \
+	so_peercred-Xverbose.c sock_filter-v.c sock_filter-v-Xabbrev.c \
+	sock_filter-v-Xraw.c sock_filter-v-Xverbose.c socketcall.c \
 	sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
 	$(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
 	statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
@@ -2859,7 +3145,7 @@
   bases=`echo $$bases`
 RECHECK_LOGS = $(TEST_LOGS)
 AM_RECURSIVE_TARGETS = check recheck
-@USE_LIBUNWIND_TRUE@am__EXEEXT_2 = strace-k.test $(am__append_1)
+@ENABLE_STACKTRACE_TRUE@am__EXEEXT_2 = strace-k.test $(am__append_1)
 TEST_SUITE_LOG = test-suite.log
 TEST_EXTENSIONS = @EXEEXT@ .test
 am__test_logs1 = $(TESTS:=.log)
@@ -3001,6 +3287,10 @@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
+libdw_CFLAGS = @libdw_CFLAGS@
+libdw_CPPFLAGS = @libdw_CPPFLAGS@
+libdw_LDFLAGS = @libdw_LDFLAGS@
+libdw_LIBS = @libdw_LIBS@
 libexecdir = @libexecdir@
 libiberty_CPPFLAGS = @libiberty_CPPFLAGS@
 libiberty_LDFLAGS = @libiberty_LDFLAGS@
@@ -3095,9 +3385,14 @@
   add_key \
   adjtimex \
   aio \
+  aio_pgetevents \
   alarm \
   bpf \
   bpf-v \
+  bpf-obj_get_info_by_fd \
+  bpf-obj_get_info_by_fd-v \
+  bpf-obj_get_info_by_fd-prog \
+  bpf-obj_get_info_by_fd-prog-v \
   brk \
   btrfs \
   caps \
@@ -3130,6 +3425,9 @@
   fallocate \
   fanotify_init \
   fanotify_mark \
+  fanotify_mark-Xabbrev \
+  fanotify_mark-Xraw \
+  fanotify_mark-Xverbose \
   fchdir \
   fchmod \
   fchmodat \
@@ -3192,10 +3490,13 @@
   ioctl_block \
   ioctl_dm \
   ioctl_evdev \
+  ioctl_inotify \
   ioctl_kvm_run \
   ioctl_loop \
   ioctl_mtd \
   ioctl_rtc \
+  ioctl_perf \
+  ioctl_ptp \
   ioctl_scsi \
   ioctl_sg_io_v3 \
   ioctl_sg_io_v4 \
@@ -3208,15 +3509,30 @@
   ip_mreq \
   ipc \
   ipc_msg \
+  ipc_msg-Xabbrev \
+  ipc_msg-Xraw \
+  ipc_msg-Xverbose \
   ipc_msgbuf \
+  ipc_msgbuf-Xabbrev \
+  ipc_msgbuf-Xraw \
+  ipc_msgbuf-Xverbose \
   ipc_sem \
+  ipc_sem-Xabbrev \
+  ipc_sem-Xraw \
+  ipc_sem-Xverbose \
   ipc_shm \
+  ipc_shm-Xabbrev \
+  ipc_shm-Xraw \
+  ipc_shm-Xverbose \
   kcmp \
   kcmp-y \
   kern_features \
   kexec_file_load \
   kexec_load \
   keyctl \
+  keyctl-Xabbrev \
+  keyctl-Xraw \
+  keyctl-Xverbose \
   kill \
   lchown \
   lchown32 \
@@ -3241,11 +3557,20 @@
   mlock2 \
   mlockall \
   mmap \
+  mmap-Xabbrev \
+  mmap-Xraw \
+  mmap-Xverbose \
   mmap64 \
+  mmap64-Xabbrev \
+  mmap64-Xraw \
+  mmap64-Xverbose \
   mmsg \
   mmsg_name \
   modify_ldt \
   mount \
+  mount-Xabbrev \
+  mount-Xraw \
+  mount-Xverbose \
   move_pages \
   mq \
   mq_sendrecv \
@@ -3292,7 +3617,9 @@
   nlattr_ifaddrlblmsg \
   nlattr_ifaddrmsg \
   nlattr_ifinfomsg \
+  nlattr_ifla_af_spec \
   nlattr_ifla_brport \
+  nlattr_ifla_linkinfo \
   nlattr_ifla_port \
   nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
@@ -3317,6 +3644,9 @@
   old_mmap \
   old_mmap-P \
   old_mmap-v-none \
+  old_mmap-Xabbrev \
+  old_mmap-Xraw \
+  old_mmap-Xverbose \
   oldfstat \
   oldlstat \
   oldselect \
@@ -3328,6 +3658,9 @@
   pause \
   perf_event_open \
   personality \
+  personality-Xabbrev \
+  personality-Xraw \
+  personality-Xverbose \
   pipe \
   pipe2 \
   pkey_alloc \
@@ -3444,7 +3777,13 @@
   sigsuspend \
   so_linger \
   so_peercred \
+  so_peercred-Xabbrev \
+  so_peercred-Xraw \
+  so_peercred-Xverbose \
   sock_filter-v \
+  sock_filter-v-Xabbrev \
+  sock_filter-v-Xraw \
+  sock_filter-v-Xverbose \
   socketcall \
   sockopt-sol_netlink \
   splice \
@@ -3515,6 +3854,9 @@
 localtime_LDADD = $(clock_LIBS) $(LDADD)
 lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xraw_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+mmap64_Xverbose_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 mq_LDADD = $(mq_LIBS) $(LDADD)
 newfstatat_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
 pc_LDADD = $(dl_LIBS) $(LDADD)
@@ -3539,10 +3881,14 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
 GEN_TESTS = _newselect.gen.test _newselect-P.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 \
+	add_key.gen.test adjtimex.gen.test aio.gen.test \
+	aio_pgetevents.gen.test alarm.gen.test bpf.gen.test \
+	bpf-v.gen.test bpf-obj_get_info_by_fd.gen.test \
+	bpf-obj_get_info_by_fd-v.gen.test \
+	bpf-obj_get_info_by_fd-prog.gen.test \
+	bpf-obj_get_info_by_fd-prog-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 dev-yy.gen.test dup.gen.test \
 	dup2.gen.test dup3.gen.test epoll_create.gen.test \
@@ -3550,70 +3896,85 @@
 	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 \
-	fsync-y.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_dm.gen.test ioctl_dm-v.gen.test \
-	ioctl_evdev.gen.test ioctl_evdev-v.gen.test \
+	fanotify_mark.gen.test fanotify_mark-Xabbrev.gen.test \
+	fanotify_mark-Xraw.gen.test fanotify_mark-Xverbose.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 fsync-y.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_dm.gen.test \
+	ioctl_dm-v.gen.test ioctl_evdev.gen.test \
+	ioctl_evdev-v.gen.test ioctl_inotify.gen.test \
 	ioctl_kvm_run.gen.test ioctl_loop.gen.test \
 	ioctl_loop-nv.gen.test ioctl_loop-v.gen.test \
-	ioctl_mtd.gen.test ioctl_nsfs.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_sock_gifconf.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 \
-	kcmp-y.gen.test kern_features.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 \
+	ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_perf.gen.test \
+	ioctl_ptp.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_sock_gifconf.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_msg-Xabbrev.gen.test \
+	ipc_msg-Xraw.gen.test ipc_msg-Xverbose.gen.test \
+	ipc_msgbuf-Xabbrev.gen.test ipc_msgbuf-Xraw.gen.test \
+	ipc_msgbuf-Xverbose.gen.test ipc_sem.gen.test \
+	ipc_sem-Xabbrev.gen.test ipc_sem-Xraw.gen.test \
+	ipc_sem-Xverbose.gen.test ipc_shm.gen.test \
+	ipc_shm-Xabbrev.gen.test ipc_shm-Xraw.gen.test \
+	ipc_shm-Xverbose.gen.test kcmp.gen.test kcmp-y.gen.test \
+	kern_features.gen.test kexec_file_load.gen.test \
+	kexec_load.gen.test keyctl.gen.test keyctl-Xabbrev.gen.test \
+	keyctl-Xraw.gen.test keyctl-Xverbose.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 modify_ldt.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 net-yy-inet6.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 \
-	nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test \
-	nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test \
-	nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test \
-	nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test \
-	nfnetlink_osf.gen.test nfnetlink_queue.gen.test \
-	nfnetlink_ulog.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 \
+	mmap-Xabbrev.gen.test mmap-Xraw.gen.test \
+	mmap-Xverbose.gen.test mmap64.gen.test mmap64-Xabbrev.gen.test \
+	mmap64-Xraw.gen.test mmap64-Xverbose.gen.test mmsg.gen.test \
+	mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test \
+	modify_ldt.gen.test mount.gen.test mount-Xabbrev.gen.test \
+	mount-Xraw.gen.test mount-Xverbose.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 \
+	net-yy-inet6.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 nfnetlink_acct.gen.test \
+	nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test \
+	nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test \
+	nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test \
+	nfnetlink_nftables.gen.test nfnetlink_osf.gen.test \
+	nfnetlink_queue.gen.test nfnetlink_ulog.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_af_spec.gen.test \
+	nlattr_ifla_brport.gen.test nlattr_ifla_linkinfo.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_mdba_mdb_entry.gen.test \
@@ -3625,16 +3986,19 @@
 	nlattr_tc_stats.gen.test nlattr_tca_stab.gen.test \
 	nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
 	nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
-	old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test \
-	oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test \
+	old_mmap-P.gen.test old_mmap-v-none.gen.test \
+	old_mmap-Xabbrev.gen.test old_mmap-Xraw.gen.test \
+	old_mmap-Xverbose.gen.test oldfstat.gen.test oldlstat.gen.test \
+	oldselect.gen.test oldselect-P.gen.test \
 	oldselect-efault.gen.test oldselect-efault-P.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-P.gen.test ppoll-v.gen.test \
-	pread64-pwrite64.gen.test preadv.gen.test \
+	perf_event_open_unabbrev.gen.test personality-Xabbrev.gen.test \
+	personality-Xraw.gen.test personality-Xverbose.gen.test \
+	pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test \
+	pkey_mprotect.gen.test ppoll.gen.test ppoll-P.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 \
@@ -3675,22 +4039,29 @@
 	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 sockopt-sol_netlink.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 \
+	so_linger.gen.test so_peercred.gen.test \
+	so_peercred-Xabbrev.gen.test so_peercred-Xraw.gen.test \
+	so_peercred-Xverbose.gen.test sock_filter-v.gen.test \
+	sock_filter-v-Xabbrev.gen.test sock_filter-v-Xraw.gen.test \
+	sock_filter-v-Xverbose.gen.test socketcall.gen.test \
+	sockopt-sol_netlink.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_personality_32.gen.test \
+	trace_personality_64.gen.test trace_personality_x32.gen.test \
+	trace_personality_regex_32.gen.test \
+	trace_personality_regex_64.gen.test \
+	trace_personality_regex_x32.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 \
@@ -3700,13 +4071,20 @@
 	xattr-strings.gen.test xet_robust_list.gen.test \
 	xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test \
 	xettimeofday.gen.test
-@USE_LIBUNWIND_FALSE@LIBUNWIND_TESTS = 
-@USE_LIBUNWIND_TRUE@LIBUNWIND_TESTS = strace-k.test $(am__append_1)
+@ENABLE_STACKTRACE_FALSE@STACKTRACE_TESTS = 
+@ENABLE_STACKTRACE_TRUE@STACKTRACE_TESTS = strace-k.test \
+@ENABLE_STACKTRACE_TRUE@	$(am__append_1)
 DECODER_TESTS = \
+	bpf-success.test \
+	bpf-success-v.test \
 	brk.test \
 	btrfs-v.test \
 	btrfs-vw.test \
+	btrfs-vwX.test \
+	btrfs-vX.test \
 	btrfs-w.test \
+	btrfs-wX.test \
+	btrfs-X.test \
 	caps-abbrev.test \
 	caps.test \
 	eventfd.test \
@@ -3716,6 +4094,7 @@
 	futex.test \
 	getuid.test \
 	ioctl.test \
+	ioctl_perf-success.test \
 	ipc_msgbuf.test \
 	kern_features-fault.test \
 	llseek.test \
@@ -3742,6 +4121,7 @@
 	prctl-seccomp-filter-v.test \
 	prctl-seccomp-strict.test \
 	prctl-securebits.test \
+	prctl-spec-inject.test \
 	prctl-tid_address.test \
 	prctl-tsc.test \
 	qual_fault-exit_group.test \
@@ -3790,9 +4170,13 @@
 	printstrn-umoven-legacy.test \
 	qual_fault-syntax.test \
 	qual_fault.test \
+	qual_fault-syscall.test \
 	qual_inject-error-signal.test \
+	qual_inject-error-signal-syscall.test \
 	qual_inject-retval.test \
+	qual_inject-retval-syscall.test \
 	qual_inject-signal.test \
+	qual_inject-signal-syscall.test \
 	qual_inject-syntax.test \
 	qual_signal.test \
 	qual_syscall.test \
@@ -3816,8 +4200,8 @@
 	# end of MISC_TESTS
 
 XFAIL_TESTS_ = 
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
@@ -3838,6 +4222,7 @@
 	count-f.expected \
 	eventfd.expected \
 	fadvise.h \
+	fcntl-common.c \
 	filter-unavailable.expected \
 	fstatat.c \
 	fstatx.c \
@@ -3848,12 +4233,12 @@
 	init.sh \
 	init_delete_module.h \
 	ipc.sh \
-	ipc_msgbuf.expected \
 	ksysent.sed \
 	lstatx.c \
 	match.awk \
 	net.expected \
 	netlink_sock_diag-v.sh \
+	nlattr_ifla.h \
 	pipe.expected \
 	print_user_desc.c \
 	process_vm_readv_writev.c \
@@ -3861,6 +4246,8 @@
 	qual_fault-exit_group.expected \
 	qual_inject-error-signal.expected \
 	qual_inject-signal.expected \
+	qualify_personality.sh \
+	qualify_personality_empty.in \
 	quotactl.h \
 	regex.in \
 	rt_sigaction.awk \
@@ -3878,16 +4265,23 @@
 	strace-E.expected \
 	strace-T.expected \
 	strace-ff.expected \
+	strace-k-demangle.expected \
 	strace-k-demangle.test \
+	strace-k.expected \
 	strace-k.test \
 	strace-r.expected \
 	strace.supp \
-	struct_flock.c \
 	sun_path.expected \
 	syntax.sh \
 	trace_fstat.in \
 	trace_fstatfs.in \
 	trace_lstat.in \
+	trace_personality_32.in \
+	trace_personality_64.in \
+	trace_personality_x32.in \
+	trace_personality_regex_32.in \
+	trace_personality_regex_64.in \
+	trace_personality_regex_x32.in \
 	trace_question.in \
 	trace_stat.in \
 	trace_stat_like.in \
@@ -4001,6 +4395,10 @@
 	@rm -f aio$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(aio_OBJECTS) $(aio_LDADD) $(LIBS)
 
+aio_pgetevents$(EXEEXT): $(aio_pgetevents_OBJECTS) $(aio_pgetevents_DEPENDENCIES) $(EXTRA_aio_pgetevents_DEPENDENCIES) 
+	@rm -f aio_pgetevents$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(aio_pgetevents_OBJECTS) $(aio_pgetevents_LDADD) $(LIBS)
+
 alarm$(EXEEXT): $(alarm_OBJECTS) $(alarm_DEPENDENCIES) $(EXTRA_alarm_DEPENDENCIES) 
 	@rm -f alarm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(alarm_OBJECTS) $(alarm_LDADD) $(LIBS)
@@ -4033,6 +4431,30 @@
 	@rm -f bpf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bpf_OBJECTS) $(bpf_LDADD) $(LIBS)
 
+bpf-obj_get_info_by_fd$(EXEEXT): $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_OBJECTS) $(bpf_obj_get_info_by_fd_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_OBJECTS) $(bpf_obj_get_info_by_fd_prog_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-prog-v$(EXEEXT): $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_prog_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-prog-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_prog_v_OBJECTS) $(bpf_obj_get_info_by_fd_prog_v_LDADD) $(LIBS)
+
+bpf-obj_get_info_by_fd-v$(EXEEXT): $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_DEPENDENCIES) $(EXTRA_bpf_obj_get_info_by_fd_v_DEPENDENCIES) 
+	@rm -f bpf-obj_get_info_by_fd-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_obj_get_info_by_fd_v_OBJECTS) $(bpf_obj_get_info_by_fd_v_LDADD) $(LIBS)
+
+bpf-success$(EXEEXT): $(bpf_success_OBJECTS) $(bpf_success_DEPENDENCIES) $(EXTRA_bpf_success_DEPENDENCIES) 
+	@rm -f bpf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_OBJECTS) $(bpf_success_LDADD) $(LIBS)
+
+bpf-success-v$(EXEEXT): $(bpf_success_v_OBJECTS) $(bpf_success_v_DEPENDENCIES) $(EXTRA_bpf_success_v_DEPENDENCIES) 
+	@rm -f bpf-success-v$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bpf_success_v_OBJECTS) $(bpf_success_v_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)
@@ -4201,6 +4623,18 @@
 	@rm -f fanotify_mark$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fanotify_mark_OBJECTS) $(fanotify_mark_LDADD) $(LIBS)
 
+fanotify_mark-Xabbrev$(EXEEXT): $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_DEPENDENCIES) $(EXTRA_fanotify_mark_Xabbrev_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xabbrev_OBJECTS) $(fanotify_mark_Xabbrev_LDADD) $(LIBS)
+
+fanotify_mark-Xraw$(EXEEXT): $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_DEPENDENCIES) $(EXTRA_fanotify_mark_Xraw_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xraw_OBJECTS) $(fanotify_mark_Xraw_LDADD) $(LIBS)
+
+fanotify_mark-Xverbose$(EXEEXT): $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_DEPENDENCIES) $(EXTRA_fanotify_mark_Xverbose_DEPENDENCIES) 
+	@rm -f fanotify_mark-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fanotify_mark_Xverbose_OBJECTS) $(fanotify_mark_Xverbose_LDADD) $(LIBS)
+
 fchdir$(EXEEXT): $(fchdir_OBJECTS) $(fchdir_DEPENDENCIES) $(EXTRA_fchdir_DEPENDENCIES) 
 	@rm -f fchdir$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(fchdir_OBJECTS) $(fchdir_LDADD) $(LIBS)
@@ -4481,6 +4915,10 @@
 	@rm -f ioctl_evdev-v$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_evdev_v_OBJECTS) $(ioctl_evdev_v_LDADD) $(LIBS)
 
+ioctl_inotify$(EXEEXT): $(ioctl_inotify_OBJECTS) $(ioctl_inotify_DEPENDENCIES) $(EXTRA_ioctl_inotify_DEPENDENCIES) 
+	@rm -f ioctl_inotify$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_inotify_OBJECTS) $(ioctl_inotify_LDADD) $(LIBS)
+
 ioctl_kvm_run$(EXEEXT): $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_DEPENDENCIES) $(EXTRA_ioctl_kvm_run_DEPENDENCIES) 
 	@rm -f ioctl_kvm_run$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_LDADD) $(LIBS)
@@ -4505,6 +4943,18 @@
 	@rm -f ioctl_nsfs$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_nsfs_OBJECTS) $(ioctl_nsfs_LDADD) $(LIBS)
 
+ioctl_perf$(EXEEXT): $(ioctl_perf_OBJECTS) $(ioctl_perf_DEPENDENCIES) $(EXTRA_ioctl_perf_DEPENDENCIES) 
+	@rm -f ioctl_perf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_OBJECTS) $(ioctl_perf_LDADD) $(LIBS)
+
+ioctl_perf-success$(EXEEXT): $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_DEPENDENCIES) $(EXTRA_ioctl_perf_success_DEPENDENCIES) 
+	@rm -f ioctl_perf-success$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_perf_success_OBJECTS) $(ioctl_perf_success_LDADD) $(LIBS)
+
+ioctl_ptp$(EXEEXT): $(ioctl_ptp_OBJECTS) $(ioctl_ptp_DEPENDENCIES) $(EXTRA_ioctl_ptp_DEPENDENCIES) 
+	@rm -f ioctl_ptp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ioctl_ptp_OBJECTS) $(ioctl_ptp_LDADD) $(LIBS)
+
 ioctl_rtc$(EXEEXT): $(ioctl_rtc_OBJECTS) $(ioctl_rtc_DEPENDENCIES) $(EXTRA_ioctl_rtc_DEPENDENCIES) 
 	@rm -f ioctl_rtc$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ioctl_rtc_OBJECTS) $(ioctl_rtc_LDADD) $(LIBS)
@@ -4561,18 +5011,66 @@
 	@rm -f ipc_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msg_OBJECTS) $(ipc_msg_LDADD) $(LIBS)
 
+ipc_msg-Xabbrev$(EXEEXT): $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msg_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msg-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xabbrev_OBJECTS) $(ipc_msg_Xabbrev_LDADD) $(LIBS)
+
+ipc_msg-Xraw$(EXEEXT): $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_DEPENDENCIES) $(EXTRA_ipc_msg_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msg-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xraw_OBJECTS) $(ipc_msg_Xraw_LDADD) $(LIBS)
+
+ipc_msg-Xverbose$(EXEEXT): $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msg_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msg-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msg_Xverbose_OBJECTS) $(ipc_msg_Xverbose_LDADD) $(LIBS)
+
 ipc_msgbuf$(EXEEXT): $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_DEPENDENCIES) $(EXTRA_ipc_msgbuf_DEPENDENCIES) 
 	@rm -f ipc_msgbuf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_OBJECTS) $(ipc_msgbuf_LDADD) $(LIBS)
 
+ipc_msgbuf-Xabbrev$(EXEEXT): $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xabbrev_OBJECTS) $(ipc_msgbuf_Xabbrev_LDADD) $(LIBS)
+
+ipc_msgbuf-Xraw$(EXEEXT): $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xraw_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xraw_OBJECTS) $(ipc_msgbuf_Xraw_LDADD) $(LIBS)
+
+ipc_msgbuf-Xverbose$(EXEEXT): $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_DEPENDENCIES) $(EXTRA_ipc_msgbuf_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_msgbuf-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_msgbuf_Xverbose_OBJECTS) $(ipc_msgbuf_Xverbose_LDADD) $(LIBS)
+
 ipc_sem$(EXEEXT): $(ipc_sem_OBJECTS) $(ipc_sem_DEPENDENCIES) $(EXTRA_ipc_sem_DEPENDENCIES) 
 	@rm -f ipc_sem$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_sem_OBJECTS) $(ipc_sem_LDADD) $(LIBS)
 
+ipc_sem-Xabbrev$(EXEEXT): $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_sem_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_sem-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xabbrev_OBJECTS) $(ipc_sem_Xabbrev_LDADD) $(LIBS)
+
+ipc_sem-Xraw$(EXEEXT): $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_DEPENDENCIES) $(EXTRA_ipc_sem_Xraw_DEPENDENCIES) 
+	@rm -f ipc_sem-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xraw_OBJECTS) $(ipc_sem_Xraw_LDADD) $(LIBS)
+
+ipc_sem-Xverbose$(EXEEXT): $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_DEPENDENCIES) $(EXTRA_ipc_sem_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_sem-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_sem_Xverbose_OBJECTS) $(ipc_sem_Xverbose_LDADD) $(LIBS)
+
 ipc_shm$(EXEEXT): $(ipc_shm_OBJECTS) $(ipc_shm_DEPENDENCIES) $(EXTRA_ipc_shm_DEPENDENCIES) 
 	@rm -f ipc_shm$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ipc_shm_OBJECTS) $(ipc_shm_LDADD) $(LIBS)
 
+ipc_shm-Xabbrev$(EXEEXT): $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_DEPENDENCIES) $(EXTRA_ipc_shm_Xabbrev_DEPENDENCIES) 
+	@rm -f ipc_shm-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xabbrev_OBJECTS) $(ipc_shm_Xabbrev_LDADD) $(LIBS)
+
+ipc_shm-Xraw$(EXEEXT): $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_DEPENDENCIES) $(EXTRA_ipc_shm_Xraw_DEPENDENCIES) 
+	@rm -f ipc_shm-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xraw_OBJECTS) $(ipc_shm_Xraw_LDADD) $(LIBS)
+
+ipc_shm-Xverbose$(EXEEXT): $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_DEPENDENCIES) $(EXTRA_ipc_shm_Xverbose_DEPENDENCIES) 
+	@rm -f ipc_shm-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ipc_shm_Xverbose_OBJECTS) $(ipc_shm_Xverbose_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)
@@ -4601,6 +5099,18 @@
 	@rm -f keyctl$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(keyctl_OBJECTS) $(keyctl_LDADD) $(LIBS)
 
+keyctl-Xabbrev$(EXEEXT): $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_DEPENDENCIES) $(EXTRA_keyctl_Xabbrev_DEPENDENCIES) 
+	@rm -f keyctl-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xabbrev_OBJECTS) $(keyctl_Xabbrev_LDADD) $(LIBS)
+
+keyctl-Xraw$(EXEEXT): $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_DEPENDENCIES) $(EXTRA_keyctl_Xraw_DEPENDENCIES) 
+	@rm -f keyctl-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xraw_OBJECTS) $(keyctl_Xraw_LDADD) $(LIBS)
+
+keyctl-Xverbose$(EXEEXT): $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_DEPENDENCIES) $(EXTRA_keyctl_Xverbose_DEPENDENCIES) 
+	@rm -f keyctl-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(keyctl_Xverbose_OBJECTS) $(keyctl_Xverbose_LDADD) $(LIBS)
+
 kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) $(EXTRA_kill_DEPENDENCIES) 
 	@rm -f kill$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
@@ -4709,10 +5219,34 @@
 	@rm -f mmap$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap_OBJECTS) $(mmap_LDADD) $(LIBS)
 
+mmap-Xabbrev$(EXEEXT): $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_DEPENDENCIES) $(EXTRA_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xabbrev_OBJECTS) $(mmap_Xabbrev_LDADD) $(LIBS)
+
+mmap-Xraw$(EXEEXT): $(mmap_Xraw_OBJECTS) $(mmap_Xraw_DEPENDENCIES) $(EXTRA_mmap_Xraw_DEPENDENCIES) 
+	@rm -f mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xraw_OBJECTS) $(mmap_Xraw_LDADD) $(LIBS)
+
+mmap-Xverbose$(EXEEXT): $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_DEPENDENCIES) $(EXTRA_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap_Xverbose_OBJECTS) $(mmap_Xverbose_LDADD) $(LIBS)
+
 mmap64$(EXEEXT): $(mmap64_OBJECTS) $(mmap64_DEPENDENCIES) $(EXTRA_mmap64_DEPENDENCIES) 
 	@rm -f mmap64$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmap64_OBJECTS) $(mmap64_LDADD) $(LIBS)
 
+mmap64-Xabbrev$(EXEEXT): $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_DEPENDENCIES) $(EXTRA_mmap64_Xabbrev_DEPENDENCIES) 
+	@rm -f mmap64-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xabbrev_OBJECTS) $(mmap64_Xabbrev_LDADD) $(LIBS)
+
+mmap64-Xraw$(EXEEXT): $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_DEPENDENCIES) $(EXTRA_mmap64_Xraw_DEPENDENCIES) 
+	@rm -f mmap64-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xraw_OBJECTS) $(mmap64_Xraw_LDADD) $(LIBS)
+
+mmap64-Xverbose$(EXEEXT): $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_DEPENDENCIES) $(EXTRA_mmap64_Xverbose_DEPENDENCIES) 
+	@rm -f mmap64-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mmap64_Xverbose_OBJECTS) $(mmap64_Xverbose_LDADD) $(LIBS)
+
 mmsg$(EXEEXT): $(mmsg_OBJECTS) $(mmsg_DEPENDENCIES) $(EXTRA_mmsg_DEPENDENCIES) 
 	@rm -f mmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mmsg_OBJECTS) $(mmsg_LDADD) $(LIBS)
@@ -4737,6 +5271,18 @@
 	@rm -f mount$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
 
+mount-Xabbrev$(EXEEXT): $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_DEPENDENCIES) $(EXTRA_mount_Xabbrev_DEPENDENCIES) 
+	@rm -f mount-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xabbrev_OBJECTS) $(mount_Xabbrev_LDADD) $(LIBS)
+
+mount-Xraw$(EXEEXT): $(mount_Xraw_OBJECTS) $(mount_Xraw_DEPENDENCIES) $(EXTRA_mount_Xraw_DEPENDENCIES) 
+	@rm -f mount-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xraw_OBJECTS) $(mount_Xraw_LDADD) $(LIBS)
+
+mount-Xverbose$(EXEEXT): $(mount_Xverbose_OBJECTS) $(mount_Xverbose_DEPENDENCIES) $(EXTRA_mount_Xverbose_DEPENDENCIES) 
+	@rm -f mount-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mount_Xverbose_OBJECTS) $(mount_Xverbose_LDADD) $(LIBS)
+
 move_pages$(EXEEXT): $(move_pages_OBJECTS) $(move_pages_DEPENDENCIES) $(EXTRA_move_pages_DEPENDENCIES) 
 	@rm -f move_pages$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(move_pages_OBJECTS) $(move_pages_LDADD) $(LIBS)
@@ -4941,10 +5487,18 @@
 	@rm -f nlattr_ifinfomsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_ifinfomsg_OBJECTS) $(nlattr_ifinfomsg_LDADD) $(LIBS)
 
+nlattr_ifla_af_spec$(EXEEXT): $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_DEPENDENCIES) $(EXTRA_nlattr_ifla_af_spec_DEPENDENCIES) 
+	@rm -f nlattr_ifla_af_spec$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_af_spec_OBJECTS) $(nlattr_ifla_af_spec_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_linkinfo$(EXEEXT): $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_DEPENDENCIES) $(EXTRA_nlattr_ifla_linkinfo_DEPENDENCIES) 
+	@rm -f nlattr_ifla_linkinfo$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_ifla_linkinfo_OBJECTS) $(nlattr_ifla_linkinfo_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)
@@ -5045,6 +5599,18 @@
 	@rm -f old_mmap-P$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_P_OBJECTS) $(old_mmap_P_LDADD) $(LIBS)
 
+old_mmap-Xabbrev$(EXEEXT): $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_DEPENDENCIES) $(EXTRA_old_mmap_Xabbrev_DEPENDENCIES) 
+	@rm -f old_mmap-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xabbrev_OBJECTS) $(old_mmap_Xabbrev_LDADD) $(LIBS)
+
+old_mmap-Xraw$(EXEEXT): $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_DEPENDENCIES) $(EXTRA_old_mmap_Xraw_DEPENDENCIES) 
+	@rm -f old_mmap-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xraw_OBJECTS) $(old_mmap_Xraw_LDADD) $(LIBS)
+
+old_mmap-Xverbose$(EXEEXT): $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_DEPENDENCIES) $(EXTRA_old_mmap_Xverbose_DEPENDENCIES) 
+	@rm -f old_mmap-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(old_mmap_Xverbose_OBJECTS) $(old_mmap_Xverbose_LDADD) $(LIBS)
+
 old_mmap-v-none$(EXEEXT): $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_DEPENDENCIES) $(EXTRA_old_mmap_v_none_DEPENDENCIES) 
 	@rm -f old_mmap-v-none$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_LDADD) $(LIBS)
@@ -5113,6 +5679,18 @@
 	@rm -f personality$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(personality_OBJECTS) $(personality_LDADD) $(LIBS)
 
+personality-Xabbrev$(EXEEXT): $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_DEPENDENCIES) $(EXTRA_personality_Xabbrev_DEPENDENCIES) 
+	@rm -f personality-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xabbrev_OBJECTS) $(personality_Xabbrev_LDADD) $(LIBS)
+
+personality-Xraw$(EXEEXT): $(personality_Xraw_OBJECTS) $(personality_Xraw_DEPENDENCIES) $(EXTRA_personality_Xraw_DEPENDENCIES) 
+	@rm -f personality-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xraw_OBJECTS) $(personality_Xraw_LDADD) $(LIBS)
+
+personality-Xverbose$(EXEEXT): $(personality_Xverbose_OBJECTS) $(personality_Xverbose_DEPENDENCIES) $(EXTRA_personality_Xverbose_DEPENDENCIES) 
+	@rm -f personality-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(personality_Xverbose_OBJECTS) $(personality_Xverbose_LDADD) $(LIBS)
+
 pipe$(EXEEXT): $(pipe_OBJECTS) $(pipe_DEPENDENCIES) $(EXTRA_pipe_DEPENDENCIES) 
 	@rm -f pipe$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(pipe_OBJECTS) $(pipe_LDADD) $(LIBS)
@@ -5185,6 +5763,10 @@
 	@rm -f prctl-securebits$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_securebits_OBJECTS) $(prctl_securebits_LDADD) $(LIBS)
 
+prctl-spec-inject$(EXEEXT): $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_DEPENDENCIES) $(EXTRA_prctl_spec_inject_DEPENDENCIES) 
+	@rm -f prctl-spec-inject$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(prctl_spec_inject_OBJECTS) $(prctl_spec_inject_LDADD) $(LIBS)
+
 prctl-tid_address$(EXEEXT): $(prctl_tid_address_OBJECTS) $(prctl_tid_address_DEPENDENCIES) $(EXTRA_prctl_tid_address_DEPENDENCIES) 
 	@rm -f prctl-tid_address$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(prctl_tid_address_OBJECTS) $(prctl_tid_address_LDADD) $(LIBS)
@@ -5669,10 +6251,34 @@
 	@rm -f so_peercred$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(so_peercred_OBJECTS) $(so_peercred_LDADD) $(LIBS)
 
+so_peercred-Xabbrev$(EXEEXT): $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_DEPENDENCIES) $(EXTRA_so_peercred_Xabbrev_DEPENDENCIES) 
+	@rm -f so_peercred-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xabbrev_OBJECTS) $(so_peercred_Xabbrev_LDADD) $(LIBS)
+
+so_peercred-Xraw$(EXEEXT): $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_DEPENDENCIES) $(EXTRA_so_peercred_Xraw_DEPENDENCIES) 
+	@rm -f so_peercred-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xraw_OBJECTS) $(so_peercred_Xraw_LDADD) $(LIBS)
+
+so_peercred-Xverbose$(EXEEXT): $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_DEPENDENCIES) $(EXTRA_so_peercred_Xverbose_DEPENDENCIES) 
+	@rm -f so_peercred-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(so_peercred_Xverbose_OBJECTS) $(so_peercred_Xverbose_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)
 
+sock_filter-v-Xabbrev$(EXEEXT): $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_DEPENDENCIES) $(EXTRA_sock_filter_v_Xabbrev_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xabbrev$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xabbrev_OBJECTS) $(sock_filter_v_Xabbrev_LDADD) $(LIBS)
+
+sock_filter-v-Xraw$(EXEEXT): $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_DEPENDENCIES) $(EXTRA_sock_filter_v_Xraw_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xraw$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xraw_OBJECTS) $(sock_filter_v_Xraw_LDADD) $(LIBS)
+
+sock_filter-v-Xverbose$(EXEEXT): $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_DEPENDENCIES) $(EXTRA_sock_filter_v_Xverbose_DEPENDENCIES) 
+	@rm -f sock_filter-v-Xverbose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(sock_filter_v_Xverbose_OBJECTS) $(sock_filter_v_Xverbose_LDADD) $(LIBS)
+
 socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_socketcall_DEPENDENCIES) 
 	@rm -f socketcall$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
@@ -5960,6 +6566,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add_key.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adjtimex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aio_pgetevents.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alarm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/answer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach-f-p-cmd.Po@am__quote@
@@ -5967,6 +6574,12 @@
 @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-obj_get_info_by_fd-prog-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-obj_get_info_by_fd-prog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-obj_get_info_by_fd-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-obj_get_info_by_fd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-success-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-success.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@
@@ -6009,6 +6622,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fadvise64_64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fallocate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fanotify_mark.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchdir.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchmod.Po@am__quote@
@@ -6080,12 +6696,16 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_dm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_evdev-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_evdev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_inotify.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_kvm_run.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop-nv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_mtd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_nsfs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_perf-success.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_perf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_ptp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_rtc-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_rtc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_scsi.Po@am__quote@
@@ -6099,9 +6719,21 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioprio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip_mreq.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_msgbuf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm-Xverbose.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-y.Po@am__quote@
@@ -6109,6 +6741,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kern_features.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@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyctl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ksysent.Po@am__quote@
@@ -6162,13 +6797,22 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlock.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlock2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlockall.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64-mmap64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg-silent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg_name-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg_name.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modify_ldt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/move_pages.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mq.Po@am__quote@
@@ -6221,7 +6865,9 @@
 @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_af_spec.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_linkinfo.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@
@@ -6246,6 +6892,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls-d.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-P.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-v-none.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldfstat.Po@am__quote@
@@ -6263,6 +6912,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perf_event_open.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perf_event_open_nonverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perf_event_open_unabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality-Xverbose.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/personality.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe2.Po@am__quote@
@@ -6282,6 +6934,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-seccomp-filter-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-seccomp-strict.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-securebits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-spec-inject.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-tid_address.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-tsc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pread64_pwrite64-pread64-pwrite64.Po@am__quote@
@@ -6402,7 +7055,13 @@
 @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-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred-Xverbose.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-Xabbrev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v-Xraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v-Xverbose.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)/sockopt-sol_netlink.Po@am__quote@
@@ -6929,6 +7588,48 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64-mmap64.obj `if test -f 'mmap64.c'; then $(CYGPATH_W) 'mmap64.c'; else $(CYGPATH_W) '$(srcdir)/mmap64.c'; fi`
 
+mmap64_Xabbrev-mmap64-Xabbrev.o: mmap64-Xabbrev.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.o -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.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) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.o `test -f 'mmap64-Xabbrev.c' || echo '$(srcdir)/'`mmap64-Xabbrev.c
+
+mmap64_Xabbrev-mmap64-Xabbrev.obj: mmap64-Xabbrev.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xabbrev-mmap64-Xabbrev.obj -MD -MP -MF $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Tpo $(DEPDIR)/mmap64_Xabbrev-mmap64-Xabbrev.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xabbrev.c' object='mmap64_Xabbrev-mmap64-Xabbrev.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) $(mmap64_Xabbrev_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xabbrev-mmap64-Xabbrev.obj `if test -f 'mmap64-Xabbrev.c'; then $(CYGPATH_W) 'mmap64-Xabbrev.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xabbrev.c'; fi`
+
+mmap64_Xraw-mmap64-Xraw.o: mmap64-Xraw.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.o -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.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) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.o `test -f 'mmap64-Xraw.c' || echo '$(srcdir)/'`mmap64-Xraw.c
+
+mmap64_Xraw-mmap64-Xraw.obj: mmap64-Xraw.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xraw-mmap64-Xraw.obj -MD -MP -MF $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Tpo $(DEPDIR)/mmap64_Xraw-mmap64-Xraw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xraw.c' object='mmap64_Xraw-mmap64-Xraw.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) $(mmap64_Xraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xraw-mmap64-Xraw.obj `if test -f 'mmap64-Xraw.c'; then $(CYGPATH_W) 'mmap64-Xraw.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xraw.c'; fi`
+
+mmap64_Xverbose-mmap64-Xverbose.o: mmap64-Xverbose.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.o -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.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) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.o `test -f 'mmap64-Xverbose.c' || echo '$(srcdir)/'`mmap64-Xverbose.c
+
+mmap64_Xverbose-mmap64-Xverbose.obj: mmap64-Xverbose.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap64_Xverbose-mmap64-Xverbose.obj -MD -MP -MF $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Tpo $(DEPDIR)/mmap64_Xverbose-mmap64-Xverbose.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mmap64-Xverbose.c' object='mmap64_Xverbose-mmap64-Xverbose.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) $(mmap64_Xverbose_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap64_Xverbose-mmap64-Xverbose.obj `if test -f 'mmap64-Xverbose.c'; then $(CYGPATH_W) 'mmap64-Xverbose.c'; else $(CYGPATH_W) '$(srcdir)/mmap64-Xverbose.c'; fi`
+
 newfstatat-newfstatat.o: newfstatat.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newfstatat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT newfstatat-newfstatat.o -MD -MP -MF $(DEPDIR)/newfstatat-newfstatat.Tpo -c -o newfstatat-newfstatat.o `test -f 'newfstatat.c' || echo '$(srcdir)/'`newfstatat.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/newfstatat-newfstatat.Tpo $(DEPDIR)/newfstatat-newfstatat.Po
@@ -7480,6 +8181,9 @@
 $(srcdir)/aio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/aio_pgetevents.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/alarm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7489,6 +8193,18 @@
 $(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-obj_get_info_by_fd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog-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) $^ $@
 
@@ -7576,6 +8292,15 @@
 $(srcdir)/fanotify_mark.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/fanotify_mark-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/fchdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7768,6 +8493,9 @@
 $(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_inotify.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7786,6 +8514,12 @@
 $(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_perf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_ptp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7828,12 +8562,48 @@
 $(srcdir)/ipc_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_msg-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_sem.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_sem-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_shm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_shm-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7852,6 +8622,15 @@
 $(srcdir)/keyctl.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/keyctl-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kill.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7915,9 +8694,27 @@
 $(srcdir)/mlockall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmap64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap64-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7936,6 +8733,15 @@
 $(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mount-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/move_pages.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8062,9 +8868,15 @@
 $(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_ifla_af_spec.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_linkinfo.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) $^ $@
 
@@ -8137,6 +8949,15 @@
 $(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/old_mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8179,6 +9000,15 @@
 $(srcdir)/perf_event_open_unabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/personality-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/pipe2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -8509,9 +9339,27 @@
 $(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_peercred-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xverbose.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)/sock_filter-v-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xverbose.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) $^ $@
 
@@ -8593,6 +9441,24 @@
 $(srcdir)/trace_lstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/trace_personality_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/trace_question.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests/add_key.c b/tests/add_key.c
index 999da03..9ad5e28 100644
--- a/tests/add_key.c
+++ b/tests/add_key.c
@@ -2,7 +2,7 @@
  * Check decoding of add_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -102,7 +102,7 @@
 		{ bogus_desc, NULL },
 		{ ARG_STR("\25\26\27\30\31") },
 		{ ARG_STR("desc") },
-		{ "overly long description", _STR("overly long ") "..." },
+		{ "overly long description", STRINGIFY("overly long ") "..." },
 	};
 
 	struct {
@@ -113,10 +113,10 @@
 		{ ARG_STR(NULL), 0 },
 		{ bogus_payload + sizeof(unterminated3), NULL,
 			(size_t) 0xdeadbeefbadc0dedULL },
-		{ bogus_payload, _STR(""), 0 },
-		{ bogus_payload, _STR("\16\17\20\21\22"), 5 },
+		{ bogus_payload, STRINGIFY(""), 0 },
+		{ bogus_payload, STRINGIFY("\16\17\20\21\22"), 5 },
 		{ bogus_payload, NULL, 10 },
-		{ "overly long payload", _STR("overly long ") "...", 15 },
+		{ "overly long payload", STRINGIFY("overly long ") "...", 15 },
 	};
 
 	struct {
diff --git a/tests/aio.c b/tests/aio.c
index 335bb31..ea18700 100644
--- a/tests/aio.c
+++ b/tests/aio.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -335,7 +335,7 @@
 	       "}, {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",
+	       "}, {NULL}, {%#lx}, ... /* %p */]) = %s\n",
 	       *ctx, 1057L,
 	       cbv2[0].aio_data, cbv2[0].aio_key,
 	       cbv2[0].aio_lio_opcode, cbv2[0].aio_fildes,
diff --git a/tests/aio_pgetevents.c b/tests/aio_pgetevents.c
new file mode 100644
index 0000000..ba5ac71
--- /dev/null
+++ b/tests/aio_pgetevents.c
@@ -0,0 +1,190 @@
+/*
+ * Check decoding of io_pgetevents syscall.
+ *
+ * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <unistd.h>
+#include <asm/unistd.h>
+#include "scno.h"
+
+#if defined __NR_io_setup && defined __NR_io_pgetevents
+
+# include <fcntl.h>
+# include <inttypes.h>
+# include <stdio.h>
+# include <time.h>
+
+# include "nsig.h"
+
+# include <linux/aio_abi.h>
+
+# if !HAVE_STRUCT___AIO_SIGSET
+struct __aio_sigset {
+	sigset_t *sigmask;
+	size_t sigsetsize;
+};
+# endif
+
+static const char *errstr;
+
+static long
+sys_io_pgetevents(const kernel_ulong_t ctx_id,
+		  const kernel_long_t min_nr,
+		  const kernel_long_t nr,
+		  const kernel_ulong_t events,
+		  const kernel_ulong_t timeout,
+		  const kernel_ulong_t usig)
+{
+	long rc = syscall(__NR_io_pgetevents, ctx_id, min_nr, nr,
+			  events, timeout, usig);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	static const kernel_ulong_t bogus_ctx =
+		(kernel_ulong_t) 0xface1e55deadbeefLL;
+	static const kernel_long_t bogus_min_nr =
+		(kernel_long_t) 0xca7faceddeadf00dLL;
+	static const kernel_long_t bogus_nr =
+		(kernel_long_t) 0xba5e1e505ca571e0LL;
+	static const size_t bogus_sigsetsize =
+		(size_t) 0xdeadbeefbadcaffeULL;
+
+	const unsigned int sizeof_data0 = 4096;
+	const unsigned int sizeof_data1 = 8192;
+	void *data0 = tail_alloc(sizeof_data0);
+	void *data1 = tail_alloc(sizeof_data1);
+
+	const struct iocb proto_cb[] = {
+		{
+			.aio_data = (unsigned long) 0xfeedface11111111ULL,
+			.aio_reqprio = 11,
+			.aio_buf = (unsigned long) data0,
+			.aio_offset = (unsigned long) 0xdeface1facefeedULL,
+			.aio_nbytes = sizeof_data0
+		},
+		{
+			.aio_data = (unsigned long) 0xfeedface22222222ULL,
+			.aio_reqprio = 22,
+			.aio_buf = (unsigned long) data1,
+			.aio_offset = (unsigned long) 0xdeface2cafef00dULL,
+			.aio_nbytes = sizeof_data1
+		}
+	};
+	const struct iocb *cb = tail_memdup(proto_cb, sizeof(proto_cb));
+
+	const long proto_cbs[] = {
+		(long) &cb[0], (long) &cb[1]
+	};
+	const long *cbs = tail_memdup(proto_cbs, sizeof(proto_cbs));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned long, ctx);
+	*ctx = 0;
+
+	const unsigned int nr = ARRAY_SIZE(proto_cb);
+
+	const struct io_event *ev = tail_alloc(nr * sizeof(struct io_event));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct timespec, ts);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct __aio_sigset, ss);
+	TAIL_ALLOC_OBJECT_CONST_PTR(sigset_t, sigs);
+
+	(void) close(0);
+	if (open("/dev/zero", O_RDONLY))
+		perror_msg_and_skip("open: %s", "/dev/zero");
+
+	if (syscall(__NR_io_setup, nr, ctx))
+		perror_msg_and_skip("io_setup");
+
+	if (syscall(__NR_io_submit, *ctx, nr, cbs) != (long) nr)
+		perror_msg_and_skip("io_submit");
+
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  (uintptr_t) (ev + 1), 0, 0);
+	printf("io_pgetevents(%#jx, %ld, %ld, %p, NULL, NULL) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, ev + 1, errstr);
+
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  0, (uintptr_t) (ts + 1), 0);
+	printf("io_pgetevents(%#jx, %ld, %ld, NULL, %p, NULL) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, ts + 1, errstr);
+
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  0, 0, (uintptr_t) (ss + 1));
+	printf("io_pgetevents(%#jx, %ld, %ld, NULL, NULL, %p) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, ss + 1, errstr);
+
+	ss->sigmask = sigs + 1;
+	ss->sigsetsize =  bogus_sigsetsize;
+	sys_io_pgetevents(bogus_ctx, bogus_min_nr, bogus_nr,
+			  0, 0, (uintptr_t) ss);
+	printf("io_pgetevents(%#jx, %ld, %ld, NULL, NULL"
+	       ", {sigmask=%p, sigsetsize=%zu}) = %s\n",
+	       (uintmax_t) bogus_ctx, (long) bogus_min_nr,
+	       (long) bogus_nr, sigs + 1, bogus_sigsetsize, errstr);
+
+	ts->tv_sec = 0xdeadbeefU;
+	ts->tv_nsec = 0xfacefeedU;
+	ss->sigmask = sigs;
+	ss->sigsetsize =  NSIG_BYTES;
+	sys_io_pgetevents(bogus_ctx, 0, 0, 0, (uintptr_t) ts, (uintptr_t) ss);
+	printf("io_pgetevents(%#jx, 0, 0, NULL"
+	       ", {tv_sec=%lld, tv_nsec=%llu}"
+	       ", {sigmask=~[], sigsetsize=%u}) = %s\n",
+	       (uintmax_t) bogus_ctx, (long long) ts->tv_sec,
+	       zero_extend_signed_to_ull(ts->tv_nsec), NSIG_BYTES,
+	       errstr);
+
+	sigemptyset(sigs);
+	sigaddset(sigs, SIGSYS);
+
+	ts->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+	ts->tv_nsec = (long) 0xbadc0dedfacefeedLL;
+	sys_io_pgetevents(bogus_ctx, 0, 0, 0, (uintptr_t) ts, (uintptr_t) ss);
+	printf("io_pgetevents(%#jx, 0, 0, NULL"
+	       ", {tv_sec=%lld, tv_nsec=%llu}"
+	       ", {sigmask=[SYS], sigsetsize=%u}) = %s\n",
+	       (uintmax_t) bogus_ctx, (long long) ts->tv_sec,
+	       zero_extend_signed_to_ull(ts->tv_nsec), NSIG_BYTES,
+	       errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_io_setup && __NR_io_pgetevents")
+
+#endif
diff --git a/tests/aio_pgetevents.gen.test b/tests/aio_pgetevents.gen.test
new file mode 100755
index 0000000..7ea3874
--- /dev/null
+++ b/tests/aio_pgetevents.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (aio_pgetevents -e trace=io_pgetevents); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=io_pgetevents
diff --git a/tests/bpf-obj_get_info_by_fd-prog-v.c b/tests/bpf-obj_get_info_by_fd-prog-v.c
new file mode 100644
index 0000000..d7e10b4
--- /dev/null
+++ b/tests/bpf-obj_get_info_by_fd-prog-v.c
@@ -0,0 +1,3 @@
+#define CHECK_OBJ_PROG 1
+#define VERBOSE 1
+#include "bpf-obj_get_info_by_fd.c"
diff --git a/tests/bpf-obj_get_info_by_fd-prog-v.gen.test b/tests/bpf-obj_get_info_by_fd-prog-v.gen.test
new file mode 100755
index 0000000..fcaa1d8
--- /dev/null
+++ b/tests/bpf-obj_get_info_by_fd-prog-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd-prog-v -a20 -y -v -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -v -e trace=bpf
diff --git a/tests/bpf-obj_get_info_by_fd-prog.c b/tests/bpf-obj_get_info_by_fd-prog.c
new file mode 100644
index 0000000..19a5f75
--- /dev/null
+++ b/tests/bpf-obj_get_info_by_fd-prog.c
@@ -0,0 +1,2 @@
+#define CHECK_OBJ_PROG 1
+#include "bpf-obj_get_info_by_fd.c"
diff --git a/tests/bpf-obj_get_info_by_fd-prog.gen.test b/tests/bpf-obj_get_info_by_fd-prog.gen.test
new file mode 100755
index 0000000..8cbd7c0
--- /dev/null
+++ b/tests/bpf-obj_get_info_by_fd-prog.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd-prog -a20 -y -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -e trace=bpf
diff --git a/tests/bpf-obj_get_info_by_fd-v.c b/tests/bpf-obj_get_info_by_fd-v.c
new file mode 100644
index 0000000..2debc5f
--- /dev/null
+++ b/tests/bpf-obj_get_info_by_fd-v.c
@@ -0,0 +1,2 @@
+#define VERBOSE 1
+#include "bpf-obj_get_info_by_fd.c"
diff --git a/tests/bpf-obj_get_info_by_fd-v.gen.test b/tests/bpf-obj_get_info_by_fd-v.gen.test
new file mode 100755
index 0000000..255d91e
--- /dev/null
+++ b/tests/bpf-obj_get_info_by_fd-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd-v -a20 -y -v -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -v -e trace=bpf
diff --git a/tests/bpf-obj_get_info_by_fd.c b/tests/bpf-obj_get_info_by_fd.c
new file mode 100644
index 0000000..67b5122
--- /dev/null
+++ b/tests/bpf-obj_get_info_by_fd.c
@@ -0,0 +1,499 @@
+/*
+ * Check bpf(BPF_OBJ_GET_INFO_BY_FD) decoding.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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"
+
+#ifndef CHECK_OBJ_PROG
+# define CHECK_OBJ_PROG 0
+#endif
+
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/sysmacros.h>
+#include <asm/unistd.h>
+
+#include "print_fields.h"
+#include "scno.h"
+
+#ifdef HAVE_LINUX_BPF_H
+# include <linux/bpf.h>
+#endif
+
+#include "bpf_attr.h"
+
+#include "xlat.h"
+#include "xlat/bpf_map_flags.h"
+#include "xlat/bpf_map_types.h"
+#include "xlat/bpf_prog_types.h"
+
+#define XLAT_MACROS_ONLY
+#include "xlat/bpf_commands.h"
+#include "xlat/bpf_op_alu.h"
+#include "xlat/bpf_op_jmp.h"
+#include "xlat/bpf_size.h"
+#include "xlat/bpf_src.h"
+#include "xlat/ebpf_class.h"
+#include "xlat/ebpf_mode.h"
+#include "xlat/ebpf_op_alu.h"
+#include "xlat/ebpf_regs.h"
+#include "xlat/ebpf_size.h"
+
+#ifndef HAVE_STRUCT_BPF_INSN
+struct bpf_insn {
+	uint8_t	code;
+	uint8_t	dst_reg:4;
+	uint8_t	src_reg:4;
+	int16_t	off;
+	int32_t	imm;
+};
+#endif
+
+static const char *errstr;
+
+static long
+sys_bpf(kernel_ulong_t cmd, void *attr, kernel_ulong_t size)
+{
+	long rc = syscall(__NR_bpf, cmd, attr, size);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static void
+print_map_create(void *attr_void, size_t size, long rc)
+{
+	/* struct BPF_MAP_CREATE_struct *attr = attr_void; */
+
+	printf("bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_ARRAY, key_size=4"
+	       ", value_size=8, max_entries=1");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, map_flags))
+		printf(", map_flags=0");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, inner_map_fd))
+		printf(", inner_map_fd=0</dev/null>");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, map_name))
+		printf(", map_name=\"test_map\"");
+	if (size > offsetof(struct BPF_MAP_CREATE_struct, map_ifindex))
+		printf(", map_ifindex=0");
+	printf("}, %zu) = ", size);
+	if (rc >= 0)
+		printf("%ld<anon_inode:bpf-map>\n", rc);
+	else
+		puts(errstr);
+}
+
+#if CHECK_OBJ_PROG
+static struct bpf_insn socket_prog[] = {
+	{ /* 0 */
+		.code    = BPF_ALU64 | BPF_K | BPF_MOV,
+		.dst_reg = BPF_REG_1,
+		.imm     = 0,
+	},
+	{ /* 1 */
+		.code    = BPF_STX | BPF_W | BPF_MEM,
+		.dst_reg = BPF_REG_10,
+		.src_reg = BPF_REG_1,
+		.off     = -4,
+	},
+	{ /* 2 */
+		.code = BPF_ALU64 | BPF_X | BPF_MOV,
+		.dst_reg = BPF_REG_2,
+		.src_reg = BPF_REG_10,
+	},
+	{ /* 3 */
+		.code    = BPF_ALU64 | BPF_K | BPF_ADD,
+		.dst_reg = BPF_REG_2,
+		.imm     = -4,
+	},
+	{ /* 4 */
+		.code    = BPF_LD | BPF_DW | BPF_IMM,
+		.dst_reg = BPF_REG_1,
+		.src_reg = 1 /* BPF_PSEUDO_MAP_FD */,
+		.imm     = 0, /* to be set to map fd */
+	},
+	{ /* 5 */
+		.imm     = 0,
+	},
+	{ /* 6 */
+		.code    = BPF_JMP | BPF_K | BPF_CALL,
+		.imm     = 0x1, /* BPF_FUNC_map_lookup_elem */
+	},
+	{ /* 7 */
+		.code    = BPF_ALU64 | BPF_K | BPF_MOV,
+		.dst_reg = BPF_REG_0,
+		.imm     = 0,
+	},
+	{ /* 8 */
+		.code    = BPF_JMP | BPF_K | BPF_EXIT,
+	},
+};
+
+# if VERBOSE
+static const char *socket_prog_fmt =
+	"[{code=BPF_ALU64|BPF_K|BPF_MOV"
+		", dst_reg=BPF_REG_1, src_reg=BPF_REG_0, off=0, imm=0}"
+	", {code=BPF_STX|BPF_W|BPF_MEM"
+		", dst_reg=BPF_REG_10, src_reg=BPF_REG_1, off=-4, imm=0}"
+	", {code=BPF_ALU64|BPF_X|BPF_MOV"
+		", dst_reg=BPF_REG_2, src_reg=BPF_REG_10, off=0, imm=0}"
+	", {code=BPF_ALU64|BPF_K|BPF_ADD"
+		", dst_reg=BPF_REG_2, src_reg=BPF_REG_0, off=0, imm=0xfffffffc}"
+	", {code=BPF_LD|BPF_DW|BPF_IMM"
+		", dst_reg=BPF_REG_1, src_reg=BPF_REG_1, off=0, imm=%#x}"
+	", {code=BPF_LD|BPF_W|BPF_IMM"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0}"
+	", {code=BPF_JMP|BPF_K|BPF_CALL"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0x1}"
+	", {code=BPF_ALU64|BPF_K|BPF_MOV"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0}"
+	", {code=BPF_JMP|BPF_K|BPF_EXIT"
+		", dst_reg=BPF_REG_0, src_reg=BPF_REG_0, off=0, imm=0}"
+	"]";
+# endif /* VERBOSE */
+
+static const char *license = "BSD";
+static char log_buf[4096];
+
+static void
+print_prog_load(void *attr_void, size_t size, long rc)
+{
+	printf("bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER"
+	       ", insn_cnt=%zu, insns=", ARRAY_SIZE(socket_prog));
+# if VERBOSE
+	printf(socket_prog_fmt, socket_prog[4].imm);
+# else
+	printf("%p", socket_prog);
+# endif
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, license))
+		printf(", license=\"BSD\"");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, log_buf))
+		printf(", log_level=42, log_size=%zu, log_buf=\"\"",
+		       sizeof(log_buf));
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, kern_version))
+		printf(", kern_version=KERNEL_VERSION(57005, 192, 222)");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, prog_flags))
+		printf(", prog_flags=0");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, prog_name))
+		printf(", prog_name=\"test_prog\"");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, prog_ifindex))
+		printf(", prog_ifindex=0");
+	if (size > offsetof(struct BPF_PROG_LOAD_struct, expected_attach_type))
+		printf(", expected_attach_type=BPF_CGROUP_INET_INGRESS");
+	printf("}, %zu) = ", size);
+	if (rc >= 0)
+		printf("%ld<anon_inode:bpf-prog>\n", rc);
+	else
+		puts(errstr);
+}
+#endif /* CHECK_OBJ_PROG */
+
+static long
+try_bpf(kernel_ulong_t cmd, void (*printer)(void *attr, size_t size, long rc),
+	void *attr, size_t **sizes)
+{
+	long rc;
+
+	for (rc = -1; **sizes; (*sizes)++) {
+		rc = sys_bpf(cmd, attr, **sizes);
+		printer(attr, **sizes, rc);
+
+		if (rc >= 0)
+			break;
+	}
+
+	return rc;
+}
+
+int
+main(void)
+{
+	struct BPF_MAP_CREATE_struct bpf_map_create_attr = {
+		.map_type    = BPF_MAP_TYPE_ARRAY,
+		.key_size    = 4,
+		.value_size  = 8,
+		.max_entries = 1,
+		.map_name    = "test_map",
+	};
+	size_t bpf_map_create_attr_sizes[] = {
+		sizeof(bpf_map_create_attr),
+		offsetofend(struct BPF_MAP_CREATE_struct, max_entries),
+		0,
+	};
+
+#if CHECK_OBJ_PROG
+	struct BPF_PROG_LOAD_struct bpf_prog_load_attr = {
+		.prog_type    = BPF_PROG_TYPE_SOCKET_FILTER,
+		.insn_cnt     = ARRAY_SIZE(socket_prog),
+		.insns        = (uintptr_t) socket_prog,
+		.license      = (uintptr_t) license,
+		.log_level    = 42,
+		.log_size     = sizeof(log_buf),
+		.log_buf      = (uintptr_t) log_buf,
+		.kern_version = 0xdeadc0de,
+		.prog_name    = "test_prog",
+	};
+	size_t bpf_prog_load_attr_sizes[] = {
+		sizeof(bpf_prog_load_attr),
+		offsetofend(struct BPF_PROG_LOAD_struct, prog_name),
+		offsetofend(struct BPF_PROG_LOAD_struct, prog_flags),
+		offsetofend(struct BPF_PROG_LOAD_struct, kern_version),
+		offsetofend(struct BPF_PROG_LOAD_struct, log_buf),
+		offsetofend(struct BPF_PROG_LOAD_struct, license),
+		offsetofend(struct BPF_PROG_LOAD_struct, insns),
+		0,
+	};
+#endif /* CHECK_OBJ_PROG */
+
+	size_t *bpf_map_create_attr_size = bpf_map_create_attr_sizes;
+	int map_fd = try_bpf(BPF_MAP_CREATE, print_map_create,
+			     &bpf_map_create_attr, &bpf_map_create_attr_size);
+	if (map_fd < 0)
+		perror_msg_and_skip("BPF_MAP_CREATE failed");
+
+#if CHECK_OBJ_PROG
+	socket_prog[4].imm = map_fd;
+
+	size_t *bpf_prog_load_attr_size = bpf_prog_load_attr_sizes;
+	int prog_fd = try_bpf(BPF_PROG_LOAD, print_prog_load,
+			      &bpf_prog_load_attr, &bpf_prog_load_attr_size);
+	if (prog_fd < 0)
+		perror_msg_and_skip("BPF_PROG_LOAD failed (log: \"%s\")",
+				    log_buf);
+#endif /* CHECK_OBJ_PROG */
+
+	/*
+	 * This has to be a macro, otherwise the compiler complains that
+	 * initializer element is not constant.
+	 */
+	#define  MAP_INFO_SZ (sizeof(*map_info) + 64)
+	struct bpf_map_info_struct *map_info = calloc(1, MAP_INFO_SZ);
+	struct BPF_OBJ_GET_INFO_BY_FD_struct bpf_map_get_info_attr = {
+		.bpf_fd   = map_fd,
+		.info_len = MAP_INFO_SZ,
+		.info     = (uintptr_t) map_info,
+	};
+
+	int ret = sys_bpf(BPF_OBJ_GET_INFO_BY_FD, &bpf_map_get_info_attr,
+			  sizeof(bpf_map_get_info_attr));
+	if (ret < 0)
+		perror_msg_and_skip("BPF_OBJ_GET_INFO_BY_FD map failed");
+
+	printf("bpf(BPF_OBJ_GET_INFO_BY_FD"
+	       ", {info={bpf_fd=%d<anon_inode:bpf-map>, info_len=%zu",
+	       map_fd, MAP_INFO_SZ);
+	if (bpf_map_get_info_attr.info_len != MAP_INFO_SZ)
+		printf(" => %u", bpf_map_get_info_attr.info_len);
+
+	printf(", info=");
+#if VERBOSE
+	printf("{type=");
+	printxval(bpf_map_types, map_info->type, "BPF_MAP_TYPE_???");
+	PRINT_FIELD_U(", ", *map_info, id);
+	PRINT_FIELD_U(", ", *map_info, key_size);
+	PRINT_FIELD_U(", ", *map_info, value_size);
+	PRINT_FIELD_U(", ", *map_info, max_entries);
+	printf(", map_flags=");
+	printflags(bpf_map_flags, map_info->map_flags, "BPF_F_???");
+
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, name)) {
+		printf(", name=");
+		print_quoted_cstring(map_info->name, sizeof(map_info->name));
+	}
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, ifindex))
+		printf(", ifindex=%u", map_info->ifindex);
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, netns_dev))
+		printf(", netns_dev=makedev(%u, %u)",
+		       major(map_info->netns_dev), minor(map_info->netns_dev));
+	if (bpf_map_get_info_attr.info_len >
+	    offsetof(struct bpf_map_info_struct, netns_ino))
+		printf(", netns_ino=%" PRIu64, map_info->netns_ino);
+	printf("}");
+#else /* !VERBOSE */
+	printf("%p", map_info);
+#endif /* VERBOSE */
+	printf("}}, %zu) = %s\n", sizeof(bpf_map_get_info_attr), errstr);
+
+#if CHECK_OBJ_PROG
+	/*
+	 * This has to be a macro, otherwise the compiler complains that
+	 * initializer element is not constant.
+	 */
+	#define  PROG_INFO_SZ (sizeof(*prog_info) + 64)
+	struct bpf_prog_info_struct *prog_info = calloc(1, PROG_INFO_SZ);
+	struct bpf_insn *xlated_prog = tail_alloc(sizeof(*xlated_prog) * 42);
+	uint32_t *map_ids = tail_alloc(sizeof(*map_ids) * 2);
+	struct BPF_OBJ_GET_INFO_BY_FD_struct bpf_prog_get_info_attr = {
+		.bpf_fd   = prog_fd,
+		.info_len = PROG_INFO_SZ,
+		.info     = (uintptr_t) prog_info,
+	};
+	size_t old_prog_info_len = PROG_INFO_SZ;
+
+	for (unsigned int i = 0; i < 4; i++) {
+		prog_info->jited_prog_len = 0;
+		switch (i) {
+		case 1:
+			prog_info->xlated_prog_insns =
+				(uintptr_t) (xlated_prog + 42);
+			prog_info->xlated_prog_len = 336;
+			prog_info->map_ids = (uintptr_t) (map_ids + 2);
+			prog_info->nr_map_ids = 2;
+			break;
+		case 2:
+			prog_info->xlated_prog_insns = (uintptr_t) xlated_prog;
+			/* TODO: check xlated_prog output */
+			prog_info->xlated_prog_len = 0;
+			prog_info->map_ids = (uintptr_t) map_ids;
+			prog_info->nr_map_ids = 0;
+			break;
+		case 3:
+			prog_info->xlated_prog_insns = (uintptr_t) xlated_prog;
+			prog_info->xlated_prog_len = 0;
+			prog_info->map_ids = (uintptr_t) map_ids;
+			prog_info->nr_map_ids = 2;
+			break;
+		}
+
+		ret = sys_bpf(BPF_OBJ_GET_INFO_BY_FD, &bpf_prog_get_info_attr,
+			      sizeof(bpf_prog_get_info_attr));
+		if (i != 1 && ret < 0)
+			perror_msg_and_skip("BPF_OBJ_GET_INFO_BY_FD"
+					    " prog %u failed", i);
+
+		printf("bpf(BPF_OBJ_GET_INFO_BY_FD"
+		       ", {info={bpf_fd=%d<anon_inode:bpf-prog>, info_len=%zu",
+		       prog_fd, old_prog_info_len);
+		if (!i && bpf_prog_get_info_attr.info_len != PROG_INFO_SZ)
+			printf(" => %u", bpf_prog_get_info_attr.info_len);
+		old_prog_info_len = bpf_prog_get_info_attr.info_len;
+
+		printf(", info=");
+# if VERBOSE
+		printf("{type=");
+		printxval(bpf_prog_types, prog_info->type, "BPF_PROG_TYPE_???");
+		PRINT_FIELD_U(", ", *prog_info, id);
+		printf(", tag=");
+		print_quoted_hex(prog_info->tag, sizeof(prog_info->tag));
+		printf(", jited_prog_len=0");
+		if (prog_info->jited_prog_len)
+			printf(" => %u", prog_info->jited_prog_len);
+		printf(", jited_prog_insns=NULL");
+		switch (i) {
+		case 0:
+			printf(", xlated_prog_len=0");
+			if (prog_info->xlated_prog_len)
+				printf(" => %u", prog_info->xlated_prog_len);
+			printf(", xlated_prog_insns=NULL");
+			break;
+		case 1:
+			printf(", xlated_prog_len=336");
+			if (prog_info->xlated_prog_len != 336)
+				printf(" => %u", prog_info->xlated_prog_len);
+			if (prog_info->xlated_prog_len)
+				printf(", xlated_prog_insns=%p", xlated_prog + 42);
+			else
+				printf(", xlated_prog_insns=[]");
+			break;
+		case 2:
+		case 3:
+			printf(", xlated_prog_len=0");
+			if (prog_info->xlated_prog_len)
+				printf(" => %u", prog_info->xlated_prog_len);
+			printf(", xlated_prog_insns=[]");
+			break;
+		}
+
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, load_time))
+			printf(", load_time=%" PRIu64, prog_info->load_time);
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, created_by_uid))
+			printf(", created_by_uid=%u",
+			       prog_info->created_by_uid);
+
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, map_ids)) {
+			switch (i) {
+			case 0:
+				printf(", nr_map_ids=0");
+				if (prog_info->nr_map_ids)
+					printf(" => 1");
+				printf(", map_ids=NULL");
+				break;
+			case 1:
+				printf(", nr_map_ids=2, map_ids=%p",
+				       map_ids + 2);
+				break;
+			case 2:
+				printf(", nr_map_ids=0");
+				if (prog_info->nr_map_ids)
+					printf(" => 1");
+				printf(", map_ids=[]");
+				break;
+			case 3:
+				printf(", nr_map_ids=2");
+				if (prog_info->nr_map_ids != 2)
+					printf(" => 1");
+				printf(", map_ids=[%u]", map_info->id);
+				break;
+			}
+		}
+
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, name))
+			printf(", name=\"test_prog\"");
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, ifindex))
+			printf(", ifindex=%u", prog_info->ifindex);
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, netns_dev))
+			printf(", netns_dev=makedev(%u, %u)",
+			       major(prog_info->netns_dev),
+			       minor(prog_info->netns_dev));
+		if (bpf_prog_get_info_attr.info_len >
+		    offsetof(struct bpf_prog_info_struct, netns_ino))
+			printf(", netns_ino=%" PRIu64, prog_info->netns_ino);
+
+		printf("}");
+# else /* !VERBOSE */
+		printf("%p", prog_info);
+# endif /* VERBOSE */
+		printf("}}, %zu) = %s\n",
+		       sizeof(bpf_prog_get_info_attr), errstr);
+	}
+#endif /* CHECK_OBJ_PROG */
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/bpf-obj_get_info_by_fd.gen.test b/tests/bpf-obj_get_info_by_fd.gen.test
new file mode 100755
index 0000000..0efa59a
--- /dev/null
+++ b/tests/bpf-obj_get_info_by_fd.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf-obj_get_info_by_fd -a20 -y -e trace=bpf); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a20 -y -e trace=bpf
diff --git a/tests/bpf-success-v.c b/tests/bpf-success-v.c
new file mode 100644
index 0000000..48c2a16
--- /dev/null
+++ b/tests/bpf-success-v.c
@@ -0,0 +1,2 @@
+#define INJECT_RETVAL 42
+#include "bpf-v.c"
diff --git a/tests/bpf-success-v.test b/tests/bpf-success-v.test
new file mode 100755
index 0000000..819afbb
--- /dev/null
+++ b/tests/bpf-success-v.test
@@ -0,0 +1,6 @@
+#!/bin/sh -efu
+
+. "${srcdir=.}/scno_tampering.sh"
+
+run_strace -a20 -v -e trace=bpf -e inject=bpf:retval=42 ../bpf-success-v > "$EXP"
+match_diff "$LOG" "$EXP"
diff --git a/tests/bpf-success.c b/tests/bpf-success.c
new file mode 100644
index 0000000..06f4695
--- /dev/null
+++ b/tests/bpf-success.c
@@ -0,0 +1,2 @@
+#define INJECT_RETVAL 42
+#include "bpf.c"
diff --git a/tests/bpf-success.test b/tests/bpf-success.test
new file mode 100755
index 0000000..3cdfd35
--- /dev/null
+++ b/tests/bpf-success.test
@@ -0,0 +1,6 @@
+#!/bin/sh -efu
+
+. "${srcdir=.}/scno_tampering.sh"
+
+run_strace -a20 -e trace=bpf -e inject=bpf:retval=42 ../bpf-success > "$EXP"
+match_diff "$LOG" "$EXP"
diff --git a/tests/bpf.c b/tests/bpf.c
index 72d7e8e..15ce713 100644
--- a/tests/bpf.c
+++ b/tests/bpf.c
@@ -49,6 +49,19 @@
 #include "xlat.h"
 #include "xlat/bpf_commands.h"
 
+#if defined MPERS_IS_m32 || SIZEOF_KERNEL_LONG_T > 4
+# define BIG_ADDR(addr64_, addr32_) addr64_
+# define BIG_ADDR_MAYBE(addr_)
+#elif defined __arm__ || defined __i386__ || defined __mips__ \
+   || defined __powerpc__ || defined __riscv__ || defined __s390__ \
+   || defined __sparc__ || defined __tile__
+# define BIG_ADDR(addr64_, addr32_) addr64_ " or " addr32_
+# define BIG_ADDR_MAYBE(addr_) addr_ " or "
+#else
+# define BIG_ADDR(addr64_, addr32_) addr32_
+# define BIG_ADDR_MAYBE(addr_)
+#endif
+
 #ifndef HAVE_STRUCT_BPF_INSN
 struct bpf_insn {
 	uint8_t	code;
@@ -76,6 +89,8 @@
 	BPF_ATTR_DATA_FIELD(BPF_PROG_GET_FD_BY_ID);
 	BPF_ATTR_DATA_FIELD(BPF_MAP_GET_FD_BY_ID);
 	BPF_ATTR_DATA_FIELD(BPF_OBJ_GET_INFO_BY_FD);
+	BPF_ATTR_DATA_FIELD(BPF_PROG_QUERY);
+	BPF_ATTR_DATA_FIELD(BPF_RAW_TRACEPOINT_OPEN);
 	char char_data[256];
 };
 
@@ -105,7 +120,20 @@
 sys_bpf(kernel_ulong_t cmd, kernel_ulong_t attr, kernel_ulong_t size)
 {
 	long rc = syscall(__NR_bpf, cmd, attr, size);
+
 	errstr = sprintrc(rc);
+
+#ifdef INJECT_RETVAL
+	if (rc != INJECT_RETVAL)
+		error_msg_and_fail("Got a return value of %ld != %d",
+				   rc, INJECT_RETVAL);
+
+	static char inj_errstr[4096];
+
+	snprintf(inj_errstr, sizeof(inj_errstr), "%s (INJECTED)", errstr);
+	errstr = inj_errstr;
+#endif
+
 	return rc;
 }
 
@@ -232,36 +260,173 @@
 	       cmd_check->cmd_str, addr, page_size + 1, errstr);
 }
 
-static const struct bpf_attr_check BPF_MAP_CREATE_checks[] = {
+static void
+init_BPF_MAP_CREATE_attr7(struct bpf_attr_check *check)
+{
+	struct BPF_MAP_CREATE_struct *attr = &check->data.BPF_MAP_CREATE_data;
+	attr->map_ifindex = ifindex_lo();
+}
+
+static struct bpf_attr_check BPF_MAP_CREATE_checks[] = {
 	{
 		.data = { .BPF_MAP_CREATE_data = { .map_type = 2 } },
 		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_type),
 		.str = "map_type=BPF_MAP_TYPE_ARRAY, key_size=0, value_size=0"
-		       ", max_entries=0, map_flags=0, inner_map_fd=0"
+		       ", max_entries=0"
 	},
-	{
+	{ /* 1 */
 		.data = { .BPF_MAP_CREATE_data = {
-			.map_type = 1,
+			.map_type = 16,
 			.key_size = 4,
 			.value_size = 8,
 			.max_entries = 256,
-			.map_flags = 7,
+			.map_flags = 63,
 			.inner_map_fd = -1,
-			.numa_node = 42
+			.numa_node = 3141592653,
+			.map_name = "0123456789abcde",
 		} },
-		.size = offsetofend(struct BPF_MAP_CREATE_struct, numa_node),
-		.str = "map_type=BPF_MAP_TYPE_HASH, key_size=4"
+		.size = offsetof(struct BPF_MAP_CREATE_struct, map_name) + 8,
+		.str = "map_type=BPF_MAP_TYPE_CPUMAP, key_size=4"
 		       ", value_size=8, max_entries=256"
 		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NO_COMMON_LRU"
-		       "|BPF_F_NUMA_NODE, inner_map_fd=-1, numa_node=42"
-	}
+				   "|BPF_F_NUMA_NODE|BPF_F_RDONLY|BPF_F_WRONLY"
+				   "|BPF_F_STACK_BUILD_ID"
+		       ", inner_map_fd=-1"
+		       ", numa_node=3141592653"
+		       ", map_name=\"0123456\"...",
+
+	},
+	{ /* 2 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 17,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xffffffc0,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+			.map_name = "",
+			.map_ifindex = 3141592653,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_ifindex),
+		.str = "map_type=0x11 /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=0xffffffc0 /* BPF_F_??? */"
+		       ", inner_map_fd=-1576685468"
+		       ", map_name=\"\", map_ifindex=3141592653",
+
+	},
+	{ /* 3 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_flags),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80",
+	},
+	{ /* 4 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, inner_map_fd),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468",
+	},
+	{ /* 5 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, numa_node),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468"
+		       ", numa_node=4294967295 /* NUMA_NO_NODE */",
+	},
+	{ /* 6 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+			.map_name = "fedcba9876543210",
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_name),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468"
+		       ", numa_node=4294967295 /* NUMA_NO_NODE */"
+		       ", map_name=\"fedcba987654321\"...",
+	},
+	{ /* 7 */
+		.data = { .BPF_MAP_CREATE_data = {
+			.map_type = 0xdeadf00d,
+			.key_size = 0xface1e55,
+			.value_size = 0xbadc0ded,
+			.max_entries = 0xbeefcafe,
+			.map_flags = 0xc0dedead,
+			.inner_map_fd = 2718281828,
+			.numa_node = -1,
+			.map_name = "0123456789abcde",
+		} },
+		.size = offsetofend(struct BPF_MAP_CREATE_struct, map_ifindex),
+		.str = "map_type=0xdeadf00d /* BPF_MAP_TYPE_??? */"
+		       ", key_size=4207812181, value_size=3134983661"
+		       ", max_entries=3203386110"
+		       ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NUMA_NODE"
+				   "|BPF_F_RDONLY|BPF_F_STACK_BUILD_ID"
+				   "|0xc0dede80"
+		       ", inner_map_fd=-1576685468"
+		       ", numa_node=4294967295 /* NUMA_NO_NODE */"
+		       ", map_name=\"0123456789abcde\""
+		       ", map_ifindex=" IFINDEX_LO_STR,
+		.init_fn = init_BPF_MAP_CREATE_attr7,
+	},
 };
 
 static const struct bpf_attr_check BPF_MAP_LOOKUP_ELEM_checks[] = {
 	{
 		.data = { .BPF_MAP_LOOKUP_ELEM_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_LOOKUP_ELEM_struct, map_fd),
-		.str = "map_fd=-1, key=0, value=0"
+		.str = "map_fd=-1, key=NULL, value=NULL"
 	},
 	{
 		.data = { .BPF_MAP_LOOKUP_ELEM_data = {
@@ -278,7 +443,7 @@
 	{
 		.data = { .BPF_MAP_UPDATE_ELEM_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_UPDATE_ELEM_struct, map_fd),
-		.str = "map_fd=-1, key=0, value=0, flags=BPF_ANY"
+		.str = "map_fd=-1, key=NULL, value=NULL, flags=BPF_ANY"
 	},
 	{
 		.data = { .BPF_MAP_UPDATE_ELEM_data = {
@@ -297,7 +462,7 @@
 	{
 		.data = { .BPF_MAP_DELETE_ELEM_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_DELETE_ELEM_struct, map_fd),
-		.str = "map_fd=-1, key=0"
+		.str = "map_fd=-1, key=NULL"
 	},
 	{
 		.data = { .BPF_MAP_DELETE_ELEM_data = {
@@ -313,7 +478,7 @@
 	{
 		.data = { .BPF_MAP_GET_NEXT_KEY_data = { .map_fd = -1 } },
 		.size = offsetofend(struct BPF_MAP_GET_NEXT_KEY_struct, map_fd),
-		.str = "map_fd=-1, key=0, next_key=0"
+		.str = "map_fd=-1, key=NULL, next_key=NULL"
 	},
 	{
 		.data = { .BPF_MAP_GET_NEXT_KEY_data = {
@@ -327,30 +492,96 @@
 };
 
 static const struct bpf_insn insns[] = {
-	{ .code = 0x95 }
+	{
+		.code = 0x95,
+		.dst_reg = 10,
+		.src_reg = 11,
+		.off = 0xdead,
+		.imm = 0xbadc0ded,
+	},
 };
 static const char license[] = "GPL";
-static char log_buf[4096];
 static const char pathname[] = "/sys/fs/bpf/foo/bar";
 
+static char *log_buf;
+/*
+ * This has to be a macro, otherwise the compiler complains that
+ * initializer element is not constant.
+ */
+#define log_buf_size 4096U
+
+static inline char *
+get_log_buf(void)
+{
+	if (!log_buf)
+		log_buf = tail_alloc(log_buf_size);
+	return log_buf;
+}
+
+static inline char *
+get_log_buf_tail(void)
+{
+	return get_log_buf() + log_buf_size;
+}
+
+#if VERBOSE
+# define INSNS_FMT \
+	"[{code=BPF_JMP|BPF_K|BPF_EXIT, dst_reg=BPF_REG_10" \
+	", src_reg=0xb /* BPF_REG_??? */, off=%d, imm=%#x}]"
+# define INSNS_ARG insns[0].off, insns[0].imm
+#else
+# define INSNS_FMT "%p"
+# define INSNS_ARG insns
+#endif
+
 static void
-init_BPF_PROG_LOAD_attr(struct bpf_attr_check *check)
+init_BPF_PROG_LOAD_attr3(struct bpf_attr_check *check)
 {
 	struct BPF_PROG_LOAD_struct *attr = &check->data.BPF_PROG_LOAD_data;
+
 	attr->insns = (uintptr_t) insns;
 	attr->license = (uintptr_t) license;
-	attr->log_buf = (uintptr_t) log_buf;
+	attr->log_buf = (uintptr_t) get_log_buf_tail();
 }
 
 static void
-print_BPF_PROG_LOAD_attr(const struct bpf_attr_check *check, unsigned long addr)
+print_BPF_PROG_LOAD_attr3(const struct bpf_attr_check *check, unsigned long addr)
 {
-	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=%u, insns=%p"
-	       ", license=\"%s\", log_level=42, log_size=4096, log_buf=%p"
+	printf("prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=%u"
+	       ", insns=" INSNS_FMT ", license=\"%s\", log_level=2718281828"
+	       ", log_size=%u, log_buf=%p"
 	       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
-	       ", prog_flags=BPF_F_STRICT_ALIGNMENT",
-	       (unsigned int) ARRAY_SIZE(insns), insns,
-	       license, log_buf);
+	       ", prog_flags=0x2 /* BPF_F_??? */"
+	       ", prog_name=\"0123456789abcde\"..., prog_ifindex=3203399405",
+	       (unsigned int) ARRAY_SIZE(insns), INSNS_ARG, license,
+	       log_buf_size, get_log_buf_tail());
+}
+
+static void
+init_BPF_PROG_LOAD_attr4(struct bpf_attr_check *check)
+{
+	struct BPF_PROG_LOAD_struct *attr = &check->data.BPF_PROG_LOAD_data;
+
+	attr->insns = (uintptr_t) insns;
+	attr->license = (uintptr_t) license;
+	attr->log_buf = (uintptr_t) get_log_buf();
+	attr->prog_ifindex = ifindex_lo();
+
+	strncpy(log_buf, "log test", 9);
+}
+
+static void
+print_BPF_PROG_LOAD_attr4(const struct bpf_attr_check *check, unsigned long addr)
+{
+	printf("prog_type=BPF_PROG_TYPE_UNSPEC, insn_cnt=%u, insns=" INSNS_FMT
+	       ", license=\"%s\", log_level=2718281828, log_size=4"
+	       ", log_buf=\"log \"..."
+	       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
+	       ", prog_flags=BPF_F_STRICT_ALIGNMENT|0x2"
+	       ", prog_name=\"0123456789abcde\"..., prog_ifindex=%s"
+	       ", expected_attach_type=BPF_CGROUP_INET6_BIND",
+	       (unsigned int) ARRAY_SIZE(insns), INSNS_ARG,
+	       license, IFINDEX_LO_STR);
 }
 
 static struct bpf_attr_check BPF_PROG_LOAD_checks[] = {
@@ -358,21 +589,82 @@
 		.data = { .BPF_PROG_LOAD_data = { .prog_type = 1 } },
 		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_type),
 		.str = "prog_type=BPF_PROG_TYPE_SOCKET_FILTER"
-		       ", insn_cnt=0, insns=0, license=NULL"
+		       ", insn_cnt=0, insns=NULL, license=NULL"
 	},
-	{
+	{ /* 1 */
+		.data = { .BPF_PROG_LOAD_data = {
+			.prog_type = 18,
+			.insn_cnt = 0xbadc0ded,
+			.insns = 0,
+			.license = 0,
+			.log_level = 42,
+			.log_size = 3141592653U,
+			.log_buf = 0,
+			.kern_version = 0xcafef00d,
+			.prog_flags = 0,
+		} },
+		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_flags),
+		.str = "prog_type=0x12 /* BPF_PROG_TYPE_??? */"
+		       ", insn_cnt=3134983661, insns=NULL, license=NULL"
+		       ", log_level=42, log_size=3141592653, log_buf=NULL"
+		       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
+		       ", prog_flags=0",
+	},
+	{ /* 2 */
+		.data = { .BPF_PROG_LOAD_data = {
+			.prog_type = 17,
+			.insn_cnt = 0xbadc0ded,
+			.insns = 0xffffffff00000000,
+			.license = 0xffffffff00000000,
+			.log_level = 2718281828U,
+			.log_size = log_buf_size,
+			.log_buf = 0xffffffff00000000,
+			.kern_version = 0xcafef00d,
+			.prog_flags = 1,
+			.prog_name = "fedcba987654321",
+		} },
+		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_name),
+		.str = "prog_type=BPF_PROG_TYPE_RAW_TRACEPOINT"
+		       ", insn_cnt=3134983661"
+		       ", insns=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", license=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", log_level=2718281828, log_size=4096"
+		       ", log_buf=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", kern_version=KERNEL_VERSION(51966, 240, 13)"
+		       ", prog_flags=BPF_F_STRICT_ALIGNMENT"
+		       ", prog_name=\"fedcba987654321\"",
+	},
+	{ /* 3 */
 		.data = { .BPF_PROG_LOAD_data = {
 			.prog_type = 1,
 			.insn_cnt = ARRAY_SIZE(insns),
-			.log_level = 42,
-			.log_size = sizeof(log_buf),
+			.log_level = 2718281828U,
+			.log_size = log_buf_size,
 			.kern_version = 0xcafef00d,
-			.prog_flags = 1
+			.prog_flags = 2,
+			.prog_name = "0123456789abcdef",
+			.prog_ifindex = 0xbeeffeed,
 		} },
-		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_flags),
-		.init_fn = init_BPF_PROG_LOAD_attr,
-		.print_fn = print_BPF_PROG_LOAD_attr
-	}
+		.size = offsetofend(struct BPF_PROG_LOAD_struct, prog_ifindex),
+		.init_fn = init_BPF_PROG_LOAD_attr3,
+		.print_fn = print_BPF_PROG_LOAD_attr3
+	},
+	{ /* 4 */
+		.data = { .BPF_PROG_LOAD_data = {
+			.prog_type = 0,
+			.insn_cnt = ARRAY_SIZE(insns),
+			.log_level = 2718281828U,
+			.log_size = 4,
+			.kern_version = 0xcafef00d,
+			.prog_flags = 3,
+			.prog_name = "0123456789abcdef",
+			.expected_attach_type = 9,
+		} },
+		.size = offsetofend(struct BPF_PROG_LOAD_struct,
+				    expected_attach_type),
+		.init_fn = init_BPF_PROG_LOAD_attr4,
+		.print_fn = print_BPF_PROG_LOAD_attr4
+	},
 };
 
 static void
@@ -393,16 +685,7 @@
 			.pathname = 0xFFFFFFFFFFFFFFFFULL
 		} },
 		.size = offsetofend(struct BPF_OBJ_PIN_struct, pathname),
-		.str = "pathname="
-#if defined MPERS_IS_m32 || SIZEOF_KERNEL_LONG_T > 4
-		       "0xffffffffffffffff"
-#elif defined __arm__ || defined __i386__ || defined __mips__ || \
-      defined __powerpc__ || defined __riscv__ || defined __s390__ \
-      || defined __sparc__ || defined __tile__
-		       "0xffffffffffffffff or 0xffffffff"
-#else
-		       "0xffffffff"
-#endif
+		.str = "pathname=" BIG_ADDR("0xffffffffffffffff", "0xffffffff")
 		       ", bpf_fd=0",
 	},
 	{
@@ -468,7 +751,7 @@
 		.data = { .BPF_PROG_TEST_RUN_data = { .prog_fd = -1 } },
 		.size = offsetofend(struct BPF_PROG_TEST_RUN_struct, prog_fd),
 		.str = "test={prog_fd=-1, retval=0, data_size_in=0"
-		       ", data_size_out=0, data_in=0, data_out=0"
+		       ", data_size_out=0, data_in=NULL, data_out=NULL"
 		       ", repeat=0, duration=0}"
 	},
 	{
@@ -594,7 +877,7 @@
 	{
 		.data = { .BPF_OBJ_GET_INFO_BY_FD_data = { .bpf_fd = -1 } },
 		.size = offsetofend(struct BPF_OBJ_GET_INFO_BY_FD_struct, bpf_fd),
-		.str = "info={bpf_fd=-1, info_len=0, info=0}"
+		.str = "info={bpf_fd=-1, info_len=0, info=NULL}"
 	},
 	{
 		.data = { .BPF_OBJ_GET_INFO_BY_FD_data = {
@@ -608,6 +891,194 @@
 	}
 };
 
+
+static uint32_t prog_load_ids[] = { 0, 1, 0xffffffff, 2718281828, };
+uint32_t *prog_load_ids_ptr;
+
+static void
+init_BPF_PROG_QUERY_attr4(struct bpf_attr_check *check)
+{
+	struct BPF_PROG_QUERY_struct *attr = &check->data.BPF_PROG_QUERY_data;
+
+	if (!prog_load_ids_ptr)
+		prog_load_ids_ptr = tail_memdup(prog_load_ids,
+						sizeof(prog_load_ids));
+
+	attr->prog_ids = (uintptr_t) prog_load_ids_ptr;
+	attr->prog_cnt = ARRAY_SIZE(prog_load_ids);
+}
+
+static void
+print_BPF_PROG_QUERY_attr4(const struct bpf_attr_check *check, unsigned long addr)
+{
+	printf("query={target_fd=-1153374643"
+	       ", attach_type=0xfeedface /* BPF_??? */"
+	       ", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
+	       ", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
+#if defined(INJECT_RETVAL) && INJECT_RETVAL > 0
+	       ", prog_ids=[0, 1, 4294967295, 2718281828], prog_cnt=4}"
+#else
+	       ", prog_ids=%p, prog_cnt=4}", prog_load_ids_ptr
+#endif
+	       );
+}
+
+static void
+init_BPF_PROG_QUERY_attr5(struct bpf_attr_check *check)
+{
+	struct BPF_PROG_QUERY_struct *attr = &check->data.BPF_PROG_QUERY_data;
+
+	if (!prog_load_ids_ptr)
+		prog_load_ids_ptr = tail_memdup(prog_load_ids,
+						sizeof(prog_load_ids));
+
+	attr->prog_ids = (uintptr_t) prog_load_ids_ptr;
+	attr->prog_cnt = ARRAY_SIZE(prog_load_ids) + 1;
+}
+
+static void
+print_BPF_PROG_QUERY_attr5(const struct bpf_attr_check *check, unsigned long addr)
+{
+	printf("query={target_fd=-1153374643"
+	       ", attach_type=0xfeedface /* BPF_??? */"
+	       ", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
+	       ", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
+#if defined(INJECT_RETVAL) && INJECT_RETVAL > 0
+	       ", prog_ids=[0, 1, 4294967295, 2718281828, ... /* %p */]"
+	       ", prog_cnt=5}",
+	       prog_load_ids_ptr + ARRAY_SIZE(prog_load_ids)
+#else
+	       ", prog_ids=%p, prog_cnt=5}", prog_load_ids_ptr
+#endif
+	       );
+}
+
+static struct bpf_attr_check BPF_PROG_QUERY_checks[] = {
+	{
+		.data = { .BPF_PROG_QUERY_data = { .target_fd = -1 } },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, target_fd),
+		.str = "query={target_fd=-1"
+		       ", attach_type=BPF_CGROUP_INET_INGRESS, query_flags=0"
+		       ", attach_flags=0, prog_ids=NULL, prog_cnt=0}",
+	},
+	{ /* 1 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 13,
+			.query_flags = 1,
+			.attach_flags = 3,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, attach_flags),
+		.str = "query={target_fd=-1153374643"
+		       ", attach_type=BPF_CGROUP_INET6_POST_BIND"
+		       ", query_flags=BPF_F_QUERY_EFFECTIVE"
+		       ", attach_flags=BPF_F_ALLOW_OVERRIDE|BPF_F_ALLOW_MULTI"
+		       ", prog_ids=NULL, prog_cnt=0}",
+	},
+	{ /* 2 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 14,
+			.query_flags = 0xfffffffe,
+			.attach_flags = 0xfffffffc,
+			.prog_ids = 0xffffffffffffffffULL,
+			.prog_cnt = 2718281828,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.str = "query={target_fd=-1153374643"
+		       ", attach_type=0xe /* BPF_??? */"
+		       ", query_flags=0xfffffffe /* BPF_F_QUERY_??? */"
+		       ", attach_flags=0xfffffffc /* BPF_F_??? */"
+		       ", prog_ids="
+		       BIG_ADDR("0xffffffffffffffff", "0xffffffff")
+		       ", prog_cnt=2718281828}",
+	},
+	{ /* 3 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 0xfeedface,
+			.query_flags = 0xdeadf00d,
+			.attach_flags = 0xbeefcafe,
+			.prog_ids = 0xffffffffffffffffULL,
+			.prog_cnt = 0,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.str = "query={target_fd=-1153374643"
+		       ", attach_type=0xfeedface /* BPF_??? */"
+		       ", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
+		       ", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
+		       ", prog_ids=" BIG_ADDR_MAYBE("0xffffffffffffffff") "[]"
+		       ", prog_cnt=0}",
+	},
+	{ /* 4 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 0xfeedface,
+			.query_flags = 0xdeadf00d,
+			.attach_flags = 0xbeefcafe,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.init_fn = init_BPF_PROG_QUERY_attr4,
+		.print_fn = print_BPF_PROG_QUERY_attr4,
+	},
+	{ /* 5 */
+		.data = { .BPF_PROG_QUERY_data = {
+			.target_fd = 3141592653U,
+			.attach_type = 0xfeedface,
+			.query_flags = 0xdeadf00d,
+			.attach_flags = 0xbeefcafe,
+		} },
+		.size = offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt),
+		.init_fn = init_BPF_PROG_QUERY_attr5,
+		.print_fn = print_BPF_PROG_QUERY_attr5,
+	},
+};
+
+
+static void
+init_BPF_RAW_TRACEPOINT_attr2(struct bpf_attr_check *check)
+{
+	/* TODO: test the 128 byte limit */
+	static const char tp_name[] = "0123456789qwertyuiop0123456789qwe";
+
+	struct BPF_RAW_TRACEPOINT_OPEN_struct *attr =
+		&check->data.BPF_RAW_TRACEPOINT_OPEN_data;
+
+	attr->name = (uintptr_t) tp_name;
+}
+
+static struct bpf_attr_check BPF_RAW_TRACEPOINT_OPEN_checks[] = {
+	{
+		.data = { .BPF_RAW_TRACEPOINT_OPEN_data = { .name = 0 } },
+		.size = offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct,
+				    name),
+		.str = "raw_tracepoint={name=NULL, prog_fd=0}",
+	},
+	{ /* 1 */
+		.data = { .BPF_RAW_TRACEPOINT_OPEN_data = {
+			.name = 0xffffffff00000000ULL,
+			.prog_fd = 0xdeadbeef,
+		} },
+		.size = offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct,
+				    prog_fd),
+		.str = "raw_tracepoint="
+		       "{name=" BIG_ADDR("0xffffffff00000000", "NULL")
+		       ", prog_fd=-559038737}",
+	},
+	{
+		.data = { .BPF_RAW_TRACEPOINT_OPEN_data = {
+			.prog_fd = 0xdeadbeef,
+		} },
+		.size = offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct,
+				    prog_fd),
+		.init_fn = init_BPF_RAW_TRACEPOINT_attr2,
+		.str = "raw_tracepoint="
+		       "{name=\"0123456789qwertyuiop0123456789qw\"..."
+		       ", prog_fd=-559038737}",
+	}
+};
+
+
 #define CHK(cmd_) \
 	{ \
 		cmd_, #cmd_, \
@@ -635,6 +1106,8 @@
 		CHK(BPF_PROG_GET_FD_BY_ID),
 		CHK(BPF_MAP_GET_FD_BY_ID),
 		CHK(BPF_OBJ_GET_INFO_BY_FD),
+		CHK(BPF_PROG_QUERY),
+		CHK(BPF_RAW_TRACEPOINT_OPEN),
 	};
 
 	page_size = get_page_size();
diff --git a/tests/btrfs-X.test b/tests/btrfs-X.test
new file mode 100755
index 0000000..c129be9
--- /dev/null
+++ b/tests/btrfs-X.test
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Check verbose xlat decoding of btrfs ioctl
+
+. "${srcdir=.}/init.sh"
+
+check_prog grep
+run_prog ../btrfs -X > /dev/null
+run_strace -a16 -Xverbose -eioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests/btrfs-vX.test b/tests/btrfs-vX.test
new file mode 100755
index 0000000..163b29f
--- /dev/null
+++ b/tests/btrfs-vX.test
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Check verbose, verbose xlat decoding of btrfs ioctl
+
+. "${srcdir=.}/init.sh"
+
+check_prog grep
+run_prog ../btrfs -v -X > /dev/null
+run_strace -a16 -Xverbose -veioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests/btrfs-vwX.test b/tests/btrfs-vwX.test
new file mode 100755
index 0000000..57c6891
--- /dev/null
+++ b/tests/btrfs-vwX.test
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Check verbose, verbose xlat decoding of btrfs ioctl w/ live ioctls.
+
+# WARNING: USE OF THIS TEST WILL MODIFY AN EXISTING BTRFS FILE SYSTEM
+
+# Typical usage:
+# mkfs.btrfs <dev>
+# mount <dev> /mnt
+# BTRFS_MOUNTPOINT=/mnt make check TESTS="btrfs-vwX"
+# umount /mnt
+
+. "${srcdir=.}/init.sh"
+
+if [ -z "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT not set"
+elif [ ! -d "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT does not point to a directory"
+fi
+
+check_prog grep
+run_prog ../btrfs -v -w -X "${BTRFS_MOUNTPOINT}" > /dev/null
+run_strace -a16 -Xverbose -veioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests/btrfs-wX.test b/tests/btrfs-wX.test
new file mode 100755
index 0000000..5fb6949
--- /dev/null
+++ b/tests/btrfs-wX.test
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Check verbose xlat decoding of btrfs ioctl w/ live ioctls.
+
+# WARNING: USE OF THIS TEST WILL MODIFY AN EXISTING BTRFS FILE SYSTEM
+
+# Typical usage:
+# mkfs.btrfs <dev>
+# mount <dev> /mnt
+# BTRFS_MOUNTPOINT=/mnt make check TESTS="btrfs-wX"
+# umount /mnt
+
+. "${srcdir=.}/init.sh"
+
+if [ -z "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT not set"
+elif [ ! -d "${BTRFS_MOUNTPOINT}" ]; then
+    skip_ "\$BTRFS_MOUNTPOINT does not point to a directory"
+fi
+
+check_prog grep
+run_prog ../btrfs -w -X "${BTRFS_MOUNTPOINT}" > /dev/null
+run_strace -a16 -Xverbose -eioctl $args > "$EXP"
+grep -v '^ioctl([012],' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests/btrfs.c b/tests/btrfs.c
index 415f692..b44bc87 100644
--- a/tests/btrfs.c
+++ b/tests/btrfs.c
@@ -13,6 +13,7 @@
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
+#include <sys/sysmacros.h>
 #include <sys/vfs.h>
 #include <linux/fs.h>
 #include <linux/btrfs.h>
@@ -23,6 +24,7 @@
 #include "xlat/btrfs_balance_flags.h"
 #include "xlat/btrfs_balance_state.h"
 #include "xlat/btrfs_compress_types.h"
+#include "xlat/btrfs_cont_reading_from_srcdev_mode.h"
 #include "xlat/btrfs_defrag_flags.h"
 #include "xlat/btrfs_dev_stats_values.h"
 #include "xlat/btrfs_dev_stats_flags.h"
@@ -62,6 +64,11 @@
 static int btrfs_test_dir_fd;
 static bool verbose;
 static bool write_ok;
+static bool verbose_xlat;
+
+static const char *path;
+static const char dir_name_fmt[] = "strace-test-%d";
+static char dir_name[sizeof(dir_name_fmt) + sizeof(int) * 3];
 
 const unsigned char uuid_reference[BTRFS_UUID_SIZE] = {
 	0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
@@ -152,11 +159,61 @@
 
 
 static const char *
-maybe_print_uint64max(uint64_t val)
+sprint_xlat_(uint32_t val, const char *xlat)
 {
-	if (val == UINT64_MAX)
-		return " /* UINT64_MAX */";
-	return "";
+	static char str[256];
+	int ret;
+
+	if (verbose_xlat) {
+		ret = snprintf(str, sizeof(str), "%#x /* %s */", val, xlat);
+
+		if (ret < 0)
+			perror_msg_and_fail("sprint_ioc(%#x, %s)", val, xlat);
+		if ((unsigned) ret >= sizeof(str))
+			error_msg_and_fail("sprint_ioc(%#x, %s): buffer "
+					   "overflow", val, xlat);
+
+		return str;
+	}
+
+	return xlat;
+}
+
+#define ioc(x_) sprint_xlat_(x_, #x_)
+
+void
+prfl_btrfs(const struct xlat *xlat, const unsigned long long val,
+	   const char *str)
+{
+	if (verbose_xlat && val)
+		printf("%#llx /* ", val);
+	printflags(xlat, val, str);
+	if (verbose_xlat && val)
+		printf(" */");
+}
+
+void
+prxval_btrfs(const struct xlat *xlat, const unsigned long long val,
+	     const char *str, bool known)
+{
+	if (verbose_xlat && known)
+		printf("%#llx /* ", val);
+	printxval(xlat, val, str);
+	if (verbose_xlat && known)
+		printf(" */");
+}
+
+static void
+print_uint64(const char *prefix, uint64_t val)
+{
+	if (val == UINT64_MAX) {
+		if (verbose_xlat)
+			printf("%s%" PRIu64 " /* UINT64_MAX */", prefix, val);
+		else
+			printf("%sUINT64_MAX", prefix);
+	} else {
+		printf("%s%" PRIu64, prefix, val);
+	}
 }
 
 /* takes highest valid flag bit */
@@ -182,10 +239,10 @@
 btrfs_test_trans_ioctls(void)
 {
 	ioctl(-1, BTRFS_IOC_TRANS_START, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TRANS_START) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_TRANS_START));
 
 	ioctl(-1, BTRFS_IOC_TRANS_END, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TRANS_END) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_TRANS_END));
 }
 
 /*
@@ -201,14 +258,15 @@
 	uint64_t u64val = 0xdeadbeefbadc0dedULL;
 
 	ioctl(-1, BTRFS_IOC_SYNC, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SYNC) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SYNC));
 
 	ioctl(-1, BTRFS_IOC_WAIT_SYNC, NULL);
-	printf("ioctl(-1, BTRFS_IOC_WAIT_SYNC, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_WAIT_SYNC));
 
 	ioctl(-1, BTRFS_IOC_WAIT_SYNC, &u64val);
-	printf("ioctl(-1, BTRFS_IOC_WAIT_SYNC, [%" PRIu64
-	       "]) = -1 EBADF (%m)\n", u64val);
+	printf("ioctl(-1, %s, [%" PRIu64 "]) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_WAIT_SYNC), u64val);
 
 	/*
 	 * The live test of BTRFS_IOC_SYNC happens as a part of the test
@@ -220,24 +278,24 @@
 btrfs_print_qgroup_inherit(struct btrfs_qgroup_inherit *inherit)
 {
 	printf("{flags=");
-	printflags(btrfs_qgroup_inherit_flags, inherit->flags,
+	prfl_btrfs(btrfs_qgroup_inherit_flags, inherit->flags,
 		   "BTRFS_QGROUP_INHERIT_???");
 	printf(", num_qgroups=%" PRI__u64
 	       ", num_ref_copies=%" PRI__u64
 	       ", num_excl_copies=%" PRI__u64 ", lim={flags=",
 	       inherit->num_qgroups, inherit->num_ref_copies,
 	       inherit->num_excl_copies);
-	printflags(btrfs_qgroup_limit_flags,
+	prfl_btrfs(btrfs_qgroup_limit_flags,
 		   inherit->lim.flags,
 		   "BTRFS_QGROUP_LIMIT_???");
 	printf(", max_rfer=%" PRI__u64 ", max_excl=%" PRI__u64
 	       ", rsv_rfer=%" PRI__u64 ", rsv_excl=%" PRI__u64
-	       "}, qgroups=",
+	       "}, ",
 	       inherit->lim.max_rfer, inherit->lim.max_excl,
 	       inherit->lim.rsv_rfer, inherit->lim.rsv_excl);
 	if (verbose) {
 		unsigned int i;
-		printf("[");
+		printf("qgroups=[");
 		for (i = 0; i < inherit->num_qgroups; i++) {
 			if (i > 0)
 				printf(", ");
@@ -254,7 +312,7 @@
 btrfs_print_vol_args_v2(struct btrfs_ioctl_vol_args_v2 *args, int print_qgroups)
 {
 	printf("{fd=%d, flags=", (int) args->fd);
-	printflags(btrfs_snap_flags_v2, args->flags, "BTRFS_SUBVOL_???");
+	prfl_btrfs(btrfs_snap_flags_v2, args->flags, "BTRFS_SUBVOL_???");
 
 	if (args->flags & BTRFS_SUBVOL_QGROUP_INHERIT) {
 		printf(", size=%" PRI__u64 ", qgroup_inherit=", args->size);
@@ -302,61 +360,64 @@
 	strcpy(vol_args.name, subvol_name);
 
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE));
 
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE, "
-	       "{fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE, "
-	       "{fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SUBVOL_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_DESTROY,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_DESTROY), vol_args.name);
 
 	strncpy(vol_args.name, long_subvol_name, BTRFS_PATH_NAME_MAX);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SUBVOL_CREATE), vol_args.name);
 
 	ioctl(-1, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_DESTROY,"
-	       " {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n", vol_args.name);
+	printf("ioctl(-1, %s, {fd=0, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_DESTROY), vol_args.name);
 
 	long_subvol_name = realloc(long_subvol_name, BTRFS_SUBVOL_NAME_MAX);
 	if (!long_subvol_name)
 		perror_msg_and_fail("realloc failed");
 
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SNAP_CREATE_V2));
 
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 
 	strcpy(vol_args_v2.name, subvol_name);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
 	strncpy(vol_args_v2.name, long_subvol_name, BTRFS_SUBVOL_NAME_MAX);
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
@@ -364,12 +425,12 @@
 	strcpy(vol_args_v2.name, subvol_name);
 	vol_args_v2.qgroup_inherit = bad_pointer;
 
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 0);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 0);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
@@ -394,31 +455,33 @@
 	inherit->lim.rsv_excl = u64val;
 	vol_args_v2.qgroup_inherit = inherit;
 
-	printf("ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SNAP_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SNAP_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, ");
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 	btrfs_print_vol_args_v2(&vol_args_v2, 1);
 	ioctl(-1, BTRFS_IOC_SUBVOL_CREATE_V2, &vol_args_v2);
 	printf(") = -1 EBADF (%m)\n");
 
 	ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEFAULT_SUBVOL));
 
 	ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, &u64val);
-	printf("ioctl(-1, BTRFS_IOC_DEFAULT_SUBVOL, [%"
-	       PRIu64 "]) = -1 EBADF (%m)\n", u64val);
+	printf("ioctl(-1, %s, [%" PRIu64 "]) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEFAULT_SUBVOL), u64val);
 
-	printf("ioctl(-1, BTRFS_IOC_SUBVOL_SETFLAGS, ");
-	printflags(btrfs_snap_flags_v2, vol_args_v2.flags,
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_SUBVOL_SETFLAGS));
+	prfl_btrfs(btrfs_snap_flags_v2, vol_args_v2.flags,
 		   "BTRFS_SUBVOL_???");
 	ioctl(-1, BTRFS_IOC_SUBVOL_SETFLAGS, &vol_args_v2.flags);
 	printf(") = -1 EBADF (%m)\n");
 
 	if (write_ok) {
 		struct btrfs_ioctl_vol_args_v2 args_passed;
+		long ret;
 		/*
 		 * Returns transid if flags & BTRFS_SUBVOL_CREATE_ASYNC
 		 * - BTRFS_IOC_SNAP_CREATE_V2
@@ -432,11 +495,14 @@
 		vol_args_v2.size = 0;
 		vol_args_v2.qgroup_inherit = NULL;
 		args_passed = vol_args_v2;
-		printf("ioctl(%d, BTRFS_IOC_SUBVOL_CREATE_V2, ",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SUBVOL_CREATE_V2));
 		btrfs_print_vol_args_v2(&vol_args_v2, 1);
-		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SUBVOL_CREATE_V2,
+		ret = ioctl(btrfs_test_dir_fd, BTRFS_IOC_SUBVOL_CREATE_V2,
 		      &args_passed);
+		if (ret < 0)
+			perror_msg_and_fail("ioctl(BTRFS_IOC_SUBVOL_CREATE_V2) "
+					    "failed");
 		printf(" => {transid=%" PRI__u64 "}) = 0\n",
 			args_passed.transid);
 
@@ -448,8 +514,8 @@
 		strncpy(vol_args_v2.name, long_subvol_name, BTRFS_NAME_LEN);
 		vol_args_v2.fd = subvolfd;
 		args_passed = vol_args_v2;
-		printf("ioctl(%d, BTRFS_IOC_SNAP_CREATE_V2, ",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SNAP_CREATE_V2));
 		btrfs_print_vol_args_v2(&args_passed, 1);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SNAP_CREATE_V2,
 		      &args_passed);
@@ -460,15 +526,15 @@
 		strncpy(vol_args.name, long_subvol_name, 255);
 		vol_args.name[255] = 0;
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-		printf("ioctl(%d, BTRFS_IOC_SNAP_DESTROY, "
-		       "{fd=%d, name=\"%.*s\"}) = 0\n",
-		       btrfs_test_dir_fd, (int) vol_args.fd, 255, long_subvol_name);
+		printf("ioctl(%d, %s, {fd=%d, name=\"%.*s\"}) = 0\n",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SNAP_DESTROY),
+		       (int) vol_args.fd, 255, long_subvol_name);
 
 		strcpy(vol_args.name, subvol_name);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SNAP_DESTROY, &vol_args);
-		printf("ioctl(%d, BTRFS_IOC_SNAP_DESTROY, "
-		       "{fd=%d, name=\"%s\"}) = 0\n",
-		       btrfs_test_dir_fd, (int) vol_args.fd, subvol_name);
+		printf("ioctl(%d, %s, {fd=%d, name=\"%s\"}) = 0\n",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SNAP_DESTROY),
+		       (int) vol_args.fd, subvol_name);
 
 		close(subvolfd);
 	}
@@ -479,19 +545,18 @@
 btrfs_print_balance_args(struct btrfs_balance_args *args)
 {
 	printf("{profiles=");
-	printflags(btrfs_space_info_flags, args->profiles,
+	prfl_btrfs(btrfs_space_info_flags, args->profiles,
 		   "BTRFS_BLOCK_GROUP_???");
-	printf(", usage=%"PRI__u64 "%s, devid=%"PRI__u64 "%s, pstart=%"PRI__u64
-	       "%s, pend=%"PRI__u64 "%s, vstart=%"PRI__u64 "%s, vend=%"PRI__u64
-	       "%s, target=%"PRI__u64 "%s, flags=",
-		args->usage, maybe_print_uint64max(args->usage),
-		args->devid, maybe_print_uint64max(args->devid),
-		args->pstart, maybe_print_uint64max(args->pstart),
-		args->pend, maybe_print_uint64max(args->pend),
-		args->vstart, maybe_print_uint64max(args->vstart),
-		args->vend, maybe_print_uint64max(args->vend),
-		args->target, maybe_print_uint64max(args->target));
-	printflags(btrfs_balance_args, args->flags, "BTRFS_BALANCE_ARGS_???");
+	print_uint64(", usage=", args->usage);
+	printf(", devid=makedev(%u, %u)",
+	       major(args->devid), minor(args->devid));
+	print_uint64(", pstart=", args->pstart);
+	print_uint64(", pend=", args->pend);
+	print_uint64(", vstart=", args->vstart);
+	print_uint64(", vend=", args->vend);
+	print_uint64(", target=", args->target);
+	printf(", flags=");
+	prfl_btrfs(btrfs_balance_args, args->flags, "BTRFS_BALANCE_ARGS_???");
 	printf("}");
 }
 
@@ -531,25 +596,31 @@
 	struct btrfs_ioctl_vol_args vol_args = {};
 
 	ioctl(-1, BTRFS_IOC_BALANCE_CTL, 1);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_CTL, "
-	       "BTRFS_BALANCE_CTL_PAUSE) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, %sBTRFS_BALANCE_CTL_PAUSE%s) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_BALANCE_CTL),
+	       verbose_xlat ? "0x1 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	ioctl(-1, BTRFS_IOC_BALANCE_CTL, 2);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_CTL, "
-	       "BTRFS_BALANCE_CTL_CANCEL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, "
+	       "%sBTRFS_BALANCE_CTL_CANCEL%s) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_BALANCE_CTL),
+	       verbose_xlat ? "0x2 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	ioctl(-1, BTRFS_IOC_BALANCE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_BALANCE));
 
 	ioctl(-1, BTRFS_IOC_BALANCE, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_BALANCE));
 
 	/* struct btrfs_ioctl_balance_args */
 	ioctl(-1, BTRFS_IOC_BALANCE_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_BALANCE_V2));
 
-	printf("ioctl(-1, BTRFS_IOC_BALANCE_V2, {flags=");
-	printflags(btrfs_balance_flags, args.flags, "BTRFS_BALANCE_???");
+	printf("ioctl(-1, %s, {flags=", ioc(BTRFS_IOC_BALANCE_V2));
+	prfl_btrfs(btrfs_balance_flags, args.flags, "BTRFS_BALANCE_???");
 	printf(", data=");
 	btrfs_print_balance_args(&args.data);
 	printf(", meta=");
@@ -560,6 +631,8 @@
 	printf("}) = -1 EBADF (%m)\n");
 
 	if (write_ok) {
+		long ret;
+
 		args.flags = BTRFS_BALANCE_DATA | BTRFS_BALANCE_METADATA |
 			     BTRFS_BALANCE_SYSTEM;
 		args.data.flags = 0;
@@ -568,10 +641,18 @@
 		args.meta.profiles = 0;
 		args.sys.flags = 0;
 		args.sys.profiles = 0;
-		printf("ioctl(%d, BTRFS_IOC_BALANCE_V2, {flags=",
-			btrfs_test_dir_fd);
 
-		printflags(btrfs_balance_flags, args.flags,
+		/*
+		 * We should keep args the same for data in meta in case
+		 * volume-under-tests uses mixed groups data and metadata.
+		 */
+		args.meta.pend = -1ULL;
+		args.meta.vend = -1ULL;
+
+		printf("ioctl(%d, %s, {flags=",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_BALANCE_V2));
+
+		prfl_btrfs(btrfs_balance_flags, args.flags,
 			   "BTRFS_BALANCE_???");
 		printf(", data=");
 		btrfs_print_balance_args(&args.data);
@@ -579,20 +660,24 @@
 		btrfs_print_balance_args(&args.meta);
 		printf(", sys=");
 		btrfs_print_balance_args(&args.sys);
-		ioctl(btrfs_test_dir_fd, BTRFS_IOC_BALANCE_V2,  &args);
-		printf("} => {flags=");
-		printflags(btrfs_balance_flags, args.flags,
-			   "BTRFS_BALANCE_???");
-		printf(", state=");
-		printflags(btrfs_balance_state, args.state,
-			   "BTRFS_BALANCE_STATE_???");
-		printf(", data=");
-		btrfs_print_balance_args(&args.data);
-		printf(", meta=");
-		btrfs_print_balance_args(&args.meta);
-		printf(", sys=");
-		btrfs_print_balance_args(&args.sys);
-		printf("}) = 0\n");
+		ret = ioctl(btrfs_test_dir_fd, BTRFS_IOC_BALANCE_V2,  &args);
+		if (ret < 0) {
+			printf("}) = %s\n", sprintrc(ret));
+		} else {
+			printf("} => {flags=");
+			prfl_btrfs(btrfs_balance_flags, args.flags,
+				   "BTRFS_BALANCE_???");
+			printf(", state=");
+			prfl_btrfs(btrfs_balance_state, args.state,
+				   "BTRFS_BALANCE_STATE_???");
+			printf(", data=");
+			btrfs_print_balance_args(&args.data);
+			printf(", meta=");
+			btrfs_print_balance_args(&args.meta);
+			printf(", sys=");
+			btrfs_print_balance_args(&args.sys);
+			printf("}) = %ld\n", ret);
+		}
 	}
 }
 
@@ -615,38 +700,35 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_RESIZE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_RESIZE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_RESIZE));
 
 	strcpy(args.name, devid);
 	ioctl(-1, BTRFS_IOC_RESIZE, &args);
-	printf("ioctl(-1, BTRFS_IOC_RESIZE, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_RESIZE), (int) args.fd, args.name);
 
 	ioctl(-1, BTRFS_IOC_SCAN_DEV, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCAN_DEV, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCAN_DEV));
 
 	strcpy(args.name, devname);
 	ioctl(-1, BTRFS_IOC_SCAN_DEV, &args);
-	printf("ioctl(-1, BTRFS_IOC_SCAN_DEV, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCAN_DEV), (int) args.fd, args.name);
 
 	ioctl(-1, BTRFS_IOC_ADD_DEV, NULL);
-	printf("ioctl(-1, BTRFS_IOC_ADD_DEV, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_ADD_DEV));
 
 	ioctl(-1, BTRFS_IOC_ADD_DEV, &args);
-	printf("ioctl(-1, BTRFS_IOC_ADD_DEV, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_ADD_DEV), (int) args.fd, args.name);
 
 	ioctl(-1, BTRFS_IOC_RM_DEV, NULL);
-	printf("ioctl(-1, BTRFS_IOC_RM_DEV, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_RM_DEV));
 
 	ioctl(-1, BTRFS_IOC_RM_DEV, &args);
-	printf("ioctl(-1, BTRFS_IOC_RM_DEV, "
-	       "{fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
-	       (int) args.fd, args.name);
+	printf("ioctl(-1, %s, {fd=%d, name=\"%s\"}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_RM_DEV), (int) args.fd, args.name);
 
 }
 
@@ -667,17 +749,21 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_CLONE, clone_fd);
-	printf("ioctl(-1, BTRFS_IOC_CLONE or FICLONE, %x) = -1 EBADF (%m)\n",
-		clone_fd);
+	printf("ioctl(-1, %s, %x) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_CLONE, "BTRFS_IOC_CLONE or FICLONE"),
+	       clone_fd);
 
 	ioctl(-1, BTRFS_IOC_CLONE_RANGE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_CLONE_RANGE or FICLONERANGE, "
-	       "NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_CLONE_RANGE,
+			    "BTRFS_IOC_CLONE_RANGE or FICLONERANGE"));
 
 	ioctl(-1, BTRFS_IOC_CLONE_RANGE, &args);
-	printf("ioctl(-1, BTRFS_IOC_CLONE_RANGE or FICLONERANGE, "
+	printf("ioctl(-1, %s, "
 	       "{src_fd=%d, src_offset=%" PRI__u64 ", src_length=%" PRI__u64
 	       ", dest_offset=%" PRI__u64 "}) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_CLONE_RANGE,
+			    "BTRFS_IOC_CLONE_RANGE or FICLONERANGE"),
 		(int) args.src_fd, args.src_offset, args.src_length,
 		args.dest_offset);
 }
@@ -686,16 +772,17 @@
 #define BTRFS_INVALID_COMPRESS (BTRFS_COMPRESS_TYPES + 1)
 
 static void
-btrfs_print_defrag_range_args(struct btrfs_ioctl_defrag_range_args *args)
+btrfs_print_defrag_range_args(struct btrfs_ioctl_defrag_range_args *args,
+			      bool compress_type_known)
 {
-	printf("{start=%" PRIu64 ", len=%" PRIu64 "%s, flags=",
-		(uint64_t) args->start, (uint64_t) args->len,
-		maybe_print_uint64max(args->len));
+	printf("{start=%" PRIu64, (uint64_t) args->start);
+	print_uint64(", len=", args->len);
 
-	printflags(btrfs_defrag_flags, args->flags, "BTRFS_DEFRAG_RANGE_???");
+	printf(", flags=");
+	prfl_btrfs(btrfs_defrag_flags, args->flags, "BTRFS_DEFRAG_RANGE_???");
 	printf(", extent_thresh=%u, compress_type=", args->extent_thresh);
-	printxval(btrfs_compress_types, args->compress_type,
-		  "BTRFS_COMPRESS_???");
+	prxval_btrfs(btrfs_compress_types, args->compress_type,
+		     "BTRFS_COMPRESS_???", compress_type_known);
 	printf("}");
 }
 
@@ -721,29 +808,30 @@
 	 * actually consume it.
 	 */
 	ioctl(-1, BTRFS_IOC_DEFRAG, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEFRAG));
 
 	ioctl(-1, BTRFS_IOC_DEFRAG, &vol_args);
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEFRAG));
 
 	/* struct btrfs_ioctl_defrag_range_args */
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEFRAG_RANGE));
 
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, ");
-	btrfs_print_defrag_range_args(&args);
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_DEFRAG_RANGE));
+	btrfs_print_defrag_range_args(&args, true);
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, &args);
 	printf(") = -1 EBADF (%m)\n");
 
 	args.compress_type = BTRFS_INVALID_COMPRESS;
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, ");
-	btrfs_print_defrag_range_args(&args);
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_DEFRAG_RANGE));
+	btrfs_print_defrag_range_args(&args, false);
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, &args);
 	printf(") = -1 EBADF (%m)\n");
 
 	args.len--;
-	printf("ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, ");
-	btrfs_print_defrag_range_args(&args);
+	printf("ioctl(-1, %s, ", ioc(BTRFS_IOC_DEFRAG_RANGE));
+	btrfs_print_defrag_range_args(&args, false);
 	ioctl(-1, BTRFS_IOC_DEFRAG_RANGE, &args);
 	printf(") = -1 EBADF (%m)\n");
 }
@@ -761,18 +849,28 @@
 btrfs_print_objectid(uint64_t objectid)
 {
 	const char *str = xlookup(btrfs_tree_objectids, objectid);
-	printf("%" PRIu64, objectid);
-	if (str)
-		printf(" /* %s */", str);
+	if (str) {
+		if (verbose_xlat)
+			printf("%" PRIu64 " /* %s */", objectid, str);
+		else
+			printf("%s", str);
+	} else {
+		printf("%" PRIu64, objectid);
+	}
 }
 
 static void
 btrfs_print_key_type(uint32_t type)
 {
 	const char *str = xlookup(btrfs_key_types, type);
-	printf("%u", type);
-	if (str)
-		printf(" /* %s */", str);
+	if (str) {
+		if (verbose_xlat)
+			printf("%u /* %s */", type, str);
+		else
+			printf("%s", str);
+	} else {
+		printf("%u", type);
+	}
 }
 
 static void
@@ -788,18 +886,10 @@
 		printf(", max_objectid=");
 		btrfs_print_objectid(key->max_objectid);
 	}
-	if (key->min_offset)
-		printf(", min_offset=%" PRI__u64 "%s",
-		       key->min_offset, maybe_print_uint64max(key->min_offset));
-	if (key->max_offset)
-		printf(", max_offset=%" PRI__u64 "%s",
-		       key->max_offset, maybe_print_uint64max(key->max_offset));
-	if (key->min_transid)
-		printf(", min_transid=%" PRI__u64 "%s", key->min_transid,
-		       maybe_print_uint64max(key->min_transid));
-	if (key->max_transid)
-		printf(", max_transid=%" PRI__u64 "%s", key->max_transid,
-		       maybe_print_uint64max(key->max_transid));
+	print_uint64(", min_offset=", key->min_offset);
+	print_uint64(", max_offset=", key->max_offset);
+	print_uint64(", min_transid=", key->min_transid);
+	print_uint64(", max_transid=", key->max_transid);
 	printf(", min_type=");
 	btrfs_print_key_type(key->min_type);
 	printf(", max_type=");
@@ -814,7 +904,7 @@
 	if (verbose) {
 		uint64_t i;
 		uint64_t off = 0;
-		printf("[");
+		printf("buf=[");
 		for (i = 0; i < key->nr_items; i++) {
 			struct btrfs_ioctl_search_header *sh;
 			sh = (typeof(sh))(buf + off);
@@ -859,19 +949,21 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_TREE_SEARCH));
 
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, NULL);
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_TREE_SEARCH_V2));
 
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -880,13 +972,13 @@
 	key_reference.min_objectid = 6;
 	key_reference.max_objectid = 7;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -895,13 +987,13 @@
 	key_reference.min_offset++;
 	key_reference.max_offset--;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -910,13 +1002,13 @@
 	key_reference.min_transid++;
 	key_reference.max_transid--;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -925,13 +1017,13 @@
 	key_reference.min_type = 1;
 	key_reference.max_type = 12;
 	search_args.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH));
 	btrfs_print_search_key(&search_args.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH, &search_args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	search_args_v2.key = key_reference;
-	printf("ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, {");
+	printf("ioctl(-1, %s, {", ioc(BTRFS_IOC_TREE_SEARCH_V2));
 	btrfs_print_search_key(&search_args_v2.key);
 	ioctl(-1, BTRFS_IOC_TREE_SEARCH_V2, &search_args_v2);
 	printf(", buf_size=%" PRIu64 "}) = -1 EBADF (%m)\n",
@@ -950,11 +1042,11 @@
 		key_reference.max_offset = -1ULL;
 
 		search_args.key = key_reference;
-		printf("ioctl(%d, BTRFS_IOC_TREE_SEARCH, {",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_TREE_SEARCH));
 		btrfs_print_search_key(&search_args.key);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_TREE_SEARCH, &search_args);
-		printf("} => {key={nr_items=%u}, buf=",
+		printf("} => {key={nr_items=%u}, ",
 			search_args.key.nr_items);
 		btrfs_print_tree_search_buf(&search_args.key, search_args.buf,
 					    sizeof(search_args.buf));
@@ -966,12 +1058,12 @@
 
 		args->key = key_reference;
 		args->buf_size = bufsize;
-		printf("ioctl(%d, BTRFS_IOC_TREE_SEARCH_V2, {",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_TREE_SEARCH_V2));
 		btrfs_print_search_key(&key_reference);
 		printf(", buf_size=%" PRIu64 "}", (uint64_t) args->buf_size);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_TREE_SEARCH_V2, args);
-		printf(" => {key={nr_items=%u}, buf_size=%" PRIu64 ", buf=",
+		printf(" => {key={nr_items=%u}, buf_size=%" PRIu64 ", ",
 			args->key.nr_items, (uint64_t)args->buf_size);
 		btrfs_print_tree_search_buf(&args->key, args->buf,
 					    args->buf_size);
@@ -979,8 +1071,8 @@
 
 		args->key = key_reference;
 		args->buf_size = sizeof(struct btrfs_ioctl_search_header);
-		printf("ioctl(%d, BTRFS_IOC_TREE_SEARCH_V2, {",
-			btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_TREE_SEARCH_V2));
 		btrfs_print_search_key(&args->key);
 		printf(", buf_size=%" PRIu64 "}", (uint64_t)args->buf_size);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_TREE_SEARCH_V2, args);
@@ -1003,9 +1095,10 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_INO_LOOKUP, NULL);
-	printf("ioctl(-1, BTRFS_IOC_INO_LOOKUP, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_INO_LOOKUP));
 
-	printf("ioctl(-1, BTRFS_IOC_INO_LOOKUP, {treeid=");
+	printf("ioctl(-1, %s, {treeid=", ioc(BTRFS_IOC_INO_LOOKUP));
 	btrfs_print_objectid(args.treeid);
 	printf(", objectid=");
 	btrfs_print_objectid(args.objectid);
@@ -1013,8 +1106,8 @@
 	printf("}) = -1 EBADF (%m)\n");
 
 	if (btrfs_test_root) {
-		printf("ioctl(%d, BTRFS_IOC_INO_LOOKUP, {treeid=",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, {treeid=",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_INO_LOOKUP));
 		btrfs_print_objectid(args.treeid);
 		printf(", objectid=");
 		btrfs_print_objectid(args.objectid);
@@ -1033,20 +1126,20 @@
 	struct btrfs_ioctl_space_args args = {};
 
 	ioctl(-1, BTRFS_IOC_SPACE_INFO, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SPACE_INFO, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SPACE_INFO));
 
 	ioctl(-1, BTRFS_IOC_SPACE_INFO, &args);
-	printf("ioctl(-1, BTRFS_IOC_SPACE_INFO, "
-	       "{space_slots=%" PRI__u64 "}) = -1 EBADF (%m)\n",
-		args.space_slots);
+	printf("ioctl(-1, %s, {space_slots=%" PRI__u64 "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SPACE_INFO), args.space_slots);
 
 	if (btrfs_test_root) {
 		struct btrfs_ioctl_space_args args_passed;
 		struct btrfs_ioctl_space_args *argsp;
 		args_passed = args;
-		printf("ioctl(%d, BTRFS_IOC_SPACE_INFO, "
-		       "{space_slots=%" PRI__u64 "}",
-		       btrfs_test_dir_fd, args_passed.space_slots);
+		printf("ioctl(%d, %s, {space_slots=%" PRI__u64 "}",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SPACE_INFO),
+		       args_passed.space_slots);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SPACE_INFO, &args_passed);
 		printf(" => {total_spaces=%" PRI__u64 "}) = 0\n",
 			args_passed.total_spaces);
@@ -1058,22 +1151,22 @@
 
 		*argsp = args;
 		argsp->space_slots = args_passed.total_spaces;
-		printf("ioctl(%d, BTRFS_IOC_SPACE_INFO, "
-		       "{space_slots=%" PRI__u64 "}",
-		       btrfs_test_dir_fd, argsp->space_slots);
+		printf("ioctl(%d, %s, {space_slots=%" PRI__u64 "}",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_SPACE_INFO),
+		       argsp->space_slots);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SPACE_INFO, argsp);
-		printf(" => {total_spaces=%" PRI__u64 ", spaces=",
+		printf(" => {total_spaces=%" PRI__u64 ", ",
 			argsp->total_spaces);
 		if (verbose) {
 			unsigned int i;
-			printf("[");
+			printf("spaces=[");
 			for (i = 0; i < argsp->total_spaces; i++) {
 				struct btrfs_ioctl_space_info *info;
 				info = &argsp->spaces[i];
 				if (i)
 					printf(", ");
 				printf("{flags=");
-				printflags(btrfs_space_info_flags, info->flags,
+				prfl_btrfs(btrfs_space_info_flags, info->flags,
 					   "BTRFS_SPACE_INFO_???");
 				printf(", total_bytes=%" PRI__u64
 				       ", used_bytes=%" PRI__u64 "}",
@@ -1106,25 +1199,28 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_SCRUB, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SCRUB));
 
 	ioctl(-1, BTRFS_IOC_SCRUB_CANCEL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB_CANCEL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SCRUB_CANCEL));
 
-	printf("ioctl(-1, BTRFS_IOC_SCRUB, {devid=%" PRI__u64 ", start=%"
-		PRI__u64 "%s, end=%" PRI__u64 "%s, flags=",
-		args.devid, args.start, maybe_print_uint64max(args.start),
-		args.end, maybe_print_uint64max(args.end));
-	printflags(btrfs_scrub_flags, args.flags, "BTRFS_SCRUB_???");
+	printf("ioctl(-1, %s, {devid=makedev(%u, %u)",
+	       ioc(BTRFS_IOC_SCRUB), major(args.devid), minor(args.devid));
+	print_uint64(", start=", args.start);
+	print_uint64(", end=", args.end);
+	printf(", flags=");
+	prfl_btrfs(btrfs_scrub_flags, args.flags, "BTRFS_SCRUB_???");
 	ioctl(-1, BTRFS_IOC_SCRUB, &args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCRUB_PROGRESS));
 
 	ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, &args);
-	printf("ioctl(-1, BTRFS_IOC_SCRUB_PROGRESS, "
-	       "{devid=%" PRI__u64 "}) = -1 EBADF (%m)\n", args.devid);
+	printf("ioctl(-1, %s, {devid=makedev(%u, %u)}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SCRUB_PROGRESS),
+	       major(args.devid), minor(args.devid));
 }
 
 /*
@@ -1140,12 +1236,14 @@
 	memcpy(&args.uuid, uuid_reference, BTRFS_UUID_SIZE);
 
 	ioctl(-1, BTRFS_IOC_DEV_INFO, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEV_INFO, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEV_INFO));
 
 	ioctl(-1, BTRFS_IOC_DEV_INFO, &args);
-	printf("ioctl(-1, BTRFS_IOC_DEV_INFO, "
-	       "{devid=%" PRI__u64 ", uuid=%s}) = -1 EBADF (%m)\n",
-		args.devid, uuid_reference_string);
+	printf("ioctl(-1, %s, "
+	       "{devid=makedev(%u, %u), uuid=%s}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEV_INFO), major(args.devid), minor(args.devid),
+	       uuid_reference_string);
 }
 
 /*
@@ -1177,32 +1275,32 @@
 
 
 	ioctl(-1, BTRFS_IOC_INO_PATHS, NULL);
-	printf("ioctl(-1, BTRFS_IOC_INO_PATHS, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_INO_PATHS));
 
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, NULL);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_LOGICAL_INO));
 
 	ioctl(-1, BTRFS_IOC_INO_PATHS, &args);
-	printf("ioctl(-1, BTRFS_IOC_INO_PATHS, "
-	       "{inum=%" PRI__u64 ", size=%" PRI__u64
+	printf("ioctl(-1, %s, {inum=%" PRI__u64 ", size=%" PRI__u64
 	       ", fspath=NULL}) = -1 EBADF (%m)\n",
-	       args.inum, args.size);
+	       ioc(BTRFS_IOC_INO_PATHS), args.inum, args.size);
 
 	args.fspath = (uintptr_t) buf;
 	ioctl(-1, BTRFS_IOC_INO_PATHS, &args);
-	printf("ioctl(-1, BTRFS_IOC_INO_PATHS, "
-	       "{inum=%" PRI__u64 ", size=%" PRI__u64
+	printf("ioctl(-1, %s, {inum=%" PRI__u64 ", size=%" PRI__u64
 	       ", fspath=0x%" PRI__x64 "}) = -1 EBADF (%m)\n",
-	       args.inum, args.size, args.fspath);
+	       ioc(BTRFS_IOC_INO_PATHS), args.inum, args.size, args.fspath);
 
 	args.fspath = 0;
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, &args);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+	printf("ioctl(-1, %s, {logical=%" PRI__u64
 	       ", size=%" PRI__u64 ", reserved=[0xdeadc0defacefeeb"
 	       ", 0xdeadc0defacefeec, 0xdeadc0defacefeed]"
 	       ", flags=0xdeadc0defacefeee /* BTRFS_LOGICAL_INO_ARGS_??? */"
 	       ", inodes=NULL}) = -1 EBADF (%m)\n",
-	       args.inum, args.size);
+	       ioc(BTRFS_IOC_LOGICAL_INO), args.inum, args.size);
 
 	args.fspath = (uintptr_t) buf;
 	args.reserved[0] = 0;
@@ -1215,11 +1313,13 @@
 			1;
 
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, &args);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+	printf("ioctl(-1, %s, {logical=%" PRI__u64
 	       ", size=%" PRI__u64 ", reserved=[0, 0xdeadc0defacefeec, 0]"
-	       ", flags=BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET"
+	       ", flags=%sBTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET%s"
 	       ", inodes=0x%" PRI__x64 "}) = -1 EBADF (%m)\n",
-	       args.inum, args.size, args.fspath);
+	       ioc(BTRFS_IOC_LOGICAL_INO), args.inum, args.size,
+	       verbose_xlat ? "0x1 /* " : "", verbose_xlat ? " */" : "",
+	       args.fspath);
 
 	args.reserved[1] = 0;
 #ifdef HAVE_BTRFS_IOCTL_LOGICAL_INO_ARGS
@@ -1230,9 +1330,10 @@
 			0;
 
 	ioctl(-1, BTRFS_IOC_LOGICAL_INO, &args);
-	printf("ioctl(-1, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+	printf("ioctl(-1, %s, {logical=%" PRI__u64
 	       ", size=%" PRI__u64 ", flags=0, inodes=0x%" PRI__x64
-	       "}) = -1 EBADF (%m)\n", args.inum, args.size, args.fspath);
+	       "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_LOGICAL_INO), args.inum, args.size, args.fspath);
 
 #ifdef HAVE_LINUX_FIEMAP_H
 	if (btrfs_test_root) {
@@ -1248,17 +1349,16 @@
 			perror_msg_and_fail("fstat failed");
 
 		args.inum = si.st_ino;
-		printf("ioctl(%d, BTRFS_IOC_INO_PATHS, "
-		       "{inum=%" PRI__u64 ", size=%" PRI__u64
+		printf("ioctl(%d, %s, {inum=%" PRI__u64 ", size=%" PRI__u64
 		       ", fspath=0x%" PRI__x64 "}",
-		       btrfs_test_dir_fd, args.inum, args.size,
-		       args.fspath);
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_INO_PATHS),
+		       args.inum, args.size, args.fspath);
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_INO_PATHS, &args);
-		printf(" => {fspath={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, val=",
+		printf(" => {fspath={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, ",
 			data->bytes_left, data->bytes_missing, data->elem_cnt,
 			data->elem_missed);
 		if (verbose) {
-			printf("[\"strace-test\"]");
+			printf("val=[\"%s\"]", dir_name);
 		} else
 			printf("...");
 		printf("}}) = 0\n");
@@ -1280,7 +1380,7 @@
 		 */
 		fsync(fd);
 		ioctl(fd, BTRFS_IOC_SYNC, NULL);
-		printf("ioctl(%d, BTRFS_IOC_SYNC) = 0\n", fd);
+		printf("ioctl(%d, %s) = 0\n", fd, ioc(BTRFS_IOC_SYNC));
 
 		size = sizeof(*fiemap) + 2 * sizeof(fiemap->fm_extents[0]);
 		fiemap = malloc(size);
@@ -1292,18 +1392,19 @@
 		fiemap->fm_extent_count = 2;
 
 		/* This is also a live test for FIEMAP */
-		printf("ioctl(%d, FS_IOC_FIEMAP, {fm_start=%" PRI__u64
+		printf("ioctl(%d, %s, {fm_start=%" PRI__u64
 		       ", fm_length=%" PRI__u64 ", fm_flags=",
-		       fd, fiemap->fm_start, fiemap->fm_length);
-		printflags(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
+		       fd, ioc(FS_IOC_FIEMAP),
+		       fiemap->fm_start, fiemap->fm_length);
+		prfl_btrfs(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
 		printf(", fm_extent_count=%u}", fiemap->fm_extent_count);
 		ioctl(fd, FS_IOC_FIEMAP, fiemap);
 		printf(" => {fm_flags=");
-		printflags(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
-		printf(", fm_mapped_extents=%u, fm_extents=",
+		prfl_btrfs(fiemap_flags, fiemap->fm_flags, "FIEMAP_FLAG_???");
+		printf(", fm_mapped_extents=%u, ",
 			fiemap->fm_mapped_extents);
 		if (verbose) {
-			printf("[");
+			printf("fm_extents=[");
 			unsigned int i;
 			for (i = 0; i < fiemap->fm_mapped_extents; i++) {
 				struct fiemap_extent *fe;
@@ -1316,7 +1417,7 @@
 				       ", ",
 				       fe->fe_logical, fe->fe_physical,
 				       fe->fe_length);
-				printflags(fiemap_extent_flags, fe->fe_flags,
+				prfl_btrfs(fiemap_extent_flags, fe->fe_flags,
 					   "FIEMAP_EXTENT_???");
 				printf("}");
 			}
@@ -1326,15 +1427,16 @@
 		printf("}) = 0\n");
 
 		args.inum = fiemap->fm_extents[0].fe_physical;
-		printf("ioctl(%d, BTRFS_IOC_LOGICAL_INO, {logical=%" PRI__u64
+		printf("ioctl(%d, %s, {logical=%" PRI__u64
 		       ", size=%" PRI__u64 ", flags=0, inodes=0x%" PRI__x64 "}",
-		       fd, args.inum, args.size, args.fspath);
+		       fd, ioc(BTRFS_IOC_LOGICAL_INO),
+		       args.inum, args.size, args.fspath);
 		ioctl(fd, BTRFS_IOC_LOGICAL_INO, &args);
-		printf(" => {inodes={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, val=",
+		printf(" => {inodes={bytes_left=%u, bytes_missing=%u, elem_cnt=%u, elem_missed=%u, ",
 			data->bytes_left, data->bytes_missing, data->elem_cnt,
 			data->elem_missed);
 		if (verbose) {
-			printf("[{inum=%llu, offset=0, root=5}]",
+			printf("val=[{inum=%llu, offset=0, root=5}]",
 			       (unsigned long long) si.st_ino);
 		} else
 			printf("...");
@@ -1359,18 +1461,23 @@
 			.nsec = 12345,
 		},
 	};
+	int saved_errno;
+
 	memcpy(&args.uuid, uuid_reference, BTRFS_UUID_SIZE);
 
 	ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, "
-	       "NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_RECEIVED_SUBVOL));
 
 	ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, &args);
-	printf("ioctl(-1, BTRFS_IOC_SET_RECEIVED_SUBVOL, "
-	       "{uuid=%s, stransid=%" PRI__u64 ", stime=%" PRI__u64
-	       ".%u, flags=0}) = -1 EBADF (%m)\n",
-	       uuid_reference_string, args.stransid, args.stime.sec,
-	       args.stime.nsec);
+	saved_errno = errno;
+	printf("ioctl(-1, %s, {uuid=%s, stransid=%" PRI__u64
+	       ", stime={sec=%" PRI__u64 ", nsec=%u}",
+	       ioc(BTRFS_IOC_SET_RECEIVED_SUBVOL), uuid_reference_string,
+	       args.stransid, args.stime.sec, args.stime.nsec);
+	print_time_t_nsec(args.stime.sec, args.stime.nsec, true);
+	errno = saved_errno;
+	printf(", flags=0}) = -1 EBADF (%m)\n");
 }
 
 /*
@@ -1388,29 +1495,25 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_SEND, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SEND, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_SEND));
 
-	printf("ioctl(-1, BTRFS_IOC_SEND, "
-	       "{send_fd=%d, clone_sources_count=%" PRI__u64
-	       ", clone_sources=",
+	printf("ioctl(-1, %s, {send_fd=%d, clone_sources_count=%" PRI__u64
+	       ", clone_sources=NULL",
+	       ioc(BTRFS_IOC_SEND),
 	       (int) args.send_fd, args.clone_sources_count);
-	if (verbose)
-		printf("NULL");
-	else
-		printf("...");
 	printf(", parent_root=");
 	btrfs_print_objectid(args.parent_root);
 	printf(", flags=");
-	printflags(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
+	prfl_btrfs(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
 	ioctl(-1, BTRFS_IOC_SEND, &args);
 	printf("}) = -1 EBADF (%m)\n");
 
 	args.clone_sources_count = 2;
 	args.clone_sources = (__u64 *) (void *) u64_array;
 
-	printf("ioctl(-1, BTRFS_IOC_SEND, "
-	       "{send_fd=%d, clone_sources_count=%" PRI__u64
+	printf("ioctl(-1, %s, {send_fd=%d, clone_sources_count=%" PRI__u64
 	       ", clone_sources=",
+	       ioc(BTRFS_IOC_SEND),
 	       (int) args.send_fd, args.clone_sources_count);
 	if (verbose) {
 		printf("[");
@@ -1419,11 +1522,11 @@
 		btrfs_print_objectid(u64_array[1]);
 		printf("]");
 	} else
-		printf("...");
+		printf("%p", args.clone_sources);
 	printf(", parent_root=");
 	btrfs_print_objectid(args.parent_root);
 	printf(", flags=");
-	printflags(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
+	prfl_btrfs(btrfs_send_flags, args.flags, "BTRFS_SEND_FLAGS_???");
 	ioctl(-1, BTRFS_IOC_SEND, &args);
 	printf("}) = -1 EBADF (%m)\n");
 }
@@ -1440,26 +1543,37 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL));
 
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "BTRFS_QUOTA_CTL_ENABLE}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {cmd=%sBTRFS_QUOTA_CTL_ENABLE%s}) "
+	       "= -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL),
+	       verbose_xlat ? "0x1 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	args.cmd = 2;
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "BTRFS_QUOTA_CTL_DISABLE}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {cmd=%sBTRFS_QUOTA_CTL_DISABLE%s}) "
+	       "= -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL),
+	       verbose_xlat ? "0x2 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	args.cmd = 3;
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "BTRFS_QUOTA_CTL_RESCAN__NOTUSED}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, "
+	       "{cmd=%sBTRFS_QUOTA_CTL_RESCAN__NOTUSED%s}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL),
+	       verbose_xlat ? "0x3 /* " : "",
+	       verbose_xlat ? " */" : "");
 
 	args.cmd = 4;
 	ioctl(-1, BTRFS_IOC_QUOTA_CTL, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_CTL, "
-	       "0x4 /* BTRFS_QUOTA_CTL_??? */}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, "
+	       "{cmd=0x4 /* BTRFS_QUOTA_CTL_??? */}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_CTL));
 }
 
 /*
@@ -1476,12 +1590,14 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QGROUP_ASSIGN));
 
 	ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, &args);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_ASSIGN, "
+	printf("ioctl(-1, %s, "
 	       "{assign=%" PRI__u64 ", src=%" PRI__u64 ", dst=%" PRI__u64
-	       "}) = -1 EBADF (%m)\n", args.assign, args.src, args.dst);
+	       "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QGROUP_ASSIGN), args.assign, args.src, args.dst);
 }
 
 /*
@@ -1497,12 +1613,13 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QGROUP_CREATE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_CREATE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_QGROUP_CREATE));
 
 	ioctl(-1, BTRFS_IOC_QGROUP_CREATE, &args);
-	printf("ioctl(-1, BTRFS_IOC_QGROUP_CREATE, "
+	printf("ioctl(-1, %s, "
 	       "{create=%" PRI__u64 ", qgroupid=%" PRI__u64
-	       "}) = -1 EBADF (%m)\n", args.create, args.qgroupid);
+	       "}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QGROUP_CREATE), args.create, args.qgroupid);
 }
 
 /*
@@ -1519,13 +1636,15 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_RESCAN));
 
 	ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, &args);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_RESCAN, "
-	       "{flags=0}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {flags=0}) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_RESCAN));
 	ioctl(-1, BTRFS_IOC_QUOTA_RESCAN_WAIT, NULL);
-	printf("ioctl(-1, BTRFS_IOC_QUOTA_RESCAN_WAIT) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_QUOTA_RESCAN_WAIT));
 
 }
 
@@ -1542,20 +1661,21 @@
 	char label[BTRFS_LABEL_SIZE] = "btrfs-label";
 
 	ioctl(-1, BTRFS_IOC_SET_FSLABEL, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SET_FSLABEL, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_FSLABEL));
 
 	ioctl(-1, BTRFS_IOC_SET_FSLABEL, label);
-	printf("ioctl(-1, BTRFS_IOC_SET_FSLABEL, \"%s\") = -1 EBADF (%m)\n",
-		label);
+	printf("ioctl(-1, %s, \"%s\") = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_FSLABEL), label);
 
 	if (write_ok) {
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_SET_FSLABEL, label);
-		printf("ioctl(%d, BTRFS_IOC_SET_FSLABEL, \"%s\") = 0\n",
-			btrfs_test_dir_fd, label);
+		printf("ioctl(%d, %s, \"%s\") = 0\n",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_SET_FSLABEL), label);
 
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_FSLABEL, label);
-		printf("ioctl(%d, BTRFS_IOC_GET_FSLABEL, \"%s\") = 0\n",
-			btrfs_test_dir_fd, label);
+		printf("ioctl(%d, %s, \"%s\") = 0\n",
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_GET_FSLABEL), label);
 	}
 }
 
@@ -1573,12 +1693,13 @@
 	};
 
 	ioctl(-1, BTRFS_IOC_GET_DEV_STATS, NULL);
-	printf("ioctl(-1, BTRFS_IOC_GET_DEV_STATS, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_GET_DEV_STATS));
 
-	printf("ioctl(-1, BTRFS_IOC_GET_DEV_STATS, {devid=%" PRI__u64
-		", nr_items=%" PRI__u64 ", flags=",
-		args.devid, args.nr_items);
-	printflags(btrfs_dev_stats_flags, args.flags,
+	printf("ioctl(-1, %s, {devid=makedev(%u, %u)"
+	       ", nr_items=%" PRI__u64 ", flags=",
+	       ioc(BTRFS_IOC_GET_DEV_STATS),
+	       major(args.devid), minor(args.devid), args.nr_items);
+	prfl_btrfs(btrfs_dev_stats_flags, args.flags,
 		     "BTRFS_DEV_STATS_???");
 	ioctl(-1, BTRFS_IOC_GET_DEV_STATS, &args);
 	printf("}) = -1 EBADF (%m)\n");
@@ -1586,24 +1707,33 @@
 	if (write_ok) {
 		unsigned int i;
 		args.flags = BTRFS_DEV_STATS_RESET;
-		printf("ioctl(%d, BTRFS_IOC_GET_DEV_STATS, {devid=%" PRI__u64
+		printf("ioctl(%d, %s, {devid=makedev(%u, %u)"
 			", nr_items=%" PRI__u64 ", flags=",
-			btrfs_test_dir_fd, args.devid, args.nr_items);
-		printflags(btrfs_dev_stats_flags, args.flags,
+			btrfs_test_dir_fd, ioc(BTRFS_IOC_GET_DEV_STATS),
+			major(args.devid), minor(args.devid), args.nr_items);
+		prfl_btrfs(btrfs_dev_stats_flags, args.flags,
 			     "BTRFS_DEV_STATS_???");
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_DEV_STATS, &args);
 		printf("} => {nr_items=%" PRI__u64 ", flags=",
 			args.nr_items);
-		printflags(btrfs_dev_stats_flags, args.flags,
+		prfl_btrfs(btrfs_dev_stats_flags, args.flags,
 			   "BTRFS_DEV_STATS_???");
 		printf(", [");
 		for (i = 0; i < args.nr_items; i++) {
 			const char *name = xlookup(btrfs_dev_stats_values, i);
 			if (i)
 				printf(", ");
+
+			if (name) {
+				if (verbose_xlat)
+					printf("[%u /* %s */] = ", i, name);
+				else
+					printf("[%s] = ", name);
+			} else {
+				printf("[%u] = ", i);
+			}
+
 			printf("%" PRI__u64, args.values[i]);
-			if (name)
-				printf(" /* %s */", name);
 		}
 		printf("]}) = 0\n");
 	}
@@ -1627,22 +1757,38 @@
 
 	/* struct btrfs_ioctl_dev_replace_args */
 	ioctl(-1, BTRFS_IOC_DEV_REPLACE, NULL);
-	printf("ioctl(-1, BTRFS_IOC_DEV_REPLACE, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEV_REPLACE));
 
-	ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args);
-	printf("ioctl(-1, BTRFS_IOC_DEV_REPLACE, "
-	       "{cmd=BTRFS_IOCTL_DEV_REPLACE_CMD_START, start={srcdevid=%"
-	       PRI__u64 ", cont_reading_from_srcdev_mode=%" PRI__u64
-	       ", srcdev_name=\"%s\", tgtdev_name=\"%s\"}}) = -1 EBADF (%m)\n",
-	       args.start.srcdevid,
-	       args.start.cont_reading_from_srcdev_mode,
-	       (char *)args.start.srcdev_name,
-	       (char *)args.start.tgtdev_name);
+	for (unsigned long i = 0; i < 3; i++) {
+		int saved_errno;
+
+		args.start.cont_reading_from_srcdev_mode = i;
+		ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args);
+		saved_errno = errno;
+		printf("ioctl(-1, %s, "
+		       "{cmd=%sBTRFS_IOCTL_DEV_REPLACE_CMD_START%s"
+		       ", start={srcdevid=makedev(%u, %u)"
+		       ", cont_reading_from_srcdev_mode=",
+		       ioc(BTRFS_IOC_DEV_REPLACE),
+		       verbose_xlat ? "0 /* " : "", verbose_xlat ? " */" : "",
+		       major(args.start.srcdevid), minor(args.start.srcdevid));
+		prxval_btrfs(btrfs_cont_reading_from_srcdev_mode,
+			     args.start.cont_reading_from_srcdev_mode,
+			     "BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV"
+			     "_MODE_???", i < 2);
+		errno = saved_errno;
+		printf(", srcdev_name=\"%s\", tgtdev_name=\"%s\"}}) "
+		       "= -1 EBADF (%m)\n",
+		       (char *)args.start.srcdev_name,
+		       (char *)args.start.tgtdev_name);
+	}
 
 	args.cmd = 1;
 	ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args);
-	printf("ioctl(-1, BTRFS_IOC_DEV_REPLACE, "
-	       "{cmd=BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS}) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, {cmd=%sBTRFS_IOCTL_DEV_REPLACE_CMD_STATUS%s}) "
+	       "= -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_DEV_REPLACE),
+	       verbose_xlat ? "0x1 /* " : "", verbose_xlat ? " */" : "");
 }
 
 static void
@@ -1656,13 +1802,16 @@
 	struct file_dedupe_range *argsp;
 
 	ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME, NULL);
-	printf("ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
-	       "NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+			    "BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE"));
 
-	printf("ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
+	printf("ioctl(-1, %s, "
 	       "{src_offset=%" PRIu64
 	       ", src_length=%" PRIu64
 	       ", dest_count=%hu, info=[]",
+	       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+			    "BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE"),
 		(uint64_t)args.src_offset,
 		(uint64_t)args.src_length, args.dest_count);
 	ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME, &args);
@@ -1682,10 +1831,12 @@
 	argsp->info[2].dest_fd = 2;
 	argsp->info[2].dest_offset = 20480;
 
-	printf("ioctl(-1, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
+	printf("ioctl(-1, %s, "
 	       "{src_offset=%" PRIu64
 	       ", src_length=%" PRIu64
 	       ", dest_count=%hu, info=",
+	       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+			    "BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE"),
 		(int64_t)argsp->src_offset,
 		(uint64_t)argsp->src_length, argsp->dest_count);
 		printf("[{dest_fd=%" PRId64 ", dest_offset=%" PRIu64
@@ -1744,9 +1895,12 @@
 		argsp->info[2].dest_fd = fd2;
 		argsp->info[2].dest_offset = 20480;
 
-		printf("ioctl(%d, BTRFS_IOC_FILE_EXTENT_SAME or FIDEDUPERANGE, "
+		printf("ioctl(%d, %s, "
 		       "{src_offset=%" PRIu64 ", src_length=%" PRIu64
 		       ", dest_count=%hu, info=", fd1,
+		       sprint_xlat_(BTRFS_IOC_FILE_EXTENT_SAME,
+				    "BTRFS_IOC_FILE_EXTENT_SAME"
+				    " or FIDEDUPERANGE"),
 		       (uint64_t)argsp->src_offset,
 		       (uint64_t)argsp->src_length, argsp->dest_count);
 		printf("[{dest_fd=%" PRId64 ", dest_offset=%" PRIu64
@@ -1797,11 +1951,11 @@
 		   "BTRFS_FEATURE_COMPAT_???");
 
 	printf(", compat_ro_flags=");
-	printflags(btrfs_features_compat_ro, flags->compat_ro_flags,
+	prfl_btrfs(btrfs_features_compat_ro, flags->compat_ro_flags,
 		   "BTRFS_FEATURE_COMPAT_RO_???");
 
 	printf(", incompat_flags=");
-	printflags(btrfs_features_incompat, flags->incompat_flags,
+	prfl_btrfs(btrfs_features_incompat, flags->incompat_flags,
 		   "BTRFS_FEATURE_INCOMPAT_???");
 	printf("}");
 }
@@ -1831,9 +1985,10 @@
 	struct btrfs_ioctl_feature_flags supported_features[3];
 
 	ioctl(-1, BTRFS_IOC_SET_FEATURES, NULL);
-	printf("ioctl(-1, BTRFS_IOC_SET_FEATURES, NULL) = -1 EBADF (%m)\n");
+	printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+	       ioc(BTRFS_IOC_SET_FEATURES));
 
-	printf("ioctl(-1, BTRFS_IOC_SET_FEATURES, [");
+	printf("ioctl(-1, %s, [", ioc(BTRFS_IOC_SET_FEATURES));
 	btrfs_print_features(&args[0]);
 	printf(", ");
 	btrfs_print_features(&args[1]);
@@ -1841,8 +1996,8 @@
 	printf("]) = -1 EBADF (%m)\n");
 
 	if (btrfs_test_root) {
-		printf("ioctl(%d, BTRFS_IOC_GET_FEATURES, ",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd, ioc(BTRFS_IOC_GET_FEATURES));
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_FEATURES,
 		      &supported_features);
 		btrfs_print_features(&supported_features[0]);
@@ -1850,8 +2005,9 @@
 
 		ioctl(btrfs_test_dir_fd, BTRFS_IOC_GET_SUPPORTED_FEATURES,
 		      &supported_features);
-		printf("ioctl(%d, BTRFS_IOC_GET_SUPPORTED_FEATURES, ",
-		       btrfs_test_dir_fd);
+		printf("ioctl(%d, %s, ",
+		       btrfs_test_dir_fd,
+		       ioc(BTRFS_IOC_GET_SUPPORTED_FEATURES));
 		printf("[");
 		btrfs_print_features(&supported_features[0]);
 		printf(" /* supported */, ");
@@ -1880,19 +2036,28 @@
 	unsigned int i;
 	for (i = 0; i < ARRAY_SIZE(btrfs_read_cmd); ++i) {
 		ioctl(-1, (unsigned long) btrfs_read_cmd[i].val, 0);
-		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", btrfs_read_cmd[i].str);
+		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+		       sprint_xlat_(btrfs_read_cmd[i].val,
+				    btrfs_read_cmd[i].str));
 	}
 }
 
+static void
+rm_test_dir(void)
+{
+	int rootfd = open(path, O_RDONLY|O_DIRECTORY);
+
+	unlinkat(rootfd, dir_name, AT_REMOVEDIR);
+}
+
 int
 main(int argc, char *argv[])
 {
 
 	int opt;
 	int ret;
-	const char *path;
 
-	while ((opt = getopt(argc, argv, "wv")) != -1) {
+	while ((opt = getopt(argc, argv, "wvX")) != -1) {
 		switch (opt) {
 		case 'v':
 			/*
@@ -1904,11 +2069,18 @@
 		case 'w':
 			write_ok = true;
 			break;
+		case 'X':
+			verbose_xlat = true;
+			break;
 		default:
-			error_msg_and_fail("usage: btrfs [-v] [-w] [path]");
+			error_msg_and_fail("usage: btrfs [-vwX] [path]");
 		}
 	}
 
+	ret = snprintf(dir_name, sizeof(dir_name), dir_name_fmt, getpid());
+	if (ret < 0)
+		perror_msg_and_fail("snprintf(dir_name)");
+
 	/*
 	 * This will enable optional tests that require a valid file descriptor
 	 */
@@ -1930,14 +2102,18 @@
 		if (rootfd < 0)
 			perror_msg_and_fail("open(%s) failed", path);
 
-		ret = mkdirat(rootfd, "strace-test", 0755);
+		ret = mkdirat(rootfd, dir_name, 0755);
 		if (ret < 0 && errno != EEXIST)
-			perror_msg_and_fail("mkdirat(strace-test) failed");
+			perror_msg_and_fail("mkdirat(%s) failed", dir_name);
 
-		btrfs_test_dir_fd = openat(rootfd, "strace-test",
+		/* Register removal of the created directory.  */
+		if (ret == 0)
+			atexit(rm_test_dir);
+
+		btrfs_test_dir_fd = openat(rootfd, dir_name,
 					   O_RDONLY|O_DIRECTORY);
 		if (btrfs_test_dir_fd < 0)
-			perror_msg_and_fail("openat(strace-test) failed");
+			perror_msg_and_fail("openat(%s) failed", dir_name);
 		close(rootfd);
 	} else
 		write_ok = false;
diff --git a/tests/execve.c b/tests/execve.c
index da3bc52..c1dedfc 100644
--- a/tests/execve.c
+++ b/tests/execve.c
@@ -2,7 +2,7 @@
  * This file is part of execve strace test.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -59,17 +59,18 @@
 
 	execve(FILENAME, tail_argv, tail_envp);
 	printf("execve(\"%s\""
-	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #if VERBOSE
-	       ", [\"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #else
 	       ", %p /* 5 vars, unterminated */"
 #endif
 	       ") = -1 ENOENT (%m)\n",
 	       Q_FILENAME, q_argv[0], q_argv[1], q_argv[2],
-	       argv[3], argv[4], argv[5]
+	       argv[3], argv[4], argv[5], (char *) tail_argv + sizeof(argv)
 #if VERBOSE
-	       , q_envp[0], q_envp[1], envp[2], envp[3], envp[4]
+	       , q_envp[0], q_envp[1], envp[2], envp[3], envp[4],
+	       (char *) tail_envp + sizeof(envp)
 #else
 	       , tail_envp
 #endif
diff --git a/tests/execveat.c b/tests/execveat.c
index 566a59f..853e26c 100644
--- a/tests/execveat.c
+++ b/tests/execveat.c
@@ -2,7 +2,7 @@
  * This file is part of execveat strace test.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -64,17 +64,18 @@
 
 	syscall(__NR_execveat, -100, FILENAME, tail_argv, tail_envp, 0x1100);
 	printf("execveat(AT_FDCWD, \"%s\""
-	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #if VERBOSE
-	       ", [\"%s\", \"%s\", %p, %p, %p, ???]"
+	       ", [\"%s\", \"%s\", %p, %p, %p, ... /* %p */]"
 #else
 	       ", %p /* 5 vars, unterminated */"
 #endif
 	       ", AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) = -1 %s (%m)\n",
 	       Q_FILENAME, q_argv[0], q_argv[1], q_argv[2],
-	       argv[3], argv[4], argv[5],
+	       argv[3], argv[4], argv[5], (char *) tail_argv + sizeof(argv),
 #if VERBOSE
 	       q_envp[0], q_envp[1], envp[2], envp[3], envp[4],
+	       (char *) tail_envp + sizeof(envp),
 #else
 	       tail_envp,
 #endif
diff --git a/tests/fanotify_mark-Xabbrev.c b/tests/fanotify_mark-Xabbrev.c
new file mode 100644
index 0000000..2dc9fa1
--- /dev/null
+++ b/tests/fanotify_mark-Xabbrev.c
@@ -0,0 +1 @@
+#include "fanotify_mark.c"
diff --git a/tests/fanotify_mark-Xabbrev.gen.test b/tests/fanotify_mark-Xabbrev.gen.test
new file mode 100755
index 0000000..86c4034
--- /dev/null
+++ b/tests/fanotify_mark-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark-Xabbrev -a32 -Xabbrev -e trace=fanotify_mark); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32 -Xabbrev -e trace=fanotify_mark
diff --git a/tests/fanotify_mark-Xraw.c b/tests/fanotify_mark-Xraw.c
new file mode 100644
index 0000000..f02c886
--- /dev/null
+++ b/tests/fanotify_mark-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "fanotify_mark.c"
diff --git a/tests/fanotify_mark-Xraw.gen.test b/tests/fanotify_mark-Xraw.gen.test
new file mode 100755
index 0000000..5be964d
--- /dev/null
+++ b/tests/fanotify_mark-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark-Xraw -a32 -Xraw -e trace=fanotify_mark); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32 -Xraw -e trace=fanotify_mark
diff --git a/tests/fanotify_mark-Xverbose.c b/tests/fanotify_mark-Xverbose.c
new file mode 100644
index 0000000..b76f46f
--- /dev/null
+++ b/tests/fanotify_mark-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "fanotify_mark.c"
diff --git a/tests/fanotify_mark-Xverbose.gen.test b/tests/fanotify_mark-Xverbose.gen.test
new file mode 100755
index 0000000..ef1a99d
--- /dev/null
+++ b/tests/fanotify_mark-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark-Xverbose -a32 -Xverbose -e trace=fanotify_mark); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32 -Xverbose -e trace=fanotify_mark
diff --git a/tests/fanotify_mark.c b/tests/fanotify_mark.c
index 11cf7d0..9509b83 100644
--- a/tests/fanotify_mark.c
+++ b/tests/fanotify_mark.c
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -41,6 +41,20 @@
 # include <unistd.h>
 # include <sys/fanotify.h>
 
+#if XLAT_RAW
+# define str_fan_mark_add	"0x1"
+# define str_fan_modify_ondir	"0x40000002"
+# define str_at_fdcwd		"-100"
+#elif XLAT_VERBOSE
+# define str_fan_mark_add	"0x1 /* FAN_MARK_ADD */"
+# define str_fan_modify_ondir	"0x40000002 /* FAN_MODIFY|FAN_ONDIR */"
+# define str_at_fdcwd		"-100 /* AT_FDCWD */"
+#else
+# define str_fan_mark_add	"FAN_MARK_ADD"
+# define str_fan_modify_ondir	"FAN_MODIFY|FAN_ONDIR"
+# define str_at_fdcwd		"AT_FDCWD"
+#endif
+
 /* Performs fanotify_mark call via the syscall interface. */
 static void
 do_call(kernel_ulong_t fd, kernel_ulong_t flags, const char *flags_str,
@@ -97,26 +111,73 @@
 	static const struct strval flags[] = {
 		{ F8ILL_KULONG_MASK, "0" },
 		{ (kernel_ulong_t) 0xdec0deddefaced00ULL,
-			"0xefaced00 /* FAN_MARK_??? */" },
+			"0xefaced00"
+#if !XLAT_RAW
+			" /* FAN_MARK_??? */"
+#endif
+			},
 		{ (kernel_ulong_t) 0xda7a105700000040ULL,
-			"FAN_MARK_IGNORED_SURV_MODIFY" },
+#if XLAT_RAW
+			"0x40"
+#elif XLAT_VERBOSE
+			"0x40 /* FAN_MARK_IGNORED_SURV_MODIFY */"
+#else
+			"FAN_MARK_IGNORED_SURV_MODIFY"
+#endif
+			},
 		{ (kernel_ulong_t) 0xbadc0deddeadfeedULL,
+#if XLAT_RAW || XLAT_VERBOSE
+			"0xdeadfeed"
+#endif
+#if XLAT_VERBOSE
+			" /* "
+#endif
+#if !XLAT_RAW
 			"FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR|"
 			"FAN_MARK_IGNORED_MASK|FAN_MARK_IGNORED_SURV_MODIFY|"
-			"FAN_MARK_FLUSH|0xdeadfe00" },
+			"FAN_MARK_FLUSH|0xdeadfe00"
+#endif
+#if XLAT_VERBOSE
+			" */"
+#endif
+			},
 	};
 	static const struct strval64 masks[] = {
 		{ ARG_ULL_STR(0) },
 		{ 0xdeadfeedfacebeefULL,
+#if XLAT_RAW || XLAT_VERBOSE
+			"0xdeadfeedfacebeef"
+#endif
+#if XLAT_VERBOSE
+			" /* "
+#endif
+#if !XLAT_RAW
 			"FAN_ACCESS|FAN_MODIFY|FAN_CLOSE_WRITE|FAN_OPEN|"
 			"FAN_ACCESS_PERM|FAN_ONDIR|FAN_EVENT_ON_CHILD|"
-			"0xdeadfeedb2ccbec4" },
-		{ ARG_ULL_STR(0xffffffffb7fcbfc4) " /* FAN_??? */" },
+			"0xdeadfeedb2ccbec4"
+#endif
+#if XLAT_VERBOSE
+			" */"
+#endif
+			},
+		{ ARG_ULL_STR(0xffffffffb7fcbfc4)
+#if !XLAT_RAW
+			" /* FAN_??? */"
+#endif
+			},
 	};
 	static const struct strval dirfds[] = {
 		{ (kernel_ulong_t) 0xfacefeed00000001ULL, "1" },
-		{ (kernel_ulong_t) 0xdec0ded0ffffffffULL, "FAN_NOFD" },
-		{ (kernel_ulong_t) 0xbadfacedffffff9cULL, "AT_FDCWD" },
+		{ (kernel_ulong_t) 0xdec0ded0ffffffffULL,
+#if XLAT_RAW
+			"-1"
+#elif XLAT_VERBOSE
+			"-1 /* FAN_NOFD */"
+#else
+			"FAN_NOFD"
+#endif
+			},
+		{ (kernel_ulong_t) 0xbadfacedffffff9cULL, str_at_fdcwd },
 		{ (kernel_ulong_t) 0xdefaced1beeff00dULL, "-1091571699" },
 	};
 	static const char str64[] = STR64;
@@ -149,8 +210,9 @@
 
 	rc = fanotify_mark(-1, FAN_MARK_ADD, FAN_MODIFY | FAN_ONDIR,
 			       -100, ".");
-	printf("fanotify_mark(-1, FAN_MARK_ADD, FAN_MODIFY|FAN_ONDIR"
-	       ", AT_FDCWD, \".\") = %s\n", sprintrc(rc));
+	printf("fanotify_mark(-1, %s, %s, %s, \".\") = %s\n",
+	       str_fan_mark_add, str_fan_modify_ondir, str_at_fdcwd,
+	       sprintrc(rc));
 
 	for (i = 0; i < ARRAY_SIZE(fds); i++) {
 		for (j = 0; j < ARRAY_SIZE(flags); j++) {
diff --git a/tests/fcntl-common.c b/tests/fcntl-common.c
new file mode 100644
index 0000000..a35a837
--- /dev/null
+++ b/tests/fcntl-common.c
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "flock.h"
+
+#define FILE_LEN 4096
+
+#define TEST_FLOCK_EINVAL(cmd) test_flock_einval(cmd, #cmd)
+#define TEST_FLOCK64_EINVAL(cmd) test_flock64_einval(cmd, #cmd)
+
+#ifdef HAVE_TYPEOF
+# define TYPEOF_FLOCK_OFF_T typeof(((struct_kernel_flock *) NULL)->l_len)
+#else
+# define TYPEOF_FLOCK_OFF_T off_t
+#endif
+
+static const char *errstr;
+
+static long
+invoke_test_syscall(const unsigned int fd, const unsigned int cmd, void *const p)
+{
+	const kernel_ulong_t kfd = F8ILL_KULONG_MASK | fd;
+	const kernel_ulong_t op = F8ILL_KULONG_MASK | cmd;
+
+	long rc = syscall(TEST_SYSCALL_NR, kfd, op, (uintptr_t) p);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+static void
+test_flock_einval(const int cmd, const char *name)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeedULL;
+	fl->l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00dULL;
+
+	invoke_test_syscall(0, cmd, fl);
+	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
+	       (intmax_t) fl->l_start, (intmax_t) fl->l_len, errstr);
+
+	void *const bad_addr = (void *) fl + 1;
+	invoke_test_syscall(0, cmd, bad_addr);
+	printf("%s(0, %s, %p) = %s\n",
+	       TEST_SYSCALL_STR, name, bad_addr, errstr);
+}
+
+/*
+ * This function is not declared static to avoid potential
+ * "defined but not used" warning when included by fcntl.c
+ */
+void
+test_flock64_einval(const int cmd, const char *name)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock64, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeedULL;
+	fl->l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00dULL;
+
+	invoke_test_syscall(0, cmd, fl);
+	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
+	       (intmax_t) fl->l_start, (intmax_t) fl->l_len, errstr);
+
+	void *const bad_addr = (void *) fl + 1;
+	invoke_test_syscall(0, cmd, bad_addr);
+	printf("%s(0, %s, %p) = %s\n",
+	       TEST_SYSCALL_STR, name, bad_addr, errstr);
+}
+
+static void
+test_flock(void)
+{
+	TEST_FLOCK_EINVAL(F_SETLK);
+	TEST_FLOCK_EINVAL(F_SETLKW);
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_len = FILE_LEN;
+
+	long rc = invoke_test_syscall(0, F_SETLK, fl);
+	printf("%s(0, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = %s\n",
+	       TEST_SYSCALL_STR, FILE_LEN, errstr);
+	if (rc)
+		return;
+
+	invoke_test_syscall(0, F_GETLK, fl);
+	printf("%s(0, F_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+
+	invoke_test_syscall(0, F_SETLKW, fl);
+	printf("%s(0, F_SETLKW, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+}
+
+static void
+test_flock64_ofd(void)
+{
+#if defined F_OFD_GETLK && defined F_OFD_SETLK && defined F_OFD_SETLKW
+	TEST_FLOCK64_EINVAL(F_OFD_SETLK);
+	TEST_FLOCK64_EINVAL(F_OFD_SETLKW);
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock64, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_len = FILE_LEN;
+
+	long rc = invoke_test_syscall(0, F_OFD_SETLK, fl);
+	printf("%s(0, F_OFD_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = %s\n",
+	       TEST_SYSCALL_STR, FILE_LEN, errstr);
+	if (rc)
+		return;
+
+	invoke_test_syscall(0, F_OFD_GETLK, fl);
+	printf("%s(0, F_OFD_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+
+	invoke_test_syscall(0, F_OFD_SETLKW, fl);
+	printf("%s(0, F_OFD_SETLKW, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	       ", l_start=0, l_len=%d}) = 0\n",
+	       TEST_SYSCALL_STR, FILE_LEN);
+#endif /* F_OFD_GETLK && F_OFD_SETLK && F_OFD_SETLKW */
+}
+
+static void test_flock64_lk64(void);
+
+static void
+test_flock64(void)
+{
+	test_flock64_ofd();
+	test_flock64_lk64();
+}
+
+/*
+ * F_[GS]ETOWN_EX had conflicting values with F_[SG]ETLK64
+ * in kernel revisions v2.6.32-rc1~96..v2.6.32-rc7~23.
+ */
+#undef TEST_F_OWNER_EX
+#if defined F_GETOWN_EX && defined F_SETOWN_EX \
+ && (F_GETOWN_EX != F_SETLK64) && (F_SETOWN_EX != F_GETLK64)
+# define TEST_F_OWNER_EX
+#endif
+
+#ifdef TEST_F_OWNER_EX
+# include "f_owner_ex.h"
+
+static long
+test_f_owner_ex_type_pid(const int cmd, const char *const cmd_name,
+			 const int type, const char *const type_name,
+			 pid_t pid)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_f_owner_ex, fo);
+
+	fo->type = type;
+	fo->pid = pid;
+	long rc = invoke_test_syscall(0, cmd, fo);
+	printf("%s(0, %s, {type=%s, pid=%d}) = %s\n",
+	       TEST_SYSCALL_STR, cmd_name, type_name, fo->pid, errstr);
+
+	void *bad_addr = (void *) fo + 1;
+	invoke_test_syscall(0, cmd, bad_addr);
+	printf("%s(0, %s, %p) = %s\n",
+	       TEST_SYSCALL_STR, cmd_name, bad_addr, errstr);
+
+	return rc;
+}
+
+static void
+test_f_owner_ex_umove_or_printaddr(const int type, const char *const type_name,
+				   pid_t pid)
+{
+	long rc = test_f_owner_ex_type_pid(ARG_STR(F_SETOWN_EX),
+					   type, type_name, pid);
+	if (!rc)
+		test_f_owner_ex_type_pid(ARG_STR(F_GETOWN_EX),
+					 type, type_name, pid);
+}
+
+static void
+test_f_owner_ex(void)
+{
+	static const struct {
+		int type;
+		const char *type_name;
+		pid_t pid[2];
+	} a[] = {
+		{ ARG_STR(F_OWNER_TID), { 1234567890, 20 } },
+		{ ARG_STR(F_OWNER_PID), { 1298126790, 30 } },
+		{ ARG_STR(F_OWNER_PGRP), { 1294567890, 40 } }
+	};
+
+	for (unsigned int i = 0; i < ARRAY_SIZE(a); i++) {
+		for (unsigned int j = 0; j < ARRAY_SIZE(a[0].pid); j++) {
+			test_f_owner_ex_umove_or_printaddr(a[i].type,
+							   a[i].type_name,
+							   a[i].pid[j]);
+		}
+	}
+}
+#endif /* TEST_F_OWNER_EX */
+
+static void
+create_sample(void)
+{
+	char fname[] = TEST_SYSCALL_STR "_XXXXXX";
+
+	(void) close(0);
+	if (mkstemp(fname))
+		perror_msg_and_fail("mkstemp: %s", fname);
+	if (unlink(fname))
+		perror_msg_and_fail("unlink: %s", fname);
+	if (ftruncate(0, FILE_LEN))
+		perror_msg_and_fail("ftruncate");
+}
+
+int
+main(void)
+{
+	create_sample();
+	test_flock();
+	test_flock64();
+#ifdef TEST_F_OWNER_EX
+	test_f_owner_ex();
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/fcntl.c b/tests/fcntl.c
index 4f62ca2..7539f19 100644
--- a/tests/fcntl.c
+++ b/tests/fcntl.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,51 +33,40 @@
 
 # define TEST_SYSCALL_NR __NR_fcntl
 # define TEST_SYSCALL_STR "fcntl"
-# include "struct_flock.c"
-
-# define TEST_FLOCK64_EINVAL(cmd) test_flock64_einval(cmd, #cmd)
+# include "fcntl-common.c"
 
 static void
-test_flock64_einval(const int cmd, const char *name)
+test_flock64_undecoded(const int cmd, const char *name)
 {
 	struct_kernel_flock64 fl = {
 		.l_type = F_RDLCK,
 		.l_start = 0xdefaced1facefeedULL,
 		.l_len = 0xdefaced2cafef00dULL
 	};
-	long rc = invoke_test_syscall(cmd, &fl);
+	invoke_test_syscall(0, cmd, &fl);
 	printf("%s(0, %s, %p) = %s\n",
-	       TEST_SYSCALL_STR, name, &fl, sprintrc(rc));
+	       TEST_SYSCALL_STR, name, &fl, errstr);
 }
 
+#define TEST_FLOCK64_UNDECODED(cmd) test_flock64_undecoded(cmd, #cmd)
+
 static void
-test_flock64(void)
+test_flock64_lk64(void)
 {
 /*
  * F_[GS]ETOWN_EX had conflicting values with F_[GS]ETLK64
  * in kernel revisions v2.6.32-rc1~96..v2.6.32-rc7~23.
  */
-#if !defined(F_GETOWN_EX) || F_GETOWN_EX != F_SETLK64
-	TEST_FLOCK64_EINVAL(F_SETLK64);
-#endif
+# if !defined(F_GETOWN_EX) || F_GETOWN_EX != F_SETLK64
+	TEST_FLOCK64_UNDECODED(F_SETLK64);
+# endif
 /* F_GETLK and F_SETLKW64 have conflicting values on mips64 */
-#if !defined(__mips64) || F_GETLK != F_SETLKW64
-	TEST_FLOCK64_EINVAL(F_SETLKW64);
-#endif
-#if !defined(F_SETOWN_EX) || F_SETOWN_EX != F_GETLK64
-	TEST_FLOCK64_EINVAL(F_GETLK64);
-#endif
-}
-
-int
-main(void)
-{
-	create_sample();
-	test_flock();
-	test_flock64();
-
-	puts("+++ exited with 0 +++");
-	return 0;
+# if !defined(__mips64) || F_GETLK != F_SETLKW64
+	TEST_FLOCK64_UNDECODED(F_SETLKW64);
+# endif
+# if !defined(F_SETOWN_EX) || F_SETOWN_EX != F_GETLK64
+	TEST_FLOCK64_UNDECODED(F_GETLK64);
+# endif
 }
 
 #else
diff --git a/tests/fcntl64.c b/tests/fcntl64.c
index 068956e..f65f7cb 100644
--- a/tests/fcntl64.c
+++ b/tests/fcntl64.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,68 +33,38 @@
 
 # define TEST_SYSCALL_NR __NR_fcntl64
 # define TEST_SYSCALL_STR "fcntl64"
-# include "struct_flock.c"
-
-# define TEST_FLOCK64_EINVAL(cmd) test_flock64_einval(cmd, #cmd)
+# include "fcntl-common.c"
 
 static void
-test_flock64_einval(const int cmd, const char *name)
-{
-	struct_kernel_flock64 fl = {
-		.l_type = F_RDLCK,
-		.l_start = 0xdefaced1facefeedULL,
-		.l_len = 0xdefaced2cafef00dULL
-	};
-	long rc = invoke_test_syscall(cmd, &fl);
-	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
-	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
-	       (intmax_t) fl.l_start, (intmax_t) fl.l_len, sprintrc(rc));
-}
-
-static void
-test_flock64(void)
+test_flock64_lk64(void)
 {
 	TEST_FLOCK64_EINVAL(F_SETLK64);
 	TEST_FLOCK64_EINVAL(F_SETLKW64);
-# ifdef F_OFD_SETLK
-	TEST_FLOCK64_EINVAL(F_OFD_SETLK);
-	TEST_FLOCK64_EINVAL(F_OFD_SETLKW);
-# endif
 
-	struct_kernel_flock64 fl = {
-		.l_type = F_RDLCK,
-		.l_len = FILE_LEN
-	};
-	long rc = invoke_test_syscall(F_SETLK64, &fl);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct_kernel_flock64, fl);
+	memset(fl, 0, sizeof(*fl));
+	fl->l_type = F_RDLCK;
+	fl->l_len = FILE_LEN;
+
+	long rc = invoke_test_syscall(0, F_SETLK64, fl);
 	printf("%s(0, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET"
 	       ", l_start=0, l_len=%d}) = %s\n",
-	       TEST_SYSCALL_STR, FILE_LEN, sprintrc(rc));
+	       TEST_SYSCALL_STR, FILE_LEN, errstr);
 
 	if (rc)
 		return;
 
-	invoke_test_syscall(F_GETLK64, &fl);
+	invoke_test_syscall(0, F_GETLK64, fl);
 	printf("%s(0, F_GETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET"
 	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
 	       TEST_SYSCALL_STR, FILE_LEN);
 
-	invoke_test_syscall(F_SETLK64, &fl);
-	printf("%s(0, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET"
+	invoke_test_syscall(0, F_SETLKW64, fl);
+	printf("%s(0, F_SETLKW64, {l_type=F_UNLCK, l_whence=SEEK_SET"
 	       ", l_start=0, l_len=%d}) = 0\n",
 	       TEST_SYSCALL_STR, FILE_LEN);
 }
 
-int
-main(void)
-{
-	create_sample();
-	test_flock();
-	test_flock64();
-
-	puts("+++ exited with 0 +++");
-	return 0;
-}
-
 #else
 
 SKIP_MAIN_UNDEFINED("__NR_fcntl64")
diff --git a/tests/gen_tests.am b/tests/gen_tests.am
index 2cd76bc..5db8375 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 _newselect-P.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 dev-yy.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 fsync-y.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_dm.gen.test ioctl_dm-v.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_kvm_run.gen.test ioctl_loop.gen.test ioctl_loop-nv.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_nsfs.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_sock_gifconf.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 kcmp-y.gen.test kern_features.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 modify_ldt.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 net-yy-inet6.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 nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test nfnetlink_osf.gen.test nfnetlink_queue.gen.test nfnetlink_ulog.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_mdba_mdb_entry.gen.test nlattr_mdba_router_port.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_tc_stats.gen.test nlattr_tca_stab.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test oldselect-efault.gen.test oldselect-efault-P.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-P.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 riscv_flush_icache.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 s390_guarded_storage.gen.test s390_guarded_storage-v.gen.test s390_pci_mmio_read_write.gen.test s390_runtime_instr.gen.test s390_sthyi.gen.test s390_sthyi-v.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 seccomp_get_action_avail.gen.test select.gen.test select-P.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 sockopt-sol_netlink.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 _newselect-P.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test aio_pgetevents.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test bpf-obj_get_info_by_fd.gen.test bpf-obj_get_info_by_fd-v.gen.test bpf-obj_get_info_by_fd-prog.gen.test bpf-obj_get_info_by_fd-prog-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 dev-yy.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 fanotify_mark-Xabbrev.gen.test fanotify_mark-Xraw.gen.test fanotify_mark-Xverbose.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 fsync-y.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_dm.gen.test ioctl_dm-v.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_inotify.gen.test ioctl_kvm_run.gen.test ioctl_loop.gen.test ioctl_loop-nv.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_perf.gen.test ioctl_ptp.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_sock_gifconf.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_msg-Xabbrev.gen.test ipc_msg-Xraw.gen.test ipc_msg-Xverbose.gen.test ipc_msgbuf-Xabbrev.gen.test ipc_msgbuf-Xraw.gen.test ipc_msgbuf-Xverbose.gen.test ipc_sem.gen.test ipc_sem-Xabbrev.gen.test ipc_sem-Xraw.gen.test ipc_sem-Xverbose.gen.test ipc_shm.gen.test ipc_shm-Xabbrev.gen.test ipc_shm-Xraw.gen.test ipc_shm-Xverbose.gen.test kcmp.gen.test kcmp-y.gen.test kern_features.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test keyctl-Xabbrev.gen.test keyctl-Xraw.gen.test keyctl-Xverbose.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 mmap-Xabbrev.gen.test mmap-Xraw.gen.test mmap-Xverbose.gen.test mmap64.gen.test mmap64-Xabbrev.gen.test mmap64-Xraw.gen.test mmap64-Xverbose.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test modify_ldt.gen.test mount.gen.test mount-Xabbrev.gen.test mount-Xraw.gen.test mount-Xverbose.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 net-yy-inet6.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 nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test nfnetlink_osf.gen.test nfnetlink_queue.gen.test nfnetlink_ulog.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_af_spec.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_linkinfo.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_mdba_mdb_entry.gen.test nlattr_mdba_router_port.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_tc_stats.gen.test nlattr_tca_stab.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test old_mmap-P.gen.test old_mmap-v-none.gen.test old_mmap-Xabbrev.gen.test old_mmap-Xraw.gen.test old_mmap-Xverbose.gen.test oldfstat.gen.test oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test oldselect-efault.gen.test oldselect-efault-P.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 personality-Xabbrev.gen.test personality-Xraw.gen.test personality-Xverbose.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-P.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 riscv_flush_icache.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 s390_guarded_storage.gen.test s390_guarded_storage-v.gen.test s390_pci_mmio_read_write.gen.test s390_runtime_instr.gen.test s390_sthyi.gen.test s390_sthyi-v.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 seccomp_get_action_avail.gen.test select.gen.test select-P.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 so_peercred-Xabbrev.gen.test so_peercred-Xraw.gen.test so_peercred-Xverbose.gen.test sock_filter-v.gen.test sock_filter-v-Xabbrev.gen.test sock_filter-v-Xraw.gen.test sock_filter-v-Xverbose.gen.test socketcall.gen.test sockopt-sol_netlink.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_personality_32.gen.test trace_personality_64.gen.test trace_personality_x32.gen.test trace_personality_regex_32.gen.test trace_personality_regex_64.gen.test trace_personality_regex_x32.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) $^ $@
@@ -28,6 +28,9 @@
 $(srcdir)/aio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/aio_pgetevents.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/alarm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -37,6 +40,18 @@
 $(srcdir)/bpf-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/bpf-obj_get_info_by_fd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/bpf-obj_get_info_by_fd-prog-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) $^ $@
 
@@ -124,6 +139,15 @@
 $(srcdir)/fanotify_mark.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/fanotify_mark-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/fanotify_mark-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/fchdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -316,6 +340,9 @@
 $(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_inotify.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -334,6 +361,12 @@
 $(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ioctl_perf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_ptp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -376,12 +409,48 @@
 $(srcdir)/ipc_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_msg-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msg-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_msgbuf-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_sem.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_sem-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_sem-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/ipc_shm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/ipc_shm-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/ipc_shm-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -400,6 +469,15 @@
 $(srcdir)/keyctl.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/keyctl-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/keyctl-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kill.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -463,9 +541,27 @@
 $(srcdir)/mlockall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmap64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mmap64-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mmap64-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/mmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -484,6 +580,15 @@
 $(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/mount-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/mount-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/move_pages.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -610,9 +715,15 @@
 $(srcdir)/nlattr_ifinfomsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_ifla_af_spec.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_linkinfo.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) $^ $@
 
@@ -685,6 +796,15 @@
 $(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/old_mmap-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -727,6 +847,15 @@
 $(srcdir)/perf_event_open_unabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/personality-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/personality-Xverbose.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/pipe2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -1057,9 +1186,27 @@
 $(srcdir)/so_peercred.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/so_peercred-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/so_peercred-Xverbose.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)/sock_filter-v-Xabbrev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xraw.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/sock_filter-v-Xverbose.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) $^ $@
 
@@ -1141,6 +1288,24 @@
 $(srcdir)/trace_lstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/trace_personality_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_64.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/trace_personality_regex_x32.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/trace_question.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 a95ff3e..24e0510 100644
--- a/tests/gen_tests.in
+++ b/tests/gen_tests.in
@@ -34,9 +34,14 @@
 add_key	-a30 -s12
 adjtimex	-a15
 aio	-a14 -e trace=io_setup,io_submit,io_getevents,io_cancel,io_destroy
+aio_pgetevents	-e trace=io_pgetevents
 alarm	-a10
 bpf	-a20
 bpf-v	-a20 -v -e trace=bpf
+bpf-obj_get_info_by_fd	-a20 -y -e trace=bpf
+bpf-obj_get_info_by_fd-v	-a20 -y -v -e trace=bpf
+bpf-obj_get_info_by_fd-prog	-a20 -y -e trace=bpf
+bpf-obj_get_info_by_fd-prog-v	-a20 -y -v -e trace=bpf
 btrfs	+ioctl.test
 chmod	-a28
 chown	-a28
@@ -66,6 +71,9 @@
 fallocate	-a18
 fanotify_init
 fanotify_mark	-a32
+fanotify_mark-Xabbrev	-a32 -Xabbrev -e trace=fanotify_mark
+fanotify_mark-Xraw	-a32 -Xraw -e trace=fanotify_mark
+fanotify_mark-Xverbose	-a32 -Xverbose -e trace=fanotify_mark
 fchdir	-a11
 fchmod	-a15
 fchmodat
@@ -130,12 +138,15 @@
 ioctl_dm-v	+ioctl.test -v -s9
 ioctl_evdev	+ioctl.test
 ioctl_evdev-v	+ioctl.test -v
+ioctl_inotify	+ioctl.test
 ioctl_kvm_run	+ioctl.test -a36 -y
 ioctl_loop	+ioctl.test
 ioctl_loop-nv	+ioctl.test -a22 -e verbose=none
 ioctl_loop-v	+ioctl.test -v
 ioctl_mtd	+ioctl.test
 ioctl_nsfs	+ioctl.test -esignal=none
+ioctl_perf	+ioctl.test
+ioctl_ptp 	+ioctl.test
 ioctl_rtc	+ioctl.test
 ioctl_rtc-v	+ioctl.test -v
 ioctl_scsi	+ioctl.test
@@ -149,15 +160,30 @@
 ioprio	-a18 -e trace=ioprio_get,ioprio_set
 ip_mreq	-e trace=setsockopt
 ipc	-a19
-ipc_msg	+ipc.sh
-ipc_sem	+ipc.sh
-ipc_shm	+ipc.sh
+ipc_msg	+ipc.sh -a26
+ipc_msg-Xabbrev	+ipc.sh -Xabbrev -a26
+ipc_msg-Xraw	+ipc.sh -Xraw -a16
+ipc_msg-Xverbose	+ipc.sh -Xverbose -a34
+ipc_msgbuf-Xabbrev	+ipc_msgbuf.test -Xabbrev
+ipc_msgbuf-Xraw	+ipc_msgbuf.test -Xraw -a22
+ipc_msgbuf-Xverbose	+ipc_msgbuf.test -Xverbose
+ipc_sem	+ipc.sh -a29
+ipc_sem-Xabbrev	+ipc.sh -Xabbrev -a29
+ipc_sem-Xraw	+ipc.sh -Xraw -a19
+ipc_sem-Xverbose	+ipc.sh -Xverbose -a36
+ipc_shm	+ipc.sh -a29
+ipc_shm-Xabbrev	+ipc.sh -Xabbrev -a29
+ipc_shm-Xraw	+ipc.sh -Xraw -a19
+ipc_shm-Xverbose	+ipc.sh -Xverbose -a36
 kcmp	-a22
 kcmp-y	-a22 -y -e trace=kcmp
 kern_features -a16
 kexec_file_load	-s9
 kexec_load	-s9
 keyctl	-a31 -s10
+keyctl-Xabbrev	-a31 -s10 -e trace=keyctl -Xabbrev
+keyctl-Xraw	-a13 -s10 -e trace=keyctl -Xraw
+keyctl-Xverbose	-a41 -s10 -e trace=keyctl -Xverbose
 kill	-a12 -esignal=none
 lchown	-a30
 lchown32	-a32
@@ -179,13 +205,22 @@
 mlock	-a20 -e trace=mlock,munlock
 mlock2
 mlockall	-a12
+mmap-Xabbrev	+mmap.test abbrev
+mmap-Xraw	+mmap.test raw 14
+mmap-Xverbose	+mmap.test verbose
 mmap64	+mmap.test
+mmap64-Xabbrev	+mmap.test abbrev
+mmap64-Xraw	+mmap.test raw 14
+mmap64-Xverbose	+mmap.test verbose
 mmsg	-e read=0 -e write=1 -e trace=recvmmsg,sendmmsg
 mmsg-silent	-a25 -e verbose=none -e trace=sendmmsg,recvmmsg
 mmsg_name	-a25 -e trace=sendmmsg,recvmmsg
 mmsg_name-v	-v -a25 -e trace=sendmmsg,recvmmsg
 modify_ldt	-a23
-mount
+mount		-a33
+mount-Xabbrev	-a33 -e trace=mount -Xabbrev
+mount-Xraw	-a33 -e trace=mount -Xraw
+mount-Xverbose	-a33 -e trace=mount -Xverbose
 move_pages	-s3
 mq	-a32 -e trace=mq_getsetattr,mq_open,mq_unlink
 mq_sendrecv	-a14 -e trace=mq_open,mq_notify,mq_timedsend,mq_timedreceive,mq_unlink
@@ -228,7 +263,9 @@
 nlattr_ifaddrlblmsg		+netlink_sock_diag.test
 nlattr_ifaddrmsg		+netlink_sock_diag.test
 nlattr_ifinfomsg		+netlink_sock_diag.test
+nlattr_ifla_af_spec		+netlink_sock_diag.test
 nlattr_ifla_brport		+netlink_sock_diag.test
+nlattr_ifla_linkinfo		+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
@@ -253,6 +290,9 @@
 old_mmap	-a11 -e trace=mmap
 old_mmap-P	-e trace=mmap -P "/dev/full" 9>>/dev/full
 old_mmap-v-none	-a11 -e trace=mmap -e verbose=none
+old_mmap-Xabbrev	-a11 -e trace=mmap -Xabbrev
+old_mmap-Xraw	-a11 -e trace=mmap -Xraw
+old_mmap-Xverbose	-a11 -e trace=mmap -Xverbose
 oldfstat	-a18 -v -P stat.sample
 oldlstat	-a32 -v -P stat.sample -P /dev/full
 oldselect	-a13 -e trace=select
@@ -267,6 +307,9 @@
 perf_event_open	-a1
 perf_event_open_nonverbose	-a34 -e verbose=none -e trace=perf_event_open
 perf_event_open_unabbrev	-a1 -v -e trace=perf_event_open
+personality-Xabbrev	+personality.test -Xabbrev
+personality-Xraw	+personality.test -a15 -Xraw
+personality-Xverbose	+personality.test -Xverbose
 pipe2	-a15
 pkey_alloc	-a17
 pkey_free	-a13
@@ -322,7 +365,7 @@
 s390_guarded_storage	-a32
 s390_guarded_storage-v	-e trace=s390_guarded_storage -a32 -v
 s390_pci_mmio_read_write	-e trace=s390_pci_mmio_read,s390_pci_mmio_write -a30
-s390_runtime_instr	-a50
+s390_runtime_instr	-a44
 s390_sthyi	-a47
 s390_sthyi-v	-e trace=s390_sthyi -a47 -v
 sched	test_trace_expr times -e/sched
@@ -377,7 +420,13 @@
 sigsuspend	-a19 -esignal=none
 so_linger	-e trace=getsockopt,setsockopt
 so_peercred	-e trace=getsockopt
+so_peercred-Xabbrev	-e trace=getsockopt -Xabbrev
+so_peercred-Xraw	-e trace=getsockopt -Xraw -a39
+so_peercred-Xverbose	-e trace=getsockopt -Xverbose
 sock_filter-v	-v -e trace=getsockopt,setsockopt
+sock_filter-v-Xabbrev	-v -e trace=getsockopt,setsockopt -X abbrev
+sock_filter-v-Xraw	-a 37 -v -e trace=getsockopt,setsockopt -X raw
+sock_filter-v-Xverbose	-v -e trace=getsockopt,setsockopt -X verbose
 socketcall	-a20
 sockopt-sol_netlink	-e trace=getsockopt,setsockopt
 splice
@@ -405,6 +454,12 @@
 trace_fstat	test_trace_expr '' -e%fstat -v -P stat.sample -P /dev/full
 trace_fstatfs	test_trace_expr '' -e%fstatfs
 trace_lstat	test_trace_expr '' -e%lstat -v -P stat.sample -P /dev/full
+trace_personality_32	+qualify_personality.sh 32 'getcwd' 'fsync-y'
+trace_personality_64	+qualify_personality.sh 64 'getcwd' 'fsync-y'
+trace_personality_x32	+qualify_personality.sh x32 'getcwd' 'fsync-y'
+trace_personality_regex_32	+qualify_personality.sh 32 '/clock.*' 'times|fcntl.*'
+trace_personality_regex_64	+qualify_personality.sh 64 '/clock.*' 'times|fcntl.*'
+trace_personality_regex_x32	+qualify_personality.sh x32 '/clock.*' 'times|fcntl.*'
 trace_question	test_trace_expr '' -e?osf_utimes,?/^pkey_.*
 trace_stat	test_trace_expr '' -e%stat -v -P stat.sample -P /dev/full
 trace_stat_like	test_trace_expr '' -e%%stat -v -P stat.sample -P /dev/full
diff --git a/tests/init.sh b/tests/init.sh
index dffbfce..8861b70 100644
--- a/tests/init.sh
+++ b/tests/init.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 #
 # Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2011-2017 The strace developers.
+# Copyright (c) 2011-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -230,6 +230,17 @@
 	match_diff "$LOG" "$EXP"
 }
 
+# Usage: run_strace_match_grep [args to run_strace]
+run_strace_match_grep()
+{
+	args="$*"
+	[ -n "$args" -a -z "${args##*-e trace=*}" ] ||
+		set -- -e trace="$NAME" "$@"
+	run_prog > /dev/null
+	run_strace "$@" $args > "$EXP"
+	match_grep "$LOG" "$EXP"
+}
+
 # Print kernel version code.
 # usage: kernel_version_code $(uname -r)
 kernel_version_code()
diff --git a/tests/ioctl_evdev.c b/tests/ioctl_evdev.c
index 9d16cec..5eacac0 100644
--- a/tests/ioctl_evdev.c
+++ b/tests/ioctl_evdev.c
@@ -2,7 +2,7 @@
  * This file is part of ioctl_evdev strace test.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -39,6 +39,13 @@
 # include <sys/ioctl.h>
 # include <linux/input.h>
 
+# ifndef EV_SW
+#  define EV_SW 5
+# endif
+# ifndef ABS_MT_TOOL_Y
+#  define ABS_MT_TOOL_Y 0x3d
+# endif
+
 static const unsigned int magic = 0xdeadbeef;
 static const unsigned long lmagic = (unsigned long) 0xdeadbeefbadc0dedULL;
 
@@ -67,12 +74,14 @@
 # endif /* VERBOSE */
 }
 
-# define TEST_NULL_ARG(cmd)						\
+# define TEST_NULL_ARG_EX(cmd, str)						\
 	do {								\
 		ioctl(-1, cmd, 0);					\
-		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", #cmd);	\
+		printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", str);	\
 	} while (0)
 
+# define TEST_NULL_ARG(cmd) TEST_NULL_ARG_EX(cmd, #cmd)
+
 int
 main(void)
 {
@@ -117,14 +126,24 @@
 	TEST_NULL_ARG(EVIOCGABS(ABS_X));
 	TEST_NULL_ARG(EVIOCSABS(ABS_X));
 
+	TEST_NULL_ARG_EX(EVIOCGABS(0xe), "EVIOCGABS(0xe /* ABS_??? */)");
+	TEST_NULL_ARG_EX(EVIOCSABS(0xe), "EVIOCSABS(0xe /* ABS_??? */)");
+
+	TEST_NULL_ARG(EVIOCGABS(ABS_MT_TOOL_Y));
+	TEST_NULL_ARG(EVIOCSABS(ABS_MT_TOOL_Y));
+
+	TEST_NULL_ARG_EX(EVIOCGABS(0x3e), "EVIOCGABS(0x3e /* ABS_??? */)");
+	TEST_NULL_ARG_EX(EVIOCSABS(0x3e), "EVIOCSABS(0x3e /* ABS_??? */)");
+
+	TEST_NULL_ARG_EX(EVIOCGABS(0x3f), "EVIOCGABS(0x3f /* ABS_??? */)");
+	TEST_NULL_ARG_EX(EVIOCSABS(0x3f), "EVIOCSABS(0x3f /* ABS_??? */)");
+
 	TEST_NULL_ARG(EVIOCGBIT(EV_SYN, 0));
 	TEST_NULL_ARG(EVIOCGBIT(EV_KEY, 1));
 	TEST_NULL_ARG(EVIOCGBIT(EV_REL, 2));
 	TEST_NULL_ARG(EVIOCGBIT(EV_ABS, 3));
 	TEST_NULL_ARG(EVIOCGBIT(EV_MSC, 4));
-# ifdef EV_SW
 	TEST_NULL_ARG(EVIOCGBIT(EV_SW, 5));
-# endif
 	TEST_NULL_ARG(EVIOCGBIT(EV_LED, 6));
 	TEST_NULL_ARG(EVIOCGBIT(EV_SND, 7));
 	TEST_NULL_ARG(EVIOCGBIT(EV_REP, 8));
@@ -132,6 +151,12 @@
 	TEST_NULL_ARG(EVIOCGBIT(EV_PWR, 10));
 	TEST_NULL_ARG(EVIOCGBIT(EV_FF_STATUS, 11));
 
+	TEST_NULL_ARG_EX(EVIOCGBIT(0x6, 12), "EVIOCGBIT(0x6 /* EV_??? */, 12)");
+	TEST_NULL_ARG_EX(EVIOCGBIT(0x18, 13),
+			 "EVIOCGBIT(0x18 /* EV_??? */, 13)");
+	TEST_NULL_ARG_EX(EVIOCGBIT(0x1f, 14),
+			 "EVIOCGBIT(0x1f /* EV_??? */, 14)");
+
 	ioctl(-1, EVIOCGBIT(EV_MAX, 42), 0);
 	printf("ioctl(-1, EVIOCGBIT(%#x /* EV_??? */, 42), NULL)"
 	       " = -1 EBADF (%m)\n", EV_MAX);
diff --git a/tests/ioctl_inotify.c b/tests/ioctl_inotify.c
new file mode 100644
index 0000000..0650c62
--- /dev/null
+++ b/tests/ioctl_inotify.c
@@ -0,0 +1,81 @@
+/*
+ * This file is part of ioctl_inotify strace test.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <inttypes.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <asm/unistd.h>
+#include <linux/ioctl.h>
+
+#ifndef INOTIFY_IOC_SETNEXTWD
+# define INOTIFY_IOC_SETNEXTWD  _IOW('I', 0, int32_t)
+#endif
+
+static long
+sys_ioctl(kernel_long_t fd, kernel_ulong_t cmd, kernel_ulong_t arg)
+{
+	return syscall(__NR_ioctl, fd, cmd, arg);
+}
+
+int
+main(void)
+{
+	static const kernel_ulong_t unknown_inotify_cmd =
+		(kernel_ulong_t) 0xbadc0dedfeed49edULL;
+	static const kernel_ulong_t magic =
+		(kernel_ulong_t) 0xdeadbeefbadc0dedULL;
+
+	/* Unknown inotify commands */
+	sys_ioctl(-1, unknown_inotify_cmd, magic);
+	printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x49, %#x, %#x), "
+	       "%#lx) = -1 EBADF (%m)\n",
+	       _IOC_DIR((unsigned int) unknown_inotify_cmd) & _IOC_NONE ?
+	       "|_IOC_NONE" : "",
+	       _IOC_NR((unsigned int) unknown_inotify_cmd),
+	       _IOC_SIZE((unsigned int) unknown_inotify_cmd),
+	       (unsigned long) magic);
+
+	sys_ioctl(-1, INOTIFY_IOC_SETNEXTWD + 1, magic);
+	printf("ioctl(-1, _IOC(_IOC_WRITE, 0x49, %#x, %#x), %#lx)"
+	       " = -1 EBADF (%m)\n",
+	       (unsigned int) _IOC_NR(INOTIFY_IOC_SETNEXTWD + 1),
+	       (unsigned int) _IOC_SIZE(INOTIFY_IOC_SETNEXTWD + 1),
+	       (unsigned long) magic);
+
+	/* INOTIFY_IOC_SETNEXTWD */
+	sys_ioctl(-1, INOTIFY_IOC_SETNEXTWD, magic);
+	printf("ioctl(-1, INOTIFY_IOC_SETNEXTWD, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/ioctl_inotify.gen.test b/tests/ioctl_inotify.gen.test
new file mode 100755
index 0000000..237a98b
--- /dev/null
+++ b/tests/ioctl_inotify.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_inotify +ioctl.test ); do not edit.
+set -- 
+. "${srcdir=.}/ioctl.test"
diff --git a/tests/ioctl_kvm_run.c b/tests/ioctl_kvm_run.c
index 1794614..e1bef57 100644
--- a/tests/ioctl_kvm_run.c
+++ b/tests/ioctl_kvm_run.c
@@ -40,6 +40,7 @@
 # include <string.h>
 # include <sys/ioctl.h>
 # include <sys/mman.h>
+# include <unistd.h>
 # include <linux/kvm.h>
 
 static int
@@ -56,7 +57,7 @@
 
 static const char dev[] = "/dev/kvm";
 static const char vm_dev[] = "anon_inode:kvm-vm";
-static const char vcpu_dev[] = "anon_inode:kvm-vcpu";
+static char vcpu_dev[] = "anon_inode:kvm-vcpu:0";
 static size_t page_size;
 
 extern const char code[];
@@ -165,6 +166,23 @@
 	}
 }
 
+static int
+vcpu_dev_should_have_cpuid(int fd)
+{
+	int r = 0;
+	char *filename = NULL;
+	char buf[sizeof(vcpu_dev)];
+
+	if (asprintf(&filename, "/proc/%d/fd/%d", getpid(), fd) < 0)
+		error_msg_and_fail("asprintf");
+
+	if (readlink(filename, buf, sizeof(buf)) == sizeof(buf) - 1
+	    && (memcmp(buf, vcpu_dev, sizeof(buf) - 1) == 0))
+		r = 1;
+	free(filename);
+	return r;
+}
+
 int
 main(void)
 {
@@ -208,6 +226,15 @@
 	       (unsigned long) page_size, (unsigned long) page_size, mem);
 
 	int vcpu_fd = KVM_IOCTL(vm_fd, KVM_CREATE_VCPU, NULL);
+	if (!vcpu_dev_should_have_cpuid(vcpu_fd))
+		/*
+		 * This is an older kernel that doesn't place a cpuid
+		 * at the end of the dentry associated with vcpu_fd.
+		 * Trim the cpuid part of vcpu_dev like:
+		 * "anon_inode:kvm-vcpu:0" -> "anon_inode:kvm-vcpu"
+		 */
+		vcpu_dev[strlen (vcpu_dev) - 2] = '\0';
+
 	printf("ioctl(%d<%s>, KVM_CREATE_VCPU, 0) = %d<%s>\n",
 	       vm_fd, vm_dev, vcpu_fd, vcpu_dev);
 
diff --git a/tests/ioctl_loop.c b/tests/ioctl_loop.c
index bafbd37..10b7dc3 100644
--- a/tests/ioctl_loop.c
+++ b/tests/ioctl_loop.c
@@ -34,8 +34,10 @@
 #include <stdio.h>
 #include <string.h>
 #include <inttypes.h>
+#include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/sysmacros.h>
+#include <asm/unistd.h>
 #include <linux/ioctl.h>
 #include <linux/loop.h>
 #include "print_fields.h"
@@ -45,6 +47,12 @@
 # define ABBREV 0
 #endif
 
+static long
+sys_ioctl(kernel_long_t fd, kernel_ulong_t cmd, kernel_ulong_t arg)
+{
+	return syscall(__NR_ioctl, fd, cmd, arg);
+}
+
 static void
 print_loop_info(struct loop_info * const info, bool print_encrypt,
 		const char *encrypt_type, const char *encrypt_key,
@@ -178,7 +186,7 @@
 	TAIL_ALLOC_OBJECT_CONST_PTR(struct loop_info64, info64);
 
 	/* Unknown loop commands */
-	ioctl(-1, unknown_loop_cmd, magic);
+	sys_ioctl(-1, unknown_loop_cmd, magic);
 	printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x4c, %#x, %#x), "
 	       "%#lx) = -1 EBADF (%m)\n",
 	       _IOC_DIR((unsigned int) unknown_loop_cmd) & _IOC_NONE ?
@@ -187,14 +195,14 @@
 	       _IOC_SIZE((unsigned int) unknown_loop_cmd),
 	       (unsigned long) magic);
 
-	ioctl(-1, LOOP_SET_BLOCK_SIZE + 1, magic);
+	sys_ioctl(-1, LOOP_SET_BLOCK_SIZE + 1, magic);
 	printf("ioctl(-1, _IOC(0, 0x4c, %#x, %#x), %#lx) = "
 	       "-1 EBADF (%m)\n",
 	       _IOC_NR(LOOP_SET_BLOCK_SIZE + 1),
 	       _IOC_SIZE(LOOP_SET_BLOCK_SIZE + 1),
 	       (unsigned long) magic);
 
-	ioctl(-1, LOOP_CTL_GET_FREE + 1, magic);
+	sys_ioctl(-1, LOOP_CTL_GET_FREE + 1, magic);
 	printf("ioctl(-1, _IOC(0, 0x4c, %#x, %#x), %#lx) = "
 	       "-1 EBADF (%m)\n",
 	       _IOC_NR(LOOP_CTL_GET_FREE + 1),
@@ -202,7 +210,7 @@
 	       (unsigned long) magic);
 
 	/* LOOP_SET_FD */
-	ioctl(-1, LOOP_SET_FD, magic);
+	sys_ioctl(-1, LOOP_SET_FD, magic);
 	printf("ioctl(-1, LOOP_SET_FD, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
@@ -289,7 +297,7 @@
 	printf("ioctl(-1, LOOP_GET_STATUS64, %p) = -1 EBADF (%m)\n", info64);
 
 	/* LOOP_CHANGE_FD */
-	ioctl(-1, LOOP_CHANGE_FD, magic);
+	sys_ioctl(-1, LOOP_CHANGE_FD, magic);
 	printf("ioctl(-1, LOOP_CHANGE_FD, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
@@ -298,22 +306,22 @@
 	printf("ioctl(-1, LOOP_SET_CAPACITY) = -1 EBADF (%m)\n");
 
 	/* LOOP_SET_DIRECT_IO */
-	ioctl(-1, LOOP_SET_DIRECT_IO, magic);
+	sys_ioctl(-1, LOOP_SET_DIRECT_IO, magic);
 	printf("ioctl(-1, LOOP_SET_DIRECT_IO, %lu) = -1 EBADF (%m)\n",
 	       (unsigned long) magic);
 
 	/* LOOP_SET_BLOCK_SIZE */
-	ioctl(-1, LOOP_SET_BLOCK_SIZE, magic);
+	sys_ioctl(-1, LOOP_SET_BLOCK_SIZE, magic);
 	printf("ioctl(-1, LOOP_SET_BLOCK_SIZE, %lu) = -1 EBADF (%m)\n",
 	       (unsigned long) magic);
 
 	/* LOOP_CTL_ADD */
-	ioctl(-1, LOOP_CTL_ADD, magic);
+	sys_ioctl(-1, LOOP_CTL_ADD, magic);
 	printf("ioctl(-1, LOOP_CTL_ADD, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
 	/* LOOP_CTL_REMOVE */
-	ioctl(-1, LOOP_CTL_REMOVE, magic);
+	sys_ioctl(-1, LOOP_CTL_REMOVE, magic);
 	printf("ioctl(-1, LOOP_CTL_REMOVE, %d) = -1 EBADF (%m)\n",
 	       (unsigned int) magic);
 
diff --git a/tests/ioctl_perf-success.c b/tests/ioctl_perf-success.c
new file mode 100644
index 0000000..9eade6a
--- /dev/null
+++ b/tests/ioctl_perf-success.c
@@ -0,0 +1,165 @@
+/*
+ * Check decoding of successful PERF_EVENT_IOC_{ID,QUERY_BPF} ioctls.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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_PERF_EVENT_H
+
+# include <assert.h>
+# include <inttypes.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+# include <sys/ioctl.h>
+# include <linux/perf_event.h>
+
+# ifndef PERF_EVENT_IOC_ID
+#  define PERF_EVENT_IOC_ID			_IOR('$', 7, void *)
+# endif
+
+# ifndef PERF_EVENT_IOC_QUERY_BPF
+#  define PERF_EVENT_IOC_QUERY_BPF		_IOWR('$', 10, void *)
+
+struct perf_event_query_bpf {
+        uint32_t ids_len;
+        uint32_t prog_cnt;
+        uint32_t ids[0];
+};
+# endif
+
+int
+main(int argc, char **argv)
+{
+	static const uint64_t magic64 = 0xfacefeeddeadc0deULL;
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, u64_ptr);
+	uint64_t *const u64_efault = u64_ptr + 1;
+	uint32_t *const u32_arr = tail_alloc(sizeof(uint32_t) * 4);
+	uint32_t *const u32_efault = u32_arr + 4;
+
+	unsigned long num_skip;
+	long inject_retval;
+	bool locked = false;
+
+	*u64_ptr = magic64;
+
+	if (argc == 1)
+		return 0;
+
+	if (argc < 3)
+		error_msg_and_fail("Usage: %s NUM_SKIP INJECT_RETVAL", argv[0]);
+
+	num_skip = strtoul(argv[1], NULL, 0);
+	inject_retval = strtol(argv[2], NULL, 0);
+
+	if (inject_retval < 0)
+		error_msg_and_fail("Expected non-negative INJECT_RETVAL, "
+				   "but got %ld", inject_retval);
+
+	for (unsigned long i = 0; i < num_skip; i++) {
+		long ret = ioctl(-1, PERF_EVENT_IOC_ID, NULL);
+
+		printf("ioctl(-1, PERF_EVENT_IOC_ID, NULL) = %s%s\n",
+		       sprintrc(ret),
+		       ret == inject_retval ? " (INJECTED)" : "");
+
+		if (ret != inject_retval)
+			continue;
+
+		locked = true;
+		break;
+	}
+
+	if (!locked)
+		error_msg_and_fail("Hasn't locked on ioctl(-1"
+				   ", PERF_EVENT_IOC_ID, NULL) returning %lu",
+				   inject_retval);
+
+	/* PERF_EVENT_IOC_ID */
+	assert(ioctl(-1, PERF_EVENT_IOC_ID, NULL) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, NULL) = %ld (INJECTED)\n",
+	       inject_retval);
+
+	assert(ioctl(-1, PERF_EVENT_IOC_ID, u64_efault) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, %p) = %ld (INJECTED)\n",
+	       u64_efault, inject_retval);
+
+	assert(ioctl(-1, PERF_EVENT_IOC_ID, u64_ptr) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, [%" PRIu64 "]) = %ld (INJECTED)\n",
+	       magic64, inject_retval);
+
+	/* PERF_EVENT_IOC_QUERY_BPF */
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL) = %ld (INJECTED)\n",
+	       inject_retval);
+
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_efault)
+	       == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, %p) = %ld (INJECTED)\n",
+	       u32_efault, inject_retval);
+
+	u32_arr[3] = 0xdeadbeef;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr + 3)
+	       == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3735928559, ...}) "
+	       "= %ld (INJECTED)\n",
+	       inject_retval);
+
+	u32_arr[2] = 0xdecaffed;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr + 2)
+	       == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3737845741"
+	       ", prog_cnt=3735928559, ids=%p})"
+	       " = %ld (INJECTED)\n",
+	       u32_efault, inject_retval);
+
+	u32_arr[0] = 0xbadc0ded;
+	u32_arr[1] = 5;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3134983661"
+	       ", prog_cnt=5, ids=[3737845741, 3735928559, ... /* %p */]})"
+	       " = %ld (INJECTED)\n",
+	       u32_efault, inject_retval);
+
+	u32_arr[1] = 2;
+	assert(ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr) == inject_retval);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3134983661"
+	       ", prog_cnt=2, ids=[3737845741, 3735928559]})"
+	       " = %ld (INJECTED)\n",
+	       inject_retval);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_PERF_EVENT_H");
+
+#endif
diff --git a/tests/ioctl_perf-success.test b/tests/ioctl_perf-success.test
new file mode 100755
index 0000000..779a2a9
--- /dev/null
+++ b/tests/ioctl_perf-success.test
@@ -0,0 +1,15 @@
+#!/bin/sh -efu
+
+# Check decoding of successful PERF_EVENT_IOC_{ID,QUERY_BPF} ioctls.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+: ${IOCTL_INJECT_START=256}
+: ${IOCTL_INJECT_RETVAL=42}
+
+run_prog
+run_strace -a35 -e trace=ioctl \
+	-e inject=ioctl:retval="${IOCTL_INJECT_RETVAL}":when="${IOCTL_INJECT_START}+" \
+	../ioctl_perf-success "${IOCTL_INJECT_START}" "${IOCTL_INJECT_RETVAL}" > "$EXP"
+grep -v '^ioctl([012][,<]' < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests/ioctl_perf.c b/tests/ioctl_perf.c
new file mode 100644
index 0000000..7db01db
--- /dev/null
+++ b/tests/ioctl_perf.c
@@ -0,0 +1,238 @@
+/*
+ * Check decoding of PERF_EVENT_IOC_* commands of ioctl syscall.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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_PERF_EVENT_H
+
+# include <inttypes.h>
+# include <stdio.h>
+# include <string.h>
+# include <unistd.h>
+# include <sys/ioctl.h>
+# include <asm/unistd.h>
+# include <linux/perf_event.h>
+
+/*
+ * Workaround the bug in kernel UAPI that was fixed
+ * in Linux commit v2.6.33-rc1~48^2~288^2~19.
+ */
+# ifndef u64
+#  define u64 uint64_t
+# endif
+
+# define XLAT_MACROS_ONLY
+#  include "xlat/perf_ioctl_cmds.h"
+# undef XLAT_MACROS_ONLY
+
+# define STR16 "0123456789abcdef"
+
+static long
+sys_ioctl(kernel_long_t fd, kernel_ulong_t cmd, kernel_ulong_t arg)
+{
+	return syscall(__NR_ioctl, fd, cmd, arg);
+}
+
+int
+main(void)
+{
+	static const kernel_ulong_t unknown_perf_cmd =
+		(kernel_ulong_t) 0xbadc0dedfeed24edULL;
+	static const kernel_ulong_t magic =
+		(kernel_ulong_t) 0xdeadbeefbadc0dedULL;
+	static const uint64_t magic64 = 0xfacefeeddeadc0deULL;
+	static const char str[] = STR16 STR16 STR16 STR16;
+
+	static struct {
+		unsigned int cmd;
+		const char *str;
+	} flag_iocs[] = {
+		{ ARG_STR(PERF_EVENT_IOC_ENABLE) },
+		{ ARG_STR(PERF_EVENT_IOC_DISABLE) },
+		{ ARG_STR(PERF_EVENT_IOC_RESET) },
+	};
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, u64_ptr);
+	uint64_t *const u64_efault = u64_ptr + 1;
+	uint32_t *const u32_arr = tail_alloc(sizeof(uint32_t) * 4);
+	uint32_t *const u32_efault = u32_arr + 4;
+	char *const str_ptr = tail_memdup(str, sizeof(str));
+	char *const str_efault = str_ptr + sizeof(str);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct perf_event_attr, pea_ptr);
+
+	*u64_ptr = magic64;
+	fill_memory_ex(pea_ptr, sizeof(*pea_ptr), 0xaa, 0x55);
+
+	/* Unknown perf commands */
+	sys_ioctl(-1, unknown_perf_cmd, magic);
+	printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x24, %#x, %#x), "
+	       "%#lx) = -1 EBADF (%m)\n",
+	       _IOC_DIR((unsigned int) unknown_perf_cmd) & _IOC_NONE ?
+	       "|_IOC_NONE" : "",
+	       _IOC_NR((unsigned int) unknown_perf_cmd),
+	       _IOC_SIZE((unsigned int) unknown_perf_cmd),
+	       (unsigned long) magic);
+
+	sys_ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES + 1, magic);
+	printf("ioctl(-1, _IOC(_IOC_WRITE, 0x24, %#x, %#x), %#lx)"
+	       " = -1 EBADF (%m)\n",
+	       (unsigned int) _IOC_NR(PERF_EVENT_IOC_MODIFY_ATTRIBUTES + 1),
+	       (unsigned int) _IOC_SIZE(PERF_EVENT_IOC_MODIFY_ATTRIBUTES + 1),
+	       (unsigned long) magic);
+
+	/* PERF_EVENT_IOC_{ENABLE,DISABLE,RESET} */
+	for (unsigned i = 0; i < ARRAY_SIZE(flag_iocs); i++) {
+		ioctl(-1, flag_iocs[i].cmd, 0);
+		printf("ioctl(-1, %s, 0) = -1 EBADF (%m)\n", flag_iocs[i].str);
+
+		ioctl(-1, flag_iocs[i].cmd, 1);
+		printf("ioctl(-1, %s, PERF_IOC_FLAG_GROUP) = -1 EBADF (%m)\n",
+		       flag_iocs[i].str);
+
+		ioctl(-1, flag_iocs[i].cmd, 2);
+		printf("ioctl(-1, %s, 0x2 /* PERF_IOC_FLAG_??? */) "
+		       "= -1 EBADF (%m)\n",
+		       flag_iocs[i].str);
+
+		sys_ioctl(-1, flag_iocs[i].cmd, magic);
+		printf("ioctl(-1, %s, PERF_IOC_FLAG_GROUP|%#x) "
+		       "= -1 EBADF (%m)\n",
+		       flag_iocs[i].str, (unsigned int) magic & ~1U);
+	}
+
+	/* PERF_EVENT_IOC_REFRESH */
+	sys_ioctl(-1, PERF_EVENT_IOC_REFRESH, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_REFRESH, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	/* PERF_EVENT_IOC_PERIOD */
+	ioctl(-1, PERF_EVENT_IOC_PERIOD, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_PERIOD, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_PERIOD, u64_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_PERIOD, %p) = -1 EBADF (%m)\n",
+	      u64_efault);
+
+	ioctl(-1, PERF_EVENT_IOC_PERIOD, u64_ptr);
+	printf("ioctl(-1, PERF_EVENT_IOC_PERIOD, [%" PRIu64 "])"
+	       " = -1 EBADF (%m)\n",
+	       magic64);
+
+	/* PERF_EVENT_IOC_SET_OUTPUT */
+	sys_ioctl(-1, PERF_EVENT_IOC_SET_OUTPUT, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_OUTPUT, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	/* PERF_EVENT_IOC_SET_FILTER */
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, %p) = -1 EBADF (%m)\n",
+	       str_efault);
+
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_ptr);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, \"%.32s\"...)"
+	       " = -1 EBADF (%m)\n",
+	       str_ptr);
+
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_ptr + 40);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, \"%.32s\")"
+	       " = -1 EBADF (%m)\n",
+	       str_ptr + 40);
+
+	str_ptr[sizeof(str) - 1] = '0';
+	ioctl(-1, PERF_EVENT_IOC_SET_FILTER, str_ptr + 40);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_FILTER, %p)"
+	       " = -1 EBADF (%m)\n",
+	       str_ptr + 40);
+
+	/* PERF_EVENT_IOC_ID */
+	ioctl(-1, PERF_EVENT_IOC_ID, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_ID, u64_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, %p) = -1 EBADF (%m)\n",
+	      u64_efault);
+
+	ioctl(-1, PERF_EVENT_IOC_ID, u64_ptr);
+	printf("ioctl(-1, PERF_EVENT_IOC_ID, %p) = -1 EBADF (%m)\n",
+	       u64_ptr);
+
+	/* PERF_EVENT_IOC_SET_BPF */
+	sys_ioctl(-1, PERF_EVENT_IOC_SET_BPF, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_SET_BPF, %d) = -1 EBADF (%m)\n",
+	       (int) magic);
+
+	/* PERF_EVENT_IOC_PAUSE_OUTPUT */
+	sys_ioctl(-1, PERF_EVENT_IOC_PAUSE_OUTPUT, magic);
+	printf("ioctl(-1, PERF_EVENT_IOC_PAUSE_OUTPUT, %lu) = -1 EBADF (%m)\n",
+	       (unsigned long) magic);
+
+	/* PERF_EVENT_IOC_QUERY_BPF */
+	ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, NULL) = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_efault);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, %p) = -1 EBADF (%m)\n",
+	       u32_efault);
+
+	u32_arr[0] = 0xbadc0ded;
+	ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, u32_arr);
+	printf("ioctl(-1, PERF_EVENT_IOC_QUERY_BPF, {ids_len=3134983661, ...})"
+	       " = -1 EBADF (%m)\n");
+
+	/* PERF_EVENT_IOC_MODIFY_ATTRIBUTES */
+	ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, NULL);
+	printf("ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, NULL)"
+	       " = -1 EBADF (%m)\n");
+
+	ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, pea_ptr + 1);
+	printf("ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, %p)"
+	       " = -1 EBADF (%m)\n",
+	       pea_ptr + 1);
+
+	printf("ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES"
+	       ", {type=%#x /* PERF_TYPE_??? */"
+	       ", size=%#x /* PERF_ATTR_SIZE_??? */"
+	       ", config=%#llx, ...}) = -1 EBADF (%m)\n",
+	       (unsigned int) pea_ptr->type,
+	       (unsigned int) pea_ptr->size,
+	       (unsigned long long) pea_ptr->config);
+	ioctl(-1, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, pea_ptr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_PERF_EVENT_H");
+
+#endif
diff --git a/tests/ioctl_perf.gen.test b/tests/ioctl_perf.gen.test
new file mode 100755
index 0000000..0264f34
--- /dev/null
+++ b/tests/ioctl_perf.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_perf +ioctl.test ); do not edit.
+set -- 
+. "${srcdir=.}/ioctl.test"
diff --git a/tests/ioctl_ptp.c b/tests/ioctl_ptp.c
new file mode 100644
index 0000000..1c82919
--- /dev/null
+++ b/tests/ioctl_ptp.c
@@ -0,0 +1,131 @@
+/*
+ * Check decoding of PTP_* commands of ioctl syscall.
+ *
+ * Copyright (c) 2018 Harsha Sharma <harshasharmaiitr@gmail.com>
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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_PTP_SYS_OFFSET
+
+#include <errno.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <linux/ptp_clock.h>
+
+#include "xlat.h"
+#include "xlat/ptp_flags_options.h"
+
+static void
+test_no_device(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_clock_caps, caps);
+	fill_memory(caps, sizeof(*caps));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_sys_offset, sysoff);
+	fill_memory(sysoff, sizeof(*sysoff));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_extts_request, extts);
+	fill_memory(extts, sizeof(*extts));
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct ptp_perout_request, perout);
+	fill_memory(perout, sizeof(*perout));
+
+	int saved_errno;
+
+	/* PTP_CLOCK_GETCAPS */
+	ioctl(-1, PTP_CLOCK_GETCAPS, NULL);
+	printf("ioctl(-1, PTP_CLOCK_GETCAPS, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_CLOCK_GETCAPS, caps);
+	printf("ioctl(-1, PTP_CLOCK_GETCAPS, %p) = -1 EBADF (%m)\n", caps);
+
+	/* PTP_SYS_OFFSET */
+	ioctl(-1, PTP_SYS_OFFSET, NULL);
+	printf("ioctl(-1, PTP_SYS_OFFSET, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_SYS_OFFSET, sysoff);
+	printf("ioctl(-1, PTP_SYS_OFFSET, {n_samples=%u}) = -1 EBADF (%m)\n",
+	       sysoff->n_samples);
+
+	/* PTP_ENABLE_PPS */
+	ioctl(-1, PTP_ENABLE_PPS, 0);
+	printf("ioctl(-1, PTP_ENABLE_PPS, 0) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_ENABLE_PPS, 1);
+	printf("ioctl(-1, PTP_ENABLE_PPS, 1) = -1 EBADF (%m)\n");
+
+	/* PTP_EXTTS_REQUEST */
+	ioctl(-1, PTP_EXTTS_REQUEST, NULL);
+	printf("ioctl(-1, PTP_EXTTS_REQUEST, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_EXTTS_REQUEST, extts);
+	saved_errno = errno;
+	printf("ioctl(-1, PTP_EXTTS_REQUEST, {index=%d, flags=", extts->index);
+	printflags(ptp_flags_options, extts->flags, "PTP_???");
+	errno = saved_errno;
+	printf("}) = -1 EBADF (%m)\n");
+
+	/* PTP_PEROUT_REQUEST */
+	ioctl(-1, PTP_PEROUT_REQUEST, NULL);
+	printf("ioctl(-1, PTP_PEROUT_REQUEST, NULL) = -1 EBADF (%m)\n");
+	ioctl(-1, PTP_PEROUT_REQUEST, perout);
+	saved_errno = errno;
+	printf("ioctl(-1, PTP_PEROUT_REQUEST, {start={sec=%" PRId64
+	       ", nsec=%" PRIu32 "}, period={sec=%" PRId64 ", nsec=%" PRIu32 "}"
+	       ", index=%d, flags=",
+	       (int64_t) perout->start.sec, perout->start.nsec,
+	       (int64_t)perout->period.sec, perout->period.nsec, perout->index);
+	printflags(ptp_flags_options, perout->flags, "PTP_???");
+	errno = saved_errno;
+	printf("}) = -1 EBADF (%m)\n");
+
+	/* unrecognized */
+	ioctl(-1, _IOC(_IOC_READ, PTP_CLK_MAGIC, 0xff, 0xfe), 0);
+	printf("ioctl(-1, _IOC(_IOC_READ, %#x, 0xff, 0xfe), 0)"
+	       " = -1 EBADF (%m)\n", PTP_CLK_MAGIC);
+
+	const unsigned long arg = (unsigned long) 0xfacefeeddeadbeefULL;
+	ioctl(-1, _IOC(_IOC_WRITE, PTP_CLK_MAGIC, 0xfd, 0xfc), arg);
+	printf("ioctl(-1, _IOC(_IOC_WRITE, %#x, 0xfd, 0xfc), %#lx)"
+	       " = -1 EBADF (%m)\n", PTP_CLK_MAGIC, arg);
+}
+
+int
+main(void)
+{
+	test_no_device();
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_PTP_SYS_OFFSET")
+
+#endif /* HAVE_STRUCT_PTP_SYS_OFFSET */
diff --git a/tests/ioctl_ptp.gen.test b/tests/ioctl_ptp.gen.test
new file mode 100755
index 0000000..6c0b0a9
--- /dev/null
+++ b/tests/ioctl_ptp.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_ptp +ioctl.test ); do not edit.
+set -- 
+. "${srcdir=.}/ioctl.test"
diff --git a/tests/ioctl_v4l2.c b/tests/ioctl_v4l2.c
index 2736b39..a7dcc49 100644
--- a/tests/ioctl_v4l2.c
+++ b/tests/ioctl_v4l2.c
@@ -842,6 +842,21 @@
 	printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_USER"
 	       ", count=%u}) = -1 EBADF (%m)\n", p_ext_controls->count);
 
+	p_ext_controls->ctrl_class = 0x00a30000;
+	p_ext_controls->count = magic;
+	ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls);
+	printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_DETECT"
+	       ", count=%u, controls=%p}) = -1 EBADF (%m)\n",
+	       p_ext_controls->count, p_ext_controls->controls);
+
+	p_ext_controls->ctrl_class = 0x00a40000;
+	p_ext_controls->count = magic;
+	ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls);
+	printf("ioctl(-1, VIDIOC_S_EXT_CTRLS"
+	       ", {ctrl_class=0xa40000 /* V4L2_CTRL_CLASS_??? */"
+	       ", count=%u, controls=%p}) = -1 EBADF (%m)\n",
+	       p_ext_controls->count, p_ext_controls->controls);
+
 	p_ext_controls->ctrl_class = V4L2_CTRL_CLASS_MPEG;
 	p_ext_controls->count = magic;
 	ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls);
@@ -883,7 +898,7 @@
 	       ", {ctrl_class=V4L2_CTRL_CLASS_MPEG, count=%u, controls="
 	       "[{id=V4L2_CID_BRIGHTNESS, size=0, value=%d, value64=%lld}"
 	       ", {id=V4L2_CID_CONTRAST, size=2, string=\"\\377\\377\"}"
-	       ", %p]}) = -1 EBADF (%m)\n",
+	       ", ... /* %p */]}) = -1 EBADF (%m)\n",
 	       p_ext_controls->count,
 	       p_ext_controls->controls[0].value,
 	       (long long) p_ext_controls->controls[0].value64,
diff --git a/tests/ipc.sh b/tests/ipc.sh
index 5943c1a..ef55073 100644
--- a/tests/ipc.sh
+++ b/tests/ipc.sh
@@ -5,7 +5,7 @@
 . "${srcdir=.}/init.sh"
 
 run_prog > /dev/null
-run_strace -eipc $args > "$EXP"
+run_strace -eipc "$@" $args > "$EXP"
 match_grep "$LOG" "$EXP"
 
 exit 0
diff --git a/tests/ipc_msg-Xabbrev.c b/tests/ipc_msg-Xabbrev.c
new file mode 100644
index 0000000..f4535e8
--- /dev/null
+++ b/tests/ipc_msg-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_msg.c"
diff --git a/tests/ipc_msg-Xabbrev.gen.test b/tests/ipc_msg-Xabbrev.gen.test
new file mode 100755
index 0000000..0969ee1
--- /dev/null
+++ b/tests/ipc_msg-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg-Xabbrev +ipc.sh -Xabbrev -a26); do not edit.
+set -- -Xabbrev -a26
+. "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_msg-Xraw.c b/tests/ipc_msg-Xraw.c
new file mode 100644
index 0000000..9c016d3
--- /dev/null
+++ b/tests/ipc_msg-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_msg.c"
diff --git a/tests/ipc_msg-Xraw.gen.test b/tests/ipc_msg-Xraw.gen.test
new file mode 100755
index 0000000..5d5d732
--- /dev/null
+++ b/tests/ipc_msg-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg-Xraw +ipc.sh -Xraw -a16); do not edit.
+set -- -Xraw -a16
+. "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_msg-Xverbose.c b/tests/ipc_msg-Xverbose.c
new file mode 100644
index 0000000..3f59f98
--- /dev/null
+++ b/tests/ipc_msg-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_msg.c"
diff --git a/tests/ipc_msg-Xverbose.gen.test b/tests/ipc_msg-Xverbose.gen.test
new file mode 100755
index 0000000..88c79a0
--- /dev/null
+++ b/tests/ipc_msg-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg-Xverbose +ipc.sh -Xverbose -a34); do not edit.
+set -- -Xverbose -a34
+. "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_msg.c b/tests/ipc_msg.c
index b493843..a74dba5 100644
--- a/tests/ipc_msg.c
+++ b/tests/ipc_msg.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-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,6 +36,10 @@
 #include "xlat.h"
 #include "xlat/resource_flags.h"
 
+#ifndef MSG_STAT_ANY
+# define MSG_STAT_ANY 13
+#endif
+
 /*
  * Before glibc-2.22-122-gbe48165, ppc64 code tried to retrieve data
  * provided in third argument of msgctl call (in case of IPC_SET cmd)
@@ -52,13 +57,50 @@
 # define TEST_MSGCTL_BOGUS_ADDR 1
 #endif
 
+#if XLAT_RAW
+# define str_ipc_excl_nowait "0xface1c00"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_set "0x1"
+# define str_ipc_stat "0x2"
+# define str_msg_stat "0xb"
+# define str_msg_info "0xc"
+# define str_msg_stat_any "0xd"
+# define str_ipc_64 "0x100"
+# define str_bogus_cmd "0xdeadbeef"
+#elif XLAT_VERBOSE
+# define str_ipc_excl_nowait \
+	"0xface1c00 /\\* IPC_EXCL\\|IPC_NOWAIT\\|0xface1000 \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_set "0x1 /\\* IPC_SET \\*/"
+# define str_ipc_stat "0x2 /\\* IPC_STAT \\*/"
+# define str_msg_stat "0xb /\\* MSG_STAT \\*/"
+# define str_msg_info "0xc /\\* MSG_INFO \\*/"
+# define str_msg_stat_any "0xd /\\* MSG_STAT_ANY \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+# define str_bogus_cmd "0xdeadbeef /\\* MSG_\\?\\?\\? \\*/"
+#else
+# define str_ipc_excl_nowait "IPC_EXCL\\|IPC_NOWAIT\\|0xface1000"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_set "IPC_SET"
+# define str_ipc_stat "IPC_STAT"
+# define str_msg_stat "MSG_STAT"
+# define str_msg_info "MSG_INFO"
+# define str_msg_stat_any "MSG_STAT_ANY"
+# define str_ipc_64 "IPC_64"
+# define str_bogus_cmd "0xdeadbeef /\\* MSG_\\?\\?\\? \\*/"
+#endif
+
 static int id = -1;
 
 static void
 cleanup(void)
 {
 	msgctl(id, IPC_RMID, NULL);
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_RMID, NULL\\) += 0\n", id);
+	printf("msgctl\\(%d, (%s\\|)?%s, NULL\\) += 0\n",
+	       id, str_ipc_64, str_ipc_rmid);
 	id = -1;
 }
 
@@ -67,7 +109,7 @@
 {
 	static const key_t private_key =
 		(key_t) (0xffffffff00000000ULL | IPC_PRIVATE);
-	static const key_t bogus_key = (key_t) 0xeca86420fdb97531ULL;
+	static const key_t bogus_key = (key_t) 0xeca86420fdb9f531ULL;
 	static const int bogus_msgid = 0xfdb97531;
 	static const int bogus_cmd = 0xdeadbeef;
 #if TEST_MSGCTL_BOGUS_ADDR
@@ -79,37 +121,36 @@
 	struct msqid_ds ds;
 
 	rc = msgget(bogus_key, bogus_flags);
-	printf("msgget\\(%#llx, %s%s%s%#x\\|%#04o\\) += %s\n",
+	printf("msgget\\(%#llx, %s\\|%#04o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key),
-	       IPC_CREAT & bogus_flags ? "IPC_CREAT\\|" : "",
-	       IPC_EXCL & bogus_flags ? "IPC_EXCL\\|" : "",
-	       IPC_NOWAIT & bogus_flags ? "IPC_NOWAIT\\|" : "",
-	       bogus_flags & ~(0777 | IPC_CREAT | IPC_EXCL | IPC_NOWAIT),
+	       str_ipc_excl_nowait,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	id = msgget(private_key, 0600);
 	if (id < 0)
 		perror_msg_and_skip("msgget");
-	printf("msgget\\(IPC_PRIVATE, 0600\\) += %d\n", id);
+	printf("msgget\\(%s, 0600\\) = %d\n", str_ipc_private, id);
 	atexit(cleanup);
 
 	rc = msgctl(bogus_msgid, bogus_cmd, NULL);
-	printf("msgctl\\(%d, (IPC_64\\|)?%#x /\\* MSG_\\?\\?\\? \\*/, NULL\\)"
-	       " += %s\n", bogus_msgid, bogus_cmd, sprintrc_grep(rc));
+	printf("msgctl\\(%d, (%s\\|)?%s, NULL\\) = %s\n",
+	       bogus_msgid, str_ipc_64, str_bogus_cmd, sprintrc_grep(rc));
 
 #if TEST_MSGCTL_BOGUS_ADDR
 	rc = msgctl(bogus_msgid, IPC_SET, bogus_addr);
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_SET, %p\\) += %s\n",
-	       bogus_msgid, bogus_addr, sprintrc_grep(rc));
+	printf("msgctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       bogus_msgid, str_ipc_64, str_ipc_set, bogus_addr,
+	       sprintrc_grep(rc));
 #endif
 
 	if (msgctl(id, IPC_STAT, &ds))
 		perror_msg_and_skip("msgctl IPC_STAT");
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_STAT, \\{msg_perm=\\{uid=%u"
+	printf("msgctl\\(%d, (%s\\|)?%s, \\{msg_perm=\\{uid=%u"
 	       ", gid=%u, mode=%#o, key=%u, cuid=%u, cgid=%u\\}, msg_stime=%u"
 	       ", msg_rtime=%u, msg_ctime=%u, msg_qnum=%u, msg_qbytes=%u"
-	       ", msg_lspid=%u, msg_lrpid=%u\\}\\) += 0\n",
-	       id, (unsigned) ds.msg_perm.uid, (unsigned) ds.msg_perm.gid,
+	       ", msg_lspid=%u, msg_lrpid=%u\\}\\) = 0\n",
+	       id, str_ipc_64, str_ipc_stat,
+	       (unsigned) ds.msg_perm.uid, (unsigned) ds.msg_perm.gid,
 	       (unsigned) ds.msg_perm.mode, (unsigned) ds.msg_perm.__key,
 	       (unsigned) ds.msg_perm.cuid, (unsigned) ds.msg_perm.cgid,
 	       (unsigned) ds.msg_stime, (unsigned) ds.msg_rtime,
@@ -119,18 +160,22 @@
 
 	if (msgctl(id, IPC_SET, &ds))
 		perror_msg_and_skip("msgctl IPC_SET");
-	printf("msgctl\\(%d, (IPC_64\\|)?IPC_SET, \\{msg_perm=\\{uid=%u"
-	       ", gid=%u, mode=%#o\\}, ...\\}\\) += 0\n",
-	       id, (unsigned) ds.msg_perm.uid, (unsigned) ds.msg_perm.gid,
-	       (unsigned) ds.msg_perm.mode);
+	printf("msgctl\\(%d, (%s\\|)?%s, \\{msg_perm=\\{uid=%u"
+	       ", gid=%u, mode=%#o\\}, ...\\}\\) = 0\n",
+	       id, str_ipc_64, str_ipc_set, (unsigned) ds.msg_perm.uid,
+	       (unsigned) ds.msg_perm.gid, (unsigned) ds.msg_perm.mode);
 
 	rc = msgctl(0, MSG_INFO, &ds);
-	printf("msgctl\\(0, (IPC_64\\|)?MSG_INFO, %p\\) += %s\n",
-	       &ds, sprintrc_grep(rc));
+	printf("msgctl\\(0, (%s\\|)?%s, %p\\) = %s\n",
+	       str_ipc_64, str_msg_info, &ds, sprintrc_grep(rc));
 
 	rc = msgctl(id, MSG_STAT, &ds);
-	printf("msgctl\\(%d, (IPC_64\\|)?MSG_STAT, %p\\) += %s\n",
-	       id, &ds, sprintrc_grep(rc));
+	printf("msgctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_msg_stat, &ds, sprintrc_grep(rc));
+
+	rc = msgctl(id, MSG_STAT_ANY, &ds);
+	printf("msgctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_msg_stat_any, &ds, sprintrc_grep(rc));
 
 	return 0;
 }
diff --git a/tests/ipc_msg.gen.test b/tests/ipc_msg.gen.test
index b1f1f7e..8202619 100755
--- a/tests/ipc_msg.gen.test
+++ b/tests/ipc_msg.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg +ipc.sh ); do not edit.
-set -- 
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg +ipc.sh -a26); do not edit.
+set -- -a26
 . "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_msgbuf-Xabbrev.c b/tests/ipc_msgbuf-Xabbrev.c
new file mode 100644
index 0000000..e2f09eb
--- /dev/null
+++ b/tests/ipc_msgbuf-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_msgbuf.c"
diff --git a/tests/ipc_msgbuf-Xabbrev.gen.test b/tests/ipc_msgbuf-Xabbrev.gen.test
new file mode 100755
index 0000000..402d804
--- /dev/null
+++ b/tests/ipc_msgbuf-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msgbuf-Xabbrev +ipc_msgbuf.test -Xabbrev); do not edit.
+set -- -Xabbrev
+. "${srcdir=.}/ipc_msgbuf.test"
diff --git a/tests/ipc_msgbuf-Xraw.c b/tests/ipc_msgbuf-Xraw.c
new file mode 100644
index 0000000..c6f8a31
--- /dev/null
+++ b/tests/ipc_msgbuf-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_msgbuf.c"
diff --git a/tests/ipc_msgbuf-Xraw.gen.test b/tests/ipc_msgbuf-Xraw.gen.test
new file mode 100755
index 0000000..c1112cb
--- /dev/null
+++ b/tests/ipc_msgbuf-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msgbuf-Xraw +ipc_msgbuf.test -Xraw -a22); do not edit.
+set -- -Xraw -a22
+. "${srcdir=.}/ipc_msgbuf.test"
diff --git a/tests/ipc_msgbuf-Xverbose.c b/tests/ipc_msgbuf-Xverbose.c
new file mode 100644
index 0000000..ae09a4a
--- /dev/null
+++ b/tests/ipc_msgbuf-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_msgbuf.c"
diff --git a/tests/ipc_msgbuf-Xverbose.gen.test b/tests/ipc_msgbuf-Xverbose.gen.test
new file mode 100755
index 0000000..2c72eb7
--- /dev/null
+++ b/tests/ipc_msgbuf-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msgbuf-Xverbose +ipc_msgbuf.test -Xverbose); do not edit.
+set -- -Xverbose
+. "${srcdir=.}/ipc_msgbuf.test"
diff --git a/tests/ipc_msgbuf.c b/tests/ipc_msgbuf.c
index c4af1be..e439c49 100644
--- a/tests/ipc_msgbuf.c
+++ b/tests/ipc_msgbuf.c
@@ -1,7 +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.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,10 @@
  */
 
 #include "tests.h"
+#include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <asm/unistd.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
 #include <sys/stat.h>
@@ -38,22 +41,54 @@
 
 static int msqid = -1;
 
+#if XLAT_RAW
+# define str_ipc_creat "0x200"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_64 "0x100"
+#elif XLAT_VERBOSE
+# define str_ipc_creat "0x200 /\\* IPC_CREAT \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+#else
+# define str_ipc_creat "IPC_CREAT"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_64 "IPC_64"
+#endif
+
 static int
 cleanup(void)
 {
 	if (msqid != -1) {
 		int rc = msgctl(msqid, IPC_RMID, 0);
+		printf("msgctl\\(%d, (%s\\|)?%s, NULL\\) = 0\n",
+		       msqid, str_ipc_64, str_ipc_rmid);
 		msqid = -1;
 		if (rc == -1)
 			return 77;
+		puts("\\+\\+\\+ exited with 0 \\+\\+\\+");
 	}
 	return 0;
 }
 
 int
+sys_msgrcv(int msqid, void *msgp, size_t sz, kernel_long_t msgtyp,
+	   int msgflg)
+{
+#if defined __x86_64__ && defined __ILP32__
+	return syscall(__NR_msgrcv, msqid, msgp, sz, msgtyp, msgflg);
+#else
+	return msgrcv(msqid, msgp, sz, msgtyp, msgflg);
+#endif
+}
+
+int
 main(void)
 {
-	const long mtype = 0xdefaced;
+	/* mtype has to be positive */
+	const kernel_long_t mtype = (kernel_long_t) 0x7facefed5adc0dedULL;
 	struct {
 		kernel_long_t mtype;
 		char mtext[msgsz];
@@ -64,11 +99,23 @@
 	msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRWXU);
 	if (msqid == -1)
 		perror_msg_and_skip("msgget");
+	printf("msgget\\(%s, %s\\|0700\\) = %d\n",
+	       str_ipc_private, str_ipc_creat, msqid);
+
 	typedef void (*atexit_func)(void);
 	atexit((atexit_func) cleanup);
+
+	printf("msgsnd\\(%d, \\{%lld, \"" text_string "\\\\0\"\\}, 14, 0\\)"
+	       " = 0\n",
+	       msqid, (long long) mtype);
 	if (msgsnd(msqid, &msg, msgsz, 0) == -1)
 		perror_msg_and_skip("msgsnd");
-	if (msgrcv(msqid, &msg, msgsz, mtype, 0) != msgsz)
+
+	if (sys_msgrcv(msqid, &msg, msgsz, -mtype, 0) != msgsz)
 		perror_msg_and_skip("msgrcv");
+	printf("msgrcv\\(%d, \\{%lld, \"" text_string "\\\\0\"\\}, 14, %lld"
+	       ", 0\\) = 14\n",
+	       msqid, (long long) mtype, -(long long) mtype);
+
 	return cleanup();
 }
diff --git a/tests/ipc_msgbuf.test b/tests/ipc_msgbuf.test
index d0b65d1..9e78785 100755
--- a/tests/ipc_msgbuf.test
+++ b/tests/ipc_msgbuf.test
@@ -5,7 +5,7 @@
 . "${srcdir=.}/init.sh"
 
 run_prog
-run_strace -v -e msgget,msgsnd,msgrcv,msgctl $args
-match_grep
+run_strace -a26 -v -e msgget,msgsnd,msgrcv,msgctl "$@" $args > "$EXP"
+match_grep "$LOG" "$EXP"
 
 exit 0
diff --git a/tests/ipc_sem-Xabbrev.c b/tests/ipc_sem-Xabbrev.c
new file mode 100644
index 0000000..727005a
--- /dev/null
+++ b/tests/ipc_sem-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_sem.c"
diff --git a/tests/ipc_sem-Xabbrev.gen.test b/tests/ipc_sem-Xabbrev.gen.test
new file mode 100755
index 0000000..0757a48
--- /dev/null
+++ b/tests/ipc_sem-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem-Xabbrev +ipc.sh -Xabbrev -a29); do not edit.
+set -- -Xabbrev -a29
+. "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_sem-Xraw.c b/tests/ipc_sem-Xraw.c
new file mode 100644
index 0000000..0a57c0a
--- /dev/null
+++ b/tests/ipc_sem-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_sem.c"
diff --git a/tests/ipc_sem-Xraw.gen.test b/tests/ipc_sem-Xraw.gen.test
new file mode 100755
index 0000000..07d59e5
--- /dev/null
+++ b/tests/ipc_sem-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem-Xraw +ipc.sh -Xraw -a19); do not edit.
+set -- -Xraw -a19
+. "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_sem-Xverbose.c b/tests/ipc_sem-Xverbose.c
new file mode 100644
index 0000000..56e8380
--- /dev/null
+++ b/tests/ipc_sem-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_sem.c"
diff --git a/tests/ipc_sem-Xverbose.gen.test b/tests/ipc_sem-Xverbose.gen.test
new file mode 100755
index 0000000..43a61d0
--- /dev/null
+++ b/tests/ipc_sem-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem-Xverbose +ipc.sh -Xverbose -a36); do not edit.
+set -- -Xverbose -a36
+. "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_sem.c b/tests/ipc_sem.c
index c883272..8cbbfaa 100644
--- a/tests/ipc_sem.c
+++ b/tests/ipc_sem.c
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2015 Andreas Schwab <schwab@suse.de>
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,6 +36,43 @@
 #include "xlat.h"
 #include "xlat/resource_flags.h"
 
+#ifndef SEM_STAT_ANY
+# define SEM_STAT_ANY 20
+#endif
+
+#if XLAT_RAW
+# define str_ipc_flags "0xface1e00"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_stat "0x2"
+# define str_sem_stat "0x12"
+# define str_sem_info "0x13"
+# define str_sem_stat_any "0x14"
+# define str_ipc_64 "0x100"
+# define str_bogus_cmd "0xdeadbeef"
+#elif XLAT_VERBOSE
+# define str_ipc_flags \
+	"0xface1e00 /\\* IPC_CREAT\\|IPC_EXCL\\|IPC_NOWAIT\\|0xface1000 \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_stat "0x2 /\\* IPC_STAT \\*/"
+# define str_sem_stat "0x12 /\\* SEM_STAT \\*/"
+# define str_sem_info "0x13 /\\* SEM_INFO \\*/"
+# define str_sem_stat_any "0x14 /\\* SEM_STAT_ANY \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+# define str_bogus_cmd "0xdeadbeef /\\* SEM_\\?\\?\\? \\*/"
+#else
+# define str_ipc_flags "IPC_CREAT\\|IPC_EXCL\\|IPC_NOWAIT\\|0xface1000"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_stat "IPC_STAT"
+# define str_sem_stat "SEM_STAT"
+# define str_sem_info "SEM_INFO"
+# define str_sem_stat_any "SEM_STAT_ANY"
+# define str_ipc_64 "IPC_64"
+# define str_bogus_cmd "0xdeadbeef /\\* SEM_\\?\\?\\? \\*/"
+#endif
+
 union semun {
 	int		 val;    /* Value for SETVAL */
 	struct semid_ds	*buf;    /* Buffer for IPC_STAT, IPC_SET */
@@ -50,8 +87,8 @@
 cleanup(void)
 {
 	semctl(id, 0, IPC_RMID, 0);
-	printf("semctl\\(%d, 0, (IPC_64\\|)?IPC_RMID, \\[?NULL\\]?\\) += 0\n",
-	       id);
+	printf("semctl\\(%d, 0, (%s\\|)?%s, \\[?NULL\\]?\\) = 0\n",
+	       id, str_ipc_64, str_ipc_rmid);
 	id = -1;
 }
 
@@ -75,42 +112,41 @@
 	struct seminfo info;
 
 	rc = semget(bogus_key, bogus_size, bogus_flags);
-	printf("semget\\(%#llx, %d, %s%s%s%#x\\|%#04o\\) += %s\n",
+	printf("semget\\(%#llx, %d, %s\\|%#04o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       IPC_CREAT & bogus_flags ? "IPC_CREAT\\|" : "",
-	       IPC_EXCL & bogus_flags ? "IPC_EXCL\\|" : "",
-	       IPC_NOWAIT & bogus_flags ? "IPC_NOWAIT\\|" : "",
-	       bogus_flags & ~(0777 | IPC_CREAT | IPC_EXCL | IPC_NOWAIT),
-	       bogus_flags & 0777, sprintrc_grep(rc));
+	       str_ipc_flags, bogus_flags & 0777, sprintrc_grep(rc));
 
 	id = semget(private_key, 1, 0600);
 	if (id < 0)
 		perror_msg_and_skip("semget");
-	printf("semget\\(IPC_PRIVATE, 1, 0600\\) += %d\n", id);
+	printf("semget\\(%s, 1, 0600\\) = %d\n", str_ipc_private, id);
 	atexit(cleanup);
 
 	rc = semctl(bogus_semid, bogus_semnum, bogus_cmd, bogus_arg);
 #define SEMCTL_BOGUS_ARG_FMT "(%#lx|\\[(%#lx|NULL)\\]|NULL)"
-	printf("semctl\\(%d, %d, (IPC_64\\|)?%#x /\\* SEM_\\?\\?\\? \\*/"
-	       ", " SEMCTL_BOGUS_ARG_FMT "\\) += %s\n",
-	       bogus_semid, bogus_semnum, bogus_cmd,
+	printf("semctl\\(%d, %d, (%s\\|)?%s, " SEMCTL_BOGUS_ARG_FMT "\\) = %s\n",
+	       bogus_semid, bogus_semnum, str_ipc_64, str_bogus_cmd,
 	       bogus_arg, bogus_arg, sprintrc_grep(rc));
 
 	un.buf = &ds;
 	if (semctl(id, 0, IPC_STAT, un))
 		perror_msg_and_skip("semctl IPC_STAT");
-	printf("semctl\\(%d, 0, (IPC_64\\|)?IPC_STAT, \\[?%p\\]?\\) += 0\n",
-	       id, &ds);
+	printf("semctl\\(%d, 0, (%s\\|)?%s, \\[?%p\\]?\\) = 0\n",
+	       id, str_ipc_64, str_ipc_stat, &ds);
 
 	un.__buf = &info;
 	rc = semctl(0, 0, SEM_INFO, un);
-	printf("semctl\\(0, 0, (IPC_64\\|)?SEM_INFO, \\[?%p\\]?\\) += %s\n",
-	       &info, sprintrc_grep(rc));
+	printf("semctl\\(0, 0, (%s\\|)?%s, \\[?%p\\]?\\) = %s\n",
+	       str_ipc_64, str_sem_info, &info, sprintrc_grep(rc));
 
 	un.buf = &ds;
 	rc = semctl(id, 0, SEM_STAT, un);
-	printf("semctl\\(%d, 0, (IPC_64\\|)?SEM_STAT, \\[?%p\\]?\\) += %s\n",
-	       id, &ds, sprintrc_grep(rc));
+	printf("semctl\\(%d, 0, (%s\\|)?%s, \\[?%p\\]?\\) = %s\n",
+	       id, str_ipc_64, str_sem_stat, &ds, sprintrc_grep(rc));
+
+	rc = semctl(id, 0, SEM_STAT_ANY, un);
+	printf("semctl\\(%d, 0, (%s\\|)?%s, (%p|\\[(%p|NULL)\\]|NULL)\\) = %s\n",
+	       id, str_ipc_64, str_sem_stat_any, &ds, &ds, sprintrc_grep(rc));
 
 	return 0;
 }
diff --git a/tests/ipc_sem.gen.test b/tests/ipc_sem.gen.test
index a1c03d2..173b3af 100755
--- a/tests/ipc_sem.gen.test
+++ b/tests/ipc_sem.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem +ipc.sh ); do not edit.
-set -- 
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem +ipc.sh -a29); do not edit.
+set -- -a29
 . "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_shm-Xabbrev.c b/tests/ipc_shm-Xabbrev.c
new file mode 100644
index 0000000..c191aea
--- /dev/null
+++ b/tests/ipc_shm-Xabbrev.c
@@ -0,0 +1 @@
+#include "ipc_shm.c"
diff --git a/tests/ipc_shm-Xabbrev.gen.test b/tests/ipc_shm-Xabbrev.gen.test
new file mode 100755
index 0000000..d68c246
--- /dev/null
+++ b/tests/ipc_shm-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm-Xabbrev +ipc.sh -Xabbrev -a29); do not edit.
+set -- -Xabbrev -a29
+. "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_shm-Xraw.c b/tests/ipc_shm-Xraw.c
new file mode 100644
index 0000000..08e09ac
--- /dev/null
+++ b/tests/ipc_shm-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "ipc_shm.c"
diff --git a/tests/ipc_shm-Xraw.gen.test b/tests/ipc_shm-Xraw.gen.test
new file mode 100755
index 0000000..071eef6
--- /dev/null
+++ b/tests/ipc_shm-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm-Xraw +ipc.sh -Xraw -a19); do not edit.
+set -- -Xraw -a19
+. "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_shm-Xverbose.c b/tests/ipc_shm-Xverbose.c
new file mode 100644
index 0000000..b936785
--- /dev/null
+++ b/tests/ipc_shm-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "ipc_shm.c"
diff --git a/tests/ipc_shm-Xverbose.gen.test b/tests/ipc_shm-Xverbose.gen.test
new file mode 100755
index 0000000..170adee
--- /dev/null
+++ b/tests/ipc_shm-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm-Xverbose +ipc.sh -Xverbose -a36); do not edit.
+set -- -Xverbose -a36
+. "${srcdir=.}/ipc.sh"
diff --git a/tests/ipc_shm.c b/tests/ipc_shm.c
index 6586c8a..f5802cc 100644
--- a/tests/ipc_shm.c
+++ b/tests/ipc_shm.c
@@ -41,16 +41,62 @@
 # define SHM_HUGE_MASK 0x3f
 #endif
 
+#ifndef SHM_STAT_ANY
+# define SHM_STAT_ANY 15
+#endif
+
 #include "xlat.h"
 #include "xlat/shm_resource_flags.h"
 
+#if XLAT_RAW
+# define str_ipc_flags "0x2ce1e00"
+# define str_shm_huge "21<<26"
+# define str_ipc_private "0"
+# define str_ipc_rmid "0"
+# define str_ipc_set "0x1"
+# define str_ipc_stat "0x2"
+# define str_shm_stat "0xd"
+# define str_shm_info "0xe"
+# define str_shm_stat_any "0xf"
+# define str_ipc_64 "0x100"
+# define str_bogus_cmd "0xdefaced2"
+#elif XLAT_VERBOSE
+# define str_ipc_flags \
+	"0x2ce1e00 /\\* IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE" \
+	"\\|0x2ce0000 \\*/"
+# define str_shm_huge "21<<26 /\\* SHM_HUGE_SHIFT \\*/"
+# define str_ipc_private "0 /\\* IPC_PRIVATE \\*/"
+# define str_ipc_rmid "0 /\\* IPC_RMID \\*/"
+# define str_ipc_set "0x1 /\\* IPC_SET \\*/"
+# define str_ipc_stat "0x2 /\\* IPC_STAT \\*/"
+# define str_shm_stat "0xd /\\* SHM_STAT \\*/"
+# define str_shm_info "0xe /\\* SHM_INFO \\*/"
+# define str_shm_stat_any "0xf /\\* SHM_STAT_ANY \\*/"
+# define str_ipc_64 "0x100 /\\* IPC_64 \\*/"
+# define str_bogus_cmd "0xdefaced2 /\\* SHM_\\?\\?\\? \\*/"
+#else
+# define str_ipc_flags \
+	"IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE\\|0x2ce0000"
+# define str_shm_huge "21<<SHM_HUGE_SHIFT"
+# define str_ipc_private "IPC_PRIVATE"
+# define str_ipc_rmid "IPC_RMID"
+# define str_ipc_set "IPC_SET"
+# define str_ipc_stat "IPC_STAT"
+# define str_shm_stat "SHM_STAT"
+# define str_shm_info "SHM_INFO"
+# define str_shm_stat_any "SHM_STAT_ANY"
+# define str_ipc_64 "IPC_64"
+# define str_bogus_cmd "0xdefaced2 /\\* SHM_\\?\\?\\? \\*/"
+#endif
+
 static int id = -1;
 
 static void
 cleanup(void)
 {
 	shmctl(id, IPC_RMID, NULL);
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_RMID, NULL\\) += 0\n", id);
+	printf("shmctl\\(%d, (%s\\|)?%s, NULL\\) = 0\n",
+	       id, str_ipc_64, str_ipc_rmid);
 	id = -1;
 }
 
@@ -82,68 +128,67 @@
 	struct shmid_ds ds;
 
 	rc = shmget(bogus_key, bogus_size, 0);
-	printf("shmget\\(%#llx, %zu, 000\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, 000\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
 	       sprintrc_grep(rc));
 
 	rc = shmget(bogus_key, bogus_size, huge_flags);
-	printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       "21<<SHM_HUGE_SHIFT", 0, sprintrc_grep(rc));
+	       str_shm_huge, 0, sprintrc_grep(rc));
 
 	bogus_flags = 0xface1e55 & ~(bogus_ipc_shm_flags | huge_mask);
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %#x\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %#x\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
 	       bogus_flags & ~0777,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	bogus_flags |= bogus_ipc_shm_flags;
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %s\\|%#x\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       "IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE",
-	       bogus_flags & ~(0777 | bogus_ipc_shm_flags),
+	       str_ipc_flags,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	bogus_flags |= huge_flags;
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %s\\|%#x\\|%s\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %s\\|%s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
-	       "IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE",
-	       bogus_flags & ~(0777 | bogus_ipc_shm_flags | huge_mask),
-	       "21<<SHM_HUGE_SHIFT",
+	       str_ipc_flags, str_shm_huge,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	bogus_flags &= ~bogus_ipc_shm_flags;
 	rc = shmget(bogus_key, bogus_size, bogus_flags);
-	printf("shmget\\(%#llx, %zu, %#x\\|%s\\|%#03o\\) += %s\n",
+	printf("shmget\\(%#llx, %zu, %#x\\|%s\\|%#03o\\) = %s\n",
 	       zero_extend_signed_to_ull(bogus_key), bogus_size,
 	       bogus_flags & ~(0777 | huge_mask),
-	       "21<<SHM_HUGE_SHIFT",
+	       str_shm_huge,
 	       bogus_flags & 0777, sprintrc_grep(rc));
 
 	id = shmget(private_key, 1, 0600);
 	if (id < 0)
 		perror_msg_and_skip("shmget");
-	printf("shmget\\(IPC_PRIVATE, 1, 0600\\) += %d\n", id);
+	printf("shmget\\(%s, 1, 0600\\) = %d\n", str_ipc_private, id);
 	atexit(cleanup);
 
 	rc = shmctl(bogus_id, bogus_cmd, NULL);
-	printf("shmctl\\(%d, (IPC_64\\|)?%#x /\\* SHM_\\?\\?\\? \\*/, NULL\\)"
-	       " += %s\n", bogus_id, bogus_cmd, sprintrc_grep(rc));
+	printf("shmctl\\(%d, (%s\\|)?%s, NULL\\) = %s\n",
+	       bogus_id, str_ipc_64, str_bogus_cmd, sprintrc_grep(rc));
 
 	rc = shmctl(bogus_id, IPC_STAT, bogus_addr);
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_STAT, %p\\) += %s\n",
-	       bogus_id, bogus_addr, sprintrc_grep(rc));
+	printf("shmctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       bogus_id, str_ipc_64, str_ipc_stat, bogus_addr,
+	       sprintrc_grep(rc));
 
 	if (shmctl(id, IPC_STAT, &ds))
 		perror_msg_and_skip("shmctl IPC_STAT");
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_STAT, \\{shm_perm=\\{uid=%u, gid=%u, "
+	printf("shmctl\\(%d, (%s\\|)?%s, \\{shm_perm=\\{uid=%u, gid=%u, "
 		"mode=%#o, key=%u, cuid=%u, cgid=%u\\}, shm_segsz=%u, shm_cpid=%u, "
 		"shm_lpid=%u, shm_nattch=%u, shm_atime=%u, shm_dtime=%u, "
-		"shm_ctime=%u\\}\\) += 0\n",
-		id, (unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
+		"shm_ctime=%u\\}\\) = 0\n",
+		id, str_ipc_64, str_ipc_stat,
+		(unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
 		(unsigned) ds.shm_perm.mode, (unsigned) ds.shm_perm.__key,
 		(unsigned) ds.shm_perm.cuid, (unsigned) ds.shm_perm.cgid,
 		(unsigned) ds.shm_segsz, (unsigned) ds.shm_cpid,
@@ -153,18 +198,23 @@
 
 	if (shmctl(id, IPC_SET, &ds))
 		perror_msg_and_skip("shmctl IPC_SET");
-	printf("shmctl\\(%d, (IPC_64\\|)?IPC_SET, \\{shm_perm=\\{uid=%u, gid=%u"
-	       ", mode=%#o\\}, ...\\}\\) += 0\n",
-	       id, (unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
+	printf("shmctl\\(%d, (%s\\|)?%s, \\{shm_perm=\\{uid=%u, gid=%u"
+	       ", mode=%#o\\}, ...\\}\\) = 0\n",
+	       id, str_ipc_64, str_ipc_set,
+	       (unsigned) ds.shm_perm.uid, (unsigned) ds.shm_perm.gid,
 	       (unsigned) ds.shm_perm.mode);
 
 	rc = shmctl(0, SHM_INFO, &ds);
-	printf("shmctl\\(0, (IPC_64\\|)?SHM_INFO, %p\\) += %s\n",
-	       &ds, sprintrc_grep(rc));
+	printf("shmctl\\(0, (%s\\|)?%s, %p\\) = %s\n",
+	       str_ipc_64, str_shm_info, &ds, sprintrc_grep(rc));
 
 	rc = shmctl(id, SHM_STAT, &ds);
-	printf("shmctl\\(%d, (IPC_64\\|)?SHM_STAT, %p\\) += %s\n",
-	       id, &ds, sprintrc_grep(rc));
+	printf("shmctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_shm_stat, &ds, sprintrc_grep(rc));
+
+	rc = shmctl(id, SHM_STAT_ANY, &ds);
+	printf("shmctl\\(%d, (%s\\|)?%s, %p\\) = %s\n",
+	       id, str_ipc_64, str_shm_stat_any, &ds, sprintrc_grep(rc));
 
 	return 0;
 }
diff --git a/tests/ipc_shm.gen.test b/tests/ipc_shm.gen.test
index 8c6df9b..2e697d3 100755
--- a/tests/ipc_shm.gen.test
+++ b/tests/ipc_shm.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm +ipc.sh ); do not edit.
-set -- 
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm +ipc.sh -a29); do not edit.
+set -- -a29
 . "${srcdir=.}/ipc.sh"
diff --git a/tests/kcmp.c b/tests/kcmp.c
index 60cd300..a6a05c5 100644
--- a/tests/kcmp.c
+++ b/tests/kcmp.c
@@ -2,6 +2,7 @@
  * Check decoding of kcmp syscall.
  *
  * Copyright (c) 2016-2017 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -167,7 +168,7 @@
 
 	int fd;
 	unsigned i;
-	struct kcmp_epoll_slot *slot = tail_alloc(sizeof(*slot));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct kcmp_epoll_slot, slot);
 
 	/* Open some files to test printpidfd */
 	fd = open(null_path, O_RDONLY);
diff --git a/tests/kexec_load.c b/tests/kexec_load.c
index 2a6b441..ff4507c 100644
--- a/tests/kexec_load.c
+++ b/tests/kexec_load.c
@@ -2,7 +2,7 @@
  * Check decoding of kexec_load syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -129,7 +129,7 @@
 		printf("{buf=%p, bufsz=%zu, mem=%p, memsz=%zu}, ",
 		       segms[i].buf, segms[i].bufsz,
 		       segms[i].mem, segms[i].memsz);
-	printf("%p], %s%s) = %s\n",
+	printf("... /* %p */], %s%s) = %s\n",
 	       segms + NUM_SEGMS,
 	       sizeof(long) == 8 ? flags[0].str64 : flags[0].str32,
 	       flags[0].str, errstr);
diff --git a/tests/keyctl-Xabbrev.c b/tests/keyctl-Xabbrev.c
new file mode 100644
index 0000000..7b6b0dc
--- /dev/null
+++ b/tests/keyctl-Xabbrev.c
@@ -0,0 +1 @@
+#include "keyctl.c"
diff --git a/tests/keyctl-Xabbrev.gen.test b/tests/keyctl-Xabbrev.gen.test
new file mode 100755
index 0000000..0068a03
--- /dev/null
+++ b/tests/keyctl-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (keyctl-Xabbrev -a31 -s10 -e trace=keyctl -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a31 -s10 -e trace=keyctl -Xabbrev
diff --git a/tests/keyctl-Xraw.c b/tests/keyctl-Xraw.c
new file mode 100644
index 0000000..202c22a
--- /dev/null
+++ b/tests/keyctl-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "keyctl.c"
diff --git a/tests/keyctl-Xraw.gen.test b/tests/keyctl-Xraw.gen.test
new file mode 100755
index 0000000..2d89ea7
--- /dev/null
+++ b/tests/keyctl-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (keyctl-Xraw -a13 -s10 -e trace=keyctl -Xraw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a13 -s10 -e trace=keyctl -Xraw
diff --git a/tests/keyctl-Xverbose.c b/tests/keyctl-Xverbose.c
new file mode 100644
index 0000000..9f9d744
--- /dev/null
+++ b/tests/keyctl-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "keyctl.c"
diff --git a/tests/keyctl-Xverbose.gen.test b/tests/keyctl-Xverbose.gen.test
new file mode 100755
index 0000000..a0cdd7d
--- /dev/null
+++ b/tests/keyctl-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (keyctl-Xverbose -a41 -s10 -e trace=keyctl -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a41 -s10 -e trace=keyctl -Xverbose
diff --git a/tests/keyctl.c b/tests/keyctl.c
index 5d46ab7..881f24b 100644
--- a/tests/keyctl.c
+++ b/tests/keyctl.c
@@ -89,6 +89,14 @@
 /* From ioctl_dm.c */
 # define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
 
+#if XLAT_RAW
+# define XARG_STR(v_) (v_), STRINGIFY(v_)
+#elif XLAT_VERBOSE
+# define XARG_STR(v_) (v_), STRINGIFY(v_) " /* " #v_ " */"
+#else
+# define XARG_STR ARG_STR
+#endif
+
 /*
  * When this is called with positive size, the buffer provided is an "out"
  * argument and rc contains resulting size (globally defined nul_terminated_buf
@@ -187,7 +195,13 @@
 
 	long rc = syscall(__NR_keyctl, cmd, args[0], args[1], args[2], args[3]);
 	const char *errstr = sprintrc(rc);
+#if XLAT_RAW
+	printf("keyctl(%#x", (unsigned) cmd);
+#elif XLAT_VERBOSE
+	printf("keyctl(%#x /* %s */", (unsigned) cmd, cmd_str);
+#else
 	printf("keyctl(%s", cmd_str);
+#endif
 	for (i = 0; i < cnt; i++) {
 		printf(", ");
 		print_arg(args[i], arg_str[i], arg_fmt[i], arg_sz[i], rc);
@@ -299,8 +313,20 @@
 
 	static const struct keyctl_dh_params kcdhp_data = {
 		KEY_SPEC_GROUP_KEYRING, 1234567890, 3141592653U };
-	static const char *kcdhp_str = "{private=KEY_SPEC_GROUP_KEYRING, "
-		"prime=1234567890, base=-1153374643}";
+	static const char *kcdhp_str = "{private="
+#if XLAT_RAW || XLAT_VERBOSE
+		"-6"
+#endif
+#if XLAT_VERBOSE
+		" /* "
+#endif
+#if !XLAT_RAW
+		"KEY_SPEC_GROUP_KEYRING"
+#endif
+#if XLAT_VERBOSE
+		" */"
+#endif
+		", prime=1234567890, base=-1153374643}";
 
 	/*
 	 * It's bigger than current hash name size limit, but since it's
@@ -418,7 +444,15 @@
 
 	/* Invalid command */
 	do_keyctl((kernel_ulong_t) 0xbadc0dedfacefeedULL,
-		  "0xfacefeed /* KEYCTL_??? */",
+#if XLAT_VERBOSE
+		  "KEYCTL_???"
+#else
+		  "0xfacefeed"
+# if !XLAT_RAW
+		  " /* KEYCTL_??? */"
+# endif
+#endif
+		  ,
 		  sizeof(kernel_ulong_t),
 			(kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL,
 			kulong_fmt,
@@ -440,7 +474,7 @@
 			(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(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), "%d",
 		  sizeof(int), 3141592653U, NULL, "%d", NULL,
 		  0UL);
 
@@ -469,7 +503,7 @@
 	buf_in_arg = true;
 
 	do_keyctl(ARG_STR(KEYCTL_UPDATE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(kernel_ulong_t), (kernel_ulong_t) 0, NULL, ksize_fmt,
 		  0UL);
@@ -498,7 +532,7 @@
 
 	/* KEYCTL_REVOKE */
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_REVOKE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -513,7 +547,7 @@
 
 	/* KEYCTL_CHOWN */
 	do_keyctl(ARG_STR(KEYCTL_CHOWN),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(uid_t), ARG_STR(-1), NULL,
 		  sizeof(gid_t), ARG_STR(-1), NULL,
 		  0UL);
@@ -526,8 +560,15 @@
 
 	/* KEYCTL_SETPERM */
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
 		  sizeof(uint32_t), 0xffffffffU,
+#if XLAT_RAW || XLAT_VERBOSE
+			"0xffffffff"
+#endif
+#if XLAT_VERBOSE
+			" /* "
+#endif
+#if !XLAT_RAW
 			"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|"
@@ -536,7 +577,12 @@
 			"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,
+			"0xc0c0c0c0"
+#endif
+#if XLAT_VERBOSE
+			" */"
+#endif
+			, NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -544,7 +590,12 @@
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_SETPERM),
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
-		  sizeof(uint32_t), 0xc0c0c0c0, "0xc0c0c0c0 /* KEY_??? */",
+		  sizeof(uint32_t), 0xc0c0c0c0,
+			  "0xc0c0c0c0"
+#if !XLAT_RAW
+			  " /* KEY_??? */"
+#endif
+			  ,
 			  NULL,
 		  0UL);
 
@@ -563,17 +614,17 @@
 			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
@@ -581,7 +632,7 @@
 
 	/* KEYCTL_CLEAR */
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_CLEAR),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -597,14 +648,14 @@
 	/* 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,
+		  sizeof(int32_t), XARG_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), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  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(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
 
@@ -612,14 +663,14 @@
 	/* KEYCTL_UNLINK */
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_UNLINK),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  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(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
 		  0UL);
 
@@ -628,7 +679,7 @@
 	buf_in_arg = true;
 
 	do_keyctl(ARG_STR(KEYCTL_SEARCH),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(int32_t), 0, NULL, "%d");
@@ -636,7 +687,7 @@
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
 		  sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
 		  sizeof(char *), (char *) 0xfffff00dfffff157ULL, NULL, ptr_fmt,
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_USER_SESSION_KEYRING),
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_USER_SESSION_KEYRING),
 			  NULL);
 	do_keyctl(ARG_STR(KEYCTL_SEARCH),
 		  sizeof(int32_t), bogus_key2, NULL, "%d",
@@ -657,7 +708,7 @@
 	/* KEYCTL_RESTRICT_KEYRING */
 
 	do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 		  sizeof(char *), ARG_STR(NULL), NULL,
 			  NULL);
@@ -705,17 +756,17 @@
 			(kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_READ),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_READ),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_READ),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
@@ -751,11 +802,11 @@
 			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(int32_t), XARG_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,
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 	buf_in_arg = false;
 
@@ -788,7 +839,7 @@
 
 	/* KEYCTL_SET_REQKEY_KEYRING */
 	do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
-		  sizeof(int32_t), ARG_STR(KEY_REQKEY_DEFL_NO_CHANGE), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_REQKEY_DEFL_NO_CHANGE), NULL,
 		  0UL);
 	/*
 	 * Keep it commented out until proper way of faking syscalls is not
@@ -796,11 +847,15 @@
 	 */
 	/* do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
 		  sizeof(int32_t),
-		  ARG_STR(KEY_REQKEY_DEFL_REQUESTOR_KEYRING), NULL, 0UL); */
+		  XARG_STR(KEY_REQKEY_DEFL_REQUESTOR_KEYRING), NULL, 0UL); */
 	do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
 		  sizeof(kernel_ulong_t),
 		  (kernel_ulong_t) 0xfeedf157badc0dedLLU,
-		  "0xbadc0ded /* KEY_REQKEY_DEFL_??? */", NULL, 0UL);
+		  "-1159983635"
+#if !XLAT_RAW
+		  " /* KEY_REQKEY_DEFL_??? */"
+#endif
+		  , NULL, 0UL);
 
 
 	/* KEYCTL_SET_TIMEOUT */
@@ -822,7 +877,7 @@
 
 	/* KEYCTL_ASSUME_AUTHORITY */
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -848,17 +903,17 @@
 			(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,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
 	do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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);
@@ -893,7 +948,7 @@
 		  sizeof(kernel_ulong_t),
 			(kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
 			NULL,
-		  sizeof(uint32_t), ARG_STR(ENODEV), NULL,
+		  sizeof(uint32_t), XARG_STR(ENODEV), NULL,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 
 
@@ -923,16 +978,16 @@
 			  ksize_fmt,
 		  sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
 	do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_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(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
 
 
 	/* KEYCTL_INVALIDATE */
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
-		  sizeof(int32_t), ARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
 		  sizeof(int32_t), bogus_key1, NULL, "%d",
@@ -948,7 +1003,7 @@
 	/* 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,
+		  sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
 		  0UL);
 	do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
 		  sizeof(uid_t), 2718281828U, NULL, "%u",
diff --git a/tests/mknod.c b/tests/mknod.c
index b387149..4bcc274 100644
--- a/tests/mknod.c
+++ b/tests/mknod.c
@@ -59,7 +59,7 @@
 	rc = call_mknod(mode, dev);
 	printf("mknod(\"%s\", S_IFBLK|S_ISUID|S_ISGID|S_ISVTX|%#03ho"
 	       ", makedev(%u, %u)) = %ld %s (%m)\n",
-	       sample, mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX),
+	       sample, (short) (mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX)),
 	       major((unsigned) dev), minor((unsigned) dev),
 	       rc, errno2name());
 
diff --git a/tests/mknodat.c b/tests/mknodat.c
index 756e277..318dc5a 100644
--- a/tests/mknodat.c
+++ b/tests/mknodat.c
@@ -59,7 +59,7 @@
 	rc = call_mknodat(mode, dev);
 	printf("mknodat(-1, \"%s\", S_IFBLK|S_ISUID|S_ISGID|S_ISVTX|%#03ho"
 	       ", makedev(%u, %u)) = %ld %s (%m)\n",
-	       sample, mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX),
+	       sample, (short) (mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX)),
 	       major((unsigned) dev), minor((unsigned) dev),
 	       rc, errno2name());
 
diff --git a/tests/mmap-Xabbrev.c b/tests/mmap-Xabbrev.c
new file mode 100644
index 0000000..b31ce42
--- /dev/null
+++ b/tests/mmap-Xabbrev.c
@@ -0,0 +1 @@
+#include "mmap.c"
diff --git a/tests/mmap-Xabbrev.gen.test b/tests/mmap-Xabbrev.gen.test
new file mode 100755
index 0000000..b11a84f
--- /dev/null
+++ b/tests/mmap-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap-Xabbrev +mmap.test abbrev); do not edit.
+set -- abbrev
+. "${srcdir=.}/mmap.test"
diff --git a/tests/mmap-Xraw.c b/tests/mmap-Xraw.c
new file mode 100644
index 0000000..ef25c03
--- /dev/null
+++ b/tests/mmap-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW     1
+#include "mmap.c"
diff --git a/tests/mmap-Xraw.gen.test b/tests/mmap-Xraw.gen.test
new file mode 100755
index 0000000..3caca91
--- /dev/null
+++ b/tests/mmap-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap-Xraw +mmap.test raw 14); do not edit.
+set -- raw 14
+. "${srcdir=.}/mmap.test"
diff --git a/tests/mmap-Xverbose.c b/tests/mmap-Xverbose.c
new file mode 100644
index 0000000..08e9e30
--- /dev/null
+++ b/tests/mmap-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "mmap.c"
diff --git a/tests/mmap-Xverbose.gen.test b/tests/mmap-Xverbose.gen.test
new file mode 100755
index 0000000..99b41c0
--- /dev/null
+++ b/tests/mmap-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap-Xverbose +mmap.test verbose); do not edit.
+set -- verbose
+. "${srcdir=.}/mmap.test"
diff --git a/tests/mmap.c b/tests/mmap.c
index 0321bf5..e9f587e 100644
--- a/tests/mmap.c
+++ b/tests/mmap.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -58,25 +58,60 @@
 
 	(void) close(0);
 	(void) close(0);
+#if XLAT_RAW
+	printf("%s(NULL, 0, %#x, %#x, 0, 0) = -1 EBADF (%m)\n",
+	       name, PROT_NONE, MAP_FILE);
+#elif XLAT_VERBOSE
+	printf("%s(NULL, 0, %#x /* PROT_NONE */, %#x /* MAP_FILE */, 0, 0) "
+	       "= -1 EBADF (%m)\n",
+	       name, PROT_NONE, MAP_FILE);
+#else
 	printf("%s(NULL, 0, PROT_NONE, MAP_FILE, 0, 0) = -1 EBADF (%m)\n",
 	       name);
+#endif
 	mmap(NULL, 0, PROT_NONE, MAP_FILE, 0, 0);
 
 	p = mmap(addr, length1, PROT_READ | PROT_WRITE,
 		 MAP_PRIVATE | MAP_ANONYMOUS, fd, offset);
 	if (MAP_FAILED == p)
 		perror_msg_and_fail("mmap");
+#if XLAT_RAW
+	printf("%s(%p, %lu, %#x, "
+	       "%#x|%#x, %d, %#jx) = %p\n",
+	       name, addr, length1, PROT_READ | PROT_WRITE, MAP_PRIVATE,
+	       MAP_ANONYMOUS, fd, uoffset, p);
+#elif XLAT_VERBOSE
+	printf("%s(%p, %lu, %#x /* PROT_READ|PROT_WRITE */, "
+	       "%#x /* MAP_PRIVATE */|%#x /* MAP_ANONYMOUS */, %d, %#jx) "
+	       "= %p\n",
+	       name, addr, length1, PROT_READ | PROT_WRITE, MAP_PRIVATE,
+	       MAP_ANONYMOUS, fd, uoffset, p);
+#else
 	printf("%s(%p, %lu, PROT_READ|PROT_WRITE, "
 	       "MAP_PRIVATE|MAP_ANONYMOUS, %d, %#jx) = %p\n",
 	       name, addr, length1, fd, uoffset, p);
+#endif
 
 	if (msync(p, length1, MS_SYNC))
 		perror_msg_and_fail("msync");
+#if XLAT_RAW
+	printf("msync(%p, %lu, %#x) = 0\n", p, length1, MS_SYNC);
+#elif XLAT_VERBOSE
+	printf("msync(%p, %lu, %#x /* MS_SYNC */) = 0\n", p, length1, MS_SYNC);
+#else
 	printf("msync(%p, %lu, MS_SYNC) = 0\n", p, length1);
+#endif
 
 	if (mprotect(p, length1, PROT_NONE))
 		perror_msg_and_fail("mprotect");
+#if XLAT_RAW
+	printf("mprotect(%p, %lu, %#x) = 0\n", p, length1, PROT_NONE);
+#elif XLAT_VERBOSE
+	printf("mprotect(%p, %lu, %#x /* PROT_NONE */) = 0\n",
+	       p, length1, PROT_NONE);
+#else
 	printf("mprotect(%p, %lu, PROT_NONE) = 0\n", p, length1);
+#endif
 
 	addr = mremap(p, length1, length2, 0);
 	if (MAP_FAILED == addr)
@@ -87,8 +122,19 @@
 		    addr + length2);
 	if (MAP_FAILED == p)
 		perror_msg_and_fail("mremap");
+#if XLAT_RAW
+	printf("mremap(%p, %lu, %lu, %#x, %p) = %p\n",
+	       addr, length2, length3, MREMAP_MAYMOVE | MREMAP_FIXED,
+	       addr + length2, p);
+#elif XLAT_VERBOSE
+	printf("mremap(%p, %lu, %lu, %#x /* MREMAP_MAYMOVE|MREMAP_FIXED */"
+	       ", %p) = %p\n",
+	       addr, length2, length3, MREMAP_MAYMOVE | MREMAP_FIXED,
+	       addr + length2, p);
+#else
 	printf("mremap(%p, %lu, %lu, MREMAP_MAYMOVE|MREMAP_FIXED"
 	       ", %p) = %p\n", addr, length2, length3, addr + length2, p);
+#endif
 
 	if (munmap(p, length3))
 		perror_msg_and_fail("munmap");
@@ -96,7 +142,13 @@
 
 	if (mlockall(MCL_FUTURE))
 		perror_msg_and_fail("mlockall");
+#if XLAT_RAW
+	printf("mlockall(%#x) = 0\n", MCL_FUTURE);
+#elif XLAT_VERBOSE
+	printf("mlockall(%#x /* MCL_FUTURE */) = 0\n", MCL_FUTURE);
+#else
 	puts("mlockall(MCL_FUTURE) = 0");
+#endif
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests/mmap.test b/tests/mmap.test
index 7ba664e..7fa2c70 100755
--- a/tests/mmap.test
+++ b/tests/mmap.test
@@ -4,7 +4,7 @@
 # syscalls decoding.
 #
 # Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2015-2017 The strace developers.
+# Copyright (c) 2015-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -35,15 +35,20 @@
 check_prog sed
 run_prog > /dev/null
 
+xlat_opt=""
+[ "$#" -gt 0 ] && xlat_opt="-X$1"
+align=20
+[ "$#" -gt 1 ] && align="$2"
+
 syscall=
 for n in mmap mmap2; do
 	$STRACE -e$n -h > /dev/null && syscall=$syscall,$n
 done
 run_strace -e$syscall $args > /dev/null
 
-if grep '^mmap(NULL, 0, PROT_NONE,' < "$LOG" > /dev/null; then
+if grep '^mmap(NULL, 0, \(0 /* PROT_NONE */\|0\|PROT_NONE\),' < "$LOG" > /dev/null; then
 	mmap=mmap
-elif grep '^mmap2(NULL, 0, PROT_NONE,' < "$LOG" > /dev/null; then
+elif grep '^mmap2(NULL, 0, \(0 \/\* PROT_NONE \*\/\|0\|PROT_NONE\),' < "$LOG" > /dev/null; then
 	mmap=mmap2
 else
 	dump_log_and_fail_with "mmap/mmap2 not found in $STRACE $args output"
@@ -52,6 +57,6 @@
 syscall=$mmap,madvise,mlockall,mprotect,mremap,msync,munmap
 
 run_prog "../$NAME" $mmap > /dev/null
-run_strace -a20 -e$syscall $args > "$EXP"
-sed -n "/^$mmap(NULL, 0, PROT_NONE,/,\$p" < "$LOG" > "$OUT"
+run_strace -a$align -e$syscall $xlat_opt $args > "$EXP"
+sed -n "/^$mmap(NULL, 0, \(0 \/\* PROT_NONE \*\/\|0\|PROT_NONE\),/,\$p" < "$LOG" > "$OUT"
 match_diff "$OUT" "$EXP"
diff --git a/tests/mmap64-Xabbrev.c b/tests/mmap64-Xabbrev.c
new file mode 100644
index 0000000..cbd7789
--- /dev/null
+++ b/tests/mmap64-Xabbrev.c
@@ -0,0 +1 @@
+#include "mmap64.c"
diff --git a/tests/mmap64-Xabbrev.gen.test b/tests/mmap64-Xabbrev.gen.test
new file mode 100755
index 0000000..3e2c94b
--- /dev/null
+++ b/tests/mmap64-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64-Xabbrev +mmap.test abbrev); do not edit.
+set -- abbrev
+. "${srcdir=.}/mmap.test"
diff --git a/tests/mmap64-Xraw.c b/tests/mmap64-Xraw.c
new file mode 100644
index 0000000..f75f235
--- /dev/null
+++ b/tests/mmap64-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW     1
+#include "mmap64.c"
diff --git a/tests/mmap64-Xraw.gen.test b/tests/mmap64-Xraw.gen.test
new file mode 100755
index 0000000..7aeed02
--- /dev/null
+++ b/tests/mmap64-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64-Xraw +mmap.test raw 14); do not edit.
+set -- raw 14
+. "${srcdir=.}/mmap.test"
diff --git a/tests/mmap64-Xverbose.c b/tests/mmap64-Xverbose.c
new file mode 100644
index 0000000..f72513e
--- /dev/null
+++ b/tests/mmap64-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "mmap64.c"
diff --git a/tests/mmap64-Xverbose.gen.test b/tests/mmap64-Xverbose.gen.test
new file mode 100755
index 0000000..0d675d9
--- /dev/null
+++ b/tests/mmap64-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64-Xverbose +mmap.test verbose); do not edit.
+set -- verbose
+. "${srcdir=.}/mmap.test"
diff --git a/tests/mmsg_name.c b/tests/mmsg_name.c
index 8c54a48..c17b13d 100644
--- a/tests/mmsg_name.c
+++ b/tests/mmsg_name.c
@@ -3,7 +3,7 @@
  * of sendmmsg and recvmmsg syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -152,7 +152,7 @@
 	printf("sendmmsg(-1, [{msg_hdr=");
 	print_msghdr(&send_mh[IOV_MAX].msg_hdr, 0);
 	errno = saved_errno;
-	printf("}, %p], %u, MSG_DONTWAIT) = %d %s (%m)\n",
+	printf("}, ... /* %p */], %u, MSG_DONTWAIT) = %d %s (%m)\n",
 	       &send_mh[IOV_MAX1], 2, rc, errno2name());
 
 	rc = send_mmsg(send_fd, send_mh, IOV_MAX1, MSG_DONTWAIT);
diff --git a/tests/modify_ldt.c b/tests/modify_ldt.c
index 1e26bda..2d527ac 100644
--- a/tests/modify_ldt.c
+++ b/tests/modify_ldt.c
@@ -67,8 +67,8 @@
 	static const kernel_ulong_t bogus_bytecount =
 		(kernel_ulong_t) 0xdeadfacefa57beefULL;
 
-	struct user_desc *us = tail_alloc(sizeof(*us));
-	unsigned int *bogus_int = tail_alloc(sizeof(*bogus_int));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct user_desc, us);
+	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned int, bogus_int);
 	long rc;
 
 	fill_memory(us, sizeof(*us));
diff --git a/tests/mount-Xabbrev.c b/tests/mount-Xabbrev.c
new file mode 100644
index 0000000..0f6fecd
--- /dev/null
+++ b/tests/mount-Xabbrev.c
@@ -0,0 +1 @@
+#include "mount.c"
diff --git a/tests/mount-Xabbrev.gen.test b/tests/mount-Xabbrev.gen.test
new file mode 100755
index 0000000..10e261f
--- /dev/null
+++ b/tests/mount-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount-Xabbrev -a33 -e trace=mount -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a33 -e trace=mount -Xabbrev
diff --git a/tests/mount-Xraw.c b/tests/mount-Xraw.c
new file mode 100644
index 0000000..3aa1f08
--- /dev/null
+++ b/tests/mount-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "mount.c"
diff --git a/tests/mount-Xraw.gen.test b/tests/mount-Xraw.gen.test
new file mode 100755
index 0000000..ce852f8
--- /dev/null
+++ b/tests/mount-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount-Xraw -a33 -e trace=mount -Xraw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a33 -e trace=mount -Xraw
diff --git a/tests/mount-Xverbose.c b/tests/mount-Xverbose.c
new file mode 100644
index 0000000..0b211c7
--- /dev/null
+++ b/tests/mount-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "mount.c"
diff --git a/tests/mount-Xverbose.gen.test b/tests/mount-Xverbose.gen.test
new file mode 100755
index 0000000..c780070
--- /dev/null
+++ b/tests/mount-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount-Xverbose -a33 -e trace=mount -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a33 -e trace=mount -Xverbose
diff --git a/tests/mount.c b/tests/mount.c
index cbfe42f8..2e58571 100644
--- a/tests/mount.c
+++ b/tests/mount.c
@@ -2,6 +2,7 @@
  * Check decoding of mount syscall.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,7 +41,34 @@
 # define MS_RELATIME (1ul << 21)
 #endif
 
-#define str_ro_nosuid_nodev_noexec "MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC"
+#if XLAT_RAW
+# define str_unknown "0x300"
+# define str_submount_200 "0x4000200"
+# define str_mgc_val "0xc0ed0000"
+# define str_remount "0x20"
+# define str_bind "0x1000"
+# define str_ro_nosuid_nodev_noexec "0xf"
+# define str_ro_nosuid_nodev_noexec_relatime "0x20000f"
+#elif XLAT_VERBOSE
+# define str_unknown "0x300 /* MS_??? */"
+# define str_submount_200 "0x4000200 /* MS_SUBMOUNT|0x200 */"
+# define str_mgc_val "0xc0ed0000 /* MS_MGC_VAL */"
+# define str_remount "0x20 /* MS_REMOUNT */"
+# define str_bind "0x1000 /* MS_BIND */"
+# define str_ro_nosuid_nodev_noexec \
+	"0xf /* MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC */"
+# define str_ro_nosuid_nodev_noexec_relatime \
+	"0x20000f /* MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME */"
+#else /* !XLAT_RAW && !XLAT_VERBOSE */
+# define str_unknown "0x300 /* MS_??? */"
+# define str_submount_200 "MS_SUBMOUNT|0x200"
+# define str_mgc_val "MS_MGC_VAL"
+# define str_remount "MS_REMOUNT"
+# define str_bind "MS_BIND"
+# define str_ro_nosuid_nodev_noexec "MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC"
+# define str_ro_nosuid_nodev_noexec_relatime \
+	"MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME"
+#endif /* XLAT_RAW, XLAT_VERBOSE */
 
 int
 main(void)
@@ -49,35 +77,59 @@
 	static const char target[] = "mount_target";
 	static const char fstype[] = "mount_fstype";
 	static const char data[] = "mount_data";
+	TAIL_ALLOC_OBJECT_CONST_PTR(char, bogus);
 
-	int rc = mount(source, target, fstype, 15, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
+	bogus[0] = 'a';
+
+	int rc = mount(NULL, NULL, NULL, 0, NULL);
+	printf("mount(NULL, NULL, NULL, 0, NULL) = %s\n",
+	       sprintrc(rc));
+
+	rc = mount(bogus, bogus, bogus, 768, bogus);
+	printf("mount(%p, %p, %p, %s, %p) = %s\n",
+	       bogus, bogus, bogus, str_unknown, bogus, sprintrc(rc));
+
+	rc = mount(bogus + 1, bogus + 1, bogus + 1, 0x4000200, bogus + 1);
+	printf("mount(%p, %p, %p, %s, %p) = %s\n",
+	       bogus + 1, bogus + 1, bogus + 1, str_submount_200,
+	       bogus + 1, sprintrc(rc));
+
+	rc = mount(source, target, fstype, 15, data);
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
 	       source, target, fstype, str_ro_nosuid_nodev_noexec,
-	       data, rc, errno2name());
+	       data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_RELATIME | 15, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
 	       source, target, fstype,
-	       str_ro_nosuid_nodev_noexec "|MS_RELATIME",
-	       data, rc, errno2name());
+	       str_ro_nosuid_nodev_noexec_relatime,
+	       data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_MGC_VAL, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
-	       source, target, fstype, "MS_MGC_VAL", data, rc, errno2name());
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
+	       source, target, fstype, str_mgc_val, data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_MGC_VAL | 15, data);
-	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %d %s (%m)\n",
+	printf("mount(\"%s\", \"%s\", \"%s\", %s, \"%s\") = %s\n",
 	       source, target, fstype,
-	       "MS_MGC_VAL|" str_ro_nosuid_nodev_noexec,
-	       data, rc, errno2name());
+	       str_mgc_val "|" str_ro_nosuid_nodev_noexec,
+	       data, sprintrc(rc));
+
+	rc = mount(source, target, NULL, MS_REMOUNT, data);
+	printf("mount(\"%s\", \"%s\", NULL, %s, \"%s\") = %s\n",
+	       source, target, str_remount, data, sprintrc(rc));
 
 	rc = mount(source, target, fstype, MS_REMOUNT, data);
-	printf("mount(\"%s\", \"%s\", %p, %s, \"%s\") = %d %s (%m)\n",
-	       source, target, fstype, "MS_REMOUNT", data, rc, errno2name());
+	printf("mount(\"%s\", \"%s\", %p, %s, \"%s\") = %s\n",
+	       source, target, fstype, str_remount, data, sprintrc(rc));
 
-	rc = mount(source, target, fstype, MS_BIND, data);
-	printf("mount(\"%s\", \"%s\", %p, %s, %p) = %d %s (%m)\n",
-	       source, target, fstype, "MS_BIND", data, rc, errno2name());
+	rc = mount(source, target, NULL, MS_BIND, data);
+	printf("mount(\"%s\", \"%s\", NULL, %s, %p) = %s\n",
+	       source, target, str_bind, data, sprintrc(rc));
+
+	rc = mount(source, target, fstype, MS_BIND, NULL);
+	printf("mount(\"%s\", \"%s\", %p, %s, NULL) = %s\n",
+	       source, target, fstype, str_bind, sprintrc(rc));
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests/mount.gen.test b/tests/mount.gen.test
index 69bc99b..2a3639c 100755
--- a/tests/mount.gen.test
+++ b/tests/mount.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount  ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount -a33 ); do not edit.
 . "${srcdir=.}/init.sh"
-run_strace_match_diff  
+run_strace_match_diff -a33 
diff --git a/tests/move_pages.c b/tests/move_pages.c
index 5ec25aa..851a8c7 100644
--- a/tests/move_pages.c
+++ b/tests/move_pages.c
@@ -2,7 +2,7 @@
  * Check decoding of move_pages syscall.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -63,7 +63,7 @@
 				break;
 			}
 		} else {
-			printf("%p", pages + i);
+			printf("... /* %p */", pages + i);
 			break;
 		}
 		const void *const addr = pages[i];
@@ -99,7 +99,7 @@
 				break;
 			}
 		} else {
-			printf("%p", nodes + i);
+			printf("... /* %p */", nodes + i);
 			break;
 		}
 		printf("%d", nodes[i]);
diff --git a/tests/msg_control.c b/tests/msg_control.c
index 48b7347..01786d7 100644
--- a/tests/msg_control.c
+++ b/tests/msg_control.c
@@ -2,7 +2,7 @@
  * Check decoding of struct msghdr ancillary data.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -132,7 +132,7 @@
 		print_fds(cmsg, src_len);
 		printf("}");
 		if (aligned_cms_len < msg_controllen)
-			printf(", %p", (void *) cmsg + aligned_cms_len);
+			printf(", ... /* %p */", (void *) cmsg + aligned_cms_len);
 		printf("]");
 	}
 
@@ -195,7 +195,7 @@
 	print_fds(cmsg[1], src1_len);
 	printf("}");
 	if (aligned_cms_len[1] < msg_controllen1)
-		printf(", %p", (void *) cmsg[1] + aligned_cms_len[1]);
+		printf(", ... /* %p */", (void *) cmsg[1] + aligned_cms_len[1]);
 	printf("]");
 
 	errno = saved_errno;
@@ -425,7 +425,7 @@
 	print_security(cmsg, src_len);
 	printf("}");
 	if (aligned_cms_len < msg_controllen)
-		printf(", %p", (void *) cmsg + aligned_cms_len);
+		printf(", ... /* %p */", (void *) cmsg + aligned_cms_len);
 	printf("]");
 
 	errno = saved_errno;
diff --git a/tests/net-sockaddr.c b/tests/net-sockaddr.c
index fe933d4..22cbb26 100644
--- a/tests/net-sockaddr.c
+++ b/tests/net-sockaddr.c
@@ -2,7 +2,7 @@
  * Check decoding of sockaddr structures
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -436,25 +436,86 @@
 {
 	const unsigned short h_psm = 12345;
 	const unsigned short h_cid = 13579;
-	const struct sockaddr_l2 c_l2 = {
+	struct sockaddr_l2 c_l2 = {
 		.l2_family = AF_BLUETOOTH,
 		.l2_psm = htobs(h_psm),
 		.l2_bdaddr.b = "abcdef",
 		.l2_cid = htobs(h_cid),
-		.l2_bdaddr_type = 42
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+		.l2_bdaddr_type = 0xce,
+#endif
 	};
 	void *l2 = tail_memdup(&c_l2, sizeof(c_l2));
 	unsigned int len = sizeof(c_l2);
+
 	int ret = connect(-1, l2, len);
 	printf("connect(-1, {sa_family=AF_BLUETOOTH"
-	       ", l2_psm=htobs(%hu)"
+	       ", l2_psm=htobs(L2CAP_PSM_DYN_START + %hu)"
 	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
-	       ", l2_cid=htobs(%hu), l2_bdaddr_type=%u}"
-	       ", %u) = %d EBADF (%m)\n", h_psm,
+	       ", l2_cid=htobs(L2CAP_CID_DYN_START + %hu)"
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	       ", l2_bdaddr_type=0xce /* BDADDR_??? */"
+#endif
+	       "}, %u) = %d EBADF (%m)\n",
+	       (short) (h_psm - 0x1001),
 	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
 	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
 	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
-	       h_cid, c_l2.l2_bdaddr_type, len, ret);
+	       (short) (h_cid - 0x40), len, ret);
+
+	c_l2.l2_psm = htobs(1);
+	c_l2.l2_cid = htobs(1);
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	c_l2.l2_bdaddr_type = BDADDR_LE_RANDOM;
+#endif
+	memcpy(l2, &c_l2, sizeof(c_l2));
+	ret = connect(-1, l2, len);
+	printf("connect(-1, {sa_family=AF_BLUETOOTH"
+	       ", l2_psm=htobs(L2CAP_PSM_SDP)"
+	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+	       ", l2_cid=htobs(L2CAP_CID_SIGNALING)"
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	       ", l2_bdaddr_type=BDADDR_LE_RANDOM"
+#endif
+	       "}, %u) = %d EBADF (%m)\n",
+	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+	       len, ret);
+
+	c_l2.l2_psm = htobs(0xbad);
+	c_l2.l2_cid = htobs(8);
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	c_l2.l2_bdaddr_type = 3;
+#endif
+	memcpy(l2, &c_l2, sizeof(c_l2));
+	ret = connect(-1, l2, len);
+	printf("connect(-1, {sa_family=AF_BLUETOOTH"
+	       ", l2_psm=htobs(0xbad /* L2CAP_PSM_??? */)"
+	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+	       ", l2_cid=htobs(0x8 /* L2CAP_CID_??? */)"
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+	       ", l2_bdaddr_type=0x3 /* BDADDR_??? */"
+#endif
+	       "}, %u) = %d EBADF (%m)\n",
+	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+	       len, ret);
+
+	c_l2.l2_psm = htobs(0x10ff);
+	c_l2.l2_cid = htobs(0xffff);
+	memcpy(l2, &c_l2, 12);
+	ret = connect(-1, l2, 12);
+	printf("connect(-1, {sa_family=AF_BLUETOOTH"
+	       ", l2_psm=htobs(L2CAP_PSM_AUTO_END)"
+	       ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+	       ", l2_cid=htobs(L2CAP_CID_DYN_END)"
+	       "}, 12) = %d EBADF (%m)\n",
+	       c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+	       c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+	       c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+	       ret);
 }
 #endif
 
diff --git a/tests/netlink_crypto.c b/tests/netlink_crypto.c
index d15c17c..5c3dc04 100644
--- a/tests/netlink_crypto.c
+++ b/tests/netlink_crypto.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -98,8 +98,6 @@
 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",
@@ -109,6 +107,8 @@
 		.cru_refcnt = 0xbcacfacd,
 		.cru_flags = 0xefacdbad
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(alg));
+
 	TEST_NETLINK_OBJECT_EX(fd, nlh0,
 			       CRYPTO_MSG_NEWALG, NLM_F_REQUEST,
 			       alg, print_quoted_memory,
@@ -149,7 +149,7 @@
 static void
 test_crypto_msg_unspec(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, 4);
 
 	TEST_NETLINK_(fd, nlh0,
 		      0xffff, "0xffff /* CRYPTO_MSG_??? */",
diff --git a/tests/netlink_kobject_uevent.c b/tests/netlink_kobject_uevent.c
index 7edacd7..b28af49 100644
--- a/tests/netlink_kobject_uevent.c
+++ b/tests/netlink_kobject_uevent.c
@@ -27,9 +27,12 @@
  */
 
 #include "tests.h"
+#include <string.h>
 #include <stdio.h>
 #include <sys/socket.h>
+#include <arpa/inet.h>
 #include "netlink.h"
+#include "netlink_kobject_uevent.h"
 
 static const char *errstr;
 
@@ -41,6 +44,94 @@
 	return rc;
 }
 
+static void
+test_nlmsg_type_udev(const int fd)
+{
+	static const char extra[] = "12345678";
+	struct udev_monitor_netlink_header uh = {
+		.prefix = "libudev",
+		.magic = htonl(0xfeedcafe),
+		.header_size = sizeof(uh),
+		.properties_off = 40,
+		.properties_len = 299,
+		.filter_subsystem_hash = htonl(0xc370b302),
+		.filter_devtype_hash = htonl(0x10800000),
+		.filter_tag_bloom_hi = htonl(0x2000400),
+		.filter_tag_bloom_lo = htonl(0x10800000),
+	};
+	const unsigned int extra_len = LENGTH_OF(extra);
+	const unsigned int uh_len = sizeof(uh);
+
+	char *const buf = tail_alloc(uh_len + extra_len);
+	memcpy(buf + extra_len, &uh, uh_len);
+
+	sys_send(fd, buf + extra_len, uh_len);
+	printf("sendto(%d, {{prefix=\"%s\", magic=htonl(%#x)"
+	       ", header_size=%u, properties_off=%u, properties_len=%u"
+	       ", filter_subsystem_hash=htonl(%#x)"
+	       ", filter_devtype_hash=htonl(%#x)"
+	       ", filter_tag_bloom_hi=htonl(%#x)"
+	       ", filter_tag_bloom_lo=htonl(%#x)}}, %u, MSG_DONTWAIT, NULL, "
+	       "0) = %s\n"
+	       , fd, uh.prefix,
+	       ntohl(uh.magic), uh.header_size, uh.properties_off,
+	       uh.properties_len, ntohl(uh.filter_subsystem_hash),
+	       ntohl(uh.filter_devtype_hash), ntohl(uh.filter_tag_bloom_hi),
+	       ntohl(uh.filter_tag_bloom_lo), uh_len, errstr);
+
+	memcpy(buf, &uh, uh_len);
+	memcpy(buf + uh_len, extra, extra_len);
+	sys_send(fd, buf, uh_len + extra_len);
+	printf("sendto(%d, {{prefix=\"%s\", magic=htonl(%#x)"
+	       ", header_size=%u, properties_off=%u, properties_len=%u"
+	       ", filter_subsystem_hash=htonl(%#x)"
+	       ", filter_devtype_hash=htonl(%#x)"
+	       ", filter_tag_bloom_hi=htonl(%#x)"
+	       ", filter_tag_bloom_lo=htonl(%#x)}, "
+	       , fd, uh.prefix,
+	       ntohl(uh.magic), uh.header_size, uh.properties_off,
+	       uh.properties_len, ntohl(uh.filter_subsystem_hash),
+	       ntohl(uh.filter_devtype_hash), ntohl(uh.filter_tag_bloom_hi),
+	       ntohl(uh.filter_tag_bloom_lo));
+	print_quoted_memory(buf + uh_len, extra_len);
+	printf("}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       uh_len + extra_len, errstr);
+
+	memcpy(buf + extra_len + 1, &uh, uh_len - 1);
+	sys_send(fd, buf + extra_len + 1, uh_len);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(&uh, MIN(uh_len - 1, DEFAULT_STRLEN));
+	printf("%s, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       (uh_len - 1 > DEFAULT_STRLEN ? "..." : ""),
+	       uh_len, errstr);
+}
+
+static void
+test_nlmsg_type_kernel(const int fd)
+{
+	struct udev_monitor_netlink_header uh = {
+		.prefix = "change@",
+		.magic = htonl(0xfeedcafe),
+		.header_size = sizeof(uh),
+		.properties_off = 10,
+		.properties_len = 299,
+		.filter_subsystem_hash = htonl(0xfffffff),
+		.filter_devtype_hash = htonl(0x10000000),
+		.filter_tag_bloom_hi = htonl(0x2000400),
+	};
+	const unsigned int uh_len = sizeof(uh);
+
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct udev_monitor_netlink_header, p);
+	memcpy(p, &uh, uh_len);
+
+	sys_send(fd, p, uh_len);
+	printf("sendto(%d, ", fd);
+	print_quoted_memory(&uh, MIN(uh_len, DEFAULT_STRLEN));
+	printf("%s, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       (uh_len > DEFAULT_STRLEN ? "..." : ""),
+	       uh_len, errstr);
+}
+
 int
 main(void)
 {
@@ -48,6 +139,8 @@
 
 	int fd = create_nl_socket(NETLINK_KOBJECT_UEVENT);
 
+	test_nlmsg_type_udev(fd);
+	test_nlmsg_type_kernel(fd);
 	/* test using data that looks like a zero-length C string */
 	char *const buf = tail_alloc(DEFAULT_STRLEN + 1);
 	buf[0] = '=';
diff --git a/tests/netlink_netfilter.c b/tests/netlink_netfilter.c
index 57532f5..2842e15 100644
--- a/tests/netlink_netfilter.c
+++ b/tests/netlink_netfilter.c
@@ -88,8 +88,8 @@
 static void
 test_nlmsg_done(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	const int num = 0xabcdefad;
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(num));
 
 	TEST_NETLINK(fd, nlh0, NLMSG_DONE, NLM_F_REQUEST,
 		     sizeof(num), &num, sizeof(num),
@@ -99,13 +99,21 @@
 static void
 test_nfgenmsg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	static const struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = 0x0bcd
+	};
 
 	struct nfgenmsg msg = {
 		.nfgen_family = AF_UNIX,
 		.version = NFNETLINK_V0,
 		.res_id = NFNL_SUBSYS_NFTABLES
 	};
+	char str_buf[NLMSG_ALIGN(sizeof(msg)) + 4];
+	char nla_buf[NLMSG_ALIGN(sizeof(msg)) + sizeof(nla)];
+
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN,
+					 MAX(sizeof(str_buf), sizeof(nla_buf)));
 
 	TEST_NETLINK_OBJECT_EX_(fd, nlh0,
 				NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_NEWTABLE,
@@ -150,8 +158,6 @@
 		     printf(", version=NFNETLINK_V0");
 		     printf(", res_id=htons(%d)", NFNL_SUBSYS_NFTABLES));
 
-	char str_buf[NLMSG_ALIGN(sizeof(msg)) + 4];
-
 	msg.res_id = htons(0xabcd);
 	memcpy(str_buf, &msg, sizeof(msg));
 	memcpy(str_buf + NLMSG_ALIGN(sizeof(msg)), "1234", 4);
@@ -165,12 +171,6 @@
 			    ", \"\\x31\\x32\\x33\\x34\"", 0xabcd));
 # endif /* NFNL_MSG_BATCH_BEGIN */
 
-	static const struct nlattr nla = {
-		.nla_len = sizeof(nla),
-		.nla_type = 0x0bcd
-	};
-	char nla_buf[NLMSG_ALIGN(sizeof(msg)) + sizeof(nla)];
-
 	msg.res_id = htons(NFNL_SUBSYS_NFTABLES);
 	memcpy(nla_buf, &msg, sizeof(msg));
 	memcpy(nla_buf + NLMSG_ALIGN(sizeof(msg)), &nla, sizeof(nla));
diff --git a/tests/netlink_netlink_diag.c b/tests/netlink_netlink_diag.c
index 855e404..a682f7c 100644
--- a/tests/netlink_netlink_diag.c
+++ b/tests/netlink_netlink_diag.c
@@ -3,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -55,8 +55,7 @@
 		},
 		.ndr = {
 			.sdiag_family = AF_NETLINK,
-			.sdiag_protocol = NDIAG_PROTO_ALL,
-			.ndiag_show = NDIAG_SHOW_MEMINFO
+			.sdiag_protocol = NDIAG_PROTO_ALL
 		}
 	};
 	struct iovec iov = {
diff --git a/tests/netlink_protocol.c b/tests/netlink_protocol.c
index be1a652..47f0e92 100644
--- a/tests/netlink_protocol.c
+++ b/tests/netlink_protocol.c
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2014-2017 Dmitry V. Levin <ldv@altlinux.org>
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -125,7 +126,8 @@
 		struct req req1;
 		char padding[NLMSG_ALIGN(sizeof(struct req)) - sizeof(struct req)];
 		struct req req2;
-	} *const reqs = tail_alloc(sizeof(*reqs));
+	};
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct reqs, reqs);
 	memcpy(&reqs->req1, &c_req, sizeof(c_req));
 	memcpy(&reqs->req2, &c_req, sizeof(c_req));
 
@@ -144,7 +146,7 @@
 	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}, \"\\x61\\x62\\x63\\x64\"}"
-	       ", %p], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       ", ... /* %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));
@@ -203,7 +205,7 @@
 {
 	struct nlmsgerr *err;
 	struct nlmsghdr *nlh;
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(*err) + 4);
 	long rc;
 
 	/* error message without enough room for the error code */
@@ -318,9 +320,9 @@
 test_nlmsg_done(const int fd)
 {
 	struct nlmsghdr *nlh;
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
-	long rc;
 	const int num = 0xfacefeed;
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(num));
+	long rc;
 
 	/* NLMSG_DONE message without enough room for an integer payload */
 	nlh = nlh0;
diff --git a/tests/netlink_route.c b/tests/netlink_route.c
index a1c7d1f..a3fbac9 100644
--- a/tests/netlink_route.c
+++ b/tests/netlink_route.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -143,8 +144,8 @@
 static void
 test_nlmsg_done(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	const int num = 0xabcdefad;
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(num));
 
 	TEST_NETLINK(fd, nlh0, NLMSG_DONE, NLM_F_REQUEST,
 		     sizeof(num), &num, sizeof(num),
@@ -154,10 +155,11 @@
 static void
 test_rtnl_unspec(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	uint8_t family = 0;
+	char buf[sizeof(family) + 4];
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(buf));
 
 	/* unspecified family only */
-	uint8_t family = 0;
 	TEST_NETLINK_(fd, nlh0,
 		      0xffff, "0xffff /* RTM_??? */",
 		      NLM_F_REQUEST, "NLM_F_REQUEST",
@@ -180,7 +182,6 @@
 		      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);
@@ -204,7 +205,6 @@
 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,
@@ -212,6 +212,7 @@
 		.ifi_flags = IFF_UP,
 		.ifi_change = 0xfabcdeba
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(ifinfo));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETLINK, ifinfo,
 		      printf("{ifi_family=AF_UNIX"),
@@ -225,7 +226,6 @@
 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,
@@ -233,6 +233,7 @@
 		.ifa_scope = RT_SCOPE_UNIVERSE,
 		.ifa_index = ifindex_lo()
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDR, msg,
 		      printf("{ifa_family=AF_UNIX"),
@@ -246,7 +247,6 @@
 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,
@@ -258,6 +258,7 @@
 		.rtm_type = RTN_LOCAL,
 		.rtm_flags = RTM_F_NOTIFY
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETROUTE, msg,
 		      printf("{rtm_family=AF_UNIX"),
@@ -275,7 +276,6 @@
 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,
@@ -285,6 +285,7 @@
 		.rtm_type = FR_ACT_TO_TBL,
 		.rtm_flags = FIB_RULE_INVERT
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETRULE, msg,
 		      printf("{family=AF_UNIX"),
@@ -301,7 +302,6 @@
 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(),
@@ -309,6 +309,7 @@
 		.ndm_flags = NTF_PROXY,
 		.ndm_type = RTN_UNSPEC
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETNEIGH, msg,
 		      printf("{ndm_family=AF_UNIX"),
@@ -321,10 +322,10 @@
 static void
 test_rtnl_neightbl(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct ndtmsg msg = {
 		.ndtm_family = AF_NETLINK
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETNEIGHTBL, NLM_F_REQUEST,
@@ -335,7 +336,6 @@
 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(),
@@ -343,6 +343,7 @@
 		.tcm_parent = 0xafbcadab,
 		.tcm_info = 0xbcaedafa
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETQDISC, msg,
 		      printf("{tcm_family=AF_UNIX"),
@@ -356,10 +357,10 @@
 static void
 test_rtnl_tca(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct tcamsg msg = {
 		.tca_family = AF_INET
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETACTION, NLM_F_REQUEST,
@@ -371,7 +372,6 @@
 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,
@@ -379,6 +379,7 @@
 		.ifal_index = ifindex_lo(),
 		.ifal_seq = 0xfadcdafb
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETADDRLABEL, msg,
 		      printf("{ifal_family=AF_UNIX"),
@@ -394,11 +395,11 @@
 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
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETDCB, msg,
 		      printf("{dcb_family=AF_UNIX"),
@@ -410,10 +411,10 @@
 static void
 test_rtnl_netconf(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct netconfmsg msg = {
 		.ncm_family = AF_INET
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETNETCONF, NLM_F_REQUEST,
@@ -426,11 +427,11 @@
 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()
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NL_ROUTE(fd, nlh0, RTM_GETMDB, msg,
 		      printf("{family=AF_UNIX"),
@@ -442,10 +443,10 @@
 static void
 test_rtnl_nsid(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct rtgenmsg msg = {
 		.rtgen_family = AF_UNIX
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	TEST_NETLINK(fd, nlh0,
 		     RTM_GETNSID, NLM_F_REQUEST,
diff --git a/tests/netlink_selinux.c b/tests/netlink_selinux.c
index 2d76822..57cf8a5 100644
--- a/tests/netlink_selinux.c
+++ b/tests/netlink_selinux.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -53,7 +54,7 @@
 static void
 test_selnl_msg_unspec(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, 4);
 
 	TEST_NETLINK_(fd, nlh0,
 		      0xffff, "0xffff /* SELNL_MSG_??? */",
@@ -65,11 +66,11 @@
 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
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
+
 	TEST_NETLINK_OBJECT(fd, nlh0,
 			    SELNL_MSG_SETENFORCE, NLM_F_REQUEST, msg,
 			    PRINT_FIELD_D("{", msg, val);
@@ -79,11 +80,11 @@
 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
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
+
 	TEST_NETLINK_OBJECT(fd, nlh0,
 			    SELNL_MSG_POLICYLOAD, NLM_F_REQUEST, msg,
 			    PRINT_FIELD_U("{", msg, seqno);
diff --git a/tests/netlink_sock_diag.c b/tests/netlink_sock_diag.c
index c2ebf12..880069f 100644
--- a/tests/netlink_sock_diag.c
+++ b/tests/netlink_sock_diag.c
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -127,10 +127,11 @@
 static void
 test_odd_family_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	uint8_t family = 0;
+	char buf[sizeof(family) + 4];
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(buf));
 
 	/* unspecified family only */
-	uint8_t family = 0;
 	TEST_NETLINK(fd, nlh0,
 		     SOCK_DIAG_BY_FAMILY,
 		     NLM_F_REQUEST,
@@ -153,7 +154,6 @@
 		     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);
@@ -177,10 +177,11 @@
 static void
 test_odd_family_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
+	uint8_t family = 0;
+	char buf[sizeof(family) + 4];
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(buf));
 
 	/* unspecified family only */
-	uint8_t family = 0;
 	TEST_NETLINK(fd, nlh0,
 		     SOCK_DIAG_BY_FAMILY, NLM_F_DUMP,
 		     sizeof(family), &family, sizeof(family),
@@ -200,7 +201,6 @@
 		     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);
@@ -222,7 +222,6 @@
 static void
 test_unix_diag_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct unix_diag_req req = {
 		.sdiag_family = AF_UNIX,
 		.sdiag_protocol = 253,
@@ -231,6 +230,7 @@
 		.udiag_show = UDIAG_SHOW_NAME,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
 		       printf("{sdiag_family=AF_UNIX"),
@@ -245,7 +245,6 @@
 static void
 test_unix_diag_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct unix_diag_msg msg = {
 		.udiag_family = AF_UNIX,
 		.udiag_type = SOCK_STREAM,
@@ -253,6 +252,7 @@
 		.udiag_ino = 0xfacefeed,
 		.udiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 	TEST_SOCK_DIAG(fd, nlh0, AF_UNIX,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
 		       printf("{udiag_family=AF_UNIX"),
@@ -266,7 +266,6 @@
 static void
 test_netlink_diag_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct netlink_diag_req req = {
 		.sdiag_family = AF_NETLINK,
 		.sdiag_protocol = NDIAG_PROTO_ALL,
@@ -274,6 +273,7 @@
 		.ndiag_show = NDIAG_SHOW_MEMINFO,
 		.ndiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
 		       printf("{sdiag_family=AF_NETLINK"),
@@ -298,7 +298,6 @@
 static void
 test_netlink_diag_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct netlink_diag_msg msg = {
 		.ndiag_family = AF_NETLINK,
 		.ndiag_type = SOCK_RAW,
@@ -310,6 +309,7 @@
 		.ndiag_ino = 0xdaeefacd,
 		.ndiag_cookie = { 0xbadc0ded, 0xdeadbeef }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 	TEST_SOCK_DIAG(fd, nlh0, AF_NETLINK,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
 		       printf("{ndiag_family=AF_NETLINK"),
@@ -327,7 +327,6 @@
 static void
 test_packet_diag_req(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct packet_diag_req req = {
 		.sdiag_family = AF_PACKET,
 		.sdiag_protocol = ETH_P_LOOP,
@@ -335,6 +334,7 @@
 		.pdiag_show = PACKET_SHOW_INFO,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_REQUEST, req,
 		       printf("{sdiag_family=AF_PACKET"),
@@ -348,7 +348,6 @@
 static void
 test_packet_diag_msg(const int fd)
 {
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	static const struct packet_diag_msg msg = {
 		.pdiag_family = AF_PACKET,
 		.pdiag_type = SOCK_STREAM,
@@ -356,6 +355,7 @@
 		.pdiag_ino = 0xfacefeed,
 		.pdiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 	TEST_SOCK_DIAG(fd, nlh0, AF_PACKET,
 		       SOCK_DIAG_BY_FAMILY, NLM_F_DUMP, msg,
 		       printf("{pdiag_family=AF_PACKET"),
@@ -371,7 +371,6 @@
 {
 	const char address[] = "12.34.56.78";
 	const char address6[] = "12:34:56:78:90:ab:cd:ef";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
@@ -384,6 +383,7 @@
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -435,7 +435,6 @@
 test_inet_diag_req(const int fd)
 {
 	const char address[] = "12.34.56.78";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_req req = {
 		.idiag_family = AF_INET,
 		.idiag_src_len = 0xde,
@@ -450,6 +449,7 @@
 		.idiag_states = 1 << TCP_LAST_ACK,
 		.idiag_dbs = 0xfacefeed,
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -479,7 +479,6 @@
 test_inet_diag_req_v2(const int fd)
 {
 	const char address[] = "87.65.43.21";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_req_v2 req = {
 		.sdiag_family = AF_INET,
 		.idiag_ext = 1 << (INET_DIAG_CONG - 1),
@@ -492,6 +491,7 @@
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded }
 		},
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -519,7 +519,6 @@
 test_inet_diag_msg(const int fd)
 {
 	const char address[] = "11.22.33.44";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct inet_diag_msg msg = {
 		.idiag_family = AF_INET,
 		.idiag_state = TCP_LISTEN,
@@ -537,6 +536,7 @@
 		.idiag_uid = 0xdecefaeb,
 		.idiag_inode = 0xbadc0ded,
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
@@ -570,7 +570,6 @@
 test_smc_diag_req(const int fd)
 {
 	const char address[] = "43.21.56.78";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct smc_diag_req req = {
 		.diag_family = AF_SMC,
 		.diag_ext = 1 << (SMC_DIAG_CONNINFO - 1),
@@ -581,6 +580,7 @@
 			.idiag_cookie = { 0xdeadbeef, 0xbadc0ded },
 		},
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(req));
 
 	if (!inet_pton(AF_INET, address, &req.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &req.id.idiag_dst))
@@ -606,7 +606,6 @@
 test_smc_diag_msg(const int fd)
 {
 	const char address[] = "34.87.12.90";
-	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
 	struct smc_diag_msg msg = {
 		.diag_family = AF_SMC,
 		.diag_state = SMC_ACTIVE,
@@ -621,6 +620,7 @@
 		.diag_uid = 0xadcdfafc,
 		.diag_inode = 0xbadc0ded,
 	};
+	void *const nlh0 = midtail_alloc(NLMSG_HDRLEN, sizeof(msg));
 
 	if (!inet_pton(AF_INET, address, &msg.id.idiag_src) ||
 	    !inet_pton(AF_INET, address, &msg.id.idiag_dst))
diff --git a/tests/nlattr.c b/tests/nlattr.c
index 41923c0..8556f68 100644
--- a/tests/nlattr.c
+++ b/tests/nlattr.c
@@ -2,7 +2,7 @@
  * Check decoding of netlink attribute.
  *
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -172,7 +172,7 @@
 	       ", 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}, %p]}, %u"
+	       ", nla_type=UNIX_DIAG_NAME}, ... /* %p */]}, %u"
 	       ", MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, msg_len, NLA_HDRLEN, nla + 1, msg_len, sprintrc(rc));
 
diff --git a/tests/nlattr_br_port_msg.c b/tests/nlattr_br_port_msg.c
index a2a4792..d339414 100644
--- a/tests/nlattr_br_port_msg.c
+++ b/tests/nlattr_br_port_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -69,7 +69,7 @@
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 
 	const unsigned int hdrlen = sizeof(struct br_port_msg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_crypto_user_alg.c b/tests/nlattr_crypto_user_alg.c
index 2482b33..b8ceba6 100644
--- a/tests/nlattr_crypto_user_alg.c
+++ b/tests/nlattr_crypto_user_alg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -72,7 +72,12 @@
 
 	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));
+	/*
+	 * There are also other structures, but they are not bigger than
+	 * DEFAULT_STRLEN so far.
+	 */
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN + DEFAULT_STRLEN);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_dcbmsg.c b/tests/nlattr_dcbmsg.c
index cd63bb6..b6eb772 100644
--- a/tests/nlattr_dcbmsg.c
+++ b/tests/nlattr_dcbmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,7 +67,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct dcbmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_fib_rule_hdr.c b/tests/nlattr_fib_rule_hdr.c
index 394ab10..96ebadf 100644
--- a/tests/nlattr_fib_rule_hdr.c
+++ b/tests/nlattr_fib_rule_hdr.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -34,12 +34,24 @@
 # include <inttypes.h>
 # include "test_nlattr.h"
 # include <linux/fib_rules.h>
+# include <linux/in.h>
 # include <linux/ip.h>
 # include <linux/rtnetlink.h>
 
 #define FRA_TUN_ID 12
 #define FRA_TABLE 15
 #define FRA_UID_RANGE 20
+#define FRA_PROTOCOL 21
+#define FRA_IP_PROTO 22
+#define FRA_SPORT_RANGE 23
+#define FRA_DPORT_RANGE 24
+
+# ifndef HAVE_STRUCT_FIB_RULE_PORT_RANGE
+struct fib_rule_port_range {
+	uint16_t start;
+	uint16_t end;
+};
+# endif /* HAVE_STRUCT_FIB_RULE_PORT_RANGE */
 
 static void
 init_rtmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
@@ -80,7 +92,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct rtmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 8);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
@@ -125,6 +137,62 @@
 			   printf("htobe64(%" PRIu64 ")", be64toh(tun_id)));
 #endif
 
+	uint8_t proto;
+
+	static const struct {
+		uint8_t arg;
+		const char *str;
+	} proto_args[] = {
+		{ ARG_STR(RTPROT_UNSPEC) },
+		{ 5, "0x5 /* RTPROT_??? */" },
+		{ 17, "RTPROT_MROUTED" },
+		{ 42, "RTPROT_BABEL" },
+		{ 43, "0x2b /* RTPROT_??? */" },
+		{ ARG_STR(0xde) " /* RTPROT_??? */" },
+	};
+
+	for (unsigned i = 0; i < ARRAY_SIZE(proto_args); i++) {
+		proto = proto_args[i].arg;
+		TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				   init_rtmsg, print_rtmsg,
+				   FRA_PROTOCOL, pattern, proto,
+				   printf("%s", proto_args[i].str));
+	}
+
+	static const struct {
+		uint8_t arg;
+		const char *str;
+	} ipproto_args[] = {
+		{ ARG_STR(IPPROTO_TCP) },
+		{ 254, "0xfe /* IPPROTO_??? */" },
+		{ ARG_STR(IPPROTO_RAW) },
+	};
+
+	for (unsigned i = 0; i < ARRAY_SIZE(ipproto_args); i++) {
+		proto = ipproto_args[i].arg;
+		TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				   init_rtmsg, print_rtmsg,
+				   FRA_IP_PROTO, pattern, proto,
+				   printf("%s", ipproto_args[i].str));
+	}
+
+	static const struct fib_rule_port_range prange = {
+		.start = 0xabcd,
+		.end = 0xfeed,
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_SPORT_RANGE, pattern, prange,
+			   PRINT_FIELD_U("{", prange, start);
+			   PRINT_FIELD_U(", ", prange, end);
+			   printf("}"));
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_rtmsg, print_rtmsg,
+			   FRA_DPORT_RANGE, pattern, prange,
+			   PRINT_FIELD_U("{", prange, start);
+			   PRINT_FIELD_U(", ", prange, end);
+			   printf("}"));
+
 	puts("+++ exited with 0 +++");
 	return 0;
 }
diff --git a/tests/nlattr_ifaddrlblmsg.c b/tests/nlattr_ifaddrlblmsg.c
index 6003634..53a928d 100644
--- a/tests/nlattr_ifaddrlblmsg.c
+++ b/tests/nlattr_ifaddrlblmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -69,7 +69,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ifaddrlblmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_ifaddrmsg.c b/tests/nlattr_ifaddrmsg.c
index 93fbef1..c71ebb1 100644
--- a/tests/nlattr_ifaddrmsg.c
+++ b/tests/nlattr_ifaddrmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -83,9 +83,23 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	static const char address4[] = "12.34.56.78";
+	static const char address6[] = "12:34:56:78:90:ab:cd:ef";
+	static const struct ifa_cacheinfo ci = {
+		.ifa_prefered = 0xabcdefac,
+		.ifa_valid = 0xbcdadbca,
+		.cstamp = 0xcdabedba,
+		.tstamp = 0xdebabdac
+	};
+
+	struct in_addr a4;
+	struct in6_addr a6;
+	const uint32_t ifa_flags = IFA_F_SECONDARY | IFA_F_PERMANENT;
+
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ifaddrmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + MAX(sizeof(ci), sizeof(a6)));
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
@@ -106,8 +120,6 @@
 		    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");
@@ -118,8 +130,6 @@
 			   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");
@@ -129,12 +139,6 @@
 			   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,
@@ -144,7 +148,6 @@
 			   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,
diff --git a/tests/nlattr_ifinfomsg.c b/tests/nlattr_ifinfomsg.c
index 1fff52c..71b1bab 100644
--- a/tests/nlattr_ifinfomsg.c
+++ b/tests/nlattr_ifinfomsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -46,6 +46,7 @@
 # define IFLA_VF_PORTS 24
 #endif
 #define IFLA_LINK_NETNSID 37
+#define IFLA_EVENT 44
 
 #ifndef IFLA_INFO_KIND
 # define IFLA_INFO_KIND 1
@@ -89,28 +90,6 @@
 {
 	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,
@@ -136,6 +115,29 @@
 		.rx_compressed = 0xdeffadbd,
 		.tx_compressed = 0xefdadfab
 	};
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(st));
+
+	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));
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_ifinfomsg, print_ifinfomsg,
 			   IFLA_STATS, pattern, st,
@@ -343,6 +345,22 @@
 		    printf("{nla_len=%u, nla_type=IFLA_VF_PORT}",
 			   nla.nla_len));
 
+	static const struct {
+		uint32_t val;
+		const char *str;
+	} ifla_events[] = {
+		{ 0, "IFLA_EVENT_NONE" },
+		{ 6, "IFLA_EVENT_BONDING_OPTIONS" },
+		{ ARG_STR(0x7) " /* IFLA_EVENT_??? */" },
+		{ ARG_STR(0xdeadfeed) " /* IFLA_EVENT_??? */" },
+	};
+	for (size_t i = 0; i < ARRAY_SIZE(ifla_events); i++) {
+		TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				   init_ifinfomsg, print_ifinfomsg,
+				   IFLA_EVENT, pattern, ifla_events[i].val,
+				   printf("%s", ifla_events[i].str));
+	}
+
 	puts("+++ exited with 0 +++");
 	return 0;
 }
diff --git a/tests/nlattr_ifla.h b/tests/nlattr_ifla.h
new file mode 100644
index 0000000..6989225
--- /dev/null
+++ b/tests/nlattr_ifla.h
@@ -0,0 +1,78 @@
+/*
+ * netlink attribute ifinfomsg common code.
+ *
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (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_TESTS_NLATTR_IFLA_H
+#define STRACE_TESTS_NLATTR_IFLA_H
+
+#include "tests.h"
+
+#ifndef IFLA_ATTR
+# error "Please define IFLA_ATTR before including this file"
+#endif
+
+static 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_ATTR
+	);
+}
+
+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=" STRINGIFY_VAL(IFLA_ATTR) "}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+#endif /* STRACE_TESTS_NLATTR_IFLA_H */
diff --git a/tests/nlattr_ifla_af_spec.c b/tests/nlattr_ifla_af_spec.c
new file mode 100644
index 0000000..24f55af
--- /dev/null
+++ b/tests/nlattr_ifla_af_spec.c
@@ -0,0 +1,322 @@
+/*
+ * IFLA_AF_SPEC netlink attribute decoding check.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <inttypes.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>
+
+#if !HAVE_DECL_IFLA_AF_SPEC
+enum { IFLA_AF_SPEC = 26 };
+#endif
+
+#define XLAT_MACROS_ONLY
+# include "xlat/rtnl_ifla_af_spec_inet_attrs.h"
+# include "xlat/rtnl_ifla_af_spec_inet6_attrs.h"
+#undef XLAT_MACROS_ONLY
+
+#ifndef HAVE_STRUCT_IFLA_CACHEINFO
+struct ifla_cacheinfo {
+	uint32_t max_reasm_len;
+	uint32_t tstamp;
+	uint32_t reachable_time;
+	uint32_t retrans_time;
+};
+#endif
+
+#define IFLA_ATTR IFLA_AF_SPEC
+#include "nlattr_ifla.h"
+
+#define AF_SPEC_FUNCS(family_)						\
+	static void							\
+	init_##family_##_msg(struct nlmsghdr *const nlh,		\
+			     const unsigned int msg_len)		\
+	{								\
+		init_ifinfomsg(nlh, msg_len);				\
+									\
+		struct nlattr *nla = NLMSG_ATTR(nlh, hdrlen);		\
+		nla += 1;						\
+		SET_STRUCT(struct nlattr, nla,				\
+			.nla_len = msg_len - NLMSG_SPACE(hdrlen)	\
+				  - NLA_HDRLEN,				\
+			.nla_type = family_,				\
+		);							\
+	}								\
+									\
+	static void							\
+	print_##family_##_msg(const unsigned int msg_len)		\
+	{								\
+		print_ifinfomsg(msg_len);				\
+		printf(", {{nla_len=%u, nla_type=" #family_ "}",	\
+		       msg_len - NLMSG_SPACE(hdrlen) - NLA_HDRLEN);	\
+	}								\
+	/* end of AF_SPEC_FUNCS definition */
+
+AF_SPEC_FUNCS(AF_INET)
+AF_SPEC_FUNCS(AF_INET6)
+
+static void
+print_arr_val(uint32_t *val, size_t idx, const char *idx_str)
+{
+	if (idx_str)
+		printf("[%s] = ", idx_str);
+	else
+		printf("[%zu] = ", idx);
+
+	printf("%d", *val);
+}
+
+static void
+print_arr_uval(uint64_t *val, size_t idx, const char *idx_str)
+{
+	if (idx_str)
+		printf("[%s] = ", idx_str);
+	else
+		printf("[%zu] = ", idx);
+
+	printf("%" PRIu64, *val);
+}
+
+static void
+print_inet_conf_val(uint32_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"IPV4_DEVCONF_FORWARDING-1",
+		"IPV4_DEVCONF_MC_FORWARDING-1",
+	};
+
+	print_arr_val(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+
+static void
+print_inet6_conf_val(uint32_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"DEVCONF_FORWARDING",
+		"DEVCONF_HOPLIMIT",
+	};
+
+	print_arr_val(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+static void
+print_inet6_stats_val(uint64_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"IPSTATS_MIB_NUM",
+		"IPSTATS_MIB_INPKTS",
+	};
+
+	print_arr_uval(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+static void
+print_icmp6_stats_val(uint64_t *val, size_t idx)
+{
+	static const char * const strs[] = {
+		"ICMP6_MIB_NUM",
+		"ICMP6_MIB_INMSGS",
+		"ICMP6_MIB_INERRORS",
+		"ICMP6_MIB_OUTMSGS",
+		"ICMP6_MIB_OUTERRORS",
+		"ICMP6_MIB_CSUMERRORS",
+		"6 /* ICMP6_MIB_??? */",
+	};
+
+	print_arr_uval(val, idx, idx < ARRAY_SIZE(strs) ? strs[idx] : NULL);
+}
+
+int
+main(void)
+{
+	static const uint8_t unknown_msg[] = { 0xab, 0xac, 0xdb, 0xcd };
+
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 3 * NLA_HDRLEN + 256);
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+
+	/* unknown AF_* */
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  AF_UNIX, pattern, unknown_msg,
+				  printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET_msg, print_AF_INET_msg,
+				      0, "IFLA_INET_UNSPEC", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET_msg, print_AF_INET_msg,
+				      2, "0x2 /* IFLA_INET_??? */", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET: IFLA_INET_CONF */
+	uint32_t inet_conf_vals[] = { 0xdeadc0de, 0xda7aface };
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET_msg, print_AF_INET_msg,
+				    IFLA_INET_CONF, pattern,
+				    inet_conf_vals, 2, print_inet_conf_val);
+
+	/* AF_INET6 */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      0, "IFLA_INET6_UNSPEC", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      9, "0x9 /* IFLA_INET6_??? */", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET6: IFLA_INET6_FLAGS */
+	static const struct {
+		uint32_t flags;
+		const char *str;
+	} inet6_flags[] = {
+		{ 0xf, "0xf /* IF_??? */" },
+		{ 0x10, "IF_RS_SENT" },
+		{ 0xc0, "IF_RA_MANAGED|IF_RA_OTHERCONF" },
+		{ 0xdeadc0de, "IF_RS_SENT|IF_RA_MANAGED|IF_RA_OTHERCONF"
+			      "|IF_READY|0x5eadc00e" },
+	};
+
+	for (size_t i = 0; i < ARRAY_SIZE(inet6_flags); i++) {
+		TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+					      init_AF_INET6_msg,
+					      print_AF_INET6_msg,
+					      1, "IFLA_INET6_FLAGS", pattern,
+					      inet6_flags[i].flags,
+					      print_quoted_hex, 2,
+					      printf("%s", inet6_flags[i].str));
+	}
+
+	/* AF_INET6: IFLA_INET6_CONF */
+	uint32_t inet6_conf_vals[] = { 0xdeadc0de, 0xda7aface };
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET6_msg, print_AF_INET6_msg,
+				    IFLA_INET6_CONF, pattern,
+				    inet6_conf_vals, 2, print_inet6_conf_val);
+
+	/* AF_INET6: IFLA_INET6_STATS */
+	uint64_t inet6_stats_vals[] = { 0xdeadc0deda7aface, 0xdec0deedbadc0ded };
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET6_msg, print_AF_INET6_msg,
+				    IFLA_INET6_STATS, pattern,
+				    inet6_stats_vals, 2, print_inet6_stats_val);
+
+	/* AF_INET6: IFLA_INET6_MCAST */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      4, "IFLA_INET6_MCAST", pattern,
+				      unknown_msg, print_quoted_hex, 2,
+				      printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	/* AF_INET6: IFLA_INET6_CACHEINFO */
+	static const struct ifla_cacheinfo ci = {
+		0xbadc0ded, 0xfacebeef, 0xdecafeed, 0xdeadfeed,
+	};
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      5, "IFLA_INET6_CACHEINFO", pattern,
+				      ci, print_quoted_hex, 2,
+				      PRINT_FIELD_U("{", ci, max_reasm_len);
+				      PRINT_FIELD_U(", ", ci, tstamp);
+				      PRINT_FIELD_U(", ", ci, reachable_time);
+				      PRINT_FIELD_U(", ", ci, retrans_time);
+				      printf("}"));
+
+	/* AF_INET6: IFLA_INET6_ICMP6STATS */
+	uint64_t icmp6_stats_vals[] = {
+		0xdeadc0deda7aface, 0xdec0deedbadc0ded, 0xfacebeefdeadfeed,
+		0xdeadc0deda7afacd, 0xdec0deedbadc0dee, 0xfacebeefdeadfeef,
+		0xdeadc0deda7afacc
+	};
+	TEST_NESTED_NLATTR_ARRAY_EX(fd, nlh0, hdrlen,
+				    init_AF_INET6_msg, print_AF_INET6_msg,
+				    IFLA_INET6_ICMP6STATS, pattern,
+				    icmp6_stats_vals, 2, print_icmp6_stats_val);
+
+	/* AF_INET6: IFLA_INET6_TOKEN */
+	uint8_t inet6_addr[16] = {
+		0xba, 0xdc, 0x0d, 0xed, 0xfa, 0xce, 0xbe, 0xef,
+		0xde, 0xca, 0xfe, 0xed, 0xde, 0xad, 0xfe, 0xed,
+	};
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_AF_INET6_msg, print_AF_INET6_msg,
+				      7, "IFLA_INET6_TOKEN", pattern,
+				      inet6_addr, print_quoted_hex, 2,
+				      printf("badc:ded:face:beef:deca:feed"
+					     ":dead:feed"));
+
+	/* AF_INET6: IFLA_INET6_ */
+	static const struct {
+		uint8_t flags;
+		const char *str;
+	} agms[] = {
+		{ 0x0, "IN6_ADDR_GEN_MODE_EUI64" },
+		{ 0x3, "IN6_ADDR_GEN_MODE_RANDOM" },
+		{ 0x4, "0x4 /* IN6_ADDR_GEN_MODE_??? */" },
+		{ 0xff, "0xff /* IN6_ADDR_GEN_MODE_??? */" },
+	};
+
+	for (size_t i = 0; i < ARRAY_SIZE(agms); i++) {
+		TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+					      init_AF_INET6_msg,
+					      print_AF_INET6_msg,
+					      8, "IFLA_INET6_ADDR_GEN_MODE",
+					      pattern, agms[i].flags,
+					      print_quoted_hex, 2,
+					      printf("%s", agms[i].str));
+	}
+
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_ifla_af_spec.gen.test b/tests/nlattr_ifla_af_spec.gen.test
new file mode 100755
index 0000000..601eeb2
--- /dev/null
+++ b/tests/nlattr_ifla_af_spec.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_af_spec +netlink_sock_diag.test ); do not edit.
+set -- 
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ifla_brport.c b/tests/nlattr_ifla_brport.c
index ae7c9da..1968426 100644
--- a/tests/nlattr_ifla_brport.c
+++ b/tests/nlattr_ifla_brport.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,65 +38,35 @@
 #endif
 #include <linux/rtnetlink.h>
 
+#if !HAVE_DECL_IFLA_PROTINFO
+enum { IFLA_PROTINFO = 12 };
+#endif
+
 #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));
-}
+#define IFLA_ATTR IFLA_PROTINFO
+#include "nlattr_ifla.h"
 
 int
 main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	const uint16_t u16 = 0xabcd;
+	const uint64_t u64 = 0xabcdedeeefeafeab;
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN * 2 + sizeof(u64));
 
 	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,
diff --git a/tests/nlattr_ifla_linkinfo.c b/tests/nlattr_ifla_linkinfo.c
new file mode 100644
index 0000000..1bf1bef
--- /dev/null
+++ b/tests/nlattr_ifla_linkinfo.c
@@ -0,0 +1,711 @@
+/*
+ * IFLA_LINKINFO netlink attribute decoding check.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <inttypes.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <arpa/inet.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 XLAT_MACROS_ONLY
+# include <xlat/rtnl_link_attrs.h>
+# include <xlat/rtnl_ifla_info_attrs.h>
+#undef XLAT_MACROS_ONLY
+
+#define IFLA_ATTR IFLA_LINKINFO
+#include "nlattr_ifla.h"
+
+#define COMMA ,
+#define TEST_UNKNOWN_TUNNELS(fd_, nlh0_, objtype_, objtype_str_,	\
+			     obj_, objsz_, arrstrs_, ...)		\
+	do {								\
+		/* 64 is guestimate for maximum unknown type len */	\
+		char buf[8 * 2 + 64 + objsz_];				\
+		const char **arrstrs[] = arrstrs_;			\
+		const char ***arrstrs_pos = arrstrs;			\
+		const char **arrstr = *arrstrs_pos;			\
+		const char *type = NULL;				\
+									\
+		for (type = arrstr ? arrstr[0] : NULL; type && arrstr;	\
+		     type = (++arrstr)[0] ? arrstr[0]			\
+					  : (++arrstrs_pos)[0]		\
+				             ? (arrstr = arrstrs_pos[0])[0] \
+					     : NULL)			\
+		{							\
+			size_t type_len = strlen(type) + 1;		\
+									\
+			if (type_len > 64)				\
+				error_msg_and_fail("Unexpectedly long "	\
+						   "unknown type: \"%s\" " \
+						   "(length is %zu)",	\
+						   type, type_len);	\
+									\
+			struct nlattr obj_nla = {			\
+				.nla_len = NLA_HDRLEN + (objsz_),	\
+				.nla_type = (objtype_),			\
+			};						\
+									\
+			char *pos = buf;				\
+			memcpy(pos, type, type_len);			\
+			pos += NLA_ALIGN(type_len);			\
+			memcpy(pos, &obj_nla, sizeof(obj_nla));		\
+			pos += sizeof(obj_nla);				\
+			memcpy(pos, (obj_), (objsz_));			\
+									\
+			TEST_NLATTR_EX_((fd_),				\
+					(nlh0_) - hdrlen - (pos - buf),	\
+					hdrlen + NLA_HDRLEN,		\
+					init_ifinfomsg, print_ifinfomsg, \
+					IFLA_INFO_KIND, "IFLA_INFO_KIND", \
+					type_len, objsz_ + (pos - buf),	\
+					buf, objsz_ + (pos - buf),	\
+					printf("\"%s\"}", type);	\
+					printf(", {{nla_len=%zu"	\
+				               ", nla_type=%s}, ",	\
+					       (objsz_) + NLA_HDRLEN,	\
+					       (objtype_str_));		\
+									\
+					{ __VA_ARGS__; }		\
+									\
+					printf("}"));			\
+		}							\
+	} while (0)
+
+#define TEST_LINKINFO_(fd_, nlh0_, nla_type_, nla_type_str_, tuntype_,	\
+		       obj_, objsz_, pattern_, fallback_func_, ...)	\
+	do {								\
+		size_t tuntype_len = strlen(tuntype_) + 1;		\
+		char *buf = tail_alloc(NLA_ALIGN(tuntype_len)		\
+				       + NLA_HDRLEN + (objsz_));	\
+		char *pos = buf;					\
+									\
+		struct nlattr obj_nla = {				\
+			.nla_len = NLA_HDRLEN + (objsz_),		\
+			.nla_type = (nla_type_),			\
+		};							\
+									\
+		memcpy(pos, (tuntype_), tuntype_len);			\
+		pos += NLA_ALIGN(tuntype_len);				\
+		memcpy(pos, &obj_nla, sizeof(obj_nla));			\
+		pos += sizeof(obj_nla);					\
+		memcpy(pos, &(obj_), (objsz_));				\
+									\
+		if (fallback_func_ == print_quoted_hex) {		\
+			TEST_NLATTR_EX_((fd_),				\
+					(nlh0_) - NLA_HDRLEN,		\
+					hdrlen + NLA_HDRLEN,		\
+					init_ifinfomsg, print_ifinfomsg, \
+					IFLA_INFO_KIND, "IFLA_INFO_KIND", \
+					tuntype_len,			\
+					objsz_ + (pos - buf) - 1,	\
+					buf, objsz_ + (pos - buf) - 1,	\
+					printf("\"%s\"}", (tuntype_));	\
+					printf(", {{nla_len=%zu"	\
+					       ", nla_type=%s}, ",	\
+					       (objsz_) + NLA_HDRLEN,	\
+					       (nla_type_str_));	\
+					(fallback_func_)((obj_),	\
+							 (objsz_) - 1);	\
+					printf("}"));			\
+		}							\
+									\
+		TEST_NLATTR_EX_((fd_), (nlh0_) - NLA_HDRLEN,		\
+				hdrlen + NLA_HDRLEN,			\
+				init_ifinfomsg, print_ifinfomsg,	\
+				IFLA_INFO_KIND, "IFLA_INFO_KIND",	\
+				tuntype_len, objsz_ + (pos - buf),	\
+				buf, objsz_ + (pos - buf) - 1,		\
+				printf("\"%s\"}", (tuntype_));		\
+				printf(", {{nla_len=%zu, nla_type=%s}, ", \
+				       (objsz_) + NLA_HDRLEN,		\
+				       (nla_type_str_));		\
+				printf("%p}",				\
+				       RTA_DATA(NLMSG_ATTR(nlh,		\
+				       (hdrlen + NLA_HDRLEN + (pos - buf)))) \
+				       )				\
+				);					\
+									\
+		TEST_NLATTR_EX_((fd_), (nlh0_) - NLA_HDRLEN,		\
+				hdrlen + NLA_HDRLEN,			\
+				init_ifinfomsg, print_ifinfomsg,	\
+				IFLA_INFO_KIND, "IFLA_INFO_KIND",	\
+				tuntype_len, objsz_ + (pos - buf),	\
+				buf, objsz_ + (pos - buf),		\
+				printf("\"%s\"}", (tuntype_));		\
+				printf(", {{nla_len=%zu, nla_type=%s}, ", \
+				       (objsz_) + NLA_HDRLEN,		\
+				       (nla_type_str_));		\
+									\
+				{ __VA_ARGS__; }			\
+									\
+				printf("}"));				\
+	} while (0)
+
+#define TEST_LINKINFO(fd_, nlh0_, nla_type_, tuntype_,	\
+		      obj_, pattern_, fallback_func_, ...)	\
+	TEST_LINKINFO_((fd_), (nlh0_), nla_type_, #nla_type_, (tuntype_), \
+		       (obj_), sizeof(obj_), pattern_, fallback_func_,	\
+		       __VA_ARGS__)
+
+#define TEST_NESTED_LINKINFO(fd_, nlh0_,				\
+			     nla_type_, nla_type_str_, tuntype_,	\
+			     subnla_type_, subnla_type_str_,		\
+			     obj_, pattern_, ...)			\
+	do {								\
+		size_t tuntype_len = strlen(tuntype_) + 1;		\
+		struct {						\
+			size_t sz;					\
+			const char *str;				\
+		} attrs[] = { __VA_ARGS__ };				\
+		size_t tunhdrlen;					\
+		size_t buflen = NLA_ALIGN(tuntype_len) + NLA_HDRLEN;	\
+		size_t attrsz = 0;					\
+									\
+		for (size_t i = 0; i < ARRAY_SIZE(attrs); i++)		\
+			attrsz += NLA_HDRLEN + NLA_ALIGN(attrs[i].sz);	\
+									\
+		buflen += attrsz;					\
+									\
+		char *buf = tail_alloc(buflen);				\
+		char *pos = buf;					\
+									\
+		struct nlattr nla = {					\
+			.nla_len = NLA_HDRLEN + attrsz,			\
+			.nla_type = (nla_type_),			\
+		};							\
+									\
+		memcpy(pos, (tuntype_), tuntype_len);			\
+		pos += NLA_ALIGN(tuntype_len);				\
+		memcpy(pos, &nla, sizeof(nla));				\
+		pos += sizeof(nla);					\
+									\
+		tunhdrlen = pos - buf;					\
+									\
+		nla.nla_type = subnla_type_;				\
+									\
+		for (size_t i = 0; i < ARRAY_SIZE(attrs); i++) {	\
+			nla.nla_len = NLA_HDRLEN + attrs[i].sz;		\
+			memcpy(pos, &nla, sizeof(nla));			\
+			pos += sizeof(nla);				\
+									\
+			memcpy(pos, &(obj_), MIN(sizeof(obj_), attrs[i].sz)); \
+									\
+			if (attrs[i].sz > sizeof(obj_))			\
+				memcpy(pos + sizeof(obj_),		\
+				       &(pattern_),			\
+				       attrs[i].sz - sizeof(obj_));	\
+									\
+			pos += NLA_ALIGN(attrs[i].sz);			\
+		}							\
+									\
+		TEST_NLATTR_EX_((fd_), (nlh0_) - hdrlen - tunhdrlen,	\
+				hdrlen + NLA_HDRLEN,			\
+				init_ifinfomsg, print_ifinfomsg,	\
+				IFLA_INFO_KIND, "IFLA_INFO_KIND",	\
+				tuntype_len, buflen,			\
+				buf, buflen,				\
+				printf("\"%s\"}", (tuntype_));		\
+				printf(", {{nla_len=%zu, nla_type=%s}, [", \
+				       attrsz + NLA_HDRLEN,		\
+				       (nla_type_str_));		\
+									\
+				for (size_t i = 0; i < ARRAY_SIZE(attrs); i++) \
+					printf("%s%s{nla_len=%zu"	\
+					       ", nla_type=%s}%s%s%s",	\
+					       i ? ", " : "",		\
+					       attrs[i].str ? "{": "",	\
+					       attrs[i].sz + NLA_HDRLEN, \
+					       subnla_type_str_,	\
+					       attrs[i].str ? ", ": "", \
+					       attrs[i].str ?: "",	\
+					       attrs[i].str ? "}" : ""); \
+									\
+				printf("]}"));				\
+	} while (0)
+
+int
+main(void)
+{
+	static const uint8_t unknown_msg[] = { 0xab, 0xac, 0xdb, 0xcd };
+	static const char *unsupported_tunnel_types[] = {
+		"batadv", "bond",
+		"caif", "cfhsi",
+		"dummy",
+		"erspan",
+		"geneve", "gre", "gretap", "gtp",
+		"hsr",
+		"ifb", "ip6erspan", "ip6gre", "ip6gretap", "ip6tnl",
+		"ipip", "ipoib", "ipvlan", "ipvtap",
+		"lowpan",
+		"macsec", "macvlan", "macvtap",
+		"netdevsim", "nlmon",
+		"openvswitch",
+		"ppp",
+		"rmnet",
+		"sit",
+		"team",
+		"vcan", "veth", "vlan", "vrf", "vsockmon",
+		"vti", "vti6", "vxcan", "vxlan",
+		NULL
+	};
+	static const char *unsupported_xstats_types[] = {
+		"bridge",
+		"tun",
+		NULL
+	};
+	static const char *unsupported_data_types[] = {
+		"can",
+		NULL
+	};
+
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	const unsigned int hdrlen = sizeof(struct ifinfomsg);
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 2 * NLA_HDRLEN + 256);
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+
+	/* unknown AF_INFO_* type */
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_ifinfomsg, print_ifinfomsg,
+			   IFLA_INFO_UNSPEC, pattern, unknown_msg,
+			   printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+			       init_ifinfomsg, print_ifinfomsg,
+			       6, "0x6 /* IFLA_INFO_??? */", pattern,
+			       unknown_msg, print_quoted_hex, 1,
+			       printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	/* IFLA_INFO_KIND */
+	TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen,
+				      init_ifinfomsg, print_ifinfomsg,
+				      IFLA_INFO_KIND, "IFLA_INFO_KIND", pattern,
+				      unknown_msg, print_quoted_stringn, 1,
+				      printf("\"\\253\\254\\333\\315\"..."));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_UNSPEC */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_UNSPEC, "IFLA_INFO_UNSPEC",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_KIND */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_KIND, "IFLA_INFO_KIND",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\253\\254\\333\\315\"..."));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_DATA */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_DATA, "IFLA_INFO_DATA",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	struct val_name {
+		unsigned int val;
+		const char *name;
+	};
+
+	static const uint64_t u64_val = 0xdeadc0defacefeedULL;
+	static const uint32_t u32_val = 0xbadc0dedU;
+	static const uint16_t u16_val = 0xdeed;
+	static const uint8_t  u8_val  = 0xa1;
+
+	/* bridge attrs */
+	static const struct val_name und_br_attrs[] = {
+		{ 0, "IFLA_BR_UNSPEC" },
+		{ 20, "IFLA_BR_GROUP_ADDR" },
+		{ 21, "IFLA_BR_FDB_FLUSH" },
+		{ 40, "IFLA_BR_PAD" },
+		{ 45, "0x2d /* IFLA_BR_??? */" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(und_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     und_br_attrs[k].val, und_br_attrs[k].name,
+				     unknown_msg, pattern,
+				     { 2, "\"\\xab\\xac\"" },
+				     { 4, "\"\\xab\\xac\\xdb\\xcd\"" },
+				     { 6,
+					"\"\\xab\\xac\\xdb\\xcd\\x61\\x62\"" },
+				     { 8, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\"" },
+				     { 10, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\\x65\\x66\"" });
+	}
+
+	static const struct val_name u64_br_attrs[] = {
+		{ 16, "IFLA_BR_HELLO_TIMER" },
+		{ 17, "IFLA_BR_TCN_TIMER" },
+		{ 18, "IFLA_BR_TOPOLOGY_CHANGE_TIMER" },
+		{ 19, "IFLA_BR_GC_TIMER" },
+		{ 30, "IFLA_BR_MCAST_LAST_MEMBER_INTVL" },
+		{ 31, "IFLA_BR_MCAST_MEMBERSHIP_INTVL" },
+		{ 32, "IFLA_BR_MCAST_QUERIER_INTVL" },
+		{ 33, "IFLA_BR_MCAST_QUERY_INTVL" },
+		{ 34, "IFLA_BR_MCAST_QUERY_RESPONSE_INTVL" },
+		{ 35, "IFLA_BR_MCAST_STARTUP_QUERY_INTVL" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u64_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u64_br_attrs[k].val, u64_br_attrs[k].name,
+				     u64_val, pattern,
+				     { 7, "\""
+#if WORDS_BIGENDIAN
+					"\\xde\\xad\\xc0\\xde\\xfa\\xce\\xfe"
+#else
+					"\\xed\\xfe\\xce\\xfa\\xde\\xc0\\xad"
+#endif
+					"\"" },
+				     { 8, "16045693111314087661" },
+				     { 9, "16045693111314087661" });
+	}
+
+	static const struct val_name u32_br_attrs[] = {
+		{  1, "IFLA_BR_FORWARD_DELAY" },
+		{  2, "IFLA_BR_HELLO_TIME" },
+		{  3, "IFLA_BR_MAX_AGE" },
+		{  4, "IFLA_BR_AGEING_TIME" },
+		{  5, "IFLA_BR_STP_STATE" },
+		{ 13, "IFLA_BR_ROOT_PATH_COST" },
+		{ 26, "IFLA_BR_MCAST_HASH_ELASTICITY" },
+		{ 27, "IFLA_BR_MCAST_HASH_MAX" },
+		{ 28, "IFLA_BR_MCAST_LAST_MEMBER_CNT" },
+		{ 29, "IFLA_BR_MCAST_STARTUP_QUERY_CNT" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u32_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u32_br_attrs[k].val, u32_br_attrs[k].name,
+				     u32_val, pattern,
+				     { 3, "\""
+#if WORDS_BIGENDIAN
+					"\\xba\\xdc\\x0d"
+#else
+					"\\xed\\x0d\\xdc"
+#endif
+					"\"" },
+				     { 4, "3134983661" },
+				     { 5, "3134983661" });
+	}
+
+	static const struct val_name u16_br_attrs[] = {
+		{  6, "IFLA_BR_PRIORITY" },
+		{ 12, "IFLA_BR_ROOT_PORT" },
+		{ 39, "IFLA_BR_VLAN_DEFAULT_PVID" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u16_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u16_br_attrs[k].val, u16_br_attrs[k].name,
+				     u16_val, pattern,
+				     { 1, "\""
+#if WORDS_BIGENDIAN
+					"\\xde"
+#else
+					"\\xed"
+#endif
+					"\"" },
+				     { 2, "57069" },
+				     { 3, "57069" });
+	}
+
+
+	static const struct val_name x16_br_attrs[] = {
+		{  9, "IFLA_BR_GROUP_FWD_MASK" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(x16_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     x16_br_attrs[k].val, x16_br_attrs[k].name,
+				     u16_val, pattern,
+				     { 1, "\""
+#if WORDS_BIGENDIAN
+					"\\xde"
+#else
+					"\\xed"
+#endif
+					"\"" },
+				     { 2, "0xdeed" },
+				     { 3, "0xdeed" });
+	}
+
+	static const struct val_name u8_br_attrs[] = {
+		{  7, "IFLA_BR_VLAN_FILTERING" },
+		{ 14, "IFLA_BR_TOPOLOGY_CHANGE" },
+		{ 15, "IFLA_BR_TOPOLOGY_CHANGE_DETECTED" },
+		{ 22, "IFLA_BR_MCAST_ROUTER" },
+		{ 23, "IFLA_BR_MCAST_SNOOPING" },
+		{ 24, "IFLA_BR_MCAST_QUERY_USE_IFADDR" },
+		{ 25, "IFLA_BR_MCAST_QUERIER" },
+		{ 36, "IFLA_BR_NF_CALL_IPTABLES" },
+		{ 37, "IFLA_BR_NF_CALL_IP6TABLES" },
+		{ 38, "IFLA_BR_NF_CALL_ARPTABLES" },
+		{ 41, "IFLA_BR_VLAN_STATS_ENABLED" },
+		{ 42, "IFLA_BR_MCAST_STATS_ENABLED" },
+		{ 43, "IFLA_BR_MCAST_IGMP_VERSION" },
+		{ 44, "IFLA_BR_MCAST_MLD_VERSION" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u8_br_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     u8_br_attrs[k].val, u8_br_attrs[k].name,
+				     u8_val, pattern,
+				     { 0, NULL },
+				     { 1, "161" },
+				     { 2, "161" });
+	}
+
+	unsigned short eth_p = htons(0x88C7);
+	TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+			     8, "IFLA_BR_VLAN_PROTOCOL",
+			     eth_p, pattern,
+			     { 1, "\"\\x88\"" },
+			     { 2, "htons(ETH_P_PREAUTH)" },
+			     { 2, "htons(ETH_P_PREAUTH)" });
+
+	static const uint8_t bridge_id[]
+		= { 0xbe, 0xef, 0xfa, 0xce, 0xde, 0xc0, 0xde, 0xad };
+	static const struct val_name br_id_attrs[] = {
+		{ 10, "IFLA_BR_ROOT_ID" },
+		{ 11, "IFLA_BR_BRIDGE_ID" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(br_id_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "bridge",
+				     br_id_attrs[k].val, br_id_attrs[k].name,
+				     bridge_id, pattern,
+				     { 7, "\"\\xbe\\xef\\xfa\\xce"
+					  "\\xde\\xc0\\xde\"" },
+				     { 8, "{prio=[190, 239]"
+					  ", addr=fa:ce:de:c0:de:ad}" },
+				     { 9, "{prio=[190, 239]"
+					  ", addr=fa:ce:de:c0:de:ad}" });
+	}
+
+	/* tun attrs */
+	static const struct val_name u8_tun_attrs[] = {
+		{ 4, "IFLA_TUN_PI" },
+		{ 5, "IFLA_TUN_VNET_HDR" },
+		{ 6, "IFLA_TUN_PERSIST" },
+		{ 7, "IFLA_TUN_MULTI_QUEUE" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u8_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     u8_tun_attrs[k].val, u8_tun_attrs[k].name,
+				     u8_val, pattern,
+				     { 0, NULL },
+				     { 1, "161" },
+				     { 2, "161" });
+	}
+
+	static const struct val_name u32_tun_attrs[] = {
+		{ 8, "IFLA_TUN_NUM_QUEUES" },
+		{ 9, "IFLA_TUN_NUM_DISABLED_QUEUES" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(u32_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     u32_tun_attrs[k].val,
+				     u32_tun_attrs[k].name,
+				     u32_val, pattern,
+				     { 3, "\""
+#if WORDS_BIGENDIAN
+					"\\xba\\xdc\\x0d"
+#else
+					"\\xed\\x0d\\xdc"
+#endif
+					"\"" },
+				     { 4, "3134983661" },
+				     { 5, "3134983661" });
+	}
+
+	static const struct val_name und_tun_attrs[] = {
+		{ 0,  "IFLA_TUN_UNSPEC" },
+		{ 10, "0xa /* IFLA_TUN_??? */" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(und_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     und_tun_attrs[k].val,
+				     und_tun_attrs[k].name,
+				     unknown_msg, pattern,
+				     { 2, "\"\\xab\\xac\"" },
+				     { 4, "\"\\xab\\xac\\xdb\\xcd\"" },
+				     { 6,
+					"\"\\xab\\xac\\xdb\\xcd\\x61\\x62\"" },
+				     { 8, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\"" },
+				     { 10, "\"\\xab\\xac\\xdb\\xcd\\x61\\x62"
+					"\\x63\\x64\\x65\\x66\"" });
+	}
+
+	static const uint32_t minus_one = 0xffffffffU;
+	static const struct val_name uid_tun_attrs[] = {
+		{ 1, "IFLA_TUN_OWNER" },
+		{ 2, "IFLA_TUN_GROUP" },
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(uid_tun_attrs); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     uid_tun_attrs[k].val,
+				     uid_tun_attrs[k].name,
+				     u32_val, pattern,
+				     { 3, "\""
+#if WORDS_BIGENDIAN
+					"\\xba\\xdc\\x0d"
+#else
+					"\\xed\\x0d\\xdc"
+#endif
+					"\"" },
+				     { 4, "3134983661" },
+				     { 5, "3134983661" });
+
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     uid_tun_attrs[k].val,
+				     uid_tun_attrs[k].name,
+				     minus_one, pattern,
+				     { 3, "\"\\xff\\xff\\xff\"" },
+				     { 4, "-1" },
+				     { 5, "-1" });
+	}
+
+	static const struct {
+		uint8_t val;
+		const char *str;
+	} tun_types[] = {
+		{ 0, "0 /* IFF_??? */"},
+		{ 1, "IFF_TUN"},
+		{ 2, "IFF_TAP"},
+		{ 3, "0x3 /* IFF_??? */"},
+		{ 0xda, "0xda /* IFF_??? */"},
+	};
+
+	for (size_t k = 0; k < ARRAY_SIZE(tun_types); k++) {
+		TEST_NESTED_LINKINFO(fd, nlh0, 2, "IFLA_INFO_DATA", "tun",
+				     3, "IFLA_TUN_TYPE",
+				     tun_types[k].val, pattern,
+				     { 0, NULL },
+				     { 1, tun_types[k].str },
+				     { 2, tun_types[k].str });
+	}
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_XSTATS */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, IFLA_INFO_XSTATS, "IFLA_INFO_XSTATS",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			     /*
+			      * can decoder decodes its data only if it's big
+			      * enough.
+			      */
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+	uint32_t can_stats_data[] = {
+		0xbadc0de0, 0xbadc0de1, 0xbadc0de2, 0xbadc0de3,
+		0xbadc0de4, 0xbadc0de5,
+	};
+
+	TEST_LINKINFO(fd, nlh0, IFLA_INFO_XSTATS, "can",
+		      can_stats_data, pattern, print_quoted_hex,
+		      printf("{bus_error=3134983648"
+			     ", error_warning=3134983649"
+			     ", error_passive=3134983650"
+			     ", bus_off=3134983651"
+			     ", arbitration_lost=3134983652"
+			     ", restarts=3134983653}"));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_SLVAE_KIND */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0,
+			     IFLA_INFO_SLAVE_KIND, "IFLA_INFO_SLAVE_KIND",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\253\\254\\333\\315\"..."));
+
+
+	/* IFLA_INFO_KIND + IFLA_INFO_SLAVE_DATA */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0,
+			     IFLA_INFO_SLAVE_DATA, "IFLA_INFO_SLAVE_DATA",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	/* IFLA_INFO_KIND + unknown type */
+	TEST_UNKNOWN_TUNNELS(fd, nlh0, 6, "0x6 /* IFLA_INFO_??? */",
+			     unknown_msg, sizeof(unknown_msg),
+			     {unsupported_tunnel_types COMMA
+			      unsupported_xstats_types COMMA
+			      unsupported_data_types COMMA
+			      NULL},
+			     printf("\"\\xab\\xac\\xdb\\xcd\""));
+
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests/nlattr_ifla_linkinfo.gen.test b/tests/nlattr_ifla_linkinfo.gen.test
new file mode 100755
index 0000000..816ba99
--- /dev/null
+++ b/tests/nlattr_ifla_linkinfo.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_linkinfo +netlink_sock_diag.test ); do not edit.
+set -- 
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests/nlattr_ifla_port.c b/tests/nlattr_ifla_port.c
index 61e90fe..e6cb6a4 100644
--- a/tests/nlattr_ifla_port.c
+++ b/tests/nlattr_ifla_port.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,50 +37,15 @@
 #endif
 #include <linux/rtnetlink.h>
 
-#ifndef IFLA_PORT_SELF
-# define IFLA_PORT_SELF 25
+#if !HAVE_DECL_IFLA_PORT_SELF
+enum { 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));
-}
+#define IFLA_ATTR IFLA_PORT_SELF
+#include "nlattr_ifla.h"
 
 int
 main(void)
@@ -88,7 +53,7 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 2 * NLA_HDRLEN + 8);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_ifla_xdp.c b/tests/nlattr_ifla_xdp.c
index cca5219..93149fa 100644
--- a/tests/nlattr_ifla_xdp.c
+++ b/tests/nlattr_ifla_xdp.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,63 +37,29 @@
 #endif
 #include <linux/rtnetlink.h>
 
-#ifndef IFLA_XDP
-# define IFLA_XDP 43
+#if !HAVE_DECL_IFLA_XDP
+enum { 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));
-}
+#define IFLA_ATTR IFLA_XDP
+#include "nlattr_ifla.h"
 
 int
 main(void)
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	const int32_t num = 0xabacdbcd;
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(num));
 
 	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,
diff --git a/tests/nlattr_inet_diag_msg.c b/tests/nlattr_inet_diag_msg.c
index ccc62ae..5984ee2 100644
--- a/tests/nlattr_inet_diag_msg.c
+++ b/tests/nlattr_inet_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,6 +37,18 @@
 #include <linux/inet_diag.h>
 #include <linux/sock_diag.h>
 
+static const char * const sk_meminfo_strs[] = {
+	"SK_MEMINFO_RMEM_ALLOC",
+	"SK_MEMINFO_RCVBUF",
+	"SK_MEMINFO_WMEM_ALLOC",
+	"SK_MEMINFO_SNDBUF",
+	"SK_MEMINFO_FWD_ALLOC",
+	"SK_MEMINFO_WMEM_QUEUED",
+	"SK_MEMINFO_OPTMEM",
+	"SK_MEMINFO_BACKLOG",
+	"SK_MEMINFO_DROPS",
+};
+
 static const char address[] = "10.11.12.13";
 
 static void
@@ -77,9 +89,14 @@
 }
 
 static void
-print_uint(const unsigned int *p)
+print_uint(const unsigned int *p, size_t i)
 {
-	printf("%u", *p);
+	if (i >= ARRAY_SIZE(sk_meminfo_strs))
+		printf("[%zu /* SK_MEMINFO_??? */", i);
+	else
+		printf("[%s", sk_meminfo_strs[i]);
+
+	printf("] = %u", *p);
 }
 
 int
@@ -87,19 +104,46 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
-	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	const unsigned int hdrlen = sizeof(struct inet_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 inet_diag_meminfo minfo = {
 		.idiag_rmem = 0xfadcacdb,
 		.idiag_wmem = 0xbdabcada,
 		.idiag_fmem = 0xbadbfafb,
 		.idiag_tmem = 0xfdacdadf
 	};
+	static const struct tcpvegas_info vegas = {
+		.tcpv_enabled = 0xfadcacdb,
+		.tcpv_rttcnt = 0xbdabcada,
+		.tcpv_rtt = 0xbadbfafb,
+		.tcpv_minrtt = 0xfdacdadf
+	};
+	static const struct tcp_dctcp_info dctcp = {
+		.dctcp_enabled = 0xfdac,
+		.dctcp_ce_state = 0xfadc,
+		.dctcp_alpha = 0xbdabcada,
+		.dctcp_ab_ecn = 0xbadbfafb,
+		.dctcp_ab_tot = 0xfdacdadf
+	};
+	static const struct tcp_bbr_info bbr = {
+		.bbr_bw_lo = 0xfdacdadf,
+		.bbr_bw_hi = 0xfadcacdb,
+		.bbr_min_rtt = 0xbdabcada,
+		.bbr_pacing_gain = 0xbadbfafb,
+		.bbr_cwnd_gain = 0xfdacdadf
+	};
+	static const uint32_t mem[] = { 0xaffacbad, 0xffadbcab };
+	static uint32_t bigmem[SK_MEMINFO_VARS + 1];
+	static const uint32_t mark = 0xabdfadca;
+	static const uint8_t shutdown = 0xcd;
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct inet_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN +
+					 MAX(sizeof(bigmem), DEFAULT_STRLEN));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_MEMINFO, pattern, minfo,
@@ -109,12 +153,6 @@
 			   PRINT_FIELD_U(", ", minfo, idiag_tmem);
 			   printf("}"));
 
-	static const struct tcpvegas_info vegas = {
-		.tcpv_enabled = 0xfadcacdb,
-		.tcpv_rttcnt = 0xbdabcada,
-		.tcpv_rtt = 0xbadbfafb,
-		.tcpv_minrtt = 0xfdacdadf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_VEGASINFO, pattern, vegas,
@@ -125,13 +163,6 @@
 			   printf("}"));
 
 
-	static const struct tcp_dctcp_info dctcp = {
-		.dctcp_enabled = 0xfdac,
-		.dctcp_ce_state = 0xfadc,
-		.dctcp_alpha = 0xbdabcada,
-		.dctcp_ab_ecn = 0xbadbfafb,
-		.dctcp_ab_tot = 0xfdacdadf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_DCTCPINFO, pattern, dctcp,
@@ -142,13 +173,6 @@
 			   PRINT_FIELD_U(", ", dctcp, dctcp_ab_tot);
 			   printf("}"));
 
-	static const struct tcp_bbr_info bbr = {
-		.bbr_bw_lo = 0xfdacdadf,
-		.bbr_bw_hi = 0xfadcacdb,
-		.bbr_min_rtt = 0xbdabcada,
-		.bbr_pacing_gain = 0xbadbfafb,
-		.bbr_cwnd_gain = 0xfdacdadf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_BBRINFO, pattern, bbr,
@@ -159,24 +183,16 @@
 			   PRINT_FIELD_U(", ", bbr, bbr_cwnd_gain);
 			   printf("}"));
 
-	static const uint32_t mem[] = { 0xaffacbad, 0xffadbcab };
 	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
 			  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(", ...]"));
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_inet_diag_msg, print_inet_diag_msg,
+			  INET_DIAG_SKMEMINFO, pattern, bigmem, print_uint);
 
-	static const uint32_t mark = 0xabdfadca;
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_inet_diag_msg, print_inet_diag_msg,
 			   INET_DIAG_MARK, pattern, mark,
@@ -187,7 +203,6 @@
 			   INET_DIAG_CLASS_ID, pattern, mark,
 			   printf("%u", mark));
 
-	static const uint8_t shutdown = 0xcd;
 	TEST_NLATTR(fd, nlh0, hdrlen,
 		    init_inet_diag_msg, print_inet_diag_msg, INET_DIAG_SHUTDOWN,
 		    sizeof(shutdown), &shutdown, sizeof(shutdown),
diff --git a/tests/nlattr_inet_diag_req_compat.c b/tests/nlattr_inet_diag_req_compat.c
index b0b2171..52fd53f 100644
--- a/tests/nlattr_inet_diag_req_compat.c
+++ b/tests/nlattr_inet_diag_req_compat.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -86,7 +86,7 @@
 
 	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
 	const unsigned int hdrlen = sizeof(struct inet_diag_req);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_inet_diag_req_v2.c b/tests/nlattr_inet_diag_req_v2.c
index 1e09abe..cf19c60 100644
--- a/tests/nlattr_inet_diag_req_v2.c
+++ b/tests/nlattr_inet_diag_req_v2.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -407,7 +407,10 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN +
+			sizeof(struct inet_diag_bc_op) +
+				sizeof(struct inet_diag_hostcond) +
+				sizeof(struct in6_addr) + DEFAULT_STRLEN);
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
 
 	test_inet_diag_bc_op(fd);
diff --git a/tests/nlattr_mdba_mdb_entry.c b/tests/nlattr_mdba_mdb_entry.c
index 124fe1d..61bded2 100644
--- a/tests/nlattr_mdba_mdb_entry.c
+++ b/tests/nlattr_mdba_mdb_entry.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,12 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4
+# ifdef HAVE_STRUCT_BR_MDB_ENTRY
+			- 4 + NLA_HDRLEN * 2 + sizeof(struct nlattr)
+			+ sizeof(struct br_mdb_entry)
+# endif
+			);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_mdba_router_port.c b/tests/nlattr_mdba_router_port.c
index af908cd..a6621ca 100644
--- a/tests/nlattr_mdba_router_port.c
+++ b/tests/nlattr_mdba_router_port.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -87,25 +87,27 @@
 {
 	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 ifindex = ifindex_lo();
-	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
-				  init_br_port_msg, print_br_port_msg,
-				  MDBA_ROUTER_PORT, pattern, ifindex,
-				  printf(IFINDEX_LO_STR));
-
 	const uint8_t type = MDB_RTR_TYPE_DISABLED;
 	static const struct nlattr nla = {
 		.nla_len = NLA_HDRLEN + sizeof(type),
 		.nla_type = MDBA_ROUTER_PATTR_TYPE
 	};
 	char buf[NLMSG_ALIGN(ifindex) + NLA_HDRLEN + sizeof(type)];
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(buf));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_br_port_msg, print_br_port_msg,
+				  MDBA_ROUTER_PORT, pattern, ifindex,
+				  printf(IFINDEX_LO_STR));
+
 	memcpy(buf, &ifindex, sizeof(ifindex));
 	memcpy(buf + NLMSG_ALIGN(ifindex), &nla, sizeof(nla));
 	memcpy(buf + NLMSG_ALIGN(ifindex) + NLA_HDRLEN, &type, sizeof(type));
diff --git a/tests/nlattr_ndmsg.c b/tests/nlattr_ndmsg.c
index 8538a82..aa28a57 100644
--- a/tests/nlattr_ndmsg.c
+++ b/tests/nlattr_ndmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -77,7 +77,8 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ndmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(struct nda_cacheinfo));
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_ndtmsg.c b/tests/nlattr_ndtmsg.c
index d3f1bdb..d120059 100644
--- a/tests/nlattr_ndtmsg.c
+++ b/tests/nlattr_ndtmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -68,7 +68,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct ndtmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 11 * 8);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_netconfmsg.c b/tests/nlattr_netconfmsg.c
index 6866adc..f5f5993 100644
--- a/tests/nlattr_netconfmsg.c
+++ b/tests/nlattr_netconfmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,7 +66,7 @@
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 
 	const unsigned int hdrlen = sizeof(struct netconfmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_netlink_diag_msg.c b/tests/nlattr_netlink_diag_msg.c
index 76a2d19..b598899 100644
--- a/tests/nlattr_netlink_diag_msg.c
+++ b/tests/nlattr_netlink_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,7 +66,7 @@
 }
 
 static void
-print_xlong(const unsigned long *p)
+print_xlong(const unsigned long *p, size_t i)
 {
 	printf("%#lx", *p);
 }
@@ -76,27 +76,32 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
-	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	const unsigned int hdrlen = sizeof(struct netlink_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 unsigned long groups[] = {
 		(unsigned long) 0xdeadbeefbadc0dedULL,
 		(unsigned long) 0xdeadbeefbadc0dedULL
 	};
-	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
-			  init_netlink_diag_msg, print_netlink_diag_msg,
-			  NETLINK_DIAG_GROUPS, pattern, groups, print_xlong);
-
 	static const struct netlink_diag_ring ndr = {
 		.ndr_block_size = 0xfabfabdc,
 		.ndr_block_nr = 0xabcdabda,
 		.ndr_frame_size = 0xcbadbafa,
 		.ndr_frame_nr = 0xdbcafadb
 	};
+	static const uint32_t flags =
+		NDIAG_FLAG_CB_RUNNING | NDIAG_FLAG_PKTINFO;
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct netlink_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN +
+					 MAX(sizeof(groups), sizeof(ndr)));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_netlink_diag_msg, print_netlink_diag_msg,
+			  NETLINK_DIAG_GROUPS, pattern, groups, print_xlong);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_netlink_diag_msg, print_netlink_diag_msg,
 			   NETLINK_DIAG_RX_RING, pattern, ndr,
@@ -106,8 +111,6 @@
 			   PRINT_FIELD_U(", ", ndr, ndr_frame_nr);
 			   printf("}"));
 
-	static const uint32_t flags =
-		NDIAG_FLAG_CB_RUNNING | NDIAG_FLAG_PKTINFO;
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_netlink_diag_msg, print_netlink_diag_msg,
 			   NETLINK_DIAG_FLAGS, pattern, flags,
diff --git a/tests/nlattr_nlmsgerr.c b/tests/nlattr_nlmsgerr.c
index 837283c..073fde2 100644
--- a/tests/nlattr_nlmsgerr.c
+++ b/tests/nlattr_nlmsgerr.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -69,11 +69,13 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
+	static const uint8_t cookie[] = { 0xab, 0xfe };
+
 	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
 	const unsigned int hdrlen = sizeof(struct nlmsgerr);
-	void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+			NLA_HDRLEN + sizeof(cookie));
 
-	static const uint8_t cookie[] = { 0xab, 0xfe };
 	TEST_NLATTR(fd, nlh0, hdrlen,
 		    init_nlmsgerr, print_nlmsgerr,
 		    NLMSGERR_ATTR_COOKIE,
diff --git a/tests/nlattr_packet_diag_msg.c b/tests/nlattr_packet_diag_msg.c
index 4211e20..016d052 100644
--- a/tests/nlattr_packet_diag_msg.c
+++ b/tests/nlattr_packet_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,7 +67,7 @@
 }
 
 static void
-print_packet_diag_mclist(const struct packet_diag_mclist *const dml)
+print_packet_diag_mclist(const struct packet_diag_mclist *const dml, size_t i)
 {
 	printf("{pdmc_index=" IFINDEX_LO_STR);
 	PRINT_FIELD_U(", ", *dml, pdmc_count);
@@ -84,7 +84,7 @@
 };
 
 static void
-print_sock_filter(const struct sock_filter *const f)
+print_sock_filter(const struct sock_filter *const f, size_t i)
 {
 	if (f == filter)
 		printf("BPF_STMT(BPF_LD|BPF_B|BPF_ABS"
@@ -98,13 +98,6 @@
 {
 	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,
@@ -113,16 +106,6 @@
 		.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(),
@@ -139,11 +122,6 @@
 			.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,
@@ -153,6 +131,30 @@
 		.pdr_sizeof_priv = 0xfeadeacd,
 		.pdr_features = 0xadebadea
 	};
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct packet_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN + sizeof(dml));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	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}"));
+
+	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+			  init_packet_diag_msg, print_packet_diag_msg,
+			  PACKET_DIAG_MCLIST, pattern, dml,
+			  print_packet_diag_mclist);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_packet_diag_msg, print_packet_diag_msg,
 			   PACKET_DIAG_RX_RING, pattern, pdr,
diff --git a/tests/nlattr_rtgenmsg.c b/tests/nlattr_rtgenmsg.c
index ceb061d..bac21ef 100644
--- a/tests/nlattr_rtgenmsg.c
+++ b/tests/nlattr_rtgenmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,13 +66,14 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct rtgenmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(nla_type_str));
 
 	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,
diff --git a/tests/nlattr_rtmsg.c b/tests/nlattr_rtmsg.c
index 5f29f0c..db02929 100644
--- a/tests/nlattr_rtmsg.c
+++ b/tests/nlattr_rtmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -81,13 +81,14 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct rtmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(nla_type_str));
 
 	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,
diff --git a/tests/nlattr_smc_diag_msg.c b/tests/nlattr_smc_diag_msg.c
index a06ad62..2e65ebd 100644
--- a/tests/nlattr_smc_diag_msg.c
+++ b/tests/nlattr_smc_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -97,13 +97,6 @@
 {
 	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,
@@ -149,6 +142,25 @@
 			.count = 0xcdedbad7
 		}
 	};
+	static const struct smc_diag_lgrinfo linfo = {
+		.lnk[0] = {
+			.link_id = 0xaf,
+			.ibport = 0xfa,
+			.ibname = "123",
+			.gid = "456",
+			.peer_gid = "789"
+		},
+		.role = SMC_CLNT
+	};
+
+	int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct smc_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN +
+					 MAX(sizeof(cinfo), sizeof(linfo)));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
 
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_smc_diag_msg, print_smc_diag_msg,
@@ -170,16 +182,6 @@
 			   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,
diff --git a/tests/nlattr_tc_stats.c b/tests/nlattr_tc_stats.c
index dd76cc7..8003ed3 100644
--- a/tests/nlattr_tc_stats.c
+++ b/tests/nlattr_tc_stats.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -77,7 +77,7 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 8 * 5);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_tca_stab.c b/tests/nlattr_tca_stab.c
index de6d356..9889050 100644
--- a/tests/nlattr_tca_stab.c
+++ b/tests/nlattr_tca_stab.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,8 +36,8 @@
 #ifndef TCA_STAB
 # define TCA_STAB 8
 #endif
-#ifndef TCA_STAB_DATA
-# define TCA_STAB_DATA 2
+#if !HAVE_DECL_TCA_STAB_DATA
+enum { TCA_STAB_DATA = 2 };
 #endif
 
 const unsigned int hdrlen = sizeof(struct tcmsg);
@@ -76,7 +76,7 @@
 }
 
 static void
-print_uint16(const uint16_t *p)
+print_uint16(const uint16_t *p, size_t idx)
 {
 	printf("%u", *p);
 }
@@ -87,7 +87,11 @@
 	skip_if_unavailable("/proc/self/fd/");
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4
+#ifdef HAVE_STRUCT_TC_SIZESPEC
+			- 4 + sizeof(struct tc_sizespec)
+#endif
+			);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_tcamsg.c b/tests/nlattr_tcamsg.c
index 7f61153..43715d2 100644
--- a/tests/nlattr_tcamsg.c
+++ b/tests/nlattr_tcamsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -62,7 +62,7 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct tcamsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), NLA_HDRLEN + 4);
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_tcmsg.c b/tests/nlattr_tcmsg.c
index 32ce479..da88a45 100644
--- a/tests/nlattr_tcmsg.c
+++ b/tests/nlattr_tcmsg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -68,7 +68,8 @@
 
 	const int fd = create_nl_socket(NETLINK_ROUTE);
 	const unsigned int hdrlen = sizeof(struct tcmsg);
-	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+				   NLA_HDRLEN + sizeof(struct tc_stats));
 
 	static char pattern[4096];
 	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
diff --git a/tests/nlattr_unix_diag_msg.c b/tests/nlattr_unix_diag_msg.c
index 2295404..180b8cd 100644
--- a/tests/nlattr_unix_diag_msg.c
+++ b/tests/nlattr_unix_diag_msg.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -65,7 +65,7 @@
 }
 
 static void
-print_uint(const unsigned int *p)
+print_uint(const unsigned int *p, size_t i)
 {
 	printf("%u", *p);
 }
@@ -75,17 +75,24 @@
 {
 	skip_if_unavailable("/proc/self/fd/");
 
-	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
-	const unsigned int hdrlen = sizeof(struct unix_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 unix_diag_vfs uv = {
 		.udiag_vfs_dev = 0xabcddafa,
 		.udiag_vfs_ino = 0xbafabcda
 	};
+	static const struct unix_diag_rqlen rql = {
+		.udiag_rqueue = 0xfabdcdad,
+		.udiag_wqueue = 0xbacdadcf
+	};
+	static const uint32_t inode[] = { 0xadbcadbc, 0xfabdcdac };
+
+	const int fd = create_nl_socket(NETLINK_SOCK_DIAG);
+	const unsigned int hdrlen = sizeof(struct unix_diag_msg);
+	void *const nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen),
+					 NLA_HDRLEN + sizeof(inode));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_unix_diag_msg, print_unix_diag_msg,
 			   UNIX_DIAG_VFS, pattern, uv,
@@ -95,10 +102,6 @@
 			   PRINT_FIELD_U(", ", uv, udiag_vfs_ino);
 			   printf("}"));
 
-	static const struct unix_diag_rqlen rql = {
-		.udiag_rqueue = 0xfabdcdad,
-		.udiag_wqueue = 0xbacdadcf
-	};
 	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
 			   init_unix_diag_msg, print_unix_diag_msg,
 			   UNIX_DIAG_RQLEN, pattern, rql,
@@ -106,7 +109,6 @@
 			   PRINT_FIELD_U(", ", rql, udiag_wqueue);
 			   printf("}"));
 
-	static const uint32_t inode[] = { 0xadbcadbc, 0xfabdcdac };
 	TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
 			  init_unix_diag_msg, print_unix_diag_msg,
 			  UNIX_DIAG_ICONS, pattern, inode, print_uint);
diff --git a/tests/nsyscalls.c b/tests/nsyscalls.c
index 9f74867..681fb31 100644
--- a/tests/nsyscalls.c
+++ b/tests/nsyscalls.c
@@ -86,14 +86,14 @@
 	       a[0], a[1], a[2], a[3], a[4], a[5], rc);
 #else
 	printf("syscall_%#lx(%#llx, %#llx, %#llx, %#llx, %#llx, %#llx)"
-	       " = %ld (errno %d)\n", nr | SYSCALL_BIT,
+	       " = %ld ENOSYS (%m)\n", nr | SYSCALL_BIT,
 	       (unsigned long long) a[0],
 	       (unsigned long long) a[1],
 	       (unsigned long long) a[2],
 	       (unsigned long long) a[3],
 	       (unsigned long long) a[4],
 	       (unsigned long long) a[5],
-	       rc, errno);
+	       rc);
 #endif
 }
 
diff --git a/tests/old_mmap-Xabbrev.c b/tests/old_mmap-Xabbrev.c
new file mode 100644
index 0000000..033503c
--- /dev/null
+++ b/tests/old_mmap-Xabbrev.c
@@ -0,0 +1 @@
+#include "old_mmap.c"
diff --git a/tests/old_mmap-Xabbrev.gen.test b/tests/old_mmap-Xabbrev.gen.test
new file mode 100755
index 0000000..0ee5608
--- /dev/null
+++ b/tests/old_mmap-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-Xabbrev -a11 -e trace=mmap -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -Xabbrev
diff --git a/tests/old_mmap-Xraw.c b/tests/old_mmap-Xraw.c
new file mode 100644
index 0000000..06de40b
--- /dev/null
+++ b/tests/old_mmap-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "old_mmap.c"
diff --git a/tests/old_mmap-Xraw.gen.test b/tests/old_mmap-Xraw.gen.test
new file mode 100755
index 0000000..6d7d3cf
--- /dev/null
+++ b/tests/old_mmap-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-Xraw -a11 -e trace=mmap -Xraw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -Xraw
diff --git a/tests/old_mmap-Xverbose.c b/tests/old_mmap-Xverbose.c
new file mode 100644
index 0000000..b141fec
--- /dev/null
+++ b/tests/old_mmap-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "old_mmap.c"
diff --git a/tests/old_mmap-Xverbose.gen.test b/tests/old_mmap-Xverbose.gen.test
new file mode 100755
index 0000000..6534a93
--- /dev/null
+++ b/tests/old_mmap-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-Xverbose -a11 -e trace=mmap -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -Xverbose
diff --git a/tests/old_mmap.c b/tests/old_mmap.c
index 35ec428..07d572c 100644
--- a/tests/old_mmap.c
+++ b/tests/old_mmap.c
@@ -79,17 +79,41 @@
 	void *args = tail_memdup(args1_c, sizeof(args1_c));
 
 	rc = syscall(__NR_mmap, args);
+# if XLAT_RAW
+	printf("mmap(%#lx, %lu, %#x, %#x|%#x, %d, %#lx) = %ld %s (%m)\n",
+	       args1_c[0], args1_c[1], PROT_READ|PROT_EXEC, MAP_FILE, MAP_FIXED,
+	       (int) args1_c[4], args1_c[5], rc, errno2name());
+# elif XLAT_VERBOSE
+	printf("mmap(%#lx, %lu, %#x /* PROT_READ|PROT_EXEC */"
+	       ", %#x /* MAP_FILE */|%#x /* MAP_FIXED */"
+	       ", %d, %#lx) = %ld %s (%m)\n",
+	       args1_c[0], args1_c[1], PROT_READ|PROT_EXEC, MAP_FILE, MAP_FIXED,
+	       (int) args1_c[4], args1_c[5], rc, errno2name());
+# else
 	printf("mmap(%#lx, %lu, PROT_READ|PROT_EXEC, MAP_FILE|MAP_FIXED"
 	       ", %d, %#lx) = %ld %s (%m)\n",
 	       args1_c[0], args1_c[1], (int) args1_c[4], args1_c[5],
 	       rc, errno2name());
+# endif
 
 	memcpy(args, args2_c, sizeof(args2_c));
 	rc = syscall(__NR_mmap, args);
 # ifndef PATH_TRACING
+#  if XLAT_RAW
+	printf("mmap(NULL, %lu, %#x, %#x|%#x, %d, %#lx) = %#lx\n",
+	       args2_c[1], PROT_READ|PROT_WRITE, MAP_PRIVATE, MAP_ANONYMOUS,
+	       (int) args2_c[4], args2_c[5], rc);
+#  elif XLAT_VERBOSE
+	printf("mmap(NULL, %lu, %#x /* PROT_READ|PROT_WRITE */"
+	       ", %#x /* MAP_PRIVATE */|%#x /* MAP_ANONYMOUS */"
+	       ", %d, %#lx) = %#lx\n",
+	       args2_c[1], PROT_READ|PROT_WRITE, MAP_PRIVATE, MAP_ANONYMOUS,
+	       (int) args2_c[4], args2_c[5], rc);
+#  else
 	printf("mmap(NULL, %lu, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS"
 	       ", %d, %#lx) = %#lx\n",
 	       args2_c[1], (int) args2_c[4], args2_c[5], rc);
+#  endif
 # endif
 
 	void *addr = (void *) rc;
diff --git a/tests/opipe.test b/tests/opipe.test
index f622045..db449bb 100755
--- a/tests/opipe.test
+++ b/tests/opipe.test
@@ -5,7 +5,7 @@
 . "${srcdir=.}/init.sh"
 
 check_prog grep
-run_prog grep chdir $srcdir/umovestr.expected > "$EXP"
+grep chdir $srcdir/umovestr.expected > "$EXP"
 run_prog ../umovestr
 
 $STRACE -o "|cat > $LOG && $SLEEP_A_BIT && grep chdir < $LOG > $OUT" -e chdir $args ||
diff --git a/tests/options-syntax.test b/tests/options-syntax.test
index af7002b..1a290d0 100755
--- a/tests/options-syntax.test
+++ b/tests/options-syntax.test
@@ -56,6 +56,40 @@
 check_h "invalid -s argument: '-42'" -s -42
 check_h "invalid -s argument: '1073741824'" -s 1073741824
 check_h "invalid -I argument: '5'" -I 5
+check_h "invalid -X argument: 'test'" -Xtest
+check_h "invalid -X argument: 'a'" -Xa
+check_h "invalid -X argument: 'abbreviated'" -X abbreviated
+
+check_h "incorrect personality designator '' in qualification 'getcwd@'" -e trace=getcwd@
+check_h "incorrect personality designator '42' in qualification 'getcwd@42'" -e trace=getcwd@42
+check_h "incorrect personality designator '42' in qualification 'getcwd@42'" -e trace=gettid,getcwd@42
+check_h "incorrect personality designator '42' in qualification '23@42'" -e trace=23@42,123
+
+check_e "invalid system call '/getcwd@ohmy'" -e trace=/getcwd@ohmy
+
+case "$STRACE_NATIVE_ARCH" in
+x86_64)
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@64
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@32
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@x32
+	;;
+x32)
+	check_h "incorrect personality designator '64' in qualification 'getcwd@64'" -e trace=getcwd@64
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@32
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@x32
+	;;
+aarch64|powerpc64|riscv|s390x|sparc64|tile)
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@64
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@32
+	check_h "incorrect personality designator 'x32' in qualification 'getcwd@x32'" -e trace=getcwd@x32
+	;;
+*)
+	pers="$((SIZEOF_LONG * 8))"
+	inv_pers="$((96 - pers))"
+	check_h "must have PROG [ARGS] or -p PID" -e trace=getcwd@"$pers"
+	check_h "incorrect personality designator '$inv_pers' in qualification 'getcwd@$inv_pers'" -e trace=getcwd@"$inv_pers"
+	check_h "incorrect personality designator 'x32' in qualification 'getcwd@x32'" -e trace=getcwd@x32
+esac
 
 ../zeroargc "$STRACE_EXE" /bin/true 2> "$LOG" &&
 	dump_log_and_fail_with \
diff --git a/tests/personality-Xabbrev.c b/tests/personality-Xabbrev.c
new file mode 100644
index 0000000..2e993dc
--- /dev/null
+++ b/tests/personality-Xabbrev.c
@@ -0,0 +1 @@
+#include "personality.c"
diff --git a/tests/personality-Xabbrev.gen.test b/tests/personality-Xabbrev.gen.test
new file mode 100755
index 0000000..df93e6c
--- /dev/null
+++ b/tests/personality-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (personality-Xabbrev +personality.test -Xabbrev); do not edit.
+set -- -Xabbrev
+. "${srcdir=.}/personality.test"
diff --git a/tests/personality-Xraw.c b/tests/personality-Xraw.c
new file mode 100644
index 0000000..59702f8
--- /dev/null
+++ b/tests/personality-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "personality.c"
diff --git a/tests/personality-Xraw.gen.test b/tests/personality-Xraw.gen.test
new file mode 100755
index 0000000..559f0f3
--- /dev/null
+++ b/tests/personality-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (personality-Xraw +personality.test -a15 -Xraw); do not edit.
+set -- -a15 -Xraw
+. "${srcdir=.}/personality.test"
diff --git a/tests/personality-Xverbose.c b/tests/personality-Xverbose.c
new file mode 100644
index 0000000..545ebe7
--- /dev/null
+++ b/tests/personality-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "personality.c"
diff --git a/tests/personality-Xverbose.gen.test b/tests/personality-Xverbose.gen.test
new file mode 100755
index 0000000..b6ce209
--- /dev/null
+++ b/tests/personality-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (personality-Xverbose +personality.test -Xverbose); do not edit.
+set -- -Xverbose
+. "${srcdir=.}/personality.test"
diff --git a/tests/personality.c b/tests/personality.c
index 7a279a1..5d84807 100644
--- a/tests/personality.c
+++ b/tests/personality.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,51 +29,76 @@
 #include <stdio.h>
 #include <sys/personality.h>
 
+#if XLAT_RAW
+# define linux_type_str	"0"
+# define good_type_str	"0x6"
+# define bad_type_str	"0x1f"
+# define good_flags_str	"0x7000000"
+# define bad_flags_str	"0x10000"
+# define good_bad_flags_str	"0x7010000"
+#elif XLAT_VERBOSE
+# define linux_type_str	"0 /\\* PER_LINUX \\*/"
+# define good_type_str	"0x6 /\\* PER_BSD \\*/"
+# define bad_type_str	"0x1f /\\* PER_\\?\\?\\? \\*/"
+# define good_flags_str	\
+	"0x7000000 /\\* SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS \\*/"
+# define bad_flags_str	"0x10000"
+# define good_bad_flags_str	\
+	"0x7010000 /\\* SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS" \
+		"\\|0x10000 \\*/"
+#else
+# define linux_type_str	"PER_LINUX"
+# define good_type_str	"PER_BSD"
+# define bad_type_str	"0x1f /\\* PER_\\?\\?\\? \\*/"
+# define good_flags_str	"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS"
+# define bad_flags_str	"0x10000"
+# define good_bad_flags_str \
+	"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\|0x10000"
+#endif
+
 int main(void)
 {
 	const unsigned int good_type = PER_BSD;
-	const char *good_type_str = "PER_BSD";
 
 	const unsigned int bad_type = 0x1f;
-	const char *bad_type_str = "0x1f /\\* PER_\\?\\?\\? \\*/";
 
 	const unsigned int good_flags =
 		SHORT_INODE | WHOLE_SECONDS | STICKY_TIMEOUTS;
-	const char *good_flags_str =
-		"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS";
 
 	const unsigned int bad_flags = 0x10000;
-	const char *bad_flags_str = "0x10000";
 
 	const unsigned int saved_pers = personality(0xffffffff);
 	printf("personality\\(0xffffffff\\) = %#x \\([^)]*\\)\n", saved_pers);
 
 	/* PER_LINUX */
 	personality(PER_LINUX);
-	printf("personality\\(PER_LINUX\\) = %#x \\([^)]*\\)\n", saved_pers);
+	printf("personality\\(%s\\) = %#x \\([^)]*\\)\n",
+	       linux_type_str, saved_pers);
 
 	personality(0xffffffff);
-	puts("personality\\(0xffffffff\\) = 0 \\(PER_LINUX\\)");
+	printf("personality\\(0xffffffff\\) = 0 \\(%s\\)\n", linux_type_str);
 
 	personality(good_flags);
-	printf("personality\\(PER_LINUX\\|%s\\) = 0 \\(PER_LINUX\\)\n",
-	       good_flags_str);
+	printf("personality\\(%s\\|%s\\) = 0 \\(%s\\)\n",
+	       linux_type_str, good_flags_str, linux_type_str);
 
 	personality(bad_flags);
-	printf("personality\\(PER_LINUX\\|%s\\)"
-	       " = %#x \\(PER_LINUX\\|%s\\)\n",
-	       bad_flags_str, good_flags, good_flags_str);
+	printf("personality\\(%s\\|%s\\)"
+	       " = %#x \\(%s\\|%s\\)\n",
+	       linux_type_str, bad_flags_str,
+	       good_flags, linux_type_str, good_flags_str);
 
 	personality(good_flags | bad_flags);
-	printf("personality\\(PER_LINUX\\|%s\\|%s\\)"
-	       " = %#x \\(PER_LINUX\\|%s\\)\n",
-	       good_flags_str, bad_flags_str, bad_flags, bad_flags_str);
+	printf("personality\\(%s\\|%s\\)"
+	       " = %#x \\(%s\\|%s\\)\n",
+	       linux_type_str, good_bad_flags_str,
+	       bad_flags, linux_type_str, bad_flags_str);
 
 	/* another valid type */
 	personality(good_type);
-	printf("personality\\(%s\\) = %#x \\(PER_LINUX\\|%s\\|%s\\)\n",
+	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\)\n",
 	       good_type_str, good_flags | bad_flags,
-	       good_flags_str, bad_flags_str);
+	       linux_type_str, good_bad_flags_str);
 
 	personality(good_type | good_flags);
 	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\)\n",
@@ -84,16 +110,16 @@
 	       good_type_str, good_flags_str);
 
 	personality(good_type | good_flags | bad_flags);
-	printf("personality\\(%s\\|%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
-	       good_type_str, good_flags_str, bad_flags_str,
+	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
+	       good_type_str, good_bad_flags_str,
 	       good_type | bad_flags,
 	       good_type_str, bad_flags_str);
 
 	/* invalid type */
 	personality(bad_type);
-	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\|%s\\)\n",
+	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\)\n",
 	       bad_type_str, good_type | good_flags | bad_flags,
-	       good_type_str, good_flags_str, bad_flags_str);
+	       good_type_str, good_bad_flags_str);
 
 	personality(bad_type | good_flags);
 	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\)\n",
@@ -105,14 +131,14 @@
 	       bad_type_str, good_flags_str);
 
 	personality(bad_type | good_flags | bad_flags);
-	printf("personality\\(%s\\|%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
-	       bad_type_str, good_flags_str, bad_flags_str,
+	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
+	       bad_type_str, good_bad_flags_str,
 	       bad_type | bad_flags, bad_type_str, bad_flags_str);
 
 	personality(saved_pers);
-	printf("personality\\([^)]*\\) = %#x \\(%s\\|%s\\|%s\\)\n",
+	printf("personality\\([^)]*\\) = %#x \\(%s\\|%s\\)\n",
 	       bad_type | good_flags | bad_flags,
-	       bad_type_str, good_flags_str, bad_flags_str);
+	       bad_type_str, good_bad_flags_str);
 
 	return 0;
 }
diff --git a/tests/personality.test b/tests/personality.test
index ab2faf4..d279bd1 100755
--- a/tests/personality.test
+++ b/tests/personality.test
@@ -5,5 +5,5 @@
 . "${srcdir=.}/init.sh"
 
 run_prog > /dev/null
-run_strace -a20 -epersonality $args > "$EXP"
+run_strace -a20 -epersonality "$@" $args > "$EXP"
 match_grep "$LOG" "$EXP"
diff --git a/tests/poll.c b/tests/poll.c
index c5930a3..9624bd3 100644
--- a/tests/poll.c
+++ b/tests/poll.c
@@ -95,7 +95,7 @@
 		if (i)
 			tprintf(", ");
 		if (i >= valid) {
-			tprintf("%p", &pfd[i]);
+			tprintf("... /* %p */", &pfd[i]);
 			break;
 		}
 		if (i >= abbrev) {
diff --git a/tests/prctl-spec-inject.c b/tests/prctl-spec-inject.c
new file mode 100644
index 0000000..593c3a6
--- /dev/null
+++ b/tests/prctl-spec-inject.c
@@ -0,0 +1,153 @@
+/*
+ * Check decoding of PR_SET_SPECULATION_CTRL and PR_GET_SPECULATION_CTRL
+ * prctl operations.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <asm/unistd.h>
+
+#ifdef __NR_prctl
+
+# include <stdio.h>
+# include <stdlib.h>
+# include <unistd.h>
+# include <linux/prctl.h>
+
+static long injected_val;
+
+long
+do_prctl(kernel_ulong_t cmd, kernel_ulong_t arg2, kernel_ulong_t arg3)
+{
+	long rc = syscall(__NR_prctl, cmd, arg2, arg3);
+
+	if (rc != injected_val)
+		error_msg_and_fail("Return value (%ld) differs from expected "
+				   "injected value (%ld)",
+				   rc, injected_val);
+
+	return rc;
+}
+
+int
+main(int argc, char **argv)
+{
+	static const kernel_ulong_t bogus_arg2 =
+		(kernel_ulong_t) 0xdeadfacebadc0dedULL;
+	static const kernel_ulong_t bogus_arg3 =
+		(kernel_ulong_t) 0xdecafeedbeefda7eULL;
+	static const struct {
+		long arg;
+		const char *str;
+	} get_strs[] = {
+		{ -1, "" },
+		{ 0, " (PR_SPEC_NOT_AFFECTED)" },
+		{ 1, " (PR_SPEC_PRCTL)" },
+		{ 3, " (PR_SPEC_PRCTL|PR_SPEC_ENABLE)" },
+		{ 8, " (PR_SPEC_FORCE_DISABLE)" },
+		{ 16, " (0x10)" },
+		{ 42, " (PR_SPEC_ENABLE|PR_SPEC_FORCE_DISABLE|0x20)" },
+	};
+	static const struct {
+		kernel_ulong_t arg;
+		const char *str;
+	} set_strs[] = {
+		{ 0, "0 /* PR_SPEC_??? */" },
+		{ 1, "0x1 /* PR_SPEC_??? */" },
+		{ 2, "PR_SPEC_ENABLE" },
+		{ 3, "0x3 /* PR_SPEC_??? */" },
+		{ 8, "PR_SPEC_FORCE_DISABLE" },
+		{ 16, "0x10 /* PR_SPEC_??? */" },
+		{ (kernel_ulong_t) 0xdecafeedbeefda7eULL, "0x"
+# if SIZEOF_KERNEL_LONG_T == 8
+			"decafeed"
+# endif
+			"beefda7e /* PR_SPEC_??? */" },
+	};
+
+	long rc;
+	const char *str = NULL;
+
+	if (argc < 2)
+		error_msg_and_fail("Usage: %s INJECTED_VAL", argv[0]);
+
+	injected_val = strtol(argv[1], NULL, 0);
+
+	/* PR_GET_SPECULATION_CTRL */
+	rc = do_prctl(52, 1, bogus_arg3);
+	printf("prctl(PR_GET_SPECULATION_CTRL, 0x1 /* PR_SPEC_??? */) "
+	       "= %s (INJECTED)\n", sprintrc(rc));
+
+	rc = do_prctl(52, bogus_arg2, bogus_arg3);
+	printf("prctl(PR_GET_SPECULATION_CTRL, %#llx /* PR_SPEC_??? */) "
+	       "= %s (INJECTED)\n",
+	       (unsigned long long) bogus_arg2, sprintrc(rc));
+
+	rc = do_prctl(52, 0, bogus_arg3);
+
+	for (unsigned i = 0; i < ARRAY_SIZE(get_strs); i++) {
+		if (get_strs[i].arg == rc) {
+			str = get_strs[i].str;
+			break;
+		}
+	}
+	if (!str)
+		error_msg_and_fail("Unknown return value: %ld", rc);
+
+	printf("prctl(PR_GET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS) "
+	       "= %s%s (INJECTED)\n", sprintrc(rc), str);
+
+
+	/* PR_SET_SPECULATION_CTRL*/
+	rc = do_prctl(53, 1, bogus_arg3);
+	printf("prctl(PR_SET_SPECULATION_CTRL, 0x1 /* PR_SPEC_??? */, %#llx) "
+	       "= %s (INJECTED)\n",
+	       (unsigned long long) bogus_arg3, sprintrc(rc));
+
+	rc = do_prctl(53, bogus_arg2, bogus_arg3);
+	printf("prctl(PR_SET_SPECULATION_CTRL, %#llx /* PR_SPEC_??? */, %#llx) "
+	       "= %s (INJECTED)\n",
+	       (unsigned long long) bogus_arg2,
+	       (unsigned long long) bogus_arg3,
+	       sprintrc(rc));
+
+	for (unsigned i = 0; i < ARRAY_SIZE(set_strs); i++) {
+		rc = do_prctl(53, 0, set_strs[i].arg);
+		printf("prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS"
+		       ", %s) = %s (INJECTED)\n",
+		       set_strs[i].str, sprintrc(rc));
+	}
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_prctl")
+
+#endif
diff --git a/tests/prctl-spec-inject.test b/tests/prctl-spec-inject.test
new file mode 100755
index 0000000..c8fbe97
--- /dev/null
+++ b/tests/prctl-spec-inject.test
@@ -0,0 +1,55 @@
+#!/bin/sh -efu
+#
+# Check decoding of PR_SET_SPECULATION_CTRL and PR_GET_SPECULATION_CTRL
+# prctl operations.
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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"
+
+fault_args='-a53 -e trace=prctl -e inject=prctl:'
+prog="../$NAME"
+
+test_run_rval()
+{
+	local run rval injexpr
+	run="$1"; shift
+	rval="$1"; shift
+	injexpr="$1"; shift
+
+	run_strace $fault_args$injexpr $prog $rval > "$EXP"
+	LC_ALL=C grep -Ev '^prctl\(PR_[GS]ET_([^S][^P][^E][^C]])' \
+		< "$LOG" > "$OUT"
+	match_diff "$OUT" "$EXP"
+}
+
+test_run_rval 0 -1 "error=ENOTTY"
+test_run_rval 1 0 "retval=0"
+test_run_rval 2 1 "retval=1"
+test_run_rval 3 3 "retval=3"
+test_run_rval 4 8 "retval=8"
+test_run_rval 5 16 "retval=16"
+test_run_rval 6 42 "retval=42"
diff --git a/tests/preadv-pwritev.c b/tests/preadv-pwritev.c
index 44ed23a..57a08ad 100644
--- a/tests/preadv-pwritev.c
+++ b/tests/preadv-pwritev.c
@@ -2,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,7 @@
 	tprintf("pwritev(1, [], 0, 0) = 0\n");
 
 	rc = pwritev(1, w_iov + ARRAY_SIZE(w_iov_) - 1, 2, 0);
-	tprintf("pwritev(1, [{iov_base=\"%s\", iov_len=%u}, %p], 2, 0)"
+	tprintf("pwritev(1, [{iov_base=\"%s\", iov_len=%u}, ... /* %p */], 2, 0)"
 		" = %ld %s (%m)\n",
 		w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_),
 		rc, errno2name());
diff --git a/tests/preadv2-pwritev2.c b/tests/preadv2-pwritev2.c
index 89f37dd..7874b7a 100644
--- a/tests/preadv2-pwritev2.c
+++ b/tests/preadv2-pwritev2.c
@@ -2,7 +2,7 @@
  * Check decoding of preadv2 and pwritev2 syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -104,7 +104,7 @@
 	tprintf("pwritev2(1, [], 0, 0, 0) = 0\n");
 
 	rc = pw(1, w_iov + ARRAY_SIZE(w_iov_) - 1, 2, 0);
-	tprintf("pwritev2(1, [{iov_base=\"%s\", iov_len=%u}, %p], 2, 0, 0)"
+	tprintf("pwritev2(1, [{iov_base=\"%s\", iov_len=%u}, ... /* %p */], 2, 0, 0)"
 		" = %ld %s (%m)\n",
 		w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_),
 		rc, errno2name());
diff --git a/tests/print_quoted_string.c b/tests/print_quoted_string.c
index 3ca5631..a58b69a 100644
--- a/tests/print_quoted_string.c
+++ b/tests/print_quoted_string.c
@@ -33,6 +33,18 @@
 	}
 }
 
+void
+print_quoted_stringn(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);
+		printf("...");
+	}
+}
+
 static void
 print_octal(unsigned char c, char next)
 {
diff --git a/tests/process_vm_readv_writev.c b/tests/process_vm_readv_writev.c
index 5ee801b..328dc9f 100644
--- a/tests/process_vm_readv_writev.c
+++ b/tests/process_vm_readv_writev.c
@@ -2,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -135,7 +135,7 @@
 	}
 
 	if (arg->addr_term)
-		printf(", %p", iov + arg->count);
+		printf(", ... /* %p */", iov + arg->count);
 
 	printf("]");
 }
diff --git a/tests/ptrace.c b/tests/ptrace.c
index 5c09fa3..2ca9ceb 100644
--- a/tests/ptrace.c
+++ b/tests/ptrace.c
@@ -60,10 +60,11 @@
 	printf("ptrace(PTRACE_PEEKSIGINFO, %u, NULL, %#lx) = %s\n",
 	       (unsigned) pid, bad_request, errstr);
 
-	struct {
+	struct psi {
 		unsigned long long off;
 		unsigned int flags, nr;
-	} *const psi = tail_alloc(sizeof(*psi));
+	};
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct psi, psi);
 
 	psi->off = 0xdeadbeeffacefeedULL;
 	psi->flags = 1;
@@ -179,7 +180,7 @@
 	const unsigned long pid =
 		(unsigned long) 0xdefaced00000000ULL | (unsigned) getpid();
 
-	uint64_t *filter_off = tail_alloc(sizeof(*filter_off));
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, filter_off);
 
 	const unsigned int sigset_size = get_sigset_size();
 
diff --git a/tests/pure_executables.am b/tests/pure_executables.am
index bbb3ad9..c65f4ca 100644
--- a/tests/pure_executables.am
+++ b/tests/pure_executables.am
@@ -8,9 +8,14 @@
   add_key \
   adjtimex \
   aio \
+  aio_pgetevents \
   alarm \
   bpf \
   bpf-v \
+  bpf-obj_get_info_by_fd \
+  bpf-obj_get_info_by_fd-v \
+  bpf-obj_get_info_by_fd-prog \
+  bpf-obj_get_info_by_fd-prog-v \
   brk \
   btrfs \
   caps \
@@ -43,6 +48,9 @@
   fallocate \
   fanotify_init \
   fanotify_mark \
+  fanotify_mark-Xabbrev \
+  fanotify_mark-Xraw \
+  fanotify_mark-Xverbose \
   fchdir \
   fchmod \
   fchmodat \
@@ -105,10 +113,13 @@
   ioctl_block \
   ioctl_dm \
   ioctl_evdev \
+  ioctl_inotify \
   ioctl_kvm_run \
   ioctl_loop \
   ioctl_mtd \
   ioctl_rtc \
+  ioctl_perf \
+  ioctl_ptp \
   ioctl_scsi \
   ioctl_sg_io_v3 \
   ioctl_sg_io_v4 \
@@ -121,15 +132,30 @@
   ip_mreq \
   ipc \
   ipc_msg \
+  ipc_msg-Xabbrev \
+  ipc_msg-Xraw \
+  ipc_msg-Xverbose \
   ipc_msgbuf \
+  ipc_msgbuf-Xabbrev \
+  ipc_msgbuf-Xraw \
+  ipc_msgbuf-Xverbose \
   ipc_sem \
+  ipc_sem-Xabbrev \
+  ipc_sem-Xraw \
+  ipc_sem-Xverbose \
   ipc_shm \
+  ipc_shm-Xabbrev \
+  ipc_shm-Xraw \
+  ipc_shm-Xverbose \
   kcmp \
   kcmp-y \
   kern_features \
   kexec_file_load \
   kexec_load \
   keyctl \
+  keyctl-Xabbrev \
+  keyctl-Xraw \
+  keyctl-Xverbose \
   kill \
   lchown \
   lchown32 \
@@ -154,11 +180,20 @@
   mlock2 \
   mlockall \
   mmap \
+  mmap-Xabbrev \
+  mmap-Xraw \
+  mmap-Xverbose \
   mmap64 \
+  mmap64-Xabbrev \
+  mmap64-Xraw \
+  mmap64-Xverbose \
   mmsg \
   mmsg_name \
   modify_ldt \
   mount \
+  mount-Xabbrev \
+  mount-Xraw \
+  mount-Xverbose \
   move_pages \
   mq \
   mq_sendrecv \
@@ -205,7 +240,9 @@
   nlattr_ifaddrlblmsg \
   nlattr_ifaddrmsg \
   nlattr_ifinfomsg \
+  nlattr_ifla_af_spec \
   nlattr_ifla_brport \
+  nlattr_ifla_linkinfo \
   nlattr_ifla_port \
   nlattr_ifla_xdp \
   nlattr_inet_diag_msg \
@@ -230,6 +267,9 @@
   old_mmap \
   old_mmap-P \
   old_mmap-v-none \
+  old_mmap-Xabbrev \
+  old_mmap-Xraw \
+  old_mmap-Xverbose \
   oldfstat \
   oldlstat \
   oldselect \
@@ -241,6 +281,9 @@
   pause \
   perf_event_open \
   personality \
+  personality-Xabbrev \
+  personality-Xraw \
+  personality-Xverbose \
   pipe \
   pipe2 \
   pkey_alloc \
@@ -357,7 +400,13 @@
   sigsuspend \
   so_linger \
   so_peercred \
+  so_peercred-Xabbrev \
+  so_peercred-Xraw \
+  so_peercred-Xverbose \
   sock_filter-v \
+  sock_filter-v-Xabbrev \
+  sock_filter-v-Xraw \
+  sock_filter-v-Xverbose \
   socketcall \
   sockopt-sol_netlink \
   splice \
diff --git a/tests/pure_executables.list b/tests/pure_executables.list
index d78bd4d..39565d0 100755
--- a/tests/pure_executables.list
+++ b/tests/pure_executables.list
@@ -7,9 +7,14 @@
 add_key
 adjtimex
 aio
+aio_pgetevents
 alarm
 bpf
 bpf-v
+bpf-obj_get_info_by_fd
+bpf-obj_get_info_by_fd-v
+bpf-obj_get_info_by_fd-prog
+bpf-obj_get_info_by_fd-prog-v
 brk
 btrfs
 caps
@@ -42,6 +47,9 @@
 fallocate
 fanotify_init
 fanotify_mark
+fanotify_mark-Xabbrev
+fanotify_mark-Xraw
+fanotify_mark-Xverbose
 fchdir
 fchmod
 fchmodat
@@ -104,10 +112,13 @@
 ioctl_block
 ioctl_dm
 ioctl_evdev
+ioctl_inotify
 ioctl_kvm_run
 ioctl_loop
 ioctl_mtd
 ioctl_rtc
+ioctl_perf
+ioctl_ptp
 ioctl_scsi
 ioctl_sg_io_v3
 ioctl_sg_io_v4
@@ -120,15 +131,30 @@
 ip_mreq
 ipc
 ipc_msg
+ipc_msg-Xabbrev
+ipc_msg-Xraw
+ipc_msg-Xverbose
 ipc_msgbuf
+ipc_msgbuf-Xabbrev
+ipc_msgbuf-Xraw
+ipc_msgbuf-Xverbose
 ipc_sem
+ipc_sem-Xabbrev
+ipc_sem-Xraw
+ipc_sem-Xverbose
 ipc_shm
+ipc_shm-Xabbrev
+ipc_shm-Xraw
+ipc_shm-Xverbose
 kcmp
 kcmp-y
 kern_features
 kexec_file_load
 kexec_load
 keyctl
+keyctl-Xabbrev
+keyctl-Xraw
+keyctl-Xverbose
 kill
 lchown
 lchown32
@@ -153,11 +179,20 @@
 mlock2
 mlockall
 mmap
+mmap-Xabbrev
+mmap-Xraw
+mmap-Xverbose
 mmap64
+mmap64-Xabbrev
+mmap64-Xraw
+mmap64-Xverbose
 mmsg
 mmsg_name
 modify_ldt
 mount
+mount-Xabbrev
+mount-Xraw
+mount-Xverbose
 move_pages
 mq
 mq_sendrecv
@@ -204,7 +239,9 @@
 nlattr_ifaddrlblmsg
 nlattr_ifaddrmsg
 nlattr_ifinfomsg
+nlattr_ifla_af_spec
 nlattr_ifla_brport
+nlattr_ifla_linkinfo
 nlattr_ifla_port
 nlattr_ifla_xdp
 nlattr_inet_diag_msg
@@ -229,6 +266,9 @@
 old_mmap
 old_mmap-P
 old_mmap-v-none
+old_mmap-Xabbrev
+old_mmap-Xraw
+old_mmap-Xverbose
 oldfstat
 oldlstat
 oldselect
@@ -240,6 +280,9 @@
 pause
 perf_event_open
 personality
+personality-Xabbrev
+personality-Xraw
+personality-Xverbose
 pipe
 pipe2
 pkey_alloc
@@ -356,7 +399,13 @@
 sigsuspend
 so_linger
 so_peercred
+so_peercred-Xabbrev
+so_peercred-Xraw
+so_peercred-Xverbose
 sock_filter-v
+sock_filter-v-Xabbrev
+sock_filter-v-Xraw
+sock_filter-v-Xverbose
 socketcall
 sockopt-sol_netlink
 splice
diff --git a/tests/pwritev.c b/tests/pwritev.c
index 58e5b41..3c2bdb6 100644
--- a/tests/pwritev.c
+++ b/tests/pwritev.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -65,7 +66,7 @@
 		if (i)
 			fputs(", ", stdout);
 		if (i == size) {
-			printf("%p", &iov[i]);
+			printf("... /* %p */", &iov[i]);
 			break;
 		}
 		if (i == LIM) {
diff --git a/tests/qual_fault-syntax.test b/tests/qual_fault-syntax.test
index 43ade76..7f7a515 100755
--- a/tests/qual_fault-syntax.test
+++ b/tests/qual_fault-syntax.test
@@ -86,6 +86,12 @@
 	   chdir:retval=0 \
 	   chdir:signal=1 \
 	   chdir:error=1:error=2 \
+	   chdir:syscall=invalid \
+	   chdir:syscall=chdir \
+	   chdir:syscall=%file \
+	   chdir:syscall=-42 \
+	   chdir:syscall=42 \
+	   chdir:syscall=gettid:syscall=gettid \
 	   ; do
 	$STRACE -e fault="$arg" true 2> "$LOG" &&
 		fail_with "$arg"
diff --git a/tests/qual_fault-syscall.test b/tests/qual_fault-syscall.test
new file mode 100755
index 0000000..cae97f5
--- /dev/null
+++ b/tests/qual_fault-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_fault
+. "${srcdir=.}/qual_fault.test"
diff --git a/tests/qual_fault.c b/tests/qual_fault.c
index 670d9fe..d5d78bc 100644
--- a/tests/qual_fault.c
+++ b/tests/qual_fault.c
@@ -77,8 +77,9 @@
 					    err, rc, errno);
 
 		if (is_raw)
-			tprintf("writev(%#x, %p, 0x1) = -1 (errno %d)"
-				" (INJECTED)\n", got_fd, &io, err);
+			tprintf("writev(%#x, %p, 0x1)"
+				" = -1 %s (%m) (INJECTED)\n",
+				got_fd, &io, errstr);
 		else
 			tprintf("writev(%d, [{iov_base=\"%s\", iov_len=%d}], 1)"
 				" = -1 %s (%m) (INJECTED)\n",
diff --git a/tests/qual_fault.test b/tests/qual_fault.test
index 12b0a85..e166ffd 100755
--- a/tests/qual_fault.test
+++ b/tests/qual_fault.test
@@ -1,9 +1,9 @@
-#!/bin/sh
+#!/bin/sh -efu
 #
 # Check that fault injection works properly.
 #
 # Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2016-2017 The strace developers.
+# Copyright (c) 2016-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -37,6 +37,9 @@
 
 N=100
 
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
 check_fault_injection()
 {
 	local trace fault err first step procs extra
@@ -79,7 +82,7 @@
 	outpid="$NAME.pid"
 
 	run_strace -a11 -ff -e trace=$trace \
-		"$@" -e fault=$fault$when$error $extra \
+		"$@" -e fault=$fault$when$error$suffix $extra \
 		../$NAME $raw "$err" "$first" "$step" $N \
 		"$procs" "$outexp" "$outgot" "$outout" "$outpid"
 
@@ -87,8 +90,8 @@
 	do
 		pid=$(cat "$outpid.$i")
 
-		match_diff "$outout.$i" "$LOG.$pid"
-		match_diff "$outexp.$i" "$outgot.$i"
+		match_diff "$LOG.$pid" "$outout.$i"
+		match_diff "$outgot.$i" "$outexp.$i"
 	done
 }
 
diff --git a/tests/qual_inject-error-signal-syscall.test b/tests/qual_inject-error-signal-syscall.test
new file mode 100755
index 0000000..0adb35d
--- /dev/null
+++ b/tests/qual_inject-error-signal-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_inject-error-signal
+. "${srcdir=.}/qual_inject-error-signal.test"
diff --git a/tests/qual_inject-error-signal.test b/tests/qual_inject-error-signal.test
index 1fe4612..93d8321 100755
--- a/tests/qual_inject-error-signal.test
+++ b/tests/qual_inject-error-signal.test
@@ -3,6 +3,10 @@
 # Check fault injection along with signal injection.
 . "${srcdir=.}/scno_tampering.sh"
 
-run_strace -a12 -echdir,exit_group -einject=chdir:error=ENOENT:signal=USR1 \
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
+run_strace -a12 -echdir,exit_group \
+	-einject=chdir:error=ENOENT:signal=USR1"$suffix" \
 	"../$NAME"
 match_diff
diff --git a/tests/qual_inject-retval-syscall.test b/tests/qual_inject-retval-syscall.test
new file mode 100755
index 0000000..fca9354
--- /dev/null
+++ b/tests/qual_inject-retval-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_inject-retval
+. "${srcdir=.}/qual_inject-retval.test"
diff --git a/tests/qual_inject-retval.test b/tests/qual_inject-retval.test
index 5a4efd1..239ab0a 100755
--- a/tests/qual_inject-retval.test
+++ b/tests/qual_inject-retval.test
@@ -4,6 +4,9 @@
 
 . "${srcdir=.}/scno_tampering.sh"
 
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
 check_injection()
 {
 	local syscall rval
@@ -11,7 +14,7 @@
 	syscall=chdir
 	rval="$1"; shift
 
-	run_strace -a12 -e$syscall -einject="$syscall:retval=$rval" "$@" \
+	run_strace -a12 -e$syscall -einject="$syscall:retval=$rval$suffix" "$@" \
 		../qual_inject-retval "$rval" > "$EXP"
 	match_diff "$LOG" "$EXP"
 }
diff --git a/tests/qual_inject-signal-syscall.test b/tests/qual_inject-signal-syscall.test
new file mode 100755
index 0000000..42e9a26
--- /dev/null
+++ b/tests/qual_inject-signal-syscall.test
@@ -0,0 +1,3 @@
+suffix=:syscall=gettid
+name_override=qual_inject-signal
+. "${srcdir=.}/qual_inject-signal.test"
diff --git a/tests/qual_inject-signal.test b/tests/qual_inject-signal.test
index f17e5a0..7f75a8e 100755
--- a/tests/qual_inject-signal.test
+++ b/tests/qual_inject-signal.test
@@ -3,6 +3,9 @@
 # Check signal injection.
 . "${srcdir=.}/init.sh"
 
-run_strace -a12 -echdir,exit_group -einject=chdir:signal=USR1 \
+: ${suffix=}
+[ -z "${name_override-}" ] || NAME="$name_override"
+
+run_strace -a12 -echdir,exit_group -einject=chdir:signal=USR1"$suffix" \
 	../$NAME
 match_diff
diff --git a/tests/qual_inject-syntax.test b/tests/qual_inject-syntax.test
index 20bc0c3..a53b01c 100755
--- a/tests/qual_inject-syntax.test
+++ b/tests/qual_inject-syntax.test
@@ -102,6 +102,12 @@
 	   chdir:delay_exit=3:delay_exit=4 \
 	   chdir:delay_enter=5:delay_exit=6:delay_enter=7 \
 	   chdir:delay_exit=8:delay_enter=9:delay_exit=10 \
+	   chdir:syscall=invalid \
+	   chdir:syscall=chdir \
+	   chdir:syscall=%file \
+	   chdir:syscall=-42 \
+	   chdir:syscall=42 \
+	   chdir:syscall=gettid:syscall=gettid \
 	   ; do
 	$STRACE -e inject="$arg" true 2> "$LOG" &&
 		fail_with "$arg"
diff --git a/tests/qualify_personality.sh b/tests/qualify_personality.sh
new file mode 100644
index 0000000..7b19a2e
--- /dev/null
+++ b/tests/qualify_personality.sh
@@ -0,0 +1,94 @@
+#! /bin/sh -efu
+#
+# Common code for per-personality qualification tests
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (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"
+
+[ 2 -le "$#" ] ||
+	fail_ 'No personality designation ("64", "32", "x32") specified'
+
+pers="$1"
+shift
+trace_expr="$1"
+shift
+skip="${1-}"
+
+case "$STRACE_NATIVE_ARCH" in
+x86_64)
+	supported_pers='64 32 x32'
+	;;
+x32)
+	supported_pers='x32 32'
+	;;
+aarch64|powerpc64|riscv|s390x|sparc64|tile)
+	supported_pers='64 32'
+	;;
+*)
+	supported_pers="$(($SIZEOF_LONG * 8))"
+	;;
+esac
+
+# Detect current personality designation
+if [ "x$STRACE_NATIVE_ARCH" = "x$STRACE_ARCH" ]; then
+	case "$STRACE_NATIVE_ARCH" in
+	x32)
+		cur_pers=x32
+		;;
+	*)
+		cur_pers="$(($SIZEOF_LONG * 8))"
+		;;
+	esac
+else
+	if [ "x$SIZEOF_KERNEL_LONG_T" = "x$SIZEOF_LONG" ]; then
+		[ 4 -eq "$SIZEOF_LONG" ] ||
+			fail_ "sizeof(long) = $SIZEOF_LONG != 4"
+		cur_pers=32
+	else
+		[ 8 -eq "$SIZEOF_KERNEL_LONG_T" ] ||
+			fail_ "sizeof(kernel_long_t) = $SIZEOF_KERNEL_LONG_T != 8"
+		[ 4 -eq "$SIZEOF_LONG" ] ||
+			fail_ "sizeof(long) = $SIZEOF_LONG != 4"
+		cur_pers=x32
+	fi
+fi
+
+pers_found=0
+set -- $supported_pers
+for i; do
+	[ "x$pers" != "x$i" ] || pers_found=1
+done
+
+[ "$pers_found" = 1 ] ||
+	skip_ "Personality '$pers' is not supported on architecture" \
+	      "'$STRACE_NATIVE_ARCH' (supported personalities: $supported_pers)"
+
+# If tested personality is not equivalent to current personality, reset $NAME,
+# so "$NAME.in", which is used by test_trace_expr, points to an empty file.
+[ "x$pers" = "x$cur_pers" ] || NAME=qualify_personality_empty
+
+test_trace_expr "$skip" -e trace="${trace_expr}@${pers}"
diff --git a/tests/qualify_personality_empty.in b/tests/qualify_personality_empty.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/qualify_personality_empty.in
diff --git a/tests/readv.c b/tests/readv.c
index 8430ca5..cae4e6b 100644
--- a/tests/readv.c
+++ b/tests/readv.c
@@ -2,7 +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.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -89,7 +89,7 @@
 		fds[1], (long) writev(fds[1], w_iov, 0));
 
 	rc = writev(fds[1], w_iov + ARRAY_SIZE(w_iov_) - 1, 2);
-	tprintf("writev(%d, [{iov_base=\"%s\", iov_len=%u}, %p], 2)"
+	tprintf("writev(%d, [{iov_base=\"%s\", iov_len=%u}, ... /* %p */], 2)"
 		" = %ld %s (%m)\n",
 		fds[1], w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_),
 		rc, errno2name());
diff --git a/tests/request_key.c b/tests/request_key.c
index 866fe76..ce9b724 100644
--- a/tests/request_key.c
+++ b/tests/request_key.c
@@ -2,7 +2,7 @@
  * Check decoding of request_key syscall.
  *
  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -101,7 +101,7 @@
 		{ bogus_desc, NULL },
 		{ ARG_STR("\25\26\27\30\31") },
 		{ ARG_STR("desc") },
-		{ "overly long description", _STR("overly long ") "..." },
+		{ "overly long description", STRINGIFY("overly long ") "..." },
 	};
 
 	struct {
@@ -113,7 +113,7 @@
 		{ bogus_info, NULL },
 		{ ARG_STR("\32\33\34\35\36") },
 		{ ARG_STR("info") },
-		{ "overly long info", _STR("overly long ") "..." },
+		{ "overly long info", STRINGIFY("overly long ") "..." },
 	};
 
 	struct {
diff --git a/tests/s390_guarded_storage.c b/tests/s390_guarded_storage.c
index 69ac166..97475bb 100644
--- a/tests/s390_guarded_storage.c
+++ b/tests/s390_guarded_storage.c
@@ -175,8 +175,8 @@
 	static const kernel_ulong_t bogus_addr =
 		(kernel_ulong_t) 0xfacefeedac0ffeedULL;
 
-	struct gs_cb *gscb = tail_alloc(sizeof(*gscb));
-	struct gs_epl *gsepl = tail_alloc(sizeof(*gsepl));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct gs_cb, gscb);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct gs_epl, gsepl);
 
 	long rc;
 
diff --git a/tests/s390_runtime_instr.c b/tests/s390_runtime_instr.c
index 861bbd4..5d368a1 100644
--- a/tests/s390_runtime_instr.c
+++ b/tests/s390_runtime_instr.c
@@ -44,10 +44,11 @@
 		kernel_ulong_t cmd;
 		const char * cmd_str;
 	} cmd_args[] = {
-		{ 0, "???" },
-		{ 4, "???" },
-		{ (kernel_ulong_t) 0xdeafbeefdeadc0deULL, "???" },
-		{ 2, "STOP",  },
+		{ 0, "0 /* S390_RUNTIME_INSTR_??? */" },
+		{ 4, "4 /* S390_RUNTIME_INSTR_??? */" },
+		{ (kernel_ulong_t) 0xdeafbeefdeadc0deULL,
+			"-559038242 /* S390_RUNTIME_INSTR_??? */" },
+		{ 2, "S390_RUNTIME_INSTR_STOP"  },
 	};
 
 	static struct {
@@ -66,10 +67,8 @@
 
 	for (i = 0; i < ARRAY_SIZE(cmd_args); i++) {
 		rc = syscall(__NR_s390_runtime_instr, cmd_args[i].cmd, 0xdead);
-		printf("s390_runtime_instr(%d /* S390_RUNTIME_INSTR_%s */) = "
-		       "%s\n",
-		       (int) cmd_args[i].cmd, cmd_args[i].cmd_str,
-		       sprintrc(rc));
+		printf("s390_runtime_instr(%s) = %s\n",
+		       cmd_args[i].cmd_str, sprintrc(rc));
 	}
 
 	for (i = 0; i < ARRAY_SIZE(start_sig_args); i++) {
@@ -77,7 +76,7 @@
 
 		rc = syscall(__NR_s390_runtime_instr, 1, start_sig_args[i].sig);
 		saved_errno = errno;
-		printf("s390_runtime_instr(1 /* S390_RUNTIME_INSTR_START */, ");
+		printf("s390_runtime_instr(S390_RUNTIME_INSTR_START, ");
 
 		if (start_sig_args[i].sig_str)
 			printf("%s", start_sig_args[i].sig_str);
diff --git a/tests/s390_runtime_instr.gen.test b/tests/s390_runtime_instr.gen.test
index 9197dc3..83e8150 100755
--- a/tests/s390_runtime_instr.gen.test
+++ b/tests/s390_runtime_instr.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_runtime_instr -a50 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_runtime_instr -a44 ); do not edit.
 . "${srcdir=.}/init.sh"
-run_strace_match_diff -a50 
+run_strace_match_diff -a44 
diff --git a/tests/s390_sthyi.c b/tests/s390_sthyi.c
index 8f6bbfb..b7066e5 100644
--- a/tests/s390_sthyi.c
+++ b/tests/s390_sthyi.c
@@ -741,7 +741,7 @@
 		(kernel_ulong_t) 0xfee1deadfa57beefULL;
 
 	unsigned char *buf = tail_alloc(PAGE_SIZE);
-	uint64_t *ret = tail_alloc(sizeof(*ret));
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint64_t, ret);
 
 	long rc;
 
diff --git a/tests/scno.h b/tests/scno.h
index 7a05556..1912ef2 100644
--- a/tests/scno.h
+++ b/tests/scno.h
@@ -833,6 +833,9 @@
 #ifndef __NR_statx
 # define __NR_statx (SYSCALL_BIT | 291)
 #endif
+#ifndef __NR_io_pgetevents
+# define __NR_io_pgetevents (SYSCALL_BIT | 292)
+#endif
 #ifndef __NR_open
 # define __NR_open (SYSCALL_BIT | 1024)
 #endif
diff --git a/tests/seccomp-filter-v.c b/tests/seccomp-filter-v.c
index 34ab3b5..38def28 100644
--- a/tests/seccomp-filter-v.c
+++ b/tests/seccomp-filter-v.c
@@ -2,7 +2,7 @@
  * Check verbose decoding of seccomp SECCOMP_SET_MODE_FILTER.
  *
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -118,7 +118,7 @@
 	prog->len = 3;
 	syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, 0, prog);
 	tprintf("seccomp(SECCOMP_SET_MODE_FILTER, 0, {len=%u"
-		", filter=[%s, %p]}) = -1 EFAULT (%m)\n",
+		", filter=[%s, ... /* %p */]}) = -1 EFAULT (%m)\n",
 		prog->len, kill_stmt_txt, filter +  ARRAY_SIZE(filter_c));
 
 	prog->len = 0;
@@ -136,7 +136,8 @@
 	prog->filter = big_filter;
 	prog->len = BPF_MAXINSNS + 1;
 	tprintf("seccomp(SECCOMP_SET_MODE_FILTER, %s, {len=%u, filter=[",
-		"SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|0xfffffffc",
+		"SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|"
+		"SECCOMP_FILTER_FLAG_SPEC_ALLOW|0xfffffff8",
 		prog->len);
 	for (i = 0; i < BPF_MAXINSNS; ++i) {
 		if (i)
diff --git a/tests/seccomp-filter.c b/tests/seccomp-filter.c
index 7bc7656..53f8363 100644
--- a/tests/seccomp-filter.c
+++ b/tests/seccomp-filter.c
@@ -2,7 +2,7 @@
  * Check decoding of seccomp SECCOMP_SET_MODE_FILTER.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -56,12 +56,13 @@
 	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -1, prog);
 	printf("seccomp(SECCOMP_SET_MODE_FILTER, %s, {len=%u, filter=%p})"
 	       " = %ld %s (%m)\n",
-	       "SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|0xfffffffc",
+	       "SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|"
+	       "SECCOMP_FILTER_FLAG_SPEC_ALLOW|0xfffffff8",
 	       prog->len, prog->filter, rc, errno2name());
 
-	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -4L, efault);
+	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -8L, efault);
 	printf("seccomp(SECCOMP_SET_MODE_FILTER, %s, %p) = %ld %s (%m)\n",
-	       "0xfffffffc /* SECCOMP_FILTER_FLAG_??? */",
+	       "0xfffffff8 /* SECCOMP_FILTER_FLAG_??? */",
 	       efault, rc, errno2name());
 
 	puts("+++ exited with 0 +++");
diff --git a/tests/semop.c b/tests/semop.c
index 2366d38..4b14882 100644
--- a/tests/semop.c
+++ b/tests/semop.c
@@ -64,11 +64,11 @@
 	sem_b2->sem_flg = 0xbeef;
 
 	rc = semop(bogus_semid, sem_b2, 2);
-	printf("semop(%d, [{%hu, %hd, %s%s%#hx}, %p], %u) = %s\n",
+	printf("semop(%d, [{%hu, %hd, %s%s%#hx}, ... /* %p */], %u) = %s\n",
 		bogus_semid, sem_b2->sem_num, sem_b2->sem_op,
 		sem_b2->sem_flg & SEM_UNDO ? "SEM_UNDO|" : "",
 		sem_b2->sem_flg & IPC_NOWAIT ? "IPC_NOWAIT|" : "",
-		sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT),
+		(short) (sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT)),
 		sem_b2 + 1, 2, sprintrc(rc));
 
 	if (semop(id, sem_b, 1))
@@ -91,12 +91,12 @@
 	ts->tv_sec = 1;
 	ts->tv_nsec = 123456789;
 	rc = semtimedop(bogus_semid, sem_b2, 2, ts);
-	printf("semtimedop(%d, [{%hu, %hd, %s%s%#hx}, %p], %u"
+	printf("semtimedop(%d, [{%hu, %hd, %s%s%#hx}, ... /* %p */], %u"
 		", {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
 		bogus_semid, sem_b2->sem_num, sem_b2->sem_op,
 		sem_b2->sem_flg & SEM_UNDO ? "SEM_UNDO|" : "",
 		sem_b2->sem_flg & IPC_NOWAIT ? "IPC_NOWAIT|" : "",
-		sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT),
+		(short) (sem_b2->sem_flg & ~(SEM_UNDO | IPC_NOWAIT)),
 		sem_b2 + 1, 2,
 		(long long) ts->tv_sec, zero_extend_signed_to_ull(ts->tv_nsec),
 		sprintrc(rc));
diff --git a/tests/set_mempolicy.c b/tests/set_mempolicy.c
index f3261a0..96ad7db 100644
--- a/tests/set_mempolicy.c
+++ b/tests/set_mempolicy.c
@@ -2,6 +2,7 @@
  * Check decoding of set_mempolicy syscall.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -76,7 +77,7 @@
 				printf("%#0*lx", (int) sizeof(long) * 2 + 2,
 				       nodemask[i]);
 			} else {
-				printf("%p", nodemask + i);
+				printf("... /* %p */", nodemask + i);
 				break;
 			}
 		}
diff --git a/tests/setgroups.c b/tests/setgroups.c
index 5645c22..a2851be 100644
--- a/tests/setgroups.c
+++ b/tests/setgroups.c
@@ -2,7 +2,7 @@
  * Check decoding of setgroups/setgroups32 syscalls.
  *
  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -115,7 +115,7 @@
 	errstr = sprintrc(rc);
 	printf("%s(2, [", SYSCALL_NAME);
 	printuid(*g1);
-	printf(", %p]) = %s\n", g1 + 1, errstr);
+	printf(", ... /* %p */]) = %s\n", g1 + 1, errstr);
 
 	g2[0] = -2;
 	g2[1] = -3;
@@ -133,7 +133,7 @@
 	printuid(g2[0]);
 	printf(", ");
 	printuid(g2[1]);
-	printf(", %p]) = %s\n", g2 + 2, errstr);
+	printf(", ... /* %p */]) = %s\n", g2 + 2, errstr);
 
 	g3[0] = 0;
 	g3[1] = 1;
diff --git a/tests/signal_receive.c b/tests/signal_receive.c
index 01c52e8..a464b8c 100644
--- a/tests/signal_receive.c
+++ b/tests/signal_receive.c
@@ -1,43 +1,127 @@
+/*
+ * Check decoding of signal delivery.
+ *
+ * Copyright (c) 2016-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING 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 <signal.h>
 #include <stdio.h>
 #include <unistd.h>
 
-void sig_print(const char *signame, const int pid, const int uid)
-{
-	printf("kill(%d, %s) = 0\n"
-	       "--- %s {si_signo=%s, si_code=SI_USER, si_pid=%d"
-	       ", si_uid=%d} ---\n",
-	       pid, signame, signame, signame, pid, uid);
-}
+static volatile int s_sig, s_code, s_pid, s_uid;
 
 static void
-handler(int sig)
+handler(int sig, siginfo_t *info, void *ucontext)
 {
+	s_sig = info->si_signo;
+	s_code = info->si_code;
+	s_pid = info->si_pid;
+	s_uid = info->si_uid;
 }
 
 int
 main(void)
 {
-	int sig, pid = getpid(), uid = getuid();
-	const struct sigaction act = { .sa_handler = handler };
-	sigset_t mask;
-	sigemptyset(&mask);
+	static const char prefix[] = "KERNEL BUG";
+	int printed = 0;
 
-	for (sig = 1; sig <= 31; sig++) {
-		if (sig != SIGKILL && sig != SIGSTOP) {
-			sigaction(sig, &act, NULL);
-			sigaddset(&mask, sig);
+	const int pid = getpid();
+	const int uid = geteuid();
+
+	for (int sig = 1; sig <= 31; ++sig) {
+		if (sig == SIGKILL || sig == SIGSTOP)
+			continue;
+
+		sigset_t mask;
+		sigemptyset(&mask);
+		sigaddset(&mask, sig);
+		if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
+			perror_msg_and_fail("sigprocmask");
+
+		static const struct sigaction act = {
+			.sa_sigaction = handler,
+			.sa_flags = SA_SIGINFO
+		};
+		if (sigaction(sig, &act, NULL))
+			perror_msg_and_fail("sigaction: %d", sig);
+
+		if (kill(pid, sig) != 0)
+			perror_msg_and_fail("kill: %d", sig);
+
+#ifdef MPERS_IS_m32
+		/*
+		 * The tracee has received a compat siginfo_t but
+		 * the tracer has received a native siginfo_t.
+		 */
+		const int e_sig = sig;
+		const int e_pid = pid;
+		const int e_uid = uid;
+#else
+		/*
+		 * If the tracee is a native process,
+		 * then the tracer is also native.
+		 * If the tracee is a compat process,
+		 * then the tracer is also compat.
+		 * Anyway, both the tracee and the tracer
+		 * have received the same siginfo_t.
+		 */
+		const int e_sig = s_sig;
+		const int e_pid = s_pid;
+		const int e_uid = s_uid;
+#endif
+		printf("kill(%d, %s) = 0\n", pid, signal2name(sig));
+		printf("--- %s {si_signo=%s, si_code=SI_USER, si_pid=%d"
+		       ", si_uid=%d} ---\n",
+		       signal2name(sig), signal2name(e_sig), e_pid, e_uid);
+
+		if (s_code || sig != s_sig || pid != s_pid || uid != s_uid) {
+			/*
+			 * The kernel has failed to initialize siginfo_t
+			 * properly.  There is nothing that could be done
+			 * on the strace side to workaround the kernel bug,
+			 * so just print some useful diagnostics.
+			 */
+			if (!printed) {
+				printed = 1;
+				fprintf(stderr, "%s: siginfo_t\n", prefix);
+			}
+			fprintf(stderr,
+				"%s: expected: si_signo=%d, si_code=%d"
+				", si_pid=%d, si_uid=%d\n"
+				"%s: received: si_signo=%d, si_code=%d"
+				", si_pid=%d, si_uid=%d\n",
+				prefix, sig, SI_USER, pid, uid,
+				prefix, sig, s_code, s_pid, s_uid);
 		}
 	}
-	sigprocmask(SIG_UNBLOCK, &mask, NULL);
 
-	for (sig = 1; sig <= 31; sig++) {
-		if (sig != SIGKILL && sig != SIGSTOP) {
-			if (kill(pid, sig) != 0)
-				perror_msg_and_fail("kill: %d", sig);
-			sig_print(signal2name(sig), pid, uid);
-		}
+	if (printed) {
+		fprintf(stderr, "%s: end of diagnostics\n"
+			"*** PLEASE FIX THE KERNEL ***\n", prefix);
 	}
 
 	puts("+++ exited with 0 +++");
diff --git a/tests/so_peercred-Xabbrev.c b/tests/so_peercred-Xabbrev.c
new file mode 100644
index 0000000..a7056a6
--- /dev/null
+++ b/tests/so_peercred-Xabbrev.c
@@ -0,0 +1 @@
+#include "so_peercred.c"
diff --git a/tests/so_peercred-Xabbrev.gen.test b/tests/so_peercred-Xabbrev.gen.test
new file mode 100755
index 0000000..64a5538
--- /dev/null
+++ b/tests/so_peercred-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred-Xabbrev -e trace=getsockopt -Xabbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt -Xabbrev
diff --git a/tests/so_peercred-Xraw.c b/tests/so_peercred-Xraw.c
new file mode 100644
index 0000000..e45f2df
--- /dev/null
+++ b/tests/so_peercred-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "so_peercred.c"
diff --git a/tests/so_peercred-Xraw.gen.test b/tests/so_peercred-Xraw.gen.test
new file mode 100755
index 0000000..471ae59
--- /dev/null
+++ b/tests/so_peercred-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred-Xraw -e trace=getsockopt -Xraw -a39); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt -Xraw -a39
diff --git a/tests/so_peercred-Xverbose.c b/tests/so_peercred-Xverbose.c
new file mode 100644
index 0000000..1bb47e9
--- /dev/null
+++ b/tests/so_peercred-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "so_peercred.c"
diff --git a/tests/so_peercred-Xverbose.gen.test b/tests/so_peercred-Xverbose.gen.test
new file mode 100755
index 0000000..2926517
--- /dev/null
+++ b/tests/so_peercred-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peercred-Xverbose -e trace=getsockopt -Xverbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt -Xverbose
diff --git a/tests/so_peercred.c b/tests/so_peercred.c
index 53bf071..6eac846 100644
--- a/tests/so_peercred.c
+++ b/tests/so_peercred.c
@@ -2,6 +2,7 @@
  * Check decoding of SO_PEERCRED socket option.
  *
  * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -46,6 +47,28 @@
 	return rc;
 }
 
+static const char *
+so_str(void)
+{
+	static char buf[256];
+
+	if (!buf[0]) {
+#if XLAT_RAW
+		snprintf(buf, sizeof(buf),
+			 "%#x, %#x", SOL_SOCKET, SO_PEERCRED);
+#elif XLAT_VERBOSE
+		snprintf(buf, sizeof(buf),
+			 "%#x /* SOL_SOCKET */, %#x /* SO_PEERCRED */",
+			 SOL_SOCKET, SO_PEERCRED);
+#else
+		snprintf(buf, sizeof(buf),
+			 "SOL_SOCKET, SO_PEERCRED");
+#endif
+	}
+
+	return buf;
+}
+
 int
 main(void)
 {
@@ -59,7 +82,7 @@
 	/* classic getsockopt */
 	*len = sizeof(*peercred);
 	get_peercred(sv[0], peercred, len);
-	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", sv[0]);
+	printf("getsockopt(%d, %s", sv[0], so_str());
 	PRINT_FIELD_D(", {", *peercred, pid);
 	PRINT_FIELD_UID(", ", *peercred, uid);
 	PRINT_FIELD_UID(", ", *peercred, gid);
@@ -72,7 +95,7 @@
 	/* getsockopt with optlen larger than necessary - shortened */
 	*len = sizeof(*peercred) + 1;
 	get_peercred(fd, peercred, len);
-	printf("getsockopt(%d, SOL_SOCKET, SO_PEERCRED", fd);
+	printf("getsockopt(%d, %s", fd, so_str());
 	PRINT_FIELD_D(", {", *peercred, pid);
 	PRINT_FIELD_UID(", ", *peercred, uid);
 	PRINT_FIELD_UID(", ", *peercred, gid);
@@ -82,14 +105,14 @@
 	/* 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);
+	printf("getsockopt(%d, %s", fd, so_str());
 	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);
+	printf("getsockopt(%d, %s", fd, so_str());
 	PRINT_FIELD_D(", {", *peercred, pid);
 	PRINT_FIELD_UID(", ", *peercred, uid);
 	printf("}, [%d]) = %s\n", *len, errstr);
@@ -97,20 +120,20 @@
 	/* 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);
+	printf("getsockopt(%d, %s, ", fd, so_str());
 	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);
+	printf("getsockopt(%d, %s, %p, [%d]) = %s\n",
+	       fd, so_str(), &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);
+	printf("getsockopt(%d, %s, %p, %p) = %s\n",
+	       fd, so_str(), peercred, len + 1, errstr);
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests/sock_filter-v-Xabbrev.c b/tests/sock_filter-v-Xabbrev.c
new file mode 100644
index 0000000..ac680e2
--- /dev/null
+++ b/tests/sock_filter-v-Xabbrev.c
@@ -0,0 +1 @@
+#include "sock_filter-v.c"
diff --git a/tests/sock_filter-v-Xabbrev.gen.test b/tests/sock_filter-v-Xabbrev.gen.test
new file mode 100755
index 0000000..e52763f
--- /dev/null
+++ b/tests/sock_filter-v-Xabbrev.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v-Xabbrev -v -e trace=getsockopt,setsockopt -X abbrev); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -v -e trace=getsockopt,setsockopt -X abbrev
diff --git a/tests/sock_filter-v-Xraw.c b/tests/sock_filter-v-Xraw.c
new file mode 100644
index 0000000..e85309c
--- /dev/null
+++ b/tests/sock_filter-v-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "sock_filter-v.c"
diff --git a/tests/sock_filter-v-Xraw.gen.test b/tests/sock_filter-v-Xraw.gen.test
new file mode 100755
index 0000000..3c7df81
--- /dev/null
+++ b/tests/sock_filter-v-Xraw.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v-Xraw -a 37 -v -e trace=getsockopt,setsockopt -X raw); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a 37 -v -e trace=getsockopt,setsockopt -X raw
diff --git a/tests/sock_filter-v-Xverbose.c b/tests/sock_filter-v-Xverbose.c
new file mode 100644
index 0000000..59d76bd
--- /dev/null
+++ b/tests/sock_filter-v-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "sock_filter-v.c"
diff --git a/tests/sock_filter-v-Xverbose.gen.test b/tests/sock_filter-v-Xverbose.gen.test
new file mode 100755
index 0000000..b58c5b5
--- /dev/null
+++ b/tests/sock_filter-v-Xverbose.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sock_filter-v-Xverbose -v -e trace=getsockopt,setsockopt -X verbose); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -v -e trace=getsockopt,setsockopt -X verbose
diff --git a/tests/sock_filter-v.c b/tests/sock_filter-v.c
index 16d5c1c..6829786 100644
--- a/tests/sock_filter-v.c
+++ b/tests/sock_filter-v.c
@@ -2,6 +2,7 @@
  * Check decoding of socket filters.
  *
  * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,16 +36,30 @@
 #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)
+/* SO_GET_FILTER was introduced by Linux commit v3.8-rc1~139^2~518 */
+#ifndef SO_GET_FILTER
+# define SO_GET_FILTER SO_ATTACH_FILTER
+#endif
 
-#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)
+#define HEX_FMT "%#x"
+
+#if XLAT_RAW
+# define XLAT_FMT HEX_FMT
+# define XLAT_ARGS(a_) (a_)
+#elif XLAT_VERBOSE
+# define XLAT_FMT HEX_FMT " /* %s */"
+# define XLAT_ARGS(a_) (a_), #a_
+#else
+# define XLAT_FMT "%s"
+# define XLAT_ARGS(a_) #a_
+#endif
+
+#define PRINT_STMT(pfx, code_fmt, k_fmt, ...)	\
+	printf("%sBPF_STMT(" code_fmt ", " k_fmt ")", pfx, __VA_ARGS__)
+
+#define PRINT_JUMP(pfx, code_fmt, k, jt, jf, ...)		\
+	printf("%sBPF_JUMP(" code_fmt ", %#x, %#x, %#x)",	\
+	       pfx, __VA_ARGS__, k, jt, jf)
 
 static const struct sock_filter bpf_filter[] = {
 	BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_LL_OFF+4),
@@ -62,16 +77,43 @@
 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);
+	PRINT_STMT("[", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   XLAT_FMT "+4",
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   XLAT_ARGS(SKF_LL_OFF));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   XLAT_FMT "+8",
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   XLAT_ARGS(SKF_NET_OFF));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   XLAT_FMT "+" XLAT_FMT,
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   XLAT_ARGS(SKF_AD_OFF), XLAT_ARGS(SKF_AD_PROTOCOL));
+	PRINT_JUMP(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   IPPROTO_UDP, 0, 5,
+		   XLAT_ARGS(BPF_JMP), XLAT_ARGS(BPF_K), XLAT_ARGS(BPF_JEQ));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_W), XLAT_ARGS(BPF_LEN),
+		   0);
+	PRINT_JUMP(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   100, 0, 3,
+		   XLAT_ARGS(BPF_JMP), XLAT_ARGS(BPF_K), XLAT_ARGS(BPF_JGE));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_LD), XLAT_ARGS(BPF_B), XLAT_ARGS(BPF_ABS),
+		   42);
+	PRINT_JUMP(", ", XLAT_FMT "|" XLAT_FMT "|" XLAT_FMT,
+		   'a', 0, 1,
+		   XLAT_ARGS(BPF_JMP), XLAT_ARGS(BPF_K), XLAT_ARGS(BPF_JEQ));
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_RET), XLAT_ARGS(BPF_K),
+		   -1U);
+	PRINT_STMT(", ", XLAT_FMT "|" XLAT_FMT,
+		   HEX_FMT,
+		   XLAT_ARGS(BPF_RET), XLAT_ARGS(BPF_K),
+		   0);
 	putchar(']');
 }
 
@@ -80,7 +122,7 @@
 static int
 get_filter(int fd, void *val, socklen_t *len)
 {
-	int rc = getsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, val, len);
+	int rc = getsockopt(fd, SOL_SOCKET, SO_GET_FILTER, val, len);
 	errstr = sprintrc(rc);
 	return rc;
 }
@@ -114,35 +156,41 @@
 	*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);
+		perror_msg_and_skip("getsockopt SOL_SOCKET SO_GET_FILTER");
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", NULL, [%u->0]) "
+	       "= 0\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER),
+	       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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", NULL, NULL) "
+	       "= %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER), 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);
+	printf("setsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", {len=%u, filter=",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_ATTACH_FILTER),
+	       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);
+	printf("setsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, %u) = %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_ATTACH_FILTER), 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);
+	printf("setsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", {len=%u, filter=",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_ATTACH_REUSEPORT_CBPF),
+	       prog->len);
 	print_filter();
 	printf("}, %u) = %s\n", (unsigned int) sizeof(*prog), errstr);
 #endif
@@ -150,28 +198,30 @@
 	/* 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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, [0->%u]) "
+	       "= %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER), 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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, [%u]) = %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER), 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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", %p, [%u]) = %s\n",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER),
+	       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);
+	printf("getsockopt(%d, " XLAT_FMT ", " XLAT_FMT ", ",
+	       fd, XLAT_ARGS(SOL_SOCKET), XLAT_ARGS(SO_GET_FILTER));
 	print_filter();
 	printf(", [%u->%d]) = %s\n",
 	       (unsigned int) ARRAY_SIZE(bpf_filter) + 1, *len, errstr);
diff --git a/tests/strace-V.test b/tests/strace-V.test
index eb05e86..a0274c2 100755
--- a/tests/strace-V.test
+++ b/tests/strace-V.test
@@ -38,7 +38,8 @@
 	exit 1
 }
 
-option_unwind=$(getoption USE_LIBUNWIND " stack-unwind")
+option_unwind=$(getoption ENABLE_STACKTRACE \
+		" stack-trace=$(getstr USE_UNWINDER)")
 option_demangle=$(getoption USE_DEMANGLE " stack-demangle")
 
 option_m32=
diff --git a/tests/strace-k-demangle.expected b/tests/strace-k-demangle.expected
new file mode 100644
index 0000000..e42e78f
--- /dev/null
+++ b/tests/strace-k-demangle.expected
@@ -0,0 +1 @@
+(__kernel_vsyscall )?(__)?getpid ns::f3\(int\) ns::f2\(int\) ns::f1\(int\) ns::f0\(int\) main
diff --git a/tests/strace-k-demangle.test b/tests/strace-k-demangle.test
index 1616449..106a700 100755
--- a/tests/strace-k-demangle.test
+++ b/tests/strace-k-demangle.test
@@ -2,6 +2,5 @@
 # Check strace -k symbol names demangling.
 
 test_prog=../stack-fcall-mangled
-expected='getpid ns::f3(int) ns::f2(int) ns::f1(int) ns::f0(int) main '
 
 . "${srcdir=.}"/strace-k.test
diff --git a/tests/strace-k.expected b/tests/strace-k.expected
new file mode 100644
index 0000000..840d648
--- /dev/null
+++ b/tests/strace-k.expected
@@ -0,0 +1 @@
+(__kernel_vsyscall )?(__)?getpid f3 f2 f1 f0 main
diff --git a/tests/strace-k.test b/tests/strace-k.test
index 2a21a9d..fb1e2b3 100755
--- a/tests/strace-k.test
+++ b/tests/strace-k.test
@@ -4,7 +4,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.
+# Copyright (c) 2014-2018 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -35,20 +35,41 @@
 [ -f /proc/self/maps ] ||
 	framework_skip_ '/proc/self/maps is not available'
 
+check_prog grep
 check_prog sed
 check_prog tr
 
-: ${test_prog=../stack-fcall}
-: ${expected='getpid f3 f2 f1 f0 main '}
-
-run_prog "$test_prog"
+run_prog "${test_prog=../stack-fcall}"
 run_strace -e getpid -k $args
 
-result=$(sed -r -n '1,/\(main\+0x[a-f0-9]+\) .*/ s/^[^(]+\(([^+]+)\+0x[a-f0-9]+\) .*/\1/p' "$LOG" |
-	tr '\n' ' ')
+expected="$srcdir/$NAME.expected"
+sed -r -n '1,/\(main\+0x[a-f0-9]+\) .*/ s/^[^(]+\(([^+]+)\+0x[a-f0-9]+\) .*/\1/p' "$LOG" |
+	tr '\n' ' ' |sed 's/ $//' > "$OUT"
 
-test "$result" = "$expected" || {
-	echo "expected: \"$expected\""
-	echo "result: \"$result\""
+LC_ALL=C grep -E -x -f "$expected" < "$OUT" > /dev/null || {
+	cat >&2 <<__EOF__
+Failed pattern of expected output: $(cat "$expected")
+Actual output: $(cat "$OUT")
+__EOF__
+
+	pattern=
+	case "$STRACE_ARCH" in
+		aarch64|i386|ppc*|s390*|sparc*|x32|x86*)
+			# These architectures are supported by elfutils libdw,
+			# see grep '\<HOOK\>.*\<abi_cfi\>' elfutils/backends
+			;;
+		arm) pattern='No DWARF information found'
+			# This is also supported by elfutils libdw
+			# but the latter needs debuginfo for unwinding.
+			;;
+		*) pattern='Unwinding not supported for this architecture'
+			;;
+	esac
+	if [ -n "$pattern" ] &&
+	   LC_ALL=C grep -x " > $pattern" < "$LOG" > /dev/null; then
+		cat < "$LOG" >&2
+		skip_ "stack tracing is not fully supported on $STRACE_ARCH yet"
+	fi
+
 	dump_log_and_fail_with "$STRACE $args output mismatch"
 }
diff --git a/tests/struct_flock.c b/tests/struct_flock.c
deleted file mode 100644
index 428c038..0000000
--- a/tests/struct_flock.c
+++ /dev/null
@@ -1,108 +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 <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "flock.h"
-
-#define FILE_LEN 4096
-
-#define TEST_FLOCK_EINVAL(cmd) test_flock_einval(cmd, #cmd)
-
-#ifdef HAVE_TYPEOF
-# define TYPEOF_FLOCK_OFF_T typeof(((struct_kernel_flock *) NULL)->l_len)
-#else
-# define TYPEOF_FLOCK_OFF_T off_t
-#endif
-
-static long
-invoke_test_syscall(const unsigned int cmd, void *const p)
-{
-	const kernel_ulong_t fd = F8ILL_KULONG_MASK;
-	const kernel_ulong_t op = F8ILL_KULONG_MASK | cmd;
-
-	return syscall(TEST_SYSCALL_NR, fd, op, (unsigned long) p);
-}
-
-static void
-test_flock_einval(const int cmd, const char *name)
-{
-	struct_kernel_flock fl = {
-		.l_type = F_RDLCK,
-		.l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeedULL,
-		.l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00dULL
-	};
-	long rc = invoke_test_syscall(cmd, &fl);
-	printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
-	       ", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
-	       (intmax_t) fl.l_start, (intmax_t) fl.l_len, sprintrc(rc));
-}
-
-static void
-test_flock(void)
-{
-	TEST_FLOCK_EINVAL(F_SETLK);
-	TEST_FLOCK_EINVAL(F_SETLKW);
-
-	struct_kernel_flock fl = {
-		.l_type = F_RDLCK,
-		.l_len = FILE_LEN
-	};
-	long rc = invoke_test_syscall(F_SETLK, &fl);
-	printf("%s(0, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
-	       ", l_start=0, l_len=%d}) = %s\n",
-	       TEST_SYSCALL_STR, FILE_LEN, sprintrc(rc));
-	if (rc)
-		return;
-
-	invoke_test_syscall(F_GETLK, &fl);
-	printf("%s(0, F_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
-	       ", l_start=0, l_len=%d, l_pid=0}) = 0\n",
-	       TEST_SYSCALL_STR, FILE_LEN);
-
-	invoke_test_syscall(F_SETLK, &fl);
-	printf("%s(0, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
-	       ", l_start=0, l_len=%d}) = 0\n",
-	       TEST_SYSCALL_STR, FILE_LEN);
-}
-
-static void
-create_sample(void)
-{
-	char fname[] = TEST_SYSCALL_STR "_XXXXXX";
-
-	(void) close(0);
-	if (mkstemp(fname))
-		perror_msg_and_fail("mkstemp: %s", fname);
-	if (unlink(fname))
-		perror_msg_and_fail("unlink: %s", fname);
-	if (ftruncate(0, FILE_LEN))
-		perror_msg_and_fail("ftruncate");
-}
diff --git a/tests/test_nlattr.h b/tests/test_nlattr.h
index 43f467f..9038c0e 100644
--- a/tests/test_nlattr.h
+++ b/tests/test_nlattr.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 The strace developers.
+ * Copyright (c) 2017-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -51,15 +51,17 @@
 }
 
 static void
-print_nlattr(const unsigned int nla_len, const char *const nla_type)
+print_nlattr(const unsigned int nla_len, const char *const nla_type, bool add_data)
 {
-	printf(", {{nla_len=%u, nla_type=%s}, ", nla_len, nla_type);
+	printf(", %s{{nla_len=%u, nla_type=%s}, ",
+	       add_data ? "[" : "", nla_len, nla_type);
 }
 
-#define TEST_NLATTR_(fd_, nlh0_, hdrlen_,				\
+#define TEST_NLATTR_EX_(fd_, nlh0_, hdrlen_,				\
 		     init_msg_, print_msg_,				\
 		     nla_type_, nla_type_str_,				\
-		     nla_data_len_, src_, slen_, ...)			\
+		     nla_data_len_, nla_total_len_,			\
+		     src_, slen_, ...)					\
 	do {								\
 		struct nlmsghdr *const nlh =				\
 			(nlh0_) - (NLA_HDRLEN + (slen_));		\
@@ -68,7 +70,7 @@
 		const unsigned int nla_len =				\
 			NLA_HDRLEN + (nla_data_len_);			\
 		const unsigned int msg_len =				\
-			NLMSG_SPACE(hdrlen_) + nla_len;			\
+			NLMSG_SPACE(hdrlen_) + NLA_HDRLEN + (nla_total_len_); \
 									\
 		(init_msg_)(nlh, msg_len);				\
 		init_nlattr(TEST_NLATTR_nla, nla_len, (nla_type_),	\
@@ -80,14 +82,28 @@
 									\
 		printf("sendto(%d, {", (fd_));				\
 		(print_msg_)(msg_len);					\
-		print_nlattr(nla_len, (nla_type_str_));			\
+		print_nlattr(nla_len, (nla_type_str_),			\
+			     (nla_total_len_) > (nla_data_len_));	\
 									\
 		{ __VA_ARGS__; }					\
 									\
+		if ((nla_total_len_) > (nla_data_len_))			\
+			printf("]");					\
+									\
 		printf("}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",		\
 		       msg_len, errstr);				\
 	} while (0)
 
+#define TEST_NLATTR_(fd_, nlh0_, hdrlen_,				\
+		     init_msg_, print_msg_,				\
+		     nla_type_, nla_type_str_,				\
+		     nla_data_len_, src_, slen_, ...)			\
+	TEST_NLATTR_EX_((fd_), (nlh0_), (hdrlen_),			\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), (nla_type_str_),			\
+			(nla_data_len_), (nla_data_len_),		\
+			(src_), (slen_), __VA_ARGS__)
+
 #define TEST_NLATTR(fd_, nlh0_, hdrlen_,				\
 		    init_msg_, print_msg_,				\
 		    nla_type_,						\
@@ -106,11 +122,12 @@
 			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_str_),			\
-			plen, (pattern_), plen,				\
-			(fallback_func)((pattern_), plen));		\
+		if (plen > 0)						\
+			TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),		\
+				(init_msg_), (print_msg_),		\
+				(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_),			\
@@ -170,7 +187,7 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
 			printf("]"));					\
 		/* short read of sizeof(obj_) */			\
@@ -183,11 +200,11 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf(", %p]",					\
+			printf(", ... /* %p */]",			\
 			       RTA_DATA(NLMSG_ATTR(nlh, (hdrlen_)))	\
-			        + sizeof((obj_)[0])));			\
+			        + sizeof(obj_) - sizeof((obj_)[0])));	\
 		/* sizeof(obj_) */					\
 		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
 			(init_msg_), (print_msg_),			\
@@ -198,7 +215,7 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_); ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
 			printf("]"));					\
 	} while (0)
@@ -206,21 +223,23 @@
 #define TEST_NESTED_NLATTR_OBJECT_EX_(fd_, nlh0_, hdrlen_,		\
 				      init_msg_, print_msg_,		\
 				      nla_type_, nla_type_str_,		\
-				      pattern_, obj_, depth_, ...)	\
+				      pattern_, obj_, fallback_func,	\
+				      depth_, ...)	\
 	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 * depth_,	\
-			(hdrlen_) + NLA_HDRLEN * depth_,		\
-			(init_msg_), (print_msg_),			\
-			(nla_type_), (nla_type_str_),			\
-			plen, (pattern_), plen,				\
-			print_quoted_hex((pattern_), plen);		\
-			size_t i;					\
-			for (i = 0; i < depth_; ++i)			\
-				printf("}"));				\
+		if (plen > 0)						\
+			TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_, \
+				(hdrlen_) + NLA_HDRLEN * depth_,	\
+				(init_msg_), (print_msg_),		\
+				(nla_type_), (nla_type_str_),		\
+				plen, (pattern_), plen,			\
+				(fallback_func)((pattern_), plen);	\
+				size_t i;				\
+				for (i = 0; i < depth_; ++i)		\
+					printf("}"));			\
 		/* short read of sizeof(obj_) */			\
 		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
 			(hdrlen_) + NLA_HDRLEN * depth_,		\
@@ -252,7 +271,8 @@
 	TEST_NESTED_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),	\
 				      (init_msg_), (print_msg_),	\
 				      (nla_type_), #nla_type_,		\
-				      (pattern_), (obj_), (depth_),	\
+				      (pattern_), (obj_),		\
+				      print_quoted_hex, (depth_),	\
 				      __VA_ARGS__)
 
 #define TEST_NESTED_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,			\
@@ -261,27 +281,30 @@
 	TEST_NESTED_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),	\
 				      (init_msg_), (print_msg_),	\
 				      (nla_type_), #nla_type_,		\
-				      (pattern_), (obj_), 1,		\
+				      (pattern_), (obj_),		\
+				      print_quoted_hex, 1,		\
 				      __VA_ARGS__)
 
-#define TEST_NESTED_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,			\
+#define TEST_NESTED_NLATTR_ARRAY_EX(fd_, nlh0_, hdrlen_,		\
 				 init_msg_, print_msg_,			\
-				 nla_type_, pattern_, obj_, print_elem_)\
+				 nla_type_, pattern_, obj_, depth_,	\
+				 print_elem_)				\
 	do {								\
 		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_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			plen, (pattern_), plen,				\
 			print_quoted_hex((pattern_), plen);		\
-			printf("}"));					\
+			for (size_t i = 0; i < depth_; ++i)		\
+				printf("}"));				\
 		/* sizeof((obj_)[0]) < len < sizeof(obj_) */		\
-		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_) - 1,				\
@@ -290,12 +313,14 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf("]}"));					\
+			printf("]");					\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
 		/* short read of sizeof(obj_) */			\
-		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_),					\
@@ -304,14 +329,16 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf(", %p]}",				\
+			printf(", ... /* %p */]",			\
 			       RTA_DATA(TEST_NLATTR_nla)		\
-			        + sizeof((obj_)[0])));			\
+			        + sizeof(obj_) - sizeof((obj_)[0]));	\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
 		/* sizeof(obj_) */					\
-		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
-			(hdrlen_) + NLA_HDRLEN,				\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_),					\
@@ -320,7 +347,17 @@
 			size_t i;					\
 			for (i = 0; i < ARRAY_SIZE(obj_); ++i) {	\
 				if (i) printf(", ");			\
-				(print_elem_)(&(obj_)[i]);		\
+				(print_elem_)(&(obj_)[i], i);		\
 			}						\
-			printf("]}"));					\
+			printf("]");					\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
 	} while (0)
+
+#define TEST_NESTED_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,			\
+				 init_msg_, print_msg_,			\
+				 nla_type_, pattern_, obj_, print_elem_)\
+	TEST_NESTED_NLATTR_ARRAY_EX((fd_), (nlh0_), (hdrlen_),		\
+				    (init_msg_), (print_msg_),		\
+				    nla_type_, (pattern_), (obj_), 1,	\
+				    (print_elem_))
diff --git a/tests/tests.h b/tests/tests.h
index 3bf454d..248e341 100644
--- a/tests/tests.h
+++ b/tests/tests.h
@@ -62,6 +62,14 @@
 # define VERBOSE 0
 #endif
 
+/* xlat verbosity defaults */
+#ifndef XLAT_RAW
+# define XLAT_RAW 0
+#endif
+#ifndef XLAT_VERBOSE
+# define XLAT_VERBOSE 0
+#endif
+
 #ifndef DEFAULT_STRLEN
 /* Default maximum # of bytes printed in printstr et al. */
 # define DEFAULT_STRLEN 32
@@ -109,6 +117,9 @@
 void *tail_memdup(const void *, const size_t)
 	ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((2));
 
+#define midtail_alloc(after_, before_) \
+	((void *) ((char *) tail_alloc(((before_) + (after_))) + (before_)))
+
 /*
  * Allocate an object of the specified type at the end
  * of a mapped memory region.
@@ -163,6 +174,12 @@
  */
 void print_quoted_cstring(const char *str, size_t size);
 
+/*
+ * Print a NUL-terminated string `str' of length up to `size'
+ * in a quoted form.
+ */
+void print_quoted_stringn(const char *str, size_t size);
+
 /* Print memory in a quoted form with optional escape characters. */
 void print_quoted_memory_ex(const void *, size_t, bool quote,
 			    const char *escape_chars);
@@ -277,7 +294,6 @@
 #endif
 #define LL_VAL_TO_PAIR(llval) LL_PAIR((long) ((llval) >> 32), (long) (llval))
 
-#define _STR(_arg) #_arg
 #define ARG_STR(_arg) (_arg), #_arg
 #define ARG_ULL_STR(_arg) _arg##ULL, #_arg
 
diff --git a/tests/trace_personality_32.gen.test b/tests/trace_personality_32.gen.test
new file mode 100755
index 0000000..a5f5c7d
--- /dev/null
+++ b/tests/trace_personality_32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_32 +qualify_personality.sh 32 'getcwd' 'fsync-y'); do not edit.
+set -- 32 'getcwd' 'fsync-y'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests/trace_personality_32.in b/tests/trace_personality_32.in
new file mode 100644
index 0000000..9da47c1
--- /dev/null
+++ b/tests/trace_personality_32.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests/trace_personality_64.gen.test b/tests/trace_personality_64.gen.test
new file mode 100755
index 0000000..5b961ef
--- /dev/null
+++ b/tests/trace_personality_64.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_64 +qualify_personality.sh 64 'getcwd' 'fsync-y'); do not edit.
+set -- 64 'getcwd' 'fsync-y'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests/trace_personality_64.in b/tests/trace_personality_64.in
new file mode 100644
index 0000000..9da47c1
--- /dev/null
+++ b/tests/trace_personality_64.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests/trace_personality_regex_32.gen.test b/tests/trace_personality_regex_32.gen.test
new file mode 100755
index 0000000..f2800d2
--- /dev/null
+++ b/tests/trace_personality_regex_32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_regex_32 +qualify_personality.sh 32 '/clock.*' 'times|fcntl.*'); do not edit.
+set -- 32 '/clock.*' 'times|fcntl.*'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests/trace_personality_regex_32.in b/tests/trace_personality_regex_32.in
new file mode 100755
index 0000000..864de29
--- /dev/null
+++ b/tests/trace_personality_regex_32.in
@@ -0,0 +1,3 @@
+clock_adjtime	-a37
+clock_nanosleep
+clock_xettime	-a36
diff --git a/tests/trace_personality_regex_64.gen.test b/tests/trace_personality_regex_64.gen.test
new file mode 100755
index 0000000..4b19f1b
--- /dev/null
+++ b/tests/trace_personality_regex_64.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_regex_64 +qualify_personality.sh 64 '/clock.*' 'times|fcntl.*'); do not edit.
+set -- 64 '/clock.*' 'times|fcntl.*'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests/trace_personality_regex_64.in b/tests/trace_personality_regex_64.in
new file mode 100755
index 0000000..864de29
--- /dev/null
+++ b/tests/trace_personality_regex_64.in
@@ -0,0 +1,3 @@
+clock_adjtime	-a37
+clock_nanosleep
+clock_xettime	-a36
diff --git a/tests/trace_personality_regex_x32.gen.test b/tests/trace_personality_regex_x32.gen.test
new file mode 100755
index 0000000..7f41671
--- /dev/null
+++ b/tests/trace_personality_regex_x32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_regex_x32 +qualify_personality.sh x32 '/clock.*' 'times|fcntl.*'); do not edit.
+set -- x32 '/clock.*' 'times|fcntl.*'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests/trace_personality_regex_x32.in b/tests/trace_personality_regex_x32.in
new file mode 100755
index 0000000..864de29
--- /dev/null
+++ b/tests/trace_personality_regex_x32.in
@@ -0,0 +1,3 @@
+clock_adjtime	-a37
+clock_nanosleep
+clock_xettime	-a36
diff --git a/tests/trace_personality_x32.gen.test b/tests/trace_personality_x32.gen.test
new file mode 100755
index 0000000..724499a
--- /dev/null
+++ b/tests/trace_personality_x32.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (trace_personality_x32 +qualify_personality.sh x32 'getcwd' 'fsync-y'); do not edit.
+set -- x32 'getcwd' 'fsync-y'
+. "${srcdir=.}/qualify_personality.sh"
diff --git a/tests/trace_personality_x32.in b/tests/trace_personality_x32.in
new file mode 100644
index 0000000..9da47c1
--- /dev/null
+++ b/tests/trace_personality_x32.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests/xet_thread_area_x86.c b/tests/xet_thread_area_x86.c
index 36591ec..d5be69f 100644
--- a/tests/xet_thread_area_x86.c
+++ b/tests/xet_thread_area_x86.c
@@ -152,9 +152,9 @@
 
 int main(void)
 {
-	struct user_desc *ta1 = tail_alloc(sizeof(*ta1));
-	struct user_desc *ta2 = tail_alloc(sizeof(*ta2));
-	unsigned *bogus_entry_number = tail_alloc(sizeof(*bogus_entry_number));
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct user_desc, ta1);
+	TAIL_ALLOC_OBJECT_CONST_PTR(struct user_desc, ta2);
+	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned int, bogus_entry_number);
 
 	long set_rc = -1;
 
diff --git a/time.c b/time.c
index 038c32f..1f44dca 100644
--- a/time.c
+++ b/time.c
@@ -116,7 +116,8 @@
 SYS_FUNC(getitimer)
 {
 	if (entering(tcp)) {
-		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
+		printxval_index(itimer_which, (unsigned int) tcp->u_arg[0],
+				"ITIMER_???");
 		tprints(", ");
 	} else {
 		print_itimerval(tcp, tcp->u_arg[1]);
@@ -128,7 +129,8 @@
 SYS_FUNC(osf_getitimer)
 {
 	if (entering(tcp)) {
-		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
+		printxval_index(itimer_which, (unsigned int) tcp->u_arg[0],
+				"ITIMER_???");
 		tprints(", ");
 	} else {
 		print_itimerval32(tcp, tcp->u_arg[1]);
@@ -140,7 +142,8 @@
 SYS_FUNC(setitimer)
 {
 	if (entering(tcp)) {
-		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
+		printxval_index(itimer_which, (unsigned int) tcp->u_arg[0],
+				"ITIMER_???");
 		tprints(", ");
 		print_itimerval(tcp, tcp->u_arg[1]);
 		tprints(", ");
@@ -154,7 +157,8 @@
 SYS_FUNC(osf_setitimer)
 {
 	if (entering(tcp)) {
-		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
+		printxval_index(itimer_which, (unsigned int) tcp->u_arg[0],
+				"ITIMER_???");
 		tprints(", ");
 		print_itimerval32(tcp, tcp->u_arg[1]);
 		tprints(", ");
@@ -172,7 +176,8 @@
 {
 	if (print_timex(tcp, addr))
 		return 0;
-	tcp->auxstr = xlookup(adjtimex_state, (kernel_ulong_t) tcp->u_rval);
+	tcp->auxstr = xlat_idx(adjtimex_state, ARRAY_SIZE(adjtimex_state) - 1,
+			       (kernel_ulong_t) tcp->u_rval);
 	return RVAL_STR;
 }
 
@@ -196,16 +201,19 @@
 		if ((clockid & CLOCKFD_MASK) == CLOCKFD)
 			tprintf("FD_TO_CLOCKID(%d)", CLOCKID_TO_FD(clockid));
 		else {
-			if (CPUCLOCK_PERTHREAD(clockid))
-				tprintf("MAKE_THREAD_CPUCLOCK(%d,", CPUCLOCK_PID(clockid));
-			else
-				tprintf("MAKE_PROCESS_CPUCLOCK(%d,", CPUCLOCK_PID(clockid));
-			printxval(cpuclocknames, clockid & CLOCKFD_MASK, "CPUCLOCK_???");
+			tprintf("%s(%d,",
+				CPUCLOCK_PERTHREAD(clockid) ?
+					"MAKE_THREAD_CPUCLOCK" :
+					"MAKE_PROCESS_CPUCLOCK",
+				CPUCLOCK_PID(clockid));
+			printxval_index(cpuclocknames,
+					(unsigned int) clockid & CLOCKFD_MASK,
+					"CPUCLOCK_???");
 			tprints(")");
 		}
 	} else
 #endif
-		printxval(clocknames, clockid, "CLOCK_???");
+		printxval_index(clocknames, clockid, "CLOCK_???");
 }
 
 SYS_FUNC(clock_settime)
diff --git a/uid.c b/uid.c
index d8b169a..c56bf17 100644
--- a/uid.c
+++ b/uid.c
@@ -180,7 +180,7 @@
 
 	uid_t gid;
 	print_array(tcp, addr, len, &gid, sizeof(gid),
-		    umoven_or_printaddr, print_gid, 0);
+		    tfetch_mem, print_gid, 0);
 }
 
 SYS_FUNC(setgroups)
diff --git a/unwind-libdw.c b/unwind-libdw.c
new file mode 100644
index 0000000..6039146
--- /dev/null
+++ b/unwind-libdw.c
@@ -0,0 +1,211 @@
+/*
+ * This file is based on a patch submitted by Mark Wielaard <mjw@redhat.com>
+ * to ltrace project:
+ * https://anonscm.debian.org/cgit/collab-maint/ltrace.git/commit/?id=dfefa9f057857735a073ea655f5cb34351032c8e
+ *
+ * It was re-licensed for strace by the original author:
+ * https://lists.strace.io/pipermail/strace-devel/2018-March/008063.html
+ *
+ * Copyright (c) 2014-2018 Mark Wielaard <mjw@redhat.com>
+ * Copyright (c) 2018 Masatake YAMATO <yamato@redhat.com>
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR 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 "unwind.h"
+#include "mmap_notify.h"
+#include <elfutils/libdwfl.h>
+
+struct ctx {
+	Dwfl *dwfl;
+	unsigned int last_proc_updating;
+};
+
+static unsigned int mapping_generation;
+
+static void
+update_mapping_generation(struct tcb *tcp, void *unused)
+{
+	mapping_generation++;
+}
+
+static void
+init(void)
+{
+	mmap_notify_register_client(update_mapping_generation, NULL);
+}
+
+static void *
+tcb_init(struct tcb *tcp)
+{
+	static const Dwfl_Callbacks proc_callbacks = {
+		.find_elf = dwfl_linux_proc_find_elf,
+		.find_debuginfo = dwfl_standard_find_debuginfo
+	};
+
+	Dwfl *dwfl = dwfl_begin(&proc_callbacks);
+	if (dwfl == NULL) {
+		error_msg("dwfl_begin: %s", dwfl_errmsg(-1));
+		return NULL;
+	}
+
+	int r = dwfl_linux_proc_attach(dwfl, tcp->pid, true);
+	if (r) {
+		const char *msg = NULL;
+
+		if (r < 0)
+			msg = dwfl_errmsg(-1);
+		else if (r > 0)
+			msg = strerror(r);
+
+		error_msg("dwfl_linux_proc_attach returned an error"
+			  " for process %d: %s", tcp->pid, msg);
+		dwfl_end(dwfl);
+		return NULL;
+	}
+
+	struct ctx *ctx = xmalloc(sizeof(*ctx));
+	ctx->dwfl = dwfl;
+	ctx->last_proc_updating = 0;
+	return ctx;
+}
+
+static void
+tcb_fin(struct tcb *tcp)
+{
+	struct ctx *ctx = tcp->unwind_ctx;
+	if (ctx) {
+		dwfl_end(ctx->dwfl);
+		free(ctx);
+	}
+}
+
+static void
+flush_cache_maybe(struct tcb *tcp)
+{
+	struct ctx *ctx = tcp->unwind_ctx;
+	if (!ctx)
+		return;
+
+	if (ctx->last_proc_updating == mapping_generation)
+		return;
+
+	int r = dwfl_linux_proc_report(ctx->dwfl, tcp->pid);
+
+	if (r < 0)
+		error_msg("dwfl_linux_proc_report returned an error"
+			  " for pid %d: %s", tcp->pid, dwfl_errmsg(-1));
+	else if (r > 0)
+		error_msg("dwfl_linux_proc_report returned an error"
+			  " for pid %d", tcp->pid);
+	else if (dwfl_report_end(ctx->dwfl, NULL, NULL) != 0)
+		error_msg("dwfl_report_end returned an error"
+			  " for pid %d: %s", tcp->pid, dwfl_errmsg(-1));
+
+	ctx->last_proc_updating = mapping_generation;
+}
+
+struct frame_user_data {
+	unwind_call_action_fn call_action;
+	unwind_error_action_fn error_action;
+	void *data;
+	int stack_depth;
+};
+
+static int
+frame_callback(Dwfl_Frame *state, void *arg)
+{
+	struct frame_user_data *user_data = arg;
+	Dwarf_Addr pc;
+	bool isactivation;
+
+	if (!dwfl_frame_pc(state, &pc, &isactivation)) {
+		/* Propagate the error to the caller.  */
+		return -1;
+	}
+
+	if (!isactivation)
+		pc--;
+
+	Dwfl *dwfl = dwfl_thread_dwfl(dwfl_frame_thread(state));
+	Dwfl_Module *mod = dwfl_addrmodule(dwfl, pc);
+	GElf_Off off = 0;
+
+	if (mod != NULL) {
+		const char *modname = NULL;
+		const char *symname = NULL;
+		GElf_Sym sym;
+		Dwarf_Addr true_offset = pc;
+
+		modname = dwfl_module_info(mod, NULL, NULL, NULL, NULL,
+					   NULL, NULL, NULL);
+		symname = dwfl_module_addrinfo(mod, pc, &off, &sym,
+					       NULL, NULL, NULL);
+		dwfl_module_relocate_address(mod, &true_offset);
+		user_data->call_action(user_data->data, modname, symname,
+				       off, true_offset);
+	}
+	/* Max number of frames to print reached? */
+	if (user_data->stack_depth-- == 0)
+		return DWARF_CB_ABORT;
+
+	return DWARF_CB_OK;
+}
+
+static void
+tcb_walk(struct tcb *tcp,
+	 unwind_call_action_fn call_action,
+	 unwind_error_action_fn error_action,
+	 void *data)
+{
+	struct ctx *ctx = tcp->unwind_ctx;
+	if (!ctx)
+		return;
+
+	struct frame_user_data user_data = {
+		.call_action = call_action,
+		.error_action = error_action,
+		.data = data,
+		.stack_depth = 256,
+	};
+
+	flush_cache_maybe(tcp);
+
+	int r = dwfl_getthread_frames(ctx->dwfl, tcp->pid, frame_callback,
+				      &user_data);
+	if (r)
+		error_action(data,
+			     r < 0 ? dwfl_errmsg(-1) : "too many stack frames",
+			     0);
+}
+
+const struct unwind_unwinder_t unwinder = {
+	.name = "libdw",
+	.init = init,
+	.tcb_init = tcb_init,
+	.tcb_fin = tcb_fin,
+	.tcb_walk = tcb_walk,
+};
diff --git a/unwind-libunwind.c b/unwind-libunwind.c
index 38b3e2c..692f766 100644
--- a/unwind-libunwind.c
+++ b/unwind-libunwind.c
@@ -36,6 +36,8 @@
 static void
 init(void)
 {
+	mmap_cache_enable();
+
 	libunwind_as = unw_create_addr_space(&_UPT_accessors, 0);
 	if (!libunwind_as)
 		error_msg_and_die("failed to create address space"
@@ -87,26 +89,25 @@
 		  size_t *symbol_name_size)
 {
 	unw_word_t ip;
-	struct mmap_cache_t *cur_mmap_cache;
 
 	if (unw_get_reg(cursor, UNW_REG_IP, &ip) < 0) {
 		perror_msg("cannot walk the stack of process %d", tcp->pid);
 		return -1;
 	}
 
-	cur_mmap_cache = mmap_cache_search(tcp, ip);
-	if (cur_mmap_cache
+	struct mmap_cache_entry_t *entry = mmap_cache_search(tcp, ip);
+
+	if (entry
 	    /* ignore mappings that have no PROT_EXEC bit set */
-	    && (cur_mmap_cache->protections & MMAP_CACHE_PROT_EXECUTABLE)) {
-		unsigned long true_offset;
+	    && (entry->protections & MMAP_CACHE_PROT_EXECUTABLE)) {
 		unw_word_t function_offset;
 
 		get_symbol_name(cursor, symbol_name, symbol_name_size,
 				&function_offset);
-		true_offset = ip - cur_mmap_cache->start_addr +
-			cur_mmap_cache->mmap_offset;
+		unsigned long true_offset =
+			ip - entry->start_addr + entry->mmap_offset;
 		call_action(data,
-			    cur_mmap_cache->binary_filename,
+			    entry->binary_filename,
 			    *symbol_name,
 			    function_offset,
 			    true_offset);
@@ -125,10 +126,10 @@
 }
 
 static void
-tcb_walk(struct tcb *tcp,
-	 unwind_call_action_fn call_action,
-	 unwind_error_action_fn error_action,
-	 void *data)
+walk(struct tcb *tcp,
+     unwind_call_action_fn call_action,
+     unwind_error_action_fn error_action,
+     void *data)
 {
 	char *symbol_name;
 	size_t symbol_name_size = 40;
@@ -137,8 +138,6 @@
 
 	if (!tcp->mmap_cache)
 		error_func_msg_and_die("mmap_cache is NULL");
-	if (tcp->mmap_cache_size == 0)
-		error_func_msg_and_die("mmap_cache is empty");
 
 	symbol_name = xmalloc(symbol_name_size);
 
@@ -159,9 +158,27 @@
 }
 
 static void
-tcb_flush_cache(struct tcb *tcp)
+tcb_walk(struct tcb *tcp,
+	 unwind_call_action_fn call_action,
+	 unwind_error_action_fn error_action,
+	 void *data)
 {
-	unw_flush_cache(libunwind_as, 0, 0);
+	switch (mmap_cache_rebuild_if_invalid(tcp, __func__)) {
+		case MMAP_CACHE_REBUILD_RENEWED:
+			/*
+			 * Rebuild the unwinder internal cache.
+			 * Called when mmap cache subsystem detects a
+			 * change of tracee memory mapping.
+			 */
+			unw_flush_cache(libunwind_as, 0, 0);
+			ATTRIBUTE_FALLTHROUGH;
+		case MMAP_CACHE_REBUILD_READY:
+			walk(tcp, call_action, error_action, data);
+			break;
+		default:
+			/* Do nothing */
+			;
+	}
 }
 
 const struct unwind_unwinder_t unwinder = {
@@ -170,5 +187,4 @@
 	.tcb_init = tcb_init,
 	.tcb_fin = tcb_fin,
 	.tcb_walk = tcb_walk,
-	.tcb_flush_cache = tcb_flush_cache,
 };
diff --git a/unwind.c b/unwind.c
index 41d0740..e4c6623 100644
--- a/unwind.c
+++ b/unwind.c
@@ -26,7 +26,6 @@
  */
 
 #include "defs.h"
-#include "mmap_cache.h"
 #include "unwind.h"
 
 #ifdef USE_DEMANGLE
@@ -59,7 +58,6 @@
 {
 	if (unwinder.init)
 		unwinder.init();
-	mmap_cache_enable();
 }
 
 void
@@ -78,6 +76,9 @@
 void
 unwind_tcb_fin(struct tcb *tcp)
 {
+	if (!tcp->unwind_queue)
+		return;
+
 	queue_print(tcp->unwind_queue);
 	free(tcp->unwind_queue);
 	tcp->unwind_queue = NULL;
@@ -293,19 +294,8 @@
 		debug_func_msg("head: tcp=%p, queue=%p",
 			       tcp, tcp->unwind_queue->head);
 		queue_print(tcp->unwind_queue);
-	} else switch (mmap_cache_rebuild_if_invalid(tcp, __func__)) {
-		case MMAP_CACHE_REBUILD_RENEWED:
-			unwinder.tcb_flush_cache(tcp);
-			ATTRIBUTE_FALLTHROUGH;
-		case MMAP_CACHE_REBUILD_READY:
-			debug_func_msg("walk: tcp=%p, queue=%p",
-				       tcp, tcp->unwind_queue->head);
-			unwinder.tcb_walk(tcp, print_call_cb, print_error_cb, NULL);
-			break;
-		default:
-			/* Do nothing */
-			;
-	}
+	} else
+		unwinder.tcb_walk(tcp, print_call_cb, print_error_cb, NULL);
 }
 
 /*
@@ -322,19 +312,10 @@
 #endif
 	if (tcp->unwind_queue->head)
 		error_msg_and_die("bug: unprinted entries in queue");
-
-	switch (mmap_cache_rebuild_if_invalid(tcp, __func__)) {
-	case MMAP_CACHE_REBUILD_RENEWED:
-		unwinder.tcb_flush_cache(tcp);
-		ATTRIBUTE_FALLTHROUGH;
-	case MMAP_CACHE_REBUILD_READY:
-		unwinder.tcb_walk(tcp, queue_put_call, queue_put_error,
-				   tcp->unwind_queue);
-		debug_func_msg("tcp=%p, queue=%p",
+	else {
+		debug_func_msg("walk: tcp=%p, queue=%p",
 			       tcp, tcp->unwind_queue->head);
-		break;
-	default:
-		/* Do nothing */
-		;
+		unwinder.tcb_walk(tcp, queue_put_call, queue_put_error,
+				  tcp->unwind_queue);
 	}
 }
diff --git a/unwind.h b/unwind.h
index 3a6065b..678c561 100644
--- a/unwind.h
+++ b/unwind.h
@@ -63,12 +63,6 @@
 			   unwind_call_action_fn,
 			   unwind_error_action_fn,
 			   void *);
-
-	/*
-	 * Rebuild the unwinder internal cache.  Called when mmap cache
-	 * subsystem detects a change of tracee memory mapping.
-	 */
-	void   (*tcb_flush_cache)(struct tcb *);
 };
 
 extern const struct unwind_unwinder_t unwinder;
diff --git a/util.c b/util.c
index ce51662..035f57b 100644
--- a/util.c
+++ b/util.c
@@ -44,6 +44,7 @@
 #include <sys/uio.h>
 
 #include "largefile_wrappers.h"
+#include "xlat.h"
 #include "xstring.h"
 
 int
@@ -236,12 +237,6 @@
 		tprintf("%#" PRIx64, addr);
 }
 
-void
-printaddr(const kernel_ulong_t addr)
-{
-	printaddr64(addr);
-}
-
 #define DEF_PRINTNUM(name, type) \
 bool									\
 printnum_ ## name(struct tcb *const tcp, const kernel_ulong_t addr,	\
@@ -693,7 +688,8 @@
 
 	alloc_size = 4 * size;
 	if (alloc_size / 4 != size) {
-		error_msg("Out of memory");
+		error_func_msg("requested %u bytes exceeds %u bytes limit",
+			       size, -1U / 4);
 		tprints("???");
 		return -1;
 	}
@@ -706,7 +702,8 @@
 	} else {
 		outstr = buf = malloc(alloc_size);
 		if (!buf) {
-			error_msg("Out of memory");
+			error_func_msg("memory exhausted when tried to allocate"
+				       " %u bytes", alloc_size);
 			tprints("???");
 			return -1;
 		}
@@ -870,25 +867,30 @@
 	} iovu;
 #define iov iovu.iov64
 #define sizeof_iov \
-	(current_wordsize == 4 ? sizeof(*iovu.iov32) : sizeof(*iovu.iov64))
+	(current_wordsize == 4 ? (unsigned int) sizeof(*iovu.iov32)	\
+			       : (unsigned int) sizeof(*iovu.iov64))
 #define iov_iov_base(i) \
 	(current_wordsize == 4 ? (uint64_t) iovu.iov32[i].base : iovu.iov64[i].base)
 #define iov_iov_len(i) \
 	(current_wordsize == 4 ? (uint64_t) iovu.iov32[i].len : iovu.iov64[i].len)
 #else
 	struct iovec *iov;
-#define sizeof_iov sizeof(*iov)
+#define sizeof_iov ((unsigned int) sizeof(*iov))
 #define iov_iov_base(i) ptr_to_kulong(iov[i].iov_base)
 #define iov_iov_len(i) iov[i].iov_len
 #endif
 	int i;
-	unsigned size;
+	unsigned int size = sizeof_iov * len;
+	if (size / sizeof_iov != (unsigned int) len) {
+		error_func_msg("requested %u iovec elements exceeds"
+			       " %u iovec limit", len, -1U / sizeof_iov);
+		return;
+	}
 
-	size = sizeof_iov * len;
-	/* Assuming no sane program has millions of iovs */
-	if ((unsigned)len > 1024*1024 /* insane or negative size? */
-	    || (iov = malloc(size)) == NULL) {
-		error_msg("Out of memory");
+	iov = malloc(size);
+	if (!iov) {
+		error_func_msg("memory exhausted when tried to allocate"
+			       " %u bytes", size);
 		return;
 	}
 	if (umoven(tcp, addr, size, iov) >= 0) {
@@ -928,6 +930,9 @@
 	const unsigned char *src;
 	int i;
 
+	if ((len < 0) || (len > INT_MAX - 16))
+		return;
+
 	memset(outbuf, ' ', sizeof(outbuf));
 
 	if (strsize < len + 16) {
@@ -935,7 +940,8 @@
 		str = malloc(len + 16);
 		if (!str) {
 			strsize = -1;
-			error_msg("Out of memory");
+			error_func_msg("memory exhausted when tried to allocate"
+				       " %zu bytes", (size_t) (len + 16));
 			return;
 		}
 		strsize = len + 16;
@@ -983,29 +989,70 @@
 	}
 }
 
-int
-umoven_or_printaddr(struct tcb *const tcp, const kernel_ulong_t addr,
-		    const unsigned int len, void *const our_addr)
+bool
+tfetch_mem64(struct tcb *const tcp, const uint64_t addr,
+	     const unsigned int len, void *const our_addr)
 {
-	if (!addr || !verbose(tcp) || (exiting(tcp) && syserror(tcp)) ||
-	    umoven(tcp, addr, len, our_addr) < 0) {
-		printaddr(addr);
-		return -1;
-	}
-	return 0;
+	return addr && verbose(tcp) &&
+	       (entering(tcp) || !syserror(tcp)) &&
+	       !umoven(tcp, addr, len, our_addr);
+}
+
+bool
+tfetch_mem64_ignore_syserror(struct tcb *const tcp, const uint64_t addr,
+			     const unsigned int len, void *const our_addr)
+{
+	return addr && verbose(tcp) &&
+	       !umoven(tcp, addr, len, our_addr);
 }
 
 int
-umoven_or_printaddr_ignore_syserror(struct tcb *const tcp,
-				    const kernel_ulong_t addr,
-				    const unsigned int len,
-				    void *const our_addr)
+umoven_or_printaddr64(struct tcb *const tcp, const uint64_t addr,
+		      const unsigned int len, void *const our_addr)
 {
-	if (!addr || !verbose(tcp) || umoven(tcp, addr, len, our_addr) < 0) {
-		printaddr(addr);
-		return -1;
-	}
-	return 0;
+	if (tfetch_mem64(tcp, addr, len, our_addr))
+		return 0;
+	printaddr64(addr);
+	return -1;
+}
+
+int
+umoven_or_printaddr64_ignore_syserror(struct tcb *const tcp,
+				      const uint64_t addr,
+				      const unsigned int len,
+				      void *const our_addr)
+{
+	if (tfetch_mem64_ignore_syserror(tcp, addr, len, our_addr))
+		return 0;
+	printaddr64(addr);
+	return -1;
+}
+
+bool
+print_int32_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size,
+			 void *data)
+{
+	tprintf("%" PRId32, *(int32_t *) elem_buf);
+
+	return true;
+}
+
+bool
+print_uint32_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size,
+			  void *data)
+{
+	tprintf("%" PRIu32, *(uint32_t *) elem_buf);
+
+	return true;
+}
+
+bool
+print_uint64_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size,
+			  void *data)
+{
+	tprintf("%" PRIu64, *(uint64_t *) elem_buf);
+
+	return true;
 }
 
 /*
@@ -1014,8 +1061,8 @@
  *
  * Array elements are being fetched to the address specified by elem_buf.
  *
- * The fetcher callback function specified by umoven_func should follow
- * the same semantics as umoven_or_printaddr function.
+ * The fetcher callback function specified by tfetch_mem_func should follow
+ * the same semantics as tfetch_mem function.
  *
  * The printer callback function specified by print_func is expected
  * to print something; if it returns false, no more iterations will be made.
@@ -1027,9 +1074,7 @@
  * - "NULL", if start_addr is NULL;
  * - "[]", if nmemb is 0;
  * - start_addr, if nmemb * elem_size overflows or wraps around;
- * - nothing, if the first element cannot be fetched
- *   (if umoven_func returns non-zero), but it is assumed that
- *   umoven_func has printed the address it failed to fetch data from;
+ * - start_addr, if the first tfetch_mem_func invocation returned false;
  * - elements of the array, delimited by ", ", with the array itself
  *   enclosed with [] brackets.
  *
@@ -1038,25 +1083,22 @@
  * - "..." is printed instead of max_strlen+1 element
  *   and no more iterations will be made.
  *
- * This function returns true only if
- * - umoven_func has been called at least once AND
- * - umoven_func has not returned false.
+ * This function returns true only if tfetch_mem_func has returned true
+ * at least once.
  */
 bool
-print_array(struct tcb *const tcp,
-	    const kernel_ulong_t start_addr,
-	    const size_t nmemb,
-	    void *const elem_buf,
-	    const size_t elem_size,
-	    int (*const umoven_func)(struct tcb *,
-				     kernel_ulong_t,
-				     unsigned int,
-				     void *),
-	    bool (*const print_func)(struct tcb *,
-				     void *elem_buf,
-				     size_t elem_size,
-				     void *opaque_data),
-	    void *const opaque_data)
+print_array_ex(struct tcb *const tcp,
+	       const kernel_ulong_t start_addr,
+	       const size_t nmemb,
+	       void *const elem_buf,
+	       const size_t elem_size,
+	       tfetch_mem_fn tfetch_mem_func,
+	       print_fn print_func,
+	       void *const opaque_data,
+	       unsigned int flags,
+	       const struct xlat *index_xlat,
+	       size_t index_xlat_size,
+	       const char *index_dflt)
 {
 	if (!start_addr) {
 		tprints("NULL");
@@ -1080,13 +1122,22 @@
 		(abbrev(tcp) && max_strlen < nmemb) ?
 			start_addr + elem_size * max_strlen : end_addr;
 	kernel_ulong_t cur;
+	kernel_ulong_t idx = 0;
+	enum xlat_style xlat_style = flags & XLAT_STYLE_MASK;
 
-	for (cur = start_addr; cur < end_addr; cur += elem_size) {
+	for (cur = start_addr; cur < end_addr; cur += elem_size, idx++) {
 		if (cur != start_addr)
 			tprints(", ");
 
-		if (umoven_func(tcp, cur, elem_size, elem_buf))
+		if (!tfetch_mem_func(tcp, cur, elem_size, elem_buf)) {
+			if (cur == start_addr)
+				printaddr(cur);
+			else {
+				tprints("...");
+				printaddr_comment(cur);
+			}
 			break;
+		}
 
 		if (cur == start_addr)
 			tprints("[");
@@ -1097,6 +1148,25 @@
 			break;
 		}
 
+		if (flags & PAF_PRINT_INDICES) {
+			tprints("[");
+
+			if (!index_xlat) {
+				print_xlat_ex(idx, NULL, xlat_style);
+			} else if (flags & PAF_INDEX_XLAT_VALUE_INDEXED) {
+				printxval_indexn_ex(index_xlat,
+						    index_xlat_size, idx,
+						    index_dflt, xlat_style);
+			} else {
+				printxvals_ex(idx, index_dflt, xlat_style,
+					      (flags & PAF_INDEX_XLAT_SORTED)
+						&& idx ? NULL : index_xlat,
+					      NULL);
+			}
+
+			tprints("] = ");
+		}
+
 		if (!print_func(tcp, elem_buf, elem_size, opaque_data)) {
 			cur = end_addr;
 			break;
diff --git a/v4l2.c b/v4l2.c
index 7081c81..da1eb55 100644
--- a/v4l2.c
+++ b/v4l2.c
@@ -64,17 +64,6 @@
 #include "print_fields.h"
 #include "xstring.h"
 
-/* some historical constants */
-#ifndef V4L2_CID_HCENTER
-#define V4L2_CID_HCENTER (V4L2_CID_BASE+22)
-#endif
-#ifndef V4L2_CID_VCENTER
-#define V4L2_CID_VCENTER (V4L2_CID_BASE+23)
-#endif
-#ifndef V4L2_CID_BAND_STOP_FILTER
-#define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33)
-#endif
-
 /* v4l2_fourcc_be was added by Linux commit v3.18-rc1~101^2^2~127 */
 #ifndef v4l2_fourcc_be
 # define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1 << 31))
@@ -281,7 +270,7 @@
 		tprintf(", chromakey=%#x, clips=", f->fmt.win.chromakey);
 		ret = print_array(tcp, ptr_to_kulong(f->fmt.win.clips),
 				  f->fmt.win.clipcount, &clip, sizeof(clip),
-				  umoven_or_printaddr, print_v4l2_clip, 0);
+				  tfetch_mem, print_v4l2_clip, 0);
 		tprintf(", clipcount=%u, bitmap=", f->fmt.win.clipcount);
 		printaddr(ptr_to_kulong(f->fmt.win.bitmap));
 #ifdef HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA
@@ -624,6 +613,12 @@
 	return RVAL_IOCTL_DECODED;
 }
 
+/*
+ * We include it here and not before print_v4l2_ext_controls as we need
+ * V4L2_CTRL_CLASS_* definitions for V4L2_CID_*_BASE ones.
+ */
+#include "xlat/v4l2_control_classes.h"
+#include "xlat/v4l2_control_id_bases.h"
 #include "xlat/v4l2_control_ids.h"
 
 static int
@@ -729,7 +724,8 @@
 		const unsigned long next = c.id & V4L2_CTRL_FLAG_NEXT_CTRL;
 		set_tcb_priv_ulong(tcp, next);
 		if (next) {
-			tprints("V4L2_CTRL_FLAG_NEXT_CTRL|");
+			print_xlat(V4L2_CTRL_FLAG_NEXT_CTRL);
+			tprints("|");
 			c.id &= ~V4L2_CTRL_FLAG_NEXT_CTRL;
 		}
 #endif
@@ -824,8 +820,6 @@
 	return true;
 }
 
-#include "xlat/v4l2_control_classes.h"
-
 static int
 print_v4l2_ext_controls(struct tcb *const tcp, const kernel_ulong_t arg,
 			const bool is_get)
@@ -859,7 +853,7 @@
 	struct_v4l2_ext_control ctrl;
 	bool fail = !print_array(tcp, ptr_to_kulong(c.controls), c.count,
 				 &ctrl, sizeof(ctrl),
-				 umoven_or_printaddr_ignore_syserror,
+				 tfetch_mem_ignore_syserror,
 				 print_v4l2_ext_control, 0);
 
 	if (exiting(tcp) && syserror(tcp))
diff --git a/xlat.c b/xlat.c
index be58f72..4614cef 100644
--- a/xlat.c
+++ b/xlat.c
@@ -33,12 +33,54 @@
 #include "xstring.h"
 #include <stdarg.h>
 
+static inline enum xlat_style
+get_xlat_style(enum xlat_style style)
+{
+	if (xlat_verbose(style) == XLAT_STYLE_DEFAULT)
+		return style | xlat_verbosity;
+
+	return style;
+}
+
+static inline const char *
+sprint_xlat_val(uint64_t val, enum xlat_style style)
+{
+	static char buf[sizeof(val) * 3];
+
+	switch (xlat_format(style)) {
+	case XLAT_STYLE_FMT_D:
+		xsprintf(buf, "%" PRId64, val);
+		break;
+
+	case XLAT_STYLE_FMT_U:
+		xsprintf(buf, "%" PRIu64, val);
+		break;
+
+	case XLAT_STYLE_FMT_X:
+		xsprintf(buf, "%#" PRIx64, val);
+		break;
+	}
+
+	return buf;
+}
+
+static inline void
+print_xlat_val(uint64_t val, enum xlat_style style)
+{
+	tprints(sprint_xlat_val(val, style));
+}
+
 const char *
 xlookup(const struct xlat *xlat, const uint64_t val)
 {
-	for (; xlat->str != NULL; xlat++)
-		if (xlat->val == val)
-			return xlat->str;
+	static const struct xlat *pos;
+
+	if (xlat)
+		pos = xlat;
+
+	for (; pos->str != NULL; pos++)
+		if (pos->val == val)
+			return pos->str;
 	return NULL;
 }
 
@@ -53,59 +95,109 @@
 const char *
 xlat_search(const struct xlat *xlat, const size_t nmemb, const uint64_t val)
 {
+	static const struct xlat *pos;
+	static size_t memb_left;
+
+	if (xlat) {
+		pos = xlat;
+		memb_left = nmemb;
+	}
+
 	const struct xlat *e =
 		bsearch((const void *) &val,
-			xlat, nmemb, sizeof(*xlat), xlat_bsearch_compare);
+			pos, memb_left, sizeof(*pos), xlat_bsearch_compare);
 
-	return e ? e->str : NULL;
+	if (e) {
+		memb_left -= e - pos;
+		return e->str;
+	} else {
+		return NULL;
+	}
 }
 
 /**
  * Print entry in struct xlat table, if there.
  *
- * @param val  Value to search a literal representation for.
- * @param dflt String (abbreviated in comment syntax) which should be emitted
- *             if no appropriate xlat value has been found.
- * @param xlat (And the following arguments) Pointers to arrays of xlat values.
- *             The last argument should be NULL.
- * @return     1 if appropriate xlat value has been found, 0 otherwise.
+ * @param val   Value to search a literal representation for.
+ * @param dflt  String (abbreviated in comment syntax) which should be emitted
+ *              if no appropriate xlat value has been found.
+ * @param style Style in which xlat value should be printed.
+ * @param xlat  (And the following arguments) Pointers to arrays of xlat values.
+ *              The last argument should be NULL.
+ * @return      1 if appropriate xlat value has been found, 0 otherwise.
  */
 int
-printxvals(const uint64_t val, const char *dflt, const struct xlat *xlat, ...)
+printxvals_ex(const uint64_t val, const char *dflt, enum xlat_style style,
+	      const struct xlat *xlat, ...)
 {
+	static const struct xlat *last;
+
+	style = get_xlat_style(style);
+
+	if (xlat_verbose(style) == XLAT_STYLE_RAW) {
+		print_xlat_val(val, style);
+		return 0;
+	}
+
+	const char *str = NULL;
 	va_list args;
 
 	va_start(args, xlat);
+
+	if (!xlat)
+		xlat = last;
+
 	for (; xlat; xlat = va_arg(args, const struct xlat *)) {
-		const char *str = xlookup(xlat, val);
+		last = xlat;
+
+		str = xlookup(xlat, val);
 
 		if (str) {
-			tprints(str);
-			va_end(args);
-			return 1;
+			if (xlat_verbose(style) == XLAT_STYLE_VERBOSE) {
+				print_xlat_val(val, style);
+				tprints_comment(str);
+			} else {
+				tprints(str);
+			}
+
+			goto printxvals_ex_end;
 		}
 	}
+
 	/* No hits -- print raw # instead. */
-	tprintf("%#" PRIx64, val);
+	print_xlat_val(val, style);
 	tprints_comment(dflt);
 
+printxvals_ex_end:
 	va_end(args);
 
-	return 0;
+	return !!str;
 }
 
 int
-sprintxval(char *const buf, const size_t size, const struct xlat *const x,
-	   const unsigned int val, const char *const dflt)
+sprintxval_ex(char *const buf, const size_t size, const struct xlat *const x,
+	      const unsigned int val, const char *const dflt,
+	      enum xlat_style style)
 {
+	style = get_xlat_style(style);
+
+	if (xlat_verbose(style) == XLAT_STYLE_RAW)
+		return xsnprintf(buf, size, "%s", sprint_xlat_val(val, style));
+
 	const char *const str = xlookup(x, val);
 
-	if (str)
-		return xsnprintf(buf, size, "%s", str);
+	if (str) {
+		if (xlat_verbose(style) == XLAT_STYLE_VERBOSE)
+			return xsnprintf(buf, size, "%s /* %s */",
+					 sprint_xlat_val(val, style), str);
+		else
+			return xsnprintf(buf, size, "%s", str);
+	}
 	if (dflt)
-		return xsnprintf(buf, size, "%#x /* %s */", val, dflt);
+		return xsnprintf(buf, size, "%s /* %s */",
+				 sprint_xlat_val(val, style), dflt);
 
-	return xsnprintf(buf, size, "%#x", val);
+	return xsnprintf(buf, size, "%s", sprint_xlat_val(val, style));
 }
 
 /**
@@ -119,82 +211,227 @@
  * @param val       Value to search literal representation for.
  * @param dflt      String (abbreviated in comment syntax) which should be
  *                  emitted if no appropriate xlat value has been found.
+ * @param style     Style in which xlat value should be printed.
+ * @param fn        Search function.
  * @return          1 if appropriate xlat value has been found, 0
  *                  otherwise.
  */
-int
-printxval_searchn(const struct xlat *xlat, size_t xlat_size, uint64_t val,
-	const char *dflt)
+static int
+printxval_sized(const struct xlat *xlat, size_t xlat_size, uint64_t val,
+		const char *dflt, enum xlat_style style,
+		const char *(* fn)(const struct xlat *, size_t, uint64_t))
 {
-	const char *s = xlat_search(xlat, xlat_size, val);
+	style = get_xlat_style(style);
+
+	if (xlat_verbose(style) == XLAT_STYLE_RAW) {
+		print_xlat_val(val, style);
+		return 0;
+	}
+
+	const char *s = fn(xlat, xlat_size, val);
 
 	if (s) {
-		tprints(s);
+		if (xlat_verbose(style) == XLAT_STYLE_VERBOSE) {
+			print_xlat_val(val, style);
+			tprints_comment(s);
+		} else {
+			tprints(s);
+		}
 		return 1;
 	}
 
-	tprintf("%#" PRIx64, val);
+	print_xlat_val(val, style);
 	tprints_comment(dflt);
 
 	return 0;
 }
 
+int
+printxval_searchn_ex(const struct xlat *xlat, size_t xlat_size, uint64_t val,
+		     const char *dflt, enum xlat_style style)
+{
+	return printxval_sized(xlat, xlat_size, val, dflt, style,
+				  xlat_search);
+}
+
+const char *
+xlat_idx(const struct xlat *xlat, size_t nmemb, uint64_t val)
+{
+	static const struct xlat *pos;
+	static size_t memb_left;
+
+	if (xlat) {
+		pos = xlat;
+		memb_left = nmemb;
+	}
+
+	if (val >= memb_left)
+		return NULL;
+
+	if (val != pos[val].val) {
+		error_func_msg("Unexpected xlat value %" PRIu64
+			       " at index %" PRIu64,
+			       pos[val].val, val);
+		return NULL;
+	}
+
+	return pos[val].str;
+}
+
+int
+printxval_indexn_ex(const struct xlat *xlat, size_t xlat_size, uint64_t val,
+		    const char *dflt, enum xlat_style style)
+{
+	return printxval_sized(xlat, xlat_size, val, dflt, style, xlat_idx);
+}
+
 /*
  * Interpret `xlat' as an array of flags.
  * Print to static string the entries whose bits are on in `flags'
  * Return static string.  If 0 is provided as flags, and there is no flag that
  * has the value of 0 (it should be the first in xlat table), return NULL.
+ *
+ * Expected output:
+ * +------------+------------+---------+------------+
+ * | flags != 0 | xlat found | style   | output     |
+ * +------------+------------+---------+------------+
+ * | false      | (any)      | raw     | <none>     |
+ * | true       | (any)      | raw     | VAL        |
+ * +------------+------------+---------+------------+
+ * | false      | false      | abbrev  | <none>     |
+ * | true       | false      | abbrev  | VAL        |
+ * | (any)      | true       | abbrev  | XLAT       |
+ * +------------+------------+---------+------------+
+ * | false      | false      | verbose | <none>     |
+ * | true       | false      | verbose | VAL        |
+ * | (any)      | true       | verbose | VAL (XLAT) |
+ * +------------+------------+---------+------------+
  */
 const char *
-sprintflags(const char *prefix, const struct xlat *xlat, uint64_t flags)
+sprintflags_ex(const char *prefix, const struct xlat *xlat, uint64_t flags,
+	       enum xlat_style style)
 {
 	static char outstr[1024];
 	char *outptr;
 	int found = 0;
 
 	outptr = stpcpy(outstr, prefix);
+	style = get_xlat_style(style);
 
-	if (flags == 0 && xlat->val == 0 && xlat->str) {
-		strcpy(outptr, xlat->str);
+	if (xlat_verbose(style) == XLAT_STYLE_RAW) {
+		if (!flags)
+			return NULL;
+
+		outptr = xappendstr(outstr, outptr, "%s",
+				    sprint_xlat_val(flags, style));
+
 		return outstr;
 	}
 
-	for (; xlat->str; xlat++) {
+	if (flags == 0 && xlat->val == 0 && xlat->str) {
+		if (xlat_verbose(style) == XLAT_STYLE_VERBOSE) {
+			outptr = xappendstr(outstr, outptr, "0 /* %s */",
+					    xlat->str);
+		} else {
+			strcpy(outptr, xlat->str);
+		}
+
+		return outstr;
+	}
+
+	if (xlat_verbose(style) == XLAT_STYLE_VERBOSE && flags)
+		outptr = xappendstr(outstr, outptr, "%s",
+				    sprint_xlat_val(flags, style));
+
+	for (; flags && xlat->str; xlat++) {
 		if (xlat->val && (flags & xlat->val) == xlat->val) {
 			if (found)
 				*outptr++ = '|';
+			else if (xlat_verbose(style) == XLAT_STYLE_VERBOSE)
+				outptr = stpcpy(outptr, " /* ");
+
 			outptr = stpcpy(outptr, xlat->str);
 			found = 1;
 			flags &= ~xlat->val;
-			if (!flags)
-				break;
 		}
 	}
 
 	if (flags) {
 		if (found)
 			*outptr++ = '|';
-		outptr = xappendstr(outstr, outptr, "%#" PRIx64, flags);
+		if (found || xlat_verbose(style) != XLAT_STYLE_VERBOSE)
+			outptr = xappendstr(outstr, outptr, "%s",
+					    sprint_xlat_val(flags, style));
 	} else {
 		if (!found)
 			return NULL;
 	}
 
+	if (found && xlat_verbose(style) == XLAT_STYLE_VERBOSE)
+		outptr = stpcpy(outptr, " */");
+
 	return outstr;
 }
 
+/**
+ * Print flags from multiple xlat tables.
+ *
+ * Expected output:
+ * +------------+--------------+------------+---------+------------+
+ * | flags != 0 | dflt != NULL | xlat found | style   | output     |
+ * +------------+--------------+------------+---------+------------+
+ * | false      | false        | (any)      | raw     | <none>     |
+ * | false      | true         | (any)      | raw     | VAL        |
+ * | true       | (any)        | (any)      | raw     | VAL        |
+ * +------------+--------------+------------+---------+------------+
+ * | false      | false        | false      | abbrev  | <none>     |
+ * | false      | true         | false      | abbrev  | VAL        |
+ * | true       | false        | false      | abbrev  | VAL        |
+ * | true       | true         | false      | abbrev  | VAL (DFLT) |
+ * | (any)      | (any)        | true       | abbrev  | XLAT       |
+ * +------------+--------------+------------+---------+------------+
+ * | false      | false        | false      | verbose | <none>     |
+ * | false      | true         | false      | verbose | VAL        |
+ * | true       | false        | false      | verbose | VAL        |
+ * | true       | true         | false      | verbose | VAL (DFLT) |
+ * | (any)      | (any)        | true       | verbose | VAL (XLAT) |
+ * +------------+--------------+------------+---------+------------+
+ */
 int
-printflags_ex(uint64_t flags, const char *dflt, const struct xlat *xlat, ...)
+printflags_ex(uint64_t flags, const char *dflt, enum xlat_style style,
+	      const struct xlat *xlat, ...)
 {
+	style = get_xlat_style(style);
+
+	if (xlat_verbose(style) == XLAT_STYLE_RAW) {
+		if (flags || dflt) {
+			print_xlat_val(flags, style);
+			return 1;
+		}
+
+		return 0;
+	}
+
+	const char *init_sep = "";
 	unsigned int n = 0;
 	va_list args;
 
+	if (xlat_verbose(style) == XLAT_STYLE_VERBOSE) {
+		init_sep = " /* ";
+		if (flags)
+			print_xlat_val(flags, style);
+	}
+
 	va_start(args, xlat);
 	for (; xlat; xlat = va_arg(args, const struct xlat *)) {
 		for (; (flags || !n) && xlat->str; ++xlat) {
 			if ((flags == xlat->val) ||
 			    (xlat->val && (flags & xlat->val) == xlat->val)) {
-				tprintf("%s%s", (n++ ? "|" : ""), xlat->str);
+				if (xlat_verbose(style) == XLAT_STYLE_VERBOSE
+				    && !flags)
+					tprints("0");
+				tprintf("%s%s",
+					(n++ ? "|" : init_sep), xlat->str);
 				flags &= ~xlat->val;
 			}
 			if (!flags)
@@ -205,12 +442,17 @@
 
 	if (n) {
 		if (flags) {
-			tprintf("|%#" PRIx64, flags);
+			tprints("|");
+			print_xlat_val(flags, style);
 			n++;
 		}
+
+		if (xlat_verbose(style) == XLAT_STYLE_VERBOSE)
+			tprints(" */");
 	} else {
 		if (flags) {
-			tprintf("%#" PRIx64, flags);
+			if (xlat_verbose(style) != XLAT_STYLE_VERBOSE)
+				print_xlat_val(flags, style);
 			tprints_comment(dflt);
 		} else {
 			if (dflt)
@@ -220,3 +462,50 @@
 
 	return n;
 }
+
+void
+print_xlat_ex(const uint64_t val, const char *str, enum xlat_style style)
+{
+	style = get_xlat_style(style);
+
+	switch (xlat_verbose(style)) {
+	case XLAT_STYLE_ABBREV:
+		if (str) {
+			tprints(str);
+			break;
+		}
+		ATTRIBUTE_FALLTHROUGH;
+
+	case XLAT_STYLE_RAW:
+		print_xlat_val(val, style);
+		break;
+
+	default:
+		error_func_msg("Unexpected style value of %#x", style);
+		ATTRIBUTE_FALLTHROUGH;
+
+	case XLAT_STYLE_VERBOSE:
+		print_xlat_val(val, style);
+		tprints_comment(str);
+	}
+}
+
+void
+printxval_dispatch_ex(const struct xlat *xlat, size_t xlat_size, uint64_t val,
+		      const char *dflt, enum xlat_type xt,
+		      enum xlat_style style)
+{
+	switch (xt) {
+	case XT_NORMAL:
+		printxvals_ex(val, dflt, style, xlat, NULL);
+		break;
+
+	case XT_SORTED:
+		printxval_searchn_ex(xlat, xlat_size, val, dflt, style);
+		break;
+
+	case XT_INDEXED:
+		printxval_indexn_ex(xlat, xlat_size, val, dflt, style);
+		break;
+	}
+}
diff --git a/xlat.h b/xlat.h
index aaa7aab..e86df79 100644
--- a/xlat.h
+++ b/xlat.h
@@ -3,6 +3,44 @@
 
 # include <stdint.h>
 
+enum xlat_type {
+	XT_NORMAL,
+	XT_SORTED,
+	XT_INDEXED,
+};
+
+enum xlat_style {
+	/**
+	 * Special value that is used for passing to *print{xval,flags}*_ex
+	 * routines that indicates that no overriding of user-supplied xlat
+	 * verbosity/formatting configuration is intended.
+	 */
+	XLAT_STYLE_DEFAULT = 0,
+
+	/** Print xlat value as is without xlat processing */
+	XLAT_STYLE_RAW     = 1 << 0,
+	/**
+	 * Historic strace style, process xlat and print the result (xlat
+	 * constant name/combination of flags), raw number only if nothing is
+	 * found.
+	 */
+	XLAT_STYLE_ABBREV  = 1 << 1,
+	/** Always print both raw number and xlat processing result. */
+	XLAT_STYLE_VERBOSE = XLAT_STYLE_RAW | XLAT_STYLE_ABBREV,
+
+#define XLAT_STYLE_FORMAT_SHIFT   2
+#define XLAT_STYLE_VERBOSITY_MASK ((1 << XLAT_STYLE_FORMAT_SHIFT) - 1)
+
+	XLAT_STYLE_FMT_X   = 0 << XLAT_STYLE_FORMAT_SHIFT,
+	XLAT_STYLE_FMT_U   = 1 << XLAT_STYLE_FORMAT_SHIFT,
+	XLAT_STYLE_FMT_D   = 2 << XLAT_STYLE_FORMAT_SHIFT,
+
+#define XLAT_STYLE_FORMAT_MASK    (3 << XLAT_STYLE_FORMAT_SHIFT)
+
+#define XLAT_STYLE_SPEC_BITS (XLAT_STYLE_FORMAT_SHIFT + 2)
+#define XLAT_STYLE_MASK ((1 << XLAT_STYLE_SPEC_BITS) - 1)
+};
+
 struct xlat {
 	uint64_t val;
 	const char *str;
diff --git a/xlat/Makemodule.am b/xlat/Makemodule.am
index 378c047..cd7d3ac 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_file_mode_flags.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_logical_ino_args_flags.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/kvm_mem_flags.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/mdb_flags.in xlat/mdb_states.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/multicast_router_types.in xlat/name_to_handle_at_flags.in xlat/neighbor_cache_entry_flags.in xlat/neighbor_cache_entry_states.in xlat/netfilter_versions.in xlat/netlink_ack_flags.in xlat/netlink_delete_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/nf_acct_msg_types.in xlat/nf_cthelper_msg_types.in xlat/nf_ctnetlink_exp_msg_types.in xlat/nf_ctnetlink_msg_types.in xlat/nf_cttimeout_msg_types.in xlat/nf_ipset_msg_types.in xlat/nf_nft_compat_msg_types.in xlat/nf_nftables_msg_types.in xlat/nf_osf_msg_types.in xlat/nf_queue_msg_types.in xlat/nf_ulog_msg_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_sve_vl_flags.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/riscv_flush_icache_flags.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_events.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_mdba_mdb_attrs.in xlat/rtnl_mdba_mdb_eattr_attrs.in xlat/rtnl_mdba_mdb_entry_attrs.in xlat/rtnl_mdba_router_attrs.in xlat/rtnl_mdba_router_pattr_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/rtnl_tca_stab_attrs.in xlat/rtnl_tca_stats_attrs.in xlat/rwf_flags.in xlat/s390_guarded_storage_commands.in xlat/s390_runtime_instr_commands.in xlat/s390_sthyi_function_codes.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/socknetlinkoptions.in xlat/sockoptions.in xlat/sockpacketoptions.in xlat/sockrawoptions.in xlat/socksctpoptions.in xlat/socktcpoptions.in xlat/socktypes.in xlat/sparc_kern_features.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_pix_fmts.in xlat/v4l2_sdr_fmts.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_file_mode_flags.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_logical_ino_args_flags.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/kvm_mem_flags.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/mdb_flags.h xlat/mdb_states.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/multicast_router_types.h xlat/name_to_handle_at_flags.h xlat/neighbor_cache_entry_flags.h xlat/neighbor_cache_entry_states.h xlat/netfilter_versions.h xlat/netlink_ack_flags.h xlat/netlink_delete_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/nf_acct_msg_types.h xlat/nf_cthelper_msg_types.h xlat/nf_ctnetlink_exp_msg_types.h xlat/nf_ctnetlink_msg_types.h xlat/nf_cttimeout_msg_types.h xlat/nf_ipset_msg_types.h xlat/nf_nft_compat_msg_types.h xlat/nf_nftables_msg_types.h xlat/nf_osf_msg_types.h xlat/nf_queue_msg_types.h xlat/nf_ulog_msg_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_sve_vl_flags.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/riscv_flush_icache_flags.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_events.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_mdba_mdb_attrs.h xlat/rtnl_mdba_mdb_eattr_attrs.h xlat/rtnl_mdba_mdb_entry_attrs.h xlat/rtnl_mdba_router_attrs.h xlat/rtnl_mdba_router_pattr_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/rtnl_tca_stab_attrs.h xlat/rtnl_tca_stats_attrs.h xlat/rwf_flags.h xlat/s390_guarded_storage_commands.h xlat/s390_runtime_instr_commands.h xlat/s390_sthyi_function_codes.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/socknetlinkoptions.h xlat/sockoptions.h xlat/sockpacketoptions.h xlat/sockrawoptions.h xlat/socksctpoptions.h xlat/socktcpoptions.h xlat/socktypes.h xlat/sparc_kern_features.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_pix_fmts.h xlat/v4l2_sdr_fmts.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 
+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/bdaddr_types.in xlat/blkpg_ops.in xlat/bluetooth_l2_cid.in xlat/bluetooth_l2_psm.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_file_mode_flags.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_query_flags.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_cont_reading_from_srcdev_mode.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_logical_ino_args_flags.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/caif_protocols.in xlat/can_protocols.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/ebpf_class.in xlat/ebpf_mode.in xlat/ebpf_op_alu.in xlat/ebpf_op_jmp.in xlat/ebpf_regs.in xlat/ebpf_size.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/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/getsock_ip_options.in xlat/getsock_ipv6_options.in xlat/getsock_options.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/in6_addr_gen_mode.in xlat/inet6_devconf_indices.in xlat/inet6_if_flags.in xlat/inet_devconf_indices.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/ipc_private.in xlat/ipccalls.in xlat/irda_protocols.in xlat/isdn_protocols.in xlat/itimer_which.in xlat/kcm_protocols.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/kvm_mem_flags.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/mdb_flags.in xlat/mdb_states.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/multicast_router_types.in xlat/name_to_handle_at_flags.in xlat/neighbor_cache_entry_flags.in xlat/neighbor_cache_entry_states.in xlat/netfilter_versions.in xlat/netlink_ack_flags.in xlat/netlink_delete_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_sk_meminfo_indices.in xlat/netlink_socket_flags.in xlat/netlink_states.in xlat/netlink_types.in xlat/nf_acct_msg_types.in xlat/nf_cthelper_msg_types.in xlat/nf_ctnetlink_exp_msg_types.in xlat/nf_ctnetlink_msg_types.in xlat/nf_cttimeout_msg_types.in xlat/nf_ipset_msg_types.in xlat/nf_nft_compat_msg_types.in xlat/nf_nftables_msg_types.in xlat/nf_osf_msg_types.in xlat/nf_queue_msg_types.in xlat/nf_ulog_msg_types.in xlat/nfc_protocols.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/numa_node.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_ioctl_cmds.in xlat/perf_ioctl_flags.in xlat/perf_sw_ids.in xlat/perf_type_id.in xlat/personality_flags.in xlat/personality_types.in xlat/phonet_protocols.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_spec_cmds.in xlat/pr_spec_get_store_bypass_flags.in xlat/pr_spec_set_store_bypass_flags.in xlat/pr_sve_vl_flags.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/riscv_flush_icache_flags.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_af_spec_inet6_attrs.in xlat/rtnl_ifla_af_spec_inet_attrs.in xlat/rtnl_ifla_brport_attrs.in xlat/rtnl_ifla_events.in xlat/rtnl_ifla_info_attrs.in xlat/rtnl_ifla_info_data_bridge_attrs.in xlat/rtnl_ifla_info_data_tun_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_mdba_mdb_attrs.in xlat/rtnl_mdba_mdb_eattr_attrs.in xlat/rtnl_mdba_mdb_entry_attrs.in xlat/rtnl_mdba_router_attrs.in xlat/rtnl_mdba_router_pattr_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/rtnl_tca_stab_attrs.in xlat/rtnl_tca_stats_attrs.in xlat/rwf_flags.in xlat/s390_guarded_storage_commands.in xlat/s390_runtime_instr_commands.in xlat/s390_sthyi_function_codes.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/setsock_ip_options.in xlat/setsock_ipv6_options.in xlat/setsock_options.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/skf_off.in xlat/smc_diag_attrs.in xlat/smc_diag_extended_flags.in xlat/smc_link_group_roles.in xlat/smc_protocols.in xlat/smc_states.in xlat/snmp_icmp6_stats.in xlat/snmp_ip_stats.in xlat/sock_alg_options.in xlat/sock_bluetooth_options.in xlat/sock_caif_options.in xlat/sock_dccp_options.in xlat/sock_ip_options.in xlat/sock_ipv6_options.in xlat/sock_ipx_options.in xlat/sock_irda_options.in xlat/sock_iucv_options.in xlat/sock_kcm_options.in xlat/sock_llc_options.in xlat/sock_netlink_options.in xlat/sock_nfcllcp_options.in xlat/sock_options.in xlat/sock_packet_options.in xlat/sock_pnp_options.in xlat/sock_pppol2tp_options.in xlat/sock_raw_options.in xlat/sock_rds_options.in xlat/sock_rxrpc_options.in xlat/sock_sctp_options.in xlat/sock_tcp_options.in xlat/sock_tipc_options.in xlat/sock_tls_options.in xlat/sock_type_flags.in xlat/sock_udp_options.in xlat/socketcalls.in xlat/socketlayers.in xlat/socktypes.in xlat/sparc_kern_features.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/tun_device_types.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_id_bases.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_pix_fmts.in xlat/v4l2_sdr_fmts.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/bdaddr_types.h xlat/blkpg_ops.h xlat/bluetooth_l2_cid.h xlat/bluetooth_l2_psm.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_file_mode_flags.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_query_flags.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_cont_reading_from_srcdev_mode.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_logical_ino_args_flags.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/caif_protocols.h xlat/can_protocols.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/ebpf_class.h xlat/ebpf_mode.h xlat/ebpf_op_alu.h xlat/ebpf_op_jmp.h xlat/ebpf_regs.h xlat/ebpf_size.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/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/getsock_ip_options.h xlat/getsock_ipv6_options.h xlat/getsock_options.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/in6_addr_gen_mode.h xlat/inet6_devconf_indices.h xlat/inet6_if_flags.h xlat/inet_devconf_indices.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/ipc_private.h xlat/ipccalls.h xlat/irda_protocols.h xlat/isdn_protocols.h xlat/itimer_which.h xlat/kcm_protocols.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/kvm_mem_flags.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/mdb_flags.h xlat/mdb_states.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/multicast_router_types.h xlat/name_to_handle_at_flags.h xlat/neighbor_cache_entry_flags.h xlat/neighbor_cache_entry_states.h xlat/netfilter_versions.h xlat/netlink_ack_flags.h xlat/netlink_delete_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_sk_meminfo_indices.h xlat/netlink_socket_flags.h xlat/netlink_states.h xlat/netlink_types.h xlat/nf_acct_msg_types.h xlat/nf_cthelper_msg_types.h xlat/nf_ctnetlink_exp_msg_types.h xlat/nf_ctnetlink_msg_types.h xlat/nf_cttimeout_msg_types.h xlat/nf_ipset_msg_types.h xlat/nf_nft_compat_msg_types.h xlat/nf_nftables_msg_types.h xlat/nf_osf_msg_types.h xlat/nf_queue_msg_types.h xlat/nf_ulog_msg_types.h xlat/nfc_protocols.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/numa_node.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_ioctl_cmds.h xlat/perf_ioctl_flags.h xlat/perf_sw_ids.h xlat/perf_type_id.h xlat/personality_flags.h xlat/personality_types.h xlat/phonet_protocols.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_spec_cmds.h xlat/pr_spec_get_store_bypass_flags.h xlat/pr_spec_set_store_bypass_flags.h xlat/pr_sve_vl_flags.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/riscv_flush_icache_flags.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_af_spec_inet6_attrs.h xlat/rtnl_ifla_af_spec_inet_attrs.h xlat/rtnl_ifla_brport_attrs.h xlat/rtnl_ifla_events.h xlat/rtnl_ifla_info_attrs.h xlat/rtnl_ifla_info_data_bridge_attrs.h xlat/rtnl_ifla_info_data_tun_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_mdba_mdb_attrs.h xlat/rtnl_mdba_mdb_eattr_attrs.h xlat/rtnl_mdba_mdb_entry_attrs.h xlat/rtnl_mdba_router_attrs.h xlat/rtnl_mdba_router_pattr_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/rtnl_tca_stab_attrs.h xlat/rtnl_tca_stats_attrs.h xlat/rwf_flags.h xlat/s390_guarded_storage_commands.h xlat/s390_runtime_instr_commands.h xlat/s390_sthyi_function_codes.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/setsock_ip_options.h xlat/setsock_ipv6_options.h xlat/setsock_options.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/skf_off.h xlat/smc_diag_attrs.h xlat/smc_diag_extended_flags.h xlat/smc_link_group_roles.h xlat/smc_protocols.h xlat/smc_states.h xlat/snmp_icmp6_stats.h xlat/snmp_ip_stats.h xlat/sock_alg_options.h xlat/sock_bluetooth_options.h xlat/sock_caif_options.h xlat/sock_dccp_options.h xlat/sock_ip_options.h xlat/sock_ipv6_options.h xlat/sock_ipx_options.h xlat/sock_irda_options.h xlat/sock_iucv_options.h xlat/sock_kcm_options.h xlat/sock_llc_options.h xlat/sock_netlink_options.h xlat/sock_nfcllcp_options.h xlat/sock_options.h xlat/sock_packet_options.h xlat/sock_pnp_options.h xlat/sock_pppol2tp_options.h xlat/sock_raw_options.h xlat/sock_rds_options.h xlat/sock_rxrpc_options.h xlat/sock_sctp_options.h xlat/sock_tcp_options.h xlat/sock_tipc_options.h xlat/sock_tls_options.h xlat/sock_type_flags.h xlat/sock_udp_options.h xlat/socketcalls.h xlat/socketlayers.h xlat/socktypes.h xlat/sparc_kern_features.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/tun_device_types.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_id_bases.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_pix_fmts.h xlat/v4l2_sdr_fmts.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
@@ -28,8 +28,14 @@
 	$(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/bdaddr_types.h: $(top_srcdir)/xlat/bdaddr_types.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/bluetooth_l2_cid.h: $(top_srcdir)/xlat/bluetooth_l2_cid.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/bluetooth_l2_psm.h: $(top_srcdir)/xlat/bluetooth_l2_psm.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
@@ -64,6 +70,8 @@
 	$(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_query_flags.h: $(top_srcdir)/xlat/bpf_query_flags.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
@@ -88,6 +96,8 @@
 	$(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_cont_reading_from_srcdev_mode.h: $(top_srcdir)/xlat/btrfs_cont_reading_from_srcdev_mode.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
@@ -130,6 +140,10 @@
 	$(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/caif_protocols.h: $(top_srcdir)/xlat/caif_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/can_protocols.h: $(top_srcdir)/xlat/can_protocols.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
@@ -156,6 +170,18 @@
 	$(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/ebpf_class.h: $(top_srcdir)/xlat/ebpf_class.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_mode.h: $(top_srcdir)/xlat/ebpf_mode.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_op_alu.h: $(top_srcdir)/xlat/ebpf_op_alu.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_op_jmp.h: $(top_srcdir)/xlat/ebpf_op_jmp.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_regs.h: $(top_srcdir)/xlat/ebpf_regs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/ebpf_size.h: $(top_srcdir)/xlat/ebpf_size.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
@@ -208,8 +234,6 @@
 	$(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
@@ -234,9 +258,11 @@
 	$(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
+$(top_srcdir)/xlat/getsock_ip_options.h: $(top_srcdir)/xlat/getsock_ip_options.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
+$(top_srcdir)/xlat/getsock_ipv6_options.h: $(top_srcdir)/xlat/getsock_ipv6_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/getsock_options.h: $(top_srcdir)/xlat/getsock_options.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 $< $@
@@ -256,6 +282,14 @@
 	$(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/in6_addr_gen_mode.h: $(top_srcdir)/xlat/in6_addr_gen_mode.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet6_devconf_indices.h: $(top_srcdir)/xlat/inet6_devconf_indices.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet6_if_flags.h: $(top_srcdir)/xlat/inet6_if_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/inet_devconf_indices.h: $(top_srcdir)/xlat/inet_devconf_indices.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
@@ -282,10 +316,18 @@
 	$(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/ipc_private.h: $(top_srcdir)/xlat/ipc_private.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/irda_protocols.h: $(top_srcdir)/xlat/irda_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/isdn_protocols.h: $(top_srcdir)/xlat/isdn_protocols.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/kcm_protocols.h: $(top_srcdir)/xlat/kcm_protocols.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
@@ -394,6 +436,8 @@
 	$(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_sk_meminfo_indices.h: $(top_srcdir)/xlat/netlink_sk_meminfo_indices.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_socket_flags.h: $(top_srcdir)/xlat/netlink_socket_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_states.h: $(top_srcdir)/xlat/netlink_states.in $(top_srcdir)/xlat/gen.sh
@@ -422,6 +466,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/nf_ulog_msg_types.h: $(top_srcdir)/xlat/nf_ulog_msg_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nfc_protocols.h: $(top_srcdir)/xlat/nfc_protocols.in $(top_srcdir)/xlat/gen.sh
+	$(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
@@ -444,6 +490,8 @@
 	$(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/numa_node.h: $(top_srcdir)/xlat/numa_node.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
@@ -474,6 +522,10 @@
 	$(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_ioctl_cmds.h: $(top_srcdir)/xlat/perf_ioctl_cmds.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/perf_ioctl_flags.h: $(top_srcdir)/xlat/perf_ioctl_flags.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
@@ -482,6 +534,8 @@
 	$(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/phonet_protocols.h: $(top_srcdir)/xlat/phonet_protocols.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
@@ -500,6 +554,12 @@
 	$(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_spec_cmds.h: $(top_srcdir)/xlat/pr_spec_cmds.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/pr_spec_get_store_bypass_flags.h: $(top_srcdir)/xlat/pr_spec_get_store_bypass_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/pr_spec_set_store_bypass_flags.h: $(top_srcdir)/xlat/pr_spec_set_store_bypass_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/pr_sve_vl_flags.h: $(top_srcdir)/xlat/pr_sve_vl_flags.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
@@ -552,12 +612,20 @@
 	$(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_af_spec_inet6_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_af_spec_inet6_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_af_spec_inet_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_af_spec_inet_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_events.h: $(top_srcdir)/xlat/rtnl_ifla_events.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_info_data_bridge_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_info_data_bridge_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_ifla_info_data_tun_attrs.h: $(top_srcdir)/xlat/rtnl_ifla_info_data_tun_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
@@ -636,9 +704,11 @@
 	$(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
+$(top_srcdir)/xlat/setsock_ip_options.h: $(top_srcdir)/xlat/setsock_ip_options.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
+$(top_srcdir)/xlat/setsock_ipv6_options.h: $(top_srcdir)/xlat/setsock_ipv6_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/setsock_options.h: $(top_srcdir)/xlat/setsock_options.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 $< $@
@@ -690,38 +760,78 @@
 	$(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/skf_off.h: $(top_srcdir)/xlat/skf_off.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_protocols.h: $(top_srcdir)/xlat/smc_protocols.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/snmp_icmp6_stats.h: $(top_srcdir)/xlat/snmp_icmp6_stats.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/snmp_ip_stats.h: $(top_srcdir)/xlat/snmp_ip_stats.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_alg_options.h: $(top_srcdir)/xlat/sock_alg_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_bluetooth_options.h: $(top_srcdir)/xlat/sock_bluetooth_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_caif_options.h: $(top_srcdir)/xlat/sock_caif_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_dccp_options.h: $(top_srcdir)/xlat/sock_dccp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_ip_options.h: $(top_srcdir)/xlat/sock_ip_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_ipv6_options.h: $(top_srcdir)/xlat/sock_ipv6_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_ipx_options.h: $(top_srcdir)/xlat/sock_ipx_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_irda_options.h: $(top_srcdir)/xlat/sock_irda_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_iucv_options.h: $(top_srcdir)/xlat/sock_iucv_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_kcm_options.h: $(top_srcdir)/xlat/sock_kcm_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_llc_options.h: $(top_srcdir)/xlat/sock_llc_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_netlink_options.h: $(top_srcdir)/xlat/sock_netlink_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_nfcllcp_options.h: $(top_srcdir)/xlat/sock_nfcllcp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_options.h: $(top_srcdir)/xlat/sock_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_packet_options.h: $(top_srcdir)/xlat/sock_packet_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_pnp_options.h: $(top_srcdir)/xlat/sock_pnp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_pppol2tp_options.h: $(top_srcdir)/xlat/sock_pppol2tp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_raw_options.h: $(top_srcdir)/xlat/sock_raw_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_rds_options.h: $(top_srcdir)/xlat/sock_rds_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_rxrpc_options.h: $(top_srcdir)/xlat/sock_rxrpc_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_sctp_options.h: $(top_srcdir)/xlat/sock_sctp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_tcp_options.h: $(top_srcdir)/xlat/sock_tcp_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_tipc_options.h: $(top_srcdir)/xlat/sock_tipc_options.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/sock_tls_options.h: $(top_srcdir)/xlat/sock_tls_options.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/sock_udp_options.h: $(top_srcdir)/xlat/sock_udp_options.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/socknetlinkoptions.h: $(top_srcdir)/xlat/socknetlinkoptions.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/sparc_kern_features.h: $(top_srcdir)/xlat/sparc_kern_features.in $(top_srcdir)/xlat/gen.sh
@@ -776,6 +886,8 @@
 	$(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/tun_device_types.h: $(top_srcdir)/xlat/tun_device_types.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
@@ -816,6 +928,8 @@
 	$(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_id_bases.h: $(top_srcdir)/xlat/v4l2_control_id_bases.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
diff --git a/xlat/access_flags.h b/xlat/access_flags.h
index a30f082..e12a08c 100644
--- a/xlat/access_flags.h
+++ b/xlat/access_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/access_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat access_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat access_flags in mpers mode
+
+# else
 
 static
 const struct xlat access_flags[] = {
@@ -29,4 +35,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/addrfams.h b/xlat/addrfams.h
index 5dc4118..9593936 100644
--- a/xlat/addrfams.h
+++ b/xlat/addrfams.h
@@ -1,185 +1,369 @@
 /* Generated by ./xlat/gen.sh from ./xlat/addrfams.in; do not edit. */
-#if !(defined(AF_UNSPEC) || (defined(HAVE_DECL_AF_UNSPEC) && HAVE_DECL_AF_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(AF_UNSPEC) || (defined(HAVE_DECL_AF_UNSPEC) && HAVE_DECL_AF_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_UNSPEC) == (0), "AF_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_UNSPEC 0
 #endif
-#if !(defined(AF_UNIX) || (defined(HAVE_DECL_AF_UNIX) && HAVE_DECL_AF_UNIX))
+#if defined(AF_UNIX) || (defined(HAVE_DECL_AF_UNIX) && HAVE_DECL_AF_UNIX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_UNIX) == (1), "AF_UNIX != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_UNIX 1
 #endif
-#if !(defined(AF_INET) || (defined(HAVE_DECL_AF_INET) && HAVE_DECL_AF_INET))
+#if defined(AF_INET) || (defined(HAVE_DECL_AF_INET) && HAVE_DECL_AF_INET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_INET) == (2), "AF_INET != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_INET 2
 #endif
-#if !(defined(AF_AX25) || (defined(HAVE_DECL_AF_AX25) && HAVE_DECL_AF_AX25))
+#if defined(AF_AX25) || (defined(HAVE_DECL_AF_AX25) && HAVE_DECL_AF_AX25)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_AX25) == (3), "AF_AX25 != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_AX25 3
 #endif
-#if !(defined(AF_IPX) || (defined(HAVE_DECL_AF_IPX) && HAVE_DECL_AF_IPX))
+#if defined(AF_IPX) || (defined(HAVE_DECL_AF_IPX) && HAVE_DECL_AF_IPX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_IPX) == (4), "AF_IPX != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_IPX 4
 #endif
-#if !(defined(AF_APPLETALK) || (defined(HAVE_DECL_AF_APPLETALK) && HAVE_DECL_AF_APPLETALK))
+#if defined(AF_APPLETALK) || (defined(HAVE_DECL_AF_APPLETALK) && HAVE_DECL_AF_APPLETALK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_APPLETALK) == (5), "AF_APPLETALK != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_APPLETALK 5
 #endif
-#if !(defined(AF_NETROM) || (defined(HAVE_DECL_AF_NETROM) && HAVE_DECL_AF_NETROM))
+#if defined(AF_NETROM) || (defined(HAVE_DECL_AF_NETROM) && HAVE_DECL_AF_NETROM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_NETROM) == (6), "AF_NETROM != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_NETROM 6
 #endif
-#if !(defined(AF_BRIDGE) || (defined(HAVE_DECL_AF_BRIDGE) && HAVE_DECL_AF_BRIDGE))
+#if defined(AF_BRIDGE) || (defined(HAVE_DECL_AF_BRIDGE) && HAVE_DECL_AF_BRIDGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_BRIDGE) == (7), "AF_BRIDGE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_BRIDGE 7
 #endif
-#if !(defined(AF_ATMPVC) || (defined(HAVE_DECL_AF_ATMPVC) && HAVE_DECL_AF_ATMPVC))
+#if defined(AF_ATMPVC) || (defined(HAVE_DECL_AF_ATMPVC) && HAVE_DECL_AF_ATMPVC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_ATMPVC) == (8), "AF_ATMPVC != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_ATMPVC 8
 #endif
-#if !(defined(AF_X25) || (defined(HAVE_DECL_AF_X25) && HAVE_DECL_AF_X25))
+#if defined(AF_X25) || (defined(HAVE_DECL_AF_X25) && HAVE_DECL_AF_X25)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_X25) == (9), "AF_X25 != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_X25 9
 #endif
-#if !(defined(AF_INET6) || (defined(HAVE_DECL_AF_INET6) && HAVE_DECL_AF_INET6))
+#if defined(AF_INET6) || (defined(HAVE_DECL_AF_INET6) && HAVE_DECL_AF_INET6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_INET6) == (10), "AF_INET6 != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_INET6 10
 #endif
-#if !(defined(AF_ROSE) || (defined(HAVE_DECL_AF_ROSE) && HAVE_DECL_AF_ROSE))
+#if defined(AF_ROSE) || (defined(HAVE_DECL_AF_ROSE) && HAVE_DECL_AF_ROSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_ROSE) == (11), "AF_ROSE != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_ROSE 11
 #endif
-#if !(defined(AF_DECnet) || (defined(HAVE_DECL_AF_DECnet) && HAVE_DECL_AF_DECnet))
+#if defined(AF_DECnet) || (defined(HAVE_DECL_AF_DECnet) && HAVE_DECL_AF_DECnet)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_DECnet) == (12), "AF_DECnet != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_DECnet 12
 #endif
-#if !(defined(AF_NETBEUI) || (defined(HAVE_DECL_AF_NETBEUI) && HAVE_DECL_AF_NETBEUI))
+#if defined(AF_NETBEUI) || (defined(HAVE_DECL_AF_NETBEUI) && HAVE_DECL_AF_NETBEUI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_NETBEUI) == (13), "AF_NETBEUI != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_NETBEUI 13
 #endif
-#if !(defined(AF_SECURITY) || (defined(HAVE_DECL_AF_SECURITY) && HAVE_DECL_AF_SECURITY))
+#if defined(AF_SECURITY) || (defined(HAVE_DECL_AF_SECURITY) && HAVE_DECL_AF_SECURITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_SECURITY) == (14), "AF_SECURITY != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_SECURITY 14
 #endif
-#if !(defined(AF_KEY) || (defined(HAVE_DECL_AF_KEY) && HAVE_DECL_AF_KEY))
+#if defined(AF_KEY) || (defined(HAVE_DECL_AF_KEY) && HAVE_DECL_AF_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_KEY) == (15), "AF_KEY != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_KEY 15
 #endif
-#if !(defined(AF_NETLINK) || (defined(HAVE_DECL_AF_NETLINK) && HAVE_DECL_AF_NETLINK))
+#if defined(AF_NETLINK) || (defined(HAVE_DECL_AF_NETLINK) && HAVE_DECL_AF_NETLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_NETLINK) == (16), "AF_NETLINK != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_NETLINK 16
 #endif
-#if !(defined(AF_PACKET) || (defined(HAVE_DECL_AF_PACKET) && HAVE_DECL_AF_PACKET))
+#if defined(AF_PACKET) || (defined(HAVE_DECL_AF_PACKET) && HAVE_DECL_AF_PACKET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_PACKET) == (17), "AF_PACKET != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_PACKET 17
 #endif
-#if !(defined(AF_ASH) || (defined(HAVE_DECL_AF_ASH) && HAVE_DECL_AF_ASH))
+#if defined(AF_ASH) || (defined(HAVE_DECL_AF_ASH) && HAVE_DECL_AF_ASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_ASH) == (18), "AF_ASH != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_ASH 18
 #endif
-#if !(defined(AF_ECONET) || (defined(HAVE_DECL_AF_ECONET) && HAVE_DECL_AF_ECONET))
+#if defined(AF_ECONET) || (defined(HAVE_DECL_AF_ECONET) && HAVE_DECL_AF_ECONET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_ECONET) == (19), "AF_ECONET != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_ECONET 19
 #endif
-#if !(defined(AF_ATMSVC) || (defined(HAVE_DECL_AF_ATMSVC) && HAVE_DECL_AF_ATMSVC))
+#if defined(AF_ATMSVC) || (defined(HAVE_DECL_AF_ATMSVC) && HAVE_DECL_AF_ATMSVC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_ATMSVC) == (20), "AF_ATMSVC != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_ATMSVC 20
 #endif
-#if !(defined(AF_RDS) || (defined(HAVE_DECL_AF_RDS) && HAVE_DECL_AF_RDS))
+#if defined(AF_RDS) || (defined(HAVE_DECL_AF_RDS) && HAVE_DECL_AF_RDS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_RDS) == (21), "AF_RDS != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_RDS 21
 #endif
-#if !(defined(AF_SNA) || (defined(HAVE_DECL_AF_SNA) && HAVE_DECL_AF_SNA))
+#if defined(AF_SNA) || (defined(HAVE_DECL_AF_SNA) && HAVE_DECL_AF_SNA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_SNA) == (22), "AF_SNA != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_SNA 22
 #endif
-#if !(defined(AF_IRDA) || (defined(HAVE_DECL_AF_IRDA) && HAVE_DECL_AF_IRDA))
+#if defined(AF_IRDA) || (defined(HAVE_DECL_AF_IRDA) && HAVE_DECL_AF_IRDA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_IRDA) == (23), "AF_IRDA != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_IRDA 23
 #endif
-#if !(defined(AF_PPPOX) || (defined(HAVE_DECL_AF_PPPOX) && HAVE_DECL_AF_PPPOX))
+#if defined(AF_PPPOX) || (defined(HAVE_DECL_AF_PPPOX) && HAVE_DECL_AF_PPPOX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_PPPOX) == (24), "AF_PPPOX != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_PPPOX 24
 #endif
-#if !(defined(AF_WANPIPE) || (defined(HAVE_DECL_AF_WANPIPE) && HAVE_DECL_AF_WANPIPE))
+#if defined(AF_WANPIPE) || (defined(HAVE_DECL_AF_WANPIPE) && HAVE_DECL_AF_WANPIPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_WANPIPE) == (25), "AF_WANPIPE != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_WANPIPE 25
 #endif
-#if !(defined(AF_LLC) || (defined(HAVE_DECL_AF_LLC) && HAVE_DECL_AF_LLC))
+#if defined(AF_LLC) || (defined(HAVE_DECL_AF_LLC) && HAVE_DECL_AF_LLC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_LLC) == (26), "AF_LLC != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_LLC 26
 #endif
-#if !(defined(AF_IB) || (defined(HAVE_DECL_AF_IB) && HAVE_DECL_AF_IB))
+#if defined(AF_IB) || (defined(HAVE_DECL_AF_IB) && HAVE_DECL_AF_IB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_IB) == (27), "AF_IB != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_IB 27
 #endif
-#if !(defined(AF_MPLS) || (defined(HAVE_DECL_AF_MPLS) && HAVE_DECL_AF_MPLS))
+#if defined(AF_MPLS) || (defined(HAVE_DECL_AF_MPLS) && HAVE_DECL_AF_MPLS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_MPLS) == (28), "AF_MPLS != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_MPLS 28
 #endif
-#if !(defined(AF_CAN) || (defined(HAVE_DECL_AF_CAN) && HAVE_DECL_AF_CAN))
+#if defined(AF_CAN) || (defined(HAVE_DECL_AF_CAN) && HAVE_DECL_AF_CAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_CAN) == (29), "AF_CAN != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_CAN 29
 #endif
-#if !(defined(AF_TIPC) || (defined(HAVE_DECL_AF_TIPC) && HAVE_DECL_AF_TIPC))
+#if defined(AF_TIPC) || (defined(HAVE_DECL_AF_TIPC) && HAVE_DECL_AF_TIPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_TIPC) == (30), "AF_TIPC != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_TIPC 30
 #endif
-#if !(defined(AF_BLUETOOTH) || (defined(HAVE_DECL_AF_BLUETOOTH) && HAVE_DECL_AF_BLUETOOTH))
+#if defined(AF_BLUETOOTH) || (defined(HAVE_DECL_AF_BLUETOOTH) && HAVE_DECL_AF_BLUETOOTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_BLUETOOTH) == (31), "AF_BLUETOOTH != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_BLUETOOTH 31
 #endif
-#if !(defined(AF_IUCV) || (defined(HAVE_DECL_AF_IUCV) && HAVE_DECL_AF_IUCV))
+#if defined(AF_IUCV) || (defined(HAVE_DECL_AF_IUCV) && HAVE_DECL_AF_IUCV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_IUCV) == (32), "AF_IUCV != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_IUCV 32
 #endif
-#if !(defined(AF_RXRPC) || (defined(HAVE_DECL_AF_RXRPC) && HAVE_DECL_AF_RXRPC))
+#if defined(AF_RXRPC) || (defined(HAVE_DECL_AF_RXRPC) && HAVE_DECL_AF_RXRPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_RXRPC) == (33), "AF_RXRPC != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_RXRPC 33
 #endif
-#if !(defined(AF_ISDN) || (defined(HAVE_DECL_AF_ISDN) && HAVE_DECL_AF_ISDN))
+#if defined(AF_ISDN) || (defined(HAVE_DECL_AF_ISDN) && HAVE_DECL_AF_ISDN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_ISDN) == (34), "AF_ISDN != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_ISDN 34
 #endif
-#if !(defined(AF_PHONET) || (defined(HAVE_DECL_AF_PHONET) && HAVE_DECL_AF_PHONET))
+#if defined(AF_PHONET) || (defined(HAVE_DECL_AF_PHONET) && HAVE_DECL_AF_PHONET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_PHONET) == (35), "AF_PHONET != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_PHONET 35
 #endif
-#if !(defined(AF_IEEE802154) || (defined(HAVE_DECL_AF_IEEE802154) && HAVE_DECL_AF_IEEE802154))
+#if defined(AF_IEEE802154) || (defined(HAVE_DECL_AF_IEEE802154) && HAVE_DECL_AF_IEEE802154)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_IEEE802154) == (36), "AF_IEEE802154 != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_IEEE802154 36
 #endif
-#if !(defined(AF_CAIF) || (defined(HAVE_DECL_AF_CAIF) && HAVE_DECL_AF_CAIF))
+#if defined(AF_CAIF) || (defined(HAVE_DECL_AF_CAIF) && HAVE_DECL_AF_CAIF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_CAIF) == (37), "AF_CAIF != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_CAIF 37
 #endif
-#if !(defined(AF_ALG) || (defined(HAVE_DECL_AF_ALG) && HAVE_DECL_AF_ALG))
+#if defined(AF_ALG) || (defined(HAVE_DECL_AF_ALG) && HAVE_DECL_AF_ALG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_ALG) == (38), "AF_ALG != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_ALG 38
 #endif
-#if !(defined(AF_NFC) || (defined(HAVE_DECL_AF_NFC) && HAVE_DECL_AF_NFC))
+#if defined(AF_NFC) || (defined(HAVE_DECL_AF_NFC) && HAVE_DECL_AF_NFC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_NFC) == (39), "AF_NFC != 39");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_NFC 39
 #endif
-#if !(defined(AF_VSOCK) || (defined(HAVE_DECL_AF_VSOCK) && HAVE_DECL_AF_VSOCK))
+#if defined(AF_VSOCK) || (defined(HAVE_DECL_AF_VSOCK) && HAVE_DECL_AF_VSOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_VSOCK) == (40), "AF_VSOCK != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_VSOCK 40
 #endif
-#if !(defined(AF_KCM) || (defined(HAVE_DECL_AF_KCM) && HAVE_DECL_AF_KCM))
+#if defined(AF_KCM) || (defined(HAVE_DECL_AF_KCM) && HAVE_DECL_AF_KCM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_KCM) == (41), "AF_KCM != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_KCM 41
 #endif
-#if !(defined(AF_QIPCRTR) || (defined(HAVE_DECL_AF_QIPCRTR) && HAVE_DECL_AF_QIPCRTR))
+#if defined(AF_QIPCRTR) || (defined(HAVE_DECL_AF_QIPCRTR) && HAVE_DECL_AF_QIPCRTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_QIPCRTR) == (42), "AF_QIPCRTR != 42");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_QIPCRTR 42
 #endif
-#if !(defined(AF_SMC) || (defined(HAVE_DECL_AF_SMC) && HAVE_DECL_AF_SMC))
+#if defined(AF_SMC) || (defined(HAVE_DECL_AF_SMC) && HAVE_DECL_AF_SMC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AF_SMC) == (43), "AF_SMC != 43");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AF_SMC 43
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat addrfams[] = {
- XLAT(AF_UNSPEC),
- XLAT(AF_UNIX),
- XLAT(AF_INET),
- XLAT(AF_AX25),
- XLAT(AF_IPX),
- XLAT(AF_APPLETALK),
- XLAT(AF_NETROM),
- XLAT(AF_BRIDGE),
- XLAT(AF_ATMPVC),
- XLAT(AF_X25),
- XLAT(AF_INET6),
- XLAT(AF_ROSE),
- XLAT(AF_DECnet),
- XLAT(AF_NETBEUI),
- XLAT(AF_SECURITY),
- XLAT(AF_KEY),
- XLAT(AF_NETLINK),
- XLAT(AF_PACKET),
- XLAT(AF_ASH),
- XLAT(AF_ECONET),
- XLAT(AF_ATMSVC),
- XLAT(AF_RDS),
- XLAT(AF_SNA),
- XLAT(AF_IRDA),
- XLAT(AF_PPPOX),
- XLAT(AF_WANPIPE),
- XLAT(AF_LLC),
- XLAT(AF_IB),
- XLAT(AF_MPLS),
- XLAT(AF_CAN),
- XLAT(AF_TIPC),
- XLAT(AF_BLUETOOTH),
- XLAT(AF_IUCV),
- XLAT(AF_RXRPC),
- XLAT(AF_ISDN),
- XLAT(AF_PHONET),
- XLAT(AF_IEEE802154),
- XLAT(AF_CAIF),
- XLAT(AF_ALG),
- XLAT(AF_NFC),
- XLAT(AF_VSOCK),
- XLAT(AF_KCM),
- XLAT(AF_QIPCRTR),
- XLAT(AF_SMC),
+ [AF_UNSPEC] = XLAT(AF_UNSPEC),
+ [AF_UNIX] = XLAT(AF_UNIX),
+ [AF_INET] = XLAT(AF_INET),
+ [AF_AX25] = XLAT(AF_AX25),
+ [AF_IPX] = XLAT(AF_IPX),
+ [AF_APPLETALK] = XLAT(AF_APPLETALK),
+ [AF_NETROM] = XLAT(AF_NETROM),
+ [AF_BRIDGE] = XLAT(AF_BRIDGE),
+ [AF_ATMPVC] = XLAT(AF_ATMPVC),
+ [AF_X25] = XLAT(AF_X25),
+ [AF_INET6] = XLAT(AF_INET6),
+ [AF_ROSE] = XLAT(AF_ROSE),
+ [AF_DECnet] = XLAT(AF_DECnet),
+ [AF_NETBEUI] = XLAT(AF_NETBEUI),
+ [AF_SECURITY] = XLAT(AF_SECURITY),
+ [AF_KEY] = XLAT(AF_KEY),
+ [AF_NETLINK] = XLAT(AF_NETLINK),
+ [AF_PACKET] = XLAT(AF_PACKET),
+ [AF_ASH] = XLAT(AF_ASH),
+ [AF_ECONET] = XLAT(AF_ECONET),
+ [AF_ATMSVC] = XLAT(AF_ATMSVC),
+ [AF_RDS] = XLAT(AF_RDS),
+ [AF_SNA] = XLAT(AF_SNA),
+ [AF_IRDA] = XLAT(AF_IRDA),
+ [AF_PPPOX] = XLAT(AF_PPPOX),
+ [AF_WANPIPE] = XLAT(AF_WANPIPE),
+ [AF_LLC] = XLAT(AF_LLC),
+ [AF_IB] = XLAT(AF_IB),
+ [AF_MPLS] = XLAT(AF_MPLS),
+ [AF_CAN] = XLAT(AF_CAN),
+ [AF_TIPC] = XLAT(AF_TIPC),
+ [AF_BLUETOOTH] = XLAT(AF_BLUETOOTH),
+ [AF_IUCV] = XLAT(AF_IUCV),
+ [AF_RXRPC] = XLAT(AF_RXRPC),
+ [AF_ISDN] = XLAT(AF_ISDN),
+ [AF_PHONET] = XLAT(AF_PHONET),
+ [AF_IEEE802154] = XLAT(AF_IEEE802154),
+ [AF_CAIF] = XLAT(AF_CAIF),
+ [AF_ALG] = XLAT(AF_ALG),
+ [AF_NFC] = XLAT(AF_NFC),
+ [AF_VSOCK] = XLAT(AF_VSOCK),
+ [AF_KCM] = XLAT(AF_KCM),
+ [AF_QIPCRTR] = XLAT(AF_QIPCRTR),
+ [AF_SMC] = XLAT(AF_SMC),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/addrfams.in b/xlat/addrfams.in
index 427d993..5824c3b 100644
--- a/xlat/addrfams.in
+++ b/xlat/addrfams.in
@@ -1,3 +1,4 @@
+#value_indexed
 AF_UNSPEC	0
 AF_UNIX		1
 AF_INET		2
diff --git a/xlat/adjtimex_modes.h b/xlat/adjtimex_modes.h
index 7415fe8..4c198f3 100644
--- a/xlat/adjtimex_modes.h
+++ b/xlat/adjtimex_modes.h
@@ -1,56 +1,128 @@
 /* Generated by ./xlat/gen.sh from ./xlat/adjtimex_modes.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(ADJ_OFFSET_SS_READ) || (defined(HAVE_DECL_ADJ_OFFSET_SS_READ) && HAVE_DECL_ADJ_OFFSET_SS_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_OFFSET_SS_READ) == (0xa001), "ADJ_OFFSET_SS_READ != 0xa001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_OFFSET_SS_READ 0xa001
+#endif
+#if defined(ADJ_OFFSET_SINGLESHOT) || (defined(HAVE_DECL_ADJ_OFFSET_SINGLESHOT) && HAVE_DECL_ADJ_OFFSET_SINGLESHOT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_OFFSET_SINGLESHOT) == (0x8001), "ADJ_OFFSET_SINGLESHOT != 0x8001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_OFFSET_SINGLESHOT 0x8001
+#endif
+#if defined(ADJ_OFFSET) || (defined(HAVE_DECL_ADJ_OFFSET) && HAVE_DECL_ADJ_OFFSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_OFFSET) == (0x0001), "ADJ_OFFSET != 0x0001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_OFFSET 0x0001
+#endif
+#if defined(ADJ_FREQUENCY) || (defined(HAVE_DECL_ADJ_FREQUENCY) && HAVE_DECL_ADJ_FREQUENCY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_FREQUENCY) == (0x0002), "ADJ_FREQUENCY != 0x0002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_FREQUENCY 0x0002
+#endif
+#if defined(ADJ_MAXERROR) || (defined(HAVE_DECL_ADJ_MAXERROR) && HAVE_DECL_ADJ_MAXERROR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_MAXERROR) == (0x0004), "ADJ_MAXERROR != 0x0004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_MAXERROR 0x0004
+#endif
+#if defined(ADJ_ESTERROR) || (defined(HAVE_DECL_ADJ_ESTERROR) && HAVE_DECL_ADJ_ESTERROR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_ESTERROR) == (0x0008), "ADJ_ESTERROR != 0x0008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_ESTERROR 0x0008
+#endif
+#if defined(ADJ_STATUS) || (defined(HAVE_DECL_ADJ_STATUS) && HAVE_DECL_ADJ_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_STATUS) == (0x0010), "ADJ_STATUS != 0x0010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_STATUS 0x0010
+#endif
+#if defined(ADJ_TIMECONST) || (defined(HAVE_DECL_ADJ_TIMECONST) && HAVE_DECL_ADJ_TIMECONST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_TIMECONST) == (0x0020), "ADJ_TIMECONST != 0x0020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_TIMECONST 0x0020
+#endif
+#if defined(ADJ_TAI) || (defined(HAVE_DECL_ADJ_TAI) && HAVE_DECL_ADJ_TAI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_TAI) == (0x0080), "ADJ_TAI != 0x0080");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_TAI 0x0080
+#endif
+#if defined(ADJ_SETOFFSET) || (defined(HAVE_DECL_ADJ_SETOFFSET) && HAVE_DECL_ADJ_SETOFFSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_SETOFFSET) == (0x0100), "ADJ_SETOFFSET != 0x0100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_SETOFFSET 0x0100
+#endif
+#if defined(ADJ_MICRO) || (defined(HAVE_DECL_ADJ_MICRO) && HAVE_DECL_ADJ_MICRO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_MICRO) == (0x1000), "ADJ_MICRO != 0x1000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_MICRO 0x1000
+#endif
+#if defined(ADJ_NANO) || (defined(HAVE_DECL_ADJ_NANO) && HAVE_DECL_ADJ_NANO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_NANO) == (0x2000), "ADJ_NANO != 0x2000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_NANO 0x2000
+#endif
+#if defined(ADJ_TICK) || (defined(HAVE_DECL_ADJ_TICK) && HAVE_DECL_ADJ_TICK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADJ_TICK) == (0x4000), "ADJ_TICK != 0x4000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ADJ_TICK 0x4000
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat adjtimex_modes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat adjtimex_modes[] = {
- XLAT(0),
-#if defined(ADJ_OFFSET) || (defined(HAVE_DECL_ADJ_OFFSET) && HAVE_DECL_ADJ_OFFSET)
-  XLAT(ADJ_OFFSET),
-#endif
-#if defined(ADJ_FREQUENCY) || (defined(HAVE_DECL_ADJ_FREQUENCY) && HAVE_DECL_ADJ_FREQUENCY)
-  XLAT(ADJ_FREQUENCY),
-#endif
-#if defined(ADJ_MAXERROR) || (defined(HAVE_DECL_ADJ_MAXERROR) && HAVE_DECL_ADJ_MAXERROR)
-  XLAT(ADJ_MAXERROR),
-#endif
-#if defined(ADJ_ESTERROR) || (defined(HAVE_DECL_ADJ_ESTERROR) && HAVE_DECL_ADJ_ESTERROR)
-  XLAT(ADJ_ESTERROR),
-#endif
-#if defined(ADJ_STATUS) || (defined(HAVE_DECL_ADJ_STATUS) && HAVE_DECL_ADJ_STATUS)
-  XLAT(ADJ_STATUS),
-#endif
-#if defined(ADJ_TIMECONST) || (defined(HAVE_DECL_ADJ_TIMECONST) && HAVE_DECL_ADJ_TIMECONST)
-  XLAT(ADJ_TIMECONST),
-#endif
-#if defined(ADJ_TAI) || (defined(HAVE_DECL_ADJ_TAI) && HAVE_DECL_ADJ_TAI)
-  XLAT(ADJ_TAI),
-#endif
-#if defined(ADJ_SETOFFSET) || (defined(HAVE_DECL_ADJ_SETOFFSET) && HAVE_DECL_ADJ_SETOFFSET)
-  XLAT(ADJ_SETOFFSET),
-#endif
-#if defined(ADJ_MICRO) || (defined(HAVE_DECL_ADJ_MICRO) && HAVE_DECL_ADJ_MICRO)
-  XLAT(ADJ_MICRO),
-#endif
-#if defined(ADJ_NANO) || (defined(HAVE_DECL_ADJ_NANO) && HAVE_DECL_ADJ_NANO)
-  XLAT(ADJ_NANO),
-#endif
-#if defined(ADJ_TICK) || (defined(HAVE_DECL_ADJ_TICK) && HAVE_DECL_ADJ_TICK)
-  XLAT(ADJ_TICK),
-#endif
-#if defined(ADJ_OFFSET_SINGLESHOT) || (defined(HAVE_DECL_ADJ_OFFSET_SINGLESHOT) && HAVE_DECL_ADJ_OFFSET_SINGLESHOT)
-  XLAT(ADJ_OFFSET_SINGLESHOT),
-#endif
-#if defined(ADJ_OFFSET_SS_READ) || (defined(HAVE_DECL_ADJ_OFFSET_SS_READ) && HAVE_DECL_ADJ_OFFSET_SS_READ)
-  XLAT(ADJ_OFFSET_SS_READ),
-#endif
+ XLAT(ADJ_OFFSET_SS_READ),
+ XLAT(ADJ_OFFSET_SINGLESHOT),
+ XLAT(ADJ_OFFSET),
+ XLAT(ADJ_FREQUENCY),
+ XLAT(ADJ_MAXERROR),
+ XLAT(ADJ_ESTERROR),
+ XLAT(ADJ_STATUS),
+ XLAT(ADJ_TIMECONST),
+ XLAT(ADJ_TAI),
+ XLAT(ADJ_SETOFFSET),
+ XLAT(ADJ_MICRO),
+ XLAT(ADJ_NANO),
+ XLAT(ADJ_TICK),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/adjtimex_modes.in b/xlat/adjtimex_modes.in
index e2ca680..fa616e6 100644
--- a/xlat/adjtimex_modes.in
+++ b/xlat/adjtimex_modes.in
@@ -1,14 +1,13 @@
-0
-ADJ_OFFSET
-ADJ_FREQUENCY
-ADJ_MAXERROR
-ADJ_ESTERROR
-ADJ_STATUS
-ADJ_TIMECONST
-ADJ_TAI
-ADJ_SETOFFSET
-ADJ_MICRO
-ADJ_NANO
-ADJ_TICK
-ADJ_OFFSET_SINGLESHOT
-ADJ_OFFSET_SS_READ
+ADJ_OFFSET_SS_READ	0xa001
+ADJ_OFFSET_SINGLESHOT	0x8001
+ADJ_OFFSET		0x0001
+ADJ_FREQUENCY		0x0002
+ADJ_MAXERROR		0x0004
+ADJ_ESTERROR		0x0008
+ADJ_STATUS		0x0010
+ADJ_TIMECONST		0x0020
+ADJ_TAI			0x0080
+ADJ_SETOFFSET		0x0100
+ADJ_MICRO		0x1000
+ADJ_NANO		0x2000
+ADJ_TICK		0x4000
diff --git a/xlat/adjtimex_state.h b/xlat/adjtimex_state.h
index 888f1b6..01b760c 100644
--- a/xlat/adjtimex_state.h
+++ b/xlat/adjtimex_state.h
@@ -1,32 +1,70 @@
 /* Generated by ./xlat/gen.sh from ./xlat/adjtimex_state.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat adjtimex_state in mpers mode
-
+#if defined(TIME_OK) || (defined(HAVE_DECL_TIME_OK) && HAVE_DECL_TIME_OK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIME_OK) == (0), "TIME_OK != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define TIME_OK 0
+#endif
+#if defined(TIME_INS) || (defined(HAVE_DECL_TIME_INS) && HAVE_DECL_TIME_INS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIME_INS) == (1), "TIME_INS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIME_INS 1
+#endif
+#if defined(TIME_DEL) || (defined(HAVE_DECL_TIME_DEL) && HAVE_DECL_TIME_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIME_DEL) == (2), "TIME_DEL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIME_DEL 2
+#endif
+#if defined(TIME_OOP) || (defined(HAVE_DECL_TIME_OOP) && HAVE_DECL_TIME_OOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIME_OOP) == (3), "TIME_OOP != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIME_OOP 3
+#endif
+#if defined(TIME_WAIT) || (defined(HAVE_DECL_TIME_WAIT) && HAVE_DECL_TIME_WAIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIME_WAIT) == (4), "TIME_WAIT != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIME_WAIT 4
+#endif
+#if defined(TIME_ERROR) || (defined(HAVE_DECL_TIME_ERROR) && HAVE_DECL_TIME_ERROR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIME_ERROR) == (5), "TIME_ERROR != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIME_ERROR 5
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat adjtimex_state in mpers mode
+
+# else
 
 static
 const struct xlat adjtimex_state[] = {
-#if defined(TIME_OK) || (defined(HAVE_DECL_TIME_OK) && HAVE_DECL_TIME_OK)
-  XLAT(TIME_OK),
-#endif
-#if defined(TIME_INS) || (defined(HAVE_DECL_TIME_INS) && HAVE_DECL_TIME_INS)
-  XLAT(TIME_INS),
-#endif
-#if defined(TIME_DEL) || (defined(HAVE_DECL_TIME_DEL) && HAVE_DECL_TIME_DEL)
-  XLAT(TIME_DEL),
-#endif
-#if defined(TIME_OOP) || (defined(HAVE_DECL_TIME_OOP) && HAVE_DECL_TIME_OOP)
-  XLAT(TIME_OOP),
-#endif
-#if defined(TIME_WAIT) || (defined(HAVE_DECL_TIME_WAIT) && HAVE_DECL_TIME_WAIT)
-  XLAT(TIME_WAIT),
-#endif
-#if defined(TIME_ERROR) || (defined(HAVE_DECL_TIME_ERROR) && HAVE_DECL_TIME_ERROR)
-  XLAT(TIME_ERROR),
-#endif
+ [TIME_OK] = XLAT(TIME_OK),
+ [TIME_INS] = XLAT(TIME_INS),
+ [TIME_DEL] = XLAT(TIME_DEL),
+ [TIME_OOP] = XLAT(TIME_OOP),
+ [TIME_WAIT] = XLAT(TIME_WAIT),
+ [TIME_ERROR] = XLAT(TIME_ERROR),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/adjtimex_state.in b/xlat/adjtimex_state.in
index 873b9a1..c4ec23c 100644
--- a/xlat/adjtimex_state.in
+++ b/xlat/adjtimex_state.in
@@ -1,6 +1,7 @@
-TIME_OK
-TIME_INS
-TIME_DEL
-TIME_OOP
-TIME_WAIT
-TIME_ERROR
+#value_indexed
+TIME_OK		0
+TIME_INS	1
+TIME_DEL	2
+TIME_OOP	3
+TIME_WAIT	4
+TIME_ERROR	5
diff --git a/xlat/adjtimex_status.h b/xlat/adjtimex_status.h
index 16e7811..1c3084d 100644
--- a/xlat/adjtimex_status.h
+++ b/xlat/adjtimex_status.h
@@ -1,64 +1,152 @@
 /* Generated by ./xlat/gen.sh from ./xlat/adjtimex_status.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(STA_PLL) || (defined(HAVE_DECL_STA_PLL) && HAVE_DECL_STA_PLL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_PLL) == (0x0001), "STA_PLL != 0x0001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_PLL 0x0001
+#endif
+#if defined(STA_PPSFREQ) || (defined(HAVE_DECL_STA_PPSFREQ) && HAVE_DECL_STA_PPSFREQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_PPSFREQ) == (0x0002), "STA_PPSFREQ != 0x0002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_PPSFREQ 0x0002
+#endif
+#if defined(STA_PPSTIME) || (defined(HAVE_DECL_STA_PPSTIME) && HAVE_DECL_STA_PPSTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_PPSTIME) == (0x0004), "STA_PPSTIME != 0x0004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_PPSTIME 0x0004
+#endif
+#if defined(STA_FLL) || (defined(HAVE_DECL_STA_FLL) && HAVE_DECL_STA_FLL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_FLL) == (0x0008), "STA_FLL != 0x0008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_FLL 0x0008
+#endif
+#if defined(STA_INS) || (defined(HAVE_DECL_STA_INS) && HAVE_DECL_STA_INS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_INS) == (0x0010), "STA_INS != 0x0010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_INS 0x0010
+#endif
+#if defined(STA_DEL) || (defined(HAVE_DECL_STA_DEL) && HAVE_DECL_STA_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_DEL) == (0x0020), "STA_DEL != 0x0020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_DEL 0x0020
+#endif
+#if defined(STA_UNSYNC) || (defined(HAVE_DECL_STA_UNSYNC) && HAVE_DECL_STA_UNSYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_UNSYNC) == (0x0040), "STA_UNSYNC != 0x0040");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_UNSYNC 0x0040
+#endif
+#if defined(STA_FREQHOLD) || (defined(HAVE_DECL_STA_FREQHOLD) && HAVE_DECL_STA_FREQHOLD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_FREQHOLD) == (0x0080), "STA_FREQHOLD != 0x0080");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_FREQHOLD 0x0080
+#endif
+#if defined(STA_PPSSIGNAL) || (defined(HAVE_DECL_STA_PPSSIGNAL) && HAVE_DECL_STA_PPSSIGNAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_PPSSIGNAL) == (0x0100), "STA_PPSSIGNAL != 0x0100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_PPSSIGNAL 0x0100
+#endif
+#if defined(STA_PPSJITTER) || (defined(HAVE_DECL_STA_PPSJITTER) && HAVE_DECL_STA_PPSJITTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_PPSJITTER) == (0x0200), "STA_PPSJITTER != 0x0200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_PPSJITTER 0x0200
+#endif
+#if defined(STA_PPSWANDER) || (defined(HAVE_DECL_STA_PPSWANDER) && HAVE_DECL_STA_PPSWANDER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_PPSWANDER) == (0x0400), "STA_PPSWANDER != 0x0400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_PPSWANDER 0x0400
+#endif
+#if defined(STA_PPSERROR) || (defined(HAVE_DECL_STA_PPSERROR) && HAVE_DECL_STA_PPSERROR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_PPSERROR) == (0x0800), "STA_PPSERROR != 0x0800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_PPSERROR 0x0800
+#endif
+#if defined(STA_CLOCKERR) || (defined(HAVE_DECL_STA_CLOCKERR) && HAVE_DECL_STA_CLOCKERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_CLOCKERR) == (0x1000), "STA_CLOCKERR != 0x1000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_CLOCKERR 0x1000
+#endif
+#if defined(STA_NANO) || (defined(HAVE_DECL_STA_NANO) && HAVE_DECL_STA_NANO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_NANO) == (0x2000), "STA_NANO != 0x2000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_NANO 0x2000
+#endif
+#if defined(STA_MODE) || (defined(HAVE_DECL_STA_MODE) && HAVE_DECL_STA_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_MODE) == (0x4000), "STA_MODE != 0x4000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_MODE 0x4000
+#endif
+#if defined(STA_CLK) || (defined(HAVE_DECL_STA_CLK) && HAVE_DECL_STA_CLK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STA_CLK) == (0x8000), "STA_CLK != 0x8000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define STA_CLK 0x8000
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat adjtimex_status[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat adjtimex_status[] = {
-#if defined(STA_PLL) || (defined(HAVE_DECL_STA_PLL) && HAVE_DECL_STA_PLL)
-  XLAT(STA_PLL),
-#endif
-#if defined(STA_PPSFREQ) || (defined(HAVE_DECL_STA_PPSFREQ) && HAVE_DECL_STA_PPSFREQ)
-  XLAT(STA_PPSFREQ),
-#endif
-#if defined(STA_PPSTIME) || (defined(HAVE_DECL_STA_PPSTIME) && HAVE_DECL_STA_PPSTIME)
-  XLAT(STA_PPSTIME),
-#endif
-#if defined(STA_FLL) || (defined(HAVE_DECL_STA_FLL) && HAVE_DECL_STA_FLL)
-  XLAT(STA_FLL),
-#endif
-#if defined(STA_INS) || (defined(HAVE_DECL_STA_INS) && HAVE_DECL_STA_INS)
-  XLAT(STA_INS),
-#endif
-#if defined(STA_DEL) || (defined(HAVE_DECL_STA_DEL) && HAVE_DECL_STA_DEL)
-  XLAT(STA_DEL),
-#endif
-#if defined(STA_UNSYNC) || (defined(HAVE_DECL_STA_UNSYNC) && HAVE_DECL_STA_UNSYNC)
-  XLAT(STA_UNSYNC),
-#endif
-#if defined(STA_FREQHOLD) || (defined(HAVE_DECL_STA_FREQHOLD) && HAVE_DECL_STA_FREQHOLD)
-  XLAT(STA_FREQHOLD),
-#endif
-#if defined(STA_PPSSIGNAL) || (defined(HAVE_DECL_STA_PPSSIGNAL) && HAVE_DECL_STA_PPSSIGNAL)
-  XLAT(STA_PPSSIGNAL),
-#endif
-#if defined(STA_PPSJITTER) || (defined(HAVE_DECL_STA_PPSJITTER) && HAVE_DECL_STA_PPSJITTER)
-  XLAT(STA_PPSJITTER),
-#endif
-#if defined(STA_PPSWANDER) || (defined(HAVE_DECL_STA_PPSWANDER) && HAVE_DECL_STA_PPSWANDER)
-  XLAT(STA_PPSWANDER),
-#endif
-#if defined(STA_PPSERROR) || (defined(HAVE_DECL_STA_PPSERROR) && HAVE_DECL_STA_PPSERROR)
-  XLAT(STA_PPSERROR),
-#endif
-#if defined(STA_CLOCKERR) || (defined(HAVE_DECL_STA_CLOCKERR) && HAVE_DECL_STA_CLOCKERR)
-  XLAT(STA_CLOCKERR),
-#endif
-#if defined(STA_NANO) || (defined(HAVE_DECL_STA_NANO) && HAVE_DECL_STA_NANO)
-  XLAT(STA_NANO),
-#endif
-#if defined(STA_MODE) || (defined(HAVE_DECL_STA_MODE) && HAVE_DECL_STA_MODE)
-  XLAT(STA_MODE),
-#endif
-#if defined(STA_CLK) || (defined(HAVE_DECL_STA_CLK) && HAVE_DECL_STA_CLK)
-  XLAT(STA_CLK),
-#endif
+ XLAT(STA_PLL),
+ XLAT(STA_PPSFREQ),
+ XLAT(STA_PPSTIME),
+ XLAT(STA_FLL),
+ XLAT(STA_INS),
+ XLAT(STA_DEL),
+ XLAT(STA_UNSYNC),
+ XLAT(STA_FREQHOLD),
+ XLAT(STA_PPSSIGNAL),
+ XLAT(STA_PPSJITTER),
+ XLAT(STA_PPSWANDER),
+ XLAT(STA_PPSERROR),
+ XLAT(STA_CLOCKERR),
+ XLAT(STA_NANO),
+ XLAT(STA_MODE),
+ XLAT(STA_CLK),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/adjtimex_status.in b/xlat/adjtimex_status.in
index c6b6264..7b83da8 100644
--- a/xlat/adjtimex_status.in
+++ b/xlat/adjtimex_status.in
@@ -1,16 +1,16 @@
-STA_PLL
-STA_PPSFREQ
-STA_PPSTIME
-STA_FLL
-STA_INS
-STA_DEL
-STA_UNSYNC
-STA_FREQHOLD
-STA_PPSSIGNAL
-STA_PPSJITTER
-STA_PPSWANDER
-STA_PPSERROR
-STA_CLOCKERR
-STA_NANO
-STA_MODE
-STA_CLK
+STA_PLL		0x0001
+STA_PPSFREQ	0x0002
+STA_PPSTIME	0x0004
+STA_FLL		0x0008
+STA_INS		0x0010
+STA_DEL		0x0020
+STA_UNSYNC	0x0040
+STA_FREQHOLD	0x0080
+STA_PPSSIGNAL	0x0100
+STA_PPSJITTER	0x0200
+STA_PPSWANDER	0x0400
+STA_PPSERROR	0x0800
+STA_CLOCKERR	0x1000
+STA_NANO	0x2000
+STA_MODE	0x4000
+STA_CLK		0x8000
diff --git a/xlat/advise.h b/xlat/advise.h
index 526219d..cf52522 100644
--- a/xlat/advise.h
+++ b/xlat/advise.h
@@ -1,32 +1,92 @@
 /* Generated by ./xlat/gen.sh from ./xlat/advise.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat advise in mpers mode
-
+#if defined(POSIX_FADV_NORMAL) || (defined(HAVE_DECL_POSIX_FADV_NORMAL) && HAVE_DECL_POSIX_FADV_NORMAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POSIX_FADV_NORMAL) == (0), "POSIX_FADV_NORMAL != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define POSIX_FADV_NORMAL 0
+#endif
+#if defined(POSIX_FADV_RANDOM) || (defined(HAVE_DECL_POSIX_FADV_RANDOM) && HAVE_DECL_POSIX_FADV_RANDOM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POSIX_FADV_RANDOM) == (1), "POSIX_FADV_RANDOM != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define POSIX_FADV_RANDOM 1
+#endif
+#if defined(POSIX_FADV_SEQUENTIAL) || (defined(HAVE_DECL_POSIX_FADV_SEQUENTIAL) && HAVE_DECL_POSIX_FADV_SEQUENTIAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POSIX_FADV_SEQUENTIAL) == (2), "POSIX_FADV_SEQUENTIAL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define POSIX_FADV_SEQUENTIAL 2
+#endif
+#if defined(POSIX_FADV_WILLNEED) || (defined(HAVE_DECL_POSIX_FADV_WILLNEED) && HAVE_DECL_POSIX_FADV_WILLNEED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POSIX_FADV_WILLNEED) == (3), "POSIX_FADV_WILLNEED != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define POSIX_FADV_WILLNEED 3
+#endif
+#if defined __s390x__
+#if defined(POSIX_FADV_DONTNEED) || (defined(HAVE_DECL_POSIX_FADV_DONTNEED) && HAVE_DECL_POSIX_FADV_DONTNEED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POSIX_FADV_DONTNEED) == (6), "POSIX_FADV_DONTNEED != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define POSIX_FADV_DONTNEED 6
+#endif
+#if defined(POSIX_FADV_NOREUSE) || (defined(HAVE_DECL_POSIX_FADV_NOREUSE) && HAVE_DECL_POSIX_FADV_NOREUSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POSIX_FADV_NOREUSE) == (7), "POSIX_FADV_NOREUSE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define POSIX_FADV_NOREUSE 7
+#endif
+#else
+#if defined(POSIX_FADV_DONTNEED) || (defined(HAVE_DECL_POSIX_FADV_DONTNEED) && HAVE_DECL_POSIX_FADV_DONTNEED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POSIX_FADV_DONTNEED) == (4), "POSIX_FADV_DONTNEED != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define POSIX_FADV_DONTNEED 4
+#endif
+#if defined(POSIX_FADV_NOREUSE) || (defined(HAVE_DECL_POSIX_FADV_NOREUSE) && HAVE_DECL_POSIX_FADV_NOREUSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POSIX_FADV_NOREUSE) == (5), "POSIX_FADV_NOREUSE != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define POSIX_FADV_NOREUSE 5
+#endif
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat advise in mpers mode
+
+# else
 
 static
 const struct xlat advise[] = {
-#if defined(POSIX_FADV_NORMAL) || (defined(HAVE_DECL_POSIX_FADV_NORMAL) && HAVE_DECL_POSIX_FADV_NORMAL)
-  XLAT(POSIX_FADV_NORMAL),
-#endif
-#if defined(POSIX_FADV_RANDOM) || (defined(HAVE_DECL_POSIX_FADV_RANDOM) && HAVE_DECL_POSIX_FADV_RANDOM)
-  XLAT(POSIX_FADV_RANDOM),
-#endif
-#if defined(POSIX_FADV_SEQUENTIAL) || (defined(HAVE_DECL_POSIX_FADV_SEQUENTIAL) && HAVE_DECL_POSIX_FADV_SEQUENTIAL)
-  XLAT(POSIX_FADV_SEQUENTIAL),
-#endif
-#if defined(POSIX_FADV_WILLNEED) || (defined(HAVE_DECL_POSIX_FADV_WILLNEED) && HAVE_DECL_POSIX_FADV_WILLNEED)
-  XLAT(POSIX_FADV_WILLNEED),
-#endif
-#if defined(POSIX_FADV_DONTNEED) || (defined(HAVE_DECL_POSIX_FADV_DONTNEED) && HAVE_DECL_POSIX_FADV_DONTNEED)
-  XLAT(POSIX_FADV_DONTNEED),
-#endif
-#if defined(POSIX_FADV_NOREUSE) || (defined(HAVE_DECL_POSIX_FADV_NOREUSE) && HAVE_DECL_POSIX_FADV_NOREUSE)
-  XLAT(POSIX_FADV_NOREUSE),
+ XLAT(POSIX_FADV_NORMAL),
+ XLAT(POSIX_FADV_RANDOM),
+ XLAT(POSIX_FADV_SEQUENTIAL),
+ XLAT(POSIX_FADV_WILLNEED),
+#if defined __s390x__
+ XLAT(POSIX_FADV_DONTNEED),
+ XLAT(POSIX_FADV_NOREUSE),
+#else
+ XLAT(POSIX_FADV_DONTNEED),
+ XLAT(POSIX_FADV_NOREUSE),
 #endif
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/advise.in b/xlat/advise.in
index 47540e0..5284335 100644
--- a/xlat/advise.in
+++ b/xlat/advise.in
@@ -1,6 +1,11 @@
-POSIX_FADV_NORMAL
-POSIX_FADV_RANDOM
-POSIX_FADV_SEQUENTIAL
-POSIX_FADV_WILLNEED
-POSIX_FADV_DONTNEED
-POSIX_FADV_NOREUSE
+POSIX_FADV_NORMAL	0
+POSIX_FADV_RANDOM	1
+POSIX_FADV_SEQUENTIAL	2
+POSIX_FADV_WILLNEED	3
+#if defined __s390x__
+POSIX_FADV_DONTNEED	6
+POSIX_FADV_NOREUSE	7
+#else
+POSIX_FADV_DONTNEED	4
+POSIX_FADV_NOREUSE	5
+#endif
diff --git a/xlat/af_packet_types.h b/xlat/af_packet_types.h
index 72bb419..c104813 100644
--- a/xlat/af_packet_types.h
+++ b/xlat/af_packet_types.h
@@ -1,35 +1,86 @@
 /* Generated by ./xlat/gen.sh from ./xlat/af_packet_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat af_packet_types in mpers mode
-
+#if defined(PACKET_HOST) || (defined(HAVE_DECL_PACKET_HOST) && HAVE_DECL_PACKET_HOST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PACKET_HOST) == (0), "PACKET_HOST != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define PACKET_HOST 0
+#endif
+#if defined(PACKET_BROADCAST) || (defined(HAVE_DECL_PACKET_BROADCAST) && HAVE_DECL_PACKET_BROADCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PACKET_BROADCAST) == (1), "PACKET_BROADCAST != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PACKET_BROADCAST 1
+#endif
+#if defined(PACKET_MULTICAST) || (defined(HAVE_DECL_PACKET_MULTICAST) && HAVE_DECL_PACKET_MULTICAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PACKET_MULTICAST) == (2), "PACKET_MULTICAST != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PACKET_MULTICAST 2
+#endif
+#if defined(PACKET_OTHERHOST) || (defined(HAVE_DECL_PACKET_OTHERHOST) && HAVE_DECL_PACKET_OTHERHOST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PACKET_OTHERHOST) == (3), "PACKET_OTHERHOST != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PACKET_OTHERHOST 3
+#endif
+#if defined(PACKET_OUTGOING) || (defined(HAVE_DECL_PACKET_OUTGOING) && HAVE_DECL_PACKET_OUTGOING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PACKET_OUTGOING) == (4), "PACKET_OUTGOING != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PACKET_OUTGOING 4
+#endif
+#if defined(PACKET_LOOPBACK) || (defined(HAVE_DECL_PACKET_LOOPBACK) && HAVE_DECL_PACKET_LOOPBACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PACKET_LOOPBACK) == (5), "PACKET_LOOPBACK != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PACKET_LOOPBACK 5
+#endif
+#if defined(PACKET_USER) || (defined(HAVE_DECL_PACKET_USER) && HAVE_DECL_PACKET_USER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PACKET_USER) == (6), "PACKET_USER != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PACKET_USER 6
+#endif
+#if defined(PACKET_KERNEL) || (defined(HAVE_DECL_PACKET_KERNEL) && HAVE_DECL_PACKET_KERNEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PACKET_KERNEL) == (7), "PACKET_KERNEL != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PACKET_KERNEL 7
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat af_packet_types in mpers mode
+
+# else
 
 static
 const struct xlat af_packet_types[] = {
-#if defined(PACKET_HOST) || (defined(HAVE_DECL_PACKET_HOST) && HAVE_DECL_PACKET_HOST)
-  XLAT(PACKET_HOST),
-#endif
-#if defined(PACKET_BROADCAST) || (defined(HAVE_DECL_PACKET_BROADCAST) && HAVE_DECL_PACKET_BROADCAST)
-  XLAT(PACKET_BROADCAST),
-#endif
-#if defined(PACKET_MULTICAST) || (defined(HAVE_DECL_PACKET_MULTICAST) && HAVE_DECL_PACKET_MULTICAST)
-  XLAT(PACKET_MULTICAST),
-#endif
-#if defined(PACKET_OTHERHOST) || (defined(HAVE_DECL_PACKET_OTHERHOST) && HAVE_DECL_PACKET_OTHERHOST)
-  XLAT(PACKET_OTHERHOST),
-#endif
-#if defined(PACKET_OUTGOING) || (defined(HAVE_DECL_PACKET_OUTGOING) && HAVE_DECL_PACKET_OUTGOING)
-  XLAT(PACKET_OUTGOING),
-#endif
-#if defined(PACKET_LOOPBACK) || (defined(HAVE_DECL_PACKET_LOOPBACK) && HAVE_DECL_PACKET_LOOPBACK)
-  XLAT(PACKET_LOOPBACK),
-#endif
-#if defined(PACKET_FASTROUTE) || (defined(HAVE_DECL_PACKET_FASTROUTE) && HAVE_DECL_PACKET_FASTROUTE)
-  XLAT(PACKET_FASTROUTE),
-#endif
+ [PACKET_HOST] = XLAT(PACKET_HOST),
+ [PACKET_BROADCAST] = XLAT(PACKET_BROADCAST),
+ [PACKET_MULTICAST] = XLAT(PACKET_MULTICAST),
+ [PACKET_OTHERHOST] = XLAT(PACKET_OTHERHOST),
+ [PACKET_OUTGOING] = XLAT(PACKET_OUTGOING),
+ [PACKET_LOOPBACK] = XLAT(PACKET_LOOPBACK),
+ [PACKET_USER] = XLAT(PACKET_USER),
+ [PACKET_KERNEL] = XLAT(PACKET_KERNEL),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/af_packet_types.in b/xlat/af_packet_types.in
index 18cf655..68f7515 100644
--- a/xlat/af_packet_types.in
+++ b/xlat/af_packet_types.in
@@ -1,7 +1,9 @@
-PACKET_HOST
-PACKET_BROADCAST
-PACKET_MULTICAST
-PACKET_OTHERHOST
-PACKET_OUTGOING
-PACKET_LOOPBACK
-PACKET_FASTROUTE
+#value_indexed
+PACKET_HOST		0
+PACKET_BROADCAST	1
+PACKET_MULTICAST	2
+PACKET_OTHERHOST	3
+PACKET_OUTGOING		4
+PACKET_LOOPBACK		5
+PACKET_USER		6
+PACKET_KERNEL		7
diff --git a/xlat/archvals.h b/xlat/archvals.h
index f8fb9c1..2e5264a 100644
--- a/xlat/archvals.h
+++ b/xlat/archvals.h
@@ -1,37 +1,79 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(ARCH_SET_GS) || (defined(HAVE_DECL_ARCH_SET_GS) && HAVE_DECL_ARCH_SET_GS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARCH_SET_GS) == (0x1001), "ARCH_SET_GS != 0x1001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ARCH_SET_GS 0x1001
 #endif
-#if !(defined(ARCH_SET_FS) || (defined(HAVE_DECL_ARCH_SET_FS) && HAVE_DECL_ARCH_SET_FS))
+#if defined(ARCH_SET_FS) || (defined(HAVE_DECL_ARCH_SET_FS) && HAVE_DECL_ARCH_SET_FS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARCH_SET_FS) == (0x1002), "ARCH_SET_FS != 0x1002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ARCH_SET_FS 0x1002
 #endif
-#if !(defined(ARCH_GET_FS) || (defined(HAVE_DECL_ARCH_GET_FS) && HAVE_DECL_ARCH_GET_FS))
+#if defined(ARCH_GET_FS) || (defined(HAVE_DECL_ARCH_GET_FS) && HAVE_DECL_ARCH_GET_FS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARCH_GET_FS) == (0x1003), "ARCH_GET_FS != 0x1003");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ARCH_GET_FS 0x1003
 #endif
-#if !(defined(ARCH_GET_GS) || (defined(HAVE_DECL_ARCH_GET_GS) && HAVE_DECL_ARCH_GET_GS))
+#if defined(ARCH_GET_GS) || (defined(HAVE_DECL_ARCH_GET_GS) && HAVE_DECL_ARCH_GET_GS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARCH_GET_GS) == (0x1004), "ARCH_GET_GS != 0x1004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ARCH_GET_GS 0x1004
 #endif
-#if !(defined(ARCH_GET_CPUID) || (defined(HAVE_DECL_ARCH_GET_CPUID) && HAVE_DECL_ARCH_GET_CPUID))
+#if defined(ARCH_GET_CPUID) || (defined(HAVE_DECL_ARCH_GET_CPUID) && HAVE_DECL_ARCH_GET_CPUID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARCH_GET_CPUID) == (0x1011), "ARCH_GET_CPUID != 0x1011");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ARCH_GET_CPUID 0x1011
 #endif
-#if !(defined(ARCH_SET_CPUID) || (defined(HAVE_DECL_ARCH_SET_CPUID) && HAVE_DECL_ARCH_SET_CPUID))
+#if defined(ARCH_SET_CPUID) || (defined(HAVE_DECL_ARCH_SET_CPUID) && HAVE_DECL_ARCH_SET_CPUID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARCH_SET_CPUID) == (0x1012), "ARCH_SET_CPUID != 0x1012");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ARCH_SET_CPUID 0x1012
 #endif
-#if !(defined(ARCH_MAP_VDSO_X32) || (defined(HAVE_DECL_ARCH_MAP_VDSO_X32) && HAVE_DECL_ARCH_MAP_VDSO_X32))
+#if defined(ARCH_MAP_VDSO_X32) || (defined(HAVE_DECL_ARCH_MAP_VDSO_X32) && HAVE_DECL_ARCH_MAP_VDSO_X32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARCH_MAP_VDSO_X32) == (0x2001), "ARCH_MAP_VDSO_X32 != 0x2001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ARCH_MAP_VDSO_X32 0x2001
 #endif
-#if !(defined(ARCH_MAP_VDSO_32) || (defined(HAVE_DECL_ARCH_MAP_VDSO_32) && HAVE_DECL_ARCH_MAP_VDSO_32))
+#if defined(ARCH_MAP_VDSO_32) || (defined(HAVE_DECL_ARCH_MAP_VDSO_32) && HAVE_DECL_ARCH_MAP_VDSO_32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARCH_MAP_VDSO_32) == (0x2002), "ARCH_MAP_VDSO_32 != 0x2002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ARCH_MAP_VDSO_32 0x2002
 #endif
-#if !(defined(ARCH_MAP_VDSO_64) || (defined(HAVE_DECL_ARCH_MAP_VDSO_64) && HAVE_DECL_ARCH_MAP_VDSO_64))
+#if defined(ARCH_MAP_VDSO_64) || (defined(HAVE_DECL_ARCH_MAP_VDSO_64) && HAVE_DECL_ARCH_MAP_VDSO_64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARCH_MAP_VDSO_64) == (0x2003), "ARCH_MAP_VDSO_64 != 0x2003");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ARCH_MAP_VDSO_64 0x2003
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat archvals in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat archvals in mpers mode
+
+# else
 
 static
 const struct xlat archvals[] = {
@@ -47,4 +89,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/arp_hardware_types.h b/xlat/arp_hardware_types.h
index 200456e..3da3fc5 100644
--- a/xlat/arp_hardware_types.h
+++ b/xlat/arp_hardware_types.h
@@ -1,207 +1,546 @@
 /* Generated by ./xlat/gen.sh from ./xlat/arp_hardware_types.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-const struct xlat arp_hardware_types[] = {
 #if defined(ARPHRD_NETROM) || (defined(HAVE_DECL_ARPHRD_NETROM) && HAVE_DECL_ARPHRD_NETROM)
-  XLAT(ARPHRD_NETROM),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_NETROM) == (0), "ARPHRD_NETROM != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_NETROM 0
 #endif
 #if defined(ARPHRD_ETHER) || (defined(HAVE_DECL_ARPHRD_ETHER) && HAVE_DECL_ARPHRD_ETHER)
-  XLAT(ARPHRD_ETHER),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_ETHER) == (1), "ARPHRD_ETHER != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_ETHER 1
 #endif
 #if defined(ARPHRD_EETHER) || (defined(HAVE_DECL_ARPHRD_EETHER) && HAVE_DECL_ARPHRD_EETHER)
-  XLAT(ARPHRD_EETHER),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_EETHER) == (2), "ARPHRD_EETHER != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_EETHER 2
 #endif
 #if defined(ARPHRD_AX25) || (defined(HAVE_DECL_ARPHRD_AX25) && HAVE_DECL_ARPHRD_AX25)
-  XLAT(ARPHRD_AX25),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_AX25) == (3), "ARPHRD_AX25 != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_AX25 3
 #endif
 #if defined(ARPHRD_PRONET) || (defined(HAVE_DECL_ARPHRD_PRONET) && HAVE_DECL_ARPHRD_PRONET)
-  XLAT(ARPHRD_PRONET),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_PRONET) == (4), "ARPHRD_PRONET != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_PRONET 4
 #endif
 #if defined(ARPHRD_CHAOS) || (defined(HAVE_DECL_ARPHRD_CHAOS) && HAVE_DECL_ARPHRD_CHAOS)
-  XLAT(ARPHRD_CHAOS),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_CHAOS) == (5), "ARPHRD_CHAOS != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_CHAOS 5
 #endif
 #if defined(ARPHRD_IEEE802) || (defined(HAVE_DECL_ARPHRD_IEEE802) && HAVE_DECL_ARPHRD_IEEE802)
-  XLAT(ARPHRD_IEEE802),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IEEE802) == (6), "ARPHRD_IEEE802 != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IEEE802 6
 #endif
 #if defined(ARPHRD_ARCNET) || (defined(HAVE_DECL_ARPHRD_ARCNET) && HAVE_DECL_ARPHRD_ARCNET)
-  XLAT(ARPHRD_ARCNET),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_ARCNET) == (7), "ARPHRD_ARCNET != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_ARCNET 7
 #endif
 #if defined(ARPHRD_APPLETLK) || (defined(HAVE_DECL_ARPHRD_APPLETLK) && HAVE_DECL_ARPHRD_APPLETLK)
-  XLAT(ARPHRD_APPLETLK),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_APPLETLK) == (8), "ARPHRD_APPLETLK != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_APPLETLK 8
 #endif
 #if defined(ARPHRD_DLCI) || (defined(HAVE_DECL_ARPHRD_DLCI) && HAVE_DECL_ARPHRD_DLCI)
-  XLAT(ARPHRD_DLCI),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_DLCI) == (15), "ARPHRD_DLCI != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_DLCI 15
 #endif
 #if defined(ARPHRD_ATM) || (defined(HAVE_DECL_ARPHRD_ATM) && HAVE_DECL_ARPHRD_ATM)
-  XLAT(ARPHRD_ATM),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_ATM) == (19), "ARPHRD_ATM != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_ATM 19
 #endif
 #if defined(ARPHRD_METRICOM) || (defined(HAVE_DECL_ARPHRD_METRICOM) && HAVE_DECL_ARPHRD_METRICOM)
-  XLAT(ARPHRD_METRICOM),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_METRICOM) == (23), "ARPHRD_METRICOM != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_METRICOM 23
 #endif
 #if defined(ARPHRD_IEEE1394) || (defined(HAVE_DECL_ARPHRD_IEEE1394) && HAVE_DECL_ARPHRD_IEEE1394)
-  XLAT(ARPHRD_IEEE1394),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IEEE1394) == (24), "ARPHRD_IEEE1394 != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IEEE1394 24
 #endif
 #if defined(ARPHRD_EUI64) || (defined(HAVE_DECL_ARPHRD_EUI64) && HAVE_DECL_ARPHRD_EUI64)
-  XLAT(ARPHRD_EUI64),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_EUI64) == (27), "ARPHRD_EUI64 != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_EUI64 27
 #endif
 #if defined(ARPHRD_INFINIBAND) || (defined(HAVE_DECL_ARPHRD_INFINIBAND) && HAVE_DECL_ARPHRD_INFINIBAND)
-  XLAT(ARPHRD_INFINIBAND),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_INFINIBAND) == (32), "ARPHRD_INFINIBAND != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_INFINIBAND 32
 #endif
 #if defined(ARPHRD_SLIP) || (defined(HAVE_DECL_ARPHRD_SLIP) && HAVE_DECL_ARPHRD_SLIP)
-  XLAT(ARPHRD_SLIP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_SLIP) == (256), "ARPHRD_SLIP != 256");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_SLIP 256
 #endif
 #if defined(ARPHRD_CSLIP) || (defined(HAVE_DECL_ARPHRD_CSLIP) && HAVE_DECL_ARPHRD_CSLIP)
-  XLAT(ARPHRD_CSLIP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_CSLIP) == (257), "ARPHRD_CSLIP != 257");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_CSLIP 257
 #endif
 #if defined(ARPHRD_SLIP6) || (defined(HAVE_DECL_ARPHRD_SLIP6) && HAVE_DECL_ARPHRD_SLIP6)
-  XLAT(ARPHRD_SLIP6),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_SLIP6) == (258), "ARPHRD_SLIP6 != 258");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_SLIP6 258
 #endif
 #if defined(ARPHRD_CSLIP6) || (defined(HAVE_DECL_ARPHRD_CSLIP6) && HAVE_DECL_ARPHRD_CSLIP6)
-  XLAT(ARPHRD_CSLIP6),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_CSLIP6) == (259), "ARPHRD_CSLIP6 != 259");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_CSLIP6 259
 #endif
 #if defined(ARPHRD_RSRVD) || (defined(HAVE_DECL_ARPHRD_RSRVD) && HAVE_DECL_ARPHRD_RSRVD)
-  XLAT(ARPHRD_RSRVD),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_RSRVD) == (260), "ARPHRD_RSRVD != 260");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_RSRVD 260
 #endif
 #if defined(ARPHRD_ADAPT) || (defined(HAVE_DECL_ARPHRD_ADAPT) && HAVE_DECL_ARPHRD_ADAPT)
-  XLAT(ARPHRD_ADAPT),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_ADAPT) == (264), "ARPHRD_ADAPT != 264");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_ADAPT 264
 #endif
 #if defined(ARPHRD_ROSE) || (defined(HAVE_DECL_ARPHRD_ROSE) && HAVE_DECL_ARPHRD_ROSE)
-  XLAT(ARPHRD_ROSE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_ROSE) == (270), "ARPHRD_ROSE != 270");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_ROSE 270
 #endif
 #if defined(ARPHRD_X25) || (defined(HAVE_DECL_ARPHRD_X25) && HAVE_DECL_ARPHRD_X25)
-  XLAT(ARPHRD_X25),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_X25) == (271), "ARPHRD_X25 != 271");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_X25 271
 #endif
 #if defined(ARPHRD_HWX25) || (defined(HAVE_DECL_ARPHRD_HWX25) && HAVE_DECL_ARPHRD_HWX25)
-  XLAT(ARPHRD_HWX25),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_HWX25) == (272), "ARPHRD_HWX25 != 272");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_HWX25 272
 #endif
 #if defined(ARPHRD_CAN) || (defined(HAVE_DECL_ARPHRD_CAN) && HAVE_DECL_ARPHRD_CAN)
-  XLAT(ARPHRD_CAN),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_CAN) == (280), "ARPHRD_CAN != 280");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_CAN 280
 #endif
 #if defined(ARPHRD_PPP) || (defined(HAVE_DECL_ARPHRD_PPP) && HAVE_DECL_ARPHRD_PPP)
-  XLAT(ARPHRD_PPP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_PPP) == (512), "ARPHRD_PPP != 512");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_PPP 512
 #endif
 #if defined(ARPHRD_CISCO) || (defined(HAVE_DECL_ARPHRD_CISCO) && HAVE_DECL_ARPHRD_CISCO)
-  XLAT(ARPHRD_CISCO),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_CISCO) == (513), "ARPHRD_CISCO != 513");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_CISCO 513
 #endif
 #if defined(ARPHRD_LAPB) || (defined(HAVE_DECL_ARPHRD_LAPB) && HAVE_DECL_ARPHRD_LAPB)
-  XLAT(ARPHRD_LAPB),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_LAPB) == (516), "ARPHRD_LAPB != 516");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_LAPB 516
 #endif
 #if defined(ARPHRD_DDCMP) || (defined(HAVE_DECL_ARPHRD_DDCMP) && HAVE_DECL_ARPHRD_DDCMP)
-  XLAT(ARPHRD_DDCMP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_DDCMP) == (517), "ARPHRD_DDCMP != 517");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_DDCMP 517
 #endif
 #if defined(ARPHRD_RAWHDLC) || (defined(HAVE_DECL_ARPHRD_RAWHDLC) && HAVE_DECL_ARPHRD_RAWHDLC)
-  XLAT(ARPHRD_RAWHDLC),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_RAWHDLC) == (518), "ARPHRD_RAWHDLC != 518");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_RAWHDLC 518
 #endif
 #if defined(ARPHRD_RAWIP) || (defined(HAVE_DECL_ARPHRD_RAWIP) && HAVE_DECL_ARPHRD_RAWIP)
-  XLAT(ARPHRD_RAWIP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_RAWIP) == (519), "ARPHRD_RAWIP != 519");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_RAWIP 519
 #endif
 #if defined(ARPHRD_TUNNEL) || (defined(HAVE_DECL_ARPHRD_TUNNEL) && HAVE_DECL_ARPHRD_TUNNEL)
-  XLAT(ARPHRD_TUNNEL),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_TUNNEL) == (768), "ARPHRD_TUNNEL != 768");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_TUNNEL 768
 #endif
 #if defined(ARPHRD_TUNNEL6) || (defined(HAVE_DECL_ARPHRD_TUNNEL6) && HAVE_DECL_ARPHRD_TUNNEL6)
-  XLAT(ARPHRD_TUNNEL6),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_TUNNEL6) == (769), "ARPHRD_TUNNEL6 != 769");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_TUNNEL6 769
 #endif
 #if defined(ARPHRD_FRAD) || (defined(HAVE_DECL_ARPHRD_FRAD) && HAVE_DECL_ARPHRD_FRAD)
-  XLAT(ARPHRD_FRAD),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_FRAD) == (770), "ARPHRD_FRAD != 770");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_FRAD 770
 #endif
 #if defined(ARPHRD_SKIP) || (defined(HAVE_DECL_ARPHRD_SKIP) && HAVE_DECL_ARPHRD_SKIP)
-  XLAT(ARPHRD_SKIP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_SKIP) == (771), "ARPHRD_SKIP != 771");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_SKIP 771
 #endif
 #if defined(ARPHRD_LOOPBACK) || (defined(HAVE_DECL_ARPHRD_LOOPBACK) && HAVE_DECL_ARPHRD_LOOPBACK)
-  XLAT(ARPHRD_LOOPBACK),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_LOOPBACK) == (772), "ARPHRD_LOOPBACK != 772");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_LOOPBACK 772
 #endif
 #if defined(ARPHRD_LOCALTLK) || (defined(HAVE_DECL_ARPHRD_LOCALTLK) && HAVE_DECL_ARPHRD_LOCALTLK)
-  XLAT(ARPHRD_LOCALTLK),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_LOCALTLK) == (773), "ARPHRD_LOCALTLK != 773");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_LOCALTLK 773
 #endif
 #if defined(ARPHRD_FDDI) || (defined(HAVE_DECL_ARPHRD_FDDI) && HAVE_DECL_ARPHRD_FDDI)
-  XLAT(ARPHRD_FDDI),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_FDDI) == (774), "ARPHRD_FDDI != 774");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_FDDI 774
 #endif
 #if defined(ARPHRD_BIF) || (defined(HAVE_DECL_ARPHRD_BIF) && HAVE_DECL_ARPHRD_BIF)
-  XLAT(ARPHRD_BIF),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_BIF) == (775), "ARPHRD_BIF != 775");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_BIF 775
 #endif
 #if defined(ARPHRD_SIT) || (defined(HAVE_DECL_ARPHRD_SIT) && HAVE_DECL_ARPHRD_SIT)
-  XLAT(ARPHRD_SIT),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_SIT) == (776), "ARPHRD_SIT != 776");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_SIT 776
 #endif
 #if defined(ARPHRD_IPDDP) || (defined(HAVE_DECL_ARPHRD_IPDDP) && HAVE_DECL_ARPHRD_IPDDP)
-  XLAT(ARPHRD_IPDDP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IPDDP) == (777), "ARPHRD_IPDDP != 777");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IPDDP 777
 #endif
 #if defined(ARPHRD_IPGRE) || (defined(HAVE_DECL_ARPHRD_IPGRE) && HAVE_DECL_ARPHRD_IPGRE)
-  XLAT(ARPHRD_IPGRE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IPGRE) == (778), "ARPHRD_IPGRE != 778");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IPGRE 778
 #endif
 #if defined(ARPHRD_PIMREG) || (defined(HAVE_DECL_ARPHRD_PIMREG) && HAVE_DECL_ARPHRD_PIMREG)
-  XLAT(ARPHRD_PIMREG),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_PIMREG) == (779), "ARPHRD_PIMREG != 779");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_PIMREG 779
 #endif
 #if defined(ARPHRD_HIPPI) || (defined(HAVE_DECL_ARPHRD_HIPPI) && HAVE_DECL_ARPHRD_HIPPI)
-  XLAT(ARPHRD_HIPPI),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_HIPPI) == (780), "ARPHRD_HIPPI != 780");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_HIPPI 780
 #endif
 #if defined(ARPHRD_ASH) || (defined(HAVE_DECL_ARPHRD_ASH) && HAVE_DECL_ARPHRD_ASH)
-  XLAT(ARPHRD_ASH),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_ASH) == (781), "ARPHRD_ASH != 781");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_ASH 781
 #endif
 #if defined(ARPHRD_ECONET) || (defined(HAVE_DECL_ARPHRD_ECONET) && HAVE_DECL_ARPHRD_ECONET)
-  XLAT(ARPHRD_ECONET),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_ECONET) == (782), "ARPHRD_ECONET != 782");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_ECONET 782
 #endif
 #if defined(ARPHRD_IRDA) || (defined(HAVE_DECL_ARPHRD_IRDA) && HAVE_DECL_ARPHRD_IRDA)
-  XLAT(ARPHRD_IRDA),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IRDA) == (783), "ARPHRD_IRDA != 783");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IRDA 783
 #endif
 #if defined(ARPHRD_FCPP) || (defined(HAVE_DECL_ARPHRD_FCPP) && HAVE_DECL_ARPHRD_FCPP)
-  XLAT(ARPHRD_FCPP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_FCPP) == (784), "ARPHRD_FCPP != 784");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_FCPP 784
 #endif
 #if defined(ARPHRD_FCAL) || (defined(HAVE_DECL_ARPHRD_FCAL) && HAVE_DECL_ARPHRD_FCAL)
-  XLAT(ARPHRD_FCAL),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_FCAL) == (785), "ARPHRD_FCAL != 785");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_FCAL 785
 #endif
 #if defined(ARPHRD_FCPL) || (defined(HAVE_DECL_ARPHRD_FCPL) && HAVE_DECL_ARPHRD_FCPL)
-  XLAT(ARPHRD_FCPL),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_FCPL) == (786), "ARPHRD_FCPL != 786");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_FCPL 786
 #endif
 #if defined(ARPHRD_FCFABRIC) || (defined(HAVE_DECL_ARPHRD_FCFABRIC) && HAVE_DECL_ARPHRD_FCFABRIC)
-  XLAT(ARPHRD_FCFABRIC),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_FCFABRIC) == (787), "ARPHRD_FCFABRIC != 787");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_FCFABRIC 787
 #endif
 #if defined(ARPHRD_IEEE802_TR) || (defined(HAVE_DECL_ARPHRD_IEEE802_TR) && HAVE_DECL_ARPHRD_IEEE802_TR)
-  XLAT(ARPHRD_IEEE802_TR),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IEEE802_TR) == (800), "ARPHRD_IEEE802_TR != 800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IEEE802_TR 800
 #endif
 #if defined(ARPHRD_IEEE80211) || (defined(HAVE_DECL_ARPHRD_IEEE80211) && HAVE_DECL_ARPHRD_IEEE80211)
-  XLAT(ARPHRD_IEEE80211),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IEEE80211) == (801), "ARPHRD_IEEE80211 != 801");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IEEE80211 801
 #endif
 #if defined(ARPHRD_IEEE80211_PRISM) || (defined(HAVE_DECL_ARPHRD_IEEE80211_PRISM) && HAVE_DECL_ARPHRD_IEEE80211_PRISM)
-  XLAT(ARPHRD_IEEE80211_PRISM),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IEEE80211_PRISM) == (802), "ARPHRD_IEEE80211_PRISM != 802");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IEEE80211_PRISM 802
 #endif
 #if defined(ARPHRD_IEEE80211_RADIOTAP) || (defined(HAVE_DECL_ARPHRD_IEEE80211_RADIOTAP) && HAVE_DECL_ARPHRD_IEEE80211_RADIOTAP)
-  XLAT(ARPHRD_IEEE80211_RADIOTAP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IEEE80211_RADIOTAP) == (803), "ARPHRD_IEEE80211_RADIOTAP != 803");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IEEE80211_RADIOTAP 803
 #endif
 #if defined(ARPHRD_IEEE802154) || (defined(HAVE_DECL_ARPHRD_IEEE802154) && HAVE_DECL_ARPHRD_IEEE802154)
-  XLAT(ARPHRD_IEEE802154),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IEEE802154) == (804), "ARPHRD_IEEE802154 != 804");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IEEE802154 804
 #endif
 #if defined(ARPHRD_IEEE802154_MONITOR) || (defined(HAVE_DECL_ARPHRD_IEEE802154_MONITOR) && HAVE_DECL_ARPHRD_IEEE802154_MONITOR)
-  XLAT(ARPHRD_IEEE802154_MONITOR),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IEEE802154_MONITOR) == (805), "ARPHRD_IEEE802154_MONITOR != 805");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IEEE802154_MONITOR 805
 #endif
 #if defined(ARPHRD_PHONET) || (defined(HAVE_DECL_ARPHRD_PHONET) && HAVE_DECL_ARPHRD_PHONET)
-  XLAT(ARPHRD_PHONET),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_PHONET) == (820), "ARPHRD_PHONET != 820");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_PHONET 820
 #endif
 #if defined(ARPHRD_PHONET_PIPE) || (defined(HAVE_DECL_ARPHRD_PHONET_PIPE) && HAVE_DECL_ARPHRD_PHONET_PIPE)
-  XLAT(ARPHRD_PHONET_PIPE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_PHONET_PIPE) == (821), "ARPHRD_PHONET_PIPE != 821");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_PHONET_PIPE 821
 #endif
 #if defined(ARPHRD_CAIF) || (defined(HAVE_DECL_ARPHRD_CAIF) && HAVE_DECL_ARPHRD_CAIF)
-  XLAT(ARPHRD_CAIF),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_CAIF) == (822), "ARPHRD_CAIF != 822");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_CAIF 822
 #endif
 #if defined(ARPHRD_IP6GRE) || (defined(HAVE_DECL_ARPHRD_IP6GRE) && HAVE_DECL_ARPHRD_IP6GRE)
-  XLAT(ARPHRD_IP6GRE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_IP6GRE) == (823), "ARPHRD_IP6GRE != 823");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_IP6GRE 823
 #endif
 #if defined(ARPHRD_NETLINK) || (defined(HAVE_DECL_ARPHRD_NETLINK) && HAVE_DECL_ARPHRD_NETLINK)
-  XLAT(ARPHRD_NETLINK),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_NETLINK) == (824), "ARPHRD_NETLINK != 824");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_NETLINK 824
 #endif
 #if defined(ARPHRD_6LOWPAN) || (defined(HAVE_DECL_ARPHRD_6LOWPAN) && HAVE_DECL_ARPHRD_6LOWPAN)
-  XLAT(ARPHRD_6LOWPAN),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_6LOWPAN) == (825), "ARPHRD_6LOWPAN != 825");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_6LOWPAN 825
 #endif
 #if defined(ARPHRD_VSOCKMON) || (defined(HAVE_DECL_ARPHRD_VSOCKMON) && HAVE_DECL_ARPHRD_VSOCKMON)
-  XLAT(ARPHRD_VSOCKMON),
-#endif
-#if defined(ARPHRD_VOID) || (defined(HAVE_DECL_ARPHRD_VOID) && HAVE_DECL_ARPHRD_VOID)
-  XLAT(ARPHRD_VOID),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_VSOCKMON) == (826), "ARPHRD_VSOCKMON != 826");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_VSOCKMON 826
 #endif
 #if defined(ARPHRD_NONE) || (defined(HAVE_DECL_ARPHRD_NONE) && HAVE_DECL_ARPHRD_NONE)
-  XLAT(ARPHRD_NONE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_NONE) == (0xFFFE), "ARPHRD_NONE != 0xFFFE");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_NONE 0xFFFE
 #endif
+#if defined(ARPHRD_VOID) || (defined(HAVE_DECL_ARPHRD_VOID) && HAVE_DECL_ARPHRD_VOID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ARPHRD_VOID) == (0xFFFF), "ARPHRD_VOID != 0xFFFF");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ARPHRD_VOID 0xFFFF
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
+
+const struct xlat arp_hardware_types[] = {
+
+ XLAT(ARPHRD_NETROM),
+ XLAT(ARPHRD_ETHER),
+ XLAT(ARPHRD_EETHER),
+ XLAT(ARPHRD_AX25),
+ XLAT(ARPHRD_PRONET),
+ XLAT(ARPHRD_CHAOS),
+ XLAT(ARPHRD_IEEE802),
+ XLAT(ARPHRD_ARCNET),
+ XLAT(ARPHRD_APPLETLK),
+ XLAT(ARPHRD_DLCI),
+ XLAT(ARPHRD_ATM),
+ XLAT(ARPHRD_METRICOM),
+ XLAT(ARPHRD_IEEE1394),
+ XLAT(ARPHRD_EUI64),
+ XLAT(ARPHRD_INFINIBAND),
+ XLAT(ARPHRD_SLIP),
+ XLAT(ARPHRD_CSLIP),
+ XLAT(ARPHRD_SLIP6),
+ XLAT(ARPHRD_CSLIP6),
+ XLAT(ARPHRD_RSRVD),
+ XLAT(ARPHRD_ADAPT),
+ XLAT(ARPHRD_ROSE),
+ XLAT(ARPHRD_X25),
+ XLAT(ARPHRD_HWX25),
+ XLAT(ARPHRD_CAN),
+ XLAT(ARPHRD_PPP),
+ XLAT(ARPHRD_CISCO),
+ XLAT(ARPHRD_LAPB),
+ XLAT(ARPHRD_DDCMP),
+ XLAT(ARPHRD_RAWHDLC),
+ XLAT(ARPHRD_RAWIP),
+ XLAT(ARPHRD_TUNNEL),
+ XLAT(ARPHRD_TUNNEL6),
+ XLAT(ARPHRD_FRAD),
+ XLAT(ARPHRD_SKIP),
+ XLAT(ARPHRD_LOOPBACK),
+ XLAT(ARPHRD_LOCALTLK),
+ XLAT(ARPHRD_FDDI),
+ XLAT(ARPHRD_BIF),
+ XLAT(ARPHRD_SIT),
+ XLAT(ARPHRD_IPDDP),
+ XLAT(ARPHRD_IPGRE),
+ XLAT(ARPHRD_PIMREG),
+ XLAT(ARPHRD_HIPPI),
+ XLAT(ARPHRD_ASH),
+ XLAT(ARPHRD_ECONET),
+ XLAT(ARPHRD_IRDA),
+ XLAT(ARPHRD_FCPP),
+ XLAT(ARPHRD_FCAL),
+ XLAT(ARPHRD_FCPL),
+ XLAT(ARPHRD_FCFABRIC),
+ XLAT(ARPHRD_IEEE802_TR),
+ XLAT(ARPHRD_IEEE80211),
+ XLAT(ARPHRD_IEEE80211_PRISM),
+ XLAT(ARPHRD_IEEE80211_RADIOTAP),
+ XLAT(ARPHRD_IEEE802154),
+ XLAT(ARPHRD_IEEE802154_MONITOR),
+ XLAT(ARPHRD_PHONET),
+ XLAT(ARPHRD_PHONET_PIPE),
+ XLAT(ARPHRD_CAIF),
+ XLAT(ARPHRD_IP6GRE),
+ XLAT(ARPHRD_NETLINK),
+ XLAT(ARPHRD_6LOWPAN),
+ XLAT(ARPHRD_VSOCKMON),
+ XLAT(ARPHRD_NONE),
+ XLAT(ARPHRD_VOID),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/arp_hardware_types.in b/xlat/arp_hardware_types.in
index e307455..3d81314 100644
--- a/xlat/arp_hardware_types.in
+++ b/xlat/arp_hardware_types.in
@@ -1,66 +1,67 @@
-ARPHRD_NETROM
-ARPHRD_ETHER
-ARPHRD_EETHER
-ARPHRD_AX25
-ARPHRD_PRONET
-ARPHRD_CHAOS
-ARPHRD_IEEE802
-ARPHRD_ARCNET
-ARPHRD_APPLETLK
-ARPHRD_DLCI
-ARPHRD_ATM
-ARPHRD_METRICOM
-ARPHRD_IEEE1394
-ARPHRD_EUI64
-ARPHRD_INFINIBAND
-ARPHRD_SLIP
-ARPHRD_CSLIP
-ARPHRD_SLIP6
-ARPHRD_CSLIP6
-ARPHRD_RSRVD
-ARPHRD_ADAPT
-ARPHRD_ROSE
-ARPHRD_X25
-ARPHRD_HWX25
-ARPHRD_CAN
-ARPHRD_PPP
-ARPHRD_CISCO
-ARPHRD_LAPB
-ARPHRD_DDCMP
-ARPHRD_RAWHDLC
-ARPHRD_RAWIP
-ARPHRD_TUNNEL
-ARPHRD_TUNNEL6
-ARPHRD_FRAD
-ARPHRD_SKIP
-ARPHRD_LOOPBACK
-ARPHRD_LOCALTLK
-ARPHRD_FDDI
-ARPHRD_BIF
-ARPHRD_SIT
-ARPHRD_IPDDP
-ARPHRD_IPGRE
-ARPHRD_PIMREG
-ARPHRD_HIPPI
-ARPHRD_ASH
-ARPHRD_ECONET
-ARPHRD_IRDA
-ARPHRD_FCPP
-ARPHRD_FCAL
-ARPHRD_FCPL
-ARPHRD_FCFABRIC
-ARPHRD_IEEE802_TR
-ARPHRD_IEEE80211
-ARPHRD_IEEE80211_PRISM
-ARPHRD_IEEE80211_RADIOTAP
-ARPHRD_IEEE802154
-ARPHRD_IEEE802154_MONITOR
-ARPHRD_PHONET
-ARPHRD_PHONET_PIPE
-ARPHRD_CAIF
-ARPHRD_IP6GRE
-ARPHRD_NETLINK
-ARPHRD_6LOWPAN
-ARPHRD_VSOCKMON
-ARPHRD_VOID
-ARPHRD_NONE
+/* sort -k2,2g */
+ARPHRD_NETROM			0
+ARPHRD_ETHER			1
+ARPHRD_EETHER			2
+ARPHRD_AX25			3
+ARPHRD_PRONET			4
+ARPHRD_CHAOS			5
+ARPHRD_IEEE802			6
+ARPHRD_ARCNET			7
+ARPHRD_APPLETLK			8
+ARPHRD_DLCI			15
+ARPHRD_ATM			19
+ARPHRD_METRICOM			23
+ARPHRD_IEEE1394			24
+ARPHRD_EUI64			27
+ARPHRD_INFINIBAND		32
+ARPHRD_SLIP			256
+ARPHRD_CSLIP			257
+ARPHRD_SLIP6			258
+ARPHRD_CSLIP6			259
+ARPHRD_RSRVD			260
+ARPHRD_ADAPT			264
+ARPHRD_ROSE			270
+ARPHRD_X25			271
+ARPHRD_HWX25			272
+ARPHRD_CAN			280
+ARPHRD_PPP			512
+ARPHRD_CISCO			513
+ARPHRD_LAPB			516
+ARPHRD_DDCMP			517
+ARPHRD_RAWHDLC			518
+ARPHRD_RAWIP			519
+ARPHRD_TUNNEL			768
+ARPHRD_TUNNEL6			769
+ARPHRD_FRAD			770
+ARPHRD_SKIP			771
+ARPHRD_LOOPBACK			772
+ARPHRD_LOCALTLK			773
+ARPHRD_FDDI			774
+ARPHRD_BIF			775
+ARPHRD_SIT			776
+ARPHRD_IPDDP			777
+ARPHRD_IPGRE			778
+ARPHRD_PIMREG			779
+ARPHRD_HIPPI			780
+ARPHRD_ASH			781
+ARPHRD_ECONET			782
+ARPHRD_IRDA			783
+ARPHRD_FCPP			784
+ARPHRD_FCAL			785
+ARPHRD_FCPL			786
+ARPHRD_FCFABRIC			787
+ARPHRD_IEEE802_TR		800
+ARPHRD_IEEE80211		801
+ARPHRD_IEEE80211_PRISM		802
+ARPHRD_IEEE80211_RADIOTAP	803
+ARPHRD_IEEE802154		804
+ARPHRD_IEEE802154_MONITOR	805
+ARPHRD_PHONET			820
+ARPHRD_PHONET_PIPE		821
+ARPHRD_CAIF			822
+ARPHRD_IP6GRE			823
+ARPHRD_NETLINK			824
+ARPHRD_6LOWPAN			825
+ARPHRD_VSOCKMON			826
+ARPHRD_NONE			0xFFFE
+ARPHRD_VOID			0xFFFF
diff --git a/xlat/at_flags.h b/xlat/at_flags.h
index 5bebc0b..bb16a8e 100644
--- a/xlat/at_flags.h
+++ b/xlat/at_flags.h
@@ -1,21 +1,47 @@
 /* Generated by ./xlat/gen.sh from ./xlat/at_flags.in; do not edit. */
-#if !(defined(AT_SYMLINK_NOFOLLOW) || (defined(HAVE_DECL_AT_SYMLINK_NOFOLLOW) && HAVE_DECL_AT_SYMLINK_NOFOLLOW))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(AT_SYMLINK_NOFOLLOW) || (defined(HAVE_DECL_AT_SYMLINK_NOFOLLOW) && HAVE_DECL_AT_SYMLINK_NOFOLLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_SYMLINK_NOFOLLOW) == (0x100), "AT_SYMLINK_NOFOLLOW != 0x100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_SYMLINK_NOFOLLOW 0x100
 #endif
-#if !(defined(AT_REMOVEDIR) || (defined(HAVE_DECL_AT_REMOVEDIR) && HAVE_DECL_AT_REMOVEDIR))
+#if defined(AT_REMOVEDIR) || (defined(HAVE_DECL_AT_REMOVEDIR) && HAVE_DECL_AT_REMOVEDIR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_REMOVEDIR) == (0x200), "AT_REMOVEDIR != 0x200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_REMOVEDIR 0x200
 #endif
-#if !(defined(AT_SYMLINK_FOLLOW) || (defined(HAVE_DECL_AT_SYMLINK_FOLLOW) && HAVE_DECL_AT_SYMLINK_FOLLOW))
+#if defined(AT_SYMLINK_FOLLOW) || (defined(HAVE_DECL_AT_SYMLINK_FOLLOW) && HAVE_DECL_AT_SYMLINK_FOLLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_SYMLINK_FOLLOW) == (0x400), "AT_SYMLINK_FOLLOW != 0x400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_SYMLINK_FOLLOW 0x400
 #endif
-#if !(defined(AT_NO_AUTOMOUNT) || (defined(HAVE_DECL_AT_NO_AUTOMOUNT) && HAVE_DECL_AT_NO_AUTOMOUNT))
+#if defined(AT_NO_AUTOMOUNT) || (defined(HAVE_DECL_AT_NO_AUTOMOUNT) && HAVE_DECL_AT_NO_AUTOMOUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_NO_AUTOMOUNT) == (0x800), "AT_NO_AUTOMOUNT != 0x800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_NO_AUTOMOUNT 0x800
 #endif
-#if !(defined(AT_EMPTY_PATH) || (defined(HAVE_DECL_AT_EMPTY_PATH) && HAVE_DECL_AT_EMPTY_PATH))
+#if defined(AT_EMPTY_PATH) || (defined(HAVE_DECL_AT_EMPTY_PATH) && HAVE_DECL_AT_EMPTY_PATH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_EMPTY_PATH) == (0x1000), "AT_EMPTY_PATH != 0x1000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_EMPTY_PATH 0x1000
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat at_flags[] = {
  XLAT(AT_SYMLINK_NOFOLLOW),
@@ -26,4 +52,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/at_statx_sync_types.h b/xlat/at_statx_sync_types.h
index 4babb01..2850d53 100644
--- a/xlat/at_statx_sync_types.h
+++ b/xlat/at_statx_sync_types.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/at_statx_sync_types.in; do not edit. */
-#if !(defined(AT_STATX_SYNC_AS_STAT) || (defined(HAVE_DECL_AT_STATX_SYNC_AS_STAT) && HAVE_DECL_AT_STATX_SYNC_AS_STAT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(AT_STATX_SYNC_AS_STAT) || (defined(HAVE_DECL_AT_STATX_SYNC_AS_STAT) && HAVE_DECL_AT_STATX_SYNC_AS_STAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_STATX_SYNC_AS_STAT) == (0x0000), "AT_STATX_SYNC_AS_STAT != 0x0000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_STATX_SYNC_AS_STAT 0x0000
 #endif
-#if !(defined(AT_STATX_FORCE_SYNC) || (defined(HAVE_DECL_AT_STATX_FORCE_SYNC) && HAVE_DECL_AT_STATX_FORCE_SYNC))
+#if defined(AT_STATX_FORCE_SYNC) || (defined(HAVE_DECL_AT_STATX_FORCE_SYNC) && HAVE_DECL_AT_STATX_FORCE_SYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_STATX_FORCE_SYNC) == (0x2000), "AT_STATX_FORCE_SYNC != 0x2000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_STATX_FORCE_SYNC 0x2000
 #endif
-#if !(defined(AT_STATX_DONT_SYNC) || (defined(HAVE_DECL_AT_STATX_DONT_SYNC) && HAVE_DECL_AT_STATX_DONT_SYNC))
+#if defined(AT_STATX_DONT_SYNC) || (defined(HAVE_DECL_AT_STATX_DONT_SYNC) && HAVE_DECL_AT_STATX_DONT_SYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_STATX_DONT_SYNC) == (0x4000), "AT_STATX_DONT_SYNC != 0x4000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_STATX_DONT_SYNC 0x4000
 #endif
-#if !(defined(AT_STATX_SYNC_TYPE) || (defined(HAVE_DECL_AT_STATX_SYNC_TYPE) && HAVE_DECL_AT_STATX_SYNC_TYPE))
+#if defined(AT_STATX_SYNC_TYPE) || (defined(HAVE_DECL_AT_STATX_SYNC_TYPE) && HAVE_DECL_AT_STATX_SYNC_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_STATX_SYNC_TYPE) == (0x6000), "AT_STATX_SYNC_TYPE != 0x6000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_STATX_SYNC_TYPE 0x6000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat at_statx_sync_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat at_statx_sync_types in mpers mode
+
+# else
 
 static
 const struct xlat at_statx_sync_types[] = {
@@ -28,4 +50,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/atomic_ops.h b/xlat/atomic_ops.h
index 224dfea..17e0323 100644
--- a/xlat/atomic_ops.h
+++ b/xlat/atomic_ops.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/atomic_ops.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat atomic_ops in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat atomic_ops in mpers mode
+
+# else
 
 static
 const struct xlat atomic_ops[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/audit_arch.h b/xlat/audit_arch.h
index 7883fa8..13928d9 100644
--- a/xlat/audit_arch.h
+++ b/xlat/audit_arch.h
@@ -1,4 +1,8 @@
 /* Generated by ./xlat/gen.sh from ./xlat/audit_arch.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
 #ifdef EM_ARM
 #endif
 #ifdef EM_FRV
@@ -8,15 +12,17 @@
 #ifdef EM_OPENRISC
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat audit_arch[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat audit_arch[] = {
 
 #if defined(AUDIT_ARCH_AARCH64) || (defined(HAVE_DECL_AUDIT_ARCH_AARCH64) && HAVE_DECL_AUDIT_ARCH_AARCH64)
@@ -126,4 +132,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/baud_options.h b/xlat/baud_options.h
index 0ea7336..62e706f 100644
--- a/xlat/baud_options.h
+++ b/xlat/baud_options.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/baud_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat baud_options in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat baud_options in mpers mode
+
+# else
 
 static
 const struct xlat baud_options[] = {
@@ -110,4 +116,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bdaddr_types.h b/xlat/bdaddr_types.h
new file mode 100644
index 0000000..110ee4d
--- /dev/null
+++ b/xlat/bdaddr_types.h
@@ -0,0 +1,46 @@
+/* Generated by ./xlat/gen.sh from ./xlat/bdaddr_types.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BDADDR_BREDR) || (defined(HAVE_DECL_BDADDR_BREDR) && HAVE_DECL_BDADDR_BREDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BDADDR_BREDR) == (0), "BDADDR_BREDR != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BDADDR_BREDR 0
+#endif
+#if defined(BDADDR_LE_PUBLIC) || (defined(HAVE_DECL_BDADDR_LE_PUBLIC) && HAVE_DECL_BDADDR_LE_PUBLIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BDADDR_LE_PUBLIC) == (1), "BDADDR_LE_PUBLIC != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BDADDR_LE_PUBLIC 1
+#endif
+#if defined(BDADDR_LE_RANDOM) || (defined(HAVE_DECL_BDADDR_LE_RANDOM) && HAVE_DECL_BDADDR_LE_RANDOM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BDADDR_LE_RANDOM) == (2), "BDADDR_LE_RANDOM != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BDADDR_LE_RANDOM 2
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bdaddr_types in mpers mode
+
+# else
+
+static
+const struct xlat bdaddr_types[] = {
+ [BDADDR_BREDR] = XLAT(BDADDR_BREDR),
+ [BDADDR_LE_PUBLIC] = XLAT(BDADDR_LE_PUBLIC),
+ [BDADDR_LE_RANDOM] = XLAT(BDADDR_LE_RANDOM),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bdaddr_types.in b/xlat/bdaddr_types.in
new file mode 100644
index 0000000..b81b6fc
--- /dev/null
+++ b/xlat/bdaddr_types.in
@@ -0,0 +1,4 @@
+#value_indexed
+BDADDR_BREDR		0
+BDADDR_LE_PUBLIC	1
+BDADDR_LE_RANDOM	2
diff --git a/xlat/blkpg_ops.h b/xlat/blkpg_ops.h
index bc36705..81171dc 100644
--- a/xlat/blkpg_ops.h
+++ b/xlat/blkpg_ops.h
@@ -1,23 +1,41 @@
 /* Generated by ./xlat/gen.sh from ./xlat/blkpg_ops.in; do not edit. */
-#if !(defined(BLKPG_ADD_PARTITION) || (defined(HAVE_DECL_BLKPG_ADD_PARTITION) && HAVE_DECL_BLKPG_ADD_PARTITION))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BLKPG_ADD_PARTITION) || (defined(HAVE_DECL_BLKPG_ADD_PARTITION) && HAVE_DECL_BLKPG_ADD_PARTITION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BLKPG_ADD_PARTITION) == (1), "BLKPG_ADD_PARTITION != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BLKPG_ADD_PARTITION 1
 #endif
-#if !(defined(BLKPG_DEL_PARTITION) || (defined(HAVE_DECL_BLKPG_DEL_PARTITION) && HAVE_DECL_BLKPG_DEL_PARTITION))
+#if defined(BLKPG_DEL_PARTITION) || (defined(HAVE_DECL_BLKPG_DEL_PARTITION) && HAVE_DECL_BLKPG_DEL_PARTITION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BLKPG_DEL_PARTITION) == (2), "BLKPG_DEL_PARTITION != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BLKPG_DEL_PARTITION 2
 #endif
-#if !(defined(BLKPG_RESIZE_PARTITION) || (defined(HAVE_DECL_BLKPG_RESIZE_PARTITION) && HAVE_DECL_BLKPG_RESIZE_PARTITION))
+#if defined(BLKPG_RESIZE_PARTITION) || (defined(HAVE_DECL_BLKPG_RESIZE_PARTITION) && HAVE_DECL_BLKPG_RESIZE_PARTITION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BLKPG_RESIZE_PARTITION) == (3), "BLKPG_RESIZE_PARTITION != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BLKPG_RESIZE_PARTITION 3
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat blkpg_ops[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat blkpg_ops[] = {
  XLAT(BLKPG_ADD_PARTITION),
  XLAT(BLKPG_DEL_PARTITION),
@@ -25,4 +43,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bluetooth_l2_cid.h b/xlat/bluetooth_l2_cid.h
new file mode 100644
index 0000000..654e5aa
--- /dev/null
+++ b/xlat/bluetooth_l2_cid.h
@@ -0,0 +1,103 @@
+/* Generated by ./xlat/gen.sh from ./xlat/bluetooth_l2_cid.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(L2CAP_CID_SIGNALING) || (defined(HAVE_DECL_L2CAP_CID_SIGNALING) && HAVE_DECL_L2CAP_CID_SIGNALING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_SIGNALING) == (0x0001), "L2CAP_CID_SIGNALING != 0x0001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_SIGNALING 0x0001
+#endif
+#if defined(L2CAP_CID_CONN_LESS) || (defined(HAVE_DECL_L2CAP_CID_CONN_LESS) && HAVE_DECL_L2CAP_CID_CONN_LESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_CONN_LESS) == (0x0002), "L2CAP_CID_CONN_LESS != 0x0002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_CONN_LESS 0x0002
+#endif
+#if defined(L2CAP_CID_A2MP) || (defined(HAVE_DECL_L2CAP_CID_A2MP) && HAVE_DECL_L2CAP_CID_A2MP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_A2MP) == (0x0003), "L2CAP_CID_A2MP != 0x0003");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_A2MP 0x0003
+#endif
+#if defined(L2CAP_CID_ATT) || (defined(HAVE_DECL_L2CAP_CID_ATT) && HAVE_DECL_L2CAP_CID_ATT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_ATT) == (0x0004), "L2CAP_CID_ATT != 0x0004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_ATT 0x0004
+#endif
+#if defined(L2CAP_CID_LE_SIGNALING) || (defined(HAVE_DECL_L2CAP_CID_LE_SIGNALING) && HAVE_DECL_L2CAP_CID_LE_SIGNALING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_LE_SIGNALING) == (0x0005), "L2CAP_CID_LE_SIGNALING != 0x0005");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_LE_SIGNALING 0x0005
+#endif
+#if defined(L2CAP_CID_SMP) || (defined(HAVE_DECL_L2CAP_CID_SMP) && HAVE_DECL_L2CAP_CID_SMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_SMP) == (0x0006), "L2CAP_CID_SMP != 0x0006");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_SMP 0x0006
+#endif
+#if defined(L2CAP_CID_SMP_BREDR) || (defined(HAVE_DECL_L2CAP_CID_SMP_BREDR) && HAVE_DECL_L2CAP_CID_SMP_BREDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_SMP_BREDR) == (0x0007), "L2CAP_CID_SMP_BREDR != 0x0007");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_SMP_BREDR 0x0007
+#endif
+#if defined(L2CAP_CID_DYN_START) || (defined(HAVE_DECL_L2CAP_CID_DYN_START) && HAVE_DECL_L2CAP_CID_DYN_START)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_DYN_START) == (0x0040), "L2CAP_CID_DYN_START != 0x0040");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_DYN_START 0x0040
+#endif
+#if defined(L2CAP_CID_LE_DYN_END) || (defined(HAVE_DECL_L2CAP_CID_LE_DYN_END) && HAVE_DECL_L2CAP_CID_LE_DYN_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_LE_DYN_END) == (0x007f), "L2CAP_CID_LE_DYN_END != 0x007f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_LE_DYN_END 0x007f
+#endif
+#if defined(L2CAP_CID_DYN_END) || (defined(HAVE_DECL_L2CAP_CID_DYN_END) && HAVE_DECL_L2CAP_CID_DYN_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_CID_DYN_END) == (0xffff), "L2CAP_CID_DYN_END != 0xffff");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_CID_DYN_END 0xffff
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bluetooth_l2_cid in mpers mode
+
+# else
+
+static
+const struct xlat bluetooth_l2_cid[] = {
+
+ XLAT(L2CAP_CID_SIGNALING),
+ XLAT(L2CAP_CID_CONN_LESS),
+ XLAT(L2CAP_CID_A2MP),
+ XLAT(L2CAP_CID_ATT),
+ XLAT(L2CAP_CID_LE_SIGNALING),
+ XLAT(L2CAP_CID_SMP),
+ XLAT(L2CAP_CID_SMP_BREDR),
+ XLAT(L2CAP_CID_DYN_START),
+ XLAT(L2CAP_CID_LE_DYN_END),
+ XLAT(L2CAP_CID_DYN_END),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bluetooth_l2_cid.in b/xlat/bluetooth_l2_cid.in
new file mode 100644
index 0000000..5fd8fd1
--- /dev/null
+++ b/xlat/bluetooth_l2_cid.in
@@ -0,0 +1,11 @@
+/* sort -k2,2 */
+L2CAP_CID_SIGNALING	0x0001
+L2CAP_CID_CONN_LESS	0x0002
+L2CAP_CID_A2MP		0x0003
+L2CAP_CID_ATT		0x0004
+L2CAP_CID_LE_SIGNALING	0x0005
+L2CAP_CID_SMP		0x0006
+L2CAP_CID_SMP_BREDR	0x0007
+L2CAP_CID_DYN_START	0x0040
+L2CAP_CID_LE_DYN_END	0x007f
+L2CAP_CID_DYN_END	0xffff
diff --git a/xlat/bluetooth_l2_psm.h b/xlat/bluetooth_l2_psm.h
new file mode 100644
index 0000000..358316a
--- /dev/null
+++ b/xlat/bluetooth_l2_psm.h
@@ -0,0 +1,95 @@
+/* Generated by ./xlat/gen.sh from ./xlat/bluetooth_l2_psm.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(L2CAP_PSM_SDP) || (defined(HAVE_DECL_L2CAP_PSM_SDP) && HAVE_DECL_L2CAP_PSM_SDP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_PSM_SDP) == (0x0001), "L2CAP_PSM_SDP != 0x0001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_PSM_SDP 0x0001
+#endif
+#if defined(L2CAP_PSM_RFCOMM) || (defined(HAVE_DECL_L2CAP_PSM_RFCOMM) && HAVE_DECL_L2CAP_PSM_RFCOMM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_PSM_RFCOMM) == (0x0003), "L2CAP_PSM_RFCOMM != 0x0003");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_PSM_RFCOMM 0x0003
+#endif
+#if defined(L2CAP_PSM_3DSP) || (defined(HAVE_DECL_L2CAP_PSM_3DSP) && HAVE_DECL_L2CAP_PSM_3DSP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_PSM_3DSP) == (0x0021), "L2CAP_PSM_3DSP != 0x0021");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_PSM_3DSP 0x0021
+#endif
+#if defined(L2CAP_PSM_IPSP) || (defined(HAVE_DECL_L2CAP_PSM_IPSP) && HAVE_DECL_L2CAP_PSM_IPSP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_PSM_IPSP) == (0x0023), "L2CAP_PSM_IPSP != 0x0023");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_PSM_IPSP 0x0023
+#endif
+#if defined(L2CAP_PSM_LE_DYN_START) || (defined(HAVE_DECL_L2CAP_PSM_LE_DYN_START) && HAVE_DECL_L2CAP_PSM_LE_DYN_START)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_PSM_LE_DYN_START) == (0x0080), "L2CAP_PSM_LE_DYN_START != 0x0080");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_PSM_LE_DYN_START 0x0080
+#endif
+#if defined(L2CAP_PSM_LE_DYN_END) || (defined(HAVE_DECL_L2CAP_PSM_LE_DYN_END) && HAVE_DECL_L2CAP_PSM_LE_DYN_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_PSM_LE_DYN_END) == (0x00ff), "L2CAP_PSM_LE_DYN_END != 0x00ff");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_PSM_LE_DYN_END 0x00ff
+#endif
+#if defined(L2CAP_PSM_DYN_START) || (defined(HAVE_DECL_L2CAP_PSM_DYN_START) && HAVE_DECL_L2CAP_PSM_DYN_START)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_PSM_DYN_START) == (0x1001), "L2CAP_PSM_DYN_START != 0x1001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_PSM_DYN_START 0x1001
+#endif
+#if defined(L2CAP_PSM_AUTO_END) || (defined(HAVE_DECL_L2CAP_PSM_AUTO_END) && HAVE_DECL_L2CAP_PSM_AUTO_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_PSM_AUTO_END) == (0x10ff), "L2CAP_PSM_AUTO_END != 0x10ff");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_PSM_AUTO_END 0x10ff
+#endif
+#if defined(L2CAP_PSM_DYN_END) || (defined(HAVE_DECL_L2CAP_PSM_DYN_END) && HAVE_DECL_L2CAP_PSM_DYN_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((L2CAP_PSM_DYN_END) == (0xffff), "L2CAP_PSM_DYN_END != 0xffff");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define L2CAP_PSM_DYN_END 0xffff
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bluetooth_l2_psm in mpers mode
+
+# else
+
+static
+const struct xlat bluetooth_l2_psm[] = {
+
+ XLAT(L2CAP_PSM_SDP),
+ XLAT(L2CAP_PSM_RFCOMM),
+ XLAT(L2CAP_PSM_3DSP),
+ XLAT(L2CAP_PSM_IPSP),
+ XLAT(L2CAP_PSM_LE_DYN_START),
+ XLAT(L2CAP_PSM_LE_DYN_END),
+ XLAT(L2CAP_PSM_DYN_START),
+ XLAT(L2CAP_PSM_AUTO_END),
+ XLAT(L2CAP_PSM_DYN_END),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bluetooth_l2_psm.in b/xlat/bluetooth_l2_psm.in
new file mode 100644
index 0000000..afac026
--- /dev/null
+++ b/xlat/bluetooth_l2_psm.in
@@ -0,0 +1,10 @@
+/* sort -k2,2 */
+L2CAP_PSM_SDP           0x0001
+L2CAP_PSM_RFCOMM        0x0003
+L2CAP_PSM_3DSP          0x0021
+L2CAP_PSM_IPSP          0x0023
+L2CAP_PSM_LE_DYN_START  0x0080
+L2CAP_PSM_LE_DYN_END    0x00ff
+L2CAP_PSM_DYN_START     0x1001
+L2CAP_PSM_AUTO_END      0x10ff
+L2CAP_PSM_DYN_END       0xffff
diff --git a/xlat/bootflags1.h b/xlat/bootflags1.h
index fb27140..d868f9c 100644
--- a/xlat/bootflags1.h
+++ b/xlat/bootflags1.h
@@ -1,13 +1,23 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bootflags1.in; do not edit. */
-#if !(defined(LINUX_REBOOT_MAGIC1) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC1) && HAVE_DECL_LINUX_REBOOT_MAGIC1))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(LINUX_REBOOT_MAGIC1) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC1) && HAVE_DECL_LINUX_REBOOT_MAGIC1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_MAGIC1) == (0xfee1dead), "LINUX_REBOOT_MAGIC1 != 0xfee1dead");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_MAGIC1 0xfee1dead
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat bootflags1 in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat bootflags1 in mpers mode
+
+# else
 
 static
 const struct xlat bootflags1[] = {
@@ -15,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bootflags2.h b/xlat/bootflags2.h
index 612aae1..6560af3 100644
--- a/xlat/bootflags2.h
+++ b/xlat/bootflags2.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bootflags2.in; do not edit. */
-#if !(defined(LINUX_REBOOT_MAGIC2) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2) && HAVE_DECL_LINUX_REBOOT_MAGIC2))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(LINUX_REBOOT_MAGIC2) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2) && HAVE_DECL_LINUX_REBOOT_MAGIC2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_MAGIC2) == (672274793), "LINUX_REBOOT_MAGIC2 != 672274793");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_MAGIC2 672274793
 #endif
-#if !(defined(LINUX_REBOOT_MAGIC2A) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2A) && HAVE_DECL_LINUX_REBOOT_MAGIC2A))
+#if defined(LINUX_REBOOT_MAGIC2A) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2A) && HAVE_DECL_LINUX_REBOOT_MAGIC2A)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_MAGIC2A) == (85072278), "LINUX_REBOOT_MAGIC2A != 85072278");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_MAGIC2A 85072278
 #endif
-#if !(defined(LINUX_REBOOT_MAGIC2B) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2B) && HAVE_DECL_LINUX_REBOOT_MAGIC2B))
+#if defined(LINUX_REBOOT_MAGIC2B) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2B) && HAVE_DECL_LINUX_REBOOT_MAGIC2B)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_MAGIC2B) == (369367448), "LINUX_REBOOT_MAGIC2B != 369367448");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_MAGIC2B 369367448
 #endif
-#if !(defined(LINUX_REBOOT_MAGIC2C) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2C) && HAVE_DECL_LINUX_REBOOT_MAGIC2C))
+#if defined(LINUX_REBOOT_MAGIC2C) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2C) && HAVE_DECL_LINUX_REBOOT_MAGIC2C)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_MAGIC2C) == (537993216), "LINUX_REBOOT_MAGIC2C != 537993216");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_MAGIC2C 537993216
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat bootflags2 in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat bootflags2 in mpers mode
+
+# else
 
 static
 const struct xlat bootflags2[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bootflags3.h b/xlat/bootflags3.h
index 47ea9cf..e11a06f 100644
--- a/xlat/bootflags3.h
+++ b/xlat/bootflags3.h
@@ -1,34 +1,72 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bootflags3.in; do not edit. */
-#if !(defined(LINUX_REBOOT_CMD_RESTART) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_RESTART) && HAVE_DECL_LINUX_REBOOT_CMD_RESTART))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(LINUX_REBOOT_CMD_RESTART) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_RESTART) && HAVE_DECL_LINUX_REBOOT_CMD_RESTART)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_CMD_RESTART) == (0x01234567), "LINUX_REBOOT_CMD_RESTART != 0x01234567");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_CMD_RESTART 0x01234567
 #endif
-#if !(defined(LINUX_REBOOT_CMD_HALT) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_HALT) && HAVE_DECL_LINUX_REBOOT_CMD_HALT))
+#if defined(LINUX_REBOOT_CMD_HALT) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_HALT) && HAVE_DECL_LINUX_REBOOT_CMD_HALT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_CMD_HALT) == (0xCDEF0123), "LINUX_REBOOT_CMD_HALT != 0xCDEF0123");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_CMD_HALT 0xCDEF0123
 #endif
-#if !(defined(LINUX_REBOOT_CMD_CAD_ON) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_CAD_ON) && HAVE_DECL_LINUX_REBOOT_CMD_CAD_ON))
+#if defined(LINUX_REBOOT_CMD_CAD_ON) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_CAD_ON) && HAVE_DECL_LINUX_REBOOT_CMD_CAD_ON)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_CMD_CAD_ON) == (0x89ABCDEF), "LINUX_REBOOT_CMD_CAD_ON != 0x89ABCDEF");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_CMD_CAD_ON 0x89ABCDEF
 #endif
-#if !(defined(LINUX_REBOOT_CMD_CAD_OFF) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_CAD_OFF) && HAVE_DECL_LINUX_REBOOT_CMD_CAD_OFF))
+#if defined(LINUX_REBOOT_CMD_CAD_OFF) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_CAD_OFF) && HAVE_DECL_LINUX_REBOOT_CMD_CAD_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_CMD_CAD_OFF) == (0x00000000), "LINUX_REBOOT_CMD_CAD_OFF != 0x00000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_CMD_CAD_OFF 0x00000000
 #endif
-#if !(defined(LINUX_REBOOT_CMD_POWER_OFF) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_POWER_OFF) && HAVE_DECL_LINUX_REBOOT_CMD_POWER_OFF))
+#if defined(LINUX_REBOOT_CMD_POWER_OFF) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_POWER_OFF) && HAVE_DECL_LINUX_REBOOT_CMD_POWER_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_CMD_POWER_OFF) == (0x4321FEDC), "LINUX_REBOOT_CMD_POWER_OFF != 0x4321FEDC");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_CMD_POWER_OFF 0x4321FEDC
 #endif
-#if !(defined(LINUX_REBOOT_CMD_RESTART2) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_RESTART2) && HAVE_DECL_LINUX_REBOOT_CMD_RESTART2))
+#if defined(LINUX_REBOOT_CMD_RESTART2) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_RESTART2) && HAVE_DECL_LINUX_REBOOT_CMD_RESTART2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_CMD_RESTART2) == (0xA1B2C3D4), "LINUX_REBOOT_CMD_RESTART2 != 0xA1B2C3D4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_CMD_RESTART2 0xA1B2C3D4
 #endif
-#if !(defined(LINUX_REBOOT_CMD_SW_SUSPEND) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_SW_SUSPEND) && HAVE_DECL_LINUX_REBOOT_CMD_SW_SUSPEND))
+#if defined(LINUX_REBOOT_CMD_SW_SUSPEND) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_SW_SUSPEND) && HAVE_DECL_LINUX_REBOOT_CMD_SW_SUSPEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_CMD_SW_SUSPEND) == (0xD000FCE2), "LINUX_REBOOT_CMD_SW_SUSPEND != 0xD000FCE2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_CMD_SW_SUSPEND 0xD000FCE2
 #endif
-#if !(defined(LINUX_REBOOT_CMD_KEXEC) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_KEXEC) && HAVE_DECL_LINUX_REBOOT_CMD_KEXEC))
+#if defined(LINUX_REBOOT_CMD_KEXEC) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_KEXEC) && HAVE_DECL_LINUX_REBOOT_CMD_KEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LINUX_REBOOT_CMD_KEXEC) == (0x45584543), "LINUX_REBOOT_CMD_KEXEC != 0x45584543");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LINUX_REBOOT_CMD_KEXEC 0x45584543
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat bootflags3 in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat bootflags3 in mpers mode
+
+# else
 
 static
 const struct xlat bootflags3[] = {
@@ -43,4 +81,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_attach_flags.h b/xlat/bpf_attach_flags.h
index 1543860..753d8f1 100644
--- a/xlat/bpf_attach_flags.h
+++ b/xlat/bpf_attach_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_attach_flags.in; do not edit. */
-#if !(defined(BPF_F_ALLOW_OVERRIDE) || (defined(HAVE_DECL_BPF_F_ALLOW_OVERRIDE) && HAVE_DECL_BPF_F_ALLOW_OVERRIDE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_F_ALLOW_OVERRIDE) || (defined(HAVE_DECL_BPF_F_ALLOW_OVERRIDE) && HAVE_DECL_BPF_F_ALLOW_OVERRIDE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_ALLOW_OVERRIDE) == (1), "BPF_F_ALLOW_OVERRIDE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_F_ALLOW_OVERRIDE 1
 #endif
-#if !(defined(BPF_F_ALLOW_MULTI) || (defined(HAVE_DECL_BPF_F_ALLOW_MULTI) && HAVE_DECL_BPF_F_ALLOW_MULTI))
+#if defined(BPF_F_ALLOW_MULTI) || (defined(HAVE_DECL_BPF_F_ALLOW_MULTI) && HAVE_DECL_BPF_F_ALLOW_MULTI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_ALLOW_MULTI) == (2), "BPF_F_ALLOW_MULTI != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_F_ALLOW_MULTI 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat bpf_attach_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat bpf_attach_flags in mpers mode
+
+# else
 
 static
 const struct xlat bpf_attach_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_attach_type.h b/xlat/bpf_attach_type.h
index dac8f1e..aa83f4a 100644
--- a/xlat/bpf_attach_type.h
+++ b/xlat/bpf_attach_type.h
@@ -1,42 +1,134 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_attach_type.in; do not edit. */
-#if !(defined(BPF_CGROUP_INET_INGRESS) || (defined(HAVE_DECL_BPF_CGROUP_INET_INGRESS) && HAVE_DECL_BPF_CGROUP_INET_INGRESS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_CGROUP_INET_INGRESS) || (defined(HAVE_DECL_BPF_CGROUP_INET_INGRESS) && HAVE_DECL_BPF_CGROUP_INET_INGRESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_INET_INGRESS) == (0), "BPF_CGROUP_INET_INGRESS != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_CGROUP_INET_INGRESS 0
 #endif
-#if !(defined(BPF_CGROUP_INET_EGRESS) || (defined(HAVE_DECL_BPF_CGROUP_INET_EGRESS) && HAVE_DECL_BPF_CGROUP_INET_EGRESS))
+#if defined(BPF_CGROUP_INET_EGRESS) || (defined(HAVE_DECL_BPF_CGROUP_INET_EGRESS) && HAVE_DECL_BPF_CGROUP_INET_EGRESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_INET_EGRESS) == (1), "BPF_CGROUP_INET_EGRESS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_CGROUP_INET_EGRESS 1
 #endif
-#if !(defined(BPF_CGROUP_INET_SOCK_CREATE) || (defined(HAVE_DECL_BPF_CGROUP_INET_SOCK_CREATE) && HAVE_DECL_BPF_CGROUP_INET_SOCK_CREATE))
+#if defined(BPF_CGROUP_INET_SOCK_CREATE) || (defined(HAVE_DECL_BPF_CGROUP_INET_SOCK_CREATE) && HAVE_DECL_BPF_CGROUP_INET_SOCK_CREATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_INET_SOCK_CREATE) == (2), "BPF_CGROUP_INET_SOCK_CREATE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(BPF_CGROUP_SOCK_OPS) || (defined(HAVE_DECL_BPF_CGROUP_SOCK_OPS) && HAVE_DECL_BPF_CGROUP_SOCK_OPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_SOCK_OPS) == (3), "BPF_CGROUP_SOCK_OPS != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_CGROUP_SOCK_OPS 3
 #endif
-#if !(defined(BPF_SK_SKB_STREAM_PARSER) || (defined(HAVE_DECL_BPF_SK_SKB_STREAM_PARSER) && HAVE_DECL_BPF_SK_SKB_STREAM_PARSER))
+#if defined(BPF_SK_SKB_STREAM_PARSER) || (defined(HAVE_DECL_BPF_SK_SKB_STREAM_PARSER) && HAVE_DECL_BPF_SK_SKB_STREAM_PARSER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_SK_SKB_STREAM_PARSER) == (4), "BPF_SK_SKB_STREAM_PARSER != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_SK_SKB_STREAM_PARSER 4
 #endif
-#if !(defined(BPF_SK_SKB_STREAM_VERDICT) || (defined(HAVE_DECL_BPF_SK_SKB_STREAM_VERDICT) && HAVE_DECL_BPF_SK_SKB_STREAM_VERDICT))
+#if defined(BPF_SK_SKB_STREAM_VERDICT) || (defined(HAVE_DECL_BPF_SK_SKB_STREAM_VERDICT) && HAVE_DECL_BPF_SK_SKB_STREAM_VERDICT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_SK_SKB_STREAM_VERDICT) == (5), "BPF_SK_SKB_STREAM_VERDICT != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_SK_SKB_STREAM_VERDICT 5
 #endif
-#if !(defined(BPF_CGROUP_DEVICE) || (defined(HAVE_DECL_BPF_CGROUP_DEVICE) && HAVE_DECL_BPF_CGROUP_DEVICE))
+#if defined(BPF_CGROUP_DEVICE) || (defined(HAVE_DECL_BPF_CGROUP_DEVICE) && HAVE_DECL_BPF_CGROUP_DEVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_DEVICE) == (6), "BPF_CGROUP_DEVICE != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_CGROUP_DEVICE 6
 #endif
-
-#ifdef IN_MPERS
-
-# error static const struct xlat bpf_attach_type in mpers mode
-
+#if defined(BPF_SK_MSG_VERDICT) || (defined(HAVE_DECL_BPF_SK_MSG_VERDICT) && HAVE_DECL_BPF_SK_MSG_VERDICT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_SK_MSG_VERDICT) == (7), "BPF_SK_MSG_VERDICT != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_SK_MSG_VERDICT 7
+#endif
+#if defined(BPF_CGROUP_INET4_BIND) || (defined(HAVE_DECL_BPF_CGROUP_INET4_BIND) && HAVE_DECL_BPF_CGROUP_INET4_BIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_INET4_BIND) == (8), "BPF_CGROUP_INET4_BIND != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_CGROUP_INET4_BIND 8
+#endif
+#if defined(BPF_CGROUP_INET6_BIND) || (defined(HAVE_DECL_BPF_CGROUP_INET6_BIND) && HAVE_DECL_BPF_CGROUP_INET6_BIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_INET6_BIND) == (9), "BPF_CGROUP_INET6_BIND != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_CGROUP_INET6_BIND 9
+#endif
+#if defined(BPF_CGROUP_INET4_CONNECT) || (defined(HAVE_DECL_BPF_CGROUP_INET4_CONNECT) && HAVE_DECL_BPF_CGROUP_INET4_CONNECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_INET4_CONNECT) == (10), "BPF_CGROUP_INET4_CONNECT != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_CGROUP_INET4_CONNECT 10
+#endif
+#if defined(BPF_CGROUP_INET6_CONNECT) || (defined(HAVE_DECL_BPF_CGROUP_INET6_CONNECT) && HAVE_DECL_BPF_CGROUP_INET6_CONNECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_INET6_CONNECT) == (11), "BPF_CGROUP_INET6_CONNECT != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_CGROUP_INET6_CONNECT 11
+#endif
+#if defined(BPF_CGROUP_INET4_POST_BIND) || (defined(HAVE_DECL_BPF_CGROUP_INET4_POST_BIND) && HAVE_DECL_BPF_CGROUP_INET4_POST_BIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_INET4_POST_BIND) == (12), "BPF_CGROUP_INET4_POST_BIND != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_CGROUP_INET4_POST_BIND 12
+#endif
+#if defined(BPF_CGROUP_INET6_POST_BIND) || (defined(HAVE_DECL_BPF_CGROUP_INET6_POST_BIND) && HAVE_DECL_BPF_CGROUP_INET6_POST_BIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CGROUP_INET6_POST_BIND) == (13), "BPF_CGROUP_INET6_POST_BIND != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_CGROUP_INET6_POST_BIND 13
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_attach_type in mpers mode
+
+# else
 
 static
 const struct xlat bpf_attach_type[] = {
- XLAT(BPF_CGROUP_INET_INGRESS),
- XLAT(BPF_CGROUP_INET_EGRESS),
- XLAT(BPF_CGROUP_INET_SOCK_CREATE),
- XLAT(BPF_CGROUP_SOCK_OPS),
- XLAT(BPF_SK_SKB_STREAM_PARSER),
- XLAT(BPF_SK_SKB_STREAM_VERDICT),
- XLAT(BPF_CGROUP_DEVICE),
+ [BPF_CGROUP_INET_INGRESS] = XLAT(BPF_CGROUP_INET_INGRESS),
+ [BPF_CGROUP_INET_EGRESS] = XLAT(BPF_CGROUP_INET_EGRESS),
+ [BPF_CGROUP_INET_SOCK_CREATE] = XLAT(BPF_CGROUP_INET_SOCK_CREATE),
+ [BPF_CGROUP_SOCK_OPS] = XLAT(BPF_CGROUP_SOCK_OPS),
+ [BPF_SK_SKB_STREAM_PARSER] = XLAT(BPF_SK_SKB_STREAM_PARSER),
+ [BPF_SK_SKB_STREAM_VERDICT] = XLAT(BPF_SK_SKB_STREAM_VERDICT),
+ [BPF_CGROUP_DEVICE] = XLAT(BPF_CGROUP_DEVICE),
+ [BPF_SK_MSG_VERDICT] = XLAT(BPF_SK_MSG_VERDICT),
+ [BPF_CGROUP_INET4_BIND] = XLAT(BPF_CGROUP_INET4_BIND),
+ [BPF_CGROUP_INET6_BIND] = XLAT(BPF_CGROUP_INET6_BIND),
+ [BPF_CGROUP_INET4_CONNECT] = XLAT(BPF_CGROUP_INET4_CONNECT),
+ [BPF_CGROUP_INET6_CONNECT] = XLAT(BPF_CGROUP_INET6_CONNECT),
+ [BPF_CGROUP_INET4_POST_BIND] = XLAT(BPF_CGROUP_INET4_POST_BIND),
+ [BPF_CGROUP_INET6_POST_BIND] = XLAT(BPF_CGROUP_INET6_POST_BIND),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_attach_type.in b/xlat/bpf_attach_type.in
index ad912b7..9438107 100644
--- a/xlat/bpf_attach_type.in
+++ b/xlat/bpf_attach_type.in
@@ -1,3 +1,4 @@
+#value_indexed
 BPF_CGROUP_INET_INGRESS 0
 BPF_CGROUP_INET_EGRESS 1
 BPF_CGROUP_INET_SOCK_CREATE 2
@@ -5,3 +6,10 @@
 BPF_SK_SKB_STREAM_PARSER 4
 BPF_SK_SKB_STREAM_VERDICT 5
 BPF_CGROUP_DEVICE 6
+BPF_SK_MSG_VERDICT 7
+BPF_CGROUP_INET4_BIND 8
+BPF_CGROUP_INET6_BIND 9
+BPF_CGROUP_INET4_CONNECT 10
+BPF_CGROUP_INET6_CONNECT 11
+BPF_CGROUP_INET4_POST_BIND 12
+BPF_CGROUP_INET6_POST_BIND 13
diff --git a/xlat/bpf_class.h b/xlat/bpf_class.h
index bdabc9a..a45ebd7 100644
--- a/xlat/bpf_class.h
+++ b/xlat/bpf_class.h
@@ -1,38 +1,86 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_class.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bpf_class in mpers mode
-
+#if defined(BPF_LD) || (defined(HAVE_DECL_BPF_LD) && HAVE_DECL_BPF_LD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_LD) == (0x0), "BPF_LD != 0x0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_LD 0x0
+#endif
+#if defined(BPF_LDX) || (defined(HAVE_DECL_BPF_LDX) && HAVE_DECL_BPF_LDX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_LDX) == (0x1), "BPF_LDX != 0x1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_LDX 0x1
+#endif
+#if defined(BPF_ST) || (defined(HAVE_DECL_BPF_ST) && HAVE_DECL_BPF_ST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ST) == (0x2), "BPF_ST != 0x2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_ST 0x2
+#endif
+#if defined(BPF_STX) || (defined(HAVE_DECL_BPF_STX) && HAVE_DECL_BPF_STX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_STX) == (0x3), "BPF_STX != 0x3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_STX 0x3
+#endif
+#if defined(BPF_ALU) || (defined(HAVE_DECL_BPF_ALU) && HAVE_DECL_BPF_ALU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ALU) == (0x4), "BPF_ALU != 0x4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_ALU 0x4
+#endif
+#if defined(BPF_JMP) || (defined(HAVE_DECL_BPF_JMP) && HAVE_DECL_BPF_JMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JMP) == (0x5), "BPF_JMP != 0x5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JMP 0x5
+#endif
+#if defined(BPF_RET) || (defined(HAVE_DECL_BPF_RET) && HAVE_DECL_BPF_RET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_RET) == (0x6), "BPF_RET != 0x6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_RET 0x6
+#endif
+#if defined(BPF_MISC) || (defined(HAVE_DECL_BPF_MISC) && HAVE_DECL_BPF_MISC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MISC) == (0x7), "BPF_MISC != 0x7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_MISC 0x7
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_class in mpers mode
+
+# else
 
 static
 const struct xlat bpf_class[] = {
-#if defined(BPF_LD) || (defined(HAVE_DECL_BPF_LD) && HAVE_DECL_BPF_LD)
-  XLAT(BPF_LD),
-#endif
-#if defined(BPF_LDX) || (defined(HAVE_DECL_BPF_LDX) && HAVE_DECL_BPF_LDX)
-  XLAT(BPF_LDX),
-#endif
-#if defined(BPF_ST) || (defined(HAVE_DECL_BPF_ST) && HAVE_DECL_BPF_ST)
-  XLAT(BPF_ST),
-#endif
-#if defined(BPF_STX) || (defined(HAVE_DECL_BPF_STX) && HAVE_DECL_BPF_STX)
-  XLAT(BPF_STX),
-#endif
-#if defined(BPF_ALU) || (defined(HAVE_DECL_BPF_ALU) && HAVE_DECL_BPF_ALU)
-  XLAT(BPF_ALU),
-#endif
-#if defined(BPF_JMP) || (defined(HAVE_DECL_BPF_JMP) && HAVE_DECL_BPF_JMP)
-  XLAT(BPF_JMP),
-#endif
-#if defined(BPF_RET) || (defined(HAVE_DECL_BPF_RET) && HAVE_DECL_BPF_RET)
-  XLAT(BPF_RET),
-#endif
-#if defined(BPF_MISC) || (defined(HAVE_DECL_BPF_MISC) && HAVE_DECL_BPF_MISC)
-  XLAT(BPF_MISC),
-#endif
+ [BPF_LD] = XLAT(BPF_LD),
+ [BPF_LDX] = XLAT(BPF_LDX),
+ [BPF_ST] = XLAT(BPF_ST),
+ [BPF_STX] = XLAT(BPF_STX),
+ [BPF_ALU] = XLAT(BPF_ALU),
+ [BPF_JMP] = XLAT(BPF_JMP),
+ [BPF_RET] = XLAT(BPF_RET),
+ [BPF_MISC] = XLAT(BPF_MISC),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_class.in b/xlat/bpf_class.in
index f8bd3d7..69f6d16 100644
--- a/xlat/bpf_class.in
+++ b/xlat/bpf_class.in
@@ -1,8 +1,9 @@
-BPF_LD
-BPF_LDX
-BPF_ST
-BPF_STX
-BPF_ALU
-BPF_JMP
-BPF_RET
-BPF_MISC
+#value_indexed
+BPF_LD		0x0
+BPF_LDX		0x1
+BPF_ST		0x2
+BPF_STX		0x3
+BPF_ALU		0x4
+BPF_JMP		0x5
+BPF_RET		0x6
+BPF_MISC	0x7
diff --git a/xlat/bpf_commands.h b/xlat/bpf_commands.h
index d51ab1d..d0653b3 100644
--- a/xlat/bpf_commands.h
+++ b/xlat/bpf_commands.h
@@ -1,78 +1,166 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_commands.in; do not edit. */
-#if !(defined(BPF_MAP_CREATE) || (defined(HAVE_DECL_BPF_MAP_CREATE) && HAVE_DECL_BPF_MAP_CREATE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_MAP_CREATE) || (defined(HAVE_DECL_BPF_MAP_CREATE) && HAVE_DECL_BPF_MAP_CREATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_CREATE) == (0), "BPF_MAP_CREATE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_CREATE 0
 #endif
-#if !(defined(BPF_MAP_LOOKUP_ELEM) || (defined(HAVE_DECL_BPF_MAP_LOOKUP_ELEM) && HAVE_DECL_BPF_MAP_LOOKUP_ELEM))
+#if defined(BPF_MAP_LOOKUP_ELEM) || (defined(HAVE_DECL_BPF_MAP_LOOKUP_ELEM) && HAVE_DECL_BPF_MAP_LOOKUP_ELEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_LOOKUP_ELEM) == (1), "BPF_MAP_LOOKUP_ELEM != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_LOOKUP_ELEM 1
 #endif
-#if !(defined(BPF_MAP_UPDATE_ELEM) || (defined(HAVE_DECL_BPF_MAP_UPDATE_ELEM) && HAVE_DECL_BPF_MAP_UPDATE_ELEM))
+#if defined(BPF_MAP_UPDATE_ELEM) || (defined(HAVE_DECL_BPF_MAP_UPDATE_ELEM) && HAVE_DECL_BPF_MAP_UPDATE_ELEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_UPDATE_ELEM) == (2), "BPF_MAP_UPDATE_ELEM != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_UPDATE_ELEM 2
 #endif
-#if !(defined(BPF_MAP_DELETE_ELEM) || (defined(HAVE_DECL_BPF_MAP_DELETE_ELEM) && HAVE_DECL_BPF_MAP_DELETE_ELEM))
+#if defined(BPF_MAP_DELETE_ELEM) || (defined(HAVE_DECL_BPF_MAP_DELETE_ELEM) && HAVE_DECL_BPF_MAP_DELETE_ELEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_DELETE_ELEM) == (3), "BPF_MAP_DELETE_ELEM != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_DELETE_ELEM 3
 #endif
-#if !(defined(BPF_MAP_GET_NEXT_KEY) || (defined(HAVE_DECL_BPF_MAP_GET_NEXT_KEY) && HAVE_DECL_BPF_MAP_GET_NEXT_KEY))
+#if defined(BPF_MAP_GET_NEXT_KEY) || (defined(HAVE_DECL_BPF_MAP_GET_NEXT_KEY) && HAVE_DECL_BPF_MAP_GET_NEXT_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_GET_NEXT_KEY) == (4), "BPF_MAP_GET_NEXT_KEY != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_GET_NEXT_KEY 4
 #endif
-#if !(defined(BPF_PROG_LOAD) || (defined(HAVE_DECL_BPF_PROG_LOAD) && HAVE_DECL_BPF_PROG_LOAD))
+#if defined(BPF_PROG_LOAD) || (defined(HAVE_DECL_BPF_PROG_LOAD) && HAVE_DECL_BPF_PROG_LOAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_LOAD) == (5), "BPF_PROG_LOAD != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_LOAD 5
 #endif
-#if !(defined(BPF_OBJ_PIN) || (defined(HAVE_DECL_BPF_OBJ_PIN) && HAVE_DECL_BPF_OBJ_PIN))
+#if defined(BPF_OBJ_PIN) || (defined(HAVE_DECL_BPF_OBJ_PIN) && HAVE_DECL_BPF_OBJ_PIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_OBJ_PIN) == (6), "BPF_OBJ_PIN != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_OBJ_PIN 6
 #endif
-#if !(defined(BPF_OBJ_GET) || (defined(HAVE_DECL_BPF_OBJ_GET) && HAVE_DECL_BPF_OBJ_GET))
+#if defined(BPF_OBJ_GET) || (defined(HAVE_DECL_BPF_OBJ_GET) && HAVE_DECL_BPF_OBJ_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_OBJ_GET) == (7), "BPF_OBJ_GET != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_OBJ_GET 7
 #endif
-#if !(defined(BPF_PROG_ATTACH) || (defined(HAVE_DECL_BPF_PROG_ATTACH) && HAVE_DECL_BPF_PROG_ATTACH))
+#if defined(BPF_PROG_ATTACH) || (defined(HAVE_DECL_BPF_PROG_ATTACH) && HAVE_DECL_BPF_PROG_ATTACH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_ATTACH) == (8), "BPF_PROG_ATTACH != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_ATTACH 8
 #endif
-#if !(defined(BPF_PROG_DETACH) || (defined(HAVE_DECL_BPF_PROG_DETACH) && HAVE_DECL_BPF_PROG_DETACH))
+#if defined(BPF_PROG_DETACH) || (defined(HAVE_DECL_BPF_PROG_DETACH) && HAVE_DECL_BPF_PROG_DETACH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_DETACH) == (9), "BPF_PROG_DETACH != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(BPF_PROG_TEST_RUN) || (defined(HAVE_DECL_BPF_PROG_TEST_RUN) && HAVE_DECL_BPF_PROG_TEST_RUN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TEST_RUN) == (10), "BPF_PROG_TEST_RUN != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(BPF_PROG_GET_NEXT_ID) || (defined(HAVE_DECL_BPF_PROG_GET_NEXT_ID) && HAVE_DECL_BPF_PROG_GET_NEXT_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_GET_NEXT_ID) == (11), "BPF_PROG_GET_NEXT_ID != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(BPF_MAP_GET_NEXT_ID) || (defined(HAVE_DECL_BPF_MAP_GET_NEXT_ID) && HAVE_DECL_BPF_MAP_GET_NEXT_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_GET_NEXT_ID) == (12), "BPF_MAP_GET_NEXT_ID != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#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)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_GET_FD_BY_ID) == (13), "BPF_PROG_GET_FD_BY_ID != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#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)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_GET_FD_BY_ID) == (14), "BPF_MAP_GET_FD_BY_ID != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#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)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_OBJ_GET_INFO_BY_FD) == (15), "BPF_OBJ_GET_INFO_BY_FD != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_OBJ_GET_INFO_BY_FD 15
 #endif
-
-#ifdef IN_MPERS
-
-# error static const struct xlat bpf_commands in mpers mode
-
+#if defined(BPF_PROG_QUERY) || (defined(HAVE_DECL_BPF_PROG_QUERY) && HAVE_DECL_BPF_PROG_QUERY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_QUERY) == (16), "BPF_PROG_QUERY != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_PROG_QUERY 16
+#endif
+#if defined(BPF_RAW_TRACEPOINT_OPEN) || (defined(HAVE_DECL_BPF_RAW_TRACEPOINT_OPEN) && HAVE_DECL_BPF_RAW_TRACEPOINT_OPEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_RAW_TRACEPOINT_OPEN) == (17), "BPF_RAW_TRACEPOINT_OPEN != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_RAW_TRACEPOINT_OPEN 17
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_commands in mpers mode
+
+# else
 
 static
 const struct xlat bpf_commands[] = {
- XLAT(BPF_MAP_CREATE),
- XLAT(BPF_MAP_LOOKUP_ELEM),
- XLAT(BPF_MAP_UPDATE_ELEM),
- XLAT(BPF_MAP_DELETE_ELEM),
- XLAT(BPF_MAP_GET_NEXT_KEY),
- XLAT(BPF_PROG_LOAD),
- XLAT(BPF_OBJ_PIN),
- 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),
+ [BPF_MAP_CREATE] = XLAT(BPF_MAP_CREATE),
+ [BPF_MAP_LOOKUP_ELEM] = XLAT(BPF_MAP_LOOKUP_ELEM),
+ [BPF_MAP_UPDATE_ELEM] = XLAT(BPF_MAP_UPDATE_ELEM),
+ [BPF_MAP_DELETE_ELEM] = XLAT(BPF_MAP_DELETE_ELEM),
+ [BPF_MAP_GET_NEXT_KEY] = XLAT(BPF_MAP_GET_NEXT_KEY),
+ [BPF_PROG_LOAD] = XLAT(BPF_PROG_LOAD),
+ [BPF_OBJ_PIN] = XLAT(BPF_OBJ_PIN),
+ [BPF_OBJ_GET] = XLAT(BPF_OBJ_GET),
+ [BPF_PROG_ATTACH] = XLAT(BPF_PROG_ATTACH),
+ [BPF_PROG_DETACH] = XLAT(BPF_PROG_DETACH),
+ [BPF_PROG_TEST_RUN] = XLAT(BPF_PROG_TEST_RUN),
+ [BPF_PROG_GET_NEXT_ID] = XLAT(BPF_PROG_GET_NEXT_ID),
+ [BPF_MAP_GET_NEXT_ID] = XLAT(BPF_MAP_GET_NEXT_ID),
+ [BPF_PROG_GET_FD_BY_ID] = XLAT(BPF_PROG_GET_FD_BY_ID),
+ [BPF_MAP_GET_FD_BY_ID] = XLAT(BPF_MAP_GET_FD_BY_ID),
+ [BPF_OBJ_GET_INFO_BY_FD] = XLAT(BPF_OBJ_GET_INFO_BY_FD),
+ [BPF_PROG_QUERY] = XLAT(BPF_PROG_QUERY),
+ [BPF_RAW_TRACEPOINT_OPEN] = XLAT(BPF_RAW_TRACEPOINT_OPEN),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_commands.in b/xlat/bpf_commands.in
index cb7403d..54fd7ad 100644
--- a/xlat/bpf_commands.in
+++ b/xlat/bpf_commands.in
@@ -1,3 +1,4 @@
+#value_indexed
 BPF_MAP_CREATE 0
 BPF_MAP_LOOKUP_ELEM 1
 BPF_MAP_UPDATE_ELEM 2
@@ -14,3 +15,5 @@
 BPF_PROG_GET_FD_BY_ID 13
 BPF_MAP_GET_FD_BY_ID 14
 BPF_OBJ_GET_INFO_BY_FD 15
+BPF_PROG_QUERY 16
+BPF_RAW_TRACEPOINT_OPEN 17
diff --git a/xlat/bpf_file_mode_flags.h b/xlat/bpf_file_mode_flags.h
index 22f88b4..3a6baf5 100644
--- a/xlat/bpf_file_mode_flags.h
+++ b/xlat/bpf_file_mode_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_file_mode_flags.in; do not edit. */
-#if !(defined(BPF_F_RDONLY) || (defined(HAVE_DECL_BPF_F_RDONLY) && HAVE_DECL_BPF_F_RDONLY))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_F_RDONLY) || (defined(HAVE_DECL_BPF_F_RDONLY) && HAVE_DECL_BPF_F_RDONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_RDONLY) == ((1U << 3)), "BPF_F_RDONLY != (1U << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_F_RDONLY (1U << 3)
 #endif
-#if !(defined(BPF_F_WRONLY) || (defined(HAVE_DECL_BPF_F_WRONLY) && HAVE_DECL_BPF_F_WRONLY))
+#if defined(BPF_F_WRONLY) || (defined(HAVE_DECL_BPF_F_WRONLY) && HAVE_DECL_BPF_F_WRONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_WRONLY) == ((1U << 4)), "BPF_F_WRONLY != (1U << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_F_WRONLY (1U << 4)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat bpf_file_mode_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat bpf_file_mode_flags in mpers mode
+
+# else
 
 static
 const struct xlat bpf_file_mode_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_map_flags.h b/xlat/bpf_map_flags.h
index 7ec7f9b..5d02440 100644
--- a/xlat/bpf_map_flags.h
+++ b/xlat/bpf_map_flags.h
@@ -1,26 +1,70 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_F_NO_PREALLOC) || (defined(HAVE_DECL_BPF_F_NO_PREALLOC) && HAVE_DECL_BPF_F_NO_PREALLOC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_NO_PREALLOC) == (1), "BPF_F_NO_PREALLOC != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_F_NO_PREALLOC 1
 #endif
-#if !(defined(BPF_F_NO_COMMON_LRU) || (defined(HAVE_DECL_BPF_F_NO_COMMON_LRU) && HAVE_DECL_BPF_F_NO_COMMON_LRU))
+#if defined(BPF_F_NO_COMMON_LRU) || (defined(HAVE_DECL_BPF_F_NO_COMMON_LRU) && HAVE_DECL_BPF_F_NO_COMMON_LRU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_NO_COMMON_LRU) == (2), "BPF_F_NO_COMMON_LRU != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_F_NO_COMMON_LRU 2
 #endif
-#if !(defined(BPF_F_NUMA_NODE) || (defined(HAVE_DECL_BPF_F_NUMA_NODE) && HAVE_DECL_BPF_F_NUMA_NODE))
+#if defined(BPF_F_NUMA_NODE) || (defined(HAVE_DECL_BPF_F_NUMA_NODE) && HAVE_DECL_BPF_F_NUMA_NODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_NUMA_NODE) == (4), "BPF_F_NUMA_NODE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_F_NUMA_NODE 4
 #endif
-
-#ifdef IN_MPERS
-
-# error static const struct xlat bpf_map_flags in mpers mode
-
+#if defined(BPF_F_RDONLY) || (defined(HAVE_DECL_BPF_F_RDONLY) && HAVE_DECL_BPF_F_RDONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_RDONLY) == ((1U << 3)), "BPF_F_RDONLY != (1U << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_F_RDONLY (1U << 3)
+#endif
+#if defined(BPF_F_WRONLY) || (defined(HAVE_DECL_BPF_F_WRONLY) && HAVE_DECL_BPF_F_WRONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_WRONLY) == ((1U << 4)), "BPF_F_WRONLY != (1U << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_F_WRONLY (1U << 4)
+#endif
+#if defined(BPF_F_STACK_BUILD_ID) || (defined(HAVE_DECL_BPF_F_STACK_BUILD_ID) && HAVE_DECL_BPF_F_STACK_BUILD_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_STACK_BUILD_ID) == ((1U << 5)), "BPF_F_STACK_BUILD_ID != (1U << 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_F_STACK_BUILD_ID (1U << 5)
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# 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(BPF_F_NO_COMMON_LRU),
  XLAT(BPF_F_NUMA_NODE),
+ XLAT(BPF_F_RDONLY),
+ XLAT(BPF_F_WRONLY),
+ XLAT(BPF_F_STACK_BUILD_ID),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_map_flags.in b/xlat/bpf_map_flags.in
index 3137be4..a8f405b 100644
--- a/xlat/bpf_map_flags.in
+++ b/xlat/bpf_map_flags.in
@@ -1,3 +1,6 @@
 BPF_F_NO_PREALLOC	1
 BPF_F_NO_COMMON_LRU	2
 BPF_F_NUMA_NODE		4
+BPF_F_RDONLY		(1U << 3)
+BPF_F_WRONLY		(1U << 4)
+BPF_F_STACK_BUILD_ID	(1U << 5)
diff --git a/xlat/bpf_map_types.h b/xlat/bpf_map_types.h
index 24363e2..28a2191 100644
--- a/xlat/bpf_map_types.h
+++ b/xlat/bpf_map_types.h
@@ -1,82 +1,158 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_map_types.in; do not edit. */
-#if !(defined(BPF_MAP_TYPE_UNSPEC) || (defined(HAVE_DECL_BPF_MAP_TYPE_UNSPEC) && HAVE_DECL_BPF_MAP_TYPE_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_MAP_TYPE_UNSPEC) || (defined(HAVE_DECL_BPF_MAP_TYPE_UNSPEC) && HAVE_DECL_BPF_MAP_TYPE_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_UNSPEC) == (0), "BPF_MAP_TYPE_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_UNSPEC 0
 #endif
-#if !(defined(BPF_MAP_TYPE_HASH) || (defined(HAVE_DECL_BPF_MAP_TYPE_HASH) && HAVE_DECL_BPF_MAP_TYPE_HASH))
+#if defined(BPF_MAP_TYPE_HASH) || (defined(HAVE_DECL_BPF_MAP_TYPE_HASH) && HAVE_DECL_BPF_MAP_TYPE_HASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_HASH) == (1), "BPF_MAP_TYPE_HASH != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_HASH 1
 #endif
-#if !(defined(BPF_MAP_TYPE_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_ARRAY))
+#if defined(BPF_MAP_TYPE_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_ARRAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_ARRAY) == (2), "BPF_MAP_TYPE_ARRAY != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_ARRAY 2
 #endif
-#if !(defined(BPF_MAP_TYPE_PROG_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_PROG_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_PROG_ARRAY))
+#if defined(BPF_MAP_TYPE_PROG_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_PROG_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_PROG_ARRAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_PROG_ARRAY) == (3), "BPF_MAP_TYPE_PROG_ARRAY != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_PROG_ARRAY 3
 #endif
-#if !(defined(BPF_MAP_TYPE_PERF_EVENT_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_PERF_EVENT_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_PERF_EVENT_ARRAY))
+#if defined(BPF_MAP_TYPE_PERF_EVENT_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_PERF_EVENT_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_PERF_EVENT_ARRAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_PERF_EVENT_ARRAY) == (4), "BPF_MAP_TYPE_PERF_EVENT_ARRAY != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_PERF_EVENT_ARRAY 4
 #endif
-#if !(defined(BPF_MAP_TYPE_PERCPU_HASH) || (defined(HAVE_DECL_BPF_MAP_TYPE_PERCPU_HASH) && HAVE_DECL_BPF_MAP_TYPE_PERCPU_HASH))
+#if defined(BPF_MAP_TYPE_PERCPU_HASH) || (defined(HAVE_DECL_BPF_MAP_TYPE_PERCPU_HASH) && HAVE_DECL_BPF_MAP_TYPE_PERCPU_HASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_PERCPU_HASH) == (5), "BPF_MAP_TYPE_PERCPU_HASH != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_PERCPU_HASH 5
 #endif
-#if !(defined(BPF_MAP_TYPE_PERCPU_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_PERCPU_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_PERCPU_ARRAY))
+#if defined(BPF_MAP_TYPE_PERCPU_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_PERCPU_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_PERCPU_ARRAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_PERCPU_ARRAY) == (6), "BPF_MAP_TYPE_PERCPU_ARRAY != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_PERCPU_ARRAY 6
 #endif
-#if !(defined(BPF_MAP_TYPE_STACK_TRACE) || (defined(HAVE_DECL_BPF_MAP_TYPE_STACK_TRACE) && HAVE_DECL_BPF_MAP_TYPE_STACK_TRACE))
+#if defined(BPF_MAP_TYPE_STACK_TRACE) || (defined(HAVE_DECL_BPF_MAP_TYPE_STACK_TRACE) && HAVE_DECL_BPF_MAP_TYPE_STACK_TRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_STACK_TRACE) == (7), "BPF_MAP_TYPE_STACK_TRACE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_STACK_TRACE 7
 #endif
-#if !(defined(BPF_MAP_TYPE_CGROUP_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_CGROUP_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_CGROUP_ARRAY))
+#if defined(BPF_MAP_TYPE_CGROUP_ARRAY) || (defined(HAVE_DECL_BPF_MAP_TYPE_CGROUP_ARRAY) && HAVE_DECL_BPF_MAP_TYPE_CGROUP_ARRAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_CGROUP_ARRAY) == (8), "BPF_MAP_TYPE_CGROUP_ARRAY != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_CGROUP_ARRAY 8
 #endif
-#if !(defined(BPF_MAP_TYPE_LRU_HASH) || (defined(HAVE_DECL_BPF_MAP_TYPE_LRU_HASH) && HAVE_DECL_BPF_MAP_TYPE_LRU_HASH))
+#if defined(BPF_MAP_TYPE_LRU_HASH) || (defined(HAVE_DECL_BPF_MAP_TYPE_LRU_HASH) && HAVE_DECL_BPF_MAP_TYPE_LRU_HASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_LRU_HASH) == (9), "BPF_MAP_TYPE_LRU_HASH != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_LRU_HASH 9
 #endif
-#if !(defined(BPF_MAP_TYPE_LRU_PERCPU_HASH) || (defined(HAVE_DECL_BPF_MAP_TYPE_LRU_PERCPU_HASH) && HAVE_DECL_BPF_MAP_TYPE_LRU_PERCPU_HASH))
+#if defined(BPF_MAP_TYPE_LRU_PERCPU_HASH) || (defined(HAVE_DECL_BPF_MAP_TYPE_LRU_PERCPU_HASH) && HAVE_DECL_BPF_MAP_TYPE_LRU_PERCPU_HASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_LRU_PERCPU_HASH) == (10), "BPF_MAP_TYPE_LRU_PERCPU_HASH != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_LRU_PERCPU_HASH 10
 #endif
-#if !(defined(BPF_MAP_TYPE_LPM_TRIE) || (defined(HAVE_DECL_BPF_MAP_TYPE_LPM_TRIE) && HAVE_DECL_BPF_MAP_TYPE_LPM_TRIE))
+#if defined(BPF_MAP_TYPE_LPM_TRIE) || (defined(HAVE_DECL_BPF_MAP_TYPE_LPM_TRIE) && HAVE_DECL_BPF_MAP_TYPE_LPM_TRIE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_LPM_TRIE) == (11), "BPF_MAP_TYPE_LPM_TRIE != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_LPM_TRIE 11
 #endif
-#if !(defined(BPF_MAP_TYPE_ARRAY_OF_MAPS) || (defined(HAVE_DECL_BPF_MAP_TYPE_ARRAY_OF_MAPS) && HAVE_DECL_BPF_MAP_TYPE_ARRAY_OF_MAPS))
+#if defined(BPF_MAP_TYPE_ARRAY_OF_MAPS) || (defined(HAVE_DECL_BPF_MAP_TYPE_ARRAY_OF_MAPS) && HAVE_DECL_BPF_MAP_TYPE_ARRAY_OF_MAPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_ARRAY_OF_MAPS) == (12), "BPF_MAP_TYPE_ARRAY_OF_MAPS != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_ARRAY_OF_MAPS 12
 #endif
-#if !(defined(BPF_MAP_TYPE_HASH_OF_MAPS) || (defined(HAVE_DECL_BPF_MAP_TYPE_HASH_OF_MAPS) && HAVE_DECL_BPF_MAP_TYPE_HASH_OF_MAPS))
+#if defined(BPF_MAP_TYPE_HASH_OF_MAPS) || (defined(HAVE_DECL_BPF_MAP_TYPE_HASH_OF_MAPS) && HAVE_DECL_BPF_MAP_TYPE_HASH_OF_MAPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_HASH_OF_MAPS) == (13), "BPF_MAP_TYPE_HASH_OF_MAPS != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_HASH_OF_MAPS 13
 #endif
-#if !(defined(BPF_MAP_TYPE_DEVMAP) || (defined(HAVE_DECL_BPF_MAP_TYPE_DEVMAP) && HAVE_DECL_BPF_MAP_TYPE_DEVMAP))
+#if defined(BPF_MAP_TYPE_DEVMAP) || (defined(HAVE_DECL_BPF_MAP_TYPE_DEVMAP) && HAVE_DECL_BPF_MAP_TYPE_DEVMAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_DEVMAP) == (14), "BPF_MAP_TYPE_DEVMAP != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_DEVMAP 14
 #endif
-#if !(defined(BPF_MAP_TYPE_SOCKMAP) || (defined(HAVE_DECL_BPF_MAP_TYPE_SOCKMAP) && HAVE_DECL_BPF_MAP_TYPE_SOCKMAP))
+#if defined(BPF_MAP_TYPE_SOCKMAP) || (defined(HAVE_DECL_BPF_MAP_TYPE_SOCKMAP) && HAVE_DECL_BPF_MAP_TYPE_SOCKMAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_SOCKMAP) == (15), "BPF_MAP_TYPE_SOCKMAP != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_SOCKMAP 15
 #endif
-#if !(defined(BPF_MAP_TYPE_CPUMAP) || (defined(HAVE_DECL_BPF_MAP_TYPE_CPUMAP) && HAVE_DECL_BPF_MAP_TYPE_CPUMAP))
+#if defined(BPF_MAP_TYPE_CPUMAP) || (defined(HAVE_DECL_BPF_MAP_TYPE_CPUMAP) && HAVE_DECL_BPF_MAP_TYPE_CPUMAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MAP_TYPE_CPUMAP) == (16), "BPF_MAP_TYPE_CPUMAP != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_MAP_TYPE_CPUMAP 16
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat bpf_map_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat bpf_map_types in mpers mode
+
+# else
 
 static
 const struct xlat bpf_map_types[] = {
- XLAT(BPF_MAP_TYPE_UNSPEC),
- XLAT(BPF_MAP_TYPE_HASH),
- XLAT(BPF_MAP_TYPE_ARRAY),
- XLAT(BPF_MAP_TYPE_PROG_ARRAY),
- XLAT(BPF_MAP_TYPE_PERF_EVENT_ARRAY),
- XLAT(BPF_MAP_TYPE_PERCPU_HASH),
- XLAT(BPF_MAP_TYPE_PERCPU_ARRAY),
- XLAT(BPF_MAP_TYPE_STACK_TRACE),
- XLAT(BPF_MAP_TYPE_CGROUP_ARRAY),
- XLAT(BPF_MAP_TYPE_LRU_HASH),
- XLAT(BPF_MAP_TYPE_LRU_PERCPU_HASH),
- XLAT(BPF_MAP_TYPE_LPM_TRIE),
- XLAT(BPF_MAP_TYPE_ARRAY_OF_MAPS),
- XLAT(BPF_MAP_TYPE_HASH_OF_MAPS),
- XLAT(BPF_MAP_TYPE_DEVMAP),
- XLAT(BPF_MAP_TYPE_SOCKMAP),
- XLAT(BPF_MAP_TYPE_CPUMAP),
+ [BPF_MAP_TYPE_UNSPEC] = XLAT(BPF_MAP_TYPE_UNSPEC),
+ [BPF_MAP_TYPE_HASH] = XLAT(BPF_MAP_TYPE_HASH),
+ [BPF_MAP_TYPE_ARRAY] = XLAT(BPF_MAP_TYPE_ARRAY),
+ [BPF_MAP_TYPE_PROG_ARRAY] = XLAT(BPF_MAP_TYPE_PROG_ARRAY),
+ [BPF_MAP_TYPE_PERF_EVENT_ARRAY] = XLAT(BPF_MAP_TYPE_PERF_EVENT_ARRAY),
+ [BPF_MAP_TYPE_PERCPU_HASH] = XLAT(BPF_MAP_TYPE_PERCPU_HASH),
+ [BPF_MAP_TYPE_PERCPU_ARRAY] = XLAT(BPF_MAP_TYPE_PERCPU_ARRAY),
+ [BPF_MAP_TYPE_STACK_TRACE] = XLAT(BPF_MAP_TYPE_STACK_TRACE),
+ [BPF_MAP_TYPE_CGROUP_ARRAY] = XLAT(BPF_MAP_TYPE_CGROUP_ARRAY),
+ [BPF_MAP_TYPE_LRU_HASH] = XLAT(BPF_MAP_TYPE_LRU_HASH),
+ [BPF_MAP_TYPE_LRU_PERCPU_HASH] = XLAT(BPF_MAP_TYPE_LRU_PERCPU_HASH),
+ [BPF_MAP_TYPE_LPM_TRIE] = XLAT(BPF_MAP_TYPE_LPM_TRIE),
+ [BPF_MAP_TYPE_ARRAY_OF_MAPS] = XLAT(BPF_MAP_TYPE_ARRAY_OF_MAPS),
+ [BPF_MAP_TYPE_HASH_OF_MAPS] = XLAT(BPF_MAP_TYPE_HASH_OF_MAPS),
+ [BPF_MAP_TYPE_DEVMAP] = XLAT(BPF_MAP_TYPE_DEVMAP),
+ [BPF_MAP_TYPE_SOCKMAP] = XLAT(BPF_MAP_TYPE_SOCKMAP),
+ [BPF_MAP_TYPE_CPUMAP] = XLAT(BPF_MAP_TYPE_CPUMAP),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_map_types.in b/xlat/bpf_map_types.in
index 3f74d2a..99b08c8 100644
--- a/xlat/bpf_map_types.in
+++ b/xlat/bpf_map_types.in
@@ -1,3 +1,4 @@
+#value_indexed
 BPF_MAP_TYPE_UNSPEC 0
 BPF_MAP_TYPE_HASH 1
 BPF_MAP_TYPE_ARRAY 2
diff --git a/xlat/bpf_map_update_elem_flags.h b/xlat/bpf_map_update_elem_flags.h
index 038863e..4ec5d17 100644
--- a/xlat/bpf_map_update_elem_flags.h
+++ b/xlat/bpf_map_update_elem_flags.h
@@ -1,26 +1,46 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_map_update_elem_flags.in; do not edit. */
-#if !(defined(BPF_ANY) || (defined(HAVE_DECL_BPF_ANY) && HAVE_DECL_BPF_ANY))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_ANY) || (defined(HAVE_DECL_BPF_ANY) && HAVE_DECL_BPF_ANY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ANY) == (0), "BPF_ANY != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_ANY 0
 #endif
-#if !(defined(BPF_NOEXIST) || (defined(HAVE_DECL_BPF_NOEXIST) && HAVE_DECL_BPF_NOEXIST))
+#if defined(BPF_NOEXIST) || (defined(HAVE_DECL_BPF_NOEXIST) && HAVE_DECL_BPF_NOEXIST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_NOEXIST) == (1), "BPF_NOEXIST != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_NOEXIST 1
 #endif
-#if !(defined(BPF_EXIST) || (defined(HAVE_DECL_BPF_EXIST) && HAVE_DECL_BPF_EXIST))
+#if defined(BPF_EXIST) || (defined(HAVE_DECL_BPF_EXIST) && HAVE_DECL_BPF_EXIST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_EXIST) == (2), "BPF_EXIST != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_EXIST 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat bpf_map_update_elem_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat bpf_map_update_elem_flags in mpers mode
+
+# else
 
 static
 const struct xlat bpf_map_update_elem_flags[] = {
- XLAT(BPF_ANY),
- XLAT(BPF_NOEXIST),
- XLAT(BPF_EXIST),
+ [BPF_ANY] = XLAT(BPF_ANY),
+ [BPF_NOEXIST] = XLAT(BPF_NOEXIST),
+ [BPF_EXIST] = XLAT(BPF_EXIST),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_map_update_elem_flags.in b/xlat/bpf_map_update_elem_flags.in
index 6b1d61f..e9322ea 100644
--- a/xlat/bpf_map_update_elem_flags.in
+++ b/xlat/bpf_map_update_elem_flags.in
@@ -1,3 +1,4 @@
+#value_indexed
 BPF_ANY 0
 BPF_NOEXIST 1
 BPF_EXIST 2
diff --git a/xlat/bpf_miscop.h b/xlat/bpf_miscop.h
index bedf35b..3a930e6 100644
--- a/xlat/bpf_miscop.h
+++ b/xlat/bpf_miscop.h
@@ -1,20 +1,38 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_miscop.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bpf_miscop in mpers mode
-
+#if defined(BPF_TAX) || (defined(HAVE_DECL_BPF_TAX) && HAVE_DECL_BPF_TAX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_TAX) == (0x00), "BPF_TAX != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_TAX 0x00
+#endif
+#if defined(BPF_TXA) || (defined(HAVE_DECL_BPF_TXA) && HAVE_DECL_BPF_TXA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_TXA) == (0x80), "BPF_TXA != 0x80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_TXA 0x80
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_miscop in mpers mode
+
+# else
 
 static
 const struct xlat bpf_miscop[] = {
-#if defined(BPF_TAX) || (defined(HAVE_DECL_BPF_TAX) && HAVE_DECL_BPF_TAX)
-  XLAT(BPF_TAX),
-#endif
-#if defined(BPF_TXA) || (defined(HAVE_DECL_BPF_TXA) && HAVE_DECL_BPF_TXA)
-  XLAT(BPF_TXA),
-#endif
+ XLAT(BPF_TAX),
+ XLAT(BPF_TXA),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_miscop.in b/xlat/bpf_miscop.in
index c9703b1..6df47b3 100644
--- a/xlat/bpf_miscop.in
+++ b/xlat/bpf_miscop.in
@@ -1,2 +1,2 @@
-BPF_TAX
-BPF_TXA
+BPF_TAX	0x00
+BPF_TXA	0x80
diff --git a/xlat/bpf_mode.h b/xlat/bpf_mode.h
index 0e3c862..5cb73d6 100644
--- a/xlat/bpf_mode.h
+++ b/xlat/bpf_mode.h
@@ -1,35 +1,78 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_mode.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bpf_mode in mpers mode
-
+#if defined(BPF_IMM) || (defined(HAVE_DECL_BPF_IMM) && HAVE_DECL_BPF_IMM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_IMM) == (0x00), "BPF_IMM != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_IMM 0x00
+#endif
+#if defined(BPF_ABS) || (defined(HAVE_DECL_BPF_ABS) && HAVE_DECL_BPF_ABS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ABS) == (0x20), "BPF_ABS != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_ABS 0x20
+#endif
+#if defined(BPF_IND) || (defined(HAVE_DECL_BPF_IND) && HAVE_DECL_BPF_IND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_IND) == (0x40), "BPF_IND != 0x40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_IND 0x40
+#endif
+#if defined(BPF_MEM) || (defined(HAVE_DECL_BPF_MEM) && HAVE_DECL_BPF_MEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MEM) == (0x60), "BPF_MEM != 0x60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_MEM 0x60
+#endif
+#if defined(BPF_LEN) || (defined(HAVE_DECL_BPF_LEN) && HAVE_DECL_BPF_LEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_LEN) == (0x80), "BPF_LEN != 0x80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_LEN 0x80
+#endif
+#if defined(BPF_MSH) || (defined(HAVE_DECL_BPF_MSH) && HAVE_DECL_BPF_MSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MSH) == (0xa0), "BPF_MSH != 0xa0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_MSH 0xa0
+#endif
+#if defined(BPF_XADD) || (defined(HAVE_DECL_BPF_XADD) && HAVE_DECL_BPF_XADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_XADD) == (0xc0), "BPF_XADD != 0xc0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_XADD 0xc0
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_mode in mpers mode
+
+# else
 
 static
 const struct xlat bpf_mode[] = {
-#if defined(BPF_IMM) || (defined(HAVE_DECL_BPF_IMM) && HAVE_DECL_BPF_IMM)
-  XLAT(BPF_IMM),
-#endif
-#if defined(BPF_ABS) || (defined(HAVE_DECL_BPF_ABS) && HAVE_DECL_BPF_ABS)
-  XLAT(BPF_ABS),
-#endif
-#if defined(BPF_IND) || (defined(HAVE_DECL_BPF_IND) && HAVE_DECL_BPF_IND)
-  XLAT(BPF_IND),
-#endif
-#if defined(BPF_MEM) || (defined(HAVE_DECL_BPF_MEM) && HAVE_DECL_BPF_MEM)
-  XLAT(BPF_MEM),
-#endif
-#if defined(BPF_LEN) || (defined(HAVE_DECL_BPF_LEN) && HAVE_DECL_BPF_LEN)
-  XLAT(BPF_LEN),
-#endif
-#if defined(BPF_MSH) || (defined(HAVE_DECL_BPF_MSH) && HAVE_DECL_BPF_MSH)
-  XLAT(BPF_MSH),
-#endif
-#if defined(BPF_XADD) || (defined(HAVE_DECL_BPF_XADD) && HAVE_DECL_BPF_XADD)
-  XLAT(BPF_XADD),
-#endif
+ XLAT(BPF_IMM),
+ XLAT(BPF_ABS),
+ XLAT(BPF_IND),
+ XLAT(BPF_MEM),
+ XLAT(BPF_LEN),
+ XLAT(BPF_MSH),
+ XLAT(BPF_XADD),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_mode.in b/xlat/bpf_mode.in
index 10adecd..a412c0e 100644
--- a/xlat/bpf_mode.in
+++ b/xlat/bpf_mode.in
@@ -1,7 +1,7 @@
-BPF_IMM
-BPF_ABS
-BPF_IND
-BPF_MEM
-BPF_LEN
-BPF_MSH
-BPF_XADD
+BPF_IMM		0x00
+BPF_ABS		0x20
+BPF_IND		0x40
+BPF_MEM		0x60
+BPF_LEN		0x80
+BPF_MSH		0xa0
+BPF_XADD	0xc0
diff --git a/xlat/bpf_op_alu.h b/xlat/bpf_op_alu.h
index 047dbe2..96be423 100644
--- a/xlat/bpf_op_alu.h
+++ b/xlat/bpf_op_alu.h
@@ -1,56 +1,134 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_op_alu.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bpf_op_alu in mpers mode
-
+#if defined(BPF_ADD) || (defined(HAVE_DECL_BPF_ADD) && HAVE_DECL_BPF_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ADD) == (0x00), "BPF_ADD != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_ADD 0x00
+#endif
+#if defined(BPF_SUB) || (defined(HAVE_DECL_BPF_SUB) && HAVE_DECL_BPF_SUB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_SUB) == (0x10), "BPF_SUB != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_SUB 0x10
+#endif
+#if defined(BPF_MUL) || (defined(HAVE_DECL_BPF_MUL) && HAVE_DECL_BPF_MUL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MUL) == (0x20), "BPF_MUL != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_MUL 0x20
+#endif
+#if defined(BPF_DIV) || (defined(HAVE_DECL_BPF_DIV) && HAVE_DECL_BPF_DIV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_DIV) == (0x30), "BPF_DIV != 0x30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_DIV 0x30
+#endif
+#if defined(BPF_OR) || (defined(HAVE_DECL_BPF_OR) && HAVE_DECL_BPF_OR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_OR) == (0x40), "BPF_OR != 0x40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_OR 0x40
+#endif
+#if defined(BPF_AND) || (defined(HAVE_DECL_BPF_AND) && HAVE_DECL_BPF_AND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_AND) == (0x50), "BPF_AND != 0x50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_AND 0x50
+#endif
+#if defined(BPF_LSH) || (defined(HAVE_DECL_BPF_LSH) && HAVE_DECL_BPF_LSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_LSH) == (0x60), "BPF_LSH != 0x60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_LSH 0x60
+#endif
+#if defined(BPF_RSH) || (defined(HAVE_DECL_BPF_RSH) && HAVE_DECL_BPF_RSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_RSH) == (0x70), "BPF_RSH != 0x70");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_RSH 0x70
+#endif
+#if defined(BPF_NEG) || (defined(HAVE_DECL_BPF_NEG) && HAVE_DECL_BPF_NEG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_NEG) == (0x80), "BPF_NEG != 0x80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_NEG 0x80
+#endif
+#if defined(BPF_MOD) || (defined(HAVE_DECL_BPF_MOD) && HAVE_DECL_BPF_MOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MOD) == (0x90), "BPF_MOD != 0x90");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_MOD 0x90
+#endif
+#if defined(BPF_XOR) || (defined(HAVE_DECL_BPF_XOR) && HAVE_DECL_BPF_XOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_XOR) == (0xa0), "BPF_XOR != 0xa0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_XOR 0xa0
+#endif
+#if defined(BPF_MOV) || (defined(HAVE_DECL_BPF_MOV) && HAVE_DECL_BPF_MOV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MOV) == (0xb0), "BPF_MOV != 0xb0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_MOV 0xb0
+#endif
+#if defined(BPF_ARSH) || (defined(HAVE_DECL_BPF_ARSH) && HAVE_DECL_BPF_ARSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ARSH) == (0xc0), "BPF_ARSH != 0xc0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_ARSH 0xc0
+#endif
+#if defined(BPF_END) || (defined(HAVE_DECL_BPF_END) && HAVE_DECL_BPF_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_END) == (0xd0), "BPF_END != 0xd0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_END 0xd0
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_op_alu in mpers mode
+
+# else
 
 static
 const struct xlat bpf_op_alu[] = {
-#if defined(BPF_ADD) || (defined(HAVE_DECL_BPF_ADD) && HAVE_DECL_BPF_ADD)
-  XLAT(BPF_ADD),
-#endif
-#if defined(BPF_SUB) || (defined(HAVE_DECL_BPF_SUB) && HAVE_DECL_BPF_SUB)
-  XLAT(BPF_SUB),
-#endif
-#if defined(BPF_MUL) || (defined(HAVE_DECL_BPF_MUL) && HAVE_DECL_BPF_MUL)
-  XLAT(BPF_MUL),
-#endif
-#if defined(BPF_DIV) || (defined(HAVE_DECL_BPF_DIV) && HAVE_DECL_BPF_DIV)
-  XLAT(BPF_DIV),
-#endif
-#if defined(BPF_OR) || (defined(HAVE_DECL_BPF_OR) && HAVE_DECL_BPF_OR)
-  XLAT(BPF_OR),
-#endif
-#if defined(BPF_AND) || (defined(HAVE_DECL_BPF_AND) && HAVE_DECL_BPF_AND)
-  XLAT(BPF_AND),
-#endif
-#if defined(BPF_LSH) || (defined(HAVE_DECL_BPF_LSH) && HAVE_DECL_BPF_LSH)
-  XLAT(BPF_LSH),
-#endif
-#if defined(BPF_RSH) || (defined(HAVE_DECL_BPF_RSH) && HAVE_DECL_BPF_RSH)
-  XLAT(BPF_RSH),
-#endif
-#if defined(BPF_NEG) || (defined(HAVE_DECL_BPF_NEG) && HAVE_DECL_BPF_NEG)
-  XLAT(BPF_NEG),
-#endif
-#if defined(BPF_MOD) || (defined(HAVE_DECL_BPF_MOD) && HAVE_DECL_BPF_MOD)
-  XLAT(BPF_MOD),
-#endif
-#if defined(BPF_XOR) || (defined(HAVE_DECL_BPF_XOR) && HAVE_DECL_BPF_XOR)
-  XLAT(BPF_XOR),
-#endif
-#if defined(BPF_MOV) || (defined(HAVE_DECL_BPF_MOV) && HAVE_DECL_BPF_MOV)
-  XLAT(BPF_MOV),
-#endif
-#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(BPF_ADD),
+ XLAT(BPF_SUB),
+ XLAT(BPF_MUL),
+ XLAT(BPF_DIV),
+ XLAT(BPF_OR),
+ XLAT(BPF_AND),
+ XLAT(BPF_LSH),
+ XLAT(BPF_RSH),
+ XLAT(BPF_NEG),
+ XLAT(BPF_MOD),
+ XLAT(BPF_XOR),
+ XLAT(BPF_MOV),
+ XLAT(BPF_ARSH),
+ XLAT(BPF_END),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_op_alu.in b/xlat/bpf_op_alu.in
index 580b68b..5016a46 100644
--- a/xlat/bpf_op_alu.in
+++ b/xlat/bpf_op_alu.in
@@ -1,14 +1,14 @@
-BPF_ADD
-BPF_SUB
-BPF_MUL
-BPF_DIV
-BPF_OR
-BPF_AND
-BPF_LSH
-BPF_RSH
-BPF_NEG
-BPF_MOD
-BPF_XOR
-BPF_MOV
-BPF_ARSH
-BPF_END
+BPF_ADD		0x00
+BPF_SUB		0x10
+BPF_MUL		0x20
+BPF_DIV		0x30
+BPF_OR		0x40
+BPF_AND		0x50
+BPF_LSH		0x60
+BPF_RSH		0x70
+BPF_NEG		0x80
+BPF_MOD		0x90
+BPF_XOR		0xa0
+BPF_MOV		0xb0
+BPF_ARSH	0xc0
+BPF_END		0xd0
diff --git a/xlat/bpf_op_jmp.h b/xlat/bpf_op_jmp.h
index 9bb2acd..56d1a42 100644
--- a/xlat/bpf_op_jmp.h
+++ b/xlat/bpf_op_jmp.h
@@ -1,56 +1,134 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_op_jmp.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bpf_op_jmp in mpers mode
-
+#if defined(BPF_JA) || (defined(HAVE_DECL_BPF_JA) && HAVE_DECL_BPF_JA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JA) == (0x00), "BPF_JA != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_JA 0x00
+#endif
+#if defined(BPF_JEQ) || (defined(HAVE_DECL_BPF_JEQ) && HAVE_DECL_BPF_JEQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JEQ) == (0x10), "BPF_JEQ != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JEQ 0x10
+#endif
+#if defined(BPF_JGT) || (defined(HAVE_DECL_BPF_JGT) && HAVE_DECL_BPF_JGT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JGT) == (0x20), "BPF_JGT != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JGT 0x20
+#endif
+#if defined(BPF_JGE) || (defined(HAVE_DECL_BPF_JGE) && HAVE_DECL_BPF_JGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JGE) == (0x30), "BPF_JGE != 0x30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JGE 0x30
+#endif
+#if defined(BPF_JSET) || (defined(HAVE_DECL_BPF_JSET) && HAVE_DECL_BPF_JSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JSET) == (0x40), "BPF_JSET != 0x40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JSET 0x40
+#endif
+#if defined(BPF_JNE) || (defined(HAVE_DECL_BPF_JNE) && HAVE_DECL_BPF_JNE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JNE) == (0x50), "BPF_JNE != 0x50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JNE 0x50
+#endif
+#if defined(BPF_JSGT) || (defined(HAVE_DECL_BPF_JSGT) && HAVE_DECL_BPF_JSGT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JSGT) == (0x60), "BPF_JSGT != 0x60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JSGT 0x60
+#endif
+#if defined(BPF_JSGE) || (defined(HAVE_DECL_BPF_JSGE) && HAVE_DECL_BPF_JSGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JSGE) == (0x70), "BPF_JSGE != 0x70");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JSGE 0x70
+#endif
+#if defined(BPF_CALL) || (defined(HAVE_DECL_BPF_CALL) && HAVE_DECL_BPF_CALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CALL) == (0x80), "BPF_CALL != 0x80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_CALL 0x80
+#endif
+#if defined(BPF_EXIT) || (defined(HAVE_DECL_BPF_EXIT) && HAVE_DECL_BPF_EXIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_EXIT) == (0x90), "BPF_EXIT != 0x90");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_EXIT 0x90
+#endif
+#if defined(BPF_JLT) || (defined(HAVE_DECL_BPF_JLT) && HAVE_DECL_BPF_JLT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JLT) == (0xa0), "BPF_JLT != 0xa0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JLT 0xa0
+#endif
+#if defined(BPF_JLE) || (defined(HAVE_DECL_BPF_JLE) && HAVE_DECL_BPF_JLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JLE) == (0xb0), "BPF_JLE != 0xb0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JLE 0xb0
+#endif
+#if defined(BPF_JSLT) || (defined(HAVE_DECL_BPF_JSLT) && HAVE_DECL_BPF_JSLT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JSLT) == (0xc0), "BPF_JSLT != 0xc0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JSLT 0xc0
+#endif
+#if defined(BPF_JSLE) || (defined(HAVE_DECL_BPF_JSLE) && HAVE_DECL_BPF_JSLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JSLE) == (0xd0), "BPF_JSLE != 0xd0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JSLE 0xd0
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_op_jmp in mpers mode
+
+# else
 
 static
 const struct xlat bpf_op_jmp[] = {
-#if defined(BPF_JA) || (defined(HAVE_DECL_BPF_JA) && HAVE_DECL_BPF_JA)
-  XLAT(BPF_JA),
-#endif
-#if defined(BPF_JEQ) || (defined(HAVE_DECL_BPF_JEQ) && HAVE_DECL_BPF_JEQ)
-  XLAT(BPF_JEQ),
-#endif
-#if defined(BPF_JGT) || (defined(HAVE_DECL_BPF_JGT) && HAVE_DECL_BPF_JGT)
-  XLAT(BPF_JGT),
-#endif
-#if defined(BPF_JGE) || (defined(HAVE_DECL_BPF_JGE) && HAVE_DECL_BPF_JGE)
-  XLAT(BPF_JGE),
-#endif
-#if defined(BPF_JSET) || (defined(HAVE_DECL_BPF_JSET) && HAVE_DECL_BPF_JSET)
-  XLAT(BPF_JSET),
-#endif
-#if defined(BPF_JNE) || (defined(HAVE_DECL_BPF_JNE) && HAVE_DECL_BPF_JNE)
-  XLAT(BPF_JNE),
-#endif
-#if defined(BPF_JLT) || (defined(HAVE_DECL_BPF_JLT) && HAVE_DECL_BPF_JLT)
-  XLAT(BPF_JLT),
-#endif
-#if defined(BPF_JLE) || (defined(HAVE_DECL_BPF_JLE) && HAVE_DECL_BPF_JLE)
-  XLAT(BPF_JLE),
-#endif
-#if defined(BPF_JSGT) || (defined(HAVE_DECL_BPF_JSGT) && HAVE_DECL_BPF_JSGT)
-  XLAT(BPF_JSGT),
-#endif
-#if defined(BPF_JSGE) || (defined(HAVE_DECL_BPF_JSGE) && HAVE_DECL_BPF_JSGE)
-  XLAT(BPF_JSGE),
-#endif
-#if defined(BPF_JSLT) || (defined(HAVE_DECL_BPF_JSLT) && HAVE_DECL_BPF_JSLT)
-  XLAT(BPF_JSLT),
-#endif
-#if defined(BPF_JSLE) || (defined(HAVE_DECL_BPF_JSLE) && HAVE_DECL_BPF_JSLE)
-  XLAT(BPF_JSLE),
-#endif
-#if defined(BPF_CALL) || (defined(HAVE_DECL_BPF_CALL) && HAVE_DECL_BPF_CALL)
-  XLAT(BPF_CALL),
-#endif
-#if defined(BPF_EXIT) || (defined(HAVE_DECL_BPF_EXIT) && HAVE_DECL_BPF_EXIT)
-  XLAT(BPF_EXIT),
-#endif
+ XLAT(BPF_JA),
+ XLAT(BPF_JEQ),
+ XLAT(BPF_JGT),
+ XLAT(BPF_JGE),
+ XLAT(BPF_JSET),
+ XLAT(BPF_JNE),
+ XLAT(BPF_JSGT),
+ XLAT(BPF_JSGE),
+ XLAT(BPF_CALL),
+ XLAT(BPF_EXIT),
+ XLAT(BPF_JLT),
+ XLAT(BPF_JLE),
+ XLAT(BPF_JSLT),
+ XLAT(BPF_JSLE),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_op_jmp.in b/xlat/bpf_op_jmp.in
index 48fcb07..1e9b6f7 100644
--- a/xlat/bpf_op_jmp.in
+++ b/xlat/bpf_op_jmp.in
@@ -1,14 +1,14 @@
-BPF_JA
-BPF_JEQ
-BPF_JGT
-BPF_JGE
-BPF_JSET
-BPF_JNE
-BPF_JLT
-BPF_JLE
-BPF_JSGT
-BPF_JSGE
-BPF_JSLT
-BPF_JSLE
-BPF_CALL
-BPF_EXIT
+BPF_JA		0x00
+BPF_JEQ		0x10
+BPF_JGT		0x20
+BPF_JGE		0x30
+BPF_JSET	0x40
+BPF_JNE		0x50
+BPF_JSGT	0x60
+BPF_JSGE	0x70
+BPF_CALL	0x80
+BPF_EXIT	0x90
+BPF_JLT		0xa0
+BPF_JLE		0xb0
+BPF_JSLT	0xc0
+BPF_JSLE	0xd0
diff --git a/xlat/bpf_prog_flags.h b/xlat/bpf_prog_flags.h
index 076f374..9443631 100644
--- a/xlat/bpf_prog_flags.h
+++ b/xlat/bpf_prog_flags.h
@@ -1,13 +1,23 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_F_STRICT_ALIGNMENT) || (defined(HAVE_DECL_BPF_F_STRICT_ALIGNMENT) && HAVE_DECL_BPF_F_STRICT_ALIGNMENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_STRICT_ALIGNMENT) == (1), "BPF_F_STRICT_ALIGNMENT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_F_STRICT_ALIGNMENT 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat bpf_prog_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat bpf_prog_flags in mpers mode
+
+# else
 
 static
 const struct xlat bpf_prog_flags[] = {
@@ -15,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_prog_types.h b/xlat/bpf_prog_types.h
index 63e0dae..efaae9e 100644
--- a/xlat/bpf_prog_types.h
+++ b/xlat/bpf_prog_types.h
@@ -1,78 +1,166 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_prog_types.in; do not edit. */
-#if !(defined(BPF_PROG_TYPE_UNSPEC) || (defined(HAVE_DECL_BPF_PROG_TYPE_UNSPEC) && HAVE_DECL_BPF_PROG_TYPE_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_PROG_TYPE_UNSPEC) || (defined(HAVE_DECL_BPF_PROG_TYPE_UNSPEC) && HAVE_DECL_BPF_PROG_TYPE_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_UNSPEC) == (0), "BPF_PROG_TYPE_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_UNSPEC 0
 #endif
-#if !(defined(BPF_PROG_TYPE_SOCKET_FILTER) || (defined(HAVE_DECL_BPF_PROG_TYPE_SOCKET_FILTER) && HAVE_DECL_BPF_PROG_TYPE_SOCKET_FILTER))
+#if defined(BPF_PROG_TYPE_SOCKET_FILTER) || (defined(HAVE_DECL_BPF_PROG_TYPE_SOCKET_FILTER) && HAVE_DECL_BPF_PROG_TYPE_SOCKET_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_SOCKET_FILTER) == (1), "BPF_PROG_TYPE_SOCKET_FILTER != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_SOCKET_FILTER 1
 #endif
-#if !(defined(BPF_PROG_TYPE_KPROBE) || (defined(HAVE_DECL_BPF_PROG_TYPE_KPROBE) && HAVE_DECL_BPF_PROG_TYPE_KPROBE))
+#if defined(BPF_PROG_TYPE_KPROBE) || (defined(HAVE_DECL_BPF_PROG_TYPE_KPROBE) && HAVE_DECL_BPF_PROG_TYPE_KPROBE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_KPROBE) == (2), "BPF_PROG_TYPE_KPROBE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_KPROBE 2
 #endif
-#if !(defined(BPF_PROG_TYPE_SCHED_CLS) || (defined(HAVE_DECL_BPF_PROG_TYPE_SCHED_CLS) && HAVE_DECL_BPF_PROG_TYPE_SCHED_CLS))
+#if defined(BPF_PROG_TYPE_SCHED_CLS) || (defined(HAVE_DECL_BPF_PROG_TYPE_SCHED_CLS) && HAVE_DECL_BPF_PROG_TYPE_SCHED_CLS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_SCHED_CLS) == (3), "BPF_PROG_TYPE_SCHED_CLS != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_SCHED_CLS 3
 #endif
-#if !(defined(BPF_PROG_TYPE_SCHED_ACT) || (defined(HAVE_DECL_BPF_PROG_TYPE_SCHED_ACT) && HAVE_DECL_BPF_PROG_TYPE_SCHED_ACT))
+#if defined(BPF_PROG_TYPE_SCHED_ACT) || (defined(HAVE_DECL_BPF_PROG_TYPE_SCHED_ACT) && HAVE_DECL_BPF_PROG_TYPE_SCHED_ACT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_SCHED_ACT) == (4), "BPF_PROG_TYPE_SCHED_ACT != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_SCHED_ACT 4
 #endif
-#if !(defined(BPF_PROG_TYPE_TRACEPOINT) || (defined(HAVE_DECL_BPF_PROG_TYPE_TRACEPOINT) && HAVE_DECL_BPF_PROG_TYPE_TRACEPOINT))
+#if defined(BPF_PROG_TYPE_TRACEPOINT) || (defined(HAVE_DECL_BPF_PROG_TYPE_TRACEPOINT) && HAVE_DECL_BPF_PROG_TYPE_TRACEPOINT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_TRACEPOINT) == (5), "BPF_PROG_TYPE_TRACEPOINT != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_TRACEPOINT 5
 #endif
-#if !(defined(BPF_PROG_TYPE_XDP) || (defined(HAVE_DECL_BPF_PROG_TYPE_XDP) && HAVE_DECL_BPF_PROG_TYPE_XDP))
+#if defined(BPF_PROG_TYPE_XDP) || (defined(HAVE_DECL_BPF_PROG_TYPE_XDP) && HAVE_DECL_BPF_PROG_TYPE_XDP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_XDP) == (6), "BPF_PROG_TYPE_XDP != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_XDP 6
 #endif
-#if !(defined(BPF_PROG_TYPE_PERF_EVENT) || (defined(HAVE_DECL_BPF_PROG_TYPE_PERF_EVENT) && HAVE_DECL_BPF_PROG_TYPE_PERF_EVENT))
+#if defined(BPF_PROG_TYPE_PERF_EVENT) || (defined(HAVE_DECL_BPF_PROG_TYPE_PERF_EVENT) && HAVE_DECL_BPF_PROG_TYPE_PERF_EVENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_PERF_EVENT) == (7), "BPF_PROG_TYPE_PERF_EVENT != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_PERF_EVENT 7
 #endif
-#if !(defined(BPF_PROG_TYPE_CGROUP_SKB) || (defined(HAVE_DECL_BPF_PROG_TYPE_CGROUP_SKB) && HAVE_DECL_BPF_PROG_TYPE_CGROUP_SKB))
+#if defined(BPF_PROG_TYPE_CGROUP_SKB) || (defined(HAVE_DECL_BPF_PROG_TYPE_CGROUP_SKB) && HAVE_DECL_BPF_PROG_TYPE_CGROUP_SKB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_CGROUP_SKB) == (8), "BPF_PROG_TYPE_CGROUP_SKB != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_CGROUP_SKB 8
 #endif
-#if !(defined(BPF_PROG_TYPE_CGROUP_SOCK) || (defined(HAVE_DECL_BPF_PROG_TYPE_CGROUP_SOCK) && HAVE_DECL_BPF_PROG_TYPE_CGROUP_SOCK))
+#if defined(BPF_PROG_TYPE_CGROUP_SOCK) || (defined(HAVE_DECL_BPF_PROG_TYPE_CGROUP_SOCK) && HAVE_DECL_BPF_PROG_TYPE_CGROUP_SOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_CGROUP_SOCK) == (9), "BPF_PROG_TYPE_CGROUP_SOCK != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_CGROUP_SOCK 9
 #endif
-#if !(defined(BPF_PROG_TYPE_LWT_IN) || (defined(HAVE_DECL_BPF_PROG_TYPE_LWT_IN) && HAVE_DECL_BPF_PROG_TYPE_LWT_IN))
+#if defined(BPF_PROG_TYPE_LWT_IN) || (defined(HAVE_DECL_BPF_PROG_TYPE_LWT_IN) && HAVE_DECL_BPF_PROG_TYPE_LWT_IN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_LWT_IN) == (10), "BPF_PROG_TYPE_LWT_IN != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_LWT_IN 10
 #endif
-#if !(defined(BPF_PROG_TYPE_LWT_OUT) || (defined(HAVE_DECL_BPF_PROG_TYPE_LWT_OUT) && HAVE_DECL_BPF_PROG_TYPE_LWT_OUT))
+#if defined(BPF_PROG_TYPE_LWT_OUT) || (defined(HAVE_DECL_BPF_PROG_TYPE_LWT_OUT) && HAVE_DECL_BPF_PROG_TYPE_LWT_OUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_LWT_OUT) == (11), "BPF_PROG_TYPE_LWT_OUT != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_LWT_OUT 11
 #endif
-#if !(defined(BPF_PROG_TYPE_LWT_XMIT) || (defined(HAVE_DECL_BPF_PROG_TYPE_LWT_XMIT) && HAVE_DECL_BPF_PROG_TYPE_LWT_XMIT))
+#if defined(BPF_PROG_TYPE_LWT_XMIT) || (defined(HAVE_DECL_BPF_PROG_TYPE_LWT_XMIT) && HAVE_DECL_BPF_PROG_TYPE_LWT_XMIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_LWT_XMIT) == (12), "BPF_PROG_TYPE_LWT_XMIT != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(BPF_PROG_TYPE_SOCK_OPS) || (defined(HAVE_DECL_BPF_PROG_TYPE_SOCK_OPS) && HAVE_DECL_BPF_PROG_TYPE_SOCK_OPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_SOCK_OPS) == (13), "BPF_PROG_TYPE_SOCK_OPS != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_SOCK_OPS 13
 #endif
-#if !(defined(BPF_PROG_TYPE_SK_SKB) || (defined(HAVE_DECL_BPF_PROG_TYPE_SK_SKB) && HAVE_DECL_BPF_PROG_TYPE_SK_SKB))
+#if defined(BPF_PROG_TYPE_SK_SKB) || (defined(HAVE_DECL_BPF_PROG_TYPE_SK_SKB) && HAVE_DECL_BPF_PROG_TYPE_SK_SKB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_SK_SKB) == (14), "BPF_PROG_TYPE_SK_SKB != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_SK_SKB 14
 #endif
-#if !(defined(BPF_PROG_TYPE_CGROUP_DEVICE) || (defined(HAVE_DECL_BPF_PROG_TYPE_CGROUP_DEVICE) && HAVE_DECL_BPF_PROG_TYPE_CGROUP_DEVICE))
+#if defined(BPF_PROG_TYPE_CGROUP_DEVICE) || (defined(HAVE_DECL_BPF_PROG_TYPE_CGROUP_DEVICE) && HAVE_DECL_BPF_PROG_TYPE_CGROUP_DEVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_CGROUP_DEVICE) == (15), "BPF_PROG_TYPE_CGROUP_DEVICE != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BPF_PROG_TYPE_CGROUP_DEVICE 15
 #endif
-
-#ifdef IN_MPERS
-
-# error static const struct xlat bpf_prog_types in mpers mode
-
+#if defined(BPF_PROG_TYPE_SK_MSG) || (defined(HAVE_DECL_BPF_PROG_TYPE_SK_MSG) && HAVE_DECL_BPF_PROG_TYPE_SK_MSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_SK_MSG) == (16), "BPF_PROG_TYPE_SK_MSG != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_PROG_TYPE_SK_MSG 16
+#endif
+#if defined(BPF_PROG_TYPE_RAW_TRACEPOINT) || (defined(HAVE_DECL_BPF_PROG_TYPE_RAW_TRACEPOINT) && HAVE_DECL_BPF_PROG_TYPE_RAW_TRACEPOINT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_PROG_TYPE_RAW_TRACEPOINT) == (17), "BPF_PROG_TYPE_RAW_TRACEPOINT != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_PROG_TYPE_RAW_TRACEPOINT 17
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_prog_types in mpers mode
+
+# else
 
 static
 const struct xlat bpf_prog_types[] = {
- XLAT(BPF_PROG_TYPE_UNSPEC),
- XLAT(BPF_PROG_TYPE_SOCKET_FILTER),
- XLAT(BPF_PROG_TYPE_KPROBE),
- XLAT(BPF_PROG_TYPE_SCHED_CLS),
- XLAT(BPF_PROG_TYPE_SCHED_ACT),
- XLAT(BPF_PROG_TYPE_TRACEPOINT),
- XLAT(BPF_PROG_TYPE_XDP),
- XLAT(BPF_PROG_TYPE_PERF_EVENT),
- XLAT(BPF_PROG_TYPE_CGROUP_SKB),
- XLAT(BPF_PROG_TYPE_CGROUP_SOCK),
- 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(BPF_PROG_TYPE_SK_SKB),
- XLAT(BPF_PROG_TYPE_CGROUP_DEVICE),
+ [BPF_PROG_TYPE_UNSPEC] = XLAT(BPF_PROG_TYPE_UNSPEC),
+ [BPF_PROG_TYPE_SOCKET_FILTER] = XLAT(BPF_PROG_TYPE_SOCKET_FILTER),
+ [BPF_PROG_TYPE_KPROBE] = XLAT(BPF_PROG_TYPE_KPROBE),
+ [BPF_PROG_TYPE_SCHED_CLS] = XLAT(BPF_PROG_TYPE_SCHED_CLS),
+ [BPF_PROG_TYPE_SCHED_ACT] = XLAT(BPF_PROG_TYPE_SCHED_ACT),
+ [BPF_PROG_TYPE_TRACEPOINT] = XLAT(BPF_PROG_TYPE_TRACEPOINT),
+ [BPF_PROG_TYPE_XDP] = XLAT(BPF_PROG_TYPE_XDP),
+ [BPF_PROG_TYPE_PERF_EVENT] = XLAT(BPF_PROG_TYPE_PERF_EVENT),
+ [BPF_PROG_TYPE_CGROUP_SKB] = XLAT(BPF_PROG_TYPE_CGROUP_SKB),
+ [BPF_PROG_TYPE_CGROUP_SOCK] = XLAT(BPF_PROG_TYPE_CGROUP_SOCK),
+ [BPF_PROG_TYPE_LWT_IN] = XLAT(BPF_PROG_TYPE_LWT_IN),
+ [BPF_PROG_TYPE_LWT_OUT] = XLAT(BPF_PROG_TYPE_LWT_OUT),
+ [BPF_PROG_TYPE_LWT_XMIT] = XLAT(BPF_PROG_TYPE_LWT_XMIT),
+ [BPF_PROG_TYPE_SOCK_OPS] = XLAT(BPF_PROG_TYPE_SOCK_OPS),
+ [BPF_PROG_TYPE_SK_SKB] = XLAT(BPF_PROG_TYPE_SK_SKB),
+ [BPF_PROG_TYPE_CGROUP_DEVICE] = XLAT(BPF_PROG_TYPE_CGROUP_DEVICE),
+ [BPF_PROG_TYPE_SK_MSG] = XLAT(BPF_PROG_TYPE_SK_MSG),
+ [BPF_PROG_TYPE_RAW_TRACEPOINT] = XLAT(BPF_PROG_TYPE_RAW_TRACEPOINT),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_prog_types.in b/xlat/bpf_prog_types.in
index 8038c9e..7fee390 100644
--- a/xlat/bpf_prog_types.in
+++ b/xlat/bpf_prog_types.in
@@ -1,3 +1,4 @@
+#value_indexed
 BPF_PROG_TYPE_UNSPEC 0
 BPF_PROG_TYPE_SOCKET_FILTER 1
 BPF_PROG_TYPE_KPROBE 2
@@ -14,3 +15,5 @@
 BPF_PROG_TYPE_SOCK_OPS 13
 BPF_PROG_TYPE_SK_SKB 14
 BPF_PROG_TYPE_CGROUP_DEVICE 15
+BPF_PROG_TYPE_SK_MSG 16
+BPF_PROG_TYPE_RAW_TRACEPOINT 17
diff --git a/xlat/bpf_query_flags.h b/xlat/bpf_query_flags.h
new file mode 100644
index 0000000..38f84b4
--- /dev/null
+++ b/xlat/bpf_query_flags.h
@@ -0,0 +1,30 @@
+/* Generated by ./xlat/gen.sh from ./xlat/bpf_query_flags.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_F_QUERY_EFFECTIVE) || (defined(HAVE_DECL_BPF_F_QUERY_EFFECTIVE) && HAVE_DECL_BPF_F_QUERY_EFFECTIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_F_QUERY_EFFECTIVE) == ((1U << 0)), "BPF_F_QUERY_EFFECTIVE != (1U << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_F_QUERY_EFFECTIVE (1U << 0)
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_query_flags in mpers mode
+
+# else
+
+static
+const struct xlat bpf_query_flags[] = {
+ XLAT(BPF_F_QUERY_EFFECTIVE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_query_flags.in b/xlat/bpf_query_flags.in
new file mode 100644
index 0000000..b380ac1
--- /dev/null
+++ b/xlat/bpf_query_flags.in
@@ -0,0 +1 @@
+BPF_F_QUERY_EFFECTIVE	(1U << 0)
diff --git a/xlat/bpf_rval.h b/xlat/bpf_rval.h
index 8f84f03..85a11c1 100644
--- a/xlat/bpf_rval.h
+++ b/xlat/bpf_rval.h
@@ -1,23 +1,46 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_rval.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bpf_rval in mpers mode
-
+#if defined(BPF_K) || (defined(HAVE_DECL_BPF_K) && HAVE_DECL_BPF_K)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_K) == (0x00), "BPF_K != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_K 0x00
+#endif
+#if defined(BPF_X) || (defined(HAVE_DECL_BPF_X) && HAVE_DECL_BPF_X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_X) == (0x08), "BPF_X != 0x08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_X 0x08
+#endif
+#if defined(BPF_A) || (defined(HAVE_DECL_BPF_A) && HAVE_DECL_BPF_A)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_A) == (0x10), "BPF_A != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_A 0x10
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_rval in mpers mode
+
+# else
 
 static
 const struct xlat bpf_rval[] = {
-#if defined(BPF_K) || (defined(HAVE_DECL_BPF_K) && HAVE_DECL_BPF_K)
-  XLAT(BPF_K),
-#endif
-#if defined(BPF_X) || (defined(HAVE_DECL_BPF_X) && HAVE_DECL_BPF_X)
-  XLAT(BPF_X),
-#endif
-#if defined(BPF_A) || (defined(HAVE_DECL_BPF_A) && HAVE_DECL_BPF_A)
-  XLAT(BPF_A),
-#endif
+ XLAT(BPF_K),
+ XLAT(BPF_X),
+ XLAT(BPF_A),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_rval.in b/xlat/bpf_rval.in
index 44e137e..37073bd 100644
--- a/xlat/bpf_rval.in
+++ b/xlat/bpf_rval.in
@@ -1,3 +1,3 @@
-BPF_K
-BPF_X
-BPF_A
+BPF_K	0x00
+BPF_X	0x08
+BPF_A	0x10
diff --git a/xlat/bpf_size.h b/xlat/bpf_size.h
index f07bc9c..51aa539 100644
--- a/xlat/bpf_size.h
+++ b/xlat/bpf_size.h
@@ -1,26 +1,54 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_size.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bpf_size in mpers mode
-
+#if defined(BPF_W) || (defined(HAVE_DECL_BPF_W) && HAVE_DECL_BPF_W)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_W) == (0x00), "BPF_W != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_W 0x00
+#endif
+#if defined(BPF_H) || (defined(HAVE_DECL_BPF_H) && HAVE_DECL_BPF_H)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_H) == (0x08), "BPF_H != 0x08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_H 0x08
+#endif
+#if defined(BPF_B) || (defined(HAVE_DECL_BPF_B) && HAVE_DECL_BPF_B)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_B) == (0x10), "BPF_B != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_B 0x10
+#endif
+#if defined(BPF_DW) || (defined(HAVE_DECL_BPF_DW) && HAVE_DECL_BPF_DW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_DW) == (0x18), "BPF_DW != 0x18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_DW 0x18
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_size in mpers mode
+
+# else
 
 static
 const struct xlat bpf_size[] = {
-#if defined(BPF_W) || (defined(HAVE_DECL_BPF_W) && HAVE_DECL_BPF_W)
-  XLAT(BPF_W),
-#endif
-#if defined(BPF_H) || (defined(HAVE_DECL_BPF_H) && HAVE_DECL_BPF_H)
-  XLAT(BPF_H),
-#endif
-#if defined(BPF_B) || (defined(HAVE_DECL_BPF_B) && HAVE_DECL_BPF_B)
-  XLAT(BPF_B),
-#endif
-#if defined(BPF_DW) || (defined(HAVE_DECL_BPF_DW) && HAVE_DECL_BPF_DW)
-  XLAT(BPF_DW),
-#endif
+ XLAT(BPF_W),
+ XLAT(BPF_H),
+ XLAT(BPF_B),
+ XLAT(BPF_DW),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_size.in b/xlat/bpf_size.in
index 5e0a508..104428f 100644
--- a/xlat/bpf_size.in
+++ b/xlat/bpf_size.in
@@ -1,4 +1,4 @@
-BPF_W
-BPF_H
-BPF_B
-BPF_DW
+BPF_W	0x00
+BPF_H	0x08
+BPF_B	0x10
+BPF_DW	0x18
diff --git a/xlat/bpf_src.h b/xlat/bpf_src.h
index c063e75..eee32dd 100644
--- a/xlat/bpf_src.h
+++ b/xlat/bpf_src.h
@@ -1,20 +1,38 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bpf_src.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bpf_src in mpers mode
-
+#if defined(BPF_K) || (defined(HAVE_DECL_BPF_K) && HAVE_DECL_BPF_K)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_K) == (0x00), "BPF_K != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BPF_K 0x00
+#endif
+#if defined(BPF_X) || (defined(HAVE_DECL_BPF_X) && HAVE_DECL_BPF_X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_X) == (0x08), "BPF_X != 0x08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_X 0x08
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bpf_src in mpers mode
+
+# else
 
 static
 const struct xlat bpf_src[] = {
-#if defined(BPF_K) || (defined(HAVE_DECL_BPF_K) && HAVE_DECL_BPF_K)
-  XLAT(BPF_K),
-#endif
-#if defined(BPF_X) || (defined(HAVE_DECL_BPF_X) && HAVE_DECL_BPF_X)
-  XLAT(BPF_X),
-#endif
+ XLAT(BPF_K),
+ XLAT(BPF_X),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bpf_src.in b/xlat/bpf_src.in
index ede6abb..4623717 100644
--- a/xlat/bpf_src.in
+++ b/xlat/bpf_src.in
@@ -1,2 +1,2 @@
-BPF_K
-BPF_X
+BPF_K	0x00
+BPF_X	0x08
diff --git a/xlat/bsg_flags.h b/xlat/bsg_flags.h
index c5f28d9..fc0f083 100644
--- a/xlat/bsg_flags.h
+++ b/xlat/bsg_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bsg_flags.in; do not edit. */
-#if !(defined(BSG_FLAG_Q_AT_TAIL) || (defined(HAVE_DECL_BSG_FLAG_Q_AT_TAIL) && HAVE_DECL_BSG_FLAG_Q_AT_TAIL))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BSG_FLAG_Q_AT_TAIL) || (defined(HAVE_DECL_BSG_FLAG_Q_AT_TAIL) && HAVE_DECL_BSG_FLAG_Q_AT_TAIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BSG_FLAG_Q_AT_TAIL) == (0x10), "BSG_FLAG_Q_AT_TAIL != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BSG_FLAG_Q_AT_TAIL 0x10
 #endif
-#if !(defined(BSG_FLAG_Q_AT_HEAD) || (defined(HAVE_DECL_BSG_FLAG_Q_AT_HEAD) && HAVE_DECL_BSG_FLAG_Q_AT_HEAD))
+#if defined(BSG_FLAG_Q_AT_HEAD) || (defined(HAVE_DECL_BSG_FLAG_Q_AT_HEAD) && HAVE_DECL_BSG_FLAG_Q_AT_HEAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BSG_FLAG_Q_AT_HEAD) == (0x20), "BSG_FLAG_Q_AT_HEAD != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BSG_FLAG_Q_AT_HEAD 0x20
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat bsg_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat bsg_flags in mpers mode
+
+# else
 
 static
 const struct xlat bsg_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bsg_protocol.h b/xlat/bsg_protocol.h
index 541085d..fba6c1e 100644
--- a/xlat/bsg_protocol.h
+++ b/xlat/bsg_protocol.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bsg_protocol.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bsg_protocol in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bsg_protocol in mpers mode
+
+# else
 
 static
 const struct xlat bsg_protocol[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bsg_subprotocol.h b/xlat/bsg_subprotocol.h
index 8073213..20752c4 100644
--- a/xlat/bsg_subprotocol.h
+++ b/xlat/bsg_subprotocol.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bsg_subprotocol.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bsg_subprotocol in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bsg_subprotocol in mpers mode
+
+# else
 
 static
 const struct xlat bsg_subprotocol[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bt_protocols.h b/xlat/bt_protocols.h
index 7b0e164..bd2db01 100644
--- a/xlat/bt_protocols.h
+++ b/xlat/bt_protocols.h
@@ -1,38 +1,86 @@
 /* Generated by ./xlat/gen.sh from ./xlat/bt_protocols.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat bt_protocols in mpers mode
-
+#if defined(BTPROTO_L2CAP) || (defined(HAVE_DECL_BTPROTO_L2CAP) && HAVE_DECL_BTPROTO_L2CAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTPROTO_L2CAP) == (0), "BTPROTO_L2CAP != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define BTPROTO_L2CAP 0
+#endif
+#if defined(BTPROTO_HCI) || (defined(HAVE_DECL_BTPROTO_HCI) && HAVE_DECL_BTPROTO_HCI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTPROTO_HCI) == (1), "BTPROTO_HCI != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BTPROTO_HCI 1
+#endif
+#if defined(BTPROTO_SCO) || (defined(HAVE_DECL_BTPROTO_SCO) && HAVE_DECL_BTPROTO_SCO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTPROTO_SCO) == (2), "BTPROTO_SCO != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BTPROTO_SCO 2
+#endif
+#if defined(BTPROTO_RFCOMM) || (defined(HAVE_DECL_BTPROTO_RFCOMM) && HAVE_DECL_BTPROTO_RFCOMM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTPROTO_RFCOMM) == (3), "BTPROTO_RFCOMM != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BTPROTO_RFCOMM 3
+#endif
+#if defined(BTPROTO_BNEP) || (defined(HAVE_DECL_BTPROTO_BNEP) && HAVE_DECL_BTPROTO_BNEP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTPROTO_BNEP) == (4), "BTPROTO_BNEP != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BTPROTO_BNEP 4
+#endif
+#if defined(BTPROTO_CMTP) || (defined(HAVE_DECL_BTPROTO_CMTP) && HAVE_DECL_BTPROTO_CMTP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTPROTO_CMTP) == (5), "BTPROTO_CMTP != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BTPROTO_CMTP 5
+#endif
+#if defined(BTPROTO_HIDP) || (defined(HAVE_DECL_BTPROTO_HIDP) && HAVE_DECL_BTPROTO_HIDP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTPROTO_HIDP) == (6), "BTPROTO_HIDP != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BTPROTO_HIDP 6
+#endif
+#if defined(BTPROTO_AVDTP) || (defined(HAVE_DECL_BTPROTO_AVDTP) && HAVE_DECL_BTPROTO_AVDTP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTPROTO_AVDTP) == (7), "BTPROTO_AVDTP != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BTPROTO_AVDTP 7
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat bt_protocols in mpers mode
+
+# else
 
 static
 const struct xlat bt_protocols[] = {
-#if defined(BTPROTO_L2CAP) || (defined(HAVE_DECL_BTPROTO_L2CAP) && HAVE_DECL_BTPROTO_L2CAP)
-  XLAT(BTPROTO_L2CAP),
-#endif
-#if defined(BTPROTO_HCI) || (defined(HAVE_DECL_BTPROTO_HCI) && HAVE_DECL_BTPROTO_HCI)
-  XLAT(BTPROTO_HCI),
-#endif
-#if defined(BTPROTO_SCO) || (defined(HAVE_DECL_BTPROTO_SCO) && HAVE_DECL_BTPROTO_SCO)
-  XLAT(BTPROTO_SCO),
-#endif
-#if defined(BTPROTO_RFCOMM) || (defined(HAVE_DECL_BTPROTO_RFCOMM) && HAVE_DECL_BTPROTO_RFCOMM)
-  XLAT(BTPROTO_RFCOMM),
-#endif
-#if defined(BTPROTO_BNEP) || (defined(HAVE_DECL_BTPROTO_BNEP) && HAVE_DECL_BTPROTO_BNEP)
-  XLAT(BTPROTO_BNEP),
-#endif
-#if defined(BTPROTO_CMTP) || (defined(HAVE_DECL_BTPROTO_CMTP) && HAVE_DECL_BTPROTO_CMTP)
-  XLAT(BTPROTO_CMTP),
-#endif
-#if defined(BTPROTO_HIDP) || (defined(HAVE_DECL_BTPROTO_HIDP) && HAVE_DECL_BTPROTO_HIDP)
-  XLAT(BTPROTO_HIDP),
-#endif
-#if defined(BTPROTO_AVDTP) || (defined(HAVE_DECL_BTPROTO_AVDTP) && HAVE_DECL_BTPROTO_AVDTP)
-  XLAT(BTPROTO_AVDTP),
-#endif
+ [BTPROTO_L2CAP] = XLAT(BTPROTO_L2CAP),
+ [BTPROTO_HCI] = XLAT(BTPROTO_HCI),
+ [BTPROTO_SCO] = XLAT(BTPROTO_SCO),
+ [BTPROTO_RFCOMM] = XLAT(BTPROTO_RFCOMM),
+ [BTPROTO_BNEP] = XLAT(BTPROTO_BNEP),
+ [BTPROTO_CMTP] = XLAT(BTPROTO_CMTP),
+ [BTPROTO_HIDP] = XLAT(BTPROTO_HIDP),
+ [BTPROTO_AVDTP] = XLAT(BTPROTO_AVDTP),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/bt_protocols.in b/xlat/bt_protocols.in
index 1f7f348..a0ad056 100644
--- a/xlat/bt_protocols.in
+++ b/xlat/bt_protocols.in
@@ -1,8 +1,9 @@
-BTPROTO_L2CAP
-BTPROTO_HCI
-BTPROTO_SCO
-BTPROTO_RFCOMM
-BTPROTO_BNEP
-BTPROTO_CMTP
-BTPROTO_HIDP
-BTPROTO_AVDTP
+#value_indexed
+BTPROTO_L2CAP	0
+BTPROTO_HCI	1
+BTPROTO_SCO	2
+BTPROTO_RFCOMM	3
+BTPROTO_BNEP	4
+BTPROTO_CMTP	5
+BTPROTO_HIDP	6
+BTPROTO_AVDTP	7
diff --git a/xlat/btrfs_balance_args.h b/xlat/btrfs_balance_args.h
index d1f1091..11eced6 100644
--- a/xlat/btrfs_balance_args.h
+++ b/xlat/btrfs_balance_args.h
@@ -1,47 +1,97 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_balance_args.in; do not edit. */
-#if !(defined(BTRFS_BALANCE_ARGS_PROFILES) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_PROFILES) && HAVE_DECL_BTRFS_BALANCE_ARGS_PROFILES))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_BALANCE_ARGS_PROFILES) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_PROFILES) && HAVE_DECL_BTRFS_BALANCE_ARGS_PROFILES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_PROFILES) == ((1ULL << 0)), "BTRFS_BALANCE_ARGS_PROFILES != (1ULL << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_PROFILES (1ULL << 0)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_USAGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE))
+#if defined(BTRFS_BALANCE_ARGS_USAGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_USAGE) == ((1ULL << 1)), "BTRFS_BALANCE_ARGS_USAGE != (1ULL << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_USAGE (1ULL << 1)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_DEVID) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_DEVID) && HAVE_DECL_BTRFS_BALANCE_ARGS_DEVID))
+#if defined(BTRFS_BALANCE_ARGS_DEVID) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_DEVID) && HAVE_DECL_BTRFS_BALANCE_ARGS_DEVID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_DEVID) == ((1ULL << 2)), "BTRFS_BALANCE_ARGS_DEVID != (1ULL << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_DEVID (1ULL << 2)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_DRANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_DRANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_DRANGE))
+#if defined(BTRFS_BALANCE_ARGS_DRANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_DRANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_DRANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_DRANGE) == ((1ULL << 3)), "BTRFS_BALANCE_ARGS_DRANGE != (1ULL << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_DRANGE (1ULL << 3)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_VRANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_VRANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_VRANGE))
+#if defined(BTRFS_BALANCE_ARGS_VRANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_VRANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_VRANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_VRANGE) == ((1ULL << 4)), "BTRFS_BALANCE_ARGS_VRANGE != (1ULL << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_VRANGE (1ULL << 4)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_LIMIT) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT) && HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT))
+#if defined(BTRFS_BALANCE_ARGS_LIMIT) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT) && HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_LIMIT) == ((1ULL << 5)), "BTRFS_BALANCE_ARGS_LIMIT != (1ULL << 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_LIMIT (1ULL << 5)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_LIMIT_RANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT_RANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT_RANGE))
+#if defined(BTRFS_BALANCE_ARGS_LIMIT_RANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT_RANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_LIMIT_RANGE) == ((1ULL << 6)), "BTRFS_BALANCE_ARGS_LIMIT_RANGE != (1ULL << 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_LIMIT_RANGE (1ULL << 6)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_STRIPES_RANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_STRIPES_RANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_STRIPES_RANGE))
+#if defined(BTRFS_BALANCE_ARGS_STRIPES_RANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_STRIPES_RANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_STRIPES_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_STRIPES_RANGE) == ((1ULL << 7)), "BTRFS_BALANCE_ARGS_STRIPES_RANGE != (1ULL << 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_STRIPES_RANGE (1ULL << 7)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_CONVERT) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_CONVERT) && HAVE_DECL_BTRFS_BALANCE_ARGS_CONVERT))
+#if defined(BTRFS_BALANCE_ARGS_CONVERT) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_CONVERT) && HAVE_DECL_BTRFS_BALANCE_ARGS_CONVERT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_CONVERT) == ((1ULL << 8)), "BTRFS_BALANCE_ARGS_CONVERT != (1ULL << 8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_CONVERT (1ULL << 8)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_SOFT) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_SOFT) && HAVE_DECL_BTRFS_BALANCE_ARGS_SOFT))
+#if defined(BTRFS_BALANCE_ARGS_SOFT) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_SOFT) && HAVE_DECL_BTRFS_BALANCE_ARGS_SOFT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_SOFT) == ((1ULL << 9)), "BTRFS_BALANCE_ARGS_SOFT != (1ULL << 9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_SOFT (1ULL << 9)
 #endif
-#if !(defined(BTRFS_BALANCE_ARGS_USAGE_RANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE_RANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE_RANGE))
+#if defined(BTRFS_BALANCE_ARGS_USAGE_RANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE_RANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ARGS_USAGE_RANGE) == ((1ULL << 10)), "BTRFS_BALANCE_ARGS_USAGE_RANGE != (1ULL << 10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ARGS_USAGE_RANGE (1ULL << 10)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_balance_args[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_balance_args[] = {
  XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_PROFILES),
  XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_USAGE),
@@ -57,4 +107,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_balance_ctl_cmds.h b/xlat/btrfs_balance_ctl_cmds.h
index 9bdc820..a7c0040 100644
--- a/xlat/btrfs_balance_ctl_cmds.h
+++ b/xlat/btrfs_balance_ctl_cmds.h
@@ -1,24 +1,40 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_balance_ctl_cmds.in; do not edit. */
-#if !(defined(BTRFS_BALANCE_CTL_PAUSE) || (defined(HAVE_DECL_BTRFS_BALANCE_CTL_PAUSE) && HAVE_DECL_BTRFS_BALANCE_CTL_PAUSE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_BALANCE_CTL_PAUSE) || (defined(HAVE_DECL_BTRFS_BALANCE_CTL_PAUSE) && HAVE_DECL_BTRFS_BALANCE_CTL_PAUSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_CTL_PAUSE) == (1), "BTRFS_BALANCE_CTL_PAUSE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_CTL_PAUSE 1
 #endif
-#if !(defined(BTRFS_BALANCE_CTL_CANCEL) || (defined(HAVE_DECL_BTRFS_BALANCE_CTL_CANCEL) && HAVE_DECL_BTRFS_BALANCE_CTL_CANCEL))
+#if defined(BTRFS_BALANCE_CTL_CANCEL) || (defined(HAVE_DECL_BTRFS_BALANCE_CTL_CANCEL) && HAVE_DECL_BTRFS_BALANCE_CTL_CANCEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_CTL_CANCEL) == (2), "BTRFS_BALANCE_CTL_CANCEL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_CTL_CANCEL 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_balance_ctl_cmds[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_balance_ctl_cmds[] = {
  XLAT(BTRFS_BALANCE_CTL_PAUSE),
  XLAT(BTRFS_BALANCE_CTL_CANCEL),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_balance_flags.h b/xlat/btrfs_balance_flags.h
index c071b6e..8753755 100644
--- a/xlat/btrfs_balance_flags.h
+++ b/xlat/btrfs_balance_flags.h
@@ -1,29 +1,55 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_balance_flags.in; do not edit. */
-#if !(defined(BTRFS_BALANCE_DATA) || (defined(HAVE_DECL_BTRFS_BALANCE_DATA) && HAVE_DECL_BTRFS_BALANCE_DATA))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_BALANCE_DATA) || (defined(HAVE_DECL_BTRFS_BALANCE_DATA) && HAVE_DECL_BTRFS_BALANCE_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_DATA) == ((1ULL << 0)), "BTRFS_BALANCE_DATA != (1ULL << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_DATA (1ULL << 0)
 #endif
-#if !(defined(BTRFS_BALANCE_SYSTEM) || (defined(HAVE_DECL_BTRFS_BALANCE_SYSTEM) && HAVE_DECL_BTRFS_BALANCE_SYSTEM))
+#if defined(BTRFS_BALANCE_SYSTEM) || (defined(HAVE_DECL_BTRFS_BALANCE_SYSTEM) && HAVE_DECL_BTRFS_BALANCE_SYSTEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_SYSTEM) == ((1ULL << 1)), "BTRFS_BALANCE_SYSTEM != (1ULL << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_SYSTEM (1ULL << 1)
 #endif
-#if !(defined(BTRFS_BALANCE_METADATA) || (defined(HAVE_DECL_BTRFS_BALANCE_METADATA) && HAVE_DECL_BTRFS_BALANCE_METADATA))
+#if defined(BTRFS_BALANCE_METADATA) || (defined(HAVE_DECL_BTRFS_BALANCE_METADATA) && HAVE_DECL_BTRFS_BALANCE_METADATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_METADATA) == ((1ULL << 2)), "BTRFS_BALANCE_METADATA != (1ULL << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_METADATA (1ULL << 2)
 #endif
-#if !(defined(BTRFS_BALANCE_FORCE) || (defined(HAVE_DECL_BTRFS_BALANCE_FORCE) && HAVE_DECL_BTRFS_BALANCE_FORCE))
+#if defined(BTRFS_BALANCE_FORCE) || (defined(HAVE_DECL_BTRFS_BALANCE_FORCE) && HAVE_DECL_BTRFS_BALANCE_FORCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_FORCE) == ((1ULL << 3)), "BTRFS_BALANCE_FORCE != (1ULL << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_FORCE (1ULL << 3)
 #endif
-#if !(defined(BTRFS_BALANCE_RESUME) || (defined(HAVE_DECL_BTRFS_BALANCE_RESUME) && HAVE_DECL_BTRFS_BALANCE_RESUME))
+#if defined(BTRFS_BALANCE_RESUME) || (defined(HAVE_DECL_BTRFS_BALANCE_RESUME) && HAVE_DECL_BTRFS_BALANCE_RESUME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_RESUME) == ((1ULL << 4)), "BTRFS_BALANCE_RESUME != (1ULL << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_RESUME (1ULL << 4)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_balance_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_balance_flags[] = {
  XLAT_TYPE(uint64_t, BTRFS_BALANCE_DATA),
  XLAT_TYPE(uint64_t, BTRFS_BALANCE_SYSTEM),
@@ -33,4 +59,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_balance_state.h b/xlat/btrfs_balance_state.h
index 64c8511..1a14a03 100644
--- a/xlat/btrfs_balance_state.h
+++ b/xlat/btrfs_balance_state.h
@@ -1,23 +1,41 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_balance_state.in; do not edit. */
-#if !(defined(BTRFS_BALANCE_STATE_RUNNING) || (defined(HAVE_DECL_BTRFS_BALANCE_STATE_RUNNING) && HAVE_DECL_BTRFS_BALANCE_STATE_RUNNING))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_BALANCE_STATE_RUNNING) || (defined(HAVE_DECL_BTRFS_BALANCE_STATE_RUNNING) && HAVE_DECL_BTRFS_BALANCE_STATE_RUNNING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_STATE_RUNNING) == ((1ULL << 0)), "BTRFS_BALANCE_STATE_RUNNING != (1ULL << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_STATE_RUNNING (1ULL << 0)
 #endif
-#if !(defined(BTRFS_BALANCE_STATE_PAUSE_REQ) || (defined(HAVE_DECL_BTRFS_BALANCE_STATE_PAUSE_REQ) && HAVE_DECL_BTRFS_BALANCE_STATE_PAUSE_REQ))
+#if defined(BTRFS_BALANCE_STATE_PAUSE_REQ) || (defined(HAVE_DECL_BTRFS_BALANCE_STATE_PAUSE_REQ) && HAVE_DECL_BTRFS_BALANCE_STATE_PAUSE_REQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_STATE_PAUSE_REQ) == ((1ULL << 1)), "BTRFS_BALANCE_STATE_PAUSE_REQ != (1ULL << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_STATE_PAUSE_REQ (1ULL << 1)
 #endif
-#if !(defined(BTRFS_BALANCE_STATE_CANCEL_REQ) || (defined(HAVE_DECL_BTRFS_BALANCE_STATE_CANCEL_REQ) && HAVE_DECL_BTRFS_BALANCE_STATE_CANCEL_REQ))
+#if defined(BTRFS_BALANCE_STATE_CANCEL_REQ) || (defined(HAVE_DECL_BTRFS_BALANCE_STATE_CANCEL_REQ) && HAVE_DECL_BTRFS_BALANCE_STATE_CANCEL_REQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_STATE_CANCEL_REQ) == ((1ULL << 2)), "BTRFS_BALANCE_STATE_CANCEL_REQ != (1ULL << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_STATE_CANCEL_REQ (1ULL << 2)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_balance_state[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_balance_state[] = {
  XLAT(BTRFS_BALANCE_STATE_RUNNING),
  XLAT(BTRFS_BALANCE_STATE_PAUSE_REQ),
@@ -25,4 +43,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_compress_types.h b/xlat/btrfs_compress_types.h
index dd89c63..50fa15f 100644
--- a/xlat/btrfs_compress_types.h
+++ b/xlat/btrfs_compress_types.h
@@ -1,23 +1,41 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_compress_types.in; do not edit. */
-#if !(defined(BTRFS_COMPRESS_NONE) || (defined(HAVE_DECL_BTRFS_COMPRESS_NONE) && HAVE_DECL_BTRFS_COMPRESS_NONE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_COMPRESS_NONE) || (defined(HAVE_DECL_BTRFS_COMPRESS_NONE) && HAVE_DECL_BTRFS_COMPRESS_NONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_COMPRESS_NONE) == (0), "BTRFS_COMPRESS_NONE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_COMPRESS_NONE 0
 #endif
-#if !(defined(BTRFS_COMPRESS_ZLIB) || (defined(HAVE_DECL_BTRFS_COMPRESS_ZLIB) && HAVE_DECL_BTRFS_COMPRESS_ZLIB))
+#if defined(BTRFS_COMPRESS_ZLIB) || (defined(HAVE_DECL_BTRFS_COMPRESS_ZLIB) && HAVE_DECL_BTRFS_COMPRESS_ZLIB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_COMPRESS_ZLIB) == (1), "BTRFS_COMPRESS_ZLIB != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_COMPRESS_ZLIB 1
 #endif
-#if !(defined(BTRFS_COMPRESS_LZO) || (defined(HAVE_DECL_BTRFS_COMPRESS_LZO) && HAVE_DECL_BTRFS_COMPRESS_LZO))
+#if defined(BTRFS_COMPRESS_LZO) || (defined(HAVE_DECL_BTRFS_COMPRESS_LZO) && HAVE_DECL_BTRFS_COMPRESS_LZO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_COMPRESS_LZO) == (2), "BTRFS_COMPRESS_LZO != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_COMPRESS_LZO 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_compress_types[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_compress_types[] = {
  XLAT(BTRFS_COMPRESS_NONE),
  XLAT(BTRFS_COMPRESS_ZLIB),
@@ -25,4 +43,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_cont_reading_from_srcdev_mode.h b/xlat/btrfs_cont_reading_from_srcdev_mode.h
new file mode 100644
index 0000000..4904e93
--- /dev/null
+++ b/xlat/btrfs_cont_reading_from_srcdev_mode.h
@@ -0,0 +1,40 @@
+/* Generated by ./xlat/gen.sh from ./xlat/btrfs_cont_reading_from_srcdev_mode.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS) || (defined(HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS) && HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS) == (0), "BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS 0
+#endif
+#if defined(BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID) || (defined(HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID) && HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID) == (1), "BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID 1
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+extern const struct xlat btrfs_cont_reading_from_srcdev_mode[];
+
+# else
+
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+static
+#  endif
+const struct xlat btrfs_cont_reading_from_srcdev_mode[] = {
+ XLAT(BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS),
+ XLAT(BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_cont_reading_from_srcdev_mode.in b/xlat/btrfs_cont_reading_from_srcdev_mode.in
new file mode 100644
index 0000000..0a1decf
--- /dev/null
+++ b/xlat/btrfs_cont_reading_from_srcdev_mode.in
@@ -0,0 +1,2 @@
+BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS    0
+BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID     1
diff --git a/xlat/btrfs_defrag_flags.h b/xlat/btrfs_defrag_flags.h
index 2990b21..7fac3a4 100644
--- a/xlat/btrfs_defrag_flags.h
+++ b/xlat/btrfs_defrag_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_defrag_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_defrag_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_defrag_flags[] = {
 #if defined(BTRFS_DEFRAG_RANGE_COMPRESS) || (defined(HAVE_DECL_BTRFS_DEFRAG_RANGE_COMPRESS) && HAVE_DECL_BTRFS_DEFRAG_RANGE_COMPRESS)
   XLAT_TYPE(uint64_t, BTRFS_DEFRAG_RANGE_COMPRESS),
@@ -19,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_dev_replace_cmds.h b/xlat/btrfs_dev_replace_cmds.h
index 83bd044..f612ebd 100644
--- a/xlat/btrfs_dev_replace_cmds.h
+++ b/xlat/btrfs_dev_replace_cmds.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_dev_replace_cmds.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_dev_replace_cmds[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_dev_replace_cmds[] = {
 #if defined(BTRFS_IOCTL_DEV_REPLACE_CMD_START) || (defined(HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_CMD_START) && HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_CMD_START)
   XLAT_TYPE(uint64_t, BTRFS_IOCTL_DEV_REPLACE_CMD_START),
@@ -22,4 +28,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_dev_replace_results.h b/xlat/btrfs_dev_replace_results.h
index 62fe4f8..cf96f4f 100644
--- a/xlat/btrfs_dev_replace_results.h
+++ b/xlat/btrfs_dev_replace_results.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_dev_replace_results.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_dev_replace_results[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_dev_replace_results[] = {
 #if defined(BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR) || (defined(HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR) && HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR)
   XLAT_TYPE(uint64_t, BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR),
@@ -25,4 +31,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_dev_replace_state.h b/xlat/btrfs_dev_replace_state.h
index 7095c1a..de5cf7b 100644
--- a/xlat/btrfs_dev_replace_state.h
+++ b/xlat/btrfs_dev_replace_state.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_dev_replace_state.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_dev_replace_state[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_dev_replace_state[] = {
 #if defined(BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED) || (defined(HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED) && HAVE_DECL_BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED)
   XLAT_TYPE(uint64_t, BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED),
@@ -28,4 +34,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_dev_stats_flags.h b/xlat/btrfs_dev_stats_flags.h
index 7bfbb09..29793e5 100644
--- a/xlat/btrfs_dev_stats_flags.h
+++ b/xlat/btrfs_dev_stats_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_dev_stats_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_dev_stats_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_dev_stats_flags[] = {
 #if defined(BTRFS_DEV_STATS_RESET) || (defined(HAVE_DECL_BTRFS_DEV_STATS_RESET) && HAVE_DECL_BTRFS_DEV_STATS_RESET)
   XLAT_TYPE(uint64_t, BTRFS_DEV_STATS_RESET),
@@ -16,4 +22,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_dev_stats_values.h b/xlat/btrfs_dev_stats_values.h
index eaaeff0..0715071 100644
--- a/xlat/btrfs_dev_stats_values.h
+++ b/xlat/btrfs_dev_stats_values.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_dev_stats_values.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_dev_stats_values[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_dev_stats_values[] = {
  XLAT_TYPE(uint64_t, BTRFS_DEV_STAT_WRITE_ERRS),
  XLAT_TYPE(uint64_t, BTRFS_DEV_STAT_READ_ERRS),
@@ -18,4 +24,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_features_compat.h b/xlat/btrfs_features_compat.h
index d1e61d8..754dc9e 100644
--- a/xlat/btrfs_features_compat.h
+++ b/xlat/btrfs_features_compat.h
@@ -1,16 +1,24 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_features_compat.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_features_compat[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_features_compat[] = {
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_features_compat_ro.h b/xlat/btrfs_features_compat_ro.h
index 324324a..348782b 100644
--- a/xlat/btrfs_features_compat_ro.h
+++ b/xlat/btrfs_features_compat_ro.h
@@ -1,24 +1,40 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_features_compat_ro.in; do not edit. */
-#if !(defined(BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE) || (defined(HAVE_DECL_BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE) && HAVE_DECL_BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE) || (defined(HAVE_DECL_BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE) && HAVE_DECL_BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE) == ((1ULL << 0)), "BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE != (1ULL << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE (1ULL << 0)
 #endif
-#if !(defined(BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID) || (defined(HAVE_DECL_BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID) && HAVE_DECL_BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID))
+#if defined(BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID) || (defined(HAVE_DECL_BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID) && HAVE_DECL_BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID) == ((1ULL << 1)), "BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID != (1ULL << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID (1ULL << 1)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_features_compat_ro[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_features_compat_ro[] = {
  XLAT_TYPE(uint64_t, BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE),
  XLAT_TYPE(uint64_t, BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_features_incompat.h b/xlat/btrfs_features_incompat.h
index b012f41..e7f5c98 100644
--- a/xlat/btrfs_features_incompat.h
+++ b/xlat/btrfs_features_incompat.h
@@ -1,44 +1,90 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_features_incompat.in; do not edit. */
-#if !(defined(BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF) == ((1ULL << 0)), "BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF != (1ULL << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF (1ULL << 0)
 #endif
-#if !(defined(BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL))
+#if defined(BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL) == ((1ULL << 1)), "BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL != (1ULL << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1)
 #endif
-#if !(defined(BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS))
+#if defined(BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS) == ((1ULL << 2)), "BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS != (1ULL << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2)
 #endif
-#if !(defined(BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO))
+#if defined(BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO) == ((1ULL << 3)), "BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO != (1ULL << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3)
 #endif
-#if !(defined(BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2))
+#if defined(BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2) == ((1ULL << 4)), "BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2 != (1ULL << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2 (1ULL << 4)
 #endif
-#if !(defined(BTRFS_FEATURE_INCOMPAT_BIG_METADATA) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_BIG_METADATA) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_BIG_METADATA))
+#if defined(BTRFS_FEATURE_INCOMPAT_BIG_METADATA) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_BIG_METADATA) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_BIG_METADATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_BIG_METADATA) == ((1ULL << 5)), "BTRFS_FEATURE_INCOMPAT_BIG_METADATA != (1ULL << 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_BIG_METADATA (1ULL << 5)
 #endif
-#if !(defined(BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF))
+#if defined(BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF) == ((1ULL << 6)), "BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF != (1ULL << 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF (1ULL << 6)
 #endif
-#if !(defined(BTRFS_FEATURE_INCOMPAT_RAID56) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_RAID56) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_RAID56))
+#if defined(BTRFS_FEATURE_INCOMPAT_RAID56) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_RAID56) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_RAID56)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_RAID56) == ((1ULL << 7)), "BTRFS_FEATURE_INCOMPAT_RAID56 != (1ULL << 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_RAID56 (1ULL << 7)
 #endif
-#if !(defined(BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA))
+#if defined(BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) == ((1ULL << 8)), "BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA != (1ULL << 8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA (1ULL << 8)
 #endif
-#if !(defined(BTRFS_FEATURE_INCOMPAT_NO_HOLES) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_NO_HOLES) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_NO_HOLES))
+#if defined(BTRFS_FEATURE_INCOMPAT_NO_HOLES) || (defined(HAVE_DECL_BTRFS_FEATURE_INCOMPAT_NO_HOLES) && HAVE_DECL_BTRFS_FEATURE_INCOMPAT_NO_HOLES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FEATURE_INCOMPAT_NO_HOLES) == ((1ULL << 9)), "BTRFS_FEATURE_INCOMPAT_NO_HOLES != (1ULL << 9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FEATURE_INCOMPAT_NO_HOLES (1ULL << 9)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_features_incompat[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_features_incompat[] = {
  XLAT_TYPE(uint64_t, BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF),
  XLAT_TYPE(uint64_t, BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL),
@@ -53,4 +99,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_key_types.h b/xlat/btrfs_key_types.h
index 1a72165..71fcaba 100644
--- a/xlat/btrfs_key_types.h
+++ b/xlat/btrfs_key_types.h
@@ -1,137 +1,307 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_key_types.in; do not edit. */
-#if !(defined(BTRFS_INODE_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_INODE_ITEM_KEY) && HAVE_DECL_BTRFS_INODE_ITEM_KEY))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_INODE_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_INODE_ITEM_KEY) && HAVE_DECL_BTRFS_INODE_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_INODE_ITEM_KEY) == (1), "BTRFS_INODE_ITEM_KEY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_INODE_ITEM_KEY 1
 #endif
-#if !(defined(BTRFS_INODE_REF_KEY) || (defined(HAVE_DECL_BTRFS_INODE_REF_KEY) && HAVE_DECL_BTRFS_INODE_REF_KEY))
+#if defined(BTRFS_INODE_REF_KEY) || (defined(HAVE_DECL_BTRFS_INODE_REF_KEY) && HAVE_DECL_BTRFS_INODE_REF_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_INODE_REF_KEY) == (12), "BTRFS_INODE_REF_KEY != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_INODE_REF_KEY 12
 #endif
-#if !(defined(BTRFS_INODE_EXTREF_KEY) || (defined(HAVE_DECL_BTRFS_INODE_EXTREF_KEY) && HAVE_DECL_BTRFS_INODE_EXTREF_KEY))
+#if defined(BTRFS_INODE_EXTREF_KEY) || (defined(HAVE_DECL_BTRFS_INODE_EXTREF_KEY) && HAVE_DECL_BTRFS_INODE_EXTREF_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_INODE_EXTREF_KEY) == (13), "BTRFS_INODE_EXTREF_KEY != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_INODE_EXTREF_KEY 13
 #endif
-#if !(defined(BTRFS_XATTR_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_XATTR_ITEM_KEY) && HAVE_DECL_BTRFS_XATTR_ITEM_KEY))
+#if defined(BTRFS_XATTR_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_XATTR_ITEM_KEY) && HAVE_DECL_BTRFS_XATTR_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_XATTR_ITEM_KEY) == (24), "BTRFS_XATTR_ITEM_KEY != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_XATTR_ITEM_KEY 24
 #endif
-#if !(defined(BTRFS_ORPHAN_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_ORPHAN_ITEM_KEY) && HAVE_DECL_BTRFS_ORPHAN_ITEM_KEY))
+#if defined(BTRFS_ORPHAN_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_ORPHAN_ITEM_KEY) && HAVE_DECL_BTRFS_ORPHAN_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_ORPHAN_ITEM_KEY) == (48), "BTRFS_ORPHAN_ITEM_KEY != 48");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_ORPHAN_ITEM_KEY 48
 #endif
-#if !(defined(BTRFS_DIR_LOG_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_DIR_LOG_ITEM_KEY) && HAVE_DECL_BTRFS_DIR_LOG_ITEM_KEY))
+#if defined(BTRFS_DIR_LOG_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_DIR_LOG_ITEM_KEY) && HAVE_DECL_BTRFS_DIR_LOG_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_DIR_LOG_ITEM_KEY) == (60), "BTRFS_DIR_LOG_ITEM_KEY != 60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_DIR_LOG_ITEM_KEY 60
 #endif
-#if !(defined(BTRFS_DIR_LOG_INDEX_KEY) || (defined(HAVE_DECL_BTRFS_DIR_LOG_INDEX_KEY) && HAVE_DECL_BTRFS_DIR_LOG_INDEX_KEY))
+#if defined(BTRFS_DIR_LOG_INDEX_KEY) || (defined(HAVE_DECL_BTRFS_DIR_LOG_INDEX_KEY) && HAVE_DECL_BTRFS_DIR_LOG_INDEX_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_DIR_LOG_INDEX_KEY) == (72), "BTRFS_DIR_LOG_INDEX_KEY != 72");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_DIR_LOG_INDEX_KEY 72
 #endif
-#if !(defined(BTRFS_DIR_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_DIR_ITEM_KEY) && HAVE_DECL_BTRFS_DIR_ITEM_KEY))
+#if defined(BTRFS_DIR_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_DIR_ITEM_KEY) && HAVE_DECL_BTRFS_DIR_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_DIR_ITEM_KEY) == (84), "BTRFS_DIR_ITEM_KEY != 84");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_DIR_ITEM_KEY 84
 #endif
-#if !(defined(BTRFS_DIR_INDEX_KEY) || (defined(HAVE_DECL_BTRFS_DIR_INDEX_KEY) && HAVE_DECL_BTRFS_DIR_INDEX_KEY))
+#if defined(BTRFS_DIR_INDEX_KEY) || (defined(HAVE_DECL_BTRFS_DIR_INDEX_KEY) && HAVE_DECL_BTRFS_DIR_INDEX_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_DIR_INDEX_KEY) == (96), "BTRFS_DIR_INDEX_KEY != 96");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_DIR_INDEX_KEY 96
 #endif
-#if !(defined(BTRFS_EXTENT_DATA_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_DATA_KEY) && HAVE_DECL_BTRFS_EXTENT_DATA_KEY))
+#if defined(BTRFS_EXTENT_DATA_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_DATA_KEY) && HAVE_DECL_BTRFS_EXTENT_DATA_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_EXTENT_DATA_KEY) == (108), "BTRFS_EXTENT_DATA_KEY != 108");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_EXTENT_DATA_KEY 108
 #endif
-#if !(defined(BTRFS_EXTENT_CSUM_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_CSUM_KEY) && HAVE_DECL_BTRFS_EXTENT_CSUM_KEY))
+#if defined(BTRFS_EXTENT_CSUM_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_CSUM_KEY) && HAVE_DECL_BTRFS_EXTENT_CSUM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_EXTENT_CSUM_KEY) == (128), "BTRFS_EXTENT_CSUM_KEY != 128");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_EXTENT_CSUM_KEY 128
 #endif
-#if !(defined(BTRFS_ROOT_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_ROOT_ITEM_KEY) && HAVE_DECL_BTRFS_ROOT_ITEM_KEY))
+#if defined(BTRFS_ROOT_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_ROOT_ITEM_KEY) && HAVE_DECL_BTRFS_ROOT_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_ROOT_ITEM_KEY) == (132), "BTRFS_ROOT_ITEM_KEY != 132");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_ROOT_ITEM_KEY 132
 #endif
-#if !(defined(BTRFS_ROOT_BACKREF_KEY) || (defined(HAVE_DECL_BTRFS_ROOT_BACKREF_KEY) && HAVE_DECL_BTRFS_ROOT_BACKREF_KEY))
+#if defined(BTRFS_ROOT_BACKREF_KEY) || (defined(HAVE_DECL_BTRFS_ROOT_BACKREF_KEY) && HAVE_DECL_BTRFS_ROOT_BACKREF_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_ROOT_BACKREF_KEY) == (144), "BTRFS_ROOT_BACKREF_KEY != 144");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_ROOT_BACKREF_KEY 144
 #endif
-#if !(defined(BTRFS_ROOT_REF_KEY) || (defined(HAVE_DECL_BTRFS_ROOT_REF_KEY) && HAVE_DECL_BTRFS_ROOT_REF_KEY))
+#if defined(BTRFS_ROOT_REF_KEY) || (defined(HAVE_DECL_BTRFS_ROOT_REF_KEY) && HAVE_DECL_BTRFS_ROOT_REF_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_ROOT_REF_KEY) == (156), "BTRFS_ROOT_REF_KEY != 156");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_ROOT_REF_KEY 156
 #endif
-#if !(defined(BTRFS_EXTENT_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_ITEM_KEY) && HAVE_DECL_BTRFS_EXTENT_ITEM_KEY))
+#if defined(BTRFS_EXTENT_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_ITEM_KEY) && HAVE_DECL_BTRFS_EXTENT_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_EXTENT_ITEM_KEY) == (168), "BTRFS_EXTENT_ITEM_KEY != 168");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_EXTENT_ITEM_KEY 168
 #endif
-#if !(defined(BTRFS_METADATA_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_METADATA_ITEM_KEY) && HAVE_DECL_BTRFS_METADATA_ITEM_KEY))
+#if defined(BTRFS_METADATA_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_METADATA_ITEM_KEY) && HAVE_DECL_BTRFS_METADATA_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_METADATA_ITEM_KEY) == (169), "BTRFS_METADATA_ITEM_KEY != 169");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_METADATA_ITEM_KEY 169
 #endif
-#if !(defined(BTRFS_TREE_BLOCK_REF_KEY) || (defined(HAVE_DECL_BTRFS_TREE_BLOCK_REF_KEY) && HAVE_DECL_BTRFS_TREE_BLOCK_REF_KEY))
+#if defined(BTRFS_TREE_BLOCK_REF_KEY) || (defined(HAVE_DECL_BTRFS_TREE_BLOCK_REF_KEY) && HAVE_DECL_BTRFS_TREE_BLOCK_REF_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_TREE_BLOCK_REF_KEY) == (176), "BTRFS_TREE_BLOCK_REF_KEY != 176");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_TREE_BLOCK_REF_KEY 176
 #endif
-#if !(defined(BTRFS_EXTENT_DATA_REF_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_DATA_REF_KEY) && HAVE_DECL_BTRFS_EXTENT_DATA_REF_KEY))
+#if defined(BTRFS_EXTENT_DATA_REF_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_DATA_REF_KEY) && HAVE_DECL_BTRFS_EXTENT_DATA_REF_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_EXTENT_DATA_REF_KEY) == (178), "BTRFS_EXTENT_DATA_REF_KEY != 178");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_EXTENT_DATA_REF_KEY 178
 #endif
-#if !(defined(BTRFS_EXTENT_REF_V0_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_REF_V0_KEY) && HAVE_DECL_BTRFS_EXTENT_REF_V0_KEY))
+#if defined(BTRFS_EXTENT_REF_V0_KEY) || (defined(HAVE_DECL_BTRFS_EXTENT_REF_V0_KEY) && HAVE_DECL_BTRFS_EXTENT_REF_V0_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_EXTENT_REF_V0_KEY) == (180), "BTRFS_EXTENT_REF_V0_KEY != 180");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_EXTENT_REF_V0_KEY 180
 #endif
-#if !(defined(BTRFS_SHARED_BLOCK_REF_KEY) || (defined(HAVE_DECL_BTRFS_SHARED_BLOCK_REF_KEY) && HAVE_DECL_BTRFS_SHARED_BLOCK_REF_KEY))
+#if defined(BTRFS_SHARED_BLOCK_REF_KEY) || (defined(HAVE_DECL_BTRFS_SHARED_BLOCK_REF_KEY) && HAVE_DECL_BTRFS_SHARED_BLOCK_REF_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_SHARED_BLOCK_REF_KEY) == (182), "BTRFS_SHARED_BLOCK_REF_KEY != 182");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_SHARED_BLOCK_REF_KEY 182
 #endif
-#if !(defined(BTRFS_SHARED_DATA_REF_KEY) || (defined(HAVE_DECL_BTRFS_SHARED_DATA_REF_KEY) && HAVE_DECL_BTRFS_SHARED_DATA_REF_KEY))
+#if defined(BTRFS_SHARED_DATA_REF_KEY) || (defined(HAVE_DECL_BTRFS_SHARED_DATA_REF_KEY) && HAVE_DECL_BTRFS_SHARED_DATA_REF_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_SHARED_DATA_REF_KEY) == (184), "BTRFS_SHARED_DATA_REF_KEY != 184");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_SHARED_DATA_REF_KEY 184
 #endif
-#if !(defined(BTRFS_BLOCK_GROUP_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_ITEM_KEY) && HAVE_DECL_BTRFS_BLOCK_GROUP_ITEM_KEY))
+#if defined(BTRFS_BLOCK_GROUP_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_ITEM_KEY) && HAVE_DECL_BTRFS_BLOCK_GROUP_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_ITEM_KEY) == (192), "BTRFS_BLOCK_GROUP_ITEM_KEY != 192");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_ITEM_KEY 192
 #endif
-#if !(defined(BTRFS_FREE_SPACE_INFO_KEY) || (defined(HAVE_DECL_BTRFS_FREE_SPACE_INFO_KEY) && HAVE_DECL_BTRFS_FREE_SPACE_INFO_KEY))
+#if defined(BTRFS_FREE_SPACE_INFO_KEY) || (defined(HAVE_DECL_BTRFS_FREE_SPACE_INFO_KEY) && HAVE_DECL_BTRFS_FREE_SPACE_INFO_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FREE_SPACE_INFO_KEY) == (198), "BTRFS_FREE_SPACE_INFO_KEY != 198");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FREE_SPACE_INFO_KEY 198
 #endif
-#if !(defined(BTRFS_FREE_SPACE_EXTENT_KEY) || (defined(HAVE_DECL_BTRFS_FREE_SPACE_EXTENT_KEY) && HAVE_DECL_BTRFS_FREE_SPACE_EXTENT_KEY))
+#if defined(BTRFS_FREE_SPACE_EXTENT_KEY) || (defined(HAVE_DECL_BTRFS_FREE_SPACE_EXTENT_KEY) && HAVE_DECL_BTRFS_FREE_SPACE_EXTENT_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FREE_SPACE_EXTENT_KEY) == (199), "BTRFS_FREE_SPACE_EXTENT_KEY != 199");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FREE_SPACE_EXTENT_KEY 199
 #endif
-#if !(defined(BTRFS_FREE_SPACE_BITMAP_KEY) || (defined(HAVE_DECL_BTRFS_FREE_SPACE_BITMAP_KEY) && HAVE_DECL_BTRFS_FREE_SPACE_BITMAP_KEY))
+#if defined(BTRFS_FREE_SPACE_BITMAP_KEY) || (defined(HAVE_DECL_BTRFS_FREE_SPACE_BITMAP_KEY) && HAVE_DECL_BTRFS_FREE_SPACE_BITMAP_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FREE_SPACE_BITMAP_KEY) == (200), "BTRFS_FREE_SPACE_BITMAP_KEY != 200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FREE_SPACE_BITMAP_KEY 200
 #endif
-#if !(defined(BTRFS_DEV_EXTENT_KEY) || (defined(HAVE_DECL_BTRFS_DEV_EXTENT_KEY) && HAVE_DECL_BTRFS_DEV_EXTENT_KEY))
+#if defined(BTRFS_DEV_EXTENT_KEY) || (defined(HAVE_DECL_BTRFS_DEV_EXTENT_KEY) && HAVE_DECL_BTRFS_DEV_EXTENT_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_DEV_EXTENT_KEY) == (204), "BTRFS_DEV_EXTENT_KEY != 204");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_DEV_EXTENT_KEY 204
 #endif
-#if !(defined(BTRFS_DEV_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_DEV_ITEM_KEY) && HAVE_DECL_BTRFS_DEV_ITEM_KEY))
+#if defined(BTRFS_DEV_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_DEV_ITEM_KEY) && HAVE_DECL_BTRFS_DEV_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_DEV_ITEM_KEY) == (216), "BTRFS_DEV_ITEM_KEY != 216");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_DEV_ITEM_KEY 216
 #endif
-#if !(defined(BTRFS_CHUNK_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_CHUNK_ITEM_KEY) && HAVE_DECL_BTRFS_CHUNK_ITEM_KEY))
+#if defined(BTRFS_CHUNK_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_CHUNK_ITEM_KEY) && HAVE_DECL_BTRFS_CHUNK_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_CHUNK_ITEM_KEY) == (228), "BTRFS_CHUNK_ITEM_KEY != 228");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_CHUNK_ITEM_KEY 228
 #endif
-#if !(defined(BTRFS_QGROUP_STATUS_KEY) || (defined(HAVE_DECL_BTRFS_QGROUP_STATUS_KEY) && HAVE_DECL_BTRFS_QGROUP_STATUS_KEY))
+#if defined(BTRFS_QGROUP_STATUS_KEY) || (defined(HAVE_DECL_BTRFS_QGROUP_STATUS_KEY) && HAVE_DECL_BTRFS_QGROUP_STATUS_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_STATUS_KEY) == (240), "BTRFS_QGROUP_STATUS_KEY != 240");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_STATUS_KEY 240
 #endif
-#if !(defined(BTRFS_QGROUP_INFO_KEY) || (defined(HAVE_DECL_BTRFS_QGROUP_INFO_KEY) && HAVE_DECL_BTRFS_QGROUP_INFO_KEY))
+#if defined(BTRFS_QGROUP_INFO_KEY) || (defined(HAVE_DECL_BTRFS_QGROUP_INFO_KEY) && HAVE_DECL_BTRFS_QGROUP_INFO_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_INFO_KEY) == (242), "BTRFS_QGROUP_INFO_KEY != 242");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_INFO_KEY 242
 #endif
-#if !(defined(BTRFS_QGROUP_LIMIT_KEY) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_KEY) && HAVE_DECL_BTRFS_QGROUP_LIMIT_KEY))
+#if defined(BTRFS_QGROUP_LIMIT_KEY) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_KEY) && HAVE_DECL_BTRFS_QGROUP_LIMIT_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_LIMIT_KEY) == (244), "BTRFS_QGROUP_LIMIT_KEY != 244");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_LIMIT_KEY 244
 #endif
-#if !(defined(BTRFS_QGROUP_RELATION_KEY) || (defined(HAVE_DECL_BTRFS_QGROUP_RELATION_KEY) && HAVE_DECL_BTRFS_QGROUP_RELATION_KEY))
+#if defined(BTRFS_QGROUP_RELATION_KEY) || (defined(HAVE_DECL_BTRFS_QGROUP_RELATION_KEY) && HAVE_DECL_BTRFS_QGROUP_RELATION_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_RELATION_KEY) == (246), "BTRFS_QGROUP_RELATION_KEY != 246");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_RELATION_KEY 246
 #endif
-#if !(defined(BTRFS_BALANCE_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_BALANCE_ITEM_KEY) && HAVE_DECL_BTRFS_BALANCE_ITEM_KEY))
+#if defined(BTRFS_BALANCE_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_BALANCE_ITEM_KEY) && HAVE_DECL_BTRFS_BALANCE_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BALANCE_ITEM_KEY) == (248), "BTRFS_BALANCE_ITEM_KEY != 248");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BALANCE_ITEM_KEY 248
 #endif
-#if !(defined(BTRFS_TEMPORARY_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_TEMPORARY_ITEM_KEY) && HAVE_DECL_BTRFS_TEMPORARY_ITEM_KEY))
+#if defined(BTRFS_TEMPORARY_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_TEMPORARY_ITEM_KEY) && HAVE_DECL_BTRFS_TEMPORARY_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_TEMPORARY_ITEM_KEY) == (248), "BTRFS_TEMPORARY_ITEM_KEY != 248");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_TEMPORARY_ITEM_KEY 248
 #endif
-#if !(defined(BTRFS_DEV_STATS_KEY) || (defined(HAVE_DECL_BTRFS_DEV_STATS_KEY) && HAVE_DECL_BTRFS_DEV_STATS_KEY))
+#if defined(BTRFS_DEV_STATS_KEY) || (defined(HAVE_DECL_BTRFS_DEV_STATS_KEY) && HAVE_DECL_BTRFS_DEV_STATS_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_DEV_STATS_KEY) == (249), "BTRFS_DEV_STATS_KEY != 249");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_DEV_STATS_KEY 249
 #endif
-#if !(defined(BTRFS_PERSISTENT_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_PERSISTENT_ITEM_KEY) && HAVE_DECL_BTRFS_PERSISTENT_ITEM_KEY))
+#if defined(BTRFS_PERSISTENT_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_PERSISTENT_ITEM_KEY) && HAVE_DECL_BTRFS_PERSISTENT_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_PERSISTENT_ITEM_KEY) == (249), "BTRFS_PERSISTENT_ITEM_KEY != 249");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_PERSISTENT_ITEM_KEY 249
 #endif
-#if !(defined(BTRFS_DEV_REPLACE_KEY) || (defined(HAVE_DECL_BTRFS_DEV_REPLACE_KEY) && HAVE_DECL_BTRFS_DEV_REPLACE_KEY))
+#if defined(BTRFS_DEV_REPLACE_KEY) || (defined(HAVE_DECL_BTRFS_DEV_REPLACE_KEY) && HAVE_DECL_BTRFS_DEV_REPLACE_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_DEV_REPLACE_KEY) == (250), "BTRFS_DEV_REPLACE_KEY != 250");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_DEV_REPLACE_KEY 250
 #endif
-#if !(defined(BTRFS_UUID_KEY_SUBVOL) || (defined(HAVE_DECL_BTRFS_UUID_KEY_SUBVOL) && HAVE_DECL_BTRFS_UUID_KEY_SUBVOL))
+#if defined(BTRFS_UUID_KEY_SUBVOL) || (defined(HAVE_DECL_BTRFS_UUID_KEY_SUBVOL) && HAVE_DECL_BTRFS_UUID_KEY_SUBVOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_UUID_KEY_SUBVOL) == (251), "BTRFS_UUID_KEY_SUBVOL != 251");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_UUID_KEY_SUBVOL 251
 #endif
-#if !(defined(BTRFS_UUID_KEY_RECEIVED_SUBVOL) || (defined(HAVE_DECL_BTRFS_UUID_KEY_RECEIVED_SUBVOL) && HAVE_DECL_BTRFS_UUID_KEY_RECEIVED_SUBVOL))
+#if defined(BTRFS_UUID_KEY_RECEIVED_SUBVOL) || (defined(HAVE_DECL_BTRFS_UUID_KEY_RECEIVED_SUBVOL) && HAVE_DECL_BTRFS_UUID_KEY_RECEIVED_SUBVOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_UUID_KEY_RECEIVED_SUBVOL) == (252), "BTRFS_UUID_KEY_RECEIVED_SUBVOL != 252");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_UUID_KEY_RECEIVED_SUBVOL 252
 #endif
-#if !(defined(BTRFS_STRING_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_STRING_ITEM_KEY) && HAVE_DECL_BTRFS_STRING_ITEM_KEY))
+#if defined(BTRFS_STRING_ITEM_KEY) || (defined(HAVE_DECL_BTRFS_STRING_ITEM_KEY) && HAVE_DECL_BTRFS_STRING_ITEM_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_STRING_ITEM_KEY) == (253), "BTRFS_STRING_ITEM_KEY != 253");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_STRING_ITEM_KEY 253
 #endif
-#if !(defined(UINT32_MAX) || (defined(HAVE_DECL_UINT32_MAX) && HAVE_DECL_UINT32_MAX))
+#if defined(UINT32_MAX) || (defined(HAVE_DECL_UINT32_MAX) && HAVE_DECL_UINT32_MAX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((UINT32_MAX) == (-1U), "UINT32_MAX != -1U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define UINT32_MAX -1U
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_key_types[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_key_types[] = {
  XLAT_TYPE(uint64_t, BTRFS_INODE_ITEM_KEY),
  XLAT_TYPE(uint64_t, BTRFS_INODE_REF_KEY),
@@ -177,4 +347,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_logical_ino_args_flags.h b/xlat/btrfs_logical_ino_args_flags.h
index 440e45e..ca969b7 100644
--- a/xlat/btrfs_logical_ino_args_flags.h
+++ b/xlat/btrfs_logical_ino_args_flags.h
@@ -1,20 +1,32 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_logical_ino_args_flags.in; do not edit. */
-#if !(defined(BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET) || (defined(HAVE_DECL_BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET) && HAVE_DECL_BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET) || (defined(HAVE_DECL_BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET) && HAVE_DECL_BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET) == ((1ULL << 0)), "BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET != (1ULL << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET (1ULL << 0)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_logical_ino_args_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_logical_ino_args_flags[] = {
  XLAT(BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_qgroup_ctl_cmds.h b/xlat/btrfs_qgroup_ctl_cmds.h
index 25bdce2..932f727 100644
--- a/xlat/btrfs_qgroup_ctl_cmds.h
+++ b/xlat/btrfs_qgroup_ctl_cmds.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_qgroup_ctl_cmds.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_qgroup_ctl_cmds[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_qgroup_ctl_cmds[] = {
 #if defined(BTRFS_QUOTA_CTL_ENABLE) || (defined(HAVE_DECL_BTRFS_QUOTA_CTL_ENABLE) && HAVE_DECL_BTRFS_QUOTA_CTL_ENABLE)
   XLAT_TYPE(uint64_t, BTRFS_QUOTA_CTL_ENABLE),
@@ -22,4 +28,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_qgroup_inherit_flags.h b/xlat/btrfs_qgroup_inherit_flags.h
index ead56ea..5f8d2f2 100644
--- a/xlat/btrfs_qgroup_inherit_flags.h
+++ b/xlat/btrfs_qgroup_inherit_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_qgroup_inherit_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_qgroup_inherit_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_qgroup_inherit_flags[] = {
 #if defined(BTRFS_QGROUP_INHERIT_SET_LIMITS) || (defined(HAVE_DECL_BTRFS_QGROUP_INHERIT_SET_LIMITS) && HAVE_DECL_BTRFS_QGROUP_INHERIT_SET_LIMITS)
   XLAT_TYPE(uint64_t, BTRFS_QGROUP_INHERIT_SET_LIMITS),
@@ -16,4 +22,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_qgroup_limit_flags.h b/xlat/btrfs_qgroup_limit_flags.h
index 114c876..5932d12 100644
--- a/xlat/btrfs_qgroup_limit_flags.h
+++ b/xlat/btrfs_qgroup_limit_flags.h
@@ -1,32 +1,62 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_qgroup_limit_flags.in; do not edit. */
-#if !(defined(BTRFS_QGROUP_LIMIT_MAX_RFER) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_RFER) && HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_RFER))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_QGROUP_LIMIT_MAX_RFER) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_RFER) && HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_RFER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_LIMIT_MAX_RFER) == ((1ULL << 0)), "BTRFS_QGROUP_LIMIT_MAX_RFER != (1ULL << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_LIMIT_MAX_RFER (1ULL << 0)
 #endif
-#if !(defined(BTRFS_QGROUP_LIMIT_MAX_EXCL) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_EXCL) && HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_EXCL))
+#if defined(BTRFS_QGROUP_LIMIT_MAX_EXCL) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_EXCL) && HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_EXCL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_LIMIT_MAX_EXCL) == ((1ULL << 1)), "BTRFS_QGROUP_LIMIT_MAX_EXCL != (1ULL << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_LIMIT_MAX_EXCL (1ULL << 1)
 #endif
-#if !(defined(BTRFS_QGROUP_LIMIT_RSV_RFER) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_RFER) && HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_RFER))
+#if defined(BTRFS_QGROUP_LIMIT_RSV_RFER) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_RFER) && HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_RFER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_LIMIT_RSV_RFER) == ((1ULL << 2)), "BTRFS_QGROUP_LIMIT_RSV_RFER != (1ULL << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_LIMIT_RSV_RFER (1ULL << 2)
 #endif
-#if !(defined(BTRFS_QGROUP_LIMIT_RSV_EXCL) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_EXCL) && HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_EXCL))
+#if defined(BTRFS_QGROUP_LIMIT_RSV_EXCL) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_EXCL) && HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_EXCL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_LIMIT_RSV_EXCL) == ((1ULL << 3)), "BTRFS_QGROUP_LIMIT_RSV_EXCL != (1ULL << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_LIMIT_RSV_EXCL (1ULL << 3)
 #endif
-#if !(defined(BTRFS_QGROUP_LIMIT_RFER_CMPR) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_RFER_CMPR) && HAVE_DECL_BTRFS_QGROUP_LIMIT_RFER_CMPR))
+#if defined(BTRFS_QGROUP_LIMIT_RFER_CMPR) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_RFER_CMPR) && HAVE_DECL_BTRFS_QGROUP_LIMIT_RFER_CMPR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_LIMIT_RFER_CMPR) == ((1ULL << 4)), "BTRFS_QGROUP_LIMIT_RFER_CMPR != (1ULL << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_LIMIT_RFER_CMPR (1ULL << 4)
 #endif
-#if !(defined(BTRFS_QGROUP_LIMIT_EXCL_CMPR) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_EXCL_CMPR) && HAVE_DECL_BTRFS_QGROUP_LIMIT_EXCL_CMPR))
+#if defined(BTRFS_QGROUP_LIMIT_EXCL_CMPR) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_EXCL_CMPR) && HAVE_DECL_BTRFS_QGROUP_LIMIT_EXCL_CMPR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_LIMIT_EXCL_CMPR) == ((1ULL << 5)), "BTRFS_QGROUP_LIMIT_EXCL_CMPR != (1ULL << 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_LIMIT_EXCL_CMPR (1ULL << 5)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_qgroup_limit_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_qgroup_limit_flags[] = {
  XLAT_TYPE(uint64_t, BTRFS_QGROUP_LIMIT_MAX_RFER),
  XLAT_TYPE(uint64_t, BTRFS_QGROUP_LIMIT_MAX_EXCL),
@@ -37,4 +67,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_qgroup_status_flags.h b/xlat/btrfs_qgroup_status_flags.h
index d02a86b..252ef61 100644
--- a/xlat/btrfs_qgroup_status_flags.h
+++ b/xlat/btrfs_qgroup_status_flags.h
@@ -1,24 +1,40 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_qgroup_status_flags.in; do not edit. */
-#if !(defined(BTRFS_QGROUP_STATUS_FLAG_ON) || (defined(HAVE_DECL_BTRFS_QGROUP_STATUS_FLAG_ON) && HAVE_DECL_BTRFS_QGROUP_STATUS_FLAG_ON))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_QGROUP_STATUS_FLAG_ON) || (defined(HAVE_DECL_BTRFS_QGROUP_STATUS_FLAG_ON) && HAVE_DECL_BTRFS_QGROUP_STATUS_FLAG_ON)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_STATUS_FLAG_ON) == ((1ULL << 0)), "BTRFS_QGROUP_STATUS_FLAG_ON != (1ULL << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_STATUS_FLAG_ON (1ULL << 0)
 #endif
-#if !(defined(BTRFS_QGROUP_STATUS_FLAG_RESCAN) || (defined(HAVE_DECL_BTRFS_QGROUP_STATUS_FLAG_RESCAN) && HAVE_DECL_BTRFS_QGROUP_STATUS_FLAG_RESCAN))
+#if defined(BTRFS_QGROUP_STATUS_FLAG_RESCAN) || (defined(HAVE_DECL_BTRFS_QGROUP_STATUS_FLAG_RESCAN) && HAVE_DECL_BTRFS_QGROUP_STATUS_FLAG_RESCAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QGROUP_STATUS_FLAG_RESCAN) == ((1ULL << 1)), "BTRFS_QGROUP_STATUS_FLAG_RESCAN != (1ULL << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QGROUP_STATUS_FLAG_RESCAN (1ULL << 1)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_qgroup_status_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_qgroup_status_flags[] = {
  XLAT_TYPE(uint64_t, BTRFS_QGROUP_STATUS_FLAG_ON),
  XLAT_TYPE(uint64_t, BTRFS_QGROUP_STATUS_FLAG_RESCAN),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_scrub_flags.h b/xlat/btrfs_scrub_flags.h
index 5823e34..b596476 100644
--- a/xlat/btrfs_scrub_flags.h
+++ b/xlat/btrfs_scrub_flags.h
@@ -1,20 +1,32 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_scrub_flags.in; do not edit. */
-#if !(defined(BTRFS_SCRUB_READONLY) || (defined(HAVE_DECL_BTRFS_SCRUB_READONLY) && HAVE_DECL_BTRFS_SCRUB_READONLY))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_SCRUB_READONLY) || (defined(HAVE_DECL_BTRFS_SCRUB_READONLY) && HAVE_DECL_BTRFS_SCRUB_READONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_SCRUB_READONLY) == (1), "BTRFS_SCRUB_READONLY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_SCRUB_READONLY 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_scrub_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_scrub_flags[] = {
  XLAT_TYPE(uint64_t, BTRFS_SCRUB_READONLY),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_send_flags.h b/xlat/btrfs_send_flags.h
index be2b02a..a357f71 100644
--- a/xlat/btrfs_send_flags.h
+++ b/xlat/btrfs_send_flags.h
@@ -1,23 +1,41 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_send_flags.in; do not edit. */
-#if !(defined(BTRFS_SEND_FLAG_NO_FILE_DATA) || (defined(HAVE_DECL_BTRFS_SEND_FLAG_NO_FILE_DATA) && HAVE_DECL_BTRFS_SEND_FLAG_NO_FILE_DATA))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_SEND_FLAG_NO_FILE_DATA) || (defined(HAVE_DECL_BTRFS_SEND_FLAG_NO_FILE_DATA) && HAVE_DECL_BTRFS_SEND_FLAG_NO_FILE_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_SEND_FLAG_NO_FILE_DATA) == (0x1), "BTRFS_SEND_FLAG_NO_FILE_DATA != 0x1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_SEND_FLAG_NO_FILE_DATA 0x1
 #endif
-#if !(defined(BTRFS_SEND_FLAG_OMIT_STREAM_HEADER) || (defined(HAVE_DECL_BTRFS_SEND_FLAG_OMIT_STREAM_HEADER) && HAVE_DECL_BTRFS_SEND_FLAG_OMIT_STREAM_HEADER))
+#if defined(BTRFS_SEND_FLAG_OMIT_STREAM_HEADER) || (defined(HAVE_DECL_BTRFS_SEND_FLAG_OMIT_STREAM_HEADER) && HAVE_DECL_BTRFS_SEND_FLAG_OMIT_STREAM_HEADER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_SEND_FLAG_OMIT_STREAM_HEADER) == (0x2), "BTRFS_SEND_FLAG_OMIT_STREAM_HEADER != 0x2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_SEND_FLAG_OMIT_STREAM_HEADER 0x2
 #endif
-#if !(defined(BTRFS_SEND_FLAG_OMIT_END_CMD) || (defined(HAVE_DECL_BTRFS_SEND_FLAG_OMIT_END_CMD) && HAVE_DECL_BTRFS_SEND_FLAG_OMIT_END_CMD))
+#if defined(BTRFS_SEND_FLAG_OMIT_END_CMD) || (defined(HAVE_DECL_BTRFS_SEND_FLAG_OMIT_END_CMD) && HAVE_DECL_BTRFS_SEND_FLAG_OMIT_END_CMD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_SEND_FLAG_OMIT_END_CMD) == (0x4), "BTRFS_SEND_FLAG_OMIT_END_CMD != 0x4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_SEND_FLAG_OMIT_END_CMD 0x4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_send_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_send_flags[] = {
  XLAT(BTRFS_SEND_FLAG_NO_FILE_DATA),
  XLAT(BTRFS_SEND_FLAG_OMIT_STREAM_HEADER),
@@ -25,4 +43,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_snap_flags_v2.h b/xlat/btrfs_snap_flags_v2.h
index 4208852..00fd680 100644
--- a/xlat/btrfs_snap_flags_v2.h
+++ b/xlat/btrfs_snap_flags_v2.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_snap_flags_v2.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_snap_flags_v2[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_snap_flags_v2[] = {
 #if defined(BTRFS_SUBVOL_CREATE_ASYNC) || (defined(HAVE_DECL_BTRFS_SUBVOL_CREATE_ASYNC) && HAVE_DECL_BTRFS_SUBVOL_CREATE_ASYNC)
   XLAT_TYPE(uint64_t, BTRFS_SUBVOL_CREATE_ASYNC),
@@ -22,4 +28,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_space_info_flags.h b/xlat/btrfs_space_info_flags.h
index 7dcf06c..665612d 100644
--- a/xlat/btrfs_space_info_flags.h
+++ b/xlat/btrfs_space_info_flags.h
@@ -1,47 +1,97 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_space_info_flags.in; do not edit. */
-#if !(defined(BTRFS_BLOCK_GROUP_DATA) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_DATA) && HAVE_DECL_BTRFS_BLOCK_GROUP_DATA))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_BLOCK_GROUP_DATA) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_DATA) && HAVE_DECL_BTRFS_BLOCK_GROUP_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_DATA) == ((1ULL << 0)), "BTRFS_BLOCK_GROUP_DATA != (1ULL << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_DATA (1ULL << 0)
 #endif
-#if !(defined(BTRFS_BLOCK_GROUP_SYSTEM) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_SYSTEM) && HAVE_DECL_BTRFS_BLOCK_GROUP_SYSTEM))
+#if defined(BTRFS_BLOCK_GROUP_SYSTEM) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_SYSTEM) && HAVE_DECL_BTRFS_BLOCK_GROUP_SYSTEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_SYSTEM) == ((1ULL << 1)), "BTRFS_BLOCK_GROUP_SYSTEM != (1ULL << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_SYSTEM (1ULL << 1)
 #endif
-#if !(defined(BTRFS_BLOCK_GROUP_METADATA) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_METADATA) && HAVE_DECL_BTRFS_BLOCK_GROUP_METADATA))
+#if defined(BTRFS_BLOCK_GROUP_METADATA) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_METADATA) && HAVE_DECL_BTRFS_BLOCK_GROUP_METADATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_METADATA) == ((1ULL << 2)), "BTRFS_BLOCK_GROUP_METADATA != (1ULL << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_METADATA (1ULL << 2)
 #endif
-#if !(defined(BTRFS_BLOCK_GROUP_RAID0) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID0) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID0))
+#if defined(BTRFS_BLOCK_GROUP_RAID0) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID0) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_RAID0) == ((1ULL << 3)), "BTRFS_BLOCK_GROUP_RAID0 != (1ULL << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_RAID0 (1ULL << 3)
 #endif
-#if !(defined(BTRFS_BLOCK_GROUP_RAID1) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID1) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID1))
+#if defined(BTRFS_BLOCK_GROUP_RAID1) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID1) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_RAID1) == ((1ULL << 4)), "BTRFS_BLOCK_GROUP_RAID1 != (1ULL << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_RAID1 (1ULL << 4)
 #endif
-#if !(defined(BTRFS_BLOCK_GROUP_DUP) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_DUP) && HAVE_DECL_BTRFS_BLOCK_GROUP_DUP))
+#if defined(BTRFS_BLOCK_GROUP_DUP) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_DUP) && HAVE_DECL_BTRFS_BLOCK_GROUP_DUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_DUP) == ((1ULL << 5)), "BTRFS_BLOCK_GROUP_DUP != (1ULL << 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_DUP (1ULL << 5)
 #endif
-#if !(defined(BTRFS_BLOCK_GROUP_RAID10) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID10) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID10))
+#if defined(BTRFS_BLOCK_GROUP_RAID10) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID10) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_RAID10) == ((1ULL << 6)), "BTRFS_BLOCK_GROUP_RAID10 != (1ULL << 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6)
 #endif
-#if !(defined(BTRFS_BLOCK_GROUP_RAID5) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID5) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID5))
+#if defined(BTRFS_BLOCK_GROUP_RAID5) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID5) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_RAID5) == ((1ULL << 7)), "BTRFS_BLOCK_GROUP_RAID5 != (1ULL << 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_RAID5 (1ULL << 7)
 #endif
-#if !(defined(BTRFS_BLOCK_GROUP_RAID6) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID6) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID6))
+#if defined(BTRFS_BLOCK_GROUP_RAID6) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID6) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_BLOCK_GROUP_RAID6) == ((1ULL << 8)), "BTRFS_BLOCK_GROUP_RAID6 != (1ULL << 8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_BLOCK_GROUP_RAID6 (1ULL << 8)
 #endif
-#if !(defined(BTRFS_AVAIL_ALLOC_BIT_SINGLE) || (defined(HAVE_DECL_BTRFS_AVAIL_ALLOC_BIT_SINGLE) && HAVE_DECL_BTRFS_AVAIL_ALLOC_BIT_SINGLE))
+#if defined(BTRFS_AVAIL_ALLOC_BIT_SINGLE) || (defined(HAVE_DECL_BTRFS_AVAIL_ALLOC_BIT_SINGLE) && HAVE_DECL_BTRFS_AVAIL_ALLOC_BIT_SINGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_AVAIL_ALLOC_BIT_SINGLE) == ((1ULL << 48)), "BTRFS_AVAIL_ALLOC_BIT_SINGLE != (1ULL << 48)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_AVAIL_ALLOC_BIT_SINGLE (1ULL << 48)
 #endif
-#if !(defined(BTRFS_SPACE_INFO_GLOBAL_RSV) || (defined(HAVE_DECL_BTRFS_SPACE_INFO_GLOBAL_RSV) && HAVE_DECL_BTRFS_SPACE_INFO_GLOBAL_RSV))
+#if defined(BTRFS_SPACE_INFO_GLOBAL_RSV) || (defined(HAVE_DECL_BTRFS_SPACE_INFO_GLOBAL_RSV) && HAVE_DECL_BTRFS_SPACE_INFO_GLOBAL_RSV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_SPACE_INFO_GLOBAL_RSV) == ((1ULL << 49)), "BTRFS_SPACE_INFO_GLOBAL_RSV != (1ULL << 49)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_SPACE_INFO_GLOBAL_RSV (1ULL << 49)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_space_info_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_space_info_flags[] = {
  XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_DATA),
  XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_SYSTEM),
@@ -57,4 +107,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/btrfs_tree_objectids.h b/xlat/btrfs_tree_objectids.h
index f96ee7f..5acf109 100644
--- a/xlat/btrfs_tree_objectids.h
+++ b/xlat/btrfs_tree_objectids.h
@@ -1,53 +1,111 @@
 /* Generated by ./xlat/gen.sh from ./xlat/btrfs_tree_objectids.in; do not edit. */
-#if !(defined(BTRFS_ROOT_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_ROOT_TREE_OBJECTID) && HAVE_DECL_BTRFS_ROOT_TREE_OBJECTID))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BTRFS_ROOT_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_ROOT_TREE_OBJECTID) && HAVE_DECL_BTRFS_ROOT_TREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_ROOT_TREE_OBJECTID) == (1ULL), "BTRFS_ROOT_TREE_OBJECTID != 1ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_ROOT_TREE_OBJECTID 1ULL
 #endif
-#if !(defined(BTRFS_EXTENT_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_EXTENT_TREE_OBJECTID) && HAVE_DECL_BTRFS_EXTENT_TREE_OBJECTID))
+#if defined(BTRFS_EXTENT_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_EXTENT_TREE_OBJECTID) && HAVE_DECL_BTRFS_EXTENT_TREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_EXTENT_TREE_OBJECTID) == (2ULL), "BTRFS_EXTENT_TREE_OBJECTID != 2ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_EXTENT_TREE_OBJECTID 2ULL
 #endif
-#if !(defined(BTRFS_CHUNK_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_CHUNK_TREE_OBJECTID) && HAVE_DECL_BTRFS_CHUNK_TREE_OBJECTID))
+#if defined(BTRFS_CHUNK_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_CHUNK_TREE_OBJECTID) && HAVE_DECL_BTRFS_CHUNK_TREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_CHUNK_TREE_OBJECTID) == (3ULL), "BTRFS_CHUNK_TREE_OBJECTID != 3ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_CHUNK_TREE_OBJECTID 3ULL
 #endif
-#if !(defined(BTRFS_DEV_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_DEV_TREE_OBJECTID) && HAVE_DECL_BTRFS_DEV_TREE_OBJECTID))
+#if defined(BTRFS_DEV_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_DEV_TREE_OBJECTID) && HAVE_DECL_BTRFS_DEV_TREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_DEV_TREE_OBJECTID) == (4ULL), "BTRFS_DEV_TREE_OBJECTID != 4ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_DEV_TREE_OBJECTID 4ULL
 #endif
-#if !(defined(BTRFS_FS_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_FS_TREE_OBJECTID) && HAVE_DECL_BTRFS_FS_TREE_OBJECTID))
+#if defined(BTRFS_FS_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_FS_TREE_OBJECTID) && HAVE_DECL_BTRFS_FS_TREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FS_TREE_OBJECTID) == (5ULL), "BTRFS_FS_TREE_OBJECTID != 5ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FS_TREE_OBJECTID 5ULL
 #endif
-#if !(defined(BTRFS_ROOT_TREE_DIR_OBJECTID) || (defined(HAVE_DECL_BTRFS_ROOT_TREE_DIR_OBJECTID) && HAVE_DECL_BTRFS_ROOT_TREE_DIR_OBJECTID))
+#if defined(BTRFS_ROOT_TREE_DIR_OBJECTID) || (defined(HAVE_DECL_BTRFS_ROOT_TREE_DIR_OBJECTID) && HAVE_DECL_BTRFS_ROOT_TREE_DIR_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_ROOT_TREE_DIR_OBJECTID) == (6ULL), "BTRFS_ROOT_TREE_DIR_OBJECTID != 6ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL
 #endif
-#if !(defined(BTRFS_CSUM_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_CSUM_TREE_OBJECTID) && HAVE_DECL_BTRFS_CSUM_TREE_OBJECTID))
+#if defined(BTRFS_CSUM_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_CSUM_TREE_OBJECTID) && HAVE_DECL_BTRFS_CSUM_TREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_CSUM_TREE_OBJECTID) == (7ULL), "BTRFS_CSUM_TREE_OBJECTID != 7ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_CSUM_TREE_OBJECTID 7ULL
 #endif
-#if !(defined(BTRFS_QUOTA_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_QUOTA_TREE_OBJECTID) && HAVE_DECL_BTRFS_QUOTA_TREE_OBJECTID))
+#if defined(BTRFS_QUOTA_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_QUOTA_TREE_OBJECTID) && HAVE_DECL_BTRFS_QUOTA_TREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_QUOTA_TREE_OBJECTID) == (8ULL), "BTRFS_QUOTA_TREE_OBJECTID != 8ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_QUOTA_TREE_OBJECTID 8ULL
 #endif
-#if !(defined(BTRFS_UUID_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_UUID_TREE_OBJECTID) && HAVE_DECL_BTRFS_UUID_TREE_OBJECTID))
+#if defined(BTRFS_UUID_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_UUID_TREE_OBJECTID) && HAVE_DECL_BTRFS_UUID_TREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_UUID_TREE_OBJECTID) == (9ULL), "BTRFS_UUID_TREE_OBJECTID != 9ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_UUID_TREE_OBJECTID 9ULL
 #endif
-#if !(defined(BTRFS_FREE_SPACE_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_FREE_SPACE_TREE_OBJECTID) && HAVE_DECL_BTRFS_FREE_SPACE_TREE_OBJECTID))
+#if defined(BTRFS_FREE_SPACE_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_FREE_SPACE_TREE_OBJECTID) && HAVE_DECL_BTRFS_FREE_SPACE_TREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FREE_SPACE_TREE_OBJECTID) == (10ULL), "BTRFS_FREE_SPACE_TREE_OBJECTID != 10ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FREE_SPACE_TREE_OBJECTID 10ULL
 #endif
-#if !(defined(BTRFS_FIRST_FREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_FIRST_FREE_OBJECTID) && HAVE_DECL_BTRFS_FIRST_FREE_OBJECTID))
+#if defined(BTRFS_FIRST_FREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_FIRST_FREE_OBJECTID) && HAVE_DECL_BTRFS_FIRST_FREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_FIRST_FREE_OBJECTID) == (256ULL), "BTRFS_FIRST_FREE_OBJECTID != 256ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_FIRST_FREE_OBJECTID 256ULL
 #endif
-#if !(defined(BTRFS_LAST_FREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_LAST_FREE_OBJECTID) && HAVE_DECL_BTRFS_LAST_FREE_OBJECTID))
+#if defined(BTRFS_LAST_FREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_LAST_FREE_OBJECTID) && HAVE_DECL_BTRFS_LAST_FREE_OBJECTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTRFS_LAST_FREE_OBJECTID) == (-256ULL), "BTRFS_LAST_FREE_OBJECTID != -256ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTRFS_LAST_FREE_OBJECTID -256ULL
 #endif
-#if !(defined(UINT64_MAX) || (defined(HAVE_DECL_UINT64_MAX) && HAVE_DECL_UINT64_MAX))
+#if defined(UINT64_MAX) || (defined(HAVE_DECL_UINT64_MAX) && HAVE_DECL_UINT64_MAX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((UINT64_MAX) == (-1ULL), "UINT64_MAX != -1ULL");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define UINT64_MAX -1ULL
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat btrfs_tree_objectids[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat btrfs_tree_objectids[] = {
  XLAT_TYPE(uint64_t, BTRFS_ROOT_TREE_OBJECTID),
  XLAT_TYPE(uint64_t, BTRFS_EXTENT_TREE_OBJECTID),
@@ -65,4 +123,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/cacheflush_scope.h b/xlat/cacheflush_scope.h
index 4859774..eac973e 100644
--- a/xlat/cacheflush_scope.h
+++ b/xlat/cacheflush_scope.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/cacheflush_scope.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat cacheflush_scope in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat cacheflush_scope in mpers mode
+
+# else
 
 static
 const struct xlat cacheflush_scope[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/caif_protocols.h b/xlat/caif_protocols.h
new file mode 100644
index 0000000..5c193a1
--- /dev/null
+++ b/xlat/caif_protocols.h
@@ -0,0 +1,70 @@
+/* Generated by ./xlat/gen.sh from ./xlat/caif_protocols.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(CAIFPROTO_AT) || (defined(HAVE_DECL_CAIFPROTO_AT) && HAVE_DECL_CAIFPROTO_AT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAIFPROTO_AT) == (0), "CAIFPROTO_AT != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAIFPROTO_AT 0
+#endif
+#if defined(CAIFPROTO_DATAGRAM) || (defined(HAVE_DECL_CAIFPROTO_DATAGRAM) && HAVE_DECL_CAIFPROTO_DATAGRAM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAIFPROTO_DATAGRAM) == (1), "CAIFPROTO_DATAGRAM != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAIFPROTO_DATAGRAM 1
+#endif
+#if defined(CAIFPROTO_DATAGRAM_LOOP) || (defined(HAVE_DECL_CAIFPROTO_DATAGRAM_LOOP) && HAVE_DECL_CAIFPROTO_DATAGRAM_LOOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAIFPROTO_DATAGRAM_LOOP) == (2), "CAIFPROTO_DATAGRAM_LOOP != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAIFPROTO_DATAGRAM_LOOP 2
+#endif
+#if defined(CAIFPROTO_UTIL) || (defined(HAVE_DECL_CAIFPROTO_UTIL) && HAVE_DECL_CAIFPROTO_UTIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAIFPROTO_UTIL) == (3), "CAIFPROTO_UTIL != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAIFPROTO_UTIL 3
+#endif
+#if defined(CAIFPROTO_RFM) || (defined(HAVE_DECL_CAIFPROTO_RFM) && HAVE_DECL_CAIFPROTO_RFM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAIFPROTO_RFM) == (4), "CAIFPROTO_RFM != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAIFPROTO_RFM 4
+#endif
+#if defined(CAIFPROTO_DEBUG) || (defined(HAVE_DECL_CAIFPROTO_DEBUG) && HAVE_DECL_CAIFPROTO_DEBUG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAIFPROTO_DEBUG) == (5), "CAIFPROTO_DEBUG != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAIFPROTO_DEBUG 5
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat caif_protocols in mpers mode
+
+# else
+
+static
+const struct xlat caif_protocols[] = {
+ [CAIFPROTO_AT] = XLAT(CAIFPROTO_AT),
+ [CAIFPROTO_DATAGRAM] = XLAT(CAIFPROTO_DATAGRAM),
+ [CAIFPROTO_DATAGRAM_LOOP] = XLAT(CAIFPROTO_DATAGRAM_LOOP),
+ [CAIFPROTO_UTIL] = XLAT(CAIFPROTO_UTIL),
+ [CAIFPROTO_RFM] = XLAT(CAIFPROTO_RFM),
+ [CAIFPROTO_DEBUG] = XLAT(CAIFPROTO_DEBUG),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/caif_protocols.in b/xlat/caif_protocols.in
new file mode 100644
index 0000000..76ba896
--- /dev/null
+++ b/xlat/caif_protocols.in
@@ -0,0 +1,7 @@
+#value_indexed
+CAIFPROTO_AT		0
+CAIFPROTO_DATAGRAM	1
+CAIFPROTO_DATAGRAM_LOOP	2
+CAIFPROTO_UTIL		3
+CAIFPROTO_RFM		4
+CAIFPROTO_DEBUG		5
diff --git a/xlat/can_protocols.h b/xlat/can_protocols.h
new file mode 100644
index 0000000..3e207f7
--- /dev/null
+++ b/xlat/can_protocols.h
@@ -0,0 +1,70 @@
+/* Generated by ./xlat/gen.sh from ./xlat/can_protocols.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(CAN_RAW) || (defined(HAVE_DECL_CAN_RAW) && HAVE_DECL_CAN_RAW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAN_RAW) == (1), "CAN_RAW != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAN_RAW 1
+#endif
+#if defined(CAN_BCM) || (defined(HAVE_DECL_CAN_BCM) && HAVE_DECL_CAN_BCM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAN_BCM) == (2), "CAN_BCM != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAN_BCM 2
+#endif
+#if defined(CAN_TP16) || (defined(HAVE_DECL_CAN_TP16) && HAVE_DECL_CAN_TP16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAN_TP16) == (3), "CAN_TP16 != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAN_TP16 3
+#endif
+#if defined(CAN_TP20) || (defined(HAVE_DECL_CAN_TP20) && HAVE_DECL_CAN_TP20)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAN_TP20) == (4), "CAN_TP20 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAN_TP20 4
+#endif
+#if defined(CAN_MCNET) || (defined(HAVE_DECL_CAN_MCNET) && HAVE_DECL_CAN_MCNET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAN_MCNET) == (5), "CAN_MCNET != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAN_MCNET 5
+#endif
+#if defined(CAN_ISOTP) || (defined(HAVE_DECL_CAN_ISOTP) && HAVE_DECL_CAN_ISOTP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAN_ISOTP) == (6), "CAN_ISOTP != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAN_ISOTP 6
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat can_protocols in mpers mode
+
+# else
+
+static
+const struct xlat can_protocols[] = {
+ [CAN_RAW] = XLAT(CAN_RAW),
+ [CAN_BCM] = XLAT(CAN_BCM),
+ [CAN_TP16] = XLAT(CAN_TP16),
+ [CAN_TP20] = XLAT(CAN_TP20),
+ [CAN_MCNET] = XLAT(CAN_MCNET),
+ [CAN_ISOTP] = XLAT(CAN_ISOTP),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/can_protocols.in b/xlat/can_protocols.in
new file mode 100644
index 0000000..f74caa7
--- /dev/null
+++ b/xlat/can_protocols.in
@@ -0,0 +1,7 @@
+#value_indexed
+CAN_RAW		1
+CAN_BCM		2
+CAN_TP16	3
+CAN_TP20	4
+CAN_MCNET	5
+CAN_ISOTP	6
diff --git a/xlat/cap.h b/xlat/cap.h
index fb50990..c8205f7 100644
--- a/xlat/cap.h
+++ b/xlat/cap.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/cap.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat cap in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat cap in mpers mode
+
+# else
 
 static
 const struct xlat cap[] = {
@@ -49,4 +55,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/cap_mask0.h b/xlat/cap_mask0.h
index 4402dc2..84d529f 100644
--- a/xlat/cap_mask0.h
+++ b/xlat/cap_mask0.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/cap_mask0.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat cap_mask0 in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat cap_mask0 in mpers mode
+
+# else
 
 static
 const struct xlat cap_mask0[] = {
@@ -43,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/cap_mask1.h b/xlat/cap_mask1.h
index 074f5c6..c32c019 100644
--- a/xlat/cap_mask1.h
+++ b/xlat/cap_mask1.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/cap_mask1.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat cap_mask1 in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat cap_mask1 in mpers mode
+
+# else
 
 static
 const struct xlat cap_mask1[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/cap_version.h b/xlat/cap_version.h
index 35c9189..69ca874 100644
--- a/xlat/cap_version.h
+++ b/xlat/cap_version.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/cap_version.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat cap_version in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat cap_version in mpers mode
+
+# else
 
 static
 const struct xlat cap_version[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/clockflags.h b/xlat/clockflags.h
index d24419d..4f343a1 100644
--- a/xlat/clockflags.h
+++ b/xlat/clockflags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/clockflags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat clockflags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat clockflags in mpers mode
+
+# else
 
 static
 const struct xlat clockflags[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/clocknames.h b/xlat/clocknames.h
index da082e8..a2932f9 100644
--- a/xlat/clocknames.h
+++ b/xlat/clocknames.h
@@ -1,57 +1,113 @@
 /* Generated by ./xlat/gen.sh from ./xlat/clocknames.in; do not edit. */
-#if !(defined(CLOCK_REALTIME) || (defined(HAVE_DECL_CLOCK_REALTIME) && HAVE_DECL_CLOCK_REALTIME))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(CLOCK_REALTIME) || (defined(HAVE_DECL_CLOCK_REALTIME) && HAVE_DECL_CLOCK_REALTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_REALTIME) == (0), "CLOCK_REALTIME != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_REALTIME 0
 #endif
-#if !(defined(CLOCK_MONOTONIC) || (defined(HAVE_DECL_CLOCK_MONOTONIC) && HAVE_DECL_CLOCK_MONOTONIC))
+#if defined(CLOCK_MONOTONIC) || (defined(HAVE_DECL_CLOCK_MONOTONIC) && HAVE_DECL_CLOCK_MONOTONIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_MONOTONIC) == (1), "CLOCK_MONOTONIC != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_MONOTONIC 1
 #endif
-#if !(defined(CLOCK_PROCESS_CPUTIME_ID) || (defined(HAVE_DECL_CLOCK_PROCESS_CPUTIME_ID) && HAVE_DECL_CLOCK_PROCESS_CPUTIME_ID))
+#if defined(CLOCK_PROCESS_CPUTIME_ID) || (defined(HAVE_DECL_CLOCK_PROCESS_CPUTIME_ID) && HAVE_DECL_CLOCK_PROCESS_CPUTIME_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_PROCESS_CPUTIME_ID) == (2), "CLOCK_PROCESS_CPUTIME_ID != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_PROCESS_CPUTIME_ID 2
 #endif
-#if !(defined(CLOCK_THREAD_CPUTIME_ID) || (defined(HAVE_DECL_CLOCK_THREAD_CPUTIME_ID) && HAVE_DECL_CLOCK_THREAD_CPUTIME_ID))
+#if defined(CLOCK_THREAD_CPUTIME_ID) || (defined(HAVE_DECL_CLOCK_THREAD_CPUTIME_ID) && HAVE_DECL_CLOCK_THREAD_CPUTIME_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_THREAD_CPUTIME_ID) == (3), "CLOCK_THREAD_CPUTIME_ID != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_THREAD_CPUTIME_ID 3
 #endif
-#if !(defined(CLOCK_MONOTONIC_RAW) || (defined(HAVE_DECL_CLOCK_MONOTONIC_RAW) && HAVE_DECL_CLOCK_MONOTONIC_RAW))
+#if defined(CLOCK_MONOTONIC_RAW) || (defined(HAVE_DECL_CLOCK_MONOTONIC_RAW) && HAVE_DECL_CLOCK_MONOTONIC_RAW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_MONOTONIC_RAW) == (4), "CLOCK_MONOTONIC_RAW != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_MONOTONIC_RAW 4
 #endif
-#if !(defined(CLOCK_REALTIME_COARSE) || (defined(HAVE_DECL_CLOCK_REALTIME_COARSE) && HAVE_DECL_CLOCK_REALTIME_COARSE))
+#if defined(CLOCK_REALTIME_COARSE) || (defined(HAVE_DECL_CLOCK_REALTIME_COARSE) && HAVE_DECL_CLOCK_REALTIME_COARSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_REALTIME_COARSE) == (5), "CLOCK_REALTIME_COARSE != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_REALTIME_COARSE 5
 #endif
-#if !(defined(CLOCK_MONOTONIC_COARSE) || (defined(HAVE_DECL_CLOCK_MONOTONIC_COARSE) && HAVE_DECL_CLOCK_MONOTONIC_COARSE))
+#if defined(CLOCK_MONOTONIC_COARSE) || (defined(HAVE_DECL_CLOCK_MONOTONIC_COARSE) && HAVE_DECL_CLOCK_MONOTONIC_COARSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_MONOTONIC_COARSE) == (6), "CLOCK_MONOTONIC_COARSE != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_MONOTONIC_COARSE 6
 #endif
-#if !(defined(CLOCK_BOOTTIME) || (defined(HAVE_DECL_CLOCK_BOOTTIME) && HAVE_DECL_CLOCK_BOOTTIME))
+#if defined(CLOCK_BOOTTIME) || (defined(HAVE_DECL_CLOCK_BOOTTIME) && HAVE_DECL_CLOCK_BOOTTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_BOOTTIME) == (7), "CLOCK_BOOTTIME != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_BOOTTIME 7
 #endif
-#if !(defined(CLOCK_REALTIME_ALARM) || (defined(HAVE_DECL_CLOCK_REALTIME_ALARM) && HAVE_DECL_CLOCK_REALTIME_ALARM))
+#if defined(CLOCK_REALTIME_ALARM) || (defined(HAVE_DECL_CLOCK_REALTIME_ALARM) && HAVE_DECL_CLOCK_REALTIME_ALARM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_REALTIME_ALARM) == (8), "CLOCK_REALTIME_ALARM != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_REALTIME_ALARM 8
 #endif
-#if !(defined(CLOCK_BOOTTIME_ALARM) || (defined(HAVE_DECL_CLOCK_BOOTTIME_ALARM) && HAVE_DECL_CLOCK_BOOTTIME_ALARM))
+#if defined(CLOCK_BOOTTIME_ALARM) || (defined(HAVE_DECL_CLOCK_BOOTTIME_ALARM) && HAVE_DECL_CLOCK_BOOTTIME_ALARM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_BOOTTIME_ALARM) == (9), "CLOCK_BOOTTIME_ALARM != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_BOOTTIME_ALARM 9
 #endif
-#if !(defined(CLOCK_SGI_CYCLE) || (defined(HAVE_DECL_CLOCK_SGI_CYCLE) && HAVE_DECL_CLOCK_SGI_CYCLE))
+#if defined(CLOCK_SGI_CYCLE) || (defined(HAVE_DECL_CLOCK_SGI_CYCLE) && HAVE_DECL_CLOCK_SGI_CYCLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_SGI_CYCLE) == (10), "CLOCK_SGI_CYCLE != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_SGI_CYCLE 10
 #endif
-#if !(defined(CLOCK_TAI) || (defined(HAVE_DECL_CLOCK_TAI) && HAVE_DECL_CLOCK_TAI))
+#if defined(CLOCK_TAI) || (defined(HAVE_DECL_CLOCK_TAI) && HAVE_DECL_CLOCK_TAI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLOCK_TAI) == (11), "CLOCK_TAI != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLOCK_TAI 11
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat clocknames[] = {
- XLAT(CLOCK_REALTIME),
- XLAT(CLOCK_MONOTONIC),
- XLAT(CLOCK_PROCESS_CPUTIME_ID),
- XLAT(CLOCK_THREAD_CPUTIME_ID),
- XLAT(CLOCK_MONOTONIC_RAW),
- XLAT(CLOCK_REALTIME_COARSE),
- XLAT(CLOCK_MONOTONIC_COARSE),
- XLAT(CLOCK_BOOTTIME),
- XLAT(CLOCK_REALTIME_ALARM),
- XLAT(CLOCK_BOOTTIME_ALARM),
- XLAT(CLOCK_SGI_CYCLE),
- XLAT(CLOCK_TAI),
+ [CLOCK_REALTIME] = XLAT(CLOCK_REALTIME),
+ [CLOCK_MONOTONIC] = XLAT(CLOCK_MONOTONIC),
+ [CLOCK_PROCESS_CPUTIME_ID] = XLAT(CLOCK_PROCESS_CPUTIME_ID),
+ [CLOCK_THREAD_CPUTIME_ID] = XLAT(CLOCK_THREAD_CPUTIME_ID),
+ [CLOCK_MONOTONIC_RAW] = XLAT(CLOCK_MONOTONIC_RAW),
+ [CLOCK_REALTIME_COARSE] = XLAT(CLOCK_REALTIME_COARSE),
+ [CLOCK_MONOTONIC_COARSE] = XLAT(CLOCK_MONOTONIC_COARSE),
+ [CLOCK_BOOTTIME] = XLAT(CLOCK_BOOTTIME),
+ [CLOCK_REALTIME_ALARM] = XLAT(CLOCK_REALTIME_ALARM),
+ [CLOCK_BOOTTIME_ALARM] = XLAT(CLOCK_BOOTTIME_ALARM),
+ [CLOCK_SGI_CYCLE] = XLAT(CLOCK_SGI_CYCLE),
+ [CLOCK_TAI] = XLAT(CLOCK_TAI),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/clocknames.in b/xlat/clocknames.in
index 1d0d372..207ade8 100644
--- a/xlat/clocknames.in
+++ b/xlat/clocknames.in
@@ -1,3 +1,4 @@
+#value_indexed
 CLOCK_REALTIME 0
 CLOCK_MONOTONIC 1
 CLOCK_PROCESS_CPUTIME_ID 2
diff --git a/xlat/clone_flags.h b/xlat/clone_flags.h
index a7e4c4b..d2d939f 100644
--- a/xlat/clone_flags.h
+++ b/xlat/clone_flags.h
@@ -1,79 +1,177 @@
 /* Generated by ./xlat/gen.sh from ./xlat/clone_flags.in; do not edit. */
-#if !(defined(CLONE_VM) || (defined(HAVE_DECL_CLONE_VM) && HAVE_DECL_CLONE_VM))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(CLONE_VM) || (defined(HAVE_DECL_CLONE_VM) && HAVE_DECL_CLONE_VM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_VM) == (0x00000100), "CLONE_VM != 0x00000100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_VM 0x00000100
 #endif
-#if !(defined(CLONE_FS) || (defined(HAVE_DECL_CLONE_FS) && HAVE_DECL_CLONE_FS))
+#if defined(CLONE_FS) || (defined(HAVE_DECL_CLONE_FS) && HAVE_DECL_CLONE_FS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_FS) == (0x00000200), "CLONE_FS != 0x00000200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_FS 0x00000200
 #endif
-#if !(defined(CLONE_FILES) || (defined(HAVE_DECL_CLONE_FILES) && HAVE_DECL_CLONE_FILES))
+#if defined(CLONE_FILES) || (defined(HAVE_DECL_CLONE_FILES) && HAVE_DECL_CLONE_FILES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_FILES) == (0x00000400), "CLONE_FILES != 0x00000400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_FILES 0x00000400
 #endif
-#if !(defined(CLONE_SIGHAND) || (defined(HAVE_DECL_CLONE_SIGHAND) && HAVE_DECL_CLONE_SIGHAND))
+#if defined(CLONE_SIGHAND) || (defined(HAVE_DECL_CLONE_SIGHAND) && HAVE_DECL_CLONE_SIGHAND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_SIGHAND) == (0x00000800), "CLONE_SIGHAND != 0x00000800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_SIGHAND 0x00000800
 #endif
-#if !(defined(CLONE_IDLETASK) || (defined(HAVE_DECL_CLONE_IDLETASK) && HAVE_DECL_CLONE_IDLETASK))
+#if defined(CLONE_IDLETASK) || (defined(HAVE_DECL_CLONE_IDLETASK) && HAVE_DECL_CLONE_IDLETASK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_IDLETASK) == (0x00001000), "CLONE_IDLETASK != 0x00001000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_IDLETASK 0x00001000
 #endif
-#if !(defined(CLONE_PTRACE) || (defined(HAVE_DECL_CLONE_PTRACE) && HAVE_DECL_CLONE_PTRACE))
+#if defined(CLONE_PTRACE) || (defined(HAVE_DECL_CLONE_PTRACE) && HAVE_DECL_CLONE_PTRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_PTRACE) == (0x00002000), "CLONE_PTRACE != 0x00002000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_PTRACE 0x00002000
 #endif
-#if !(defined(CLONE_VFORK) || (defined(HAVE_DECL_CLONE_VFORK) && HAVE_DECL_CLONE_VFORK))
+#if defined(CLONE_VFORK) || (defined(HAVE_DECL_CLONE_VFORK) && HAVE_DECL_CLONE_VFORK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_VFORK) == (0x00004000), "CLONE_VFORK != 0x00004000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_VFORK 0x00004000
 #endif
-#if !(defined(CLONE_PARENT) || (defined(HAVE_DECL_CLONE_PARENT) && HAVE_DECL_CLONE_PARENT))
+#if defined(CLONE_PARENT) || (defined(HAVE_DECL_CLONE_PARENT) && HAVE_DECL_CLONE_PARENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_PARENT) == (0x00008000), "CLONE_PARENT != 0x00008000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_PARENT 0x00008000
 #endif
-#if !(defined(CLONE_THREAD) || (defined(HAVE_DECL_CLONE_THREAD) && HAVE_DECL_CLONE_THREAD))
+#if defined(CLONE_THREAD) || (defined(HAVE_DECL_CLONE_THREAD) && HAVE_DECL_CLONE_THREAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_THREAD) == (0x00010000), "CLONE_THREAD != 0x00010000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_THREAD 0x00010000
 #endif
-#if !(defined(CLONE_NEWNS) || (defined(HAVE_DECL_CLONE_NEWNS) && HAVE_DECL_CLONE_NEWNS))
+#if defined(CLONE_NEWNS) || (defined(HAVE_DECL_CLONE_NEWNS) && HAVE_DECL_CLONE_NEWNS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWNS) == (0x00020000), "CLONE_NEWNS != 0x00020000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWNS 0x00020000
 #endif
-#if !(defined(CLONE_SYSVSEM) || (defined(HAVE_DECL_CLONE_SYSVSEM) && HAVE_DECL_CLONE_SYSVSEM))
+#if defined(CLONE_SYSVSEM) || (defined(HAVE_DECL_CLONE_SYSVSEM) && HAVE_DECL_CLONE_SYSVSEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_SYSVSEM) == (0x00040000), "CLONE_SYSVSEM != 0x00040000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_SYSVSEM 0x00040000
 #endif
-#if !(defined(CLONE_SETTLS) || (defined(HAVE_DECL_CLONE_SETTLS) && HAVE_DECL_CLONE_SETTLS))
+#if defined(CLONE_SETTLS) || (defined(HAVE_DECL_CLONE_SETTLS) && HAVE_DECL_CLONE_SETTLS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_SETTLS) == (0x00080000), "CLONE_SETTLS != 0x00080000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_SETTLS 0x00080000
 #endif
-#if !(defined(CLONE_PARENT_SETTID) || (defined(HAVE_DECL_CLONE_PARENT_SETTID) && HAVE_DECL_CLONE_PARENT_SETTID))
+#if defined(CLONE_PARENT_SETTID) || (defined(HAVE_DECL_CLONE_PARENT_SETTID) && HAVE_DECL_CLONE_PARENT_SETTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_PARENT_SETTID) == (0x00100000), "CLONE_PARENT_SETTID != 0x00100000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_PARENT_SETTID 0x00100000
 #endif
-#if !(defined(CLONE_CHILD_CLEARTID) || (defined(HAVE_DECL_CLONE_CHILD_CLEARTID) && HAVE_DECL_CLONE_CHILD_CLEARTID))
+#if defined(CLONE_CHILD_CLEARTID) || (defined(HAVE_DECL_CLONE_CHILD_CLEARTID) && HAVE_DECL_CLONE_CHILD_CLEARTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_CHILD_CLEARTID) == (0x00200000), "CLONE_CHILD_CLEARTID != 0x00200000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_CHILD_CLEARTID 0x00200000
 #endif
-#if !(defined(CLONE_UNTRACED) || (defined(HAVE_DECL_CLONE_UNTRACED) && HAVE_DECL_CLONE_UNTRACED))
+#if defined(CLONE_UNTRACED) || (defined(HAVE_DECL_CLONE_UNTRACED) && HAVE_DECL_CLONE_UNTRACED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_UNTRACED) == (0x00800000), "CLONE_UNTRACED != 0x00800000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_UNTRACED 0x00800000
 #endif
-#if !(defined(CLONE_CHILD_SETTID) || (defined(HAVE_DECL_CLONE_CHILD_SETTID) && HAVE_DECL_CLONE_CHILD_SETTID))
+#if defined(CLONE_CHILD_SETTID) || (defined(HAVE_DECL_CLONE_CHILD_SETTID) && HAVE_DECL_CLONE_CHILD_SETTID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_CHILD_SETTID) == (0x01000000), "CLONE_CHILD_SETTID != 0x01000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_CHILD_SETTID 0x01000000
 #endif
-#if !(defined(CLONE_NEWCGROUP) || (defined(HAVE_DECL_CLONE_NEWCGROUP) && HAVE_DECL_CLONE_NEWCGROUP))
+#if defined(CLONE_NEWCGROUP) || (defined(HAVE_DECL_CLONE_NEWCGROUP) && HAVE_DECL_CLONE_NEWCGROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWCGROUP) == (0x02000000), "CLONE_NEWCGROUP != 0x02000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWCGROUP 0x02000000
 #endif
-#if !(defined(CLONE_NEWUTS) || (defined(HAVE_DECL_CLONE_NEWUTS) && HAVE_DECL_CLONE_NEWUTS))
+#if defined(CLONE_NEWUTS) || (defined(HAVE_DECL_CLONE_NEWUTS) && HAVE_DECL_CLONE_NEWUTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWUTS) == (0x04000000), "CLONE_NEWUTS != 0x04000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWUTS 0x04000000
 #endif
-#if !(defined(CLONE_NEWIPC) || (defined(HAVE_DECL_CLONE_NEWIPC) && HAVE_DECL_CLONE_NEWIPC))
+#if defined(CLONE_NEWIPC) || (defined(HAVE_DECL_CLONE_NEWIPC) && HAVE_DECL_CLONE_NEWIPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWIPC) == (0x08000000), "CLONE_NEWIPC != 0x08000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWIPC 0x08000000
 #endif
-#if !(defined(CLONE_NEWUSER) || (defined(HAVE_DECL_CLONE_NEWUSER) && HAVE_DECL_CLONE_NEWUSER))
+#if defined(CLONE_NEWUSER) || (defined(HAVE_DECL_CLONE_NEWUSER) && HAVE_DECL_CLONE_NEWUSER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWUSER) == (0x10000000), "CLONE_NEWUSER != 0x10000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWUSER 0x10000000
 #endif
-#if !(defined(CLONE_NEWPID) || (defined(HAVE_DECL_CLONE_NEWPID) && HAVE_DECL_CLONE_NEWPID))
+#if defined(CLONE_NEWPID) || (defined(HAVE_DECL_CLONE_NEWPID) && HAVE_DECL_CLONE_NEWPID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWPID) == (0x20000000), "CLONE_NEWPID != 0x20000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWPID 0x20000000
 #endif
-#if !(defined(CLONE_NEWNET) || (defined(HAVE_DECL_CLONE_NEWNET) && HAVE_DECL_CLONE_NEWNET))
+#if defined(CLONE_NEWNET) || (defined(HAVE_DECL_CLONE_NEWNET) && HAVE_DECL_CLONE_NEWNET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWNET) == (0x40000000), "CLONE_NEWNET != 0x40000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWNET 0x40000000
 #endif
-#if !(defined(CLONE_IO) || (defined(HAVE_DECL_CLONE_IO) && HAVE_DECL_CLONE_IO))
+#if defined(CLONE_IO) || (defined(HAVE_DECL_CLONE_IO) && HAVE_DECL_CLONE_IO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_IO) == (0x80000000), "CLONE_IO != 0x80000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_IO 0x80000000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat clone_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat clone_flags in mpers mode
+
+# else
 
 static
 const struct xlat clone_flags[] = {
@@ -103,4 +201,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/cpuclocknames.h b/xlat/cpuclocknames.h
index 8975159..93331c9 100644
--- a/xlat/cpuclocknames.h
+++ b/xlat/cpuclocknames.h
@@ -1,23 +1,46 @@
 /* Generated by ./xlat/gen.sh from ./xlat/cpuclocknames.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat cpuclocknames in mpers mode
-
+#if defined(CPUCLOCK_PROF) || (defined(HAVE_DECL_CPUCLOCK_PROF) && HAVE_DECL_CPUCLOCK_PROF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CPUCLOCK_PROF) == (0), "CPUCLOCK_PROF != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define CPUCLOCK_PROF 0
+#endif
+#if defined(CPUCLOCK_VIRT) || (defined(HAVE_DECL_CPUCLOCK_VIRT) && HAVE_DECL_CPUCLOCK_VIRT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CPUCLOCK_VIRT) == (1), "CPUCLOCK_VIRT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CPUCLOCK_VIRT 1
+#endif
+#if defined(CPUCLOCK_SCHED) || (defined(HAVE_DECL_CPUCLOCK_SCHED) && HAVE_DECL_CPUCLOCK_SCHED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CPUCLOCK_SCHED) == (2), "CPUCLOCK_SCHED != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CPUCLOCK_SCHED 2
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat cpuclocknames in mpers mode
+
+# else
 
 static
 const struct xlat cpuclocknames[] = {
-#if defined(CPUCLOCK_PROF) || (defined(HAVE_DECL_CPUCLOCK_PROF) && HAVE_DECL_CPUCLOCK_PROF)
-  XLAT(CPUCLOCK_PROF),
-#endif
-#if defined(CPUCLOCK_VIRT) || (defined(HAVE_DECL_CPUCLOCK_VIRT) && HAVE_DECL_CPUCLOCK_VIRT)
-  XLAT(CPUCLOCK_VIRT),
-#endif
-#if defined(CPUCLOCK_SCHED) || (defined(HAVE_DECL_CPUCLOCK_SCHED) && HAVE_DECL_CPUCLOCK_SCHED)
-  XLAT(CPUCLOCK_SCHED),
-#endif
+ [CPUCLOCK_PROF] = XLAT(CPUCLOCK_PROF),
+ [CPUCLOCK_VIRT] = XLAT(CPUCLOCK_VIRT),
+ [CPUCLOCK_SCHED] = XLAT(CPUCLOCK_SCHED),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/cpuclocknames.in b/xlat/cpuclocknames.in
index e61fa8f..b7b9a82 100644
--- a/xlat/cpuclocknames.in
+++ b/xlat/cpuclocknames.in
@@ -1,3 +1,4 @@
-CPUCLOCK_PROF
-CPUCLOCK_VIRT
-CPUCLOCK_SCHED
+#value_indexed
+CPUCLOCK_PROF	0
+CPUCLOCK_VIRT	1
+CPUCLOCK_SCHED	2
diff --git a/xlat/crypto_nl_attrs.h b/xlat/crypto_nl_attrs.h
index aebd38a..46fbcb8 100644
--- a/xlat/crypto_nl_attrs.h
+++ b/xlat/crypto_nl_attrs.h
@@ -1,46 +1,100 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(CRYPTOCFGA_UNSPEC) || (defined(HAVE_DECL_CRYPTOCFGA_UNSPEC) && HAVE_DECL_CRYPTOCFGA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_UNSPEC) == (0), "CRYPTOCFGA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_UNSPEC 0
 #endif
-#if !(defined(CRYPTOCFGA_PRIORITY_VAL) || (defined(HAVE_DECL_CRYPTOCFGA_PRIORITY_VAL) && HAVE_DECL_CRYPTOCFGA_PRIORITY_VAL))
+#if defined(CRYPTOCFGA_PRIORITY_VAL) || (defined(HAVE_DECL_CRYPTOCFGA_PRIORITY_VAL) && HAVE_DECL_CRYPTOCFGA_PRIORITY_VAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_PRIORITY_VAL) == (1), "CRYPTOCFGA_PRIORITY_VAL != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_PRIORITY_VAL 1
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_LARVAL) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_LARVAL) && HAVE_DECL_CRYPTOCFGA_REPORT_LARVAL))
+#if defined(CRYPTOCFGA_REPORT_LARVAL) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_LARVAL) && HAVE_DECL_CRYPTOCFGA_REPORT_LARVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_LARVAL) == (2), "CRYPTOCFGA_REPORT_LARVAL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_LARVAL 2
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_HASH) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_HASH) && HAVE_DECL_CRYPTOCFGA_REPORT_HASH))
+#if defined(CRYPTOCFGA_REPORT_HASH) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_HASH) && HAVE_DECL_CRYPTOCFGA_REPORT_HASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_HASH) == (3), "CRYPTOCFGA_REPORT_HASH != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_HASH 3
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_BLKCIPHER) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_BLKCIPHER) && HAVE_DECL_CRYPTOCFGA_REPORT_BLKCIPHER))
+#if defined(CRYPTOCFGA_REPORT_BLKCIPHER) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_BLKCIPHER) && HAVE_DECL_CRYPTOCFGA_REPORT_BLKCIPHER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_BLKCIPHER) == (4), "CRYPTOCFGA_REPORT_BLKCIPHER != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_BLKCIPHER 4
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_AEAD) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_AEAD) && HAVE_DECL_CRYPTOCFGA_REPORT_AEAD))
+#if defined(CRYPTOCFGA_REPORT_AEAD) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_AEAD) && HAVE_DECL_CRYPTOCFGA_REPORT_AEAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_AEAD) == (5), "CRYPTOCFGA_REPORT_AEAD != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_AEAD 5
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_COMPRESS) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_COMPRESS) && HAVE_DECL_CRYPTOCFGA_REPORT_COMPRESS))
+#if defined(CRYPTOCFGA_REPORT_COMPRESS) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_COMPRESS) && HAVE_DECL_CRYPTOCFGA_REPORT_COMPRESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_COMPRESS) == (6), "CRYPTOCFGA_REPORT_COMPRESS != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_COMPRESS 6
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_RNG) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_RNG) && HAVE_DECL_CRYPTOCFGA_REPORT_RNG))
+#if defined(CRYPTOCFGA_REPORT_RNG) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_RNG) && HAVE_DECL_CRYPTOCFGA_REPORT_RNG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_RNG) == (7), "CRYPTOCFGA_REPORT_RNG != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_RNG 7
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_CIPHER) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_CIPHER) && HAVE_DECL_CRYPTOCFGA_REPORT_CIPHER))
+#if defined(CRYPTOCFGA_REPORT_CIPHER) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_CIPHER) && HAVE_DECL_CRYPTOCFGA_REPORT_CIPHER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_CIPHER) == (8), "CRYPTOCFGA_REPORT_CIPHER != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_CIPHER 8
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_AKCIPHER) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_AKCIPHER) && HAVE_DECL_CRYPTOCFGA_REPORT_AKCIPHER))
+#if defined(CRYPTOCFGA_REPORT_AKCIPHER) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_AKCIPHER) && HAVE_DECL_CRYPTOCFGA_REPORT_AKCIPHER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_AKCIPHER) == (9), "CRYPTOCFGA_REPORT_AKCIPHER != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_AKCIPHER 9
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_KPP) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_KPP) && HAVE_DECL_CRYPTOCFGA_REPORT_KPP))
+#if defined(CRYPTOCFGA_REPORT_KPP) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_KPP) && HAVE_DECL_CRYPTOCFGA_REPORT_KPP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_KPP) == (10), "CRYPTOCFGA_REPORT_KPP != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_KPP 10
 #endif
-#if !(defined(CRYPTOCFGA_REPORT_ACOMP) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_ACOMP) && HAVE_DECL_CRYPTOCFGA_REPORT_ACOMP))
+#if defined(CRYPTOCFGA_REPORT_ACOMP) || (defined(HAVE_DECL_CRYPTOCFGA_REPORT_ACOMP) && HAVE_DECL_CRYPTOCFGA_REPORT_ACOMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTOCFGA_REPORT_ACOMP) == (11), "CRYPTOCFGA_REPORT_ACOMP != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTOCFGA_REPORT_ACOMP 11
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat crypto_nl_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat crypto_nl_attrs in mpers mode
+
+# else
 
 static
 const struct xlat crypto_nl_attrs[] = {
@@ -59,4 +113,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/dcb_commands.h b/xlat/dcb_commands.h
index a6fe22c..768dbc1 100644
--- a/xlat/dcb_commands.h
+++ b/xlat/dcb_commands.h
@@ -1,94 +1,212 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(DCB_CMD_UNDEFINED) || (defined(HAVE_DECL_DCB_CMD_UNDEFINED) && HAVE_DECL_DCB_CMD_UNDEFINED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_UNDEFINED) == (0), "DCB_CMD_UNDEFINED != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_UNDEFINED 0
 #endif
-#if !(defined(DCB_CMD_GSTATE) || (defined(HAVE_DECL_DCB_CMD_GSTATE) && HAVE_DECL_DCB_CMD_GSTATE))
+#if defined(DCB_CMD_GSTATE) || (defined(HAVE_DECL_DCB_CMD_GSTATE) && HAVE_DECL_DCB_CMD_GSTATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_GSTATE) == (1), "DCB_CMD_GSTATE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_GSTATE 1
 #endif
-#if !(defined(DCB_CMD_SSTATE) || (defined(HAVE_DECL_DCB_CMD_SSTATE) && HAVE_DECL_DCB_CMD_SSTATE))
+#if defined(DCB_CMD_SSTATE) || (defined(HAVE_DECL_DCB_CMD_SSTATE) && HAVE_DECL_DCB_CMD_SSTATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_SSTATE) == (2), "DCB_CMD_SSTATE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_PGTX_GCFG) || (defined(HAVE_DECL_DCB_CMD_PGTX_GCFG) && HAVE_DECL_DCB_CMD_PGTX_GCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_PGTX_GCFG) == (3), "DCB_CMD_PGTX_GCFG != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_PGTX_SCFG) || (defined(HAVE_DECL_DCB_CMD_PGTX_SCFG) && HAVE_DECL_DCB_CMD_PGTX_SCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_PGTX_SCFG) == (4), "DCB_CMD_PGTX_SCFG != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_PGRX_GCFG) || (defined(HAVE_DECL_DCB_CMD_PGRX_GCFG) && HAVE_DECL_DCB_CMD_PGRX_GCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_PGRX_GCFG) == (5), "DCB_CMD_PGRX_GCFG != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_PGRX_SCFG) || (defined(HAVE_DECL_DCB_CMD_PGRX_SCFG) && HAVE_DECL_DCB_CMD_PGRX_SCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_PGRX_SCFG) == (6), "DCB_CMD_PGRX_SCFG != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_PFC_GCFG) || (defined(HAVE_DECL_DCB_CMD_PFC_GCFG) && HAVE_DECL_DCB_CMD_PFC_GCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_PFC_GCFG) == (7), "DCB_CMD_PFC_GCFG != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_PFC_SCFG) || (defined(HAVE_DECL_DCB_CMD_PFC_SCFG) && HAVE_DECL_DCB_CMD_PFC_SCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_PFC_SCFG) == (8), "DCB_CMD_PFC_SCFG != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_SET_ALL) || (defined(HAVE_DECL_DCB_CMD_SET_ALL) && HAVE_DECL_DCB_CMD_SET_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_SET_ALL) == (9), "DCB_CMD_SET_ALL != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_GPERM_HWADDR) || (defined(HAVE_DECL_DCB_CMD_GPERM_HWADDR) && HAVE_DECL_DCB_CMD_GPERM_HWADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_GPERM_HWADDR) == (10), "DCB_CMD_GPERM_HWADDR != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_GPERM_HWADDR 10
 #endif
-#if !(defined(DCB_CMD_GCAP) || (defined(HAVE_DECL_DCB_CMD_GCAP) && HAVE_DECL_DCB_CMD_GCAP))
+#if defined(DCB_CMD_GCAP) || (defined(HAVE_DECL_DCB_CMD_GCAP) && HAVE_DECL_DCB_CMD_GCAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_GCAP) == (11), "DCB_CMD_GCAP != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_GCAP 11
 #endif
-#if !(defined(DCB_CMD_GNUMTCS) || (defined(HAVE_DECL_DCB_CMD_GNUMTCS) && HAVE_DECL_DCB_CMD_GNUMTCS))
+#if defined(DCB_CMD_GNUMTCS) || (defined(HAVE_DECL_DCB_CMD_GNUMTCS) && HAVE_DECL_DCB_CMD_GNUMTCS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_GNUMTCS) == (12), "DCB_CMD_GNUMTCS != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_GNUMTCS 12
 #endif
-#if !(defined(DCB_CMD_SNUMTCS) || (defined(HAVE_DECL_DCB_CMD_SNUMTCS) && HAVE_DECL_DCB_CMD_SNUMTCS))
+#if defined(DCB_CMD_SNUMTCS) || (defined(HAVE_DECL_DCB_CMD_SNUMTCS) && HAVE_DECL_DCB_CMD_SNUMTCS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_SNUMTCS) == (13), "DCB_CMD_SNUMTCS != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_PFC_GSTATE) || (defined(HAVE_DECL_DCB_CMD_PFC_GSTATE) && HAVE_DECL_DCB_CMD_PFC_GSTATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_PFC_GSTATE) == (14), "DCB_CMD_PFC_GSTATE != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_PFC_SSTATE) || (defined(HAVE_DECL_DCB_CMD_PFC_SSTATE) && HAVE_DECL_DCB_CMD_PFC_SSTATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_PFC_SSTATE) == (15), "DCB_CMD_PFC_SSTATE != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_BCN_GCFG) || (defined(HAVE_DECL_DCB_CMD_BCN_GCFG) && HAVE_DECL_DCB_CMD_BCN_GCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_BCN_GCFG) == (16), "DCB_CMD_BCN_GCFG != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_BCN_SCFG) || (defined(HAVE_DECL_DCB_CMD_BCN_SCFG) && HAVE_DECL_DCB_CMD_BCN_SCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_BCN_SCFG) == (17), "DCB_CMD_BCN_SCFG != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_BCN_SCFG 17
 #endif
-#if !(defined(DCB_CMD_GAPP) || (defined(HAVE_DECL_DCB_CMD_GAPP) && HAVE_DECL_DCB_CMD_GAPP))
+#if defined(DCB_CMD_GAPP) || (defined(HAVE_DECL_DCB_CMD_GAPP) && HAVE_DECL_DCB_CMD_GAPP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_GAPP) == (18), "DCB_CMD_GAPP != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_GAPP 18
 #endif
-#if !(defined(DCB_CMD_SAPP) || (defined(HAVE_DECL_DCB_CMD_SAPP) && HAVE_DECL_DCB_CMD_SAPP))
+#if defined(DCB_CMD_SAPP) || (defined(HAVE_DECL_DCB_CMD_SAPP) && HAVE_DECL_DCB_CMD_SAPP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_SAPP) == (19), "DCB_CMD_SAPP != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_IEEE_SET) || (defined(HAVE_DECL_DCB_CMD_IEEE_SET) && HAVE_DECL_DCB_CMD_IEEE_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_IEEE_SET) == (20), "DCB_CMD_IEEE_SET != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_IEEE_GET) || (defined(HAVE_DECL_DCB_CMD_IEEE_GET) && HAVE_DECL_DCB_CMD_IEEE_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_IEEE_GET) == (21), "DCB_CMD_IEEE_GET != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_IEEE_GET 21
 #endif
-#if !(defined(DCB_CMD_GDCBX) || (defined(HAVE_DECL_DCB_CMD_GDCBX) && HAVE_DECL_DCB_CMD_GDCBX))
+#if defined(DCB_CMD_GDCBX) || (defined(HAVE_DECL_DCB_CMD_GDCBX) && HAVE_DECL_DCB_CMD_GDCBX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_GDCBX) == (22), "DCB_CMD_GDCBX != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_GDCBX 22
 #endif
-#if !(defined(DCB_CMD_SDCBX) || (defined(HAVE_DECL_DCB_CMD_SDCBX) && HAVE_DECL_DCB_CMD_SDCBX))
+#if defined(DCB_CMD_SDCBX) || (defined(HAVE_DECL_DCB_CMD_SDCBX) && HAVE_DECL_DCB_CMD_SDCBX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_SDCBX) == (23), "DCB_CMD_SDCBX != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_SDCBX 23
 #endif
-#if !(defined(DCB_CMD_GFEATCFG) || (defined(HAVE_DECL_DCB_CMD_GFEATCFG) && HAVE_DECL_DCB_CMD_GFEATCFG))
+#if defined(DCB_CMD_GFEATCFG) || (defined(HAVE_DECL_DCB_CMD_GFEATCFG) && HAVE_DECL_DCB_CMD_GFEATCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_GFEATCFG) == (24), "DCB_CMD_GFEATCFG != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_GFEATCFG 24
 #endif
-#if !(defined(DCB_CMD_SFEATCFG) || (defined(HAVE_DECL_DCB_CMD_SFEATCFG) && HAVE_DECL_DCB_CMD_SFEATCFG))
+#if defined(DCB_CMD_SFEATCFG) || (defined(HAVE_DECL_DCB_CMD_SFEATCFG) && HAVE_DECL_DCB_CMD_SFEATCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_SFEATCFG) == (25), "DCB_CMD_SFEATCFG != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_CEE_GET) || (defined(HAVE_DECL_DCB_CMD_CEE_GET) && HAVE_DECL_DCB_CMD_CEE_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_CEE_GET) == (26), "DCB_CMD_CEE_GET != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_CMD_IEEE_DEL) || (defined(HAVE_DECL_DCB_CMD_IEEE_DEL) && HAVE_DECL_DCB_CMD_IEEE_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_CMD_IEEE_DEL) == (27), "DCB_CMD_IEEE_DEL != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_CMD_IEEE_DEL 27
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat dcb_commands in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat dcb_commands in mpers mode
+
+# else
 
 static
 const struct xlat dcb_commands[] = {
@@ -123,4 +241,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/delete_module_flags.h b/xlat/delete_module_flags.h
index 279c45a..8c09810 100644
--- a/xlat/delete_module_flags.h
+++ b/xlat/delete_module_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/delete_module_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat delete_module_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat delete_module_flags in mpers mode
+
+# else
 
 static
 const struct xlat delete_module_flags[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/dirent_types.h b/xlat/dirent_types.h
index 42df495..0d21f50 100644
--- a/xlat/dirent_types.h
+++ b/xlat/dirent_types.h
@@ -1,6 +1,12 @@
 /* Generated by ./xlat/gen.sh from ./xlat/dirent_types.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat dirent_types[] = {
 #if defined(DT_UNKNOWN) || (defined(HAVE_DECL_DT_UNKNOWN) && HAVE_DECL_DT_UNKNOWN)
@@ -33,4 +39,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/dm_flags.h b/xlat/dm_flags.h
index 5573856..88b508c 100644
--- a/xlat/dm_flags.h
+++ b/xlat/dm_flags.h
@@ -1,64 +1,142 @@
 /* Generated by ./xlat/gen.sh from ./xlat/dm_flags.in; do not edit. */
-#if !(defined(DM_READONLY_FLAG) || (defined(HAVE_DECL_DM_READONLY_FLAG) && HAVE_DECL_DM_READONLY_FLAG))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(DM_READONLY_FLAG) || (defined(HAVE_DECL_DM_READONLY_FLAG) && HAVE_DECL_DM_READONLY_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_READONLY_FLAG) == ((1 << 0)), "DM_READONLY_FLAG != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_READONLY_FLAG (1 << 0)
 #endif
-#if !(defined(DM_SUSPEND_FLAG) || (defined(HAVE_DECL_DM_SUSPEND_FLAG) && HAVE_DECL_DM_SUSPEND_FLAG))
+#if defined(DM_SUSPEND_FLAG) || (defined(HAVE_DECL_DM_SUSPEND_FLAG) && HAVE_DECL_DM_SUSPEND_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_SUSPEND_FLAG) == ((1 << 1)), "DM_SUSPEND_FLAG != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_SUSPEND_FLAG (1 << 1)
 #endif
-#if !(defined(DM_EXISTS_FLAG) || (defined(HAVE_DECL_DM_EXISTS_FLAG) && HAVE_DECL_DM_EXISTS_FLAG))
+#if defined(DM_EXISTS_FLAG) || (defined(HAVE_DECL_DM_EXISTS_FLAG) && HAVE_DECL_DM_EXISTS_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_EXISTS_FLAG) == ((1 << 2)), "DM_EXISTS_FLAG != (1 << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_EXISTS_FLAG (1 << 2)
 #endif
-#if !(defined(DM_PERSISTENT_DEV_FLAG) || (defined(HAVE_DECL_DM_PERSISTENT_DEV_FLAG) && HAVE_DECL_DM_PERSISTENT_DEV_FLAG))
+#if defined(DM_PERSISTENT_DEV_FLAG) || (defined(HAVE_DECL_DM_PERSISTENT_DEV_FLAG) && HAVE_DECL_DM_PERSISTENT_DEV_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_PERSISTENT_DEV_FLAG) == ((1 << 3)), "DM_PERSISTENT_DEV_FLAG != (1 << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_PERSISTENT_DEV_FLAG (1 << 3)
 #endif
-#if !(defined(DM_STATUS_TABLE_FLAG) || (defined(HAVE_DECL_DM_STATUS_TABLE_FLAG) && HAVE_DECL_DM_STATUS_TABLE_FLAG))
+#if defined(DM_STATUS_TABLE_FLAG) || (defined(HAVE_DECL_DM_STATUS_TABLE_FLAG) && HAVE_DECL_DM_STATUS_TABLE_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_STATUS_TABLE_FLAG) == ((1 << 4)), "DM_STATUS_TABLE_FLAG != (1 << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_STATUS_TABLE_FLAG (1 << 4)
 #endif
-#if !(defined(DM_ACTIVE_PRESENT_FLAG) || (defined(HAVE_DECL_DM_ACTIVE_PRESENT_FLAG) && HAVE_DECL_DM_ACTIVE_PRESENT_FLAG))
+#if defined(DM_ACTIVE_PRESENT_FLAG) || (defined(HAVE_DECL_DM_ACTIVE_PRESENT_FLAG) && HAVE_DECL_DM_ACTIVE_PRESENT_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_ACTIVE_PRESENT_FLAG) == ((1 << 5)), "DM_ACTIVE_PRESENT_FLAG != (1 << 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_ACTIVE_PRESENT_FLAG (1 << 5)
 #endif
-#if !(defined(DM_INACTIVE_PRESENT_FLAG) || (defined(HAVE_DECL_DM_INACTIVE_PRESENT_FLAG) && HAVE_DECL_DM_INACTIVE_PRESENT_FLAG))
+#if defined(DM_INACTIVE_PRESENT_FLAG) || (defined(HAVE_DECL_DM_INACTIVE_PRESENT_FLAG) && HAVE_DECL_DM_INACTIVE_PRESENT_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_INACTIVE_PRESENT_FLAG) == ((1 << 6)), "DM_INACTIVE_PRESENT_FLAG != (1 << 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_INACTIVE_PRESENT_FLAG (1 << 6)
 #endif
-#if !(defined(DM_BUFFER_FULL_FLAG) || (defined(HAVE_DECL_DM_BUFFER_FULL_FLAG) && HAVE_DECL_DM_BUFFER_FULL_FLAG))
+#if defined(DM_BUFFER_FULL_FLAG) || (defined(HAVE_DECL_DM_BUFFER_FULL_FLAG) && HAVE_DECL_DM_BUFFER_FULL_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_BUFFER_FULL_FLAG) == ((1 << 8)), "DM_BUFFER_FULL_FLAG != (1 << 8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_BUFFER_FULL_FLAG (1 << 8)
 #endif
-#if !(defined(DM_SKIP_BDGET_FLAG) || (defined(HAVE_DECL_DM_SKIP_BDGET_FLAG) && HAVE_DECL_DM_SKIP_BDGET_FLAG))
+#if defined(DM_SKIP_BDGET_FLAG) || (defined(HAVE_DECL_DM_SKIP_BDGET_FLAG) && HAVE_DECL_DM_SKIP_BDGET_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_SKIP_BDGET_FLAG) == ((1 << 9)), "DM_SKIP_BDGET_FLAG != (1 << 9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_SKIP_BDGET_FLAG (1 << 9)
 #endif
-#if !(defined(DM_SKIP_LOCKFS_FLAG) || (defined(HAVE_DECL_DM_SKIP_LOCKFS_FLAG) && HAVE_DECL_DM_SKIP_LOCKFS_FLAG))
+#if defined(DM_SKIP_LOCKFS_FLAG) || (defined(HAVE_DECL_DM_SKIP_LOCKFS_FLAG) && HAVE_DECL_DM_SKIP_LOCKFS_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_SKIP_LOCKFS_FLAG) == ((1 << 10)), "DM_SKIP_LOCKFS_FLAG != (1 << 10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_SKIP_LOCKFS_FLAG (1 << 10)
 #endif
-#if !(defined(DM_NOFLUSH_FLAG) || (defined(HAVE_DECL_DM_NOFLUSH_FLAG) && HAVE_DECL_DM_NOFLUSH_FLAG))
+#if defined(DM_NOFLUSH_FLAG) || (defined(HAVE_DECL_DM_NOFLUSH_FLAG) && HAVE_DECL_DM_NOFLUSH_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_NOFLUSH_FLAG) == ((1 << 11)), "DM_NOFLUSH_FLAG != (1 << 11)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_NOFLUSH_FLAG (1 << 11)
 #endif
-#if !(defined(DM_QUERY_INACTIVE_TABLE_FLAG) || (defined(HAVE_DECL_DM_QUERY_INACTIVE_TABLE_FLAG) && HAVE_DECL_DM_QUERY_INACTIVE_TABLE_FLAG))
+#if defined(DM_QUERY_INACTIVE_TABLE_FLAG) || (defined(HAVE_DECL_DM_QUERY_INACTIVE_TABLE_FLAG) && HAVE_DECL_DM_QUERY_INACTIVE_TABLE_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_QUERY_INACTIVE_TABLE_FLAG) == ((1 << 12)), "DM_QUERY_INACTIVE_TABLE_FLAG != (1 << 12)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_QUERY_INACTIVE_TABLE_FLAG (1 << 12)
 #endif
-#if !(defined(DM_UEVENT_GENERATED_FLAG) || (defined(HAVE_DECL_DM_UEVENT_GENERATED_FLAG) && HAVE_DECL_DM_UEVENT_GENERATED_FLAG))
+#if defined(DM_UEVENT_GENERATED_FLAG) || (defined(HAVE_DECL_DM_UEVENT_GENERATED_FLAG) && HAVE_DECL_DM_UEVENT_GENERATED_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_UEVENT_GENERATED_FLAG) == ((1 << 13)), "DM_UEVENT_GENERATED_FLAG != (1 << 13)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_UEVENT_GENERATED_FLAG (1 << 13)
 #endif
-#if !(defined(DM_UUID_FLAG) || (defined(HAVE_DECL_DM_UUID_FLAG) && HAVE_DECL_DM_UUID_FLAG))
+#if defined(DM_UUID_FLAG) || (defined(HAVE_DECL_DM_UUID_FLAG) && HAVE_DECL_DM_UUID_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_UUID_FLAG) == ((1 << 14)), "DM_UUID_FLAG != (1 << 14)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_UUID_FLAG (1 << 14)
 #endif
-#if !(defined(DM_SECURE_DATA_FLAG) || (defined(HAVE_DECL_DM_SECURE_DATA_FLAG) && HAVE_DECL_DM_SECURE_DATA_FLAG))
+#if defined(DM_SECURE_DATA_FLAG) || (defined(HAVE_DECL_DM_SECURE_DATA_FLAG) && HAVE_DECL_DM_SECURE_DATA_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_SECURE_DATA_FLAG) == ((1 << 15)), "DM_SECURE_DATA_FLAG != (1 << 15)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_SECURE_DATA_FLAG (1 << 15)
 #endif
-#if !(defined(DM_DATA_OUT_FLAG) || (defined(HAVE_DECL_DM_DATA_OUT_FLAG) && HAVE_DECL_DM_DATA_OUT_FLAG))
+#if defined(DM_DATA_OUT_FLAG) || (defined(HAVE_DECL_DM_DATA_OUT_FLAG) && HAVE_DECL_DM_DATA_OUT_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_DATA_OUT_FLAG) == ((1 << 16)), "DM_DATA_OUT_FLAG != (1 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_DATA_OUT_FLAG (1 << 16)
 #endif
-#if !(defined(DM_DEFERRED_REMOVE) || (defined(HAVE_DECL_DM_DEFERRED_REMOVE) && HAVE_DECL_DM_DEFERRED_REMOVE))
+#if defined(DM_DEFERRED_REMOVE) || (defined(HAVE_DECL_DM_DEFERRED_REMOVE) && HAVE_DECL_DM_DEFERRED_REMOVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_DEFERRED_REMOVE) == ((1 << 17)), "DM_DEFERRED_REMOVE != (1 << 17)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_DEFERRED_REMOVE (1 << 17)
 #endif
-#if !(defined(DM_INTERNAL_SUSPEND_FLAG) || (defined(HAVE_DECL_DM_INTERNAL_SUSPEND_FLAG) && HAVE_DECL_DM_INTERNAL_SUSPEND_FLAG))
+#if defined(DM_INTERNAL_SUSPEND_FLAG) || (defined(HAVE_DECL_DM_INTERNAL_SUSPEND_FLAG) && HAVE_DECL_DM_INTERNAL_SUSPEND_FLAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DM_INTERNAL_SUSPEND_FLAG) == ((1 << 18)), "DM_INTERNAL_SUSPEND_FLAG != (1 << 18)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DM_INTERNAL_SUSPEND_FLAG (1 << 18)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat dm_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat dm_flags in mpers mode
+
+# else
 
 static
 const struct xlat dm_flags[] = {
@@ -84,4 +162,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ebpf_class.h b/xlat/ebpf_class.h
new file mode 100644
index 0000000..9dfcd84
--- /dev/null
+++ b/xlat/ebpf_class.h
@@ -0,0 +1,78 @@
+/* Generated by ./xlat/gen.sh from ./xlat/ebpf_class.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_LD) || (defined(HAVE_DECL_BPF_LD) && HAVE_DECL_BPF_LD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_LD) == (0x0), "BPF_LD != 0x0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_LD 0x0
+#endif
+#if defined(BPF_LDX) || (defined(HAVE_DECL_BPF_LDX) && HAVE_DECL_BPF_LDX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_LDX) == (0x1), "BPF_LDX != 0x1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_LDX 0x1
+#endif
+#if defined(BPF_ST) || (defined(HAVE_DECL_BPF_ST) && HAVE_DECL_BPF_ST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ST) == (0x2), "BPF_ST != 0x2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_ST 0x2
+#endif
+#if defined(BPF_STX) || (defined(HAVE_DECL_BPF_STX) && HAVE_DECL_BPF_STX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_STX) == (0x3), "BPF_STX != 0x3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_STX 0x3
+#endif
+#if defined(BPF_ALU) || (defined(HAVE_DECL_BPF_ALU) && HAVE_DECL_BPF_ALU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ALU) == (0x4), "BPF_ALU != 0x4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_ALU 0x4
+#endif
+#if defined(BPF_JMP) || (defined(HAVE_DECL_BPF_JMP) && HAVE_DECL_BPF_JMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JMP) == (0x5), "BPF_JMP != 0x5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JMP 0x5
+#endif
+#if defined(BPF_ALU64) || (defined(HAVE_DECL_BPF_ALU64) && HAVE_DECL_BPF_ALU64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ALU64) == (0x7), "BPF_ALU64 != 0x7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_ALU64 0x7
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ebpf_class in mpers mode
+
+# else
+
+static
+const struct xlat ebpf_class[] = {
+ [BPF_LD] = XLAT(BPF_LD),
+ [BPF_LDX] = XLAT(BPF_LDX),
+ [BPF_ST] = XLAT(BPF_ST),
+ [BPF_STX] = XLAT(BPF_STX),
+ [BPF_ALU] = XLAT(BPF_ALU),
+ [BPF_JMP] = XLAT(BPF_JMP),
+ [BPF_ALU64] = XLAT(BPF_ALU64),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ebpf_class.in b/xlat/ebpf_class.in
new file mode 100644
index 0000000..c1a82fc
--- /dev/null
+++ b/xlat/ebpf_class.in
@@ -0,0 +1,8 @@
+#value_indexed
+BPF_LD		0x0
+BPF_LDX		0x1
+BPF_ST		0x2
+BPF_STX		0x3
+BPF_ALU		0x4
+BPF_JMP		0x5
+BPF_ALU64	0x7
diff --git a/xlat/ebpf_mode.h b/xlat/ebpf_mode.h
new file mode 100644
index 0000000..5fddcfb
--- /dev/null
+++ b/xlat/ebpf_mode.h
@@ -0,0 +1,62 @@
+/* Generated by ./xlat/gen.sh from ./xlat/ebpf_mode.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_IMM) || (defined(HAVE_DECL_BPF_IMM) && HAVE_DECL_BPF_IMM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_IMM) == (0x00), "BPF_IMM != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_IMM 0x00
+#endif
+#if defined(BPF_ABS) || (defined(HAVE_DECL_BPF_ABS) && HAVE_DECL_BPF_ABS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ABS) == (0x20), "BPF_ABS != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_ABS 0x20
+#endif
+#if defined(BPF_IND) || (defined(HAVE_DECL_BPF_IND) && HAVE_DECL_BPF_IND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_IND) == (0x40), "BPF_IND != 0x40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_IND 0x40
+#endif
+#if defined(BPF_MEM) || (defined(HAVE_DECL_BPF_MEM) && HAVE_DECL_BPF_MEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MEM) == (0x60), "BPF_MEM != 0x60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_MEM 0x60
+#endif
+#if defined(BPF_XADD) || (defined(HAVE_DECL_BPF_XADD) && HAVE_DECL_BPF_XADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_XADD) == (0xc0), "BPF_XADD != 0xc0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_XADD 0xc0
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ebpf_mode in mpers mode
+
+# else
+
+static
+const struct xlat ebpf_mode[] = {
+ XLAT(BPF_IMM),
+ XLAT(BPF_ABS),
+ XLAT(BPF_IND),
+ XLAT(BPF_MEM),
+ XLAT(BPF_XADD),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ebpf_mode.in b/xlat/ebpf_mode.in
new file mode 100644
index 0000000..d8a65b6
--- /dev/null
+++ b/xlat/ebpf_mode.in
@@ -0,0 +1,5 @@
+BPF_IMM		0x00
+BPF_ABS		0x20
+BPF_IND		0x40
+BPF_MEM		0x60
+BPF_XADD	0xc0
diff --git a/xlat/ebpf_op_alu.h b/xlat/ebpf_op_alu.h
new file mode 100644
index 0000000..2a5151c
--- /dev/null
+++ b/xlat/ebpf_op_alu.h
@@ -0,0 +1,46 @@
+/* Generated by ./xlat/gen.sh from ./xlat/ebpf_op_alu.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_MOV) || (defined(HAVE_DECL_BPF_MOV) && HAVE_DECL_BPF_MOV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_MOV) == (0xb0), "BPF_MOV != 0xb0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_MOV 0xb0
+#endif
+#if defined(BPF_ARSH) || (defined(HAVE_DECL_BPF_ARSH) && HAVE_DECL_BPF_ARSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_ARSH) == (0xc0), "BPF_ARSH != 0xc0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_ARSH 0xc0
+#endif
+#if defined(BPF_END) || (defined(HAVE_DECL_BPF_END) && HAVE_DECL_BPF_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_END) == (0xd0), "BPF_END != 0xd0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_END 0xd0
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ebpf_op_alu in mpers mode
+
+# else
+
+static
+const struct xlat ebpf_op_alu[] = {
+ XLAT(BPF_MOV),
+ XLAT(BPF_ARSH),
+ XLAT(BPF_END),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ebpf_op_alu.in b/xlat/ebpf_op_alu.in
new file mode 100644
index 0000000..2b46f20
--- /dev/null
+++ b/xlat/ebpf_op_alu.in
@@ -0,0 +1,3 @@
+BPF_MOV		0xb0
+BPF_ARSH	0xc0
+BPF_END		0xd0
diff --git a/xlat/ebpf_op_jmp.h b/xlat/ebpf_op_jmp.h
new file mode 100644
index 0000000..d1feb21
--- /dev/null
+++ b/xlat/ebpf_op_jmp.h
@@ -0,0 +1,94 @@
+/* Generated by ./xlat/gen.sh from ./xlat/ebpf_op_jmp.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_JNE) || (defined(HAVE_DECL_BPF_JNE) && HAVE_DECL_BPF_JNE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JNE) == (0x50), "BPF_JNE != 0x50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JNE 0x50
+#endif
+#if defined(BPF_JSGT) || (defined(HAVE_DECL_BPF_JSGT) && HAVE_DECL_BPF_JSGT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JSGT) == (0x60), "BPF_JSGT != 0x60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JSGT 0x60
+#endif
+#if defined(BPF_JSGE) || (defined(HAVE_DECL_BPF_JSGE) && HAVE_DECL_BPF_JSGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JSGE) == (0x70), "BPF_JSGE != 0x70");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JSGE 0x70
+#endif
+#if defined(BPF_CALL) || (defined(HAVE_DECL_BPF_CALL) && HAVE_DECL_BPF_CALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_CALL) == (0x80), "BPF_CALL != 0x80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_CALL 0x80
+#endif
+#if defined(BPF_EXIT) || (defined(HAVE_DECL_BPF_EXIT) && HAVE_DECL_BPF_EXIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_EXIT) == (0x90), "BPF_EXIT != 0x90");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_EXIT 0x90
+#endif
+#if defined(BPF_JLT) || (defined(HAVE_DECL_BPF_JLT) && HAVE_DECL_BPF_JLT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JLT) == (0xa0), "BPF_JLT != 0xa0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JLT 0xa0
+#endif
+#if defined(BPF_JLE) || (defined(HAVE_DECL_BPF_JLE) && HAVE_DECL_BPF_JLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JLE) == (0xb0), "BPF_JLE != 0xb0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JLE 0xb0
+#endif
+#if defined(BPF_JSLT) || (defined(HAVE_DECL_BPF_JSLT) && HAVE_DECL_BPF_JSLT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JSLT) == (0xc0), "BPF_JSLT != 0xc0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JSLT 0xc0
+#endif
+#if defined(BPF_JSLE) || (defined(HAVE_DECL_BPF_JSLE) && HAVE_DECL_BPF_JSLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_JSLE) == (0xd0), "BPF_JSLE != 0xd0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_JSLE 0xd0
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ebpf_op_jmp in mpers mode
+
+# else
+
+static
+const struct xlat ebpf_op_jmp[] = {
+ XLAT(BPF_JNE),
+ XLAT(BPF_JSGT),
+ XLAT(BPF_JSGE),
+ XLAT(BPF_CALL),
+ XLAT(BPF_EXIT),
+ XLAT(BPF_JLT),
+ XLAT(BPF_JLE),
+ XLAT(BPF_JSLT),
+ XLAT(BPF_JSLE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ebpf_op_jmp.in b/xlat/ebpf_op_jmp.in
new file mode 100644
index 0000000..8d49cf6
--- /dev/null
+++ b/xlat/ebpf_op_jmp.in
@@ -0,0 +1,9 @@
+BPF_JNE		0x50
+BPF_JSGT	0x60
+BPF_JSGE	0x70
+BPF_CALL	0x80
+BPF_EXIT	0x90
+BPF_JLT		0xa0
+BPF_JLE		0xb0
+BPF_JSLT	0xc0
+BPF_JSLE	0xd0
diff --git a/xlat/ebpf_regs.h b/xlat/ebpf_regs.h
new file mode 100644
index 0000000..6798516
--- /dev/null
+++ b/xlat/ebpf_regs.h
@@ -0,0 +1,110 @@
+/* Generated by ./xlat/gen.sh from ./xlat/ebpf_regs.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_REG_0) || (defined(HAVE_DECL_BPF_REG_0) && HAVE_DECL_BPF_REG_0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_0) == (0), "BPF_REG_0 != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_0 0
+#endif
+#if defined(BPF_REG_1) || (defined(HAVE_DECL_BPF_REG_1) && HAVE_DECL_BPF_REG_1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_1) == (1), "BPF_REG_1 != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_1 1
+#endif
+#if defined(BPF_REG_2) || (defined(HAVE_DECL_BPF_REG_2) && HAVE_DECL_BPF_REG_2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_2) == (2), "BPF_REG_2 != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_2 2
+#endif
+#if defined(BPF_REG_3) || (defined(HAVE_DECL_BPF_REG_3) && HAVE_DECL_BPF_REG_3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_3) == (3), "BPF_REG_3 != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_3 3
+#endif
+#if defined(BPF_REG_4) || (defined(HAVE_DECL_BPF_REG_4) && HAVE_DECL_BPF_REG_4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_4) == (4), "BPF_REG_4 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_4 4
+#endif
+#if defined(BPF_REG_5) || (defined(HAVE_DECL_BPF_REG_5) && HAVE_DECL_BPF_REG_5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_5) == (5), "BPF_REG_5 != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_5 5
+#endif
+#if defined(BPF_REG_6) || (defined(HAVE_DECL_BPF_REG_6) && HAVE_DECL_BPF_REG_6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_6) == (6), "BPF_REG_6 != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_6 6
+#endif
+#if defined(BPF_REG_7) || (defined(HAVE_DECL_BPF_REG_7) && HAVE_DECL_BPF_REG_7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_7) == (7), "BPF_REG_7 != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_7 7
+#endif
+#if defined(BPF_REG_8) || (defined(HAVE_DECL_BPF_REG_8) && HAVE_DECL_BPF_REG_8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_8) == (8), "BPF_REG_8 != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_8 8
+#endif
+#if defined(BPF_REG_9) || (defined(HAVE_DECL_BPF_REG_9) && HAVE_DECL_BPF_REG_9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_9) == (9), "BPF_REG_9 != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_9 9
+#endif
+#if defined(BPF_REG_10) || (defined(HAVE_DECL_BPF_REG_10) && HAVE_DECL_BPF_REG_10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_REG_10) == (10), "BPF_REG_10 != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_REG_10 10
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ebpf_regs in mpers mode
+
+# else
+
+static
+const struct xlat ebpf_regs[] = {
+ [BPF_REG_0] = XLAT(BPF_REG_0),
+ [BPF_REG_1] = XLAT(BPF_REG_1),
+ [BPF_REG_2] = XLAT(BPF_REG_2),
+ [BPF_REG_3] = XLAT(BPF_REG_3),
+ [BPF_REG_4] = XLAT(BPF_REG_4),
+ [BPF_REG_5] = XLAT(BPF_REG_5),
+ [BPF_REG_6] = XLAT(BPF_REG_6),
+ [BPF_REG_7] = XLAT(BPF_REG_7),
+ [BPF_REG_8] = XLAT(BPF_REG_8),
+ [BPF_REG_9] = XLAT(BPF_REG_9),
+ [BPF_REG_10] = XLAT(BPF_REG_10),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ebpf_regs.in b/xlat/ebpf_regs.in
new file mode 100644
index 0000000..9db066e
--- /dev/null
+++ b/xlat/ebpf_regs.in
@@ -0,0 +1,12 @@
+#value_indexed
+BPF_REG_0  0
+BPF_REG_1  1
+BPF_REG_2  2
+BPF_REG_3  3
+BPF_REG_4  4
+BPF_REG_5  5
+BPF_REG_6  6
+BPF_REG_7  7
+BPF_REG_8  8
+BPF_REG_9  9
+BPF_REG_10 10
diff --git a/xlat/ebpf_size.h b/xlat/ebpf_size.h
new file mode 100644
index 0000000..b3d32d2
--- /dev/null
+++ b/xlat/ebpf_size.h
@@ -0,0 +1,30 @@
+/* Generated by ./xlat/gen.sh from ./xlat/ebpf_size.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BPF_DW) || (defined(HAVE_DECL_BPF_DW) && HAVE_DECL_BPF_DW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BPF_DW) == (0x18), "BPF_DW != 0x18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BPF_DW 0x18
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ebpf_size in mpers mode
+
+# else
+
+static
+const struct xlat ebpf_size[] = {
+ XLAT(BPF_DW),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ebpf_size.in b/xlat/ebpf_size.in
new file mode 100644
index 0000000..5f9afa3
--- /dev/null
+++ b/xlat/ebpf_size.in
@@ -0,0 +1 @@
+BPF_DW	0x18
diff --git a/xlat/efd_flags.h b/xlat/efd_flags.h
index 641f116..e61316a 100644
--- a/xlat/efd_flags.h
+++ b/xlat/efd_flags.h
@@ -1,21 +1,39 @@
 /* Generated by ./xlat/gen.sh from ./xlat/efd_flags.in; do not edit. */
-#if !(defined(EFD_SEMAPHORE) || (defined(HAVE_DECL_EFD_SEMAPHORE) && HAVE_DECL_EFD_SEMAPHORE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(EFD_SEMAPHORE) || (defined(HAVE_DECL_EFD_SEMAPHORE) && HAVE_DECL_EFD_SEMAPHORE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EFD_SEMAPHORE) == (1), "EFD_SEMAPHORE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define EFD_SEMAPHORE 1
 #endif
 #if defined EFD_CLOEXEC || defined O_CLOEXEC
-#if !(defined(EFD_CLOEXEC) || (defined(HAVE_DECL_EFD_CLOEXEC) && HAVE_DECL_EFD_CLOEXEC))
+#if defined(EFD_CLOEXEC) || (defined(HAVE_DECL_EFD_CLOEXEC) && HAVE_DECL_EFD_CLOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EFD_CLOEXEC) == (O_CLOEXEC), "EFD_CLOEXEC != O_CLOEXEC");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define EFD_CLOEXEC O_CLOEXEC
 #endif
 #endif
-#if !(defined(EFD_NONBLOCK) || (defined(HAVE_DECL_EFD_NONBLOCK) && HAVE_DECL_EFD_NONBLOCK))
+#if defined(EFD_NONBLOCK) || (defined(HAVE_DECL_EFD_NONBLOCK) && HAVE_DECL_EFD_NONBLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EFD_NONBLOCK) == (O_NONBLOCK), "EFD_NONBLOCK != O_NONBLOCK");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define EFD_NONBLOCK O_NONBLOCK
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat efd_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat efd_flags in mpers mode
+
+# else
 
 static
 const struct xlat efd_flags[] = {
@@ -27,4 +45,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/epollctls.h b/xlat/epollctls.h
index 6b06d8c..a3b7419 100644
--- a/xlat/epollctls.h
+++ b/xlat/epollctls.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/epollctls.in; do not edit. */
-#if !(defined(EPOLL_CTL_ADD) || (defined(HAVE_DECL_EPOLL_CTL_ADD) && HAVE_DECL_EPOLL_CTL_ADD))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(EPOLL_CTL_ADD) || (defined(HAVE_DECL_EPOLL_CTL_ADD) && HAVE_DECL_EPOLL_CTL_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EPOLL_CTL_ADD) == (1), "EPOLL_CTL_ADD != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define EPOLL_CTL_ADD 1
 #endif
-#if !(defined(EPOLL_CTL_DEL) || (defined(HAVE_DECL_EPOLL_CTL_DEL) && HAVE_DECL_EPOLL_CTL_DEL))
+#if defined(EPOLL_CTL_DEL) || (defined(HAVE_DECL_EPOLL_CTL_DEL) && HAVE_DECL_EPOLL_CTL_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EPOLL_CTL_DEL) == (2), "EPOLL_CTL_DEL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define EPOLL_CTL_DEL 2
 #endif
-#if !(defined(EPOLL_CTL_MOD) || (defined(HAVE_DECL_EPOLL_CTL_MOD) && HAVE_DECL_EPOLL_CTL_MOD))
+#if defined(EPOLL_CTL_MOD) || (defined(HAVE_DECL_EPOLL_CTL_MOD) && HAVE_DECL_EPOLL_CTL_MOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EPOLL_CTL_MOD) == (3), "EPOLL_CTL_MOD != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define EPOLL_CTL_MOD 3
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat epollctls in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat epollctls in mpers mode
+
+# else
 
 static
 const struct xlat epollctls[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/epollevents.h b/xlat/epollevents.h
index 3b98b6d..b82e173 100644
--- a/xlat/epollevents.h
+++ b/xlat/epollevents.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/epollevents.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat epollevents in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat epollevents in mpers mode
+
+# else
 
 static
 const struct xlat epollevents[] = {
@@ -56,4 +62,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/epollflags.h b/xlat/epollflags.h
index cae4fe9..faf4b0c 100644
--- a/xlat/epollflags.h
+++ b/xlat/epollflags.h
@@ -1,15 +1,25 @@
 /* Generated by ./xlat/gen.sh from ./xlat/epollflags.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
 #if defined EPOLL_CLOEXEC || defined O_CLOEXEC
-#if !(defined(EPOLL_CLOEXEC) || (defined(HAVE_DECL_EPOLL_CLOEXEC) && HAVE_DECL_EPOLL_CLOEXEC))
+#if defined(EPOLL_CLOEXEC) || (defined(HAVE_DECL_EPOLL_CLOEXEC) && HAVE_DECL_EPOLL_CLOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EPOLL_CLOEXEC) == (O_CLOEXEC), "EPOLL_CLOEXEC != O_CLOEXEC");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define EPOLL_CLOEXEC O_CLOEXEC
 #endif
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat epollflags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat epollflags in mpers mode
+
+# else
 
 static
 const struct xlat epollflags[] = {
@@ -19,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ethernet_protocols.h b/xlat/ethernet_protocols.h
index 3849e0e..67c64cb 100644
--- a/xlat/ethernet_protocols.h
+++ b/xlat/ethernet_protocols.h
@@ -1,276 +1,649 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ethernet_protocols.in; do not edit. */
-#if !(defined(ETH_P_802_3) || (defined(HAVE_DECL_ETH_P_802_3) && HAVE_DECL_ETH_P_802_3))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(ETH_P_802_3) || (defined(HAVE_DECL_ETH_P_802_3) && HAVE_DECL_ETH_P_802_3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_802_3) == (0x0001), "ETH_P_802_3 != 0x0001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_802_3 0x0001
 #endif
-#if !(defined(ETH_P_AX25) || (defined(HAVE_DECL_ETH_P_AX25) && HAVE_DECL_ETH_P_AX25))
+#if defined(ETH_P_AX25) || (defined(HAVE_DECL_ETH_P_AX25) && HAVE_DECL_ETH_P_AX25)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_AX25) == (0x0002), "ETH_P_AX25 != 0x0002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_AX25 0x0002
 #endif
-#if !(defined(ETH_P_ALL) || (defined(HAVE_DECL_ETH_P_ALL) && HAVE_DECL_ETH_P_ALL))
+#if defined(ETH_P_ALL) || (defined(HAVE_DECL_ETH_P_ALL) && HAVE_DECL_ETH_P_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_ALL) == (0x0003), "ETH_P_ALL != 0x0003");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_ALL 0x0003
 #endif
-#if !(defined(ETH_P_802_2) || (defined(HAVE_DECL_ETH_P_802_2) && HAVE_DECL_ETH_P_802_2))
+#if defined(ETH_P_802_2) || (defined(HAVE_DECL_ETH_P_802_2) && HAVE_DECL_ETH_P_802_2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_802_2) == (0x0004), "ETH_P_802_2 != 0x0004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_802_2 0x0004
 #endif
-#if !(defined(ETH_P_SNAP) || (defined(HAVE_DECL_ETH_P_SNAP) && HAVE_DECL_ETH_P_SNAP))
+#if defined(ETH_P_SNAP) || (defined(HAVE_DECL_ETH_P_SNAP) && HAVE_DECL_ETH_P_SNAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_SNAP) == (0x0005), "ETH_P_SNAP != 0x0005");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_SNAP 0x0005
 #endif
-#if !(defined(ETH_P_DDCMP) || (defined(HAVE_DECL_ETH_P_DDCMP) && HAVE_DECL_ETH_P_DDCMP))
+#if defined(ETH_P_DDCMP) || (defined(HAVE_DECL_ETH_P_DDCMP) && HAVE_DECL_ETH_P_DDCMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_DDCMP) == (0x0006), "ETH_P_DDCMP != 0x0006");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_DDCMP 0x0006
 #endif
-#if !(defined(ETH_P_WAN_PPP) || (defined(HAVE_DECL_ETH_P_WAN_PPP) && HAVE_DECL_ETH_P_WAN_PPP))
+#if defined(ETH_P_WAN_PPP) || (defined(HAVE_DECL_ETH_P_WAN_PPP) && HAVE_DECL_ETH_P_WAN_PPP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_WAN_PPP) == (0x0007), "ETH_P_WAN_PPP != 0x0007");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_WAN_PPP 0x0007
 #endif
-#if !(defined(ETH_P_PPP_MP) || (defined(HAVE_DECL_ETH_P_PPP_MP) && HAVE_DECL_ETH_P_PPP_MP))
+#if defined(ETH_P_PPP_MP) || (defined(HAVE_DECL_ETH_P_PPP_MP) && HAVE_DECL_ETH_P_PPP_MP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PPP_MP) == (0x0008), "ETH_P_PPP_MP != 0x0008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PPP_MP 0x0008
 #endif
-#if !(defined(ETH_P_LOCALTALK) || (defined(HAVE_DECL_ETH_P_LOCALTALK) && HAVE_DECL_ETH_P_LOCALTALK))
+#if defined(ETH_P_LOCALTALK) || (defined(HAVE_DECL_ETH_P_LOCALTALK) && HAVE_DECL_ETH_P_LOCALTALK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_LOCALTALK) == (0x0009), "ETH_P_LOCALTALK != 0x0009");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_LOCALTALK 0x0009
 #endif
-#if !(defined(ETH_P_CAN) || (defined(HAVE_DECL_ETH_P_CAN) && HAVE_DECL_ETH_P_CAN))
+#if defined(ETH_P_CAN) || (defined(HAVE_DECL_ETH_P_CAN) && HAVE_DECL_ETH_P_CAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_CAN) == (0x000C), "ETH_P_CAN != 0x000C");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_CAN 0x000C
 #endif
-#if !(defined(ETH_P_CANFD) || (defined(HAVE_DECL_ETH_P_CANFD) && HAVE_DECL_ETH_P_CANFD))
+#if defined(ETH_P_CANFD) || (defined(HAVE_DECL_ETH_P_CANFD) && HAVE_DECL_ETH_P_CANFD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_CANFD) == (0x000D), "ETH_P_CANFD != 0x000D");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_CANFD 0x000D
 #endif
-#if !(defined(ETH_P_PPPTALK) || (defined(HAVE_DECL_ETH_P_PPPTALK) && HAVE_DECL_ETH_P_PPPTALK))
+#if defined(ETH_P_PPPTALK) || (defined(HAVE_DECL_ETH_P_PPPTALK) && HAVE_DECL_ETH_P_PPPTALK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PPPTALK) == (0x0010), "ETH_P_PPPTALK != 0x0010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PPPTALK 0x0010
 #endif
-#if !(defined(ETH_P_TR_802_2) || (defined(HAVE_DECL_ETH_P_TR_802_2) && HAVE_DECL_ETH_P_TR_802_2))
+#if defined(ETH_P_TR_802_2) || (defined(HAVE_DECL_ETH_P_TR_802_2) && HAVE_DECL_ETH_P_TR_802_2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_TR_802_2) == (0x0011), "ETH_P_TR_802_2 != 0x0011");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_TR_802_2 0x0011
 #endif
-#if !(defined(ETH_P_MOBITEX) || (defined(HAVE_DECL_ETH_P_MOBITEX) && HAVE_DECL_ETH_P_MOBITEX))
+#if defined(ETH_P_MOBITEX) || (defined(HAVE_DECL_ETH_P_MOBITEX) && HAVE_DECL_ETH_P_MOBITEX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_MOBITEX) == (0x0015), "ETH_P_MOBITEX != 0x0015");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_MOBITEX 0x0015
 #endif
-#if !(defined(ETH_P_CONTROL) || (defined(HAVE_DECL_ETH_P_CONTROL) && HAVE_DECL_ETH_P_CONTROL))
+#if defined(ETH_P_CONTROL) || (defined(HAVE_DECL_ETH_P_CONTROL) && HAVE_DECL_ETH_P_CONTROL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_CONTROL) == (0x0016), "ETH_P_CONTROL != 0x0016");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_CONTROL 0x0016
 #endif
-#if !(defined(ETH_P_IRDA) || (defined(HAVE_DECL_ETH_P_IRDA) && HAVE_DECL_ETH_P_IRDA))
+#if defined(ETH_P_IRDA) || (defined(HAVE_DECL_ETH_P_IRDA) && HAVE_DECL_ETH_P_IRDA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_IRDA) == (0x0017), "ETH_P_IRDA != 0x0017");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_IRDA 0x0017
 #endif
-#if !(defined(ETH_P_ECONET) || (defined(HAVE_DECL_ETH_P_ECONET) && HAVE_DECL_ETH_P_ECONET))
+#if defined(ETH_P_ECONET) || (defined(HAVE_DECL_ETH_P_ECONET) && HAVE_DECL_ETH_P_ECONET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_ECONET) == (0x0018), "ETH_P_ECONET != 0x0018");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_ECONET 0x0018
 #endif
-#if !(defined(ETH_P_HDLC) || (defined(HAVE_DECL_ETH_P_HDLC) && HAVE_DECL_ETH_P_HDLC))
+#if defined(ETH_P_HDLC) || (defined(HAVE_DECL_ETH_P_HDLC) && HAVE_DECL_ETH_P_HDLC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_HDLC) == (0x0019), "ETH_P_HDLC != 0x0019");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_HDLC 0x0019
 #endif
-#if !(defined(ETH_P_ARCNET) || (defined(HAVE_DECL_ETH_P_ARCNET) && HAVE_DECL_ETH_P_ARCNET))
+#if defined(ETH_P_ARCNET) || (defined(HAVE_DECL_ETH_P_ARCNET) && HAVE_DECL_ETH_P_ARCNET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_ARCNET) == (0x001A), "ETH_P_ARCNET != 0x001A");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_ARCNET 0x001A
 #endif
-#if !(defined(ETH_P_DSA) || (defined(HAVE_DECL_ETH_P_DSA) && HAVE_DECL_ETH_P_DSA))
+#if defined(ETH_P_DSA) || (defined(HAVE_DECL_ETH_P_DSA) && HAVE_DECL_ETH_P_DSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_DSA) == (0x001B), "ETH_P_DSA != 0x001B");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_DSA 0x001B
 #endif
-#if !(defined(ETH_P_TRAILER) || (defined(HAVE_DECL_ETH_P_TRAILER) && HAVE_DECL_ETH_P_TRAILER))
+#if defined(ETH_P_TRAILER) || (defined(HAVE_DECL_ETH_P_TRAILER) && HAVE_DECL_ETH_P_TRAILER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_TRAILER) == (0x001C), "ETH_P_TRAILER != 0x001C");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_TRAILER 0x001C
 #endif
-#if !(defined(ETH_P_LOOP) || (defined(HAVE_DECL_ETH_P_LOOP) && HAVE_DECL_ETH_P_LOOP))
+#if defined(ETH_P_LOOP) || (defined(HAVE_DECL_ETH_P_LOOP) && HAVE_DECL_ETH_P_LOOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_LOOP) == (0x0060), "ETH_P_LOOP != 0x0060");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_LOOP 0x0060
 #endif
-#if !(defined(ETH_P_PHONET) || (defined(HAVE_DECL_ETH_P_PHONET) && HAVE_DECL_ETH_P_PHONET))
+#if defined(ETH_P_PHONET) || (defined(HAVE_DECL_ETH_P_PHONET) && HAVE_DECL_ETH_P_PHONET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PHONET) == (0x00F5), "ETH_P_PHONET != 0x00F5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PHONET 0x00F5
 #endif
-#if !(defined(ETH_P_IEEE802154) || (defined(HAVE_DECL_ETH_P_IEEE802154) && HAVE_DECL_ETH_P_IEEE802154))
+#if defined(ETH_P_IEEE802154) || (defined(HAVE_DECL_ETH_P_IEEE802154) && HAVE_DECL_ETH_P_IEEE802154)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_IEEE802154) == (0x00F6), "ETH_P_IEEE802154 != 0x00F6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_IEEE802154 0x00F6
 #endif
-#if !(defined(ETH_P_CAIF) || (defined(HAVE_DECL_ETH_P_CAIF) && HAVE_DECL_ETH_P_CAIF))
+#if defined(ETH_P_CAIF) || (defined(HAVE_DECL_ETH_P_CAIF) && HAVE_DECL_ETH_P_CAIF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_CAIF) == (0x00F7), "ETH_P_CAIF != 0x00F7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_CAIF 0x00F7
 #endif
-#if !(defined(ETH_P_XDSA) || (defined(HAVE_DECL_ETH_P_XDSA) && HAVE_DECL_ETH_P_XDSA))
+#if defined(ETH_P_XDSA) || (defined(HAVE_DECL_ETH_P_XDSA) && HAVE_DECL_ETH_P_XDSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_XDSA) == (0x00F8), "ETH_P_XDSA != 0x00F8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_XDSA 0x00F8
 #endif
-#if !(defined(ETH_P_MAP) || (defined(HAVE_DECL_ETH_P_MAP) && HAVE_DECL_ETH_P_MAP))
+#if defined(ETH_P_MAP) || (defined(HAVE_DECL_ETH_P_MAP) && HAVE_DECL_ETH_P_MAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_MAP) == (0x00F9), "ETH_P_MAP != 0x00F9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_MAP 0x00F9
 #endif
-#if !(defined(ETH_P_PUP) || (defined(HAVE_DECL_ETH_P_PUP) && HAVE_DECL_ETH_P_PUP))
+#if defined(ETH_P_PUP) || (defined(HAVE_DECL_ETH_P_PUP) && HAVE_DECL_ETH_P_PUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PUP) == (0x0200), "ETH_P_PUP != 0x0200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PUP 0x0200
 #endif
-#if !(defined(ETH_P_PUPAT) || (defined(HAVE_DECL_ETH_P_PUPAT) && HAVE_DECL_ETH_P_PUPAT))
+#if defined(ETH_P_PUPAT) || (defined(HAVE_DECL_ETH_P_PUPAT) && HAVE_DECL_ETH_P_PUPAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PUPAT) == (0x0201), "ETH_P_PUPAT != 0x0201");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PUPAT 0x0201
 #endif
-#if !(defined(ETH_P_802_3_MIN) || (defined(HAVE_DECL_ETH_P_802_3_MIN) && HAVE_DECL_ETH_P_802_3_MIN))
+#if defined(ETH_P_802_3_MIN) || (defined(HAVE_DECL_ETH_P_802_3_MIN) && HAVE_DECL_ETH_P_802_3_MIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_802_3_MIN) == (0x0600), "ETH_P_802_3_MIN != 0x0600");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_802_3_MIN 0x0600
 #endif
-#if !(defined(ETH_P_IP) || (defined(HAVE_DECL_ETH_P_IP) && HAVE_DECL_ETH_P_IP))
+#if defined(ETH_P_IP) || (defined(HAVE_DECL_ETH_P_IP) && HAVE_DECL_ETH_P_IP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_IP) == (0x0800), "ETH_P_IP != 0x0800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_IP 0x0800
 #endif
-#if !(defined(ETH_P_X25) || (defined(HAVE_DECL_ETH_P_X25) && HAVE_DECL_ETH_P_X25))
+#if defined(ETH_P_X25) || (defined(HAVE_DECL_ETH_P_X25) && HAVE_DECL_ETH_P_X25)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_X25) == (0x0805), "ETH_P_X25 != 0x0805");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_X25 0x0805
 #endif
-#if !(defined(ETH_P_ARP) || (defined(HAVE_DECL_ETH_P_ARP) && HAVE_DECL_ETH_P_ARP))
+#if defined(ETH_P_ARP) || (defined(HAVE_DECL_ETH_P_ARP) && HAVE_DECL_ETH_P_ARP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_ARP) == (0x0806), "ETH_P_ARP != 0x0806");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_ARP 0x0806
 #endif
-#if !(defined(ETH_P_BPQ) || (defined(HAVE_DECL_ETH_P_BPQ) && HAVE_DECL_ETH_P_BPQ))
+#if defined(ETH_P_BPQ) || (defined(HAVE_DECL_ETH_P_BPQ) && HAVE_DECL_ETH_P_BPQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_BPQ) == (0x08FF), "ETH_P_BPQ != 0x08FF");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_BPQ 0x08FF
 #endif
-#if !(defined(ETH_P_IEEEPUP) || (defined(HAVE_DECL_ETH_P_IEEEPUP) && HAVE_DECL_ETH_P_IEEEPUP))
+#if defined(ETH_P_IEEEPUP) || (defined(HAVE_DECL_ETH_P_IEEEPUP) && HAVE_DECL_ETH_P_IEEEPUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_IEEEPUP) == (0x0a00), "ETH_P_IEEEPUP != 0x0a00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_IEEEPUP 0x0a00
 #endif
-#if !(defined(ETH_P_IEEEPUPAT) || (defined(HAVE_DECL_ETH_P_IEEEPUPAT) && HAVE_DECL_ETH_P_IEEEPUPAT))
+#if defined(ETH_P_IEEEPUPAT) || (defined(HAVE_DECL_ETH_P_IEEEPUPAT) && HAVE_DECL_ETH_P_IEEEPUPAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_IEEEPUPAT) == (0x0a01), "ETH_P_IEEEPUPAT != 0x0a01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_IEEEPUPAT 0x0a01
 #endif
-#if !(defined(ETH_P_ERSPAN2) || (defined(HAVE_DECL_ETH_P_ERSPAN2) && HAVE_DECL_ETH_P_ERSPAN2))
+#if defined(ETH_P_ERSPAN2) || (defined(HAVE_DECL_ETH_P_ERSPAN2) && HAVE_DECL_ETH_P_ERSPAN2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_ERSPAN2) == (0x22EB), "ETH_P_ERSPAN2 != 0x22EB");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_ERSPAN2 0x22EB
 #endif
-#if !(defined(ETH_P_TSN) || (defined(HAVE_DECL_ETH_P_TSN) && HAVE_DECL_ETH_P_TSN))
+#if defined(ETH_P_TSN) || (defined(HAVE_DECL_ETH_P_TSN) && HAVE_DECL_ETH_P_TSN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_TSN) == (0x22F0), "ETH_P_TSN != 0x22F0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_TSN 0x22F0
 #endif
-#if !(defined(ETH_P_BATMAN) || (defined(HAVE_DECL_ETH_P_BATMAN) && HAVE_DECL_ETH_P_BATMAN))
+#if defined(ETH_P_BATMAN) || (defined(HAVE_DECL_ETH_P_BATMAN) && HAVE_DECL_ETH_P_BATMAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_BATMAN) == (0x4305), "ETH_P_BATMAN != 0x4305");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_BATMAN 0x4305
 #endif
-#if !(defined(ETH_P_DEC) || (defined(HAVE_DECL_ETH_P_DEC) && HAVE_DECL_ETH_P_DEC))
+#if defined(ETH_P_DEC) || (defined(HAVE_DECL_ETH_P_DEC) && HAVE_DECL_ETH_P_DEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_DEC) == (0x6000), "ETH_P_DEC != 0x6000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_DEC 0x6000
 #endif
-#if !(defined(ETH_P_DNA_DL) || (defined(HAVE_DECL_ETH_P_DNA_DL) && HAVE_DECL_ETH_P_DNA_DL))
+#if defined(ETH_P_DNA_DL) || (defined(HAVE_DECL_ETH_P_DNA_DL) && HAVE_DECL_ETH_P_DNA_DL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_DNA_DL) == (0x6001), "ETH_P_DNA_DL != 0x6001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_DNA_DL 0x6001
 #endif
-#if !(defined(ETH_P_DNA_RC) || (defined(HAVE_DECL_ETH_P_DNA_RC) && HAVE_DECL_ETH_P_DNA_RC))
+#if defined(ETH_P_DNA_RC) || (defined(HAVE_DECL_ETH_P_DNA_RC) && HAVE_DECL_ETH_P_DNA_RC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_DNA_RC) == (0x6002), "ETH_P_DNA_RC != 0x6002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_DNA_RC 0x6002
 #endif
-#if !(defined(ETH_P_DNA_RT) || (defined(HAVE_DECL_ETH_P_DNA_RT) && HAVE_DECL_ETH_P_DNA_RT))
+#if defined(ETH_P_DNA_RT) || (defined(HAVE_DECL_ETH_P_DNA_RT) && HAVE_DECL_ETH_P_DNA_RT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_DNA_RT) == (0x6003), "ETH_P_DNA_RT != 0x6003");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_DNA_RT 0x6003
 #endif
-#if !(defined(ETH_P_LAT) || (defined(HAVE_DECL_ETH_P_LAT) && HAVE_DECL_ETH_P_LAT))
+#if defined(ETH_P_LAT) || (defined(HAVE_DECL_ETH_P_LAT) && HAVE_DECL_ETH_P_LAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_LAT) == (0x6004), "ETH_P_LAT != 0x6004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_LAT 0x6004
 #endif
-#if !(defined(ETH_P_DIAG) || (defined(HAVE_DECL_ETH_P_DIAG) && HAVE_DECL_ETH_P_DIAG))
+#if defined(ETH_P_DIAG) || (defined(HAVE_DECL_ETH_P_DIAG) && HAVE_DECL_ETH_P_DIAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_DIAG) == (0x6005), "ETH_P_DIAG != 0x6005");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_DIAG 0x6005
 #endif
-#if !(defined(ETH_P_CUST) || (defined(HAVE_DECL_ETH_P_CUST) && HAVE_DECL_ETH_P_CUST))
+#if defined(ETH_P_CUST) || (defined(HAVE_DECL_ETH_P_CUST) && HAVE_DECL_ETH_P_CUST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_CUST) == (0x6006), "ETH_P_CUST != 0x6006");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_CUST 0x6006
 #endif
-#if !(defined(ETH_P_SCA) || (defined(HAVE_DECL_ETH_P_SCA) && HAVE_DECL_ETH_P_SCA))
+#if defined(ETH_P_SCA) || (defined(HAVE_DECL_ETH_P_SCA) && HAVE_DECL_ETH_P_SCA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_SCA) == (0x6007), "ETH_P_SCA != 0x6007");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_SCA 0x6007
 #endif
-#if !(defined(ETH_P_TEB) || (defined(HAVE_DECL_ETH_P_TEB) && HAVE_DECL_ETH_P_TEB))
+#if defined(ETH_P_TEB) || (defined(HAVE_DECL_ETH_P_TEB) && HAVE_DECL_ETH_P_TEB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_TEB) == (0x6558), "ETH_P_TEB != 0x6558");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_TEB 0x6558
 #endif
-#if !(defined(ETH_P_RARP) || (defined(HAVE_DECL_ETH_P_RARP) && HAVE_DECL_ETH_P_RARP))
+#if defined(ETH_P_RARP) || (defined(HAVE_DECL_ETH_P_RARP) && HAVE_DECL_ETH_P_RARP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_RARP) == (0x8035), "ETH_P_RARP != 0x8035");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_RARP 0x8035
 #endif
-#if !(defined(ETH_P_ATALK) || (defined(HAVE_DECL_ETH_P_ATALK) && HAVE_DECL_ETH_P_ATALK))
+#if defined(ETH_P_ATALK) || (defined(HAVE_DECL_ETH_P_ATALK) && HAVE_DECL_ETH_P_ATALK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_ATALK) == (0x809B), "ETH_P_ATALK != 0x809B");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_ATALK 0x809B
 #endif
-#if !(defined(ETH_P_AARP) || (defined(HAVE_DECL_ETH_P_AARP) && HAVE_DECL_ETH_P_AARP))
+#if defined(ETH_P_AARP) || (defined(HAVE_DECL_ETH_P_AARP) && HAVE_DECL_ETH_P_AARP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_AARP) == (0x80F3), "ETH_P_AARP != 0x80F3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_AARP 0x80F3
 #endif
-#if !(defined(ETH_P_8021Q) || (defined(HAVE_DECL_ETH_P_8021Q) && HAVE_DECL_ETH_P_8021Q))
+#if defined(ETH_P_8021Q) || (defined(HAVE_DECL_ETH_P_8021Q) && HAVE_DECL_ETH_P_8021Q)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_8021Q) == (0x8100), "ETH_P_8021Q != 0x8100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_8021Q 0x8100
 #endif
-#if !(defined(ETH_P_IPX) || (defined(HAVE_DECL_ETH_P_IPX) && HAVE_DECL_ETH_P_IPX))
+#if defined(ETH_P_IPX) || (defined(HAVE_DECL_ETH_P_IPX) && HAVE_DECL_ETH_P_IPX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_IPX) == (0x8137), "ETH_P_IPX != 0x8137");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_IPX 0x8137
 #endif
-#if !(defined(ETH_P_IPV6) || (defined(HAVE_DECL_ETH_P_IPV6) && HAVE_DECL_ETH_P_IPV6))
+#if defined(ETH_P_IPV6) || (defined(HAVE_DECL_ETH_P_IPV6) && HAVE_DECL_ETH_P_IPV6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_IPV6) == (0x86DD), "ETH_P_IPV6 != 0x86DD");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_IPV6 0x86DD
 #endif
-#if !(defined(ETH_P_PAUSE) || (defined(HAVE_DECL_ETH_P_PAUSE) && HAVE_DECL_ETH_P_PAUSE))
+#if defined(ETH_P_PAUSE) || (defined(HAVE_DECL_ETH_P_PAUSE) && HAVE_DECL_ETH_P_PAUSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PAUSE) == (0x8808), "ETH_P_PAUSE != 0x8808");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PAUSE 0x8808
 #endif
-#if !(defined(ETH_P_SLOW) || (defined(HAVE_DECL_ETH_P_SLOW) && HAVE_DECL_ETH_P_SLOW))
+#if defined(ETH_P_SLOW) || (defined(HAVE_DECL_ETH_P_SLOW) && HAVE_DECL_ETH_P_SLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_SLOW) == (0x8809), "ETH_P_SLOW != 0x8809");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_SLOW 0x8809
 #endif
-#if !(defined(ETH_P_WCCP) || (defined(HAVE_DECL_ETH_P_WCCP) && HAVE_DECL_ETH_P_WCCP))
+#if defined(ETH_P_WCCP) || (defined(HAVE_DECL_ETH_P_WCCP) && HAVE_DECL_ETH_P_WCCP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_WCCP) == (0x883E), "ETH_P_WCCP != 0x883E");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_WCCP 0x883E
 #endif
-#if !(defined(ETH_P_MPLS_UC) || (defined(HAVE_DECL_ETH_P_MPLS_UC) && HAVE_DECL_ETH_P_MPLS_UC))
+#if defined(ETH_P_MPLS_UC) || (defined(HAVE_DECL_ETH_P_MPLS_UC) && HAVE_DECL_ETH_P_MPLS_UC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_MPLS_UC) == (0x8847), "ETH_P_MPLS_UC != 0x8847");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_MPLS_UC 0x8847
 #endif
-#if !(defined(ETH_P_MPLS_MC) || (defined(HAVE_DECL_ETH_P_MPLS_MC) && HAVE_DECL_ETH_P_MPLS_MC))
+#if defined(ETH_P_MPLS_MC) || (defined(HAVE_DECL_ETH_P_MPLS_MC) && HAVE_DECL_ETH_P_MPLS_MC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_MPLS_MC) == (0x8848), "ETH_P_MPLS_MC != 0x8848");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_MPLS_MC 0x8848
 #endif
-#if !(defined(ETH_P_ATMMPOA) || (defined(HAVE_DECL_ETH_P_ATMMPOA) && HAVE_DECL_ETH_P_ATMMPOA))
+#if defined(ETH_P_ATMMPOA) || (defined(HAVE_DECL_ETH_P_ATMMPOA) && HAVE_DECL_ETH_P_ATMMPOA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_ATMMPOA) == (0x884c), "ETH_P_ATMMPOA != 0x884c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_ATMMPOA 0x884c
 #endif
-#if !(defined(ETH_P_PPP_DISC) || (defined(HAVE_DECL_ETH_P_PPP_DISC) && HAVE_DECL_ETH_P_PPP_DISC))
+#if defined(ETH_P_PPP_DISC) || (defined(HAVE_DECL_ETH_P_PPP_DISC) && HAVE_DECL_ETH_P_PPP_DISC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PPP_DISC) == (0x8863), "ETH_P_PPP_DISC != 0x8863");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PPP_DISC 0x8863
 #endif
-#if !(defined(ETH_P_PPP_SES) || (defined(HAVE_DECL_ETH_P_PPP_SES) && HAVE_DECL_ETH_P_PPP_SES))
+#if defined(ETH_P_PPP_SES) || (defined(HAVE_DECL_ETH_P_PPP_SES) && HAVE_DECL_ETH_P_PPP_SES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PPP_SES) == (0x8864), "ETH_P_PPP_SES != 0x8864");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PPP_SES 0x8864
 #endif
-#if !(defined(ETH_P_LINK_CTL) || (defined(HAVE_DECL_ETH_P_LINK_CTL) && HAVE_DECL_ETH_P_LINK_CTL))
+#if defined(ETH_P_LINK_CTL) || (defined(HAVE_DECL_ETH_P_LINK_CTL) && HAVE_DECL_ETH_P_LINK_CTL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_LINK_CTL) == (0x886c), "ETH_P_LINK_CTL != 0x886c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_LINK_CTL 0x886c
 #endif
-#if !(defined(ETH_P_ATMFATE) || (defined(HAVE_DECL_ETH_P_ATMFATE) && HAVE_DECL_ETH_P_ATMFATE))
+#if defined(ETH_P_ATMFATE) || (defined(HAVE_DECL_ETH_P_ATMFATE) && HAVE_DECL_ETH_P_ATMFATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_ATMFATE) == (0x8884), "ETH_P_ATMFATE != 0x8884");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_ATMFATE 0x8884
 #endif
-#if !(defined(ETH_P_PAE) || (defined(HAVE_DECL_ETH_P_PAE) && HAVE_DECL_ETH_P_PAE))
+#if defined(ETH_P_PAE) || (defined(HAVE_DECL_ETH_P_PAE) && HAVE_DECL_ETH_P_PAE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PAE) == (0x888E), "ETH_P_PAE != 0x888E");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PAE 0x888E
 #endif
-#if !(defined(ETH_P_AOE) || (defined(HAVE_DECL_ETH_P_AOE) && HAVE_DECL_ETH_P_AOE))
+#if defined(ETH_P_AOE) || (defined(HAVE_DECL_ETH_P_AOE) && HAVE_DECL_ETH_P_AOE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_AOE) == (0x88A2), "ETH_P_AOE != 0x88A2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_AOE 0x88A2
 #endif
-#if !(defined(ETH_P_8021AD) || (defined(HAVE_DECL_ETH_P_8021AD) && HAVE_DECL_ETH_P_8021AD))
+#if defined(ETH_P_8021AD) || (defined(HAVE_DECL_ETH_P_8021AD) && HAVE_DECL_ETH_P_8021AD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_8021AD) == (0x88A8), "ETH_P_8021AD != 0x88A8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_8021AD 0x88A8
 #endif
-#if !(defined(ETH_P_802_EX1) || (defined(HAVE_DECL_ETH_P_802_EX1) && HAVE_DECL_ETH_P_802_EX1))
+#if defined(ETH_P_802_EX1) || (defined(HAVE_DECL_ETH_P_802_EX1) && HAVE_DECL_ETH_P_802_EX1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_802_EX1) == (0x88B5), "ETH_P_802_EX1 != 0x88B5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_802_EX1 0x88B5
 #endif
-#if !(defined(ETH_P_ERSPAN) || (defined(HAVE_DECL_ETH_P_ERSPAN) && HAVE_DECL_ETH_P_ERSPAN))
+#if defined(ETH_P_ERSPAN) || (defined(HAVE_DECL_ETH_P_ERSPAN) && HAVE_DECL_ETH_P_ERSPAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_ERSPAN) == (0x88BE), "ETH_P_ERSPAN != 0x88BE");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_ERSPAN 0x88BE
 #endif
-#if !(defined(ETH_P_TIPC) || (defined(HAVE_DECL_ETH_P_TIPC) && HAVE_DECL_ETH_P_TIPC))
+#if defined(ETH_P_PREAUTH) || (defined(HAVE_DECL_ETH_P_PREAUTH) && HAVE_DECL_ETH_P_PREAUTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PREAUTH) == (0x88C7), "ETH_P_PREAUTH != 0x88C7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ETH_P_PREAUTH 0x88C7
+#endif
+#if defined(ETH_P_TIPC) || (defined(HAVE_DECL_ETH_P_TIPC) && HAVE_DECL_ETH_P_TIPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_TIPC) == (0x88CA), "ETH_P_TIPC != 0x88CA");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_TIPC 0x88CA
 #endif
-#if !(defined(ETH_P_MACSEC) || (defined(HAVE_DECL_ETH_P_MACSEC) && HAVE_DECL_ETH_P_MACSEC))
+#if defined(ETH_P_MACSEC) || (defined(HAVE_DECL_ETH_P_MACSEC) && HAVE_DECL_ETH_P_MACSEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_MACSEC) == (0x88E5), "ETH_P_MACSEC != 0x88E5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_MACSEC 0x88E5
 #endif
-#if !(defined(ETH_P_8021AH) || (defined(HAVE_DECL_ETH_P_8021AH) && HAVE_DECL_ETH_P_8021AH))
+#if defined(ETH_P_8021AH) || (defined(HAVE_DECL_ETH_P_8021AH) && HAVE_DECL_ETH_P_8021AH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_8021AH) == (0x88E7), "ETH_P_8021AH != 0x88E7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_8021AH 0x88E7
 #endif
-#if !(defined(ETH_P_MVRP) || (defined(HAVE_DECL_ETH_P_MVRP) && HAVE_DECL_ETH_P_MVRP))
+#if defined(ETH_P_MVRP) || (defined(HAVE_DECL_ETH_P_MVRP) && HAVE_DECL_ETH_P_MVRP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_MVRP) == (0x88F5), "ETH_P_MVRP != 0x88F5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_MVRP 0x88F5
 #endif
-#if !(defined(ETH_P_1588) || (defined(HAVE_DECL_ETH_P_1588) && HAVE_DECL_ETH_P_1588))
+#if defined(ETH_P_1588) || (defined(HAVE_DECL_ETH_P_1588) && HAVE_DECL_ETH_P_1588)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_1588) == (0x88F7), "ETH_P_1588 != 0x88F7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_1588 0x88F7
 #endif
-#if !(defined(ETH_P_NCSI) || (defined(HAVE_DECL_ETH_P_NCSI) && HAVE_DECL_ETH_P_NCSI))
+#if defined(ETH_P_NCSI) || (defined(HAVE_DECL_ETH_P_NCSI) && HAVE_DECL_ETH_P_NCSI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_NCSI) == (0x88F8), "ETH_P_NCSI != 0x88F8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_NCSI 0x88F8
 #endif
-#if !(defined(ETH_P_PRP) || (defined(HAVE_DECL_ETH_P_PRP) && HAVE_DECL_ETH_P_PRP))
+#if defined(ETH_P_PRP) || (defined(HAVE_DECL_ETH_P_PRP) && HAVE_DECL_ETH_P_PRP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_PRP) == (0x88FB), "ETH_P_PRP != 0x88FB");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_PRP 0x88FB
 #endif
-#if !(defined(ETH_P_FCOE) || (defined(HAVE_DECL_ETH_P_FCOE) && HAVE_DECL_ETH_P_FCOE))
+#if defined(ETH_P_FCOE) || (defined(HAVE_DECL_ETH_P_FCOE) && HAVE_DECL_ETH_P_FCOE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_FCOE) == (0x8906), "ETH_P_FCOE != 0x8906");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_FCOE 0x8906
 #endif
-#if !(defined(ETH_P_TDLS) || (defined(HAVE_DECL_ETH_P_TDLS) && HAVE_DECL_ETH_P_TDLS))
+#if defined(ETH_P_TDLS) || (defined(HAVE_DECL_ETH_P_TDLS) && HAVE_DECL_ETH_P_TDLS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_TDLS) == (0x890D), "ETH_P_TDLS != 0x890D");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_TDLS 0x890D
 #endif
-#if !(defined(ETH_P_FIP) || (defined(HAVE_DECL_ETH_P_FIP) && HAVE_DECL_ETH_P_FIP))
+#if defined(ETH_P_FIP) || (defined(HAVE_DECL_ETH_P_FIP) && HAVE_DECL_ETH_P_FIP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_FIP) == (0x8914), "ETH_P_FIP != 0x8914");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_FIP 0x8914
 #endif
-#if !(defined(ETH_P_IBOE) || (defined(HAVE_DECL_ETH_P_IBOE) && HAVE_DECL_ETH_P_IBOE))
+#if defined(ETH_P_IBOE) || (defined(HAVE_DECL_ETH_P_IBOE) && HAVE_DECL_ETH_P_IBOE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_IBOE) == (0x8915), "ETH_P_IBOE != 0x8915");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_IBOE 0x8915
 #endif
-#if !(defined(ETH_P_80221) || (defined(HAVE_DECL_ETH_P_80221) && HAVE_DECL_ETH_P_80221))
+#if defined(ETH_P_80221) || (defined(HAVE_DECL_ETH_P_80221) && HAVE_DECL_ETH_P_80221)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_80221) == (0x8917), "ETH_P_80221 != 0x8917");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_80221 0x8917
 #endif
-#if !(defined(ETH_P_HSR) || (defined(HAVE_DECL_ETH_P_HSR) && HAVE_DECL_ETH_P_HSR))
+#if defined(ETH_P_HSR) || (defined(HAVE_DECL_ETH_P_HSR) && HAVE_DECL_ETH_P_HSR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_HSR) == (0x892F), "ETH_P_HSR != 0x892F");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_HSR 0x892F
 #endif
-#if !(defined(ETH_P_NSH) || (defined(HAVE_DECL_ETH_P_NSH) && HAVE_DECL_ETH_P_NSH))
+#if defined(ETH_P_NSH) || (defined(HAVE_DECL_ETH_P_NSH) && HAVE_DECL_ETH_P_NSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_NSH) == (0x894F), "ETH_P_NSH != 0x894F");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_NSH 0x894F
 #endif
-#if !(defined(ETH_P_LOOPBACK) || (defined(HAVE_DECL_ETH_P_LOOPBACK) && HAVE_DECL_ETH_P_LOOPBACK))
+#if defined(ETH_P_LOOPBACK) || (defined(HAVE_DECL_ETH_P_LOOPBACK) && HAVE_DECL_ETH_P_LOOPBACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_LOOPBACK) == (0x9000), "ETH_P_LOOPBACK != 0x9000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_LOOPBACK 0x9000
 #endif
-#if !(defined(ETH_P_QINQ1) || (defined(HAVE_DECL_ETH_P_QINQ1) && HAVE_DECL_ETH_P_QINQ1))
+#if defined(ETH_P_QINQ1) || (defined(HAVE_DECL_ETH_P_QINQ1) && HAVE_DECL_ETH_P_QINQ1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_QINQ1) == (0x9100), "ETH_P_QINQ1 != 0x9100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_QINQ1 0x9100
 #endif
-#if !(defined(ETH_P_QINQ2) || (defined(HAVE_DECL_ETH_P_QINQ2) && HAVE_DECL_ETH_P_QINQ2))
+#if defined(ETH_P_QINQ2) || (defined(HAVE_DECL_ETH_P_QINQ2) && HAVE_DECL_ETH_P_QINQ2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_QINQ2) == (0x9200), "ETH_P_QINQ2 != 0x9200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_QINQ2 0x9200
 #endif
-#if !(defined(ETH_P_QINQ3) || (defined(HAVE_DECL_ETH_P_QINQ3) && HAVE_DECL_ETH_P_QINQ3))
+#if defined(ETH_P_QINQ3) || (defined(HAVE_DECL_ETH_P_QINQ3) && HAVE_DECL_ETH_P_QINQ3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_QINQ3) == (0x9300), "ETH_P_QINQ3 != 0x9300");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_QINQ3 0x9300
 #endif
-#if !(defined(ETH_P_EDSA) || (defined(HAVE_DECL_ETH_P_EDSA) && HAVE_DECL_ETH_P_EDSA))
+#if defined(ETH_P_EDSA) || (defined(HAVE_DECL_ETH_P_EDSA) && HAVE_DECL_ETH_P_EDSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_EDSA) == (0xDADA), "ETH_P_EDSA != 0xDADA");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_EDSA 0xDADA
 #endif
-#if !(defined(ETH_P_IFE) || (defined(HAVE_DECL_ETH_P_IFE) && HAVE_DECL_ETH_P_IFE))
+#if defined(ETH_P_IFE) || (defined(HAVE_DECL_ETH_P_IFE) && HAVE_DECL_ETH_P_IFE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_IFE) == (0xED3E), "ETH_P_IFE != 0xED3E");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_IFE 0xED3E
 #endif
-#if !(defined(ETH_P_AF_IUCV) || (defined(HAVE_DECL_ETH_P_AF_IUCV) && HAVE_DECL_ETH_P_AF_IUCV))
+#if defined(ETH_P_AF_IUCV) || (defined(HAVE_DECL_ETH_P_AF_IUCV) && HAVE_DECL_ETH_P_AF_IUCV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ETH_P_AF_IUCV) == (0xFBFB), "ETH_P_AF_IUCV != 0xFBFB");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ETH_P_AF_IUCV 0xFBFB
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat ethernet_protocols[] = {
 
@@ -343,6 +716,7 @@
  XLAT(ETH_P_8021AD),
  XLAT(ETH_P_802_EX1),
  XLAT(ETH_P_ERSPAN),
+ XLAT(ETH_P_PREAUTH),
  XLAT(ETH_P_TIPC),
  XLAT(ETH_P_MACSEC),
  XLAT(ETH_P_8021AH),
@@ -367,4 +741,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ethernet_protocols.in b/xlat/ethernet_protocols.in
index 1e30f77..80c52a9 100644
--- a/xlat/ethernet_protocols.in
+++ b/xlat/ethernet_protocols.in
@@ -68,6 +68,7 @@
 ETH_P_8021AD	0x88A8          /* 802.1ad Service VLAN		*/
 ETH_P_802_EX1	0x88B5		/* 802.1 Local Experimental 1.  */
 ETH_P_ERSPAN	0x88BE		/* ERSPAN type II		*/
+ETH_P_PREAUTH	0x88C7		/* 802.11 Preauthentication	*/
 ETH_P_TIPC	0x88CA		/* TIPC				*/
 ETH_P_MACSEC	0x88E5		/* 802.1ae MACsec */
 ETH_P_8021AH	0x88E7          /* 802.1ah Backbone Service Tag */
diff --git a/xlat/evdev_abs.h b/xlat/evdev_abs.h
index 3edd1f3..5aa92ef 100644
--- a/xlat/evdev_abs.h
+++ b/xlat/evdev_abs.h
@@ -1,132 +1,345 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_abs.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-const struct xlat evdev_abs[] = {
 #if defined(ABS_X) || (defined(HAVE_DECL_ABS_X) && HAVE_DECL_ABS_X)
-  XLAT(ABS_X),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_X) == (0x00), "ABS_X != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_X 0x00
 #endif
 #if defined(ABS_Y) || (defined(HAVE_DECL_ABS_Y) && HAVE_DECL_ABS_Y)
-  XLAT(ABS_Y),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_Y) == (0x01), "ABS_Y != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_Y 0x01
 #endif
 #if defined(ABS_Z) || (defined(HAVE_DECL_ABS_Z) && HAVE_DECL_ABS_Z)
-  XLAT(ABS_Z),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_Z) == (0x02), "ABS_Z != 0x02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_Z 0x02
 #endif
 #if defined(ABS_RX) || (defined(HAVE_DECL_ABS_RX) && HAVE_DECL_ABS_RX)
-  XLAT(ABS_RX),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_RX) == (0x03), "ABS_RX != 0x03");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_RX 0x03
 #endif
 #if defined(ABS_RY) || (defined(HAVE_DECL_ABS_RY) && HAVE_DECL_ABS_RY)
-  XLAT(ABS_RY),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_RY) == (0x04), "ABS_RY != 0x04");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_RY 0x04
 #endif
 #if defined(ABS_RZ) || (defined(HAVE_DECL_ABS_RZ) && HAVE_DECL_ABS_RZ)
-  XLAT(ABS_RZ),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_RZ) == (0x05), "ABS_RZ != 0x05");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_RZ 0x05
 #endif
 #if defined(ABS_THROTTLE) || (defined(HAVE_DECL_ABS_THROTTLE) && HAVE_DECL_ABS_THROTTLE)
-  XLAT(ABS_THROTTLE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_THROTTLE) == (0x06), "ABS_THROTTLE != 0x06");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_THROTTLE 0x06
 #endif
 #if defined(ABS_RUDDER) || (defined(HAVE_DECL_ABS_RUDDER) && HAVE_DECL_ABS_RUDDER)
-  XLAT(ABS_RUDDER),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_RUDDER) == (0x07), "ABS_RUDDER != 0x07");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_RUDDER 0x07
 #endif
 #if defined(ABS_WHEEL) || (defined(HAVE_DECL_ABS_WHEEL) && HAVE_DECL_ABS_WHEEL)
-  XLAT(ABS_WHEEL),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_WHEEL) == (0x08), "ABS_WHEEL != 0x08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_WHEEL 0x08
 #endif
 #if defined(ABS_GAS) || (defined(HAVE_DECL_ABS_GAS) && HAVE_DECL_ABS_GAS)
-  XLAT(ABS_GAS),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_GAS) == (0x09), "ABS_GAS != 0x09");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_GAS 0x09
 #endif
 #if defined(ABS_BRAKE) || (defined(HAVE_DECL_ABS_BRAKE) && HAVE_DECL_ABS_BRAKE)
-  XLAT(ABS_BRAKE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_BRAKE) == (0x0a), "ABS_BRAKE != 0x0a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_BRAKE 0x0a
 #endif
 #if defined(ABS_HAT0X) || (defined(HAVE_DECL_ABS_HAT0X) && HAVE_DECL_ABS_HAT0X)
-  XLAT(ABS_HAT0X),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_HAT0X) == (0x10), "ABS_HAT0X != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_HAT0X 0x10
 #endif
 #if defined(ABS_HAT0Y) || (defined(HAVE_DECL_ABS_HAT0Y) && HAVE_DECL_ABS_HAT0Y)
-  XLAT(ABS_HAT0Y),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_HAT0Y) == (0x11), "ABS_HAT0Y != 0x11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_HAT0Y 0x11
 #endif
 #if defined(ABS_HAT1X) || (defined(HAVE_DECL_ABS_HAT1X) && HAVE_DECL_ABS_HAT1X)
-  XLAT(ABS_HAT1X),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_HAT1X) == (0x12), "ABS_HAT1X != 0x12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_HAT1X 0x12
 #endif
 #if defined(ABS_HAT1Y) || (defined(HAVE_DECL_ABS_HAT1Y) && HAVE_DECL_ABS_HAT1Y)
-  XLAT(ABS_HAT1Y),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_HAT1Y) == (0x13), "ABS_HAT1Y != 0x13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_HAT1Y 0x13
 #endif
 #if defined(ABS_HAT2X) || (defined(HAVE_DECL_ABS_HAT2X) && HAVE_DECL_ABS_HAT2X)
-  XLAT(ABS_HAT2X),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_HAT2X) == (0x14), "ABS_HAT2X != 0x14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_HAT2X 0x14
 #endif
 #if defined(ABS_HAT2Y) || (defined(HAVE_DECL_ABS_HAT2Y) && HAVE_DECL_ABS_HAT2Y)
-  XLAT(ABS_HAT2Y),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_HAT2Y) == (0x15), "ABS_HAT2Y != 0x15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_HAT2Y 0x15
 #endif
 #if defined(ABS_HAT3X) || (defined(HAVE_DECL_ABS_HAT3X) && HAVE_DECL_ABS_HAT3X)
-  XLAT(ABS_HAT3X),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_HAT3X) == (0x16), "ABS_HAT3X != 0x16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_HAT3X 0x16
 #endif
 #if defined(ABS_HAT3Y) || (defined(HAVE_DECL_ABS_HAT3Y) && HAVE_DECL_ABS_HAT3Y)
-  XLAT(ABS_HAT3Y),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_HAT3Y) == (0x17), "ABS_HAT3Y != 0x17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_HAT3Y 0x17
 #endif
 #if defined(ABS_PRESSURE) || (defined(HAVE_DECL_ABS_PRESSURE) && HAVE_DECL_ABS_PRESSURE)
-  XLAT(ABS_PRESSURE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_PRESSURE) == (0x18), "ABS_PRESSURE != 0x18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_PRESSURE 0x18
 #endif
 #if defined(ABS_DISTANCE) || (defined(HAVE_DECL_ABS_DISTANCE) && HAVE_DECL_ABS_DISTANCE)
-  XLAT(ABS_DISTANCE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_DISTANCE) == (0x19), "ABS_DISTANCE != 0x19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_DISTANCE 0x19
 #endif
 #if defined(ABS_TILT_X) || (defined(HAVE_DECL_ABS_TILT_X) && HAVE_DECL_ABS_TILT_X)
-  XLAT(ABS_TILT_X),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_TILT_X) == (0x1a), "ABS_TILT_X != 0x1a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_TILT_X 0x1a
 #endif
 #if defined(ABS_TILT_Y) || (defined(HAVE_DECL_ABS_TILT_Y) && HAVE_DECL_ABS_TILT_Y)
-  XLAT(ABS_TILT_Y),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_TILT_Y) == (0x1b), "ABS_TILT_Y != 0x1b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_TILT_Y 0x1b
 #endif
 #if defined(ABS_TOOL_WIDTH) || (defined(HAVE_DECL_ABS_TOOL_WIDTH) && HAVE_DECL_ABS_TOOL_WIDTH)
-  XLAT(ABS_TOOL_WIDTH),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_TOOL_WIDTH) == (0x1c), "ABS_TOOL_WIDTH != 0x1c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_TOOL_WIDTH 0x1c
 #endif
 #if defined(ABS_VOLUME) || (defined(HAVE_DECL_ABS_VOLUME) && HAVE_DECL_ABS_VOLUME)
-  XLAT(ABS_VOLUME),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_VOLUME) == (0x20), "ABS_VOLUME != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_VOLUME 0x20
 #endif
 #if defined(ABS_MISC) || (defined(HAVE_DECL_ABS_MISC) && HAVE_DECL_ABS_MISC)
-  XLAT(ABS_MISC),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MISC) == (0x28), "ABS_MISC != 0x28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MISC 0x28
 #endif
 #if defined(ABS_MT_SLOT) || (defined(HAVE_DECL_ABS_MT_SLOT) && HAVE_DECL_ABS_MT_SLOT)
-  XLAT(ABS_MT_SLOT),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_SLOT) == (0x2f), "ABS_MT_SLOT != 0x2f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_SLOT 0x2f
 #endif
 #if defined(ABS_MT_TOUCH_MAJOR) || (defined(HAVE_DECL_ABS_MT_TOUCH_MAJOR) && HAVE_DECL_ABS_MT_TOUCH_MAJOR)
-  XLAT(ABS_MT_TOUCH_MAJOR),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_TOUCH_MAJOR) == (0x30), "ABS_MT_TOUCH_MAJOR != 0x30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_TOUCH_MAJOR 0x30
 #endif
 #if defined(ABS_MT_TOUCH_MINOR) || (defined(HAVE_DECL_ABS_MT_TOUCH_MINOR) && HAVE_DECL_ABS_MT_TOUCH_MINOR)
-  XLAT(ABS_MT_TOUCH_MINOR),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_TOUCH_MINOR) == (0x31), "ABS_MT_TOUCH_MINOR != 0x31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_TOUCH_MINOR 0x31
 #endif
 #if defined(ABS_MT_WIDTH_MAJOR) || (defined(HAVE_DECL_ABS_MT_WIDTH_MAJOR) && HAVE_DECL_ABS_MT_WIDTH_MAJOR)
-  XLAT(ABS_MT_WIDTH_MAJOR),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_WIDTH_MAJOR) == (0x32), "ABS_MT_WIDTH_MAJOR != 0x32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_WIDTH_MAJOR 0x32
 #endif
 #if defined(ABS_MT_WIDTH_MINOR) || (defined(HAVE_DECL_ABS_MT_WIDTH_MINOR) && HAVE_DECL_ABS_MT_WIDTH_MINOR)
-  XLAT(ABS_MT_WIDTH_MINOR),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_WIDTH_MINOR) == (0x33), "ABS_MT_WIDTH_MINOR != 0x33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_WIDTH_MINOR 0x33
 #endif
 #if defined(ABS_MT_ORIENTATION) || (defined(HAVE_DECL_ABS_MT_ORIENTATION) && HAVE_DECL_ABS_MT_ORIENTATION)
-  XLAT(ABS_MT_ORIENTATION),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_ORIENTATION) == (0x34), "ABS_MT_ORIENTATION != 0x34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_ORIENTATION 0x34
 #endif
 #if defined(ABS_MT_POSITION_X) || (defined(HAVE_DECL_ABS_MT_POSITION_X) && HAVE_DECL_ABS_MT_POSITION_X)
-  XLAT(ABS_MT_POSITION_X),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_POSITION_X) == (0x35), "ABS_MT_POSITION_X != 0x35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_POSITION_X 0x35
 #endif
 #if defined(ABS_MT_POSITION_Y) || (defined(HAVE_DECL_ABS_MT_POSITION_Y) && HAVE_DECL_ABS_MT_POSITION_Y)
-  XLAT(ABS_MT_POSITION_Y),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_POSITION_Y) == (0x36), "ABS_MT_POSITION_Y != 0x36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_POSITION_Y 0x36
 #endif
 #if defined(ABS_MT_TOOL_TYPE) || (defined(HAVE_DECL_ABS_MT_TOOL_TYPE) && HAVE_DECL_ABS_MT_TOOL_TYPE)
-  XLAT(ABS_MT_TOOL_TYPE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_TOOL_TYPE) == (0x37), "ABS_MT_TOOL_TYPE != 0x37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_TOOL_TYPE 0x37
 #endif
 #if defined(ABS_MT_BLOB_ID) || (defined(HAVE_DECL_ABS_MT_BLOB_ID) && HAVE_DECL_ABS_MT_BLOB_ID)
-  XLAT(ABS_MT_BLOB_ID),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_BLOB_ID) == (0x38), "ABS_MT_BLOB_ID != 0x38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_BLOB_ID 0x38
 #endif
 #if defined(ABS_MT_TRACKING_ID) || (defined(HAVE_DECL_ABS_MT_TRACKING_ID) && HAVE_DECL_ABS_MT_TRACKING_ID)
-  XLAT(ABS_MT_TRACKING_ID),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_TRACKING_ID) == (0x39), "ABS_MT_TRACKING_ID != 0x39");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_TRACKING_ID 0x39
 #endif
 #if defined(ABS_MT_PRESSURE) || (defined(HAVE_DECL_ABS_MT_PRESSURE) && HAVE_DECL_ABS_MT_PRESSURE)
-  XLAT(ABS_MT_PRESSURE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_PRESSURE) == (0x3a), "ABS_MT_PRESSURE != 0x3a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_PRESSURE 0x3a
 #endif
 #if defined(ABS_MT_DISTANCE) || (defined(HAVE_DECL_ABS_MT_DISTANCE) && HAVE_DECL_ABS_MT_DISTANCE)
-  XLAT(ABS_MT_DISTANCE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_DISTANCE) == (0x3b), "ABS_MT_DISTANCE != 0x3b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_DISTANCE 0x3b
 #endif
 #if defined(ABS_MT_TOOL_X) || (defined(HAVE_DECL_ABS_MT_TOOL_X) && HAVE_DECL_ABS_MT_TOOL_X)
-  XLAT(ABS_MT_TOOL_X),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_TOOL_X) == (0x3c), "ABS_MT_TOOL_X != 0x3c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_TOOL_X 0x3c
 #endif
 #if defined(ABS_MT_TOOL_Y) || (defined(HAVE_DECL_ABS_MT_TOOL_Y) && HAVE_DECL_ABS_MT_TOOL_Y)
-  XLAT(ABS_MT_TOOL_Y),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ABS_MT_TOOL_Y) == (0x3d), "ABS_MT_TOOL_Y != 0x3d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ABS_MT_TOOL_Y 0x3d
 #endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
+
+const struct xlat evdev_abs[] = {
+ [ABS_X] = XLAT(ABS_X),
+ [ABS_Y] = XLAT(ABS_Y),
+ [ABS_Z] = XLAT(ABS_Z),
+ [ABS_RX] = XLAT(ABS_RX),
+ [ABS_RY] = XLAT(ABS_RY),
+ [ABS_RZ] = XLAT(ABS_RZ),
+ [ABS_THROTTLE] = XLAT(ABS_THROTTLE),
+ [ABS_RUDDER] = XLAT(ABS_RUDDER),
+ [ABS_WHEEL] = XLAT(ABS_WHEEL),
+ [ABS_GAS] = XLAT(ABS_GAS),
+ [ABS_BRAKE] = XLAT(ABS_BRAKE),
+ [ABS_HAT0X] = XLAT(ABS_HAT0X),
+ [ABS_HAT0Y] = XLAT(ABS_HAT0Y),
+ [ABS_HAT1X] = XLAT(ABS_HAT1X),
+ [ABS_HAT1Y] = XLAT(ABS_HAT1Y),
+ [ABS_HAT2X] = XLAT(ABS_HAT2X),
+ [ABS_HAT2Y] = XLAT(ABS_HAT2Y),
+ [ABS_HAT3X] = XLAT(ABS_HAT3X),
+ [ABS_HAT3Y] = XLAT(ABS_HAT3Y),
+ [ABS_PRESSURE] = XLAT(ABS_PRESSURE),
+ [ABS_DISTANCE] = XLAT(ABS_DISTANCE),
+ [ABS_TILT_X] = XLAT(ABS_TILT_X),
+ [ABS_TILT_Y] = XLAT(ABS_TILT_Y),
+ [ABS_TOOL_WIDTH] = XLAT(ABS_TOOL_WIDTH),
+ [ABS_VOLUME] = XLAT(ABS_VOLUME),
+ [ABS_MISC] = XLAT(ABS_MISC),
+ [ABS_MT_SLOT] = XLAT(ABS_MT_SLOT),
+ [ABS_MT_TOUCH_MAJOR] = XLAT(ABS_MT_TOUCH_MAJOR),
+ [ABS_MT_TOUCH_MINOR] = XLAT(ABS_MT_TOUCH_MINOR),
+ [ABS_MT_WIDTH_MAJOR] = XLAT(ABS_MT_WIDTH_MAJOR),
+ [ABS_MT_WIDTH_MINOR] = XLAT(ABS_MT_WIDTH_MINOR),
+ [ABS_MT_ORIENTATION] = XLAT(ABS_MT_ORIENTATION),
+ [ABS_MT_POSITION_X] = XLAT(ABS_MT_POSITION_X),
+ [ABS_MT_POSITION_Y] = XLAT(ABS_MT_POSITION_Y),
+ [ABS_MT_TOOL_TYPE] = XLAT(ABS_MT_TOOL_TYPE),
+ [ABS_MT_BLOB_ID] = XLAT(ABS_MT_BLOB_ID),
+ [ABS_MT_TRACKING_ID] = XLAT(ABS_MT_TRACKING_ID),
+ [ABS_MT_PRESSURE] = XLAT(ABS_MT_PRESSURE),
+ [ABS_MT_DISTANCE] = XLAT(ABS_MT_DISTANCE),
+ [ABS_MT_TOOL_X] = XLAT(ABS_MT_TOOL_X),
+ [ABS_MT_TOOL_Y] = XLAT(ABS_MT_TOOL_Y),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_abs.in b/xlat/evdev_abs.in
index ec8c2f4..d65b846 100644
--- a/xlat/evdev_abs.in
+++ b/xlat/evdev_abs.in
@@ -1,41 +1,42 @@
-ABS_X
-ABS_Y
-ABS_Z
-ABS_RX
-ABS_RY
-ABS_RZ
-ABS_THROTTLE
-ABS_RUDDER
-ABS_WHEEL
-ABS_GAS
-ABS_BRAKE
-ABS_HAT0X
-ABS_HAT0Y
-ABS_HAT1X
-ABS_HAT1Y
-ABS_HAT2X
-ABS_HAT2Y
-ABS_HAT3X
-ABS_HAT3Y
-ABS_PRESSURE
-ABS_DISTANCE
-ABS_TILT_X
-ABS_TILT_Y
-ABS_TOOL_WIDTH
-ABS_VOLUME
-ABS_MISC
-ABS_MT_SLOT
-ABS_MT_TOUCH_MAJOR
-ABS_MT_TOUCH_MINOR
-ABS_MT_WIDTH_MAJOR
-ABS_MT_WIDTH_MINOR
-ABS_MT_ORIENTATION
-ABS_MT_POSITION_X
-ABS_MT_POSITION_Y
-ABS_MT_TOOL_TYPE
-ABS_MT_BLOB_ID
-ABS_MT_TRACKING_ID
-ABS_MT_PRESSURE
-ABS_MT_DISTANCE
-ABS_MT_TOOL_X
-ABS_MT_TOOL_Y
+#value_indexed
+ABS_X			0x00
+ABS_Y			0x01
+ABS_Z			0x02
+ABS_RX			0x03
+ABS_RY			0x04
+ABS_RZ			0x05
+ABS_THROTTLE		0x06
+ABS_RUDDER		0x07
+ABS_WHEEL		0x08
+ABS_GAS			0x09
+ABS_BRAKE		0x0a
+ABS_HAT0X		0x10
+ABS_HAT0Y		0x11
+ABS_HAT1X		0x12
+ABS_HAT1Y		0x13
+ABS_HAT2X		0x14
+ABS_HAT2Y		0x15
+ABS_HAT3X		0x16
+ABS_HAT3Y		0x17
+ABS_PRESSURE		0x18
+ABS_DISTANCE		0x19
+ABS_TILT_X		0x1a
+ABS_TILT_Y		0x1b
+ABS_TOOL_WIDTH		0x1c
+ABS_VOLUME		0x20
+ABS_MISC		0x28
+ABS_MT_SLOT		0x2f
+ABS_MT_TOUCH_MAJOR	0x30
+ABS_MT_TOUCH_MINOR	0x31
+ABS_MT_WIDTH_MAJOR	0x32
+ABS_MT_WIDTH_MINOR	0x33
+ABS_MT_ORIENTATION	0x34
+ABS_MT_POSITION_X	0x35
+ABS_MT_POSITION_Y	0x36
+ABS_MT_TOOL_TYPE	0x37
+ABS_MT_BLOB_ID		0x38
+ABS_MT_TRACKING_ID	0x39
+ABS_MT_PRESSURE		0x3a
+ABS_MT_DISTANCE		0x3b
+ABS_MT_TOOL_X		0x3c
+ABS_MT_TOOL_Y		0x3d
diff --git a/xlat/evdev_autorepeat.h b/xlat/evdev_autorepeat.h
index d06a02b..c6edd50 100644
--- a/xlat/evdev_autorepeat.h
+++ b/xlat/evdev_autorepeat.h
@@ -1,20 +1,38 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_autorepeat.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_autorepeat in mpers mode
-
+#if defined(REP_DELAY) || (defined(HAVE_DECL_REP_DELAY) && HAVE_DECL_REP_DELAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REP_DELAY) == (0x00), "REP_DELAY != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define REP_DELAY 0x00
+#endif
+#if defined(REP_PERIOD) || (defined(HAVE_DECL_REP_PERIOD) && HAVE_DECL_REP_PERIOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REP_PERIOD) == (0x01), "REP_PERIOD != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REP_PERIOD 0x01
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_autorepeat in mpers mode
+
+# else
 
 static
 const struct xlat evdev_autorepeat[] = {
-#if defined(REP_DELAY) || (defined(HAVE_DECL_REP_DELAY) && HAVE_DECL_REP_DELAY)
-  XLAT(REP_DELAY),
-#endif
-#if defined(REP_PERIOD) || (defined(HAVE_DECL_REP_PERIOD) && HAVE_DECL_REP_PERIOD)
-  XLAT(REP_PERIOD),
-#endif
+ [REP_DELAY] = XLAT(REP_DELAY),
+ [REP_PERIOD] = XLAT(REP_PERIOD),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_autorepeat.in b/xlat/evdev_autorepeat.in
index ac8b8fb..7ab7e2e 100644
--- a/xlat/evdev_autorepeat.in
+++ b/xlat/evdev_autorepeat.in
@@ -1,2 +1,3 @@
-REP_DELAY
-REP_PERIOD
+#value_indexed
+REP_DELAY	0x00
+REP_PERIOD	0x01
diff --git a/xlat/evdev_ev.h b/xlat/evdev_ev.h
index 1d49445..30adf93 100644
--- a/xlat/evdev_ev.h
+++ b/xlat/evdev_ev.h
@@ -1,50 +1,118 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_ev.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_ev in mpers mode
-
+#if defined(EV_SYN) || (defined(HAVE_DECL_EV_SYN) && HAVE_DECL_EV_SYN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_SYN) == (0x00), "EV_SYN != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define EV_SYN 0x00
+#endif
+#if defined(EV_KEY) || (defined(HAVE_DECL_EV_KEY) && HAVE_DECL_EV_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_KEY) == (0x01), "EV_KEY != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_KEY 0x01
+#endif
+#if defined(EV_REL) || (defined(HAVE_DECL_EV_REL) && HAVE_DECL_EV_REL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_REL) == (0x02), "EV_REL != 0x02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_REL 0x02
+#endif
+#if defined(EV_ABS) || (defined(HAVE_DECL_EV_ABS) && HAVE_DECL_EV_ABS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_ABS) == (0x03), "EV_ABS != 0x03");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_ABS 0x03
+#endif
+#if defined(EV_MSC) || (defined(HAVE_DECL_EV_MSC) && HAVE_DECL_EV_MSC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_MSC) == (0x04), "EV_MSC != 0x04");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_MSC 0x04
+#endif
+#if defined(EV_SW) || (defined(HAVE_DECL_EV_SW) && HAVE_DECL_EV_SW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_SW) == (0x05), "EV_SW != 0x05");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_SW 0x05
+#endif
+#if defined(EV_LED) || (defined(HAVE_DECL_EV_LED) && HAVE_DECL_EV_LED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_LED) == (0x11), "EV_LED != 0x11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_LED 0x11
+#endif
+#if defined(EV_SND) || (defined(HAVE_DECL_EV_SND) && HAVE_DECL_EV_SND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_SND) == (0x12), "EV_SND != 0x12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_SND 0x12
+#endif
+#if defined(EV_REP) || (defined(HAVE_DECL_EV_REP) && HAVE_DECL_EV_REP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_REP) == (0x14), "EV_REP != 0x14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_REP 0x14
+#endif
+#if defined(EV_FF) || (defined(HAVE_DECL_EV_FF) && HAVE_DECL_EV_FF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_FF) == (0x15), "EV_FF != 0x15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_FF 0x15
+#endif
+#if defined(EV_PWR) || (defined(HAVE_DECL_EV_PWR) && HAVE_DECL_EV_PWR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_PWR) == (0x16), "EV_PWR != 0x16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_PWR 0x16
+#endif
+#if defined(EV_FF_STATUS) || (defined(HAVE_DECL_EV_FF_STATUS) && HAVE_DECL_EV_FF_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EV_FF_STATUS) == (0x17), "EV_FF_STATUS != 0x17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define EV_FF_STATUS 0x17
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_ev in mpers mode
+
+# else
 
 static
 const struct xlat evdev_ev[] = {
-#if defined(EV_SYN) || (defined(HAVE_DECL_EV_SYN) && HAVE_DECL_EV_SYN)
-  XLAT(EV_SYN),
-#endif
-#if defined(EV_KEY) || (defined(HAVE_DECL_EV_KEY) && HAVE_DECL_EV_KEY)
-  XLAT(EV_KEY),
-#endif
-#if defined(EV_REL) || (defined(HAVE_DECL_EV_REL) && HAVE_DECL_EV_REL)
-  XLAT(EV_REL),
-#endif
-#if defined(EV_ABS) || (defined(HAVE_DECL_EV_ABS) && HAVE_DECL_EV_ABS)
-  XLAT(EV_ABS),
-#endif
-#if defined(EV_MSC) || (defined(HAVE_DECL_EV_MSC) && HAVE_DECL_EV_MSC)
-  XLAT(EV_MSC),
-#endif
-#if defined(EV_SW) || (defined(HAVE_DECL_EV_SW) && HAVE_DECL_EV_SW)
-  XLAT(EV_SW),
-#endif
-#if defined(EV_LED) || (defined(HAVE_DECL_EV_LED) && HAVE_DECL_EV_LED)
-  XLAT(EV_LED),
-#endif
-#if defined(EV_SND) || (defined(HAVE_DECL_EV_SND) && HAVE_DECL_EV_SND)
-  XLAT(EV_SND),
-#endif
-#if defined(EV_REP) || (defined(HAVE_DECL_EV_REP) && HAVE_DECL_EV_REP)
-  XLAT(EV_REP),
-#endif
-#if defined(EV_FF) || (defined(HAVE_DECL_EV_FF) && HAVE_DECL_EV_FF)
-  XLAT(EV_FF),
-#endif
-#if defined(EV_PWR) || (defined(HAVE_DECL_EV_PWR) && HAVE_DECL_EV_PWR)
-  XLAT(EV_PWR),
-#endif
-#if defined(EV_FF_STATUS) || (defined(HAVE_DECL_EV_FF_STATUS) && HAVE_DECL_EV_FF_STATUS)
-  XLAT(EV_FF_STATUS),
-#endif
+ XLAT(EV_SYN),
+ XLAT(EV_KEY),
+ XLAT(EV_REL),
+ XLAT(EV_ABS),
+ XLAT(EV_MSC),
+ XLAT(EV_SW),
+ XLAT(EV_LED),
+ XLAT(EV_SND),
+ XLAT(EV_REP),
+ XLAT(EV_FF),
+ XLAT(EV_PWR),
+ XLAT(EV_FF_STATUS),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_ev.in b/xlat/evdev_ev.in
index 0974b59..4d81952 100644
--- a/xlat/evdev_ev.in
+++ b/xlat/evdev_ev.in
@@ -1,12 +1,12 @@
-EV_SYN
-EV_KEY
-EV_REL
-EV_ABS
-EV_MSC
-EV_SW
-EV_LED
-EV_SND
-EV_REP
-EV_FF
-EV_PWR
-EV_FF_STATUS
+EV_SYN		0x00
+EV_KEY		0x01
+EV_REL		0x02
+EV_ABS		0x03
+EV_MSC		0x04
+EV_SW		0x05
+EV_LED		0x11
+EV_SND		0x12
+EV_REP		0x14
+EV_FF		0x15
+EV_PWR		0x16
+EV_FF_STATUS	0x17
diff --git a/xlat/evdev_ff_status.h b/xlat/evdev_ff_status.h
index 107bb1a..947d545 100644
--- a/xlat/evdev_ff_status.h
+++ b/xlat/evdev_ff_status.h
@@ -1,20 +1,38 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_ff_status.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_ff_status in mpers mode
-
+#if defined(FF_STATUS_STOPPED) || (defined(HAVE_DECL_FF_STATUS_STOPPED) && HAVE_DECL_FF_STATUS_STOPPED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_STATUS_STOPPED) == (0x00), "FF_STATUS_STOPPED != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define FF_STATUS_STOPPED 0x00
+#endif
+#if defined(FF_STATUS_PLAYING) || (defined(HAVE_DECL_FF_STATUS_PLAYING) && HAVE_DECL_FF_STATUS_PLAYING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_STATUS_PLAYING) == (0x01), "FF_STATUS_PLAYING != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_STATUS_PLAYING 0x01
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_ff_status in mpers mode
+
+# else
 
 static
 const struct xlat evdev_ff_status[] = {
-#if defined(FF_STATUS_STOPPED) || (defined(HAVE_DECL_FF_STATUS_STOPPED) && HAVE_DECL_FF_STATUS_STOPPED)
-  XLAT(FF_STATUS_STOPPED),
-#endif
-#if defined(FF_STATUS_PLAYING) || (defined(HAVE_DECL_FF_STATUS_PLAYING) && HAVE_DECL_FF_STATUS_PLAYING)
-  XLAT(FF_STATUS_PLAYING),
-#endif
+ [FF_STATUS_STOPPED] = XLAT(FF_STATUS_STOPPED),
+ [FF_STATUS_PLAYING] = XLAT(FF_STATUS_PLAYING),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_ff_status.in b/xlat/evdev_ff_status.in
index 3f88710..1f2815f 100644
--- a/xlat/evdev_ff_status.in
+++ b/xlat/evdev_ff_status.in
@@ -1,2 +1,3 @@
-FF_STATUS_STOPPED
-FF_STATUS_PLAYING
+#value_indexed
+FF_STATUS_STOPPED	0x00
+FF_STATUS_PLAYING	0x01
diff --git a/xlat/evdev_ff_types.h b/xlat/evdev_ff_types.h
index 35dddc9..3bc6b04 100644
--- a/xlat/evdev_ff_types.h
+++ b/xlat/evdev_ff_types.h
@@ -1,62 +1,151 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_ff_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_ff_types in mpers mode
-
+#if defined(FF_RUMBLE) || (defined(HAVE_DECL_FF_RUMBLE) && HAVE_DECL_FF_RUMBLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_RUMBLE) == (0x50), "FF_RUMBLE != 0x50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define FF_RUMBLE 0x50
+#endif
+#if defined(FF_PERIODIC) || (defined(HAVE_DECL_FF_PERIODIC) && HAVE_DECL_FF_PERIODIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_PERIODIC) == (0x51), "FF_PERIODIC != 0x51");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_PERIODIC 0x51
+#endif
+#if defined(FF_CONSTANT) || (defined(HAVE_DECL_FF_CONSTANT) && HAVE_DECL_FF_CONSTANT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_CONSTANT) == (0x52), "FF_CONSTANT != 0x52");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_CONSTANT 0x52
+#endif
+#if defined(FF_SPRING) || (defined(HAVE_DECL_FF_SPRING) && HAVE_DECL_FF_SPRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_SPRING) == (0x53), "FF_SPRING != 0x53");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_SPRING 0x53
+#endif
+#if defined(FF_FRICTION) || (defined(HAVE_DECL_FF_FRICTION) && HAVE_DECL_FF_FRICTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_FRICTION) == (0x54), "FF_FRICTION != 0x54");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_FRICTION 0x54
+#endif
+#if defined(FF_DAMPER) || (defined(HAVE_DECL_FF_DAMPER) && HAVE_DECL_FF_DAMPER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_DAMPER) == (0x55), "FF_DAMPER != 0x55");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_DAMPER 0x55
+#endif
+#if defined(FF_INERTIA) || (defined(HAVE_DECL_FF_INERTIA) && HAVE_DECL_FF_INERTIA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_INERTIA) == (0x56), "FF_INERTIA != 0x56");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_INERTIA 0x56
+#endif
+#if defined(FF_RAMP) || (defined(HAVE_DECL_FF_RAMP) && HAVE_DECL_FF_RAMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_RAMP) == (0x57), "FF_RAMP != 0x57");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_RAMP 0x57
+#endif
+#if defined(FF_SQUARE) || (defined(HAVE_DECL_FF_SQUARE) && HAVE_DECL_FF_SQUARE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_SQUARE) == (0x58), "FF_SQUARE != 0x58");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_SQUARE 0x58
+#endif
+#if defined(FF_TRIANGLE) || (defined(HAVE_DECL_FF_TRIANGLE) && HAVE_DECL_FF_TRIANGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_TRIANGLE) == (0x59), "FF_TRIANGLE != 0x59");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_TRIANGLE 0x59
+#endif
+#if defined(FF_SINE) || (defined(HAVE_DECL_FF_SINE) && HAVE_DECL_FF_SINE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_SINE) == (0x5a), "FF_SINE != 0x5a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_SINE 0x5a
+#endif
+#if defined(FF_SAW_UP) || (defined(HAVE_DECL_FF_SAW_UP) && HAVE_DECL_FF_SAW_UP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_SAW_UP) == (0x5b), "FF_SAW_UP != 0x5b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_SAW_UP 0x5b
+#endif
+#if defined(FF_SAW_DOWN) || (defined(HAVE_DECL_FF_SAW_DOWN) && HAVE_DECL_FF_SAW_DOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_SAW_DOWN) == (0x5c), "FF_SAW_DOWN != 0x5c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_SAW_DOWN 0x5c
+#endif
+#if defined(FF_CUSTOM) || (defined(HAVE_DECL_FF_CUSTOM) && HAVE_DECL_FF_CUSTOM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_CUSTOM) == (0x5d), "FF_CUSTOM != 0x5d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_CUSTOM 0x5d
+#endif
+#if defined(FF_GAIN) || (defined(HAVE_DECL_FF_GAIN) && HAVE_DECL_FF_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_GAIN) == (0x60), "FF_GAIN != 0x60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_GAIN 0x60
+#endif
+#if defined(FF_AUTOCENTER) || (defined(HAVE_DECL_FF_AUTOCENTER) && HAVE_DECL_FF_AUTOCENTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FF_AUTOCENTER) == (0x61), "FF_AUTOCENTER != 0x61");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FF_AUTOCENTER 0x61
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_ff_types in mpers mode
+
+# else
 
 static
 const struct xlat evdev_ff_types[] = {
-#if defined(FF_RUMBLE) || (defined(HAVE_DECL_FF_RUMBLE) && HAVE_DECL_FF_RUMBLE)
-  XLAT(FF_RUMBLE),
-#endif
-#if defined(FF_PERIODIC) || (defined(HAVE_DECL_FF_PERIODIC) && HAVE_DECL_FF_PERIODIC)
-  XLAT(FF_PERIODIC),
-#endif
-#if defined(FF_CONSTANT) || (defined(HAVE_DECL_FF_CONSTANT) && HAVE_DECL_FF_CONSTANT)
-  XLAT(FF_CONSTANT),
-#endif
-#if defined(FF_SPRING) || (defined(HAVE_DECL_FF_SPRING) && HAVE_DECL_FF_SPRING)
-  XLAT(FF_SPRING),
-#endif
-#if defined(FF_FRICTION) || (defined(HAVE_DECL_FF_FRICTION) && HAVE_DECL_FF_FRICTION)
-  XLAT(FF_FRICTION),
-#endif
-#if defined(FF_DAMPER) || (defined(HAVE_DECL_FF_DAMPER) && HAVE_DECL_FF_DAMPER)
-  XLAT(FF_DAMPER),
-#endif
-#if defined(FF_INERTIA) || (defined(HAVE_DECL_FF_INERTIA) && HAVE_DECL_FF_INERTIA)
-  XLAT(FF_INERTIA),
-#endif
-#if defined(FF_RAMP) || (defined(HAVE_DECL_FF_RAMP) && HAVE_DECL_FF_RAMP)
-  XLAT(FF_RAMP),
-#endif
-#if defined(FF_SQUARE) || (defined(HAVE_DECL_FF_SQUARE) && HAVE_DECL_FF_SQUARE)
-  XLAT(FF_SQUARE),
-#endif
-#if defined(FF_TRIANGLE) || (defined(HAVE_DECL_FF_TRIANGLE) && HAVE_DECL_FF_TRIANGLE)
-  XLAT(FF_TRIANGLE),
-#endif
-#if defined(FF_SINE) || (defined(HAVE_DECL_FF_SINE) && HAVE_DECL_FF_SINE)
-  XLAT(FF_SINE),
-#endif
-#if defined(FF_SAW_UP) || (defined(HAVE_DECL_FF_SAW_UP) && HAVE_DECL_FF_SAW_UP)
-  XLAT(FF_SAW_UP),
-#endif
-#if defined(FF_SAW_DOWN) || (defined(HAVE_DECL_FF_SAW_DOWN) && HAVE_DECL_FF_SAW_DOWN)
-  XLAT(FF_SAW_DOWN),
-#endif
-#if defined(FF_CUSTOM) || (defined(HAVE_DECL_FF_CUSTOM) && HAVE_DECL_FF_CUSTOM)
-  XLAT(FF_CUSTOM),
-#endif
-#if defined(FF_GAIN) || (defined(HAVE_DECL_FF_GAIN) && HAVE_DECL_FF_GAIN)
-  XLAT(FF_GAIN),
-#endif
-#if defined(FF_AUTOCENTER) || (defined(HAVE_DECL_FF_AUTOCENTER) && HAVE_DECL_FF_AUTOCENTER)
-  XLAT(FF_AUTOCENTER),
-#endif
+
+ XLAT(FF_RUMBLE),
+ XLAT(FF_PERIODIC),
+ XLAT(FF_CONSTANT),
+ XLAT(FF_SPRING),
+ XLAT(FF_FRICTION),
+ XLAT(FF_DAMPER),
+ XLAT(FF_INERTIA),
+ XLAT(FF_RAMP),
+ XLAT(FF_SQUARE),
+ XLAT(FF_TRIANGLE),
+ XLAT(FF_SINE),
+ XLAT(FF_SAW_UP),
+ XLAT(FF_SAW_DOWN),
+ XLAT(FF_CUSTOM),
+ XLAT(FF_GAIN),
+ XLAT(FF_AUTOCENTER),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_ff_types.in b/xlat/evdev_ff_types.in
index c6714f8..72b87c5 100644
--- a/xlat/evdev_ff_types.in
+++ b/xlat/evdev_ff_types.in
@@ -1,16 +1,17 @@
-FF_RUMBLE
-FF_PERIODIC
-FF_CONSTANT
-FF_SPRING
-FF_FRICTION
-FF_DAMPER
-FF_INERTIA
-FF_RAMP
-FF_SQUARE
-FF_TRIANGLE
-FF_SINE
-FF_SAW_UP
-FF_SAW_DOWN
-FF_CUSTOM
-FF_GAIN
-FF_AUTOCENTER
+/* sort -k2,2 */
+FF_RUMBLE       0x50
+FF_PERIODIC     0x51
+FF_CONSTANT     0x52
+FF_SPRING       0x53
+FF_FRICTION     0x54
+FF_DAMPER       0x55
+FF_INERTIA      0x56
+FF_RAMP         0x57
+FF_SQUARE       0x58
+FF_TRIANGLE     0x59
+FF_SINE         0x5a
+FF_SAW_UP       0x5b
+FF_SAW_DOWN     0x5c
+FF_CUSTOM       0x5d
+FF_GAIN         0x60
+FF_AUTOCENTER   0x61
diff --git a/xlat/evdev_keycode.h b/xlat/evdev_keycode.h
index 44f28ef..9fedfb9 100644
--- a/xlat/evdev_keycode.h
+++ b/xlat/evdev_keycode.h
@@ -1,2259 +1,4474 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_keycode.in; do not edit. */
-#if !(defined(KEY_RESERVED) || (defined(HAVE_DECL_KEY_RESERVED) && HAVE_DECL_KEY_RESERVED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KEY_RESERVED) || (defined(HAVE_DECL_KEY_RESERVED) && HAVE_DECL_KEY_RESERVED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RESERVED) == (0), "KEY_RESERVED != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RESERVED 0
 #endif
-#if !(defined(KEY_ESC) || (defined(HAVE_DECL_KEY_ESC) && HAVE_DECL_KEY_ESC))
+#if defined(KEY_ESC) || (defined(HAVE_DECL_KEY_ESC) && HAVE_DECL_KEY_ESC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ESC) == (1), "KEY_ESC != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ESC 1
 #endif
-#if !(defined(KEY_1) || (defined(HAVE_DECL_KEY_1) && HAVE_DECL_KEY_1))
+#if defined(KEY_1) || (defined(HAVE_DECL_KEY_1) && HAVE_DECL_KEY_1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_1) == (2), "KEY_1 != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_1 2
 #endif
-#if !(defined(KEY_2) || (defined(HAVE_DECL_KEY_2) && HAVE_DECL_KEY_2))
+#if defined(KEY_2) || (defined(HAVE_DECL_KEY_2) && HAVE_DECL_KEY_2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_2) == (3), "KEY_2 != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_2 3
 #endif
-#if !(defined(KEY_3) || (defined(HAVE_DECL_KEY_3) && HAVE_DECL_KEY_3))
+#if defined(KEY_3) || (defined(HAVE_DECL_KEY_3) && HAVE_DECL_KEY_3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_3) == (4), "KEY_3 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_3 4
 #endif
-#if !(defined(KEY_4) || (defined(HAVE_DECL_KEY_4) && HAVE_DECL_KEY_4))
+#if defined(KEY_4) || (defined(HAVE_DECL_KEY_4) && HAVE_DECL_KEY_4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_4) == (5), "KEY_4 != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_4 5
 #endif
-#if !(defined(KEY_5) || (defined(HAVE_DECL_KEY_5) && HAVE_DECL_KEY_5))
+#if defined(KEY_5) || (defined(HAVE_DECL_KEY_5) && HAVE_DECL_KEY_5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_5) == (6), "KEY_5 != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_5 6
 #endif
-#if !(defined(KEY_6) || (defined(HAVE_DECL_KEY_6) && HAVE_DECL_KEY_6))
+#if defined(KEY_6) || (defined(HAVE_DECL_KEY_6) && HAVE_DECL_KEY_6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_6) == (7), "KEY_6 != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_6 7
 #endif
-#if !(defined(KEY_7) || (defined(HAVE_DECL_KEY_7) && HAVE_DECL_KEY_7))
+#if defined(KEY_7) || (defined(HAVE_DECL_KEY_7) && HAVE_DECL_KEY_7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_7) == (8), "KEY_7 != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_7 8
 #endif
-#if !(defined(KEY_8) || (defined(HAVE_DECL_KEY_8) && HAVE_DECL_KEY_8))
+#if defined(KEY_8) || (defined(HAVE_DECL_KEY_8) && HAVE_DECL_KEY_8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_8) == (9), "KEY_8 != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_8 9
 #endif
-#if !(defined(KEY_9) || (defined(HAVE_DECL_KEY_9) && HAVE_DECL_KEY_9))
+#if defined(KEY_9) || (defined(HAVE_DECL_KEY_9) && HAVE_DECL_KEY_9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_9) == (10), "KEY_9 != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_9 10
 #endif
-#if !(defined(KEY_0) || (defined(HAVE_DECL_KEY_0) && HAVE_DECL_KEY_0))
+#if defined(KEY_0) || (defined(HAVE_DECL_KEY_0) && HAVE_DECL_KEY_0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_0) == (11), "KEY_0 != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_0 11
 #endif
-#if !(defined(KEY_MINUS) || (defined(HAVE_DECL_KEY_MINUS) && HAVE_DECL_KEY_MINUS))
+#if defined(KEY_MINUS) || (defined(HAVE_DECL_KEY_MINUS) && HAVE_DECL_KEY_MINUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MINUS) == (12), "KEY_MINUS != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MINUS 12
 #endif
-#if !(defined(KEY_EQUAL) || (defined(HAVE_DECL_KEY_EQUAL) && HAVE_DECL_KEY_EQUAL))
+#if defined(KEY_EQUAL) || (defined(HAVE_DECL_KEY_EQUAL) && HAVE_DECL_KEY_EQUAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_EQUAL) == (13), "KEY_EQUAL != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_EQUAL 13
 #endif
-#if !(defined(KEY_BACKSPACE) || (defined(HAVE_DECL_KEY_BACKSPACE) && HAVE_DECL_KEY_BACKSPACE))
+#if defined(KEY_BACKSPACE) || (defined(HAVE_DECL_KEY_BACKSPACE) && HAVE_DECL_KEY_BACKSPACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BACKSPACE) == (14), "KEY_BACKSPACE != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BACKSPACE 14
 #endif
-#if !(defined(KEY_TAB) || (defined(HAVE_DECL_KEY_TAB) && HAVE_DECL_KEY_TAB))
+#if defined(KEY_TAB) || (defined(HAVE_DECL_KEY_TAB) && HAVE_DECL_KEY_TAB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TAB) == (15), "KEY_TAB != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TAB 15
 #endif
-#if !(defined(KEY_Q) || (defined(HAVE_DECL_KEY_Q) && HAVE_DECL_KEY_Q))
+#if defined(KEY_Q) || (defined(HAVE_DECL_KEY_Q) && HAVE_DECL_KEY_Q)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_Q) == (16), "KEY_Q != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_Q 16
 #endif
-#if !(defined(KEY_W) || (defined(HAVE_DECL_KEY_W) && HAVE_DECL_KEY_W))
+#if defined(KEY_W) || (defined(HAVE_DECL_KEY_W) && HAVE_DECL_KEY_W)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_W) == (17), "KEY_W != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_W 17
 #endif
-#if !(defined(KEY_E) || (defined(HAVE_DECL_KEY_E) && HAVE_DECL_KEY_E))
+#if defined(KEY_E) || (defined(HAVE_DECL_KEY_E) && HAVE_DECL_KEY_E)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_E) == (18), "KEY_E != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_E 18
 #endif
-#if !(defined(KEY_R) || (defined(HAVE_DECL_KEY_R) && HAVE_DECL_KEY_R))
+#if defined(KEY_R) || (defined(HAVE_DECL_KEY_R) && HAVE_DECL_KEY_R)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_R) == (19), "KEY_R != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_R 19
 #endif
-#if !(defined(KEY_T) || (defined(HAVE_DECL_KEY_T) && HAVE_DECL_KEY_T))
+#if defined(KEY_T) || (defined(HAVE_DECL_KEY_T) && HAVE_DECL_KEY_T)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_T) == (20), "KEY_T != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_T 20
 #endif
-#if !(defined(KEY_Y) || (defined(HAVE_DECL_KEY_Y) && HAVE_DECL_KEY_Y))
+#if defined(KEY_Y) || (defined(HAVE_DECL_KEY_Y) && HAVE_DECL_KEY_Y)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_Y) == (21), "KEY_Y != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_Y 21
 #endif
-#if !(defined(KEY_U) || (defined(HAVE_DECL_KEY_U) && HAVE_DECL_KEY_U))
+#if defined(KEY_U) || (defined(HAVE_DECL_KEY_U) && HAVE_DECL_KEY_U)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_U) == (22), "KEY_U != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_U 22
 #endif
-#if !(defined(KEY_I) || (defined(HAVE_DECL_KEY_I) && HAVE_DECL_KEY_I))
+#if defined(KEY_I) || (defined(HAVE_DECL_KEY_I) && HAVE_DECL_KEY_I)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_I) == (23), "KEY_I != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_I 23
 #endif
-#if !(defined(KEY_O) || (defined(HAVE_DECL_KEY_O) && HAVE_DECL_KEY_O))
+#if defined(KEY_O) || (defined(HAVE_DECL_KEY_O) && HAVE_DECL_KEY_O)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_O) == (24), "KEY_O != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_O 24
 #endif
-#if !(defined(KEY_P) || (defined(HAVE_DECL_KEY_P) && HAVE_DECL_KEY_P))
+#if defined(KEY_P) || (defined(HAVE_DECL_KEY_P) && HAVE_DECL_KEY_P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_P) == (25), "KEY_P != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_P 25
 #endif
-#if !(defined(KEY_LEFTBRACE) || (defined(HAVE_DECL_KEY_LEFTBRACE) && HAVE_DECL_KEY_LEFTBRACE))
+#if defined(KEY_LEFTBRACE) || (defined(HAVE_DECL_KEY_LEFTBRACE) && HAVE_DECL_KEY_LEFTBRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LEFTBRACE) == (26), "KEY_LEFTBRACE != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LEFTBRACE 26
 #endif
-#if !(defined(KEY_RIGHTBRACE) || (defined(HAVE_DECL_KEY_RIGHTBRACE) && HAVE_DECL_KEY_RIGHTBRACE))
+#if defined(KEY_RIGHTBRACE) || (defined(HAVE_DECL_KEY_RIGHTBRACE) && HAVE_DECL_KEY_RIGHTBRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RIGHTBRACE) == (27), "KEY_RIGHTBRACE != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RIGHTBRACE 27
 #endif
-#if !(defined(KEY_ENTER) || (defined(HAVE_DECL_KEY_ENTER) && HAVE_DECL_KEY_ENTER))
+#if defined(KEY_ENTER) || (defined(HAVE_DECL_KEY_ENTER) && HAVE_DECL_KEY_ENTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ENTER) == (28), "KEY_ENTER != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ENTER 28
 #endif
-#if !(defined(KEY_LEFTCTRL) || (defined(HAVE_DECL_KEY_LEFTCTRL) && HAVE_DECL_KEY_LEFTCTRL))
+#if defined(KEY_LEFTCTRL) || (defined(HAVE_DECL_KEY_LEFTCTRL) && HAVE_DECL_KEY_LEFTCTRL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LEFTCTRL) == (29), "KEY_LEFTCTRL != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LEFTCTRL 29
 #endif
-#if !(defined(KEY_A) || (defined(HAVE_DECL_KEY_A) && HAVE_DECL_KEY_A))
+#if defined(KEY_A) || (defined(HAVE_DECL_KEY_A) && HAVE_DECL_KEY_A)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_A) == (30), "KEY_A != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_A 30
 #endif
-#if !(defined(KEY_S) || (defined(HAVE_DECL_KEY_S) && HAVE_DECL_KEY_S))
+#if defined(KEY_S) || (defined(HAVE_DECL_KEY_S) && HAVE_DECL_KEY_S)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_S) == (31), "KEY_S != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_S 31
 #endif
-#if !(defined(KEY_D) || (defined(HAVE_DECL_KEY_D) && HAVE_DECL_KEY_D))
+#if defined(KEY_D) || (defined(HAVE_DECL_KEY_D) && HAVE_DECL_KEY_D)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_D) == (32), "KEY_D != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_D 32
 #endif
-#if !(defined(KEY_F) || (defined(HAVE_DECL_KEY_F) && HAVE_DECL_KEY_F))
+#if defined(KEY_F) || (defined(HAVE_DECL_KEY_F) && HAVE_DECL_KEY_F)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F) == (33), "KEY_F != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F 33
 #endif
-#if !(defined(KEY_G) || (defined(HAVE_DECL_KEY_G) && HAVE_DECL_KEY_G))
+#if defined(KEY_G) || (defined(HAVE_DECL_KEY_G) && HAVE_DECL_KEY_G)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_G) == (34), "KEY_G != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_G 34
 #endif
-#if !(defined(KEY_H) || (defined(HAVE_DECL_KEY_H) && HAVE_DECL_KEY_H))
+#if defined(KEY_H) || (defined(HAVE_DECL_KEY_H) && HAVE_DECL_KEY_H)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_H) == (35), "KEY_H != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_H 35
 #endif
-#if !(defined(KEY_J) || (defined(HAVE_DECL_KEY_J) && HAVE_DECL_KEY_J))
+#if defined(KEY_J) || (defined(HAVE_DECL_KEY_J) && HAVE_DECL_KEY_J)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_J) == (36), "KEY_J != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_J 36
 #endif
-#if !(defined(KEY_K) || (defined(HAVE_DECL_KEY_K) && HAVE_DECL_KEY_K))
+#if defined(KEY_K) || (defined(HAVE_DECL_KEY_K) && HAVE_DECL_KEY_K)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_K) == (37), "KEY_K != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_K 37
 #endif
-#if !(defined(KEY_L) || (defined(HAVE_DECL_KEY_L) && HAVE_DECL_KEY_L))
+#if defined(KEY_L) || (defined(HAVE_DECL_KEY_L) && HAVE_DECL_KEY_L)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_L) == (38), "KEY_L != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_L 38
 #endif
-#if !(defined(KEY_SEMICOLON) || (defined(HAVE_DECL_KEY_SEMICOLON) && HAVE_DECL_KEY_SEMICOLON))
+#if defined(KEY_SEMICOLON) || (defined(HAVE_DECL_KEY_SEMICOLON) && HAVE_DECL_KEY_SEMICOLON)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SEMICOLON) == (39), "KEY_SEMICOLON != 39");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SEMICOLON 39
 #endif
-#if !(defined(KEY_APOSTROPHE) || (defined(HAVE_DECL_KEY_APOSTROPHE) && HAVE_DECL_KEY_APOSTROPHE))
+#if defined(KEY_APOSTROPHE) || (defined(HAVE_DECL_KEY_APOSTROPHE) && HAVE_DECL_KEY_APOSTROPHE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_APOSTROPHE) == (40), "KEY_APOSTROPHE != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_APOSTROPHE 40
 #endif
-#if !(defined(KEY_GRAVE) || (defined(HAVE_DECL_KEY_GRAVE) && HAVE_DECL_KEY_GRAVE))
+#if defined(KEY_GRAVE) || (defined(HAVE_DECL_KEY_GRAVE) && HAVE_DECL_KEY_GRAVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GRAVE) == (41), "KEY_GRAVE != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GRAVE 41
 #endif
-#if !(defined(KEY_LEFTSHIFT) || (defined(HAVE_DECL_KEY_LEFTSHIFT) && HAVE_DECL_KEY_LEFTSHIFT))
+#if defined(KEY_LEFTSHIFT) || (defined(HAVE_DECL_KEY_LEFTSHIFT) && HAVE_DECL_KEY_LEFTSHIFT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LEFTSHIFT) == (42), "KEY_LEFTSHIFT != 42");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LEFTSHIFT 42
 #endif
-#if !(defined(KEY_BACKSLASH) || (defined(HAVE_DECL_KEY_BACKSLASH) && HAVE_DECL_KEY_BACKSLASH))
+#if defined(KEY_BACKSLASH) || (defined(HAVE_DECL_KEY_BACKSLASH) && HAVE_DECL_KEY_BACKSLASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BACKSLASH) == (43), "KEY_BACKSLASH != 43");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BACKSLASH 43
 #endif
-#if !(defined(KEY_Z) || (defined(HAVE_DECL_KEY_Z) && HAVE_DECL_KEY_Z))
+#if defined(KEY_Z) || (defined(HAVE_DECL_KEY_Z) && HAVE_DECL_KEY_Z)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_Z) == (44), "KEY_Z != 44");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_Z 44
 #endif
-#if !(defined(KEY_X) || (defined(HAVE_DECL_KEY_X) && HAVE_DECL_KEY_X))
+#if defined(KEY_X) || (defined(HAVE_DECL_KEY_X) && HAVE_DECL_KEY_X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_X) == (45), "KEY_X != 45");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_X 45
 #endif
-#if !(defined(KEY_C) || (defined(HAVE_DECL_KEY_C) && HAVE_DECL_KEY_C))
+#if defined(KEY_C) || (defined(HAVE_DECL_KEY_C) && HAVE_DECL_KEY_C)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_C) == (46), "KEY_C != 46");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_C 46
 #endif
-#if !(defined(KEY_V) || (defined(HAVE_DECL_KEY_V) && HAVE_DECL_KEY_V))
+#if defined(KEY_V) || (defined(HAVE_DECL_KEY_V) && HAVE_DECL_KEY_V)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_V) == (47), "KEY_V != 47");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_V 47
 #endif
-#if !(defined(KEY_B) || (defined(HAVE_DECL_KEY_B) && HAVE_DECL_KEY_B))
+#if defined(KEY_B) || (defined(HAVE_DECL_KEY_B) && HAVE_DECL_KEY_B)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_B) == (48), "KEY_B != 48");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_B 48
 #endif
-#if !(defined(KEY_N) || (defined(HAVE_DECL_KEY_N) && HAVE_DECL_KEY_N))
+#if defined(KEY_N) || (defined(HAVE_DECL_KEY_N) && HAVE_DECL_KEY_N)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_N) == (49), "KEY_N != 49");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_N 49
 #endif
-#if !(defined(KEY_M) || (defined(HAVE_DECL_KEY_M) && HAVE_DECL_KEY_M))
+#if defined(KEY_M) || (defined(HAVE_DECL_KEY_M) && HAVE_DECL_KEY_M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_M) == (50), "KEY_M != 50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_M 50
 #endif
-#if !(defined(KEY_COMMA) || (defined(HAVE_DECL_KEY_COMMA) && HAVE_DECL_KEY_COMMA))
+#if defined(KEY_COMMA) || (defined(HAVE_DECL_KEY_COMMA) && HAVE_DECL_KEY_COMMA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_COMMA) == (51), "KEY_COMMA != 51");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_COMMA 51
 #endif
-#if !(defined(KEY_DOT) || (defined(HAVE_DECL_KEY_DOT) && HAVE_DECL_KEY_DOT))
+#if defined(KEY_DOT) || (defined(HAVE_DECL_KEY_DOT) && HAVE_DECL_KEY_DOT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DOT) == (52), "KEY_DOT != 52");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DOT 52
 #endif
-#if !(defined(KEY_SLASH) || (defined(HAVE_DECL_KEY_SLASH) && HAVE_DECL_KEY_SLASH))
+#if defined(KEY_SLASH) || (defined(HAVE_DECL_KEY_SLASH) && HAVE_DECL_KEY_SLASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SLASH) == (53), "KEY_SLASH != 53");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SLASH 53
 #endif
-#if !(defined(KEY_RIGHTSHIFT) || (defined(HAVE_DECL_KEY_RIGHTSHIFT) && HAVE_DECL_KEY_RIGHTSHIFT))
+#if defined(KEY_RIGHTSHIFT) || (defined(HAVE_DECL_KEY_RIGHTSHIFT) && HAVE_DECL_KEY_RIGHTSHIFT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RIGHTSHIFT) == (54), "KEY_RIGHTSHIFT != 54");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RIGHTSHIFT 54
 #endif
-#if !(defined(KEY_KPASTERISK) || (defined(HAVE_DECL_KEY_KPASTERISK) && HAVE_DECL_KEY_KPASTERISK))
+#if defined(KEY_KPASTERISK) || (defined(HAVE_DECL_KEY_KPASTERISK) && HAVE_DECL_KEY_KPASTERISK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPASTERISK) == (55), "KEY_KPASTERISK != 55");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPASTERISK 55
 #endif
-#if !(defined(KEY_LEFTALT) || (defined(HAVE_DECL_KEY_LEFTALT) && HAVE_DECL_KEY_LEFTALT))
+#if defined(KEY_LEFTALT) || (defined(HAVE_DECL_KEY_LEFTALT) && HAVE_DECL_KEY_LEFTALT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LEFTALT) == (56), "KEY_LEFTALT != 56");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LEFTALT 56
 #endif
-#if !(defined(KEY_SPACE) || (defined(HAVE_DECL_KEY_SPACE) && HAVE_DECL_KEY_SPACE))
+#if defined(KEY_SPACE) || (defined(HAVE_DECL_KEY_SPACE) && HAVE_DECL_KEY_SPACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPACE) == (57), "KEY_SPACE != 57");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPACE 57
 #endif
-#if !(defined(KEY_CAPSLOCK) || (defined(HAVE_DECL_KEY_CAPSLOCK) && HAVE_DECL_KEY_CAPSLOCK))
+#if defined(KEY_CAPSLOCK) || (defined(HAVE_DECL_KEY_CAPSLOCK) && HAVE_DECL_KEY_CAPSLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CAPSLOCK) == (58), "KEY_CAPSLOCK != 58");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CAPSLOCK 58
 #endif
-#if !(defined(KEY_F1) || (defined(HAVE_DECL_KEY_F1) && HAVE_DECL_KEY_F1))
+#if defined(KEY_F1) || (defined(HAVE_DECL_KEY_F1) && HAVE_DECL_KEY_F1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F1) == (59), "KEY_F1 != 59");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F1 59
 #endif
-#if !(defined(KEY_F2) || (defined(HAVE_DECL_KEY_F2) && HAVE_DECL_KEY_F2))
+#if defined(KEY_F2) || (defined(HAVE_DECL_KEY_F2) && HAVE_DECL_KEY_F2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F2) == (60), "KEY_F2 != 60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F2 60
 #endif
-#if !(defined(KEY_F3) || (defined(HAVE_DECL_KEY_F3) && HAVE_DECL_KEY_F3))
+#if defined(KEY_F3) || (defined(HAVE_DECL_KEY_F3) && HAVE_DECL_KEY_F3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F3) == (61), "KEY_F3 != 61");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F3 61
 #endif
-#if !(defined(KEY_F4) || (defined(HAVE_DECL_KEY_F4) && HAVE_DECL_KEY_F4))
+#if defined(KEY_F4) || (defined(HAVE_DECL_KEY_F4) && HAVE_DECL_KEY_F4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F4) == (62), "KEY_F4 != 62");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F4 62
 #endif
-#if !(defined(KEY_F5) || (defined(HAVE_DECL_KEY_F5) && HAVE_DECL_KEY_F5))
+#if defined(KEY_F5) || (defined(HAVE_DECL_KEY_F5) && HAVE_DECL_KEY_F5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F5) == (63), "KEY_F5 != 63");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F5 63
 #endif
-#if !(defined(KEY_F6) || (defined(HAVE_DECL_KEY_F6) && HAVE_DECL_KEY_F6))
+#if defined(KEY_F6) || (defined(HAVE_DECL_KEY_F6) && HAVE_DECL_KEY_F6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F6) == (64), "KEY_F6 != 64");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F6 64
 #endif
-#if !(defined(KEY_F7) || (defined(HAVE_DECL_KEY_F7) && HAVE_DECL_KEY_F7))
+#if defined(KEY_F7) || (defined(HAVE_DECL_KEY_F7) && HAVE_DECL_KEY_F7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F7) == (65), "KEY_F7 != 65");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F7 65
 #endif
-#if !(defined(KEY_F8) || (defined(HAVE_DECL_KEY_F8) && HAVE_DECL_KEY_F8))
+#if defined(KEY_F8) || (defined(HAVE_DECL_KEY_F8) && HAVE_DECL_KEY_F8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F8) == (66), "KEY_F8 != 66");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F8 66
 #endif
-#if !(defined(KEY_F9) || (defined(HAVE_DECL_KEY_F9) && HAVE_DECL_KEY_F9))
+#if defined(KEY_F9) || (defined(HAVE_DECL_KEY_F9) && HAVE_DECL_KEY_F9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F9) == (67), "KEY_F9 != 67");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F9 67
 #endif
-#if !(defined(KEY_F10) || (defined(HAVE_DECL_KEY_F10) && HAVE_DECL_KEY_F10))
+#if defined(KEY_F10) || (defined(HAVE_DECL_KEY_F10) && HAVE_DECL_KEY_F10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F10) == (68), "KEY_F10 != 68");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F10 68
 #endif
-#if !(defined(KEY_NUMLOCK) || (defined(HAVE_DECL_KEY_NUMLOCK) && HAVE_DECL_KEY_NUMLOCK))
+#if defined(KEY_NUMLOCK) || (defined(HAVE_DECL_KEY_NUMLOCK) && HAVE_DECL_KEY_NUMLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMLOCK) == (69), "KEY_NUMLOCK != 69");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMLOCK 69
 #endif
-#if !(defined(KEY_SCROLLLOCK) || (defined(HAVE_DECL_KEY_SCROLLLOCK) && HAVE_DECL_KEY_SCROLLLOCK))
+#if defined(KEY_SCROLLLOCK) || (defined(HAVE_DECL_KEY_SCROLLLOCK) && HAVE_DECL_KEY_SCROLLLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SCROLLLOCK) == (70), "KEY_SCROLLLOCK != 70");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SCROLLLOCK 70
 #endif
-#if !(defined(KEY_KP7) || (defined(HAVE_DECL_KEY_KP7) && HAVE_DECL_KEY_KP7))
+#if defined(KEY_KP7) || (defined(HAVE_DECL_KEY_KP7) && HAVE_DECL_KEY_KP7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP7) == (71), "KEY_KP7 != 71");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP7 71
 #endif
-#if !(defined(KEY_KP8) || (defined(HAVE_DECL_KEY_KP8) && HAVE_DECL_KEY_KP8))
+#if defined(KEY_KP8) || (defined(HAVE_DECL_KEY_KP8) && HAVE_DECL_KEY_KP8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP8) == (72), "KEY_KP8 != 72");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP8 72
 #endif
-#if !(defined(KEY_KP9) || (defined(HAVE_DECL_KEY_KP9) && HAVE_DECL_KEY_KP9))
+#if defined(KEY_KP9) || (defined(HAVE_DECL_KEY_KP9) && HAVE_DECL_KEY_KP9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP9) == (73), "KEY_KP9 != 73");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP9 73
 #endif
-#if !(defined(KEY_KPMINUS) || (defined(HAVE_DECL_KEY_KPMINUS) && HAVE_DECL_KEY_KPMINUS))
+#if defined(KEY_KPMINUS) || (defined(HAVE_DECL_KEY_KPMINUS) && HAVE_DECL_KEY_KPMINUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPMINUS) == (74), "KEY_KPMINUS != 74");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPMINUS 74
 #endif
-#if !(defined(KEY_KP4) || (defined(HAVE_DECL_KEY_KP4) && HAVE_DECL_KEY_KP4))
+#if defined(KEY_KP4) || (defined(HAVE_DECL_KEY_KP4) && HAVE_DECL_KEY_KP4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP4) == (75), "KEY_KP4 != 75");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP4 75
 #endif
-#if !(defined(KEY_KP5) || (defined(HAVE_DECL_KEY_KP5) && HAVE_DECL_KEY_KP5))
+#if defined(KEY_KP5) || (defined(HAVE_DECL_KEY_KP5) && HAVE_DECL_KEY_KP5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP5) == (76), "KEY_KP5 != 76");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP5 76
 #endif
-#if !(defined(KEY_KP6) || (defined(HAVE_DECL_KEY_KP6) && HAVE_DECL_KEY_KP6))
+#if defined(KEY_KP6) || (defined(HAVE_DECL_KEY_KP6) && HAVE_DECL_KEY_KP6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP6) == (77), "KEY_KP6 != 77");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP6 77
 #endif
-#if !(defined(KEY_KPPLUS) || (defined(HAVE_DECL_KEY_KPPLUS) && HAVE_DECL_KEY_KPPLUS))
+#if defined(KEY_KPPLUS) || (defined(HAVE_DECL_KEY_KPPLUS) && HAVE_DECL_KEY_KPPLUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPPLUS) == (78), "KEY_KPPLUS != 78");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPPLUS 78
 #endif
-#if !(defined(KEY_KP1) || (defined(HAVE_DECL_KEY_KP1) && HAVE_DECL_KEY_KP1))
+#if defined(KEY_KP1) || (defined(HAVE_DECL_KEY_KP1) && HAVE_DECL_KEY_KP1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP1) == (79), "KEY_KP1 != 79");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP1 79
 #endif
-#if !(defined(KEY_KP2) || (defined(HAVE_DECL_KEY_KP2) && HAVE_DECL_KEY_KP2))
+#if defined(KEY_KP2) || (defined(HAVE_DECL_KEY_KP2) && HAVE_DECL_KEY_KP2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP2) == (80), "KEY_KP2 != 80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP2 80
 #endif
-#if !(defined(KEY_KP3) || (defined(HAVE_DECL_KEY_KP3) && HAVE_DECL_KEY_KP3))
+#if defined(KEY_KP3) || (defined(HAVE_DECL_KEY_KP3) && HAVE_DECL_KEY_KP3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP3) == (81), "KEY_KP3 != 81");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP3 81
 #endif
-#if !(defined(KEY_KP0) || (defined(HAVE_DECL_KEY_KP0) && HAVE_DECL_KEY_KP0))
+#if defined(KEY_KP0) || (defined(HAVE_DECL_KEY_KP0) && HAVE_DECL_KEY_KP0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KP0) == (82), "KEY_KP0 != 82");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KP0 82
 #endif
-#if !(defined(KEY_KPDOT) || (defined(HAVE_DECL_KEY_KPDOT) && HAVE_DECL_KEY_KPDOT))
+#if defined(KEY_KPDOT) || (defined(HAVE_DECL_KEY_KPDOT) && HAVE_DECL_KEY_KPDOT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPDOT) == (83), "KEY_KPDOT != 83");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPDOT 83
 #endif
-#if !(defined(KEY_ZENKAKUHANKAKU) || (defined(HAVE_DECL_KEY_ZENKAKUHANKAKU) && HAVE_DECL_KEY_ZENKAKUHANKAKU))
+#if defined(KEY_ZENKAKUHANKAKU) || (defined(HAVE_DECL_KEY_ZENKAKUHANKAKU) && HAVE_DECL_KEY_ZENKAKUHANKAKU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ZENKAKUHANKAKU) == (85), "KEY_ZENKAKUHANKAKU != 85");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ZENKAKUHANKAKU 85
 #endif
-#if !(defined(KEY_102ND) || (defined(HAVE_DECL_KEY_102ND) && HAVE_DECL_KEY_102ND))
+#if defined(KEY_102ND) || (defined(HAVE_DECL_KEY_102ND) && HAVE_DECL_KEY_102ND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_102ND) == (86), "KEY_102ND != 86");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_102ND 86
 #endif
-#if !(defined(KEY_F11) || (defined(HAVE_DECL_KEY_F11) && HAVE_DECL_KEY_F11))
+#if defined(KEY_F11) || (defined(HAVE_DECL_KEY_F11) && HAVE_DECL_KEY_F11)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F11) == (87), "KEY_F11 != 87");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F11 87
 #endif
-#if !(defined(KEY_F12) || (defined(HAVE_DECL_KEY_F12) && HAVE_DECL_KEY_F12))
+#if defined(KEY_F12) || (defined(HAVE_DECL_KEY_F12) && HAVE_DECL_KEY_F12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F12) == (88), "KEY_F12 != 88");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F12 88
 #endif
-#if !(defined(KEY_RO) || (defined(HAVE_DECL_KEY_RO) && HAVE_DECL_KEY_RO))
+#if defined(KEY_RO) || (defined(HAVE_DECL_KEY_RO) && HAVE_DECL_KEY_RO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RO) == (89), "KEY_RO != 89");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RO 89
 #endif
-#if !(defined(KEY_KATAKANA) || (defined(HAVE_DECL_KEY_KATAKANA) && HAVE_DECL_KEY_KATAKANA))
+#if defined(KEY_KATAKANA) || (defined(HAVE_DECL_KEY_KATAKANA) && HAVE_DECL_KEY_KATAKANA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KATAKANA) == (90), "KEY_KATAKANA != 90");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KATAKANA 90
 #endif
-#if !(defined(KEY_HIRAGANA) || (defined(HAVE_DECL_KEY_HIRAGANA) && HAVE_DECL_KEY_HIRAGANA))
+#if defined(KEY_HIRAGANA) || (defined(HAVE_DECL_KEY_HIRAGANA) && HAVE_DECL_KEY_HIRAGANA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_HIRAGANA) == (91), "KEY_HIRAGANA != 91");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_HIRAGANA 91
 #endif
-#if !(defined(KEY_HENKAN) || (defined(HAVE_DECL_KEY_HENKAN) && HAVE_DECL_KEY_HENKAN))
+#if defined(KEY_HENKAN) || (defined(HAVE_DECL_KEY_HENKAN) && HAVE_DECL_KEY_HENKAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_HENKAN) == (92), "KEY_HENKAN != 92");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_HENKAN 92
 #endif
-#if !(defined(KEY_KATAKANAHIRAGANA) || (defined(HAVE_DECL_KEY_KATAKANAHIRAGANA) && HAVE_DECL_KEY_KATAKANAHIRAGANA))
+#if defined(KEY_KATAKANAHIRAGANA) || (defined(HAVE_DECL_KEY_KATAKANAHIRAGANA) && HAVE_DECL_KEY_KATAKANAHIRAGANA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KATAKANAHIRAGANA) == (93), "KEY_KATAKANAHIRAGANA != 93");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KATAKANAHIRAGANA 93
 #endif
-#if !(defined(KEY_MUHENKAN) || (defined(HAVE_DECL_KEY_MUHENKAN) && HAVE_DECL_KEY_MUHENKAN))
+#if defined(KEY_MUHENKAN) || (defined(HAVE_DECL_KEY_MUHENKAN) && HAVE_DECL_KEY_MUHENKAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MUHENKAN) == (94), "KEY_MUHENKAN != 94");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MUHENKAN 94
 #endif
-#if !(defined(KEY_KPJPCOMMA) || (defined(HAVE_DECL_KEY_KPJPCOMMA) && HAVE_DECL_KEY_KPJPCOMMA))
+#if defined(KEY_KPJPCOMMA) || (defined(HAVE_DECL_KEY_KPJPCOMMA) && HAVE_DECL_KEY_KPJPCOMMA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPJPCOMMA) == (95), "KEY_KPJPCOMMA != 95");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPJPCOMMA 95
 #endif
-#if !(defined(KEY_KPENTER) || (defined(HAVE_DECL_KEY_KPENTER) && HAVE_DECL_KEY_KPENTER))
+#if defined(KEY_KPENTER) || (defined(HAVE_DECL_KEY_KPENTER) && HAVE_DECL_KEY_KPENTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPENTER) == (96), "KEY_KPENTER != 96");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPENTER 96
 #endif
-#if !(defined(KEY_RIGHTCTRL) || (defined(HAVE_DECL_KEY_RIGHTCTRL) && HAVE_DECL_KEY_RIGHTCTRL))
+#if defined(KEY_RIGHTCTRL) || (defined(HAVE_DECL_KEY_RIGHTCTRL) && HAVE_DECL_KEY_RIGHTCTRL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RIGHTCTRL) == (97), "KEY_RIGHTCTRL != 97");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RIGHTCTRL 97
 #endif
-#if !(defined(KEY_KPSLASH) || (defined(HAVE_DECL_KEY_KPSLASH) && HAVE_DECL_KEY_KPSLASH))
+#if defined(KEY_KPSLASH) || (defined(HAVE_DECL_KEY_KPSLASH) && HAVE_DECL_KEY_KPSLASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPSLASH) == (98), "KEY_KPSLASH != 98");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPSLASH 98
 #endif
-#if !(defined(KEY_SYSRQ) || (defined(HAVE_DECL_KEY_SYSRQ) && HAVE_DECL_KEY_SYSRQ))
+#if defined(KEY_SYSRQ) || (defined(HAVE_DECL_KEY_SYSRQ) && HAVE_DECL_KEY_SYSRQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SYSRQ) == (99), "KEY_SYSRQ != 99");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SYSRQ 99
 #endif
-#if !(defined(KEY_RIGHTALT) || (defined(HAVE_DECL_KEY_RIGHTALT) && HAVE_DECL_KEY_RIGHTALT))
+#if defined(KEY_RIGHTALT) || (defined(HAVE_DECL_KEY_RIGHTALT) && HAVE_DECL_KEY_RIGHTALT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RIGHTALT) == (100), "KEY_RIGHTALT != 100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RIGHTALT 100
 #endif
-#if !(defined(KEY_LINEFEED) || (defined(HAVE_DECL_KEY_LINEFEED) && HAVE_DECL_KEY_LINEFEED))
+#if defined(KEY_LINEFEED) || (defined(HAVE_DECL_KEY_LINEFEED) && HAVE_DECL_KEY_LINEFEED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LINEFEED) == (101), "KEY_LINEFEED != 101");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LINEFEED 101
 #endif
-#if !(defined(KEY_HOME) || (defined(HAVE_DECL_KEY_HOME) && HAVE_DECL_KEY_HOME))
+#if defined(KEY_HOME) || (defined(HAVE_DECL_KEY_HOME) && HAVE_DECL_KEY_HOME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_HOME) == (102), "KEY_HOME != 102");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_HOME 102
 #endif
-#if !(defined(KEY_UP) || (defined(HAVE_DECL_KEY_UP) && HAVE_DECL_KEY_UP))
+#if defined(KEY_UP) || (defined(HAVE_DECL_KEY_UP) && HAVE_DECL_KEY_UP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_UP) == (103), "KEY_UP != 103");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_UP 103
 #endif
-#if !(defined(KEY_PAGEUP) || (defined(HAVE_DECL_KEY_PAGEUP) && HAVE_DECL_KEY_PAGEUP))
+#if defined(KEY_PAGEUP) || (defined(HAVE_DECL_KEY_PAGEUP) && HAVE_DECL_KEY_PAGEUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PAGEUP) == (104), "KEY_PAGEUP != 104");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PAGEUP 104
 #endif
-#if !(defined(KEY_LEFT) || (defined(HAVE_DECL_KEY_LEFT) && HAVE_DECL_KEY_LEFT))
+#if defined(KEY_LEFT) || (defined(HAVE_DECL_KEY_LEFT) && HAVE_DECL_KEY_LEFT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LEFT) == (105), "KEY_LEFT != 105");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LEFT 105
 #endif
-#if !(defined(KEY_RIGHT) || (defined(HAVE_DECL_KEY_RIGHT) && HAVE_DECL_KEY_RIGHT))
+#if defined(KEY_RIGHT) || (defined(HAVE_DECL_KEY_RIGHT) && HAVE_DECL_KEY_RIGHT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RIGHT) == (106), "KEY_RIGHT != 106");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RIGHT 106
 #endif
-#if !(defined(KEY_END) || (defined(HAVE_DECL_KEY_END) && HAVE_DECL_KEY_END))
+#if defined(KEY_END) || (defined(HAVE_DECL_KEY_END) && HAVE_DECL_KEY_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_END) == (107), "KEY_END != 107");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_END 107
 #endif
-#if !(defined(KEY_DOWN) || (defined(HAVE_DECL_KEY_DOWN) && HAVE_DECL_KEY_DOWN))
+#if defined(KEY_DOWN) || (defined(HAVE_DECL_KEY_DOWN) && HAVE_DECL_KEY_DOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DOWN) == (108), "KEY_DOWN != 108");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DOWN 108
 #endif
-#if !(defined(KEY_PAGEDOWN) || (defined(HAVE_DECL_KEY_PAGEDOWN) && HAVE_DECL_KEY_PAGEDOWN))
+#if defined(KEY_PAGEDOWN) || (defined(HAVE_DECL_KEY_PAGEDOWN) && HAVE_DECL_KEY_PAGEDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PAGEDOWN) == (109), "KEY_PAGEDOWN != 109");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PAGEDOWN 109
 #endif
-#if !(defined(KEY_INSERT) || (defined(HAVE_DECL_KEY_INSERT) && HAVE_DECL_KEY_INSERT))
+#if defined(KEY_INSERT) || (defined(HAVE_DECL_KEY_INSERT) && HAVE_DECL_KEY_INSERT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_INSERT) == (110), "KEY_INSERT != 110");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_INSERT 110
 #endif
-#if !(defined(KEY_DELETE) || (defined(HAVE_DECL_KEY_DELETE) && HAVE_DECL_KEY_DELETE))
+#if defined(KEY_DELETE) || (defined(HAVE_DECL_KEY_DELETE) && HAVE_DECL_KEY_DELETE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DELETE) == (111), "KEY_DELETE != 111");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DELETE 111
 #endif
-#if !(defined(KEY_MACRO) || (defined(HAVE_DECL_KEY_MACRO) && HAVE_DECL_KEY_MACRO))
+#if defined(KEY_MACRO) || (defined(HAVE_DECL_KEY_MACRO) && HAVE_DECL_KEY_MACRO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MACRO) == (112), "KEY_MACRO != 112");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MACRO 112
 #endif
-#if !(defined(KEY_MUTE) || (defined(HAVE_DECL_KEY_MUTE) && HAVE_DECL_KEY_MUTE))
+#if defined(KEY_MUTE) || (defined(HAVE_DECL_KEY_MUTE) && HAVE_DECL_KEY_MUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MUTE) == (113), "KEY_MUTE != 113");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MUTE 113
 #endif
-#if !(defined(KEY_VOLUMEDOWN) || (defined(HAVE_DECL_KEY_VOLUMEDOWN) && HAVE_DECL_KEY_VOLUMEDOWN))
+#if defined(KEY_VOLUMEDOWN) || (defined(HAVE_DECL_KEY_VOLUMEDOWN) && HAVE_DECL_KEY_VOLUMEDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VOLUMEDOWN) == (114), "KEY_VOLUMEDOWN != 114");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VOLUMEDOWN 114
 #endif
-#if !(defined(KEY_VOLUMEUP) || (defined(HAVE_DECL_KEY_VOLUMEUP) && HAVE_DECL_KEY_VOLUMEUP))
+#if defined(KEY_VOLUMEUP) || (defined(HAVE_DECL_KEY_VOLUMEUP) && HAVE_DECL_KEY_VOLUMEUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VOLUMEUP) == (115), "KEY_VOLUMEUP != 115");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VOLUMEUP 115
 #endif
-#if !(defined(KEY_POWER) || (defined(HAVE_DECL_KEY_POWER) && HAVE_DECL_KEY_POWER))
+#if defined(KEY_POWER) || (defined(HAVE_DECL_KEY_POWER) && HAVE_DECL_KEY_POWER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_POWER) == (116), "KEY_POWER != 116");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_POWER 116
 #endif
-#if !(defined(KEY_KPEQUAL) || (defined(HAVE_DECL_KEY_KPEQUAL) && HAVE_DECL_KEY_KPEQUAL))
+#if defined(KEY_KPEQUAL) || (defined(HAVE_DECL_KEY_KPEQUAL) && HAVE_DECL_KEY_KPEQUAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPEQUAL) == (117), "KEY_KPEQUAL != 117");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPEQUAL 117
 #endif
-#if !(defined(KEY_KPPLUSMINUS) || (defined(HAVE_DECL_KEY_KPPLUSMINUS) && HAVE_DECL_KEY_KPPLUSMINUS))
+#if defined(KEY_KPPLUSMINUS) || (defined(HAVE_DECL_KEY_KPPLUSMINUS) && HAVE_DECL_KEY_KPPLUSMINUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPPLUSMINUS) == (118), "KEY_KPPLUSMINUS != 118");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPPLUSMINUS 118
 #endif
-#if !(defined(KEY_PAUSE) || (defined(HAVE_DECL_KEY_PAUSE) && HAVE_DECL_KEY_PAUSE))
+#if defined(KEY_PAUSE) || (defined(HAVE_DECL_KEY_PAUSE) && HAVE_DECL_KEY_PAUSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PAUSE) == (119), "KEY_PAUSE != 119");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PAUSE 119
 #endif
-#if !(defined(KEY_SCALE) || (defined(HAVE_DECL_KEY_SCALE) && HAVE_DECL_KEY_SCALE))
+#if defined(KEY_SCALE) || (defined(HAVE_DECL_KEY_SCALE) && HAVE_DECL_KEY_SCALE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SCALE) == (120), "KEY_SCALE != 120");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SCALE 120
 #endif
-#if !(defined(KEY_KPCOMMA) || (defined(HAVE_DECL_KEY_KPCOMMA) && HAVE_DECL_KEY_KPCOMMA))
+#if defined(KEY_KPCOMMA) || (defined(HAVE_DECL_KEY_KPCOMMA) && HAVE_DECL_KEY_KPCOMMA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPCOMMA) == (121), "KEY_KPCOMMA != 121");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPCOMMA 121
 #endif
-#if !(defined(KEY_HANGEUL) || (defined(HAVE_DECL_KEY_HANGEUL) && HAVE_DECL_KEY_HANGEUL))
+#if defined(KEY_HANGEUL) || (defined(HAVE_DECL_KEY_HANGEUL) && HAVE_DECL_KEY_HANGEUL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_HANGEUL) == (122), "KEY_HANGEUL != 122");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_HANGEUL 122
 #endif
-#if !(defined(KEY_HANJA) || (defined(HAVE_DECL_KEY_HANJA) && HAVE_DECL_KEY_HANJA))
+#if defined(KEY_HANJA) || (defined(HAVE_DECL_KEY_HANJA) && HAVE_DECL_KEY_HANJA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_HANJA) == (123), "KEY_HANJA != 123");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_HANJA 123
 #endif
-#if !(defined(KEY_YEN) || (defined(HAVE_DECL_KEY_YEN) && HAVE_DECL_KEY_YEN))
+#if defined(KEY_YEN) || (defined(HAVE_DECL_KEY_YEN) && HAVE_DECL_KEY_YEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_YEN) == (124), "KEY_YEN != 124");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_YEN 124
 #endif
-#if !(defined(KEY_LEFTMETA) || (defined(HAVE_DECL_KEY_LEFTMETA) && HAVE_DECL_KEY_LEFTMETA))
+#if defined(KEY_LEFTMETA) || (defined(HAVE_DECL_KEY_LEFTMETA) && HAVE_DECL_KEY_LEFTMETA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LEFTMETA) == (125), "KEY_LEFTMETA != 125");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LEFTMETA 125
 #endif
-#if !(defined(KEY_RIGHTMETA) || (defined(HAVE_DECL_KEY_RIGHTMETA) && HAVE_DECL_KEY_RIGHTMETA))
+#if defined(KEY_RIGHTMETA) || (defined(HAVE_DECL_KEY_RIGHTMETA) && HAVE_DECL_KEY_RIGHTMETA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RIGHTMETA) == (126), "KEY_RIGHTMETA != 126");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RIGHTMETA 126
 #endif
-#if !(defined(KEY_COMPOSE) || (defined(HAVE_DECL_KEY_COMPOSE) && HAVE_DECL_KEY_COMPOSE))
+#if defined(KEY_COMPOSE) || (defined(HAVE_DECL_KEY_COMPOSE) && HAVE_DECL_KEY_COMPOSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_COMPOSE) == (127), "KEY_COMPOSE != 127");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_COMPOSE 127
 #endif
-#if !(defined(KEY_STOP) || (defined(HAVE_DECL_KEY_STOP) && HAVE_DECL_KEY_STOP))
+#if defined(KEY_STOP) || (defined(HAVE_DECL_KEY_STOP) && HAVE_DECL_KEY_STOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_STOP) == (128), "KEY_STOP != 128");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_STOP 128
 #endif
-#if !(defined(KEY_AGAIN) || (defined(HAVE_DECL_KEY_AGAIN) && HAVE_DECL_KEY_AGAIN))
+#if defined(KEY_AGAIN) || (defined(HAVE_DECL_KEY_AGAIN) && HAVE_DECL_KEY_AGAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_AGAIN) == (129), "KEY_AGAIN != 129");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_AGAIN 129
 #endif
-#if !(defined(KEY_PROPS) || (defined(HAVE_DECL_KEY_PROPS) && HAVE_DECL_KEY_PROPS))
+#if defined(KEY_PROPS) || (defined(HAVE_DECL_KEY_PROPS) && HAVE_DECL_KEY_PROPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PROPS) == (130), "KEY_PROPS != 130");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PROPS 130
 #endif
-#if !(defined(KEY_UNDO) || (defined(HAVE_DECL_KEY_UNDO) && HAVE_DECL_KEY_UNDO))
+#if defined(KEY_UNDO) || (defined(HAVE_DECL_KEY_UNDO) && HAVE_DECL_KEY_UNDO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_UNDO) == (131), "KEY_UNDO != 131");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_UNDO 131
 #endif
-#if !(defined(KEY_FRONT) || (defined(HAVE_DECL_KEY_FRONT) && HAVE_DECL_KEY_FRONT))
+#if defined(KEY_FRONT) || (defined(HAVE_DECL_KEY_FRONT) && HAVE_DECL_KEY_FRONT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FRONT) == (132), "KEY_FRONT != 132");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FRONT 132
 #endif
-#if !(defined(KEY_COPY) || (defined(HAVE_DECL_KEY_COPY) && HAVE_DECL_KEY_COPY))
+#if defined(KEY_COPY) || (defined(HAVE_DECL_KEY_COPY) && HAVE_DECL_KEY_COPY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_COPY) == (133), "KEY_COPY != 133");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_COPY 133
 #endif
-#if !(defined(KEY_OPEN) || (defined(HAVE_DECL_KEY_OPEN) && HAVE_DECL_KEY_OPEN))
+#if defined(KEY_OPEN) || (defined(HAVE_DECL_KEY_OPEN) && HAVE_DECL_KEY_OPEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OPEN) == (134), "KEY_OPEN != 134");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OPEN 134
 #endif
-#if !(defined(KEY_PASTE) || (defined(HAVE_DECL_KEY_PASTE) && HAVE_DECL_KEY_PASTE))
+#if defined(KEY_PASTE) || (defined(HAVE_DECL_KEY_PASTE) && HAVE_DECL_KEY_PASTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PASTE) == (135), "KEY_PASTE != 135");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PASTE 135
 #endif
-#if !(defined(KEY_FIND) || (defined(HAVE_DECL_KEY_FIND) && HAVE_DECL_KEY_FIND))
+#if defined(KEY_FIND) || (defined(HAVE_DECL_KEY_FIND) && HAVE_DECL_KEY_FIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FIND) == (136), "KEY_FIND != 136");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FIND 136
 #endif
-#if !(defined(KEY_CUT) || (defined(HAVE_DECL_KEY_CUT) && HAVE_DECL_KEY_CUT))
+#if defined(KEY_CUT) || (defined(HAVE_DECL_KEY_CUT) && HAVE_DECL_KEY_CUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CUT) == (137), "KEY_CUT != 137");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CUT 137
 #endif
-#if !(defined(KEY_HELP) || (defined(HAVE_DECL_KEY_HELP) && HAVE_DECL_KEY_HELP))
+#if defined(KEY_HELP) || (defined(HAVE_DECL_KEY_HELP) && HAVE_DECL_KEY_HELP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_HELP) == (138), "KEY_HELP != 138");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_HELP 138
 #endif
-#if !(defined(KEY_MENU) || (defined(HAVE_DECL_KEY_MENU) && HAVE_DECL_KEY_MENU))
+#if defined(KEY_MENU) || (defined(HAVE_DECL_KEY_MENU) && HAVE_DECL_KEY_MENU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MENU) == (139), "KEY_MENU != 139");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MENU 139
 #endif
-#if !(defined(KEY_CALC) || (defined(HAVE_DECL_KEY_CALC) && HAVE_DECL_KEY_CALC))
+#if defined(KEY_CALC) || (defined(HAVE_DECL_KEY_CALC) && HAVE_DECL_KEY_CALC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CALC) == (140), "KEY_CALC != 140");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CALC 140
 #endif
-#if !(defined(KEY_SETUP) || (defined(HAVE_DECL_KEY_SETUP) && HAVE_DECL_KEY_SETUP))
+#if defined(KEY_SETUP) || (defined(HAVE_DECL_KEY_SETUP) && HAVE_DECL_KEY_SETUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SETUP) == (141), "KEY_SETUP != 141");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SETUP 141
 #endif
-#if !(defined(KEY_SLEEP) || (defined(HAVE_DECL_KEY_SLEEP) && HAVE_DECL_KEY_SLEEP))
+#if defined(KEY_SLEEP) || (defined(HAVE_DECL_KEY_SLEEP) && HAVE_DECL_KEY_SLEEP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SLEEP) == (142), "KEY_SLEEP != 142");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SLEEP 142
 #endif
-#if !(defined(KEY_WAKEUP) || (defined(HAVE_DECL_KEY_WAKEUP) && HAVE_DECL_KEY_WAKEUP))
+#if defined(KEY_WAKEUP) || (defined(HAVE_DECL_KEY_WAKEUP) && HAVE_DECL_KEY_WAKEUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_WAKEUP) == (143), "KEY_WAKEUP != 143");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_WAKEUP 143
 #endif
-#if !(defined(KEY_FILE) || (defined(HAVE_DECL_KEY_FILE) && HAVE_DECL_KEY_FILE))
+#if defined(KEY_FILE) || (defined(HAVE_DECL_KEY_FILE) && HAVE_DECL_KEY_FILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FILE) == (144), "KEY_FILE != 144");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FILE 144
 #endif
-#if !(defined(KEY_SENDFILE) || (defined(HAVE_DECL_KEY_SENDFILE) && HAVE_DECL_KEY_SENDFILE))
+#if defined(KEY_SENDFILE) || (defined(HAVE_DECL_KEY_SENDFILE) && HAVE_DECL_KEY_SENDFILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SENDFILE) == (145), "KEY_SENDFILE != 145");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SENDFILE 145
 #endif
-#if !(defined(KEY_DELETEFILE) || (defined(HAVE_DECL_KEY_DELETEFILE) && HAVE_DECL_KEY_DELETEFILE))
+#if defined(KEY_DELETEFILE) || (defined(HAVE_DECL_KEY_DELETEFILE) && HAVE_DECL_KEY_DELETEFILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DELETEFILE) == (146), "KEY_DELETEFILE != 146");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DELETEFILE 146
 #endif
-#if !(defined(KEY_XFER) || (defined(HAVE_DECL_KEY_XFER) && HAVE_DECL_KEY_XFER))
+#if defined(KEY_XFER) || (defined(HAVE_DECL_KEY_XFER) && HAVE_DECL_KEY_XFER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_XFER) == (147), "KEY_XFER != 147");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_XFER 147
 #endif
-#if !(defined(KEY_PROG1) || (defined(HAVE_DECL_KEY_PROG1) && HAVE_DECL_KEY_PROG1))
+#if defined(KEY_PROG1) || (defined(HAVE_DECL_KEY_PROG1) && HAVE_DECL_KEY_PROG1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PROG1) == (148), "KEY_PROG1 != 148");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PROG1 148
 #endif
-#if !(defined(KEY_PROG2) || (defined(HAVE_DECL_KEY_PROG2) && HAVE_DECL_KEY_PROG2))
+#if defined(KEY_PROG2) || (defined(HAVE_DECL_KEY_PROG2) && HAVE_DECL_KEY_PROG2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PROG2) == (149), "KEY_PROG2 != 149");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PROG2 149
 #endif
-#if !(defined(KEY_WWW) || (defined(HAVE_DECL_KEY_WWW) && HAVE_DECL_KEY_WWW))
+#if defined(KEY_WWW) || (defined(HAVE_DECL_KEY_WWW) && HAVE_DECL_KEY_WWW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_WWW) == (150), "KEY_WWW != 150");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_WWW 150
 #endif
-#if !(defined(KEY_MSDOS) || (defined(HAVE_DECL_KEY_MSDOS) && HAVE_DECL_KEY_MSDOS))
+#if defined(KEY_MSDOS) || (defined(HAVE_DECL_KEY_MSDOS) && HAVE_DECL_KEY_MSDOS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MSDOS) == (151), "KEY_MSDOS != 151");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MSDOS 151
 #endif
-#if !(defined(KEY_COFFEE) || (defined(HAVE_DECL_KEY_COFFEE) && HAVE_DECL_KEY_COFFEE))
+#if defined(KEY_COFFEE) || (defined(HAVE_DECL_KEY_COFFEE) && HAVE_DECL_KEY_COFFEE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_COFFEE) == (152), "KEY_COFFEE != 152");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_COFFEE 152
 #endif
-#if !(defined(KEY_ROTATE_DISPLAY) || (defined(HAVE_DECL_KEY_ROTATE_DISPLAY) && HAVE_DECL_KEY_ROTATE_DISPLAY))
+#if defined(KEY_ROTATE_DISPLAY) || (defined(HAVE_DECL_KEY_ROTATE_DISPLAY) && HAVE_DECL_KEY_ROTATE_DISPLAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ROTATE_DISPLAY) == (153), "KEY_ROTATE_DISPLAY != 153");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ROTATE_DISPLAY 153
 #endif
-#if !(defined(KEY_CYCLEWINDOWS) || (defined(HAVE_DECL_KEY_CYCLEWINDOWS) && HAVE_DECL_KEY_CYCLEWINDOWS))
+#if defined(KEY_CYCLEWINDOWS) || (defined(HAVE_DECL_KEY_CYCLEWINDOWS) && HAVE_DECL_KEY_CYCLEWINDOWS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CYCLEWINDOWS) == (154), "KEY_CYCLEWINDOWS != 154");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CYCLEWINDOWS 154
 #endif
-#if !(defined(KEY_MAIL) || (defined(HAVE_DECL_KEY_MAIL) && HAVE_DECL_KEY_MAIL))
+#if defined(KEY_MAIL) || (defined(HAVE_DECL_KEY_MAIL) && HAVE_DECL_KEY_MAIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MAIL) == (155), "KEY_MAIL != 155");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MAIL 155
 #endif
-#if !(defined(KEY_BOOKMARKS) || (defined(HAVE_DECL_KEY_BOOKMARKS) && HAVE_DECL_KEY_BOOKMARKS))
+#if defined(KEY_BOOKMARKS) || (defined(HAVE_DECL_KEY_BOOKMARKS) && HAVE_DECL_KEY_BOOKMARKS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BOOKMARKS) == (156), "KEY_BOOKMARKS != 156");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BOOKMARKS 156
 #endif
-#if !(defined(KEY_COMPUTER) || (defined(HAVE_DECL_KEY_COMPUTER) && HAVE_DECL_KEY_COMPUTER))
+#if defined(KEY_COMPUTER) || (defined(HAVE_DECL_KEY_COMPUTER) && HAVE_DECL_KEY_COMPUTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_COMPUTER) == (157), "KEY_COMPUTER != 157");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_COMPUTER 157
 #endif
-#if !(defined(KEY_BACK) || (defined(HAVE_DECL_KEY_BACK) && HAVE_DECL_KEY_BACK))
+#if defined(KEY_BACK) || (defined(HAVE_DECL_KEY_BACK) && HAVE_DECL_KEY_BACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BACK) == (158), "KEY_BACK != 158");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BACK 158
 #endif
-#if !(defined(KEY_FORWARD) || (defined(HAVE_DECL_KEY_FORWARD) && HAVE_DECL_KEY_FORWARD))
+#if defined(KEY_FORWARD) || (defined(HAVE_DECL_KEY_FORWARD) && HAVE_DECL_KEY_FORWARD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FORWARD) == (159), "KEY_FORWARD != 159");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FORWARD 159
 #endif
-#if !(defined(KEY_CLOSECD) || (defined(HAVE_DECL_KEY_CLOSECD) && HAVE_DECL_KEY_CLOSECD))
+#if defined(KEY_CLOSECD) || (defined(HAVE_DECL_KEY_CLOSECD) && HAVE_DECL_KEY_CLOSECD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CLOSECD) == (160), "KEY_CLOSECD != 160");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CLOSECD 160
 #endif
-#if !(defined(KEY_EJECTCD) || (defined(HAVE_DECL_KEY_EJECTCD) && HAVE_DECL_KEY_EJECTCD))
+#if defined(KEY_EJECTCD) || (defined(HAVE_DECL_KEY_EJECTCD) && HAVE_DECL_KEY_EJECTCD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_EJECTCD) == (161), "KEY_EJECTCD != 161");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_EJECTCD 161
 #endif
-#if !(defined(KEY_EJECTCLOSECD) || (defined(HAVE_DECL_KEY_EJECTCLOSECD) && HAVE_DECL_KEY_EJECTCLOSECD))
+#if defined(KEY_EJECTCLOSECD) || (defined(HAVE_DECL_KEY_EJECTCLOSECD) && HAVE_DECL_KEY_EJECTCLOSECD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_EJECTCLOSECD) == (162), "KEY_EJECTCLOSECD != 162");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_EJECTCLOSECD 162
 #endif
-#if !(defined(KEY_NEXTSONG) || (defined(HAVE_DECL_KEY_NEXTSONG) && HAVE_DECL_KEY_NEXTSONG))
+#if defined(KEY_NEXTSONG) || (defined(HAVE_DECL_KEY_NEXTSONG) && HAVE_DECL_KEY_NEXTSONG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NEXTSONG) == (163), "KEY_NEXTSONG != 163");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NEXTSONG 163
 #endif
-#if !(defined(KEY_PLAYPAUSE) || (defined(HAVE_DECL_KEY_PLAYPAUSE) && HAVE_DECL_KEY_PLAYPAUSE))
+#if defined(KEY_PLAYPAUSE) || (defined(HAVE_DECL_KEY_PLAYPAUSE) && HAVE_DECL_KEY_PLAYPAUSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PLAYPAUSE) == (164), "KEY_PLAYPAUSE != 164");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PLAYPAUSE 164
 #endif
-#if !(defined(KEY_PREVIOUSSONG) || (defined(HAVE_DECL_KEY_PREVIOUSSONG) && HAVE_DECL_KEY_PREVIOUSSONG))
+#if defined(KEY_PREVIOUSSONG) || (defined(HAVE_DECL_KEY_PREVIOUSSONG) && HAVE_DECL_KEY_PREVIOUSSONG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PREVIOUSSONG) == (165), "KEY_PREVIOUSSONG != 165");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PREVIOUSSONG 165
 #endif
-#if !(defined(KEY_STOPCD) || (defined(HAVE_DECL_KEY_STOPCD) && HAVE_DECL_KEY_STOPCD))
+#if defined(KEY_STOPCD) || (defined(HAVE_DECL_KEY_STOPCD) && HAVE_DECL_KEY_STOPCD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_STOPCD) == (166), "KEY_STOPCD != 166");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_STOPCD 166
 #endif
-#if !(defined(KEY_RECORD) || (defined(HAVE_DECL_KEY_RECORD) && HAVE_DECL_KEY_RECORD))
+#if defined(KEY_RECORD) || (defined(HAVE_DECL_KEY_RECORD) && HAVE_DECL_KEY_RECORD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RECORD) == (167), "KEY_RECORD != 167");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RECORD 167
 #endif
-#if !(defined(KEY_REWIND) || (defined(HAVE_DECL_KEY_REWIND) && HAVE_DECL_KEY_REWIND))
+#if defined(KEY_REWIND) || (defined(HAVE_DECL_KEY_REWIND) && HAVE_DECL_KEY_REWIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REWIND) == (168), "KEY_REWIND != 168");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REWIND 168
 #endif
-#if !(defined(KEY_PHONE) || (defined(HAVE_DECL_KEY_PHONE) && HAVE_DECL_KEY_PHONE))
+#if defined(KEY_PHONE) || (defined(HAVE_DECL_KEY_PHONE) && HAVE_DECL_KEY_PHONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PHONE) == (169), "KEY_PHONE != 169");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PHONE 169
 #endif
-#if !(defined(KEY_ISO) || (defined(HAVE_DECL_KEY_ISO) && HAVE_DECL_KEY_ISO))
+#if defined(KEY_ISO) || (defined(HAVE_DECL_KEY_ISO) && HAVE_DECL_KEY_ISO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ISO) == (170), "KEY_ISO != 170");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ISO 170
 #endif
-#if !(defined(KEY_CONFIG) || (defined(HAVE_DECL_KEY_CONFIG) && HAVE_DECL_KEY_CONFIG))
+#if defined(KEY_CONFIG) || (defined(HAVE_DECL_KEY_CONFIG) && HAVE_DECL_KEY_CONFIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CONFIG) == (171), "KEY_CONFIG != 171");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CONFIG 171
 #endif
-#if !(defined(KEY_HOMEPAGE) || (defined(HAVE_DECL_KEY_HOMEPAGE) && HAVE_DECL_KEY_HOMEPAGE))
+#if defined(KEY_HOMEPAGE) || (defined(HAVE_DECL_KEY_HOMEPAGE) && HAVE_DECL_KEY_HOMEPAGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_HOMEPAGE) == (172), "KEY_HOMEPAGE != 172");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_HOMEPAGE 172
 #endif
-#if !(defined(KEY_REFRESH) || (defined(HAVE_DECL_KEY_REFRESH) && HAVE_DECL_KEY_REFRESH))
+#if defined(KEY_REFRESH) || (defined(HAVE_DECL_KEY_REFRESH) && HAVE_DECL_KEY_REFRESH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REFRESH) == (173), "KEY_REFRESH != 173");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REFRESH 173
 #endif
-#if !(defined(KEY_EXIT) || (defined(HAVE_DECL_KEY_EXIT) && HAVE_DECL_KEY_EXIT))
+#if defined(KEY_EXIT) || (defined(HAVE_DECL_KEY_EXIT) && HAVE_DECL_KEY_EXIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_EXIT) == (174), "KEY_EXIT != 174");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_EXIT 174
 #endif
-#if !(defined(KEY_MOVE) || (defined(HAVE_DECL_KEY_MOVE) && HAVE_DECL_KEY_MOVE))
+#if defined(KEY_MOVE) || (defined(HAVE_DECL_KEY_MOVE) && HAVE_DECL_KEY_MOVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MOVE) == (175), "KEY_MOVE != 175");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MOVE 175
 #endif
-#if !(defined(KEY_EDIT) || (defined(HAVE_DECL_KEY_EDIT) && HAVE_DECL_KEY_EDIT))
+#if defined(KEY_EDIT) || (defined(HAVE_DECL_KEY_EDIT) && HAVE_DECL_KEY_EDIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_EDIT) == (176), "KEY_EDIT != 176");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_EDIT 176
 #endif
-#if !(defined(KEY_SCROLLUP) || (defined(HAVE_DECL_KEY_SCROLLUP) && HAVE_DECL_KEY_SCROLLUP))
+#if defined(KEY_SCROLLUP) || (defined(HAVE_DECL_KEY_SCROLLUP) && HAVE_DECL_KEY_SCROLLUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SCROLLUP) == (177), "KEY_SCROLLUP != 177");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SCROLLUP 177
 #endif
-#if !(defined(KEY_SCROLLDOWN) || (defined(HAVE_DECL_KEY_SCROLLDOWN) && HAVE_DECL_KEY_SCROLLDOWN))
+#if defined(KEY_SCROLLDOWN) || (defined(HAVE_DECL_KEY_SCROLLDOWN) && HAVE_DECL_KEY_SCROLLDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SCROLLDOWN) == (178), "KEY_SCROLLDOWN != 178");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SCROLLDOWN 178
 #endif
-#if !(defined(KEY_KPLEFTPAREN) || (defined(HAVE_DECL_KEY_KPLEFTPAREN) && HAVE_DECL_KEY_KPLEFTPAREN))
+#if defined(KEY_KPLEFTPAREN) || (defined(HAVE_DECL_KEY_KPLEFTPAREN) && HAVE_DECL_KEY_KPLEFTPAREN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPLEFTPAREN) == (179), "KEY_KPLEFTPAREN != 179");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPLEFTPAREN 179
 #endif
-#if !(defined(KEY_KPRIGHTPAREN) || (defined(HAVE_DECL_KEY_KPRIGHTPAREN) && HAVE_DECL_KEY_KPRIGHTPAREN))
+#if defined(KEY_KPRIGHTPAREN) || (defined(HAVE_DECL_KEY_KPRIGHTPAREN) && HAVE_DECL_KEY_KPRIGHTPAREN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KPRIGHTPAREN) == (180), "KEY_KPRIGHTPAREN != 180");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KPRIGHTPAREN 180
 #endif
-#if !(defined(KEY_NEW) || (defined(HAVE_DECL_KEY_NEW) && HAVE_DECL_KEY_NEW))
+#if defined(KEY_NEW) || (defined(HAVE_DECL_KEY_NEW) && HAVE_DECL_KEY_NEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NEW) == (181), "KEY_NEW != 181");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NEW 181
 #endif
-#if !(defined(KEY_REDO) || (defined(HAVE_DECL_KEY_REDO) && HAVE_DECL_KEY_REDO))
+#if defined(KEY_REDO) || (defined(HAVE_DECL_KEY_REDO) && HAVE_DECL_KEY_REDO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REDO) == (182), "KEY_REDO != 182");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REDO 182
 #endif
-#if !(defined(KEY_F13) || (defined(HAVE_DECL_KEY_F13) && HAVE_DECL_KEY_F13))
+#if defined(KEY_F13) || (defined(HAVE_DECL_KEY_F13) && HAVE_DECL_KEY_F13)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F13) == (183), "KEY_F13 != 183");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F13 183
 #endif
-#if !(defined(KEY_F14) || (defined(HAVE_DECL_KEY_F14) && HAVE_DECL_KEY_F14))
+#if defined(KEY_F14) || (defined(HAVE_DECL_KEY_F14) && HAVE_DECL_KEY_F14)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F14) == (184), "KEY_F14 != 184");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F14 184
 #endif
-#if !(defined(KEY_F15) || (defined(HAVE_DECL_KEY_F15) && HAVE_DECL_KEY_F15))
+#if defined(KEY_F15) || (defined(HAVE_DECL_KEY_F15) && HAVE_DECL_KEY_F15)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F15) == (185), "KEY_F15 != 185");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F15 185
 #endif
-#if !(defined(KEY_F16) || (defined(HAVE_DECL_KEY_F16) && HAVE_DECL_KEY_F16))
+#if defined(KEY_F16) || (defined(HAVE_DECL_KEY_F16) && HAVE_DECL_KEY_F16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F16) == (186), "KEY_F16 != 186");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F16 186
 #endif
-#if !(defined(KEY_F17) || (defined(HAVE_DECL_KEY_F17) && HAVE_DECL_KEY_F17))
+#if defined(KEY_F17) || (defined(HAVE_DECL_KEY_F17) && HAVE_DECL_KEY_F17)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F17) == (187), "KEY_F17 != 187");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F17 187
 #endif
-#if !(defined(KEY_F18) || (defined(HAVE_DECL_KEY_F18) && HAVE_DECL_KEY_F18))
+#if defined(KEY_F18) || (defined(HAVE_DECL_KEY_F18) && HAVE_DECL_KEY_F18)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F18) == (188), "KEY_F18 != 188");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F18 188
 #endif
-#if !(defined(KEY_F19) || (defined(HAVE_DECL_KEY_F19) && HAVE_DECL_KEY_F19))
+#if defined(KEY_F19) || (defined(HAVE_DECL_KEY_F19) && HAVE_DECL_KEY_F19)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F19) == (189), "KEY_F19 != 189");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F19 189
 #endif
-#if !(defined(KEY_F20) || (defined(HAVE_DECL_KEY_F20) && HAVE_DECL_KEY_F20))
+#if defined(KEY_F20) || (defined(HAVE_DECL_KEY_F20) && HAVE_DECL_KEY_F20)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F20) == (190), "KEY_F20 != 190");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F20 190
 #endif
-#if !(defined(KEY_F21) || (defined(HAVE_DECL_KEY_F21) && HAVE_DECL_KEY_F21))
+#if defined(KEY_F21) || (defined(HAVE_DECL_KEY_F21) && HAVE_DECL_KEY_F21)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F21) == (191), "KEY_F21 != 191");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F21 191
 #endif
-#if !(defined(KEY_F22) || (defined(HAVE_DECL_KEY_F22) && HAVE_DECL_KEY_F22))
+#if defined(KEY_F22) || (defined(HAVE_DECL_KEY_F22) && HAVE_DECL_KEY_F22)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F22) == (192), "KEY_F22 != 192");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F22 192
 #endif
-#if !(defined(KEY_F23) || (defined(HAVE_DECL_KEY_F23) && HAVE_DECL_KEY_F23))
+#if defined(KEY_F23) || (defined(HAVE_DECL_KEY_F23) && HAVE_DECL_KEY_F23)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F23) == (193), "KEY_F23 != 193");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F23 193
 #endif
-#if !(defined(KEY_F24) || (defined(HAVE_DECL_KEY_F24) && HAVE_DECL_KEY_F24))
+#if defined(KEY_F24) || (defined(HAVE_DECL_KEY_F24) && HAVE_DECL_KEY_F24)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_F24) == (194), "KEY_F24 != 194");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_F24 194
 #endif
-#if !(defined(KEY_PLAYCD) || (defined(HAVE_DECL_KEY_PLAYCD) && HAVE_DECL_KEY_PLAYCD))
+#if defined(KEY_PLAYCD) || (defined(HAVE_DECL_KEY_PLAYCD) && HAVE_DECL_KEY_PLAYCD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PLAYCD) == (200), "KEY_PLAYCD != 200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PLAYCD 200
 #endif
-#if !(defined(KEY_PAUSECD) || (defined(HAVE_DECL_KEY_PAUSECD) && HAVE_DECL_KEY_PAUSECD))
+#if defined(KEY_PAUSECD) || (defined(HAVE_DECL_KEY_PAUSECD) && HAVE_DECL_KEY_PAUSECD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PAUSECD) == (201), "KEY_PAUSECD != 201");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PAUSECD 201
 #endif
-#if !(defined(KEY_PROG3) || (defined(HAVE_DECL_KEY_PROG3) && HAVE_DECL_KEY_PROG3))
+#if defined(KEY_PROG3) || (defined(HAVE_DECL_KEY_PROG3) && HAVE_DECL_KEY_PROG3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PROG3) == (202), "KEY_PROG3 != 202");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PROG3 202
 #endif
-#if !(defined(KEY_PROG4) || (defined(HAVE_DECL_KEY_PROG4) && HAVE_DECL_KEY_PROG4))
+#if defined(KEY_PROG4) || (defined(HAVE_DECL_KEY_PROG4) && HAVE_DECL_KEY_PROG4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PROG4) == (203), "KEY_PROG4 != 203");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PROG4 203
 #endif
-#if !(defined(KEY_DASHBOARD) || (defined(HAVE_DECL_KEY_DASHBOARD) && HAVE_DECL_KEY_DASHBOARD))
+#if defined(KEY_DASHBOARD) || (defined(HAVE_DECL_KEY_DASHBOARD) && HAVE_DECL_KEY_DASHBOARD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DASHBOARD) == (204), "KEY_DASHBOARD != 204");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DASHBOARD 204
 #endif
-#if !(defined(KEY_SUSPEND) || (defined(HAVE_DECL_KEY_SUSPEND) && HAVE_DECL_KEY_SUSPEND))
+#if defined(KEY_SUSPEND) || (defined(HAVE_DECL_KEY_SUSPEND) && HAVE_DECL_KEY_SUSPEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SUSPEND) == (205), "KEY_SUSPEND != 205");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SUSPEND 205
 #endif
-#if !(defined(KEY_CLOSE) || (defined(HAVE_DECL_KEY_CLOSE) && HAVE_DECL_KEY_CLOSE))
+#if defined(KEY_CLOSE) || (defined(HAVE_DECL_KEY_CLOSE) && HAVE_DECL_KEY_CLOSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CLOSE) == (206), "KEY_CLOSE != 206");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CLOSE 206
 #endif
-#if !(defined(KEY_PLAY) || (defined(HAVE_DECL_KEY_PLAY) && HAVE_DECL_KEY_PLAY))
+#if defined(KEY_PLAY) || (defined(HAVE_DECL_KEY_PLAY) && HAVE_DECL_KEY_PLAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PLAY) == (207), "KEY_PLAY != 207");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PLAY 207
 #endif
-#if !(defined(KEY_FASTFORWARD) || (defined(HAVE_DECL_KEY_FASTFORWARD) && HAVE_DECL_KEY_FASTFORWARD))
+#if defined(KEY_FASTFORWARD) || (defined(HAVE_DECL_KEY_FASTFORWARD) && HAVE_DECL_KEY_FASTFORWARD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FASTFORWARD) == (208), "KEY_FASTFORWARD != 208");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FASTFORWARD 208
 #endif
-#if !(defined(KEY_BASSBOOST) || (defined(HAVE_DECL_KEY_BASSBOOST) && HAVE_DECL_KEY_BASSBOOST))
+#if defined(KEY_BASSBOOST) || (defined(HAVE_DECL_KEY_BASSBOOST) && HAVE_DECL_KEY_BASSBOOST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BASSBOOST) == (209), "KEY_BASSBOOST != 209");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BASSBOOST 209
 #endif
-#if !(defined(KEY_PRINT) || (defined(HAVE_DECL_KEY_PRINT) && HAVE_DECL_KEY_PRINT))
+#if defined(KEY_PRINT) || (defined(HAVE_DECL_KEY_PRINT) && HAVE_DECL_KEY_PRINT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PRINT) == (210), "KEY_PRINT != 210");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PRINT 210
 #endif
-#if !(defined(KEY_HP) || (defined(HAVE_DECL_KEY_HP) && HAVE_DECL_KEY_HP))
+#if defined(KEY_HP) || (defined(HAVE_DECL_KEY_HP) && HAVE_DECL_KEY_HP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_HP) == (211), "KEY_HP != 211");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_HP 211
 #endif
-#if !(defined(KEY_CAMERA) || (defined(HAVE_DECL_KEY_CAMERA) && HAVE_DECL_KEY_CAMERA))
+#if defined(KEY_CAMERA) || (defined(HAVE_DECL_KEY_CAMERA) && HAVE_DECL_KEY_CAMERA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CAMERA) == (212), "KEY_CAMERA != 212");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CAMERA 212
 #endif
-#if !(defined(KEY_SOUND) || (defined(HAVE_DECL_KEY_SOUND) && HAVE_DECL_KEY_SOUND))
+#if defined(KEY_SOUND) || (defined(HAVE_DECL_KEY_SOUND) && HAVE_DECL_KEY_SOUND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SOUND) == (213), "KEY_SOUND != 213");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SOUND 213
 #endif
-#if !(defined(KEY_QUESTION) || (defined(HAVE_DECL_KEY_QUESTION) && HAVE_DECL_KEY_QUESTION))
+#if defined(KEY_QUESTION) || (defined(HAVE_DECL_KEY_QUESTION) && HAVE_DECL_KEY_QUESTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_QUESTION) == (214), "KEY_QUESTION != 214");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_QUESTION 214
 #endif
-#if !(defined(KEY_EMAIL) || (defined(HAVE_DECL_KEY_EMAIL) && HAVE_DECL_KEY_EMAIL))
+#if defined(KEY_EMAIL) || (defined(HAVE_DECL_KEY_EMAIL) && HAVE_DECL_KEY_EMAIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_EMAIL) == (215), "KEY_EMAIL != 215");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_EMAIL 215
 #endif
-#if !(defined(KEY_CHAT) || (defined(HAVE_DECL_KEY_CHAT) && HAVE_DECL_KEY_CHAT))
+#if defined(KEY_CHAT) || (defined(HAVE_DECL_KEY_CHAT) && HAVE_DECL_KEY_CHAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CHAT) == (216), "KEY_CHAT != 216");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CHAT 216
 #endif
-#if !(defined(KEY_SEARCH) || (defined(HAVE_DECL_KEY_SEARCH) && HAVE_DECL_KEY_SEARCH))
+#if defined(KEY_SEARCH) || (defined(HAVE_DECL_KEY_SEARCH) && HAVE_DECL_KEY_SEARCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SEARCH) == (217), "KEY_SEARCH != 217");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SEARCH 217
 #endif
-#if !(defined(KEY_CONNECT) || (defined(HAVE_DECL_KEY_CONNECT) && HAVE_DECL_KEY_CONNECT))
+#if defined(KEY_CONNECT) || (defined(HAVE_DECL_KEY_CONNECT) && HAVE_DECL_KEY_CONNECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CONNECT) == (218), "KEY_CONNECT != 218");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CONNECT 218
 #endif
-#if !(defined(KEY_FINANCE) || (defined(HAVE_DECL_KEY_FINANCE) && HAVE_DECL_KEY_FINANCE))
+#if defined(KEY_FINANCE) || (defined(HAVE_DECL_KEY_FINANCE) && HAVE_DECL_KEY_FINANCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FINANCE) == (219), "KEY_FINANCE != 219");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FINANCE 219
 #endif
-#if !(defined(KEY_SPORT) || (defined(HAVE_DECL_KEY_SPORT) && HAVE_DECL_KEY_SPORT))
+#if defined(KEY_SPORT) || (defined(HAVE_DECL_KEY_SPORT) && HAVE_DECL_KEY_SPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPORT) == (220), "KEY_SPORT != 220");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPORT 220
 #endif
-#if !(defined(KEY_SHOP) || (defined(HAVE_DECL_KEY_SHOP) && HAVE_DECL_KEY_SHOP))
+#if defined(KEY_SHOP) || (defined(HAVE_DECL_KEY_SHOP) && HAVE_DECL_KEY_SHOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SHOP) == (221), "KEY_SHOP != 221");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SHOP 221
 #endif
-#if !(defined(KEY_ALTERASE) || (defined(HAVE_DECL_KEY_ALTERASE) && HAVE_DECL_KEY_ALTERASE))
+#if defined(KEY_ALTERASE) || (defined(HAVE_DECL_KEY_ALTERASE) && HAVE_DECL_KEY_ALTERASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ALTERASE) == (222), "KEY_ALTERASE != 222");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ALTERASE 222
 #endif
-#if !(defined(KEY_CANCEL) || (defined(HAVE_DECL_KEY_CANCEL) && HAVE_DECL_KEY_CANCEL))
+#if defined(KEY_CANCEL) || (defined(HAVE_DECL_KEY_CANCEL) && HAVE_DECL_KEY_CANCEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CANCEL) == (223), "KEY_CANCEL != 223");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CANCEL 223
 #endif
-#if !(defined(KEY_BRIGHTNESSDOWN) || (defined(HAVE_DECL_KEY_BRIGHTNESSDOWN) && HAVE_DECL_KEY_BRIGHTNESSDOWN))
+#if defined(KEY_BRIGHTNESSDOWN) || (defined(HAVE_DECL_KEY_BRIGHTNESSDOWN) && HAVE_DECL_KEY_BRIGHTNESSDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRIGHTNESSDOWN) == (224), "KEY_BRIGHTNESSDOWN != 224");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRIGHTNESSDOWN 224
 #endif
-#if !(defined(KEY_BRIGHTNESSUP) || (defined(HAVE_DECL_KEY_BRIGHTNESSUP) && HAVE_DECL_KEY_BRIGHTNESSUP))
+#if defined(KEY_BRIGHTNESSUP) || (defined(HAVE_DECL_KEY_BRIGHTNESSUP) && HAVE_DECL_KEY_BRIGHTNESSUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRIGHTNESSUP) == (225), "KEY_BRIGHTNESSUP != 225");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRIGHTNESSUP 225
 #endif
-#if !(defined(KEY_MEDIA) || (defined(HAVE_DECL_KEY_MEDIA) && HAVE_DECL_KEY_MEDIA))
+#if defined(KEY_MEDIA) || (defined(HAVE_DECL_KEY_MEDIA) && HAVE_DECL_KEY_MEDIA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MEDIA) == (226), "KEY_MEDIA != 226");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MEDIA 226
 #endif
-#if !(defined(KEY_SWITCHVIDEOMODE) || (defined(HAVE_DECL_KEY_SWITCHVIDEOMODE) && HAVE_DECL_KEY_SWITCHVIDEOMODE))
+#if defined(KEY_SWITCHVIDEOMODE) || (defined(HAVE_DECL_KEY_SWITCHVIDEOMODE) && HAVE_DECL_KEY_SWITCHVIDEOMODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SWITCHVIDEOMODE) == (227), "KEY_SWITCHVIDEOMODE != 227");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SWITCHVIDEOMODE 227
 #endif
-#if !(defined(KEY_KBDILLUMTOGGLE) || (defined(HAVE_DECL_KEY_KBDILLUMTOGGLE) && HAVE_DECL_KEY_KBDILLUMTOGGLE))
+#if defined(KEY_KBDILLUMTOGGLE) || (defined(HAVE_DECL_KEY_KBDILLUMTOGGLE) && HAVE_DECL_KEY_KBDILLUMTOGGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KBDILLUMTOGGLE) == (228), "KEY_KBDILLUMTOGGLE != 228");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KBDILLUMTOGGLE 228
 #endif
-#if !(defined(KEY_KBDILLUMDOWN) || (defined(HAVE_DECL_KEY_KBDILLUMDOWN) && HAVE_DECL_KEY_KBDILLUMDOWN))
+#if defined(KEY_KBDILLUMDOWN) || (defined(HAVE_DECL_KEY_KBDILLUMDOWN) && HAVE_DECL_KEY_KBDILLUMDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KBDILLUMDOWN) == (229), "KEY_KBDILLUMDOWN != 229");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KBDILLUMDOWN 229
 #endif
-#if !(defined(KEY_KBDILLUMUP) || (defined(HAVE_DECL_KEY_KBDILLUMUP) && HAVE_DECL_KEY_KBDILLUMUP))
+#if defined(KEY_KBDILLUMUP) || (defined(HAVE_DECL_KEY_KBDILLUMUP) && HAVE_DECL_KEY_KBDILLUMUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KBDILLUMUP) == (230), "KEY_KBDILLUMUP != 230");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KBDILLUMUP 230
 #endif
-#if !(defined(KEY_SEND) || (defined(HAVE_DECL_KEY_SEND) && HAVE_DECL_KEY_SEND))
+#if defined(KEY_SEND) || (defined(HAVE_DECL_KEY_SEND) && HAVE_DECL_KEY_SEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SEND) == (231), "KEY_SEND != 231");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SEND 231
 #endif
-#if !(defined(KEY_REPLY) || (defined(HAVE_DECL_KEY_REPLY) && HAVE_DECL_KEY_REPLY))
+#if defined(KEY_REPLY) || (defined(HAVE_DECL_KEY_REPLY) && HAVE_DECL_KEY_REPLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REPLY) == (232), "KEY_REPLY != 232");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REPLY 232
 #endif
-#if !(defined(KEY_FORWARDMAIL) || (defined(HAVE_DECL_KEY_FORWARDMAIL) && HAVE_DECL_KEY_FORWARDMAIL))
+#if defined(KEY_FORWARDMAIL) || (defined(HAVE_DECL_KEY_FORWARDMAIL) && HAVE_DECL_KEY_FORWARDMAIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FORWARDMAIL) == (233), "KEY_FORWARDMAIL != 233");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FORWARDMAIL 233
 #endif
-#if !(defined(KEY_SAVE) || (defined(HAVE_DECL_KEY_SAVE) && HAVE_DECL_KEY_SAVE))
+#if defined(KEY_SAVE) || (defined(HAVE_DECL_KEY_SAVE) && HAVE_DECL_KEY_SAVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SAVE) == (234), "KEY_SAVE != 234");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SAVE 234
 #endif
-#if !(defined(KEY_DOCUMENTS) || (defined(HAVE_DECL_KEY_DOCUMENTS) && HAVE_DECL_KEY_DOCUMENTS))
+#if defined(KEY_DOCUMENTS) || (defined(HAVE_DECL_KEY_DOCUMENTS) && HAVE_DECL_KEY_DOCUMENTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DOCUMENTS) == (235), "KEY_DOCUMENTS != 235");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DOCUMENTS 235
 #endif
-#if !(defined(KEY_BATTERY) || (defined(HAVE_DECL_KEY_BATTERY) && HAVE_DECL_KEY_BATTERY))
+#if defined(KEY_BATTERY) || (defined(HAVE_DECL_KEY_BATTERY) && HAVE_DECL_KEY_BATTERY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BATTERY) == (236), "KEY_BATTERY != 236");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BATTERY 236
 #endif
-#if !(defined(KEY_BLUETOOTH) || (defined(HAVE_DECL_KEY_BLUETOOTH) && HAVE_DECL_KEY_BLUETOOTH))
+#if defined(KEY_BLUETOOTH) || (defined(HAVE_DECL_KEY_BLUETOOTH) && HAVE_DECL_KEY_BLUETOOTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BLUETOOTH) == (237), "KEY_BLUETOOTH != 237");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BLUETOOTH 237
 #endif
-#if !(defined(KEY_WLAN) || (defined(HAVE_DECL_KEY_WLAN) && HAVE_DECL_KEY_WLAN))
+#if defined(KEY_WLAN) || (defined(HAVE_DECL_KEY_WLAN) && HAVE_DECL_KEY_WLAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_WLAN) == (238), "KEY_WLAN != 238");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_WLAN 238
 #endif
-#if !(defined(KEY_UWB) || (defined(HAVE_DECL_KEY_UWB) && HAVE_DECL_KEY_UWB))
+#if defined(KEY_UWB) || (defined(HAVE_DECL_KEY_UWB) && HAVE_DECL_KEY_UWB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_UWB) == (239), "KEY_UWB != 239");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_UWB 239
 #endif
-#if !(defined(KEY_UNKNOWN) || (defined(HAVE_DECL_KEY_UNKNOWN) && HAVE_DECL_KEY_UNKNOWN))
+#if defined(KEY_UNKNOWN) || (defined(HAVE_DECL_KEY_UNKNOWN) && HAVE_DECL_KEY_UNKNOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_UNKNOWN) == (240), "KEY_UNKNOWN != 240");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_UNKNOWN 240
 #endif
-#if !(defined(KEY_VIDEO_NEXT) || (defined(HAVE_DECL_KEY_VIDEO_NEXT) && HAVE_DECL_KEY_VIDEO_NEXT))
+#if defined(KEY_VIDEO_NEXT) || (defined(HAVE_DECL_KEY_VIDEO_NEXT) && HAVE_DECL_KEY_VIDEO_NEXT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VIDEO_NEXT) == (241), "KEY_VIDEO_NEXT != 241");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VIDEO_NEXT 241
 #endif
-#if !(defined(KEY_VIDEO_PREV) || (defined(HAVE_DECL_KEY_VIDEO_PREV) && HAVE_DECL_KEY_VIDEO_PREV))
+#if defined(KEY_VIDEO_PREV) || (defined(HAVE_DECL_KEY_VIDEO_PREV) && HAVE_DECL_KEY_VIDEO_PREV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VIDEO_PREV) == (242), "KEY_VIDEO_PREV != 242");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VIDEO_PREV 242
 #endif
-#if !(defined(KEY_BRIGHTNESS_CYCLE) || (defined(HAVE_DECL_KEY_BRIGHTNESS_CYCLE) && HAVE_DECL_KEY_BRIGHTNESS_CYCLE))
+#if defined(KEY_BRIGHTNESS_CYCLE) || (defined(HAVE_DECL_KEY_BRIGHTNESS_CYCLE) && HAVE_DECL_KEY_BRIGHTNESS_CYCLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRIGHTNESS_CYCLE) == (243), "KEY_BRIGHTNESS_CYCLE != 243");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRIGHTNESS_CYCLE 243
 #endif
-#if !(defined(KEY_BRIGHTNESS_AUTO) || (defined(HAVE_DECL_KEY_BRIGHTNESS_AUTO) && HAVE_DECL_KEY_BRIGHTNESS_AUTO))
+#if defined(KEY_BRIGHTNESS_AUTO) || (defined(HAVE_DECL_KEY_BRIGHTNESS_AUTO) && HAVE_DECL_KEY_BRIGHTNESS_AUTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRIGHTNESS_AUTO) == (244), "KEY_BRIGHTNESS_AUTO != 244");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRIGHTNESS_AUTO 244
 #endif
-#if !(defined(KEY_DISPLAY_OFF) || (defined(HAVE_DECL_KEY_DISPLAY_OFF) && HAVE_DECL_KEY_DISPLAY_OFF))
+#if defined(KEY_DISPLAY_OFF) || (defined(HAVE_DECL_KEY_DISPLAY_OFF) && HAVE_DECL_KEY_DISPLAY_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DISPLAY_OFF) == (245), "KEY_DISPLAY_OFF != 245");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DISPLAY_OFF 245
 #endif
-#if !(defined(KEY_WWAN) || (defined(HAVE_DECL_KEY_WWAN) && HAVE_DECL_KEY_WWAN))
+#if defined(KEY_WWAN) || (defined(HAVE_DECL_KEY_WWAN) && HAVE_DECL_KEY_WWAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_WWAN) == (246), "KEY_WWAN != 246");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_WWAN 246
 #endif
-#if !(defined(KEY_RFKILL) || (defined(HAVE_DECL_KEY_RFKILL) && HAVE_DECL_KEY_RFKILL))
+#ifndef STRACE_WORKAROUND_FOR_KEY_RFKILL
+# define STRACE_WORKAROUND_FOR_KEY_RFKILL
+# undef KEY_RFKILL
+#endif
+#if defined(KEY_RFKILL) || (defined(HAVE_DECL_KEY_RFKILL) && HAVE_DECL_KEY_RFKILL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RFKILL) == (247), "KEY_RFKILL != 247");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RFKILL 247
 #endif
-#if !(defined(KEY_MICMUTE) || (defined(HAVE_DECL_KEY_MICMUTE) && HAVE_DECL_KEY_MICMUTE))
+#if defined(KEY_MICMUTE) || (defined(HAVE_DECL_KEY_MICMUTE) && HAVE_DECL_KEY_MICMUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MICMUTE) == (248), "KEY_MICMUTE != 248");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MICMUTE 248
 #endif
-#if !(defined(BTN_0) || (defined(HAVE_DECL_BTN_0) && HAVE_DECL_BTN_0))
+#if defined(BTN_0) || (defined(HAVE_DECL_BTN_0) && HAVE_DECL_BTN_0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_0) == (0x100), "BTN_0 != 0x100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_0 0x100
 #endif
-#if !(defined(BTN_1) || (defined(HAVE_DECL_BTN_1) && HAVE_DECL_BTN_1))
+#if defined(BTN_1) || (defined(HAVE_DECL_BTN_1) && HAVE_DECL_BTN_1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_1) == (0x101), "BTN_1 != 0x101");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_1 0x101
 #endif
-#if !(defined(BTN_2) || (defined(HAVE_DECL_BTN_2) && HAVE_DECL_BTN_2))
+#if defined(BTN_2) || (defined(HAVE_DECL_BTN_2) && HAVE_DECL_BTN_2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_2) == (0x102), "BTN_2 != 0x102");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_2 0x102
 #endif
-#if !(defined(BTN_3) || (defined(HAVE_DECL_BTN_3) && HAVE_DECL_BTN_3))
+#if defined(BTN_3) || (defined(HAVE_DECL_BTN_3) && HAVE_DECL_BTN_3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_3) == (0x103), "BTN_3 != 0x103");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_3 0x103
 #endif
-#if !(defined(BTN_4) || (defined(HAVE_DECL_BTN_4) && HAVE_DECL_BTN_4))
+#if defined(BTN_4) || (defined(HAVE_DECL_BTN_4) && HAVE_DECL_BTN_4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_4) == (0x104), "BTN_4 != 0x104");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_4 0x104
 #endif
-#if !(defined(BTN_5) || (defined(HAVE_DECL_BTN_5) && HAVE_DECL_BTN_5))
+#if defined(BTN_5) || (defined(HAVE_DECL_BTN_5) && HAVE_DECL_BTN_5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_5) == (0x105), "BTN_5 != 0x105");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_5 0x105
 #endif
-#if !(defined(BTN_6) || (defined(HAVE_DECL_BTN_6) && HAVE_DECL_BTN_6))
+#if defined(BTN_6) || (defined(HAVE_DECL_BTN_6) && HAVE_DECL_BTN_6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_6) == (0x106), "BTN_6 != 0x106");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_6 0x106
 #endif
-#if !(defined(BTN_7) || (defined(HAVE_DECL_BTN_7) && HAVE_DECL_BTN_7))
+#if defined(BTN_7) || (defined(HAVE_DECL_BTN_7) && HAVE_DECL_BTN_7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_7) == (0x107), "BTN_7 != 0x107");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_7 0x107
 #endif
-#if !(defined(BTN_8) || (defined(HAVE_DECL_BTN_8) && HAVE_DECL_BTN_8))
+#if defined(BTN_8) || (defined(HAVE_DECL_BTN_8) && HAVE_DECL_BTN_8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_8) == (0x108), "BTN_8 != 0x108");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_8 0x108
 #endif
-#if !(defined(BTN_9) || (defined(HAVE_DECL_BTN_9) && HAVE_DECL_BTN_9))
+#if defined(BTN_9) || (defined(HAVE_DECL_BTN_9) && HAVE_DECL_BTN_9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_9) == (0x109), "BTN_9 != 0x109");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_9 0x109
 #endif
-#if !(defined(BTN_MOUSE) || (defined(HAVE_DECL_BTN_MOUSE) && HAVE_DECL_BTN_MOUSE))
-# define BTN_MOUSE 0x110
-#endif
-#if !(defined(BTN_LEFT) || (defined(HAVE_DECL_BTN_LEFT) && HAVE_DECL_BTN_LEFT))
+#if defined(BTN_LEFT) || (defined(HAVE_DECL_BTN_LEFT) && HAVE_DECL_BTN_LEFT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_LEFT) == (0x110), "BTN_LEFT != 0x110");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_LEFT 0x110
 #endif
-#if !(defined(BTN_RIGHT) || (defined(HAVE_DECL_BTN_RIGHT) && HAVE_DECL_BTN_RIGHT))
+#if defined(BTN_RIGHT) || (defined(HAVE_DECL_BTN_RIGHT) && HAVE_DECL_BTN_RIGHT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_RIGHT) == (0x111), "BTN_RIGHT != 0x111");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_RIGHT 0x111
 #endif
-#if !(defined(BTN_MIDDLE) || (defined(HAVE_DECL_BTN_MIDDLE) && HAVE_DECL_BTN_MIDDLE))
+#if defined(BTN_MIDDLE) || (defined(HAVE_DECL_BTN_MIDDLE) && HAVE_DECL_BTN_MIDDLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_MIDDLE) == (0x112), "BTN_MIDDLE != 0x112");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_MIDDLE 0x112
 #endif
-#if !(defined(BTN_SIDE) || (defined(HAVE_DECL_BTN_SIDE) && HAVE_DECL_BTN_SIDE))
+#if defined(BTN_SIDE) || (defined(HAVE_DECL_BTN_SIDE) && HAVE_DECL_BTN_SIDE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_SIDE) == (0x113), "BTN_SIDE != 0x113");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_SIDE 0x113
 #endif
-#if !(defined(BTN_EXTRA) || (defined(HAVE_DECL_BTN_EXTRA) && HAVE_DECL_BTN_EXTRA))
+#if defined(BTN_EXTRA) || (defined(HAVE_DECL_BTN_EXTRA) && HAVE_DECL_BTN_EXTRA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_EXTRA) == (0x114), "BTN_EXTRA != 0x114");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_EXTRA 0x114
 #endif
-#if !(defined(BTN_FORWARD) || (defined(HAVE_DECL_BTN_FORWARD) && HAVE_DECL_BTN_FORWARD))
+#if defined(BTN_FORWARD) || (defined(HAVE_DECL_BTN_FORWARD) && HAVE_DECL_BTN_FORWARD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_FORWARD) == (0x115), "BTN_FORWARD != 0x115");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_FORWARD 0x115
 #endif
-#if !(defined(BTN_BACK) || (defined(HAVE_DECL_BTN_BACK) && HAVE_DECL_BTN_BACK))
+#if defined(BTN_BACK) || (defined(HAVE_DECL_BTN_BACK) && HAVE_DECL_BTN_BACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_BACK) == (0x116), "BTN_BACK != 0x116");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_BACK 0x116
 #endif
-#if !(defined(BTN_TASK) || (defined(HAVE_DECL_BTN_TASK) && HAVE_DECL_BTN_TASK))
+#if defined(BTN_TASK) || (defined(HAVE_DECL_BTN_TASK) && HAVE_DECL_BTN_TASK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TASK) == (0x117), "BTN_TASK != 0x117");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TASK 0x117
 #endif
-#if !(defined(BTN_JOYSTICK) || (defined(HAVE_DECL_BTN_JOYSTICK) && HAVE_DECL_BTN_JOYSTICK))
-# define BTN_JOYSTICK 0x120
-#endif
-#if !(defined(BTN_TRIGGER) || (defined(HAVE_DECL_BTN_TRIGGER) && HAVE_DECL_BTN_TRIGGER))
+#if defined(BTN_TRIGGER) || (defined(HAVE_DECL_BTN_TRIGGER) && HAVE_DECL_BTN_TRIGGER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER) == (0x120), "BTN_TRIGGER != 0x120");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER 0x120
 #endif
-#if !(defined(BTN_THUMB) || (defined(HAVE_DECL_BTN_THUMB) && HAVE_DECL_BTN_THUMB))
+#if defined(BTN_THUMB) || (defined(HAVE_DECL_BTN_THUMB) && HAVE_DECL_BTN_THUMB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_THUMB) == (0x121), "BTN_THUMB != 0x121");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_THUMB 0x121
 #endif
-#if !(defined(BTN_THUMB2) || (defined(HAVE_DECL_BTN_THUMB2) && HAVE_DECL_BTN_THUMB2))
+#if defined(BTN_THUMB2) || (defined(HAVE_DECL_BTN_THUMB2) && HAVE_DECL_BTN_THUMB2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_THUMB2) == (0x122), "BTN_THUMB2 != 0x122");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_THUMB2 0x122
 #endif
-#if !(defined(BTN_TOP) || (defined(HAVE_DECL_BTN_TOP) && HAVE_DECL_BTN_TOP))
+#if defined(BTN_TOP) || (defined(HAVE_DECL_BTN_TOP) && HAVE_DECL_BTN_TOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOP) == (0x123), "BTN_TOP != 0x123");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOP 0x123
 #endif
-#if !(defined(BTN_TOP2) || (defined(HAVE_DECL_BTN_TOP2) && HAVE_DECL_BTN_TOP2))
+#if defined(BTN_TOP2) || (defined(HAVE_DECL_BTN_TOP2) && HAVE_DECL_BTN_TOP2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOP2) == (0x124), "BTN_TOP2 != 0x124");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOP2 0x124
 #endif
-#if !(defined(BTN_PINKIE) || (defined(HAVE_DECL_BTN_PINKIE) && HAVE_DECL_BTN_PINKIE))
+#if defined(BTN_PINKIE) || (defined(HAVE_DECL_BTN_PINKIE) && HAVE_DECL_BTN_PINKIE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_PINKIE) == (0x125), "BTN_PINKIE != 0x125");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_PINKIE 0x125
 #endif
-#if !(defined(BTN_BASE) || (defined(HAVE_DECL_BTN_BASE) && HAVE_DECL_BTN_BASE))
+#if defined(BTN_BASE) || (defined(HAVE_DECL_BTN_BASE) && HAVE_DECL_BTN_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_BASE) == (0x126), "BTN_BASE != 0x126");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_BASE 0x126
 #endif
-#if !(defined(BTN_BASE2) || (defined(HAVE_DECL_BTN_BASE2) && HAVE_DECL_BTN_BASE2))
+#if defined(BTN_BASE2) || (defined(HAVE_DECL_BTN_BASE2) && HAVE_DECL_BTN_BASE2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_BASE2) == (0x127), "BTN_BASE2 != 0x127");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_BASE2 0x127
 #endif
-#if !(defined(BTN_BASE3) || (defined(HAVE_DECL_BTN_BASE3) && HAVE_DECL_BTN_BASE3))
+#if defined(BTN_BASE3) || (defined(HAVE_DECL_BTN_BASE3) && HAVE_DECL_BTN_BASE3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_BASE3) == (0x128), "BTN_BASE3 != 0x128");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_BASE3 0x128
 #endif
-#if !(defined(BTN_BASE4) || (defined(HAVE_DECL_BTN_BASE4) && HAVE_DECL_BTN_BASE4))
+#if defined(BTN_BASE4) || (defined(HAVE_DECL_BTN_BASE4) && HAVE_DECL_BTN_BASE4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_BASE4) == (0x129), "BTN_BASE4 != 0x129");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_BASE4 0x129
 #endif
-#if !(defined(BTN_BASE5) || (defined(HAVE_DECL_BTN_BASE5) && HAVE_DECL_BTN_BASE5))
+#if defined(BTN_BASE5) || (defined(HAVE_DECL_BTN_BASE5) && HAVE_DECL_BTN_BASE5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_BASE5) == (0x12a), "BTN_BASE5 != 0x12a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_BASE5 0x12a
 #endif
-#if !(defined(BTN_BASE6) || (defined(HAVE_DECL_BTN_BASE6) && HAVE_DECL_BTN_BASE6))
+#if defined(BTN_BASE6) || (defined(HAVE_DECL_BTN_BASE6) && HAVE_DECL_BTN_BASE6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_BASE6) == (0x12b), "BTN_BASE6 != 0x12b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_BASE6 0x12b
 #endif
-#if !(defined(BTN_DEAD) || (defined(HAVE_DECL_BTN_DEAD) && HAVE_DECL_BTN_DEAD))
+#if defined(BTN_DEAD) || (defined(HAVE_DECL_BTN_DEAD) && HAVE_DECL_BTN_DEAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_DEAD) == (0x12f), "BTN_DEAD != 0x12f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_DEAD 0x12f
 #endif
-#if !(defined(BTN_GAMEPAD) || (defined(HAVE_DECL_BTN_GAMEPAD) && HAVE_DECL_BTN_GAMEPAD))
-# define BTN_GAMEPAD 0x130
-#endif
-#if !(defined(BTN_SOUTH) || (defined(HAVE_DECL_BTN_SOUTH) && HAVE_DECL_BTN_SOUTH))
+#if defined(BTN_SOUTH) || (defined(HAVE_DECL_BTN_SOUTH) && HAVE_DECL_BTN_SOUTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_SOUTH) == (0x130), "BTN_SOUTH != 0x130");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_SOUTH 0x130
 #endif
-#if !(defined(BTN_EAST) || (defined(HAVE_DECL_BTN_EAST) && HAVE_DECL_BTN_EAST))
+#if defined(BTN_EAST) || (defined(HAVE_DECL_BTN_EAST) && HAVE_DECL_BTN_EAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_EAST) == (0x131), "BTN_EAST != 0x131");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_EAST 0x131
 #endif
-#if !(defined(BTN_C) || (defined(HAVE_DECL_BTN_C) && HAVE_DECL_BTN_C))
+#if defined(BTN_C) || (defined(HAVE_DECL_BTN_C) && HAVE_DECL_BTN_C)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_C) == (0x132), "BTN_C != 0x132");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_C 0x132
 #endif
-#if !(defined(BTN_NORTH) || (defined(HAVE_DECL_BTN_NORTH) && HAVE_DECL_BTN_NORTH))
+#if defined(BTN_NORTH) || (defined(HAVE_DECL_BTN_NORTH) && HAVE_DECL_BTN_NORTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_NORTH) == (0x133), "BTN_NORTH != 0x133");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_NORTH 0x133
 #endif
-#if !(defined(BTN_WEST) || (defined(HAVE_DECL_BTN_WEST) && HAVE_DECL_BTN_WEST))
+#if defined(BTN_WEST) || (defined(HAVE_DECL_BTN_WEST) && HAVE_DECL_BTN_WEST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_WEST) == (0x134), "BTN_WEST != 0x134");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_WEST 0x134
 #endif
-#if !(defined(BTN_Z) || (defined(HAVE_DECL_BTN_Z) && HAVE_DECL_BTN_Z))
+#if defined(BTN_Z) || (defined(HAVE_DECL_BTN_Z) && HAVE_DECL_BTN_Z)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_Z) == (0x135), "BTN_Z != 0x135");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_Z 0x135
 #endif
-#if !(defined(BTN_TL) || (defined(HAVE_DECL_BTN_TL) && HAVE_DECL_BTN_TL))
+#if defined(BTN_TL) || (defined(HAVE_DECL_BTN_TL) && HAVE_DECL_BTN_TL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TL) == (0x136), "BTN_TL != 0x136");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TL 0x136
 #endif
-#if !(defined(BTN_TR) || (defined(HAVE_DECL_BTN_TR) && HAVE_DECL_BTN_TR))
+#if defined(BTN_TR) || (defined(HAVE_DECL_BTN_TR) && HAVE_DECL_BTN_TR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TR) == (0x137), "BTN_TR != 0x137");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TR 0x137
 #endif
-#if !(defined(BTN_TL2) || (defined(HAVE_DECL_BTN_TL2) && HAVE_DECL_BTN_TL2))
+#if defined(BTN_TL2) || (defined(HAVE_DECL_BTN_TL2) && HAVE_DECL_BTN_TL2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TL2) == (0x138), "BTN_TL2 != 0x138");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TL2 0x138
 #endif
-#if !(defined(BTN_TR2) || (defined(HAVE_DECL_BTN_TR2) && HAVE_DECL_BTN_TR2))
+#if defined(BTN_TR2) || (defined(HAVE_DECL_BTN_TR2) && HAVE_DECL_BTN_TR2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TR2) == (0x139), "BTN_TR2 != 0x139");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TR2 0x139
 #endif
-#if !(defined(BTN_SELECT) || (defined(HAVE_DECL_BTN_SELECT) && HAVE_DECL_BTN_SELECT))
+#if defined(BTN_SELECT) || (defined(HAVE_DECL_BTN_SELECT) && HAVE_DECL_BTN_SELECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_SELECT) == (0x13a), "BTN_SELECT != 0x13a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_SELECT 0x13a
 #endif
-#if !(defined(BTN_START) || (defined(HAVE_DECL_BTN_START) && HAVE_DECL_BTN_START))
+#if defined(BTN_START) || (defined(HAVE_DECL_BTN_START) && HAVE_DECL_BTN_START)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_START) == (0x13b), "BTN_START != 0x13b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_START 0x13b
 #endif
-#if !(defined(BTN_MODE) || (defined(HAVE_DECL_BTN_MODE) && HAVE_DECL_BTN_MODE))
+#if defined(BTN_MODE) || (defined(HAVE_DECL_BTN_MODE) && HAVE_DECL_BTN_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_MODE) == (0x13c), "BTN_MODE != 0x13c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_MODE 0x13c
 #endif
-#if !(defined(BTN_THUMBL) || (defined(HAVE_DECL_BTN_THUMBL) && HAVE_DECL_BTN_THUMBL))
+#if defined(BTN_THUMBL) || (defined(HAVE_DECL_BTN_THUMBL) && HAVE_DECL_BTN_THUMBL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_THUMBL) == (0x13d), "BTN_THUMBL != 0x13d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_THUMBL 0x13d
 #endif
-#if !(defined(BTN_THUMBR) || (defined(HAVE_DECL_BTN_THUMBR) && HAVE_DECL_BTN_THUMBR))
+#if defined(BTN_THUMBR) || (defined(HAVE_DECL_BTN_THUMBR) && HAVE_DECL_BTN_THUMBR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_THUMBR) == (0x13e), "BTN_THUMBR != 0x13e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_THUMBR 0x13e
 #endif
-#if !(defined(BTN_DIGI) || (defined(HAVE_DECL_BTN_DIGI) && HAVE_DECL_BTN_DIGI))
-# define BTN_DIGI 0x140
-#endif
-#if !(defined(BTN_TOOL_PEN) || (defined(HAVE_DECL_BTN_TOOL_PEN) && HAVE_DECL_BTN_TOOL_PEN))
+#if defined(BTN_TOOL_PEN) || (defined(HAVE_DECL_BTN_TOOL_PEN) && HAVE_DECL_BTN_TOOL_PEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_PEN) == (0x140), "BTN_TOOL_PEN != 0x140");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_PEN 0x140
 #endif
-#if !(defined(BTN_TOOL_RUBBER) || (defined(HAVE_DECL_BTN_TOOL_RUBBER) && HAVE_DECL_BTN_TOOL_RUBBER))
+#if defined(BTN_TOOL_RUBBER) || (defined(HAVE_DECL_BTN_TOOL_RUBBER) && HAVE_DECL_BTN_TOOL_RUBBER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_RUBBER) == (0x141), "BTN_TOOL_RUBBER != 0x141");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_RUBBER 0x141
 #endif
-#if !(defined(BTN_TOOL_BRUSH) || (defined(HAVE_DECL_BTN_TOOL_BRUSH) && HAVE_DECL_BTN_TOOL_BRUSH))
+#if defined(BTN_TOOL_BRUSH) || (defined(HAVE_DECL_BTN_TOOL_BRUSH) && HAVE_DECL_BTN_TOOL_BRUSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_BRUSH) == (0x142), "BTN_TOOL_BRUSH != 0x142");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_BRUSH 0x142
 #endif
-#if !(defined(BTN_TOOL_PENCIL) || (defined(HAVE_DECL_BTN_TOOL_PENCIL) && HAVE_DECL_BTN_TOOL_PENCIL))
+#if defined(BTN_TOOL_PENCIL) || (defined(HAVE_DECL_BTN_TOOL_PENCIL) && HAVE_DECL_BTN_TOOL_PENCIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_PENCIL) == (0x143), "BTN_TOOL_PENCIL != 0x143");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_PENCIL 0x143
 #endif
-#if !(defined(BTN_TOOL_AIRBRUSH) || (defined(HAVE_DECL_BTN_TOOL_AIRBRUSH) && HAVE_DECL_BTN_TOOL_AIRBRUSH))
+#if defined(BTN_TOOL_AIRBRUSH) || (defined(HAVE_DECL_BTN_TOOL_AIRBRUSH) && HAVE_DECL_BTN_TOOL_AIRBRUSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_AIRBRUSH) == (0x144), "BTN_TOOL_AIRBRUSH != 0x144");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_AIRBRUSH 0x144
 #endif
-#if !(defined(BTN_TOOL_FINGER) || (defined(HAVE_DECL_BTN_TOOL_FINGER) && HAVE_DECL_BTN_TOOL_FINGER))
+#if defined(BTN_TOOL_FINGER) || (defined(HAVE_DECL_BTN_TOOL_FINGER) && HAVE_DECL_BTN_TOOL_FINGER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_FINGER) == (0x145), "BTN_TOOL_FINGER != 0x145");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_FINGER 0x145
 #endif
-#if !(defined(BTN_TOOL_MOUSE) || (defined(HAVE_DECL_BTN_TOOL_MOUSE) && HAVE_DECL_BTN_TOOL_MOUSE))
+#if defined(BTN_TOOL_MOUSE) || (defined(HAVE_DECL_BTN_TOOL_MOUSE) && HAVE_DECL_BTN_TOOL_MOUSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_MOUSE) == (0x146), "BTN_TOOL_MOUSE != 0x146");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_MOUSE 0x146
 #endif
-#if !(defined(BTN_TOOL_LENS) || (defined(HAVE_DECL_BTN_TOOL_LENS) && HAVE_DECL_BTN_TOOL_LENS))
+#if defined(BTN_TOOL_LENS) || (defined(HAVE_DECL_BTN_TOOL_LENS) && HAVE_DECL_BTN_TOOL_LENS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_LENS) == (0x147), "BTN_TOOL_LENS != 0x147");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_LENS 0x147
 #endif
-#if !(defined(BTN_TOOL_QUINTTAP) || (defined(HAVE_DECL_BTN_TOOL_QUINTTAP) && HAVE_DECL_BTN_TOOL_QUINTTAP))
+#if defined(BTN_TOOL_QUINTTAP) || (defined(HAVE_DECL_BTN_TOOL_QUINTTAP) && HAVE_DECL_BTN_TOOL_QUINTTAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_QUINTTAP) == (0x148), "BTN_TOOL_QUINTTAP != 0x148");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_QUINTTAP 0x148
 #endif
-#if !(defined(BTN_STYLUS3) || (defined(HAVE_DECL_BTN_STYLUS3) && HAVE_DECL_BTN_STYLUS3))
+#if defined(BTN_STYLUS3) || (defined(HAVE_DECL_BTN_STYLUS3) && HAVE_DECL_BTN_STYLUS3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_STYLUS3) == (0x149), "BTN_STYLUS3 != 0x149");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_STYLUS3 0x149
 #endif
-#if !(defined(BTN_TOUCH) || (defined(HAVE_DECL_BTN_TOUCH) && HAVE_DECL_BTN_TOUCH))
+#if defined(BTN_TOUCH) || (defined(HAVE_DECL_BTN_TOUCH) && HAVE_DECL_BTN_TOUCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOUCH) == (0x14a), "BTN_TOUCH != 0x14a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOUCH 0x14a
 #endif
-#if !(defined(BTN_STYLUS) || (defined(HAVE_DECL_BTN_STYLUS) && HAVE_DECL_BTN_STYLUS))
+#if defined(BTN_STYLUS) || (defined(HAVE_DECL_BTN_STYLUS) && HAVE_DECL_BTN_STYLUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_STYLUS) == (0x14b), "BTN_STYLUS != 0x14b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_STYLUS 0x14b
 #endif
-#if !(defined(BTN_STYLUS2) || (defined(HAVE_DECL_BTN_STYLUS2) && HAVE_DECL_BTN_STYLUS2))
+#if defined(BTN_STYLUS2) || (defined(HAVE_DECL_BTN_STYLUS2) && HAVE_DECL_BTN_STYLUS2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_STYLUS2) == (0x14c), "BTN_STYLUS2 != 0x14c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_STYLUS2 0x14c
 #endif
-#if !(defined(BTN_TOOL_DOUBLETAP) || (defined(HAVE_DECL_BTN_TOOL_DOUBLETAP) && HAVE_DECL_BTN_TOOL_DOUBLETAP))
+#if defined(BTN_TOOL_DOUBLETAP) || (defined(HAVE_DECL_BTN_TOOL_DOUBLETAP) && HAVE_DECL_BTN_TOOL_DOUBLETAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_DOUBLETAP) == (0x14d), "BTN_TOOL_DOUBLETAP != 0x14d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_DOUBLETAP 0x14d
 #endif
-#if !(defined(BTN_TOOL_TRIPLETAP) || (defined(HAVE_DECL_BTN_TOOL_TRIPLETAP) && HAVE_DECL_BTN_TOOL_TRIPLETAP))
+#if defined(BTN_TOOL_TRIPLETAP) || (defined(HAVE_DECL_BTN_TOOL_TRIPLETAP) && HAVE_DECL_BTN_TOOL_TRIPLETAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_TRIPLETAP) == (0x14e), "BTN_TOOL_TRIPLETAP != 0x14e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_TRIPLETAP 0x14e
 #endif
-#if !(defined(BTN_TOOL_QUADTAP) || (defined(HAVE_DECL_BTN_TOOL_QUADTAP) && HAVE_DECL_BTN_TOOL_QUADTAP))
+#if defined(BTN_TOOL_QUADTAP) || (defined(HAVE_DECL_BTN_TOOL_QUADTAP) && HAVE_DECL_BTN_TOOL_QUADTAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TOOL_QUADTAP) == (0x14f), "BTN_TOOL_QUADTAP != 0x14f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TOOL_QUADTAP 0x14f
 #endif
-#if !(defined(BTN_WHEEL) || (defined(HAVE_DECL_BTN_WHEEL) && HAVE_DECL_BTN_WHEEL))
-# define BTN_WHEEL 0x150
-#endif
-#if !(defined(BTN_GEAR_DOWN) || (defined(HAVE_DECL_BTN_GEAR_DOWN) && HAVE_DECL_BTN_GEAR_DOWN))
+#if defined(BTN_GEAR_DOWN) || (defined(HAVE_DECL_BTN_GEAR_DOWN) && HAVE_DECL_BTN_GEAR_DOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_GEAR_DOWN) == (0x150), "BTN_GEAR_DOWN != 0x150");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_GEAR_DOWN 0x150
 #endif
-#if !(defined(BTN_GEAR_UP) || (defined(HAVE_DECL_BTN_GEAR_UP) && HAVE_DECL_BTN_GEAR_UP))
+#if defined(BTN_GEAR_UP) || (defined(HAVE_DECL_BTN_GEAR_UP) && HAVE_DECL_BTN_GEAR_UP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_GEAR_UP) == (0x151), "BTN_GEAR_UP != 0x151");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_GEAR_UP 0x151
 #endif
-#if !(defined(KEY_OK) || (defined(HAVE_DECL_KEY_OK) && HAVE_DECL_KEY_OK))
+#if defined(KEY_OK) || (defined(HAVE_DECL_KEY_OK) && HAVE_DECL_KEY_OK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OK) == (0x160), "KEY_OK != 0x160");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OK 0x160
 #endif
-#if !(defined(KEY_SELECT) || (defined(HAVE_DECL_KEY_SELECT) && HAVE_DECL_KEY_SELECT))
+#if defined(KEY_SELECT) || (defined(HAVE_DECL_KEY_SELECT) && HAVE_DECL_KEY_SELECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SELECT) == (0x161), "KEY_SELECT != 0x161");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SELECT 0x161
 #endif
-#if !(defined(KEY_GOTO) || (defined(HAVE_DECL_KEY_GOTO) && HAVE_DECL_KEY_GOTO))
+#if defined(KEY_GOTO) || (defined(HAVE_DECL_KEY_GOTO) && HAVE_DECL_KEY_GOTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GOTO) == (0x162), "KEY_GOTO != 0x162");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GOTO 0x162
 #endif
-#if !(defined(KEY_CLEAR) || (defined(HAVE_DECL_KEY_CLEAR) && HAVE_DECL_KEY_CLEAR))
+#if defined(KEY_CLEAR) || (defined(HAVE_DECL_KEY_CLEAR) && HAVE_DECL_KEY_CLEAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CLEAR) == (0x163), "KEY_CLEAR != 0x163");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CLEAR 0x163
 #endif
-#if !(defined(KEY_POWER2) || (defined(HAVE_DECL_KEY_POWER2) && HAVE_DECL_KEY_POWER2))
+#if defined(KEY_POWER2) || (defined(HAVE_DECL_KEY_POWER2) && HAVE_DECL_KEY_POWER2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_POWER2) == (0x164), "KEY_POWER2 != 0x164");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_POWER2 0x164
 #endif
-#if !(defined(KEY_OPTION) || (defined(HAVE_DECL_KEY_OPTION) && HAVE_DECL_KEY_OPTION))
+#if defined(KEY_OPTION) || (defined(HAVE_DECL_KEY_OPTION) && HAVE_DECL_KEY_OPTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OPTION) == (0x165), "KEY_OPTION != 0x165");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OPTION 0x165
 #endif
-#if !(defined(KEY_INFO) || (defined(HAVE_DECL_KEY_INFO) && HAVE_DECL_KEY_INFO))
+#if defined(KEY_INFO) || (defined(HAVE_DECL_KEY_INFO) && HAVE_DECL_KEY_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_INFO) == (0x166), "KEY_INFO != 0x166");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_INFO 0x166
 #endif
-#if !(defined(KEY_TIME) || (defined(HAVE_DECL_KEY_TIME) && HAVE_DECL_KEY_TIME))
+#if defined(KEY_TIME) || (defined(HAVE_DECL_KEY_TIME) && HAVE_DECL_KEY_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TIME) == (0x167), "KEY_TIME != 0x167");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TIME 0x167
 #endif
-#if !(defined(KEY_VENDOR) || (defined(HAVE_DECL_KEY_VENDOR) && HAVE_DECL_KEY_VENDOR))
+#if defined(KEY_VENDOR) || (defined(HAVE_DECL_KEY_VENDOR) && HAVE_DECL_KEY_VENDOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VENDOR) == (0x168), "KEY_VENDOR != 0x168");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VENDOR 0x168
 #endif
-#if !(defined(KEY_ARCHIVE) || (defined(HAVE_DECL_KEY_ARCHIVE) && HAVE_DECL_KEY_ARCHIVE))
+#if defined(KEY_ARCHIVE) || (defined(HAVE_DECL_KEY_ARCHIVE) && HAVE_DECL_KEY_ARCHIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ARCHIVE) == (0x169), "KEY_ARCHIVE != 0x169");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ARCHIVE 0x169
 #endif
-#if !(defined(KEY_PROGRAM) || (defined(HAVE_DECL_KEY_PROGRAM) && HAVE_DECL_KEY_PROGRAM))
+#if defined(KEY_PROGRAM) || (defined(HAVE_DECL_KEY_PROGRAM) && HAVE_DECL_KEY_PROGRAM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PROGRAM) == (0x16a), "KEY_PROGRAM != 0x16a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PROGRAM 0x16a
 #endif
-#if !(defined(KEY_CHANNEL) || (defined(HAVE_DECL_KEY_CHANNEL) && HAVE_DECL_KEY_CHANNEL))
+#if defined(KEY_CHANNEL) || (defined(HAVE_DECL_KEY_CHANNEL) && HAVE_DECL_KEY_CHANNEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CHANNEL) == (0x16b), "KEY_CHANNEL != 0x16b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CHANNEL 0x16b
 #endif
-#if !(defined(KEY_FAVORITES) || (defined(HAVE_DECL_KEY_FAVORITES) && HAVE_DECL_KEY_FAVORITES))
+#if defined(KEY_FAVORITES) || (defined(HAVE_DECL_KEY_FAVORITES) && HAVE_DECL_KEY_FAVORITES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FAVORITES) == (0x16c), "KEY_FAVORITES != 0x16c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FAVORITES 0x16c
 #endif
-#if !(defined(KEY_EPG) || (defined(HAVE_DECL_KEY_EPG) && HAVE_DECL_KEY_EPG))
+#if defined(KEY_EPG) || (defined(HAVE_DECL_KEY_EPG) && HAVE_DECL_KEY_EPG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_EPG) == (0x16d), "KEY_EPG != 0x16d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_EPG 0x16d
 #endif
-#if !(defined(KEY_PVR) || (defined(HAVE_DECL_KEY_PVR) && HAVE_DECL_KEY_PVR))
+#if defined(KEY_PVR) || (defined(HAVE_DECL_KEY_PVR) && HAVE_DECL_KEY_PVR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PVR) == (0x16e), "KEY_PVR != 0x16e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PVR 0x16e
 #endif
-#if !(defined(KEY_MHP) || (defined(HAVE_DECL_KEY_MHP) && HAVE_DECL_KEY_MHP))
+#if defined(KEY_MHP) || (defined(HAVE_DECL_KEY_MHP) && HAVE_DECL_KEY_MHP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MHP) == (0x16f), "KEY_MHP != 0x16f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MHP 0x16f
 #endif
-#if !(defined(KEY_LANGUAGE) || (defined(HAVE_DECL_KEY_LANGUAGE) && HAVE_DECL_KEY_LANGUAGE))
+#if defined(KEY_LANGUAGE) || (defined(HAVE_DECL_KEY_LANGUAGE) && HAVE_DECL_KEY_LANGUAGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LANGUAGE) == (0x170), "KEY_LANGUAGE != 0x170");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LANGUAGE 0x170
 #endif
-#if !(defined(KEY_TITLE) || (defined(HAVE_DECL_KEY_TITLE) && HAVE_DECL_KEY_TITLE))
+#if defined(KEY_TITLE) || (defined(HAVE_DECL_KEY_TITLE) && HAVE_DECL_KEY_TITLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TITLE) == (0x171), "KEY_TITLE != 0x171");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TITLE 0x171
 #endif
-#if !(defined(KEY_SUBTITLE) || (defined(HAVE_DECL_KEY_SUBTITLE) && HAVE_DECL_KEY_SUBTITLE))
+#if defined(KEY_SUBTITLE) || (defined(HAVE_DECL_KEY_SUBTITLE) && HAVE_DECL_KEY_SUBTITLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SUBTITLE) == (0x172), "KEY_SUBTITLE != 0x172");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SUBTITLE 0x172
 #endif
-#if !(defined(KEY_ANGLE) || (defined(HAVE_DECL_KEY_ANGLE) && HAVE_DECL_KEY_ANGLE))
+#if defined(KEY_ANGLE) || (defined(HAVE_DECL_KEY_ANGLE) && HAVE_DECL_KEY_ANGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ANGLE) == (0x173), "KEY_ANGLE != 0x173");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ANGLE 0x173
 #endif
-#if !(defined(KEY_ZOOM) || (defined(HAVE_DECL_KEY_ZOOM) && HAVE_DECL_KEY_ZOOM))
+#if defined(KEY_ZOOM) || (defined(HAVE_DECL_KEY_ZOOM) && HAVE_DECL_KEY_ZOOM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ZOOM) == (0x174), "KEY_ZOOM != 0x174");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ZOOM 0x174
 #endif
-#if !(defined(KEY_MODE) || (defined(HAVE_DECL_KEY_MODE) && HAVE_DECL_KEY_MODE))
+#if defined(KEY_MODE) || (defined(HAVE_DECL_KEY_MODE) && HAVE_DECL_KEY_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MODE) == (0x175), "KEY_MODE != 0x175");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MODE 0x175
 #endif
-#if !(defined(KEY_KEYBOARD) || (defined(HAVE_DECL_KEY_KEYBOARD) && HAVE_DECL_KEY_KEYBOARD))
+#if defined(KEY_KEYBOARD) || (defined(HAVE_DECL_KEY_KEYBOARD) && HAVE_DECL_KEY_KEYBOARD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KEYBOARD) == (0x176), "KEY_KEYBOARD != 0x176");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KEYBOARD 0x176
 #endif
-#if !(defined(KEY_SCREEN) || (defined(HAVE_DECL_KEY_SCREEN) && HAVE_DECL_KEY_SCREEN))
+#if defined(KEY_SCREEN) || (defined(HAVE_DECL_KEY_SCREEN) && HAVE_DECL_KEY_SCREEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SCREEN) == (0x177), "KEY_SCREEN != 0x177");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SCREEN 0x177
 #endif
-#if !(defined(KEY_PC) || (defined(HAVE_DECL_KEY_PC) && HAVE_DECL_KEY_PC))
+#if defined(KEY_PC) || (defined(HAVE_DECL_KEY_PC) && HAVE_DECL_KEY_PC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PC) == (0x178), "KEY_PC != 0x178");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PC 0x178
 #endif
-#if !(defined(KEY_TV) || (defined(HAVE_DECL_KEY_TV) && HAVE_DECL_KEY_TV))
+#if defined(KEY_TV) || (defined(HAVE_DECL_KEY_TV) && HAVE_DECL_KEY_TV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TV) == (0x179), "KEY_TV != 0x179");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TV 0x179
 #endif
-#if !(defined(KEY_TV2) || (defined(HAVE_DECL_KEY_TV2) && HAVE_DECL_KEY_TV2))
+#if defined(KEY_TV2) || (defined(HAVE_DECL_KEY_TV2) && HAVE_DECL_KEY_TV2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TV2) == (0x17a), "KEY_TV2 != 0x17a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TV2 0x17a
 #endif
-#if !(defined(KEY_VCR) || (defined(HAVE_DECL_KEY_VCR) && HAVE_DECL_KEY_VCR))
+#if defined(KEY_VCR) || (defined(HAVE_DECL_KEY_VCR) && HAVE_DECL_KEY_VCR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VCR) == (0x17b), "KEY_VCR != 0x17b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VCR 0x17b
 #endif
-#if !(defined(KEY_VCR2) || (defined(HAVE_DECL_KEY_VCR2) && HAVE_DECL_KEY_VCR2))
+#if defined(KEY_VCR2) || (defined(HAVE_DECL_KEY_VCR2) && HAVE_DECL_KEY_VCR2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VCR2) == (0x17c), "KEY_VCR2 != 0x17c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VCR2 0x17c
 #endif
-#if !(defined(KEY_SAT) || (defined(HAVE_DECL_KEY_SAT) && HAVE_DECL_KEY_SAT))
+#if defined(KEY_SAT) || (defined(HAVE_DECL_KEY_SAT) && HAVE_DECL_KEY_SAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SAT) == (0x17d), "KEY_SAT != 0x17d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SAT 0x17d
 #endif
-#if !(defined(KEY_SAT2) || (defined(HAVE_DECL_KEY_SAT2) && HAVE_DECL_KEY_SAT2))
+#if defined(KEY_SAT2) || (defined(HAVE_DECL_KEY_SAT2) && HAVE_DECL_KEY_SAT2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SAT2) == (0x17e), "KEY_SAT2 != 0x17e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SAT2 0x17e
 #endif
-#if !(defined(KEY_CD) || (defined(HAVE_DECL_KEY_CD) && HAVE_DECL_KEY_CD))
+#if defined(KEY_CD) || (defined(HAVE_DECL_KEY_CD) && HAVE_DECL_KEY_CD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CD) == (0x17f), "KEY_CD != 0x17f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CD 0x17f
 #endif
-#if !(defined(KEY_TAPE) || (defined(HAVE_DECL_KEY_TAPE) && HAVE_DECL_KEY_TAPE))
+#if defined(KEY_TAPE) || (defined(HAVE_DECL_KEY_TAPE) && HAVE_DECL_KEY_TAPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TAPE) == (0x180), "KEY_TAPE != 0x180");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TAPE 0x180
 #endif
-#if !(defined(KEY_RADIO) || (defined(HAVE_DECL_KEY_RADIO) && HAVE_DECL_KEY_RADIO))
+#if defined(KEY_RADIO) || (defined(HAVE_DECL_KEY_RADIO) && HAVE_DECL_KEY_RADIO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RADIO) == (0x181), "KEY_RADIO != 0x181");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RADIO 0x181
 #endif
-#if !(defined(KEY_TUNER) || (defined(HAVE_DECL_KEY_TUNER) && HAVE_DECL_KEY_TUNER))
+#if defined(KEY_TUNER) || (defined(HAVE_DECL_KEY_TUNER) && HAVE_DECL_KEY_TUNER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TUNER) == (0x182), "KEY_TUNER != 0x182");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TUNER 0x182
 #endif
-#if !(defined(KEY_PLAYER) || (defined(HAVE_DECL_KEY_PLAYER) && HAVE_DECL_KEY_PLAYER))
+#if defined(KEY_PLAYER) || (defined(HAVE_DECL_KEY_PLAYER) && HAVE_DECL_KEY_PLAYER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PLAYER) == (0x183), "KEY_PLAYER != 0x183");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PLAYER 0x183
 #endif
-#if !(defined(KEY_TEXT) || (defined(HAVE_DECL_KEY_TEXT) && HAVE_DECL_KEY_TEXT))
+#if defined(KEY_TEXT) || (defined(HAVE_DECL_KEY_TEXT) && HAVE_DECL_KEY_TEXT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TEXT) == (0x184), "KEY_TEXT != 0x184");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TEXT 0x184
 #endif
-#if !(defined(KEY_DVD) || (defined(HAVE_DECL_KEY_DVD) && HAVE_DECL_KEY_DVD))
+#if defined(KEY_DVD) || (defined(HAVE_DECL_KEY_DVD) && HAVE_DECL_KEY_DVD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DVD) == (0x185), "KEY_DVD != 0x185");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DVD 0x185
 #endif
-#if !(defined(KEY_AUX) || (defined(HAVE_DECL_KEY_AUX) && HAVE_DECL_KEY_AUX))
+#if defined(KEY_AUX) || (defined(HAVE_DECL_KEY_AUX) && HAVE_DECL_KEY_AUX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_AUX) == (0x186), "KEY_AUX != 0x186");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_AUX 0x186
 #endif
-#if !(defined(KEY_MP3) || (defined(HAVE_DECL_KEY_MP3) && HAVE_DECL_KEY_MP3))
+#if defined(KEY_MP3) || (defined(HAVE_DECL_KEY_MP3) && HAVE_DECL_KEY_MP3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MP3) == (0x187), "KEY_MP3 != 0x187");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MP3 0x187
 #endif
-#if !(defined(KEY_AUDIO) || (defined(HAVE_DECL_KEY_AUDIO) && HAVE_DECL_KEY_AUDIO))
+#if defined(KEY_AUDIO) || (defined(HAVE_DECL_KEY_AUDIO) && HAVE_DECL_KEY_AUDIO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_AUDIO) == (0x188), "KEY_AUDIO != 0x188");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_AUDIO 0x188
 #endif
-#if !(defined(KEY_VIDEO) || (defined(HAVE_DECL_KEY_VIDEO) && HAVE_DECL_KEY_VIDEO))
+#if defined(KEY_VIDEO) || (defined(HAVE_DECL_KEY_VIDEO) && HAVE_DECL_KEY_VIDEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VIDEO) == (0x189), "KEY_VIDEO != 0x189");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VIDEO 0x189
 #endif
-#if !(defined(KEY_DIRECTORY) || (defined(HAVE_DECL_KEY_DIRECTORY) && HAVE_DECL_KEY_DIRECTORY))
+#if defined(KEY_DIRECTORY) || (defined(HAVE_DECL_KEY_DIRECTORY) && HAVE_DECL_KEY_DIRECTORY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DIRECTORY) == (0x18a), "KEY_DIRECTORY != 0x18a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DIRECTORY 0x18a
 #endif
-#if !(defined(KEY_LIST) || (defined(HAVE_DECL_KEY_LIST) && HAVE_DECL_KEY_LIST))
+#if defined(KEY_LIST) || (defined(HAVE_DECL_KEY_LIST) && HAVE_DECL_KEY_LIST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LIST) == (0x18b), "KEY_LIST != 0x18b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LIST 0x18b
 #endif
-#if !(defined(KEY_MEMO) || (defined(HAVE_DECL_KEY_MEMO) && HAVE_DECL_KEY_MEMO))
+#if defined(KEY_MEMO) || (defined(HAVE_DECL_KEY_MEMO) && HAVE_DECL_KEY_MEMO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MEMO) == (0x18c), "KEY_MEMO != 0x18c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MEMO 0x18c
 #endif
-#if !(defined(KEY_CALENDAR) || (defined(HAVE_DECL_KEY_CALENDAR) && HAVE_DECL_KEY_CALENDAR))
+#if defined(KEY_CALENDAR) || (defined(HAVE_DECL_KEY_CALENDAR) && HAVE_DECL_KEY_CALENDAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CALENDAR) == (0x18d), "KEY_CALENDAR != 0x18d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CALENDAR 0x18d
 #endif
-#if !(defined(KEY_RED) || (defined(HAVE_DECL_KEY_RED) && HAVE_DECL_KEY_RED))
+#if defined(KEY_RED) || (defined(HAVE_DECL_KEY_RED) && HAVE_DECL_KEY_RED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RED) == (0x18e), "KEY_RED != 0x18e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RED 0x18e
 #endif
-#if !(defined(KEY_GREEN) || (defined(HAVE_DECL_KEY_GREEN) && HAVE_DECL_KEY_GREEN))
+#if defined(KEY_GREEN) || (defined(HAVE_DECL_KEY_GREEN) && HAVE_DECL_KEY_GREEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GREEN) == (0x18f), "KEY_GREEN != 0x18f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GREEN 0x18f
 #endif
-#if !(defined(KEY_YELLOW) || (defined(HAVE_DECL_KEY_YELLOW) && HAVE_DECL_KEY_YELLOW))
+#if defined(KEY_YELLOW) || (defined(HAVE_DECL_KEY_YELLOW) && HAVE_DECL_KEY_YELLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_YELLOW) == (0x190), "KEY_YELLOW != 0x190");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_YELLOW 0x190
 #endif
-#if !(defined(KEY_BLUE) || (defined(HAVE_DECL_KEY_BLUE) && HAVE_DECL_KEY_BLUE))
+#if defined(KEY_BLUE) || (defined(HAVE_DECL_KEY_BLUE) && HAVE_DECL_KEY_BLUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BLUE) == (0x191), "KEY_BLUE != 0x191");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BLUE 0x191
 #endif
-#if !(defined(KEY_CHANNELUP) || (defined(HAVE_DECL_KEY_CHANNELUP) && HAVE_DECL_KEY_CHANNELUP))
+#if defined(KEY_CHANNELUP) || (defined(HAVE_DECL_KEY_CHANNELUP) && HAVE_DECL_KEY_CHANNELUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CHANNELUP) == (0x192), "KEY_CHANNELUP != 0x192");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CHANNELUP 0x192
 #endif
-#if !(defined(KEY_CHANNELDOWN) || (defined(HAVE_DECL_KEY_CHANNELDOWN) && HAVE_DECL_KEY_CHANNELDOWN))
+#if defined(KEY_CHANNELDOWN) || (defined(HAVE_DECL_KEY_CHANNELDOWN) && HAVE_DECL_KEY_CHANNELDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CHANNELDOWN) == (0x193), "KEY_CHANNELDOWN != 0x193");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CHANNELDOWN 0x193
 #endif
-#if !(defined(KEY_FIRST) || (defined(HAVE_DECL_KEY_FIRST) && HAVE_DECL_KEY_FIRST))
+#if defined(KEY_FIRST) || (defined(HAVE_DECL_KEY_FIRST) && HAVE_DECL_KEY_FIRST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FIRST) == (0x194), "KEY_FIRST != 0x194");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FIRST 0x194
 #endif
-#if !(defined(KEY_LAST) || (defined(HAVE_DECL_KEY_LAST) && HAVE_DECL_KEY_LAST))
+#if defined(KEY_LAST) || (defined(HAVE_DECL_KEY_LAST) && HAVE_DECL_KEY_LAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LAST) == (0x195), "KEY_LAST != 0x195");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LAST 0x195
 #endif
-#if !(defined(KEY_AB) || (defined(HAVE_DECL_KEY_AB) && HAVE_DECL_KEY_AB))
+#if defined(KEY_AB) || (defined(HAVE_DECL_KEY_AB) && HAVE_DECL_KEY_AB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_AB) == (0x196), "KEY_AB != 0x196");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_AB 0x196
 #endif
-#if !(defined(KEY_NEXT) || (defined(HAVE_DECL_KEY_NEXT) && HAVE_DECL_KEY_NEXT))
+#if defined(KEY_NEXT) || (defined(HAVE_DECL_KEY_NEXT) && HAVE_DECL_KEY_NEXT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NEXT) == (0x197), "KEY_NEXT != 0x197");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NEXT 0x197
 #endif
-#if !(defined(KEY_RESTART) || (defined(HAVE_DECL_KEY_RESTART) && HAVE_DECL_KEY_RESTART))
+#if defined(KEY_RESTART) || (defined(HAVE_DECL_KEY_RESTART) && HAVE_DECL_KEY_RESTART)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RESTART) == (0x198), "KEY_RESTART != 0x198");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RESTART 0x198
 #endif
-#if !(defined(KEY_SLOW) || (defined(HAVE_DECL_KEY_SLOW) && HAVE_DECL_KEY_SLOW))
+#if defined(KEY_SLOW) || (defined(HAVE_DECL_KEY_SLOW) && HAVE_DECL_KEY_SLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SLOW) == (0x199), "KEY_SLOW != 0x199");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SLOW 0x199
 #endif
-#if !(defined(KEY_SHUFFLE) || (defined(HAVE_DECL_KEY_SHUFFLE) && HAVE_DECL_KEY_SHUFFLE))
+#if defined(KEY_SHUFFLE) || (defined(HAVE_DECL_KEY_SHUFFLE) && HAVE_DECL_KEY_SHUFFLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SHUFFLE) == (0x19a), "KEY_SHUFFLE != 0x19a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SHUFFLE 0x19a
 #endif
-#if !(defined(KEY_BREAK) || (defined(HAVE_DECL_KEY_BREAK) && HAVE_DECL_KEY_BREAK))
+#if defined(KEY_BREAK) || (defined(HAVE_DECL_KEY_BREAK) && HAVE_DECL_KEY_BREAK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BREAK) == (0x19b), "KEY_BREAK != 0x19b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BREAK 0x19b
 #endif
-#if !(defined(KEY_PREVIOUS) || (defined(HAVE_DECL_KEY_PREVIOUS) && HAVE_DECL_KEY_PREVIOUS))
+#if defined(KEY_PREVIOUS) || (defined(HAVE_DECL_KEY_PREVIOUS) && HAVE_DECL_KEY_PREVIOUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PREVIOUS) == (0x19c), "KEY_PREVIOUS != 0x19c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PREVIOUS 0x19c
 #endif
-#if !(defined(KEY_DIGITS) || (defined(HAVE_DECL_KEY_DIGITS) && HAVE_DECL_KEY_DIGITS))
+#if defined(KEY_DIGITS) || (defined(HAVE_DECL_KEY_DIGITS) && HAVE_DECL_KEY_DIGITS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DIGITS) == (0x19d), "KEY_DIGITS != 0x19d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DIGITS 0x19d
 #endif
-#if !(defined(KEY_TEEN) || (defined(HAVE_DECL_KEY_TEEN) && HAVE_DECL_KEY_TEEN))
+#if defined(KEY_TEEN) || (defined(HAVE_DECL_KEY_TEEN) && HAVE_DECL_KEY_TEEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TEEN) == (0x19e), "KEY_TEEN != 0x19e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TEEN 0x19e
 #endif
-#if !(defined(KEY_TWEN) || (defined(HAVE_DECL_KEY_TWEN) && HAVE_DECL_KEY_TWEN))
+#if defined(KEY_TWEN) || (defined(HAVE_DECL_KEY_TWEN) && HAVE_DECL_KEY_TWEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TWEN) == (0x19f), "KEY_TWEN != 0x19f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TWEN 0x19f
 #endif
-#if !(defined(KEY_VIDEOPHONE) || (defined(HAVE_DECL_KEY_VIDEOPHONE) && HAVE_DECL_KEY_VIDEOPHONE))
+#if defined(KEY_VIDEOPHONE) || (defined(HAVE_DECL_KEY_VIDEOPHONE) && HAVE_DECL_KEY_VIDEOPHONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VIDEOPHONE) == (0x1a0), "KEY_VIDEOPHONE != 0x1a0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VIDEOPHONE 0x1a0
 #endif
-#if !(defined(KEY_GAMES) || (defined(HAVE_DECL_KEY_GAMES) && HAVE_DECL_KEY_GAMES))
+#if defined(KEY_GAMES) || (defined(HAVE_DECL_KEY_GAMES) && HAVE_DECL_KEY_GAMES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GAMES) == (0x1a1), "KEY_GAMES != 0x1a1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GAMES 0x1a1
 #endif
-#if !(defined(KEY_ZOOMIN) || (defined(HAVE_DECL_KEY_ZOOMIN) && HAVE_DECL_KEY_ZOOMIN))
+#if defined(KEY_ZOOMIN) || (defined(HAVE_DECL_KEY_ZOOMIN) && HAVE_DECL_KEY_ZOOMIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ZOOMIN) == (0x1a2), "KEY_ZOOMIN != 0x1a2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ZOOMIN 0x1a2
 #endif
-#if !(defined(KEY_ZOOMOUT) || (defined(HAVE_DECL_KEY_ZOOMOUT) && HAVE_DECL_KEY_ZOOMOUT))
+#if defined(KEY_ZOOMOUT) || (defined(HAVE_DECL_KEY_ZOOMOUT) && HAVE_DECL_KEY_ZOOMOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ZOOMOUT) == (0x1a3), "KEY_ZOOMOUT != 0x1a3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ZOOMOUT 0x1a3
 #endif
-#if !(defined(KEY_ZOOMRESET) || (defined(HAVE_DECL_KEY_ZOOMRESET) && HAVE_DECL_KEY_ZOOMRESET))
+#if defined(KEY_ZOOMRESET) || (defined(HAVE_DECL_KEY_ZOOMRESET) && HAVE_DECL_KEY_ZOOMRESET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ZOOMRESET) == (0x1a4), "KEY_ZOOMRESET != 0x1a4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ZOOMRESET 0x1a4
 #endif
-#if !(defined(KEY_WORDPROCESSOR) || (defined(HAVE_DECL_KEY_WORDPROCESSOR) && HAVE_DECL_KEY_WORDPROCESSOR))
+#if defined(KEY_WORDPROCESSOR) || (defined(HAVE_DECL_KEY_WORDPROCESSOR) && HAVE_DECL_KEY_WORDPROCESSOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_WORDPROCESSOR) == (0x1a5), "KEY_WORDPROCESSOR != 0x1a5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_WORDPROCESSOR 0x1a5
 #endif
-#if !(defined(KEY_EDITOR) || (defined(HAVE_DECL_KEY_EDITOR) && HAVE_DECL_KEY_EDITOR))
+#if defined(KEY_EDITOR) || (defined(HAVE_DECL_KEY_EDITOR) && HAVE_DECL_KEY_EDITOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_EDITOR) == (0x1a6), "KEY_EDITOR != 0x1a6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_EDITOR 0x1a6
 #endif
-#if !(defined(KEY_SPREADSHEET) || (defined(HAVE_DECL_KEY_SPREADSHEET) && HAVE_DECL_KEY_SPREADSHEET))
+#if defined(KEY_SPREADSHEET) || (defined(HAVE_DECL_KEY_SPREADSHEET) && HAVE_DECL_KEY_SPREADSHEET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPREADSHEET) == (0x1a7), "KEY_SPREADSHEET != 0x1a7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPREADSHEET 0x1a7
 #endif
-#if !(defined(KEY_GRAPHICSEDITOR) || (defined(HAVE_DECL_KEY_GRAPHICSEDITOR) && HAVE_DECL_KEY_GRAPHICSEDITOR))
+#if defined(KEY_GRAPHICSEDITOR) || (defined(HAVE_DECL_KEY_GRAPHICSEDITOR) && HAVE_DECL_KEY_GRAPHICSEDITOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GRAPHICSEDITOR) == (0x1a8), "KEY_GRAPHICSEDITOR != 0x1a8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GRAPHICSEDITOR 0x1a8
 #endif
-#if !(defined(KEY_PRESENTATION) || (defined(HAVE_DECL_KEY_PRESENTATION) && HAVE_DECL_KEY_PRESENTATION))
+#if defined(KEY_PRESENTATION) || (defined(HAVE_DECL_KEY_PRESENTATION) && HAVE_DECL_KEY_PRESENTATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PRESENTATION) == (0x1a9), "KEY_PRESENTATION != 0x1a9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PRESENTATION 0x1a9
 #endif
-#if !(defined(KEY_DATABASE) || (defined(HAVE_DECL_KEY_DATABASE) && HAVE_DECL_KEY_DATABASE))
+#if defined(KEY_DATABASE) || (defined(HAVE_DECL_KEY_DATABASE) && HAVE_DECL_KEY_DATABASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DATABASE) == (0x1aa), "KEY_DATABASE != 0x1aa");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DATABASE 0x1aa
 #endif
-#if !(defined(KEY_NEWS) || (defined(HAVE_DECL_KEY_NEWS) && HAVE_DECL_KEY_NEWS))
+#if defined(KEY_NEWS) || (defined(HAVE_DECL_KEY_NEWS) && HAVE_DECL_KEY_NEWS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NEWS) == (0x1ab), "KEY_NEWS != 0x1ab");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NEWS 0x1ab
 #endif
-#if !(defined(KEY_VOICEMAIL) || (defined(HAVE_DECL_KEY_VOICEMAIL) && HAVE_DECL_KEY_VOICEMAIL))
+#if defined(KEY_VOICEMAIL) || (defined(HAVE_DECL_KEY_VOICEMAIL) && HAVE_DECL_KEY_VOICEMAIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VOICEMAIL) == (0x1ac), "KEY_VOICEMAIL != 0x1ac");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VOICEMAIL 0x1ac
 #endif
-#if !(defined(KEY_ADDRESSBOOK) || (defined(HAVE_DECL_KEY_ADDRESSBOOK) && HAVE_DECL_KEY_ADDRESSBOOK))
+#if defined(KEY_ADDRESSBOOK) || (defined(HAVE_DECL_KEY_ADDRESSBOOK) && HAVE_DECL_KEY_ADDRESSBOOK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ADDRESSBOOK) == (0x1ad), "KEY_ADDRESSBOOK != 0x1ad");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ADDRESSBOOK 0x1ad
 #endif
-#if !(defined(KEY_MESSENGER) || (defined(HAVE_DECL_KEY_MESSENGER) && HAVE_DECL_KEY_MESSENGER))
+#if defined(KEY_MESSENGER) || (defined(HAVE_DECL_KEY_MESSENGER) && HAVE_DECL_KEY_MESSENGER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MESSENGER) == (0x1ae), "KEY_MESSENGER != 0x1ae");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MESSENGER 0x1ae
 #endif
-#if !(defined(KEY_DISPLAYTOGGLE) || (defined(HAVE_DECL_KEY_DISPLAYTOGGLE) && HAVE_DECL_KEY_DISPLAYTOGGLE))
+#if defined(KEY_DISPLAYTOGGLE) || (defined(HAVE_DECL_KEY_DISPLAYTOGGLE) && HAVE_DECL_KEY_DISPLAYTOGGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DISPLAYTOGGLE) == (0x1af), "KEY_DISPLAYTOGGLE != 0x1af");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DISPLAYTOGGLE 0x1af
 #endif
-#if !(defined(KEY_SPELLCHECK) || (defined(HAVE_DECL_KEY_SPELLCHECK) && HAVE_DECL_KEY_SPELLCHECK))
+#if defined(KEY_SPELLCHECK) || (defined(HAVE_DECL_KEY_SPELLCHECK) && HAVE_DECL_KEY_SPELLCHECK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPELLCHECK) == (0x1b0), "KEY_SPELLCHECK != 0x1b0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPELLCHECK 0x1b0
 #endif
-#if !(defined(KEY_LOGOFF) || (defined(HAVE_DECL_KEY_LOGOFF) && HAVE_DECL_KEY_LOGOFF))
+#if defined(KEY_LOGOFF) || (defined(HAVE_DECL_KEY_LOGOFF) && HAVE_DECL_KEY_LOGOFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LOGOFF) == (0x1b1), "KEY_LOGOFF != 0x1b1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LOGOFF 0x1b1
 #endif
-#if !(defined(KEY_DOLLAR) || (defined(HAVE_DECL_KEY_DOLLAR) && HAVE_DECL_KEY_DOLLAR))
+#if defined(KEY_DOLLAR) || (defined(HAVE_DECL_KEY_DOLLAR) && HAVE_DECL_KEY_DOLLAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DOLLAR) == (0x1b2), "KEY_DOLLAR != 0x1b2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DOLLAR 0x1b2
 #endif
-#if !(defined(KEY_EURO) || (defined(HAVE_DECL_KEY_EURO) && HAVE_DECL_KEY_EURO))
+#if defined(KEY_EURO) || (defined(HAVE_DECL_KEY_EURO) && HAVE_DECL_KEY_EURO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_EURO) == (0x1b3), "KEY_EURO != 0x1b3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_EURO 0x1b3
 #endif
-#if !(defined(KEY_FRAMEBACK) || (defined(HAVE_DECL_KEY_FRAMEBACK) && HAVE_DECL_KEY_FRAMEBACK))
+#if defined(KEY_FRAMEBACK) || (defined(HAVE_DECL_KEY_FRAMEBACK) && HAVE_DECL_KEY_FRAMEBACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FRAMEBACK) == (0x1b4), "KEY_FRAMEBACK != 0x1b4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FRAMEBACK 0x1b4
 #endif
-#if !(defined(KEY_FRAMEFORWARD) || (defined(HAVE_DECL_KEY_FRAMEFORWARD) && HAVE_DECL_KEY_FRAMEFORWARD))
+#if defined(KEY_FRAMEFORWARD) || (defined(HAVE_DECL_KEY_FRAMEFORWARD) && HAVE_DECL_KEY_FRAMEFORWARD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FRAMEFORWARD) == (0x1b5), "KEY_FRAMEFORWARD != 0x1b5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FRAMEFORWARD 0x1b5
 #endif
-#if !(defined(KEY_CONTEXT_MENU) || (defined(HAVE_DECL_KEY_CONTEXT_MENU) && HAVE_DECL_KEY_CONTEXT_MENU))
+#if defined(KEY_CONTEXT_MENU) || (defined(HAVE_DECL_KEY_CONTEXT_MENU) && HAVE_DECL_KEY_CONTEXT_MENU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CONTEXT_MENU) == (0x1b6), "KEY_CONTEXT_MENU != 0x1b6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CONTEXT_MENU 0x1b6
 #endif
-#if !(defined(KEY_MEDIA_REPEAT) || (defined(HAVE_DECL_KEY_MEDIA_REPEAT) && HAVE_DECL_KEY_MEDIA_REPEAT))
+#if defined(KEY_MEDIA_REPEAT) || (defined(HAVE_DECL_KEY_MEDIA_REPEAT) && HAVE_DECL_KEY_MEDIA_REPEAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MEDIA_REPEAT) == (0x1b7), "KEY_MEDIA_REPEAT != 0x1b7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MEDIA_REPEAT 0x1b7
 #endif
-#if !(defined(KEY_10CHANNELSUP) || (defined(HAVE_DECL_KEY_10CHANNELSUP) && HAVE_DECL_KEY_10CHANNELSUP))
+#if defined(KEY_10CHANNELSUP) || (defined(HAVE_DECL_KEY_10CHANNELSUP) && HAVE_DECL_KEY_10CHANNELSUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_10CHANNELSUP) == (0x1b8), "KEY_10CHANNELSUP != 0x1b8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_10CHANNELSUP 0x1b8
 #endif
-#if !(defined(KEY_10CHANNELSDOWN) || (defined(HAVE_DECL_KEY_10CHANNELSDOWN) && HAVE_DECL_KEY_10CHANNELSDOWN))
+#if defined(KEY_10CHANNELSDOWN) || (defined(HAVE_DECL_KEY_10CHANNELSDOWN) && HAVE_DECL_KEY_10CHANNELSDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_10CHANNELSDOWN) == (0x1b9), "KEY_10CHANNELSDOWN != 0x1b9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_10CHANNELSDOWN 0x1b9
 #endif
-#if !(defined(KEY_IMAGES) || (defined(HAVE_DECL_KEY_IMAGES) && HAVE_DECL_KEY_IMAGES))
+#if defined(KEY_IMAGES) || (defined(HAVE_DECL_KEY_IMAGES) && HAVE_DECL_KEY_IMAGES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_IMAGES) == (0x1ba), "KEY_IMAGES != 0x1ba");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_IMAGES 0x1ba
 #endif
-#if !(defined(KEY_DEL_EOL) || (defined(HAVE_DECL_KEY_DEL_EOL) && HAVE_DECL_KEY_DEL_EOL))
+#if defined(KEY_DEL_EOL) || (defined(HAVE_DECL_KEY_DEL_EOL) && HAVE_DECL_KEY_DEL_EOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DEL_EOL) == (0x1c0), "KEY_DEL_EOL != 0x1c0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DEL_EOL 0x1c0
 #endif
-#if !(defined(KEY_DEL_EOS) || (defined(HAVE_DECL_KEY_DEL_EOS) && HAVE_DECL_KEY_DEL_EOS))
+#if defined(KEY_DEL_EOS) || (defined(HAVE_DECL_KEY_DEL_EOS) && HAVE_DECL_KEY_DEL_EOS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DEL_EOS) == (0x1c1), "KEY_DEL_EOS != 0x1c1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DEL_EOS 0x1c1
 #endif
-#if !(defined(KEY_INS_LINE) || (defined(HAVE_DECL_KEY_INS_LINE) && HAVE_DECL_KEY_INS_LINE))
+#if defined(KEY_INS_LINE) || (defined(HAVE_DECL_KEY_INS_LINE) && HAVE_DECL_KEY_INS_LINE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_INS_LINE) == (0x1c2), "KEY_INS_LINE != 0x1c2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_INS_LINE 0x1c2
 #endif
-#if !(defined(KEY_DEL_LINE) || (defined(HAVE_DECL_KEY_DEL_LINE) && HAVE_DECL_KEY_DEL_LINE))
+#if defined(KEY_DEL_LINE) || (defined(HAVE_DECL_KEY_DEL_LINE) && HAVE_DECL_KEY_DEL_LINE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DEL_LINE) == (0x1c3), "KEY_DEL_LINE != 0x1c3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DEL_LINE 0x1c3
 #endif
-#if !(defined(KEY_FN) || (defined(HAVE_DECL_KEY_FN) && HAVE_DECL_KEY_FN))
+#if defined(KEY_FN) || (defined(HAVE_DECL_KEY_FN) && HAVE_DECL_KEY_FN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN) == (0x1d0), "KEY_FN != 0x1d0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN 0x1d0
 #endif
-#if !(defined(KEY_FN_ESC) || (defined(HAVE_DECL_KEY_FN_ESC) && HAVE_DECL_KEY_FN_ESC))
+#if defined(KEY_FN_ESC) || (defined(HAVE_DECL_KEY_FN_ESC) && HAVE_DECL_KEY_FN_ESC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_ESC) == (0x1d1), "KEY_FN_ESC != 0x1d1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_ESC 0x1d1
 #endif
-#if !(defined(KEY_FN_F1) || (defined(HAVE_DECL_KEY_FN_F1) && HAVE_DECL_KEY_FN_F1))
+#if defined(KEY_FN_F1) || (defined(HAVE_DECL_KEY_FN_F1) && HAVE_DECL_KEY_FN_F1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F1) == (0x1d2), "KEY_FN_F1 != 0x1d2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F1 0x1d2
 #endif
-#if !(defined(KEY_FN_F2) || (defined(HAVE_DECL_KEY_FN_F2) && HAVE_DECL_KEY_FN_F2))
+#if defined(KEY_FN_F2) || (defined(HAVE_DECL_KEY_FN_F2) && HAVE_DECL_KEY_FN_F2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F2) == (0x1d3), "KEY_FN_F2 != 0x1d3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F2 0x1d3
 #endif
-#if !(defined(KEY_FN_F3) || (defined(HAVE_DECL_KEY_FN_F3) && HAVE_DECL_KEY_FN_F3))
+#if defined(KEY_FN_F3) || (defined(HAVE_DECL_KEY_FN_F3) && HAVE_DECL_KEY_FN_F3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F3) == (0x1d4), "KEY_FN_F3 != 0x1d4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F3 0x1d4
 #endif
-#if !(defined(KEY_FN_F4) || (defined(HAVE_DECL_KEY_FN_F4) && HAVE_DECL_KEY_FN_F4))
+#if defined(KEY_FN_F4) || (defined(HAVE_DECL_KEY_FN_F4) && HAVE_DECL_KEY_FN_F4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F4) == (0x1d5), "KEY_FN_F4 != 0x1d5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F4 0x1d5
 #endif
-#if !(defined(KEY_FN_F5) || (defined(HAVE_DECL_KEY_FN_F5) && HAVE_DECL_KEY_FN_F5))
+#if defined(KEY_FN_F5) || (defined(HAVE_DECL_KEY_FN_F5) && HAVE_DECL_KEY_FN_F5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F5) == (0x1d6), "KEY_FN_F5 != 0x1d6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F5 0x1d6
 #endif
-#if !(defined(KEY_FN_F6) || (defined(HAVE_DECL_KEY_FN_F6) && HAVE_DECL_KEY_FN_F6))
+#if defined(KEY_FN_F6) || (defined(HAVE_DECL_KEY_FN_F6) && HAVE_DECL_KEY_FN_F6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F6) == (0x1d7), "KEY_FN_F6 != 0x1d7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F6 0x1d7
 #endif
-#if !(defined(KEY_FN_F7) || (defined(HAVE_DECL_KEY_FN_F7) && HAVE_DECL_KEY_FN_F7))
+#if defined(KEY_FN_F7) || (defined(HAVE_DECL_KEY_FN_F7) && HAVE_DECL_KEY_FN_F7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F7) == (0x1d8), "KEY_FN_F7 != 0x1d8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F7 0x1d8
 #endif
-#if !(defined(KEY_FN_F8) || (defined(HAVE_DECL_KEY_FN_F8) && HAVE_DECL_KEY_FN_F8))
+#if defined(KEY_FN_F8) || (defined(HAVE_DECL_KEY_FN_F8) && HAVE_DECL_KEY_FN_F8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F8) == (0x1d9), "KEY_FN_F8 != 0x1d9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F8 0x1d9
 #endif
-#if !(defined(KEY_FN_F9) || (defined(HAVE_DECL_KEY_FN_F9) && HAVE_DECL_KEY_FN_F9))
+#if defined(KEY_FN_F9) || (defined(HAVE_DECL_KEY_FN_F9) && HAVE_DECL_KEY_FN_F9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F9) == (0x1da), "KEY_FN_F9 != 0x1da");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F9 0x1da
 #endif
-#if !(defined(KEY_FN_F10) || (defined(HAVE_DECL_KEY_FN_F10) && HAVE_DECL_KEY_FN_F10))
+#if defined(KEY_FN_F10) || (defined(HAVE_DECL_KEY_FN_F10) && HAVE_DECL_KEY_FN_F10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F10) == (0x1db), "KEY_FN_F10 != 0x1db");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F10 0x1db
 #endif
-#if !(defined(KEY_FN_F11) || (defined(HAVE_DECL_KEY_FN_F11) && HAVE_DECL_KEY_FN_F11))
+#if defined(KEY_FN_F11) || (defined(HAVE_DECL_KEY_FN_F11) && HAVE_DECL_KEY_FN_F11)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F11) == (0x1dc), "KEY_FN_F11 != 0x1dc");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F11 0x1dc
 #endif
-#if !(defined(KEY_FN_F12) || (defined(HAVE_DECL_KEY_FN_F12) && HAVE_DECL_KEY_FN_F12))
+#if defined(KEY_FN_F12) || (defined(HAVE_DECL_KEY_FN_F12) && HAVE_DECL_KEY_FN_F12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F12) == (0x1dd), "KEY_FN_F12 != 0x1dd");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F12 0x1dd
 #endif
-#if !(defined(KEY_FN_1) || (defined(HAVE_DECL_KEY_FN_1) && HAVE_DECL_KEY_FN_1))
+#if defined(KEY_FN_1) || (defined(HAVE_DECL_KEY_FN_1) && HAVE_DECL_KEY_FN_1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_1) == (0x1de), "KEY_FN_1 != 0x1de");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_1 0x1de
 #endif
-#if !(defined(KEY_FN_2) || (defined(HAVE_DECL_KEY_FN_2) && HAVE_DECL_KEY_FN_2))
+#if defined(KEY_FN_2) || (defined(HAVE_DECL_KEY_FN_2) && HAVE_DECL_KEY_FN_2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_2) == (0x1df), "KEY_FN_2 != 0x1df");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_2 0x1df
 #endif
-#if !(defined(KEY_FN_D) || (defined(HAVE_DECL_KEY_FN_D) && HAVE_DECL_KEY_FN_D))
+#if defined(KEY_FN_D) || (defined(HAVE_DECL_KEY_FN_D) && HAVE_DECL_KEY_FN_D)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_D) == (0x1e0), "KEY_FN_D != 0x1e0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_D 0x1e0
 #endif
-#if !(defined(KEY_FN_E) || (defined(HAVE_DECL_KEY_FN_E) && HAVE_DECL_KEY_FN_E))
+#if defined(KEY_FN_E) || (defined(HAVE_DECL_KEY_FN_E) && HAVE_DECL_KEY_FN_E)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_E) == (0x1e1), "KEY_FN_E != 0x1e1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_E 0x1e1
 #endif
-#if !(defined(KEY_FN_F) || (defined(HAVE_DECL_KEY_FN_F) && HAVE_DECL_KEY_FN_F))
+#if defined(KEY_FN_F) || (defined(HAVE_DECL_KEY_FN_F) && HAVE_DECL_KEY_FN_F)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_F) == (0x1e2), "KEY_FN_F != 0x1e2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_F 0x1e2
 #endif
-#if !(defined(KEY_FN_S) || (defined(HAVE_DECL_KEY_FN_S) && HAVE_DECL_KEY_FN_S))
+#if defined(KEY_FN_S) || (defined(HAVE_DECL_KEY_FN_S) && HAVE_DECL_KEY_FN_S)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_S) == (0x1e3), "KEY_FN_S != 0x1e3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_S 0x1e3
 #endif
-#if !(defined(KEY_FN_B) || (defined(HAVE_DECL_KEY_FN_B) && HAVE_DECL_KEY_FN_B))
+#if defined(KEY_FN_B) || (defined(HAVE_DECL_KEY_FN_B) && HAVE_DECL_KEY_FN_B)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FN_B) == (0x1e4), "KEY_FN_B != 0x1e4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FN_B 0x1e4
 #endif
-#if !(defined(KEY_BRL_DOT1) || (defined(HAVE_DECL_KEY_BRL_DOT1) && HAVE_DECL_KEY_BRL_DOT1))
+#if defined(KEY_BRL_DOT1) || (defined(HAVE_DECL_KEY_BRL_DOT1) && HAVE_DECL_KEY_BRL_DOT1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT1) == (0x1f1), "KEY_BRL_DOT1 != 0x1f1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT1 0x1f1
 #endif
-#if !(defined(KEY_BRL_DOT2) || (defined(HAVE_DECL_KEY_BRL_DOT2) && HAVE_DECL_KEY_BRL_DOT2))
+#if defined(KEY_BRL_DOT2) || (defined(HAVE_DECL_KEY_BRL_DOT2) && HAVE_DECL_KEY_BRL_DOT2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT2) == (0x1f2), "KEY_BRL_DOT2 != 0x1f2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT2 0x1f2
 #endif
-#if !(defined(KEY_BRL_DOT3) || (defined(HAVE_DECL_KEY_BRL_DOT3) && HAVE_DECL_KEY_BRL_DOT3))
+#if defined(KEY_BRL_DOT3) || (defined(HAVE_DECL_KEY_BRL_DOT3) && HAVE_DECL_KEY_BRL_DOT3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT3) == (0x1f3), "KEY_BRL_DOT3 != 0x1f3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT3 0x1f3
 #endif
-#if !(defined(KEY_BRL_DOT4) || (defined(HAVE_DECL_KEY_BRL_DOT4) && HAVE_DECL_KEY_BRL_DOT4))
+#if defined(KEY_BRL_DOT4) || (defined(HAVE_DECL_KEY_BRL_DOT4) && HAVE_DECL_KEY_BRL_DOT4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT4) == (0x1f4), "KEY_BRL_DOT4 != 0x1f4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT4 0x1f4
 #endif
-#if !(defined(KEY_BRL_DOT5) || (defined(HAVE_DECL_KEY_BRL_DOT5) && HAVE_DECL_KEY_BRL_DOT5))
+#if defined(KEY_BRL_DOT5) || (defined(HAVE_DECL_KEY_BRL_DOT5) && HAVE_DECL_KEY_BRL_DOT5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT5) == (0x1f5), "KEY_BRL_DOT5 != 0x1f5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT5 0x1f5
 #endif
-#if !(defined(KEY_BRL_DOT6) || (defined(HAVE_DECL_KEY_BRL_DOT6) && HAVE_DECL_KEY_BRL_DOT6))
+#if defined(KEY_BRL_DOT6) || (defined(HAVE_DECL_KEY_BRL_DOT6) && HAVE_DECL_KEY_BRL_DOT6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT6) == (0x1f6), "KEY_BRL_DOT6 != 0x1f6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT6 0x1f6
 #endif
-#if !(defined(KEY_BRL_DOT7) || (defined(HAVE_DECL_KEY_BRL_DOT7) && HAVE_DECL_KEY_BRL_DOT7))
+#if defined(KEY_BRL_DOT7) || (defined(HAVE_DECL_KEY_BRL_DOT7) && HAVE_DECL_KEY_BRL_DOT7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT7) == (0x1f7), "KEY_BRL_DOT7 != 0x1f7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT7 0x1f7
 #endif
-#if !(defined(KEY_BRL_DOT8) || (defined(HAVE_DECL_KEY_BRL_DOT8) && HAVE_DECL_KEY_BRL_DOT8))
+#if defined(KEY_BRL_DOT8) || (defined(HAVE_DECL_KEY_BRL_DOT8) && HAVE_DECL_KEY_BRL_DOT8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT8) == (0x1f8), "KEY_BRL_DOT8 != 0x1f8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT8 0x1f8
 #endif
-#if !(defined(KEY_BRL_DOT9) || (defined(HAVE_DECL_KEY_BRL_DOT9) && HAVE_DECL_KEY_BRL_DOT9))
+#if defined(KEY_BRL_DOT9) || (defined(HAVE_DECL_KEY_BRL_DOT9) && HAVE_DECL_KEY_BRL_DOT9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT9) == (0x1f9), "KEY_BRL_DOT9 != 0x1f9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT9 0x1f9
 #endif
-#if !(defined(KEY_BRL_DOT10) || (defined(HAVE_DECL_KEY_BRL_DOT10) && HAVE_DECL_KEY_BRL_DOT10))
+#if defined(KEY_BRL_DOT10) || (defined(HAVE_DECL_KEY_BRL_DOT10) && HAVE_DECL_KEY_BRL_DOT10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRL_DOT10) == (0x1fa), "KEY_BRL_DOT10 != 0x1fa");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRL_DOT10 0x1fa
 #endif
-#if !(defined(KEY_NUMERIC_0) || (defined(HAVE_DECL_KEY_NUMERIC_0) && HAVE_DECL_KEY_NUMERIC_0))
+#if defined(KEY_NUMERIC_0) || (defined(HAVE_DECL_KEY_NUMERIC_0) && HAVE_DECL_KEY_NUMERIC_0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_0) == (0x200), "KEY_NUMERIC_0 != 0x200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_0 0x200
 #endif
-#if !(defined(KEY_NUMERIC_1) || (defined(HAVE_DECL_KEY_NUMERIC_1) && HAVE_DECL_KEY_NUMERIC_1))
+#if defined(KEY_NUMERIC_1) || (defined(HAVE_DECL_KEY_NUMERIC_1) && HAVE_DECL_KEY_NUMERIC_1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_1) == (0x201), "KEY_NUMERIC_1 != 0x201");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_1 0x201
 #endif
-#if !(defined(KEY_NUMERIC_2) || (defined(HAVE_DECL_KEY_NUMERIC_2) && HAVE_DECL_KEY_NUMERIC_2))
+#if defined(KEY_NUMERIC_2) || (defined(HAVE_DECL_KEY_NUMERIC_2) && HAVE_DECL_KEY_NUMERIC_2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_2) == (0x202), "KEY_NUMERIC_2 != 0x202");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_2 0x202
 #endif
-#if !(defined(KEY_NUMERIC_3) || (defined(HAVE_DECL_KEY_NUMERIC_3) && HAVE_DECL_KEY_NUMERIC_3))
+#if defined(KEY_NUMERIC_3) || (defined(HAVE_DECL_KEY_NUMERIC_3) && HAVE_DECL_KEY_NUMERIC_3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_3) == (0x203), "KEY_NUMERIC_3 != 0x203");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_3 0x203
 #endif
-#if !(defined(KEY_NUMERIC_4) || (defined(HAVE_DECL_KEY_NUMERIC_4) && HAVE_DECL_KEY_NUMERIC_4))
+#if defined(KEY_NUMERIC_4) || (defined(HAVE_DECL_KEY_NUMERIC_4) && HAVE_DECL_KEY_NUMERIC_4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_4) == (0x204), "KEY_NUMERIC_4 != 0x204");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_4 0x204
 #endif
-#if !(defined(KEY_NUMERIC_5) || (defined(HAVE_DECL_KEY_NUMERIC_5) && HAVE_DECL_KEY_NUMERIC_5))
+#if defined(KEY_NUMERIC_5) || (defined(HAVE_DECL_KEY_NUMERIC_5) && HAVE_DECL_KEY_NUMERIC_5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_5) == (0x205), "KEY_NUMERIC_5 != 0x205");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_5 0x205
 #endif
-#if !(defined(KEY_NUMERIC_6) || (defined(HAVE_DECL_KEY_NUMERIC_6) && HAVE_DECL_KEY_NUMERIC_6))
+#if defined(KEY_NUMERIC_6) || (defined(HAVE_DECL_KEY_NUMERIC_6) && HAVE_DECL_KEY_NUMERIC_6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_6) == (0x206), "KEY_NUMERIC_6 != 0x206");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_6 0x206
 #endif
-#if !(defined(KEY_NUMERIC_7) || (defined(HAVE_DECL_KEY_NUMERIC_7) && HAVE_DECL_KEY_NUMERIC_7))
+#if defined(KEY_NUMERIC_7) || (defined(HAVE_DECL_KEY_NUMERIC_7) && HAVE_DECL_KEY_NUMERIC_7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_7) == (0x207), "KEY_NUMERIC_7 != 0x207");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_7 0x207
 #endif
-#if !(defined(KEY_NUMERIC_8) || (defined(HAVE_DECL_KEY_NUMERIC_8) && HAVE_DECL_KEY_NUMERIC_8))
+#if defined(KEY_NUMERIC_8) || (defined(HAVE_DECL_KEY_NUMERIC_8) && HAVE_DECL_KEY_NUMERIC_8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_8) == (0x208), "KEY_NUMERIC_8 != 0x208");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_8 0x208
 #endif
-#if !(defined(KEY_NUMERIC_9) || (defined(HAVE_DECL_KEY_NUMERIC_9) && HAVE_DECL_KEY_NUMERIC_9))
+#if defined(KEY_NUMERIC_9) || (defined(HAVE_DECL_KEY_NUMERIC_9) && HAVE_DECL_KEY_NUMERIC_9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_9) == (0x209), "KEY_NUMERIC_9 != 0x209");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_9 0x209
 #endif
-#if !(defined(KEY_NUMERIC_STAR) || (defined(HAVE_DECL_KEY_NUMERIC_STAR) && HAVE_DECL_KEY_NUMERIC_STAR))
+#if defined(KEY_NUMERIC_STAR) || (defined(HAVE_DECL_KEY_NUMERIC_STAR) && HAVE_DECL_KEY_NUMERIC_STAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_STAR) == (0x20a), "KEY_NUMERIC_STAR != 0x20a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_STAR 0x20a
 #endif
-#if !(defined(KEY_NUMERIC_POUND) || (defined(HAVE_DECL_KEY_NUMERIC_POUND) && HAVE_DECL_KEY_NUMERIC_POUND))
+#if defined(KEY_NUMERIC_POUND) || (defined(HAVE_DECL_KEY_NUMERIC_POUND) && HAVE_DECL_KEY_NUMERIC_POUND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_POUND) == (0x20b), "KEY_NUMERIC_POUND != 0x20b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_POUND 0x20b
 #endif
-#if !(defined(KEY_NUMERIC_A) || (defined(HAVE_DECL_KEY_NUMERIC_A) && HAVE_DECL_KEY_NUMERIC_A))
+#if defined(KEY_NUMERIC_A) || (defined(HAVE_DECL_KEY_NUMERIC_A) && HAVE_DECL_KEY_NUMERIC_A)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_A) == (0x20c), "KEY_NUMERIC_A != 0x20c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_A 0x20c
 #endif
-#if !(defined(KEY_NUMERIC_B) || (defined(HAVE_DECL_KEY_NUMERIC_B) && HAVE_DECL_KEY_NUMERIC_B))
+#if defined(KEY_NUMERIC_B) || (defined(HAVE_DECL_KEY_NUMERIC_B) && HAVE_DECL_KEY_NUMERIC_B)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_B) == (0x20d), "KEY_NUMERIC_B != 0x20d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_B 0x20d
 #endif
-#if !(defined(KEY_NUMERIC_C) || (defined(HAVE_DECL_KEY_NUMERIC_C) && HAVE_DECL_KEY_NUMERIC_C))
+#if defined(KEY_NUMERIC_C) || (defined(HAVE_DECL_KEY_NUMERIC_C) && HAVE_DECL_KEY_NUMERIC_C)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_C) == (0x20e), "KEY_NUMERIC_C != 0x20e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_C 0x20e
 #endif
-#if !(defined(KEY_NUMERIC_D) || (defined(HAVE_DECL_KEY_NUMERIC_D) && HAVE_DECL_KEY_NUMERIC_D))
+#if defined(KEY_NUMERIC_D) || (defined(HAVE_DECL_KEY_NUMERIC_D) && HAVE_DECL_KEY_NUMERIC_D)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_D) == (0x20f), "KEY_NUMERIC_D != 0x20f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_D 0x20f
 #endif
-#if !(defined(KEY_CAMERA_FOCUS) || (defined(HAVE_DECL_KEY_CAMERA_FOCUS) && HAVE_DECL_KEY_CAMERA_FOCUS))
+#if defined(KEY_CAMERA_FOCUS) || (defined(HAVE_DECL_KEY_CAMERA_FOCUS) && HAVE_DECL_KEY_CAMERA_FOCUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CAMERA_FOCUS) == (0x210), "KEY_CAMERA_FOCUS != 0x210");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CAMERA_FOCUS 0x210
 #endif
-#if !(defined(KEY_WPS_BUTTON) || (defined(HAVE_DECL_KEY_WPS_BUTTON) && HAVE_DECL_KEY_WPS_BUTTON))
+#if defined(KEY_WPS_BUTTON) || (defined(HAVE_DECL_KEY_WPS_BUTTON) && HAVE_DECL_KEY_WPS_BUTTON)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_WPS_BUTTON) == (0x211), "KEY_WPS_BUTTON != 0x211");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_WPS_BUTTON 0x211
 #endif
-#if !(defined(KEY_TOUCHPAD_TOGGLE) || (defined(HAVE_DECL_KEY_TOUCHPAD_TOGGLE) && HAVE_DECL_KEY_TOUCHPAD_TOGGLE))
+#if defined(KEY_TOUCHPAD_TOGGLE) || (defined(HAVE_DECL_KEY_TOUCHPAD_TOGGLE) && HAVE_DECL_KEY_TOUCHPAD_TOGGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TOUCHPAD_TOGGLE) == (0x212), "KEY_TOUCHPAD_TOGGLE != 0x212");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TOUCHPAD_TOGGLE 0x212
 #endif
-#if !(defined(KEY_TOUCHPAD_ON) || (defined(HAVE_DECL_KEY_TOUCHPAD_ON) && HAVE_DECL_KEY_TOUCHPAD_ON))
+#if defined(KEY_TOUCHPAD_ON) || (defined(HAVE_DECL_KEY_TOUCHPAD_ON) && HAVE_DECL_KEY_TOUCHPAD_ON)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TOUCHPAD_ON) == (0x213), "KEY_TOUCHPAD_ON != 0x213");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TOUCHPAD_ON 0x213
 #endif
-#if !(defined(KEY_TOUCHPAD_OFF) || (defined(HAVE_DECL_KEY_TOUCHPAD_OFF) && HAVE_DECL_KEY_TOUCHPAD_OFF))
+#if defined(KEY_TOUCHPAD_OFF) || (defined(HAVE_DECL_KEY_TOUCHPAD_OFF) && HAVE_DECL_KEY_TOUCHPAD_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TOUCHPAD_OFF) == (0x214), "KEY_TOUCHPAD_OFF != 0x214");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TOUCHPAD_OFF 0x214
 #endif
-#if !(defined(KEY_CAMERA_ZOOMIN) || (defined(HAVE_DECL_KEY_CAMERA_ZOOMIN) && HAVE_DECL_KEY_CAMERA_ZOOMIN))
+#if defined(KEY_CAMERA_ZOOMIN) || (defined(HAVE_DECL_KEY_CAMERA_ZOOMIN) && HAVE_DECL_KEY_CAMERA_ZOOMIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CAMERA_ZOOMIN) == (0x215), "KEY_CAMERA_ZOOMIN != 0x215");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CAMERA_ZOOMIN 0x215
 #endif
-#if !(defined(KEY_CAMERA_ZOOMOUT) || (defined(HAVE_DECL_KEY_CAMERA_ZOOMOUT) && HAVE_DECL_KEY_CAMERA_ZOOMOUT))
+#if defined(KEY_CAMERA_ZOOMOUT) || (defined(HAVE_DECL_KEY_CAMERA_ZOOMOUT) && HAVE_DECL_KEY_CAMERA_ZOOMOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CAMERA_ZOOMOUT) == (0x216), "KEY_CAMERA_ZOOMOUT != 0x216");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CAMERA_ZOOMOUT 0x216
 #endif
-#if !(defined(KEY_CAMERA_UP) || (defined(HAVE_DECL_KEY_CAMERA_UP) && HAVE_DECL_KEY_CAMERA_UP))
+#if defined(KEY_CAMERA_UP) || (defined(HAVE_DECL_KEY_CAMERA_UP) && HAVE_DECL_KEY_CAMERA_UP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CAMERA_UP) == (0x217), "KEY_CAMERA_UP != 0x217");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CAMERA_UP 0x217
 #endif
-#if !(defined(KEY_CAMERA_DOWN) || (defined(HAVE_DECL_KEY_CAMERA_DOWN) && HAVE_DECL_KEY_CAMERA_DOWN))
+#if defined(KEY_CAMERA_DOWN) || (defined(HAVE_DECL_KEY_CAMERA_DOWN) && HAVE_DECL_KEY_CAMERA_DOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CAMERA_DOWN) == (0x218), "KEY_CAMERA_DOWN != 0x218");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CAMERA_DOWN 0x218
 #endif
-#if !(defined(KEY_CAMERA_LEFT) || (defined(HAVE_DECL_KEY_CAMERA_LEFT) && HAVE_DECL_KEY_CAMERA_LEFT))
+#if defined(KEY_CAMERA_LEFT) || (defined(HAVE_DECL_KEY_CAMERA_LEFT) && HAVE_DECL_KEY_CAMERA_LEFT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CAMERA_LEFT) == (0x219), "KEY_CAMERA_LEFT != 0x219");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CAMERA_LEFT 0x219
 #endif
-#if !(defined(KEY_CAMERA_RIGHT) || (defined(HAVE_DECL_KEY_CAMERA_RIGHT) && HAVE_DECL_KEY_CAMERA_RIGHT))
+#if defined(KEY_CAMERA_RIGHT) || (defined(HAVE_DECL_KEY_CAMERA_RIGHT) && HAVE_DECL_KEY_CAMERA_RIGHT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CAMERA_RIGHT) == (0x21a), "KEY_CAMERA_RIGHT != 0x21a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CAMERA_RIGHT 0x21a
 #endif
-#if !(defined(KEY_ATTENDANT_ON) || (defined(HAVE_DECL_KEY_ATTENDANT_ON) && HAVE_DECL_KEY_ATTENDANT_ON))
+#if defined(KEY_ATTENDANT_ON) || (defined(HAVE_DECL_KEY_ATTENDANT_ON) && HAVE_DECL_KEY_ATTENDANT_ON)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ATTENDANT_ON) == (0x21b), "KEY_ATTENDANT_ON != 0x21b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ATTENDANT_ON 0x21b
 #endif
-#if !(defined(KEY_ATTENDANT_OFF) || (defined(HAVE_DECL_KEY_ATTENDANT_OFF) && HAVE_DECL_KEY_ATTENDANT_OFF))
+#if defined(KEY_ATTENDANT_OFF) || (defined(HAVE_DECL_KEY_ATTENDANT_OFF) && HAVE_DECL_KEY_ATTENDANT_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ATTENDANT_OFF) == (0x21c), "KEY_ATTENDANT_OFF != 0x21c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ATTENDANT_OFF 0x21c
 #endif
-#if !(defined(KEY_ATTENDANT_TOGGLE) || (defined(HAVE_DECL_KEY_ATTENDANT_TOGGLE) && HAVE_DECL_KEY_ATTENDANT_TOGGLE))
+#if defined(KEY_ATTENDANT_TOGGLE) || (defined(HAVE_DECL_KEY_ATTENDANT_TOGGLE) && HAVE_DECL_KEY_ATTENDANT_TOGGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ATTENDANT_TOGGLE) == (0x21d), "KEY_ATTENDANT_TOGGLE != 0x21d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ATTENDANT_TOGGLE 0x21d
 #endif
-#if !(defined(KEY_LIGHTS_TOGGLE) || (defined(HAVE_DECL_KEY_LIGHTS_TOGGLE) && HAVE_DECL_KEY_LIGHTS_TOGGLE))
+#if defined(KEY_LIGHTS_TOGGLE) || (defined(HAVE_DECL_KEY_LIGHTS_TOGGLE) && HAVE_DECL_KEY_LIGHTS_TOGGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LIGHTS_TOGGLE) == (0x21e), "KEY_LIGHTS_TOGGLE != 0x21e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LIGHTS_TOGGLE 0x21e
 #endif
-#if !(defined(BTN_DPAD_UP) || (defined(HAVE_DECL_BTN_DPAD_UP) && HAVE_DECL_BTN_DPAD_UP))
+#if defined(BTN_DPAD_UP) || (defined(HAVE_DECL_BTN_DPAD_UP) && HAVE_DECL_BTN_DPAD_UP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_DPAD_UP) == (0x220), "BTN_DPAD_UP != 0x220");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_DPAD_UP 0x220
 #endif
-#if !(defined(BTN_DPAD_DOWN) || (defined(HAVE_DECL_BTN_DPAD_DOWN) && HAVE_DECL_BTN_DPAD_DOWN))
+#if defined(BTN_DPAD_DOWN) || (defined(HAVE_DECL_BTN_DPAD_DOWN) && HAVE_DECL_BTN_DPAD_DOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_DPAD_DOWN) == (0x221), "BTN_DPAD_DOWN != 0x221");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_DPAD_DOWN 0x221
 #endif
-#if !(defined(BTN_DPAD_LEFT) || (defined(HAVE_DECL_BTN_DPAD_LEFT) && HAVE_DECL_BTN_DPAD_LEFT))
+#if defined(BTN_DPAD_LEFT) || (defined(HAVE_DECL_BTN_DPAD_LEFT) && HAVE_DECL_BTN_DPAD_LEFT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_DPAD_LEFT) == (0x222), "BTN_DPAD_LEFT != 0x222");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_DPAD_LEFT 0x222
 #endif
-#if !(defined(BTN_DPAD_RIGHT) || (defined(HAVE_DECL_BTN_DPAD_RIGHT) && HAVE_DECL_BTN_DPAD_RIGHT))
+#if defined(BTN_DPAD_RIGHT) || (defined(HAVE_DECL_BTN_DPAD_RIGHT) && HAVE_DECL_BTN_DPAD_RIGHT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_DPAD_RIGHT) == (0x223), "BTN_DPAD_RIGHT != 0x223");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_DPAD_RIGHT 0x223
 #endif
-#if !(defined(KEY_ALS_TOGGLE) || (defined(HAVE_DECL_KEY_ALS_TOGGLE) && HAVE_DECL_KEY_ALS_TOGGLE))
+#if defined(KEY_ALS_TOGGLE) || (defined(HAVE_DECL_KEY_ALS_TOGGLE) && HAVE_DECL_KEY_ALS_TOGGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ALS_TOGGLE) == (0x230), "KEY_ALS_TOGGLE != 0x230");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ALS_TOGGLE 0x230
 #endif
-#if !(defined(KEY_ROTATE_LOCK_TOGGLE) || (defined(HAVE_DECL_KEY_ROTATE_LOCK_TOGGLE) && HAVE_DECL_KEY_ROTATE_LOCK_TOGGLE))
+#if defined(KEY_ROTATE_LOCK_TOGGLE) || (defined(HAVE_DECL_KEY_ROTATE_LOCK_TOGGLE) && HAVE_DECL_KEY_ROTATE_LOCK_TOGGLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ROTATE_LOCK_TOGGLE) == (0x231), "KEY_ROTATE_LOCK_TOGGLE != 0x231");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ROTATE_LOCK_TOGGLE 0x231
 #endif
-#if !(defined(KEY_BUTTONCONFIG) || (defined(HAVE_DECL_KEY_BUTTONCONFIG) && HAVE_DECL_KEY_BUTTONCONFIG))
+#if defined(KEY_BUTTONCONFIG) || (defined(HAVE_DECL_KEY_BUTTONCONFIG) && HAVE_DECL_KEY_BUTTONCONFIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BUTTONCONFIG) == (0x240), "KEY_BUTTONCONFIG != 0x240");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BUTTONCONFIG 0x240
 #endif
-#if !(defined(KEY_TASKMANAGER) || (defined(HAVE_DECL_KEY_TASKMANAGER) && HAVE_DECL_KEY_TASKMANAGER))
+#if defined(KEY_TASKMANAGER) || (defined(HAVE_DECL_KEY_TASKMANAGER) && HAVE_DECL_KEY_TASKMANAGER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_TASKMANAGER) == (0x241), "KEY_TASKMANAGER != 0x241");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_TASKMANAGER 0x241
 #endif
-#if !(defined(KEY_JOURNAL) || (defined(HAVE_DECL_KEY_JOURNAL) && HAVE_DECL_KEY_JOURNAL))
+#if defined(KEY_JOURNAL) || (defined(HAVE_DECL_KEY_JOURNAL) && HAVE_DECL_KEY_JOURNAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_JOURNAL) == (0x242), "KEY_JOURNAL != 0x242");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_JOURNAL 0x242
 #endif
-#if !(defined(KEY_CONTROLPANEL) || (defined(HAVE_DECL_KEY_CONTROLPANEL) && HAVE_DECL_KEY_CONTROLPANEL))
+#if defined(KEY_CONTROLPANEL) || (defined(HAVE_DECL_KEY_CONTROLPANEL) && HAVE_DECL_KEY_CONTROLPANEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_CONTROLPANEL) == (0x243), "KEY_CONTROLPANEL != 0x243");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_CONTROLPANEL 0x243
 #endif
-#if !(defined(KEY_APPSELECT) || (defined(HAVE_DECL_KEY_APPSELECT) && HAVE_DECL_KEY_APPSELECT))
+#if defined(KEY_APPSELECT) || (defined(HAVE_DECL_KEY_APPSELECT) && HAVE_DECL_KEY_APPSELECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_APPSELECT) == (0x244), "KEY_APPSELECT != 0x244");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_APPSELECT 0x244
 #endif
-#if !(defined(KEY_SCREENSAVER) || (defined(HAVE_DECL_KEY_SCREENSAVER) && HAVE_DECL_KEY_SCREENSAVER))
+#if defined(KEY_SCREENSAVER) || (defined(HAVE_DECL_KEY_SCREENSAVER) && HAVE_DECL_KEY_SCREENSAVER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SCREENSAVER) == (0x245), "KEY_SCREENSAVER != 0x245");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SCREENSAVER 0x245
 #endif
-#if !(defined(KEY_VOICECOMMAND) || (defined(HAVE_DECL_KEY_VOICECOMMAND) && HAVE_DECL_KEY_VOICECOMMAND))
+#if defined(KEY_VOICECOMMAND) || (defined(HAVE_DECL_KEY_VOICECOMMAND) && HAVE_DECL_KEY_VOICECOMMAND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VOICECOMMAND) == (0x246), "KEY_VOICECOMMAND != 0x246");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VOICECOMMAND 0x246
 #endif
-#if !(defined(KEY_ASSISTANT) || (defined(HAVE_DECL_KEY_ASSISTANT) && HAVE_DECL_KEY_ASSISTANT))
+#if defined(KEY_ASSISTANT) || (defined(HAVE_DECL_KEY_ASSISTANT) && HAVE_DECL_KEY_ASSISTANT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ASSISTANT) == (0x247), "KEY_ASSISTANT != 0x247");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ASSISTANT 0x247
 #endif
-#if !(defined(KEY_BRIGHTNESS_MIN) || (defined(HAVE_DECL_KEY_BRIGHTNESS_MIN) && HAVE_DECL_KEY_BRIGHTNESS_MIN))
+#ifndef STRACE_WORKAROUND_FOR_KEY_BRIGHTNESS_MIN
+# define STRACE_WORKAROUND_FOR_KEY_BRIGHTNESS_MIN
+# undef KEY_BRIGHTNESS_MIN
+#endif
+#if defined(KEY_BRIGHTNESS_MIN) || (defined(HAVE_DECL_KEY_BRIGHTNESS_MIN) && HAVE_DECL_KEY_BRIGHTNESS_MIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRIGHTNESS_MIN) == (0x250), "KEY_BRIGHTNESS_MIN != 0x250");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRIGHTNESS_MIN 0x250
 #endif
-#if !(defined(KEY_BRIGHTNESS_MAX) || (defined(HAVE_DECL_KEY_BRIGHTNESS_MAX) && HAVE_DECL_KEY_BRIGHTNESS_MAX))
+#if defined(KEY_BRIGHTNESS_MAX) || (defined(HAVE_DECL_KEY_BRIGHTNESS_MAX) && HAVE_DECL_KEY_BRIGHTNESS_MAX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_BRIGHTNESS_MAX) == (0x251), "KEY_BRIGHTNESS_MAX != 0x251");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_BRIGHTNESS_MAX 0x251
 #endif
-#if !(defined(KEY_KBDINPUTASSIST_PREV) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_PREV) && HAVE_DECL_KEY_KBDINPUTASSIST_PREV))
+#if defined(KEY_KBDINPUTASSIST_PREV) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_PREV) && HAVE_DECL_KEY_KBDINPUTASSIST_PREV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KBDINPUTASSIST_PREV) == (0x260), "KEY_KBDINPUTASSIST_PREV != 0x260");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KBDINPUTASSIST_PREV 0x260
 #endif
-#if !(defined(KEY_KBDINPUTASSIST_NEXT) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_NEXT) && HAVE_DECL_KEY_KBDINPUTASSIST_NEXT))
+#if defined(KEY_KBDINPUTASSIST_NEXT) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_NEXT) && HAVE_DECL_KEY_KBDINPUTASSIST_NEXT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KBDINPUTASSIST_NEXT) == (0x261), "KEY_KBDINPUTASSIST_NEXT != 0x261");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KBDINPUTASSIST_NEXT 0x261
 #endif
-#if !(defined(KEY_KBDINPUTASSIST_PREVGROUP) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_PREVGROUP) && HAVE_DECL_KEY_KBDINPUTASSIST_PREVGROUP))
+#if defined(KEY_KBDINPUTASSIST_PREVGROUP) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_PREVGROUP) && HAVE_DECL_KEY_KBDINPUTASSIST_PREVGROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KBDINPUTASSIST_PREVGROUP) == (0x262), "KEY_KBDINPUTASSIST_PREVGROUP != 0x262");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KBDINPUTASSIST_PREVGROUP 0x262
 #endif
-#if !(defined(KEY_KBDINPUTASSIST_NEXTGROUP) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_NEXTGROUP) && HAVE_DECL_KEY_KBDINPUTASSIST_NEXTGROUP))
+#if defined(KEY_KBDINPUTASSIST_NEXTGROUP) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_NEXTGROUP) && HAVE_DECL_KEY_KBDINPUTASSIST_NEXTGROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KBDINPUTASSIST_NEXTGROUP) == (0x263), "KEY_KBDINPUTASSIST_NEXTGROUP != 0x263");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KBDINPUTASSIST_NEXTGROUP 0x263
 #endif
-#if !(defined(KEY_KBDINPUTASSIST_ACCEPT) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_ACCEPT) && HAVE_DECL_KEY_KBDINPUTASSIST_ACCEPT))
+#if defined(KEY_KBDINPUTASSIST_ACCEPT) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_ACCEPT) && HAVE_DECL_KEY_KBDINPUTASSIST_ACCEPT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KBDINPUTASSIST_ACCEPT) == (0x264), "KEY_KBDINPUTASSIST_ACCEPT != 0x264");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KBDINPUTASSIST_ACCEPT 0x264
 #endif
-#if !(defined(KEY_KBDINPUTASSIST_CANCEL) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_CANCEL) && HAVE_DECL_KEY_KBDINPUTASSIST_CANCEL))
+#if defined(KEY_KBDINPUTASSIST_CANCEL) || (defined(HAVE_DECL_KEY_KBDINPUTASSIST_CANCEL) && HAVE_DECL_KEY_KBDINPUTASSIST_CANCEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_KBDINPUTASSIST_CANCEL) == (0x265), "KEY_KBDINPUTASSIST_CANCEL != 0x265");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_KBDINPUTASSIST_CANCEL 0x265
 #endif
-#if !(defined(KEY_RIGHT_UP) || (defined(HAVE_DECL_KEY_RIGHT_UP) && HAVE_DECL_KEY_RIGHT_UP))
+#if defined(KEY_RIGHT_UP) || (defined(HAVE_DECL_KEY_RIGHT_UP) && HAVE_DECL_KEY_RIGHT_UP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RIGHT_UP) == (0x266), "KEY_RIGHT_UP != 0x266");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RIGHT_UP 0x266
 #endif
-#if !(defined(KEY_RIGHT_DOWN) || (defined(HAVE_DECL_KEY_RIGHT_DOWN) && HAVE_DECL_KEY_RIGHT_DOWN))
+#if defined(KEY_RIGHT_DOWN) || (defined(HAVE_DECL_KEY_RIGHT_DOWN) && HAVE_DECL_KEY_RIGHT_DOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_RIGHT_DOWN) == (0x267), "KEY_RIGHT_DOWN != 0x267");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_RIGHT_DOWN 0x267
 #endif
-#if !(defined(KEY_LEFT_UP) || (defined(HAVE_DECL_KEY_LEFT_UP) && HAVE_DECL_KEY_LEFT_UP))
+#if defined(KEY_LEFT_UP) || (defined(HAVE_DECL_KEY_LEFT_UP) && HAVE_DECL_KEY_LEFT_UP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LEFT_UP) == (0x268), "KEY_LEFT_UP != 0x268");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LEFT_UP 0x268
 #endif
-#if !(defined(KEY_LEFT_DOWN) || (defined(HAVE_DECL_KEY_LEFT_DOWN) && HAVE_DECL_KEY_LEFT_DOWN))
+#if defined(KEY_LEFT_DOWN) || (defined(HAVE_DECL_KEY_LEFT_DOWN) && HAVE_DECL_KEY_LEFT_DOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_LEFT_DOWN) == (0x269), "KEY_LEFT_DOWN != 0x269");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_LEFT_DOWN 0x269
 #endif
-#if !(defined(KEY_ROOT_MENU) || (defined(HAVE_DECL_KEY_ROOT_MENU) && HAVE_DECL_KEY_ROOT_MENU))
+#if defined(KEY_ROOT_MENU) || (defined(HAVE_DECL_KEY_ROOT_MENU) && HAVE_DECL_KEY_ROOT_MENU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ROOT_MENU) == (0x26a), "KEY_ROOT_MENU != 0x26a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ROOT_MENU 0x26a
 #endif
-#if !(defined(KEY_MEDIA_TOP_MENU) || (defined(HAVE_DECL_KEY_MEDIA_TOP_MENU) && HAVE_DECL_KEY_MEDIA_TOP_MENU))
+#if defined(KEY_MEDIA_TOP_MENU) || (defined(HAVE_DECL_KEY_MEDIA_TOP_MENU) && HAVE_DECL_KEY_MEDIA_TOP_MENU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_MEDIA_TOP_MENU) == (0x26b), "KEY_MEDIA_TOP_MENU != 0x26b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_MEDIA_TOP_MENU 0x26b
 #endif
-#if !(defined(KEY_NUMERIC_11) || (defined(HAVE_DECL_KEY_NUMERIC_11) && HAVE_DECL_KEY_NUMERIC_11))
+#if defined(KEY_NUMERIC_11) || (defined(HAVE_DECL_KEY_NUMERIC_11) && HAVE_DECL_KEY_NUMERIC_11)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_11) == (0x26c), "KEY_NUMERIC_11 != 0x26c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_11 0x26c
 #endif
-#if !(defined(KEY_NUMERIC_12) || (defined(HAVE_DECL_KEY_NUMERIC_12) && HAVE_DECL_KEY_NUMERIC_12))
+#if defined(KEY_NUMERIC_12) || (defined(HAVE_DECL_KEY_NUMERIC_12) && HAVE_DECL_KEY_NUMERIC_12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NUMERIC_12) == (0x26d), "KEY_NUMERIC_12 != 0x26d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NUMERIC_12 0x26d
 #endif
-#if !(defined(KEY_AUDIO_DESC) || (defined(HAVE_DECL_KEY_AUDIO_DESC) && HAVE_DECL_KEY_AUDIO_DESC))
+#if defined(KEY_AUDIO_DESC) || (defined(HAVE_DECL_KEY_AUDIO_DESC) && HAVE_DECL_KEY_AUDIO_DESC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_AUDIO_DESC) == (0x26e), "KEY_AUDIO_DESC != 0x26e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_AUDIO_DESC 0x26e
 #endif
-#if !(defined(KEY_3D_MODE) || (defined(HAVE_DECL_KEY_3D_MODE) && HAVE_DECL_KEY_3D_MODE))
+#if defined(KEY_3D_MODE) || (defined(HAVE_DECL_KEY_3D_MODE) && HAVE_DECL_KEY_3D_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_3D_MODE) == (0x26f), "KEY_3D_MODE != 0x26f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_3D_MODE 0x26f
 #endif
-#if !(defined(KEY_NEXT_FAVORITE) || (defined(HAVE_DECL_KEY_NEXT_FAVORITE) && HAVE_DECL_KEY_NEXT_FAVORITE))
+#if defined(KEY_NEXT_FAVORITE) || (defined(HAVE_DECL_KEY_NEXT_FAVORITE) && HAVE_DECL_KEY_NEXT_FAVORITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_NEXT_FAVORITE) == (0x270), "KEY_NEXT_FAVORITE != 0x270");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_NEXT_FAVORITE 0x270
 #endif
-#if !(defined(KEY_STOP_RECORD) || (defined(HAVE_DECL_KEY_STOP_RECORD) && HAVE_DECL_KEY_STOP_RECORD))
+#if defined(KEY_STOP_RECORD) || (defined(HAVE_DECL_KEY_STOP_RECORD) && HAVE_DECL_KEY_STOP_RECORD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_STOP_RECORD) == (0x271), "KEY_STOP_RECORD != 0x271");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_STOP_RECORD 0x271
 #endif
-#if !(defined(KEY_PAUSE_RECORD) || (defined(HAVE_DECL_KEY_PAUSE_RECORD) && HAVE_DECL_KEY_PAUSE_RECORD))
+#if defined(KEY_PAUSE_RECORD) || (defined(HAVE_DECL_KEY_PAUSE_RECORD) && HAVE_DECL_KEY_PAUSE_RECORD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_PAUSE_RECORD) == (0x272), "KEY_PAUSE_RECORD != 0x272");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_PAUSE_RECORD 0x272
 #endif
-#if !(defined(KEY_VOD) || (defined(HAVE_DECL_KEY_VOD) && HAVE_DECL_KEY_VOD))
+#if defined(KEY_VOD) || (defined(HAVE_DECL_KEY_VOD) && HAVE_DECL_KEY_VOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_VOD) == (0x273), "KEY_VOD != 0x273");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_VOD 0x273
 #endif
-#if !(defined(KEY_UNMUTE) || (defined(HAVE_DECL_KEY_UNMUTE) && HAVE_DECL_KEY_UNMUTE))
+#if defined(KEY_UNMUTE) || (defined(HAVE_DECL_KEY_UNMUTE) && HAVE_DECL_KEY_UNMUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_UNMUTE) == (0x274), "KEY_UNMUTE != 0x274");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_UNMUTE 0x274
 #endif
-#if !(defined(KEY_FASTREVERSE) || (defined(HAVE_DECL_KEY_FASTREVERSE) && HAVE_DECL_KEY_FASTREVERSE))
+#if defined(KEY_FASTREVERSE) || (defined(HAVE_DECL_KEY_FASTREVERSE) && HAVE_DECL_KEY_FASTREVERSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_FASTREVERSE) == (0x275), "KEY_FASTREVERSE != 0x275");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_FASTREVERSE 0x275
 #endif
-#if !(defined(KEY_SLOWREVERSE) || (defined(HAVE_DECL_KEY_SLOWREVERSE) && HAVE_DECL_KEY_SLOWREVERSE))
+#if defined(KEY_SLOWREVERSE) || (defined(HAVE_DECL_KEY_SLOWREVERSE) && HAVE_DECL_KEY_SLOWREVERSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SLOWREVERSE) == (0x276), "KEY_SLOWREVERSE != 0x276");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SLOWREVERSE 0x276
 #endif
-#if !(defined(KEY_DATA) || (defined(HAVE_DECL_KEY_DATA) && HAVE_DECL_KEY_DATA))
+#ifndef STRACE_WORKAROUND_FOR_KEY_DATA
+# define STRACE_WORKAROUND_FOR_KEY_DATA
+# undef KEY_DATA
+#endif
+#if defined(KEY_DATA) || (defined(HAVE_DECL_KEY_DATA) && HAVE_DECL_KEY_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_DATA) == (0x277), "KEY_DATA != 0x277");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_DATA 0x277
 #endif
-#if !(defined(KEY_ONSCREEN_KEYBOARD) || (defined(HAVE_DECL_KEY_ONSCREEN_KEYBOARD) && HAVE_DECL_KEY_ONSCREEN_KEYBOARD))
+#if defined(KEY_ONSCREEN_KEYBOARD) || (defined(HAVE_DECL_KEY_ONSCREEN_KEYBOARD) && HAVE_DECL_KEY_ONSCREEN_KEYBOARD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_ONSCREEN_KEYBOARD) == (0x278), "KEY_ONSCREEN_KEYBOARD != 0x278");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_ONSCREEN_KEYBOARD 0x278
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY) && HAVE_DECL_BTN_TRIGGER_HAPPY))
-# define BTN_TRIGGER_HAPPY 0x2c0
-#endif
-#if !(defined(BTN_TRIGGER_HAPPY1) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY1) && HAVE_DECL_BTN_TRIGGER_HAPPY1))
+#if defined(BTN_TRIGGER_HAPPY1) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY1) && HAVE_DECL_BTN_TRIGGER_HAPPY1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY1) == (0x2c0), "BTN_TRIGGER_HAPPY1 != 0x2c0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY1 0x2c0
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY2) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY2) && HAVE_DECL_BTN_TRIGGER_HAPPY2))
+#if defined(BTN_TRIGGER_HAPPY2) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY2) && HAVE_DECL_BTN_TRIGGER_HAPPY2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY2) == (0x2c1), "BTN_TRIGGER_HAPPY2 != 0x2c1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY2 0x2c1
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY3) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY3) && HAVE_DECL_BTN_TRIGGER_HAPPY3))
+#if defined(BTN_TRIGGER_HAPPY3) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY3) && HAVE_DECL_BTN_TRIGGER_HAPPY3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY3) == (0x2c2), "BTN_TRIGGER_HAPPY3 != 0x2c2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY3 0x2c2
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY4) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY4) && HAVE_DECL_BTN_TRIGGER_HAPPY4))
+#if defined(BTN_TRIGGER_HAPPY4) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY4) && HAVE_DECL_BTN_TRIGGER_HAPPY4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY4) == (0x2c3), "BTN_TRIGGER_HAPPY4 != 0x2c3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY4 0x2c3
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY5) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY5) && HAVE_DECL_BTN_TRIGGER_HAPPY5))
+#if defined(BTN_TRIGGER_HAPPY5) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY5) && HAVE_DECL_BTN_TRIGGER_HAPPY5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY5) == (0x2c4), "BTN_TRIGGER_HAPPY5 != 0x2c4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY5 0x2c4
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY6) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY6) && HAVE_DECL_BTN_TRIGGER_HAPPY6))
+#if defined(BTN_TRIGGER_HAPPY6) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY6) && HAVE_DECL_BTN_TRIGGER_HAPPY6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY6) == (0x2c5), "BTN_TRIGGER_HAPPY6 != 0x2c5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY6 0x2c5
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY7) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY7) && HAVE_DECL_BTN_TRIGGER_HAPPY7))
+#if defined(BTN_TRIGGER_HAPPY7) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY7) && HAVE_DECL_BTN_TRIGGER_HAPPY7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY7) == (0x2c6), "BTN_TRIGGER_HAPPY7 != 0x2c6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY7 0x2c6
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY8) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY8) && HAVE_DECL_BTN_TRIGGER_HAPPY8))
+#if defined(BTN_TRIGGER_HAPPY8) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY8) && HAVE_DECL_BTN_TRIGGER_HAPPY8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY8) == (0x2c7), "BTN_TRIGGER_HAPPY8 != 0x2c7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY8 0x2c7
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY9) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY9) && HAVE_DECL_BTN_TRIGGER_HAPPY9))
+#if defined(BTN_TRIGGER_HAPPY9) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY9) && HAVE_DECL_BTN_TRIGGER_HAPPY9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY9) == (0x2c8), "BTN_TRIGGER_HAPPY9 != 0x2c8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY9 0x2c8
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY10) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY10) && HAVE_DECL_BTN_TRIGGER_HAPPY10))
+#if defined(BTN_TRIGGER_HAPPY10) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY10) && HAVE_DECL_BTN_TRIGGER_HAPPY10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY10) == (0x2c9), "BTN_TRIGGER_HAPPY10 != 0x2c9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY10 0x2c9
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY11) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY11) && HAVE_DECL_BTN_TRIGGER_HAPPY11))
+#if defined(BTN_TRIGGER_HAPPY11) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY11) && HAVE_DECL_BTN_TRIGGER_HAPPY11)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY11) == (0x2ca), "BTN_TRIGGER_HAPPY11 != 0x2ca");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY11 0x2ca
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY12) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY12) && HAVE_DECL_BTN_TRIGGER_HAPPY12))
+#if defined(BTN_TRIGGER_HAPPY12) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY12) && HAVE_DECL_BTN_TRIGGER_HAPPY12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY12) == (0x2cb), "BTN_TRIGGER_HAPPY12 != 0x2cb");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY12 0x2cb
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY13) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY13) && HAVE_DECL_BTN_TRIGGER_HAPPY13))
+#if defined(BTN_TRIGGER_HAPPY13) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY13) && HAVE_DECL_BTN_TRIGGER_HAPPY13)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY13) == (0x2cc), "BTN_TRIGGER_HAPPY13 != 0x2cc");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY13 0x2cc
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY14) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY14) && HAVE_DECL_BTN_TRIGGER_HAPPY14))
+#if defined(BTN_TRIGGER_HAPPY14) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY14) && HAVE_DECL_BTN_TRIGGER_HAPPY14)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY14) == (0x2cd), "BTN_TRIGGER_HAPPY14 != 0x2cd");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY14 0x2cd
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY15) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY15) && HAVE_DECL_BTN_TRIGGER_HAPPY15))
+#if defined(BTN_TRIGGER_HAPPY15) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY15) && HAVE_DECL_BTN_TRIGGER_HAPPY15)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY15) == (0x2ce), "BTN_TRIGGER_HAPPY15 != 0x2ce");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY15 0x2ce
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY16) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY16) && HAVE_DECL_BTN_TRIGGER_HAPPY16))
+#if defined(BTN_TRIGGER_HAPPY16) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY16) && HAVE_DECL_BTN_TRIGGER_HAPPY16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY16) == (0x2cf), "BTN_TRIGGER_HAPPY16 != 0x2cf");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY16 0x2cf
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY17) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY17) && HAVE_DECL_BTN_TRIGGER_HAPPY17))
+#if defined(BTN_TRIGGER_HAPPY17) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY17) && HAVE_DECL_BTN_TRIGGER_HAPPY17)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY17) == (0x2d0), "BTN_TRIGGER_HAPPY17 != 0x2d0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY17 0x2d0
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY18) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY18) && HAVE_DECL_BTN_TRIGGER_HAPPY18))
+#if defined(BTN_TRIGGER_HAPPY18) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY18) && HAVE_DECL_BTN_TRIGGER_HAPPY18)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY18) == (0x2d1), "BTN_TRIGGER_HAPPY18 != 0x2d1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY18 0x2d1
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY19) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY19) && HAVE_DECL_BTN_TRIGGER_HAPPY19))
+#if defined(BTN_TRIGGER_HAPPY19) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY19) && HAVE_DECL_BTN_TRIGGER_HAPPY19)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY19) == (0x2d2), "BTN_TRIGGER_HAPPY19 != 0x2d2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY19 0x2d2
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY20) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY20) && HAVE_DECL_BTN_TRIGGER_HAPPY20))
+#if defined(BTN_TRIGGER_HAPPY20) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY20) && HAVE_DECL_BTN_TRIGGER_HAPPY20)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY20) == (0x2d3), "BTN_TRIGGER_HAPPY20 != 0x2d3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY20 0x2d3
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY21) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY21) && HAVE_DECL_BTN_TRIGGER_HAPPY21))
+#if defined(BTN_TRIGGER_HAPPY21) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY21) && HAVE_DECL_BTN_TRIGGER_HAPPY21)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY21) == (0x2d4), "BTN_TRIGGER_HAPPY21 != 0x2d4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY21 0x2d4
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY22) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY22) && HAVE_DECL_BTN_TRIGGER_HAPPY22))
+#if defined(BTN_TRIGGER_HAPPY22) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY22) && HAVE_DECL_BTN_TRIGGER_HAPPY22)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY22) == (0x2d5), "BTN_TRIGGER_HAPPY22 != 0x2d5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY22 0x2d5
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY23) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY23) && HAVE_DECL_BTN_TRIGGER_HAPPY23))
+#if defined(BTN_TRIGGER_HAPPY23) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY23) && HAVE_DECL_BTN_TRIGGER_HAPPY23)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY23) == (0x2d6), "BTN_TRIGGER_HAPPY23 != 0x2d6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY23 0x2d6
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY24) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY24) && HAVE_DECL_BTN_TRIGGER_HAPPY24))
+#if defined(BTN_TRIGGER_HAPPY24) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY24) && HAVE_DECL_BTN_TRIGGER_HAPPY24)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY24) == (0x2d7), "BTN_TRIGGER_HAPPY24 != 0x2d7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY24 0x2d7
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY25) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY25) && HAVE_DECL_BTN_TRIGGER_HAPPY25))
+#if defined(BTN_TRIGGER_HAPPY25) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY25) && HAVE_DECL_BTN_TRIGGER_HAPPY25)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY25) == (0x2d8), "BTN_TRIGGER_HAPPY25 != 0x2d8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY25 0x2d8
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY26) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY26) && HAVE_DECL_BTN_TRIGGER_HAPPY26))
+#if defined(BTN_TRIGGER_HAPPY26) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY26) && HAVE_DECL_BTN_TRIGGER_HAPPY26)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY26) == (0x2d9), "BTN_TRIGGER_HAPPY26 != 0x2d9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY26 0x2d9
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY27) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY27) && HAVE_DECL_BTN_TRIGGER_HAPPY27))
+#if defined(BTN_TRIGGER_HAPPY27) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY27) && HAVE_DECL_BTN_TRIGGER_HAPPY27)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY27) == (0x2da), "BTN_TRIGGER_HAPPY27 != 0x2da");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY27 0x2da
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY28) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY28) && HAVE_DECL_BTN_TRIGGER_HAPPY28))
+#if defined(BTN_TRIGGER_HAPPY28) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY28) && HAVE_DECL_BTN_TRIGGER_HAPPY28)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY28) == (0x2db), "BTN_TRIGGER_HAPPY28 != 0x2db");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY28 0x2db
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY29) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY29) && HAVE_DECL_BTN_TRIGGER_HAPPY29))
+#if defined(BTN_TRIGGER_HAPPY29) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY29) && HAVE_DECL_BTN_TRIGGER_HAPPY29)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY29) == (0x2dc), "BTN_TRIGGER_HAPPY29 != 0x2dc");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY29 0x2dc
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY30) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY30) && HAVE_DECL_BTN_TRIGGER_HAPPY30))
+#if defined(BTN_TRIGGER_HAPPY30) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY30) && HAVE_DECL_BTN_TRIGGER_HAPPY30)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY30) == (0x2dd), "BTN_TRIGGER_HAPPY30 != 0x2dd");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY30 0x2dd
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY31) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY31) && HAVE_DECL_BTN_TRIGGER_HAPPY31))
+#if defined(BTN_TRIGGER_HAPPY31) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY31) && HAVE_DECL_BTN_TRIGGER_HAPPY31)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY31) == (0x2de), "BTN_TRIGGER_HAPPY31 != 0x2de");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY31 0x2de
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY32) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY32) && HAVE_DECL_BTN_TRIGGER_HAPPY32))
+#if defined(BTN_TRIGGER_HAPPY32) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY32) && HAVE_DECL_BTN_TRIGGER_HAPPY32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY32) == (0x2df), "BTN_TRIGGER_HAPPY32 != 0x2df");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY32 0x2df
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY33) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY33) && HAVE_DECL_BTN_TRIGGER_HAPPY33))
+#if defined(BTN_TRIGGER_HAPPY33) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY33) && HAVE_DECL_BTN_TRIGGER_HAPPY33)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY33) == (0x2e0), "BTN_TRIGGER_HAPPY33 != 0x2e0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY33 0x2e0
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY34) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY34) && HAVE_DECL_BTN_TRIGGER_HAPPY34))
+#if defined(BTN_TRIGGER_HAPPY34) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY34) && HAVE_DECL_BTN_TRIGGER_HAPPY34)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY34) == (0x2e1), "BTN_TRIGGER_HAPPY34 != 0x2e1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY34 0x2e1
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY35) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY35) && HAVE_DECL_BTN_TRIGGER_HAPPY35))
+#if defined(BTN_TRIGGER_HAPPY35) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY35) && HAVE_DECL_BTN_TRIGGER_HAPPY35)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY35) == (0x2e2), "BTN_TRIGGER_HAPPY35 != 0x2e2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY35 0x2e2
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY36) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY36) && HAVE_DECL_BTN_TRIGGER_HAPPY36))
+#if defined(BTN_TRIGGER_HAPPY36) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY36) && HAVE_DECL_BTN_TRIGGER_HAPPY36)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY36) == (0x2e3), "BTN_TRIGGER_HAPPY36 != 0x2e3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY36 0x2e3
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY37) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY37) && HAVE_DECL_BTN_TRIGGER_HAPPY37))
+#if defined(BTN_TRIGGER_HAPPY37) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY37) && HAVE_DECL_BTN_TRIGGER_HAPPY37)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY37) == (0x2e4), "BTN_TRIGGER_HAPPY37 != 0x2e4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY37 0x2e4
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY38) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY38) && HAVE_DECL_BTN_TRIGGER_HAPPY38))
+#if defined(BTN_TRIGGER_HAPPY38) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY38) && HAVE_DECL_BTN_TRIGGER_HAPPY38)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY38) == (0x2e5), "BTN_TRIGGER_HAPPY38 != 0x2e5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY38 0x2e5
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY39) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY39) && HAVE_DECL_BTN_TRIGGER_HAPPY39))
+#if defined(BTN_TRIGGER_HAPPY39) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY39) && HAVE_DECL_BTN_TRIGGER_HAPPY39)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY39) == (0x2e6), "BTN_TRIGGER_HAPPY39 != 0x2e6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY39 0x2e6
 #endif
-#if !(defined(BTN_TRIGGER_HAPPY40) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY40) && HAVE_DECL_BTN_TRIGGER_HAPPY40))
+#if defined(BTN_TRIGGER_HAPPY40) || (defined(HAVE_DECL_BTN_TRIGGER_HAPPY40) && HAVE_DECL_BTN_TRIGGER_HAPPY40)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BTN_TRIGGER_HAPPY40) == (0x2e7), "BTN_TRIGGER_HAPPY40 != 0x2e7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BTN_TRIGGER_HAPPY40 0x2e7
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat evdev_keycode in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat evdev_keycode in mpers mode
+
+# else
 
 static
 const struct xlat evdev_keycode[] = {
 
- XLAT(KEY_RESERVED),
- XLAT(KEY_ESC),
- XLAT(KEY_1),
- XLAT(KEY_2),
- XLAT(KEY_3),
- XLAT(KEY_4),
- XLAT(KEY_5),
- XLAT(KEY_6),
- XLAT(KEY_7),
- XLAT(KEY_8),
- XLAT(KEY_9),
- XLAT(KEY_0),
- XLAT(KEY_MINUS),
- XLAT(KEY_EQUAL),
- XLAT(KEY_BACKSPACE),
- XLAT(KEY_TAB),
- XLAT(KEY_Q),
- XLAT(KEY_W),
- XLAT(KEY_E),
- XLAT(KEY_R),
- XLAT(KEY_T),
- XLAT(KEY_Y),
- XLAT(KEY_U),
- XLAT(KEY_I),
- XLAT(KEY_O),
- XLAT(KEY_P),
- XLAT(KEY_LEFTBRACE),
- XLAT(KEY_RIGHTBRACE),
- XLAT(KEY_ENTER),
- XLAT(KEY_LEFTCTRL),
- XLAT(KEY_A),
- XLAT(KEY_S),
- XLAT(KEY_D),
- XLAT(KEY_F),
- XLAT(KEY_G),
- XLAT(KEY_H),
- XLAT(KEY_J),
- XLAT(KEY_K),
- XLAT(KEY_L),
- XLAT(KEY_SEMICOLON),
- XLAT(KEY_APOSTROPHE),
- XLAT(KEY_GRAVE),
- XLAT(KEY_LEFTSHIFT),
- XLAT(KEY_BACKSLASH),
- XLAT(KEY_Z),
- XLAT(KEY_X),
- XLAT(KEY_C),
- XLAT(KEY_V),
- XLAT(KEY_B),
- XLAT(KEY_N),
- XLAT(KEY_M),
- XLAT(KEY_COMMA),
- XLAT(KEY_DOT),
- XLAT(KEY_SLASH),
- XLAT(KEY_RIGHTSHIFT),
- XLAT(KEY_KPASTERISK),
- XLAT(KEY_LEFTALT),
- XLAT(KEY_SPACE),
- XLAT(KEY_CAPSLOCK),
- XLAT(KEY_F1),
- XLAT(KEY_F2),
- XLAT(KEY_F3),
- XLAT(KEY_F4),
- XLAT(KEY_F5),
- XLAT(KEY_F6),
- XLAT(KEY_F7),
- XLAT(KEY_F8),
- XLAT(KEY_F9),
- XLAT(KEY_F10),
- XLAT(KEY_NUMLOCK),
- XLAT(KEY_SCROLLLOCK),
- XLAT(KEY_KP7),
- XLAT(KEY_KP8),
- XLAT(KEY_KP9),
- XLAT(KEY_KPMINUS),
- XLAT(KEY_KP4),
- XLAT(KEY_KP5),
- XLAT(KEY_KP6),
- XLAT(KEY_KPPLUS),
- XLAT(KEY_KP1),
- XLAT(KEY_KP2),
- XLAT(KEY_KP3),
- XLAT(KEY_KP0),
- XLAT(KEY_KPDOT),
+ [KEY_RESERVED] = XLAT(KEY_RESERVED),
+ [KEY_ESC] = XLAT(KEY_ESC),
+ [KEY_1] = XLAT(KEY_1),
+ [KEY_2] = XLAT(KEY_2),
+ [KEY_3] = XLAT(KEY_3),
+ [KEY_4] = XLAT(KEY_4),
+ [KEY_5] = XLAT(KEY_5),
+ [KEY_6] = XLAT(KEY_6),
+ [KEY_7] = XLAT(KEY_7),
+ [KEY_8] = XLAT(KEY_8),
+ [KEY_9] = XLAT(KEY_9),
+ [KEY_0] = XLAT(KEY_0),
+ [KEY_MINUS] = XLAT(KEY_MINUS),
+ [KEY_EQUAL] = XLAT(KEY_EQUAL),
+ [KEY_BACKSPACE] = XLAT(KEY_BACKSPACE),
+ [KEY_TAB] = XLAT(KEY_TAB),
+ [KEY_Q] = XLAT(KEY_Q),
+ [KEY_W] = XLAT(KEY_W),
+ [KEY_E] = XLAT(KEY_E),
+ [KEY_R] = XLAT(KEY_R),
+ [KEY_T] = XLAT(KEY_T),
+ [KEY_Y] = XLAT(KEY_Y),
+ [KEY_U] = XLAT(KEY_U),
+ [KEY_I] = XLAT(KEY_I),
+ [KEY_O] = XLAT(KEY_O),
+ [KEY_P] = XLAT(KEY_P),
+ [KEY_LEFTBRACE] = XLAT(KEY_LEFTBRACE),
+ [KEY_RIGHTBRACE] = XLAT(KEY_RIGHTBRACE),
+ [KEY_ENTER] = XLAT(KEY_ENTER),
+ [KEY_LEFTCTRL] = XLAT(KEY_LEFTCTRL),
+ [KEY_A] = XLAT(KEY_A),
+ [KEY_S] = XLAT(KEY_S),
+ [KEY_D] = XLAT(KEY_D),
+ [KEY_F] = XLAT(KEY_F),
+ [KEY_G] = XLAT(KEY_G),
+ [KEY_H] = XLAT(KEY_H),
+ [KEY_J] = XLAT(KEY_J),
+ [KEY_K] = XLAT(KEY_K),
+ [KEY_L] = XLAT(KEY_L),
+ [KEY_SEMICOLON] = XLAT(KEY_SEMICOLON),
+ [KEY_APOSTROPHE] = XLAT(KEY_APOSTROPHE),
+ [KEY_GRAVE] = XLAT(KEY_GRAVE),
+ [KEY_LEFTSHIFT] = XLAT(KEY_LEFTSHIFT),
+ [KEY_BACKSLASH] = XLAT(KEY_BACKSLASH),
+ [KEY_Z] = XLAT(KEY_Z),
+ [KEY_X] = XLAT(KEY_X),
+ [KEY_C] = XLAT(KEY_C),
+ [KEY_V] = XLAT(KEY_V),
+ [KEY_B] = XLAT(KEY_B),
+ [KEY_N] = XLAT(KEY_N),
+ [KEY_M] = XLAT(KEY_M),
+ [KEY_COMMA] = XLAT(KEY_COMMA),
+ [KEY_DOT] = XLAT(KEY_DOT),
+ [KEY_SLASH] = XLAT(KEY_SLASH),
+ [KEY_RIGHTSHIFT] = XLAT(KEY_RIGHTSHIFT),
+ [KEY_KPASTERISK] = XLAT(KEY_KPASTERISK),
+ [KEY_LEFTALT] = XLAT(KEY_LEFTALT),
+ [KEY_SPACE] = XLAT(KEY_SPACE),
+ [KEY_CAPSLOCK] = XLAT(KEY_CAPSLOCK),
+ [KEY_F1] = XLAT(KEY_F1),
+ [KEY_F2] = XLAT(KEY_F2),
+ [KEY_F3] = XLAT(KEY_F3),
+ [KEY_F4] = XLAT(KEY_F4),
+ [KEY_F5] = XLAT(KEY_F5),
+ [KEY_F6] = XLAT(KEY_F6),
+ [KEY_F7] = XLAT(KEY_F7),
+ [KEY_F8] = XLAT(KEY_F8),
+ [KEY_F9] = XLAT(KEY_F9),
+ [KEY_F10] = XLAT(KEY_F10),
+ [KEY_NUMLOCK] = XLAT(KEY_NUMLOCK),
+ [KEY_SCROLLLOCK] = XLAT(KEY_SCROLLLOCK),
+ [KEY_KP7] = XLAT(KEY_KP7),
+ [KEY_KP8] = XLAT(KEY_KP8),
+ [KEY_KP9] = XLAT(KEY_KP9),
+ [KEY_KPMINUS] = XLAT(KEY_KPMINUS),
+ [KEY_KP4] = XLAT(KEY_KP4),
+ [KEY_KP5] = XLAT(KEY_KP5),
+ [KEY_KP6] = XLAT(KEY_KP6),
+ [KEY_KPPLUS] = XLAT(KEY_KPPLUS),
+ [KEY_KP1] = XLAT(KEY_KP1),
+ [KEY_KP2] = XLAT(KEY_KP2),
+ [KEY_KP3] = XLAT(KEY_KP3),
+ [KEY_KP0] = XLAT(KEY_KP0),
+ [KEY_KPDOT] = XLAT(KEY_KPDOT),
 
- XLAT(KEY_ZENKAKUHANKAKU),
- XLAT(KEY_102ND),
- XLAT(KEY_F11),
- XLAT(KEY_F12),
- XLAT(KEY_RO),
- XLAT(KEY_KATAKANA),
- XLAT(KEY_HIRAGANA),
- XLAT(KEY_HENKAN),
- XLAT(KEY_KATAKANAHIRAGANA),
- XLAT(KEY_MUHENKAN),
- XLAT(KEY_KPJPCOMMA),
- XLAT(KEY_KPENTER),
- XLAT(KEY_RIGHTCTRL),
- XLAT(KEY_KPSLASH),
- XLAT(KEY_SYSRQ),
- XLAT(KEY_RIGHTALT),
- XLAT(KEY_LINEFEED),
- XLAT(KEY_HOME),
- XLAT(KEY_UP),
- XLAT(KEY_PAGEUP),
- XLAT(KEY_LEFT),
- XLAT(KEY_RIGHT),
- XLAT(KEY_END),
- XLAT(KEY_DOWN),
- XLAT(KEY_PAGEDOWN),
- XLAT(KEY_INSERT),
- XLAT(KEY_DELETE),
- XLAT(KEY_MACRO),
- XLAT(KEY_MUTE),
- XLAT(KEY_VOLUMEDOWN),
- XLAT(KEY_VOLUMEUP),
- XLAT(KEY_POWER),
- XLAT(KEY_KPEQUAL),
- XLAT(KEY_KPPLUSMINUS),
- XLAT(KEY_PAUSE),
- XLAT(KEY_SCALE),
+ [KEY_ZENKAKUHANKAKU] = XLAT(KEY_ZENKAKUHANKAKU),
+ [KEY_102ND] = XLAT(KEY_102ND),
+ [KEY_F11] = XLAT(KEY_F11),
+ [KEY_F12] = XLAT(KEY_F12),
+ [KEY_RO] = XLAT(KEY_RO),
+ [KEY_KATAKANA] = XLAT(KEY_KATAKANA),
+ [KEY_HIRAGANA] = XLAT(KEY_HIRAGANA),
+ [KEY_HENKAN] = XLAT(KEY_HENKAN),
+ [KEY_KATAKANAHIRAGANA] = XLAT(KEY_KATAKANAHIRAGANA),
+ [KEY_MUHENKAN] = XLAT(KEY_MUHENKAN),
+ [KEY_KPJPCOMMA] = XLAT(KEY_KPJPCOMMA),
+ [KEY_KPENTER] = XLAT(KEY_KPENTER),
+ [KEY_RIGHTCTRL] = XLAT(KEY_RIGHTCTRL),
+ [KEY_KPSLASH] = XLAT(KEY_KPSLASH),
+ [KEY_SYSRQ] = XLAT(KEY_SYSRQ),
+ [KEY_RIGHTALT] = XLAT(KEY_RIGHTALT),
+ [KEY_LINEFEED] = XLAT(KEY_LINEFEED),
+ [KEY_HOME] = XLAT(KEY_HOME),
+ [KEY_UP] = XLAT(KEY_UP),
+ [KEY_PAGEUP] = XLAT(KEY_PAGEUP),
+ [KEY_LEFT] = XLAT(KEY_LEFT),
+ [KEY_RIGHT] = XLAT(KEY_RIGHT),
+ [KEY_END] = XLAT(KEY_END),
+ [KEY_DOWN] = XLAT(KEY_DOWN),
+ [KEY_PAGEDOWN] = XLAT(KEY_PAGEDOWN),
+ [KEY_INSERT] = XLAT(KEY_INSERT),
+ [KEY_DELETE] = XLAT(KEY_DELETE),
+ [KEY_MACRO] = XLAT(KEY_MACRO),
+ [KEY_MUTE] = XLAT(KEY_MUTE),
+ [KEY_VOLUMEDOWN] = XLAT(KEY_VOLUMEDOWN),
+ [KEY_VOLUMEUP] = XLAT(KEY_VOLUMEUP),
+ [KEY_POWER] = XLAT(KEY_POWER),
+ [KEY_KPEQUAL] = XLAT(KEY_KPEQUAL),
+ [KEY_KPPLUSMINUS] = XLAT(KEY_KPPLUSMINUS),
+ [KEY_PAUSE] = XLAT(KEY_PAUSE),
+ [KEY_SCALE] = XLAT(KEY_SCALE),
 
- XLAT(KEY_KPCOMMA),
- XLAT(KEY_HANGEUL),
- XLAT(KEY_HANJA),
- XLAT(KEY_YEN),
- XLAT(KEY_LEFTMETA),
- XLAT(KEY_RIGHTMETA),
- XLAT(KEY_COMPOSE),
+ [KEY_KPCOMMA] = XLAT(KEY_KPCOMMA),
+ [KEY_HANGEUL] = XLAT(KEY_HANGEUL),
+ [KEY_HANJA] = XLAT(KEY_HANJA),
+ [KEY_YEN] = XLAT(KEY_YEN),
+ [KEY_LEFTMETA] = XLAT(KEY_LEFTMETA),
+ [KEY_RIGHTMETA] = XLAT(KEY_RIGHTMETA),
+ [KEY_COMPOSE] = XLAT(KEY_COMPOSE),
 
- XLAT(KEY_STOP),
- XLAT(KEY_AGAIN),
- XLAT(KEY_PROPS),
- XLAT(KEY_UNDO),
- XLAT(KEY_FRONT),
- XLAT(KEY_COPY),
- XLAT(KEY_OPEN),
- XLAT(KEY_PASTE),
- XLAT(KEY_FIND),
- XLAT(KEY_CUT),
- XLAT(KEY_HELP),
- XLAT(KEY_MENU),
- XLAT(KEY_CALC),
- XLAT(KEY_SETUP),
- XLAT(KEY_SLEEP),
- XLAT(KEY_WAKEUP),
- XLAT(KEY_FILE),
- XLAT(KEY_SENDFILE),
- XLAT(KEY_DELETEFILE),
- XLAT(KEY_XFER),
- XLAT(KEY_PROG1),
- XLAT(KEY_PROG2),
- XLAT(KEY_WWW),
- XLAT(KEY_MSDOS),
- XLAT(KEY_COFFEE),
- XLAT(KEY_ROTATE_DISPLAY),
- XLAT(KEY_CYCLEWINDOWS),
- XLAT(KEY_MAIL),
- XLAT(KEY_BOOKMARKS),
- XLAT(KEY_COMPUTER),
- XLAT(KEY_BACK),
- XLAT(KEY_FORWARD),
- XLAT(KEY_CLOSECD),
- XLAT(KEY_EJECTCD),
- XLAT(KEY_EJECTCLOSECD),
- XLAT(KEY_NEXTSONG),
- XLAT(KEY_PLAYPAUSE),
- XLAT(KEY_PREVIOUSSONG),
- XLAT(KEY_STOPCD),
- XLAT(KEY_RECORD),
- XLAT(KEY_REWIND),
- XLAT(KEY_PHONE),
- XLAT(KEY_ISO),
- XLAT(KEY_CONFIG),
- XLAT(KEY_HOMEPAGE),
- XLAT(KEY_REFRESH),
- XLAT(KEY_EXIT),
- XLAT(KEY_MOVE),
- XLAT(KEY_EDIT),
- XLAT(KEY_SCROLLUP),
- XLAT(KEY_SCROLLDOWN),
- XLAT(KEY_KPLEFTPAREN),
- XLAT(KEY_KPRIGHTPAREN),
- XLAT(KEY_NEW),
- XLAT(KEY_REDO),
+ [KEY_STOP] = XLAT(KEY_STOP),
+ [KEY_AGAIN] = XLAT(KEY_AGAIN),
+ [KEY_PROPS] = XLAT(KEY_PROPS),
+ [KEY_UNDO] = XLAT(KEY_UNDO),
+ [KEY_FRONT] = XLAT(KEY_FRONT),
+ [KEY_COPY] = XLAT(KEY_COPY),
+ [KEY_OPEN] = XLAT(KEY_OPEN),
+ [KEY_PASTE] = XLAT(KEY_PASTE),
+ [KEY_FIND] = XLAT(KEY_FIND),
+ [KEY_CUT] = XLAT(KEY_CUT),
+ [KEY_HELP] = XLAT(KEY_HELP),
+ [KEY_MENU] = XLAT(KEY_MENU),
+ [KEY_CALC] = XLAT(KEY_CALC),
+ [KEY_SETUP] = XLAT(KEY_SETUP),
+ [KEY_SLEEP] = XLAT(KEY_SLEEP),
+ [KEY_WAKEUP] = XLAT(KEY_WAKEUP),
+ [KEY_FILE] = XLAT(KEY_FILE),
+ [KEY_SENDFILE] = XLAT(KEY_SENDFILE),
+ [KEY_DELETEFILE] = XLAT(KEY_DELETEFILE),
+ [KEY_XFER] = XLAT(KEY_XFER),
+ [KEY_PROG1] = XLAT(KEY_PROG1),
+ [KEY_PROG2] = XLAT(KEY_PROG2),
+ [KEY_WWW] = XLAT(KEY_WWW),
+ [KEY_MSDOS] = XLAT(KEY_MSDOS),
+ [KEY_COFFEE] = XLAT(KEY_COFFEE),
+ [KEY_ROTATE_DISPLAY] = XLAT(KEY_ROTATE_DISPLAY),
+ [KEY_CYCLEWINDOWS] = XLAT(KEY_CYCLEWINDOWS),
+ [KEY_MAIL] = XLAT(KEY_MAIL),
+ [KEY_BOOKMARKS] = XLAT(KEY_BOOKMARKS),
+ [KEY_COMPUTER] = XLAT(KEY_COMPUTER),
+ [KEY_BACK] = XLAT(KEY_BACK),
+ [KEY_FORWARD] = XLAT(KEY_FORWARD),
+ [KEY_CLOSECD] = XLAT(KEY_CLOSECD),
+ [KEY_EJECTCD] = XLAT(KEY_EJECTCD),
+ [KEY_EJECTCLOSECD] = XLAT(KEY_EJECTCLOSECD),
+ [KEY_NEXTSONG] = XLAT(KEY_NEXTSONG),
+ [KEY_PLAYPAUSE] = XLAT(KEY_PLAYPAUSE),
+ [KEY_PREVIOUSSONG] = XLAT(KEY_PREVIOUSSONG),
+ [KEY_STOPCD] = XLAT(KEY_STOPCD),
+ [KEY_RECORD] = XLAT(KEY_RECORD),
+ [KEY_REWIND] = XLAT(KEY_REWIND),
+ [KEY_PHONE] = XLAT(KEY_PHONE),
+ [KEY_ISO] = XLAT(KEY_ISO),
+ [KEY_CONFIG] = XLAT(KEY_CONFIG),
+ [KEY_HOMEPAGE] = XLAT(KEY_HOMEPAGE),
+ [KEY_REFRESH] = XLAT(KEY_REFRESH),
+ [KEY_EXIT] = XLAT(KEY_EXIT),
+ [KEY_MOVE] = XLAT(KEY_MOVE),
+ [KEY_EDIT] = XLAT(KEY_EDIT),
+ [KEY_SCROLLUP] = XLAT(KEY_SCROLLUP),
+ [KEY_SCROLLDOWN] = XLAT(KEY_SCROLLDOWN),
+ [KEY_KPLEFTPAREN] = XLAT(KEY_KPLEFTPAREN),
+ [KEY_KPRIGHTPAREN] = XLAT(KEY_KPRIGHTPAREN),
+ [KEY_NEW] = XLAT(KEY_NEW),
+ [KEY_REDO] = XLAT(KEY_REDO),
 
- XLAT(KEY_F13),
- XLAT(KEY_F14),
- XLAT(KEY_F15),
- XLAT(KEY_F16),
- XLAT(KEY_F17),
- XLAT(KEY_F18),
- XLAT(KEY_F19),
- XLAT(KEY_F20),
- XLAT(KEY_F21),
- XLAT(KEY_F22),
- XLAT(KEY_F23),
- XLAT(KEY_F24),
+ [KEY_F13] = XLAT(KEY_F13),
+ [KEY_F14] = XLAT(KEY_F14),
+ [KEY_F15] = XLAT(KEY_F15),
+ [KEY_F16] = XLAT(KEY_F16),
+ [KEY_F17] = XLAT(KEY_F17),
+ [KEY_F18] = XLAT(KEY_F18),
+ [KEY_F19] = XLAT(KEY_F19),
+ [KEY_F20] = XLAT(KEY_F20),
+ [KEY_F21] = XLAT(KEY_F21),
+ [KEY_F22] = XLAT(KEY_F22),
+ [KEY_F23] = XLAT(KEY_F23),
+ [KEY_F24] = XLAT(KEY_F24),
 
- XLAT(KEY_PLAYCD),
- XLAT(KEY_PAUSECD),
- XLAT(KEY_PROG3),
- XLAT(KEY_PROG4),
- XLAT(KEY_DASHBOARD),
- XLAT(KEY_SUSPEND),
- XLAT(KEY_CLOSE),
- XLAT(KEY_PLAY),
- XLAT(KEY_FASTFORWARD),
- XLAT(KEY_BASSBOOST),
- XLAT(KEY_PRINT),
- XLAT(KEY_HP),
- XLAT(KEY_CAMERA),
- XLAT(KEY_SOUND),
- XLAT(KEY_QUESTION),
- XLAT(KEY_EMAIL),
- XLAT(KEY_CHAT),
- XLAT(KEY_SEARCH),
- XLAT(KEY_CONNECT),
- XLAT(KEY_FINANCE),
- XLAT(KEY_SPORT),
- XLAT(KEY_SHOP),
- XLAT(KEY_ALTERASE),
- XLAT(KEY_CANCEL),
- XLAT(KEY_BRIGHTNESSDOWN),
- XLAT(KEY_BRIGHTNESSUP),
- XLAT(KEY_MEDIA),
+ [KEY_PLAYCD] = XLAT(KEY_PLAYCD),
+ [KEY_PAUSECD] = XLAT(KEY_PAUSECD),
+ [KEY_PROG3] = XLAT(KEY_PROG3),
+ [KEY_PROG4] = XLAT(KEY_PROG4),
+ [KEY_DASHBOARD] = XLAT(KEY_DASHBOARD),
+ [KEY_SUSPEND] = XLAT(KEY_SUSPEND),
+ [KEY_CLOSE] = XLAT(KEY_CLOSE),
+ [KEY_PLAY] = XLAT(KEY_PLAY),
+ [KEY_FASTFORWARD] = XLAT(KEY_FASTFORWARD),
+ [KEY_BASSBOOST] = XLAT(KEY_BASSBOOST),
+ [KEY_PRINT] = XLAT(KEY_PRINT),
+ [KEY_HP] = XLAT(KEY_HP),
+ [KEY_CAMERA] = XLAT(KEY_CAMERA),
+ [KEY_SOUND] = XLAT(KEY_SOUND),
+ [KEY_QUESTION] = XLAT(KEY_QUESTION),
+ [KEY_EMAIL] = XLAT(KEY_EMAIL),
+ [KEY_CHAT] = XLAT(KEY_CHAT),
+ [KEY_SEARCH] = XLAT(KEY_SEARCH),
+ [KEY_CONNECT] = XLAT(KEY_CONNECT),
+ [KEY_FINANCE] = XLAT(KEY_FINANCE),
+ [KEY_SPORT] = XLAT(KEY_SPORT),
+ [KEY_SHOP] = XLAT(KEY_SHOP),
+ [KEY_ALTERASE] = XLAT(KEY_ALTERASE),
+ [KEY_CANCEL] = XLAT(KEY_CANCEL),
+ [KEY_BRIGHTNESSDOWN] = XLAT(KEY_BRIGHTNESSDOWN),
+ [KEY_BRIGHTNESSUP] = XLAT(KEY_BRIGHTNESSUP),
+ [KEY_MEDIA] = XLAT(KEY_MEDIA),
 
- XLAT(KEY_SWITCHVIDEOMODE),
+ [KEY_SWITCHVIDEOMODE] = XLAT(KEY_SWITCHVIDEOMODE),
 
- XLAT(KEY_KBDILLUMTOGGLE),
- XLAT(KEY_KBDILLUMDOWN),
- XLAT(KEY_KBDILLUMUP),
+ [KEY_KBDILLUMTOGGLE] = XLAT(KEY_KBDILLUMTOGGLE),
+ [KEY_KBDILLUMDOWN] = XLAT(KEY_KBDILLUMDOWN),
+ [KEY_KBDILLUMUP] = XLAT(KEY_KBDILLUMUP),
 
- XLAT(KEY_SEND),
- XLAT(KEY_REPLY),
- XLAT(KEY_FORWARDMAIL),
- XLAT(KEY_SAVE),
- XLAT(KEY_DOCUMENTS),
+ [KEY_SEND] = XLAT(KEY_SEND),
+ [KEY_REPLY] = XLAT(KEY_REPLY),
+ [KEY_FORWARDMAIL] = XLAT(KEY_FORWARDMAIL),
+ [KEY_SAVE] = XLAT(KEY_SAVE),
+ [KEY_DOCUMENTS] = XLAT(KEY_DOCUMENTS),
 
- XLAT(KEY_BATTERY),
+ [KEY_BATTERY] = XLAT(KEY_BATTERY),
 
- XLAT(KEY_BLUETOOTH),
- XLAT(KEY_WLAN),
- XLAT(KEY_UWB),
+ [KEY_BLUETOOTH] = XLAT(KEY_BLUETOOTH),
+ [KEY_WLAN] = XLAT(KEY_WLAN),
+ [KEY_UWB] = XLAT(KEY_UWB),
 
- XLAT(KEY_UNKNOWN),
+ [KEY_UNKNOWN] = XLAT(KEY_UNKNOWN),
 
- XLAT(KEY_VIDEO_NEXT),
- XLAT(KEY_VIDEO_PREV),
- XLAT(KEY_BRIGHTNESS_CYCLE),
- XLAT(KEY_BRIGHTNESS_AUTO),
- XLAT(KEY_DISPLAY_OFF),
+ [KEY_VIDEO_NEXT] = XLAT(KEY_VIDEO_NEXT),
+ [KEY_VIDEO_PREV] = XLAT(KEY_VIDEO_PREV),
+ [KEY_BRIGHTNESS_CYCLE] = XLAT(KEY_BRIGHTNESS_CYCLE),
+ [KEY_BRIGHTNESS_AUTO] = XLAT(KEY_BRIGHTNESS_AUTO),
+ [KEY_DISPLAY_OFF] = XLAT(KEY_DISPLAY_OFF),
 
- XLAT(KEY_WWAN),
- XLAT(KEY_RFKILL),
+ [KEY_WWAN] = XLAT(KEY_WWAN),
 
- XLAT(KEY_MICMUTE),
+#ifndef STRACE_WORKAROUND_FOR_KEY_RFKILL
+# define STRACE_WORKAROUND_FOR_KEY_RFKILL
+/*
+* KEY_RFKILL and KEY_NUMERIC_A constants were introduced by Linux kernel
+* commits v2.6.33~17^2~2 and v4.1-rc1~150^2~1^10~6, respectively.
+* Apparently, RHEL6 introduced an alternative KEY_RFKILL constant
+* with the same value as upstream KEY_NUMERIC_A.
+* Downstream vendors are *not* allowed to do this.
+* Ignore the system value of KEY_RFKILL.
+*/
+# undef KEY_RFKILL
+#endif
+ [KEY_RFKILL] = XLAT(KEY_RFKILL),
 
- XLAT(BTN_0),
- XLAT(BTN_1),
- XLAT(BTN_2),
- XLAT(BTN_3),
- XLAT(BTN_4),
- XLAT(BTN_5),
- XLAT(BTN_6),
- XLAT(BTN_7),
- XLAT(BTN_8),
- XLAT(BTN_9),
+ [KEY_MICMUTE] = XLAT(KEY_MICMUTE),
 
- XLAT(BTN_MOUSE),
- XLAT(BTN_LEFT),
- XLAT(BTN_RIGHT),
- XLAT(BTN_MIDDLE),
- XLAT(BTN_SIDE),
- XLAT(BTN_EXTRA),
- XLAT(BTN_FORWARD),
- XLAT(BTN_BACK),
- XLAT(BTN_TASK),
+ [BTN_0] = XLAT(BTN_0),
+ [BTN_1] = XLAT(BTN_1),
+ [BTN_2] = XLAT(BTN_2),
+ [BTN_3] = XLAT(BTN_3),
+ [BTN_4] = XLAT(BTN_4),
+ [BTN_5] = XLAT(BTN_5),
+ [BTN_6] = XLAT(BTN_6),
+ [BTN_7] = XLAT(BTN_7),
+ [BTN_8] = XLAT(BTN_8),
+ [BTN_9] = XLAT(BTN_9),
 
- XLAT(BTN_JOYSTICK),
- XLAT(BTN_TRIGGER),
- XLAT(BTN_THUMB),
- XLAT(BTN_THUMB2),
- XLAT(BTN_TOP),
- XLAT(BTN_TOP2),
- XLAT(BTN_PINKIE),
- XLAT(BTN_BASE),
- XLAT(BTN_BASE2),
- XLAT(BTN_BASE3),
- XLAT(BTN_BASE4),
- XLAT(BTN_BASE5),
- XLAT(BTN_BASE6),
- XLAT(BTN_DEAD),
+ [BTN_LEFT] = XLAT(BTN_LEFT),
+ [BTN_RIGHT] = XLAT(BTN_RIGHT),
+ [BTN_MIDDLE] = XLAT(BTN_MIDDLE),
+ [BTN_SIDE] = XLAT(BTN_SIDE),
+ [BTN_EXTRA] = XLAT(BTN_EXTRA),
+ [BTN_FORWARD] = XLAT(BTN_FORWARD),
+ [BTN_BACK] = XLAT(BTN_BACK),
+ [BTN_TASK] = XLAT(BTN_TASK),
 
- XLAT(BTN_GAMEPAD),
- XLAT(BTN_SOUTH),
- XLAT(BTN_EAST),
- XLAT(BTN_C),
- XLAT(BTN_NORTH),
- XLAT(BTN_WEST),
- XLAT(BTN_Z),
- XLAT(BTN_TL),
- XLAT(BTN_TR),
- XLAT(BTN_TL2),
- XLAT(BTN_TR2),
- XLAT(BTN_SELECT),
- XLAT(BTN_START),
- XLAT(BTN_MODE),
- XLAT(BTN_THUMBL),
- XLAT(BTN_THUMBR),
+ [BTN_TRIGGER] = XLAT(BTN_TRIGGER),
+ [BTN_THUMB] = XLAT(BTN_THUMB),
+ [BTN_THUMB2] = XLAT(BTN_THUMB2),
+ [BTN_TOP] = XLAT(BTN_TOP),
+ [BTN_TOP2] = XLAT(BTN_TOP2),
+ [BTN_PINKIE] = XLAT(BTN_PINKIE),
+ [BTN_BASE] = XLAT(BTN_BASE),
+ [BTN_BASE2] = XLAT(BTN_BASE2),
+ [BTN_BASE3] = XLAT(BTN_BASE3),
+ [BTN_BASE4] = XLAT(BTN_BASE4),
+ [BTN_BASE5] = XLAT(BTN_BASE5),
+ [BTN_BASE6] = XLAT(BTN_BASE6),
+ [BTN_DEAD] = XLAT(BTN_DEAD),
 
- XLAT(BTN_DIGI),
- XLAT(BTN_TOOL_PEN),
- XLAT(BTN_TOOL_RUBBER),
- XLAT(BTN_TOOL_BRUSH),
- XLAT(BTN_TOOL_PENCIL),
- XLAT(BTN_TOOL_AIRBRUSH),
- XLAT(BTN_TOOL_FINGER),
- XLAT(BTN_TOOL_MOUSE),
- XLAT(BTN_TOOL_LENS),
- XLAT(BTN_TOOL_QUINTTAP),
- XLAT(BTN_STYLUS3),
- XLAT(BTN_TOUCH),
- XLAT(BTN_STYLUS),
- XLAT(BTN_STYLUS2),
- XLAT(BTN_TOOL_DOUBLETAP),
- XLAT(BTN_TOOL_TRIPLETAP),
- XLAT(BTN_TOOL_QUADTAP),
+ [BTN_SOUTH] = XLAT(BTN_SOUTH),
+ [BTN_EAST] = XLAT(BTN_EAST),
+ [BTN_C] = XLAT(BTN_C),
+ [BTN_NORTH] = XLAT(BTN_NORTH),
+ [BTN_WEST] = XLAT(BTN_WEST),
+ [BTN_Z] = XLAT(BTN_Z),
+ [BTN_TL] = XLAT(BTN_TL),
+ [BTN_TR] = XLAT(BTN_TR),
+ [BTN_TL2] = XLAT(BTN_TL2),
+ [BTN_TR2] = XLAT(BTN_TR2),
+ [BTN_SELECT] = XLAT(BTN_SELECT),
+ [BTN_START] = XLAT(BTN_START),
+ [BTN_MODE] = XLAT(BTN_MODE),
+ [BTN_THUMBL] = XLAT(BTN_THUMBL),
+ [BTN_THUMBR] = XLAT(BTN_THUMBR),
 
- XLAT(BTN_WHEEL),
- XLAT(BTN_GEAR_DOWN),
- XLAT(BTN_GEAR_UP),
+ [BTN_TOOL_PEN] = XLAT(BTN_TOOL_PEN),
+ [BTN_TOOL_RUBBER] = XLAT(BTN_TOOL_RUBBER),
+ [BTN_TOOL_BRUSH] = XLAT(BTN_TOOL_BRUSH),
+ [BTN_TOOL_PENCIL] = XLAT(BTN_TOOL_PENCIL),
+ [BTN_TOOL_AIRBRUSH] = XLAT(BTN_TOOL_AIRBRUSH),
+ [BTN_TOOL_FINGER] = XLAT(BTN_TOOL_FINGER),
+ [BTN_TOOL_MOUSE] = XLAT(BTN_TOOL_MOUSE),
+ [BTN_TOOL_LENS] = XLAT(BTN_TOOL_LENS),
+ [BTN_TOOL_QUINTTAP] = XLAT(BTN_TOOL_QUINTTAP),
+ [BTN_STYLUS3] = XLAT(BTN_STYLUS3),
+ [BTN_TOUCH] = XLAT(BTN_TOUCH),
+ [BTN_STYLUS] = XLAT(BTN_STYLUS),
+ [BTN_STYLUS2] = XLAT(BTN_STYLUS2),
+ [BTN_TOOL_DOUBLETAP] = XLAT(BTN_TOOL_DOUBLETAP),
+ [BTN_TOOL_TRIPLETAP] = XLAT(BTN_TOOL_TRIPLETAP),
+ [BTN_TOOL_QUADTAP] = XLAT(BTN_TOOL_QUADTAP),
 
- XLAT(KEY_OK),
- XLAT(KEY_SELECT),
- XLAT(KEY_GOTO),
- XLAT(KEY_CLEAR),
- XLAT(KEY_POWER2),
- XLAT(KEY_OPTION),
- XLAT(KEY_INFO),
- XLAT(KEY_TIME),
- XLAT(KEY_VENDOR),
- XLAT(KEY_ARCHIVE),
- XLAT(KEY_PROGRAM),
- XLAT(KEY_CHANNEL),
- XLAT(KEY_FAVORITES),
- XLAT(KEY_EPG),
- XLAT(KEY_PVR),
- XLAT(KEY_MHP),
- XLAT(KEY_LANGUAGE),
- XLAT(KEY_TITLE),
- XLAT(KEY_SUBTITLE),
- XLAT(KEY_ANGLE),
- XLAT(KEY_ZOOM),
- XLAT(KEY_MODE),
- XLAT(KEY_KEYBOARD),
- XLAT(KEY_SCREEN),
- XLAT(KEY_PC),
- XLAT(KEY_TV),
- XLAT(KEY_TV2),
- XLAT(KEY_VCR),
- XLAT(KEY_VCR2),
- XLAT(KEY_SAT),
- XLAT(KEY_SAT2),
- XLAT(KEY_CD),
- XLAT(KEY_TAPE),
- XLAT(KEY_RADIO),
- XLAT(KEY_TUNER),
- XLAT(KEY_PLAYER),
- XLAT(KEY_TEXT),
- XLAT(KEY_DVD),
- XLAT(KEY_AUX),
- XLAT(KEY_MP3),
- XLAT(KEY_AUDIO),
- XLAT(KEY_VIDEO),
- XLAT(KEY_DIRECTORY),
- XLAT(KEY_LIST),
- XLAT(KEY_MEMO),
- XLAT(KEY_CALENDAR),
- XLAT(KEY_RED),
- XLAT(KEY_GREEN),
- XLAT(KEY_YELLOW),
- XLAT(KEY_BLUE),
- XLAT(KEY_CHANNELUP),
- XLAT(KEY_CHANNELDOWN),
- XLAT(KEY_FIRST),
- XLAT(KEY_LAST),
- XLAT(KEY_AB),
- XLAT(KEY_NEXT),
- XLAT(KEY_RESTART),
- XLAT(KEY_SLOW),
- XLAT(KEY_SHUFFLE),
- XLAT(KEY_BREAK),
- XLAT(KEY_PREVIOUS),
- XLAT(KEY_DIGITS),
- XLAT(KEY_TEEN),
- XLAT(KEY_TWEN),
- XLAT(KEY_VIDEOPHONE),
- XLAT(KEY_GAMES),
- XLAT(KEY_ZOOMIN),
- XLAT(KEY_ZOOMOUT),
- XLAT(KEY_ZOOMRESET),
- XLAT(KEY_WORDPROCESSOR),
- XLAT(KEY_EDITOR),
- XLAT(KEY_SPREADSHEET),
- XLAT(KEY_GRAPHICSEDITOR),
- XLAT(KEY_PRESENTATION),
- XLAT(KEY_DATABASE),
- XLAT(KEY_NEWS),
- XLAT(KEY_VOICEMAIL),
- XLAT(KEY_ADDRESSBOOK),
- XLAT(KEY_MESSENGER),
- XLAT(KEY_DISPLAYTOGGLE),
- XLAT(KEY_SPELLCHECK),
- XLAT(KEY_LOGOFF),
+ [BTN_GEAR_DOWN] = XLAT(BTN_GEAR_DOWN),
+ [BTN_GEAR_UP] = XLAT(BTN_GEAR_UP),
 
- XLAT(KEY_DOLLAR),
- XLAT(KEY_EURO),
+ [KEY_OK] = XLAT(KEY_OK),
+ [KEY_SELECT] = XLAT(KEY_SELECT),
+ [KEY_GOTO] = XLAT(KEY_GOTO),
+ [KEY_CLEAR] = XLAT(KEY_CLEAR),
+ [KEY_POWER2] = XLAT(KEY_POWER2),
+ [KEY_OPTION] = XLAT(KEY_OPTION),
+ [KEY_INFO] = XLAT(KEY_INFO),
+ [KEY_TIME] = XLAT(KEY_TIME),
+ [KEY_VENDOR] = XLAT(KEY_VENDOR),
+ [KEY_ARCHIVE] = XLAT(KEY_ARCHIVE),
+ [KEY_PROGRAM] = XLAT(KEY_PROGRAM),
+ [KEY_CHANNEL] = XLAT(KEY_CHANNEL),
+ [KEY_FAVORITES] = XLAT(KEY_FAVORITES),
+ [KEY_EPG] = XLAT(KEY_EPG),
+ [KEY_PVR] = XLAT(KEY_PVR),
+ [KEY_MHP] = XLAT(KEY_MHP),
+ [KEY_LANGUAGE] = XLAT(KEY_LANGUAGE),
+ [KEY_TITLE] = XLAT(KEY_TITLE),
+ [KEY_SUBTITLE] = XLAT(KEY_SUBTITLE),
+ [KEY_ANGLE] = XLAT(KEY_ANGLE),
+ [KEY_ZOOM] = XLAT(KEY_ZOOM),
+ [KEY_MODE] = XLAT(KEY_MODE),
+ [KEY_KEYBOARD] = XLAT(KEY_KEYBOARD),
+ [KEY_SCREEN] = XLAT(KEY_SCREEN),
+ [KEY_PC] = XLAT(KEY_PC),
+ [KEY_TV] = XLAT(KEY_TV),
+ [KEY_TV2] = XLAT(KEY_TV2),
+ [KEY_VCR] = XLAT(KEY_VCR),
+ [KEY_VCR2] = XLAT(KEY_VCR2),
+ [KEY_SAT] = XLAT(KEY_SAT),
+ [KEY_SAT2] = XLAT(KEY_SAT2),
+ [KEY_CD] = XLAT(KEY_CD),
+ [KEY_TAPE] = XLAT(KEY_TAPE),
+ [KEY_RADIO] = XLAT(KEY_RADIO),
+ [KEY_TUNER] = XLAT(KEY_TUNER),
+ [KEY_PLAYER] = XLAT(KEY_PLAYER),
+ [KEY_TEXT] = XLAT(KEY_TEXT),
+ [KEY_DVD] = XLAT(KEY_DVD),
+ [KEY_AUX] = XLAT(KEY_AUX),
+ [KEY_MP3] = XLAT(KEY_MP3),
+ [KEY_AUDIO] = XLAT(KEY_AUDIO),
+ [KEY_VIDEO] = XLAT(KEY_VIDEO),
+ [KEY_DIRECTORY] = XLAT(KEY_DIRECTORY),
+ [KEY_LIST] = XLAT(KEY_LIST),
+ [KEY_MEMO] = XLAT(KEY_MEMO),
+ [KEY_CALENDAR] = XLAT(KEY_CALENDAR),
+ [KEY_RED] = XLAT(KEY_RED),
+ [KEY_GREEN] = XLAT(KEY_GREEN),
+ [KEY_YELLOW] = XLAT(KEY_YELLOW),
+ [KEY_BLUE] = XLAT(KEY_BLUE),
+ [KEY_CHANNELUP] = XLAT(KEY_CHANNELUP),
+ [KEY_CHANNELDOWN] = XLAT(KEY_CHANNELDOWN),
+ [KEY_FIRST] = XLAT(KEY_FIRST),
+ [KEY_LAST] = XLAT(KEY_LAST),
+ [KEY_AB] = XLAT(KEY_AB),
+ [KEY_NEXT] = XLAT(KEY_NEXT),
+ [KEY_RESTART] = XLAT(KEY_RESTART),
+ [KEY_SLOW] = XLAT(KEY_SLOW),
+ [KEY_SHUFFLE] = XLAT(KEY_SHUFFLE),
+ [KEY_BREAK] = XLAT(KEY_BREAK),
+ [KEY_PREVIOUS] = XLAT(KEY_PREVIOUS),
+ [KEY_DIGITS] = XLAT(KEY_DIGITS),
+ [KEY_TEEN] = XLAT(KEY_TEEN),
+ [KEY_TWEN] = XLAT(KEY_TWEN),
+ [KEY_VIDEOPHONE] = XLAT(KEY_VIDEOPHONE),
+ [KEY_GAMES] = XLAT(KEY_GAMES),
+ [KEY_ZOOMIN] = XLAT(KEY_ZOOMIN),
+ [KEY_ZOOMOUT] = XLAT(KEY_ZOOMOUT),
+ [KEY_ZOOMRESET] = XLAT(KEY_ZOOMRESET),
+ [KEY_WORDPROCESSOR] = XLAT(KEY_WORDPROCESSOR),
+ [KEY_EDITOR] = XLAT(KEY_EDITOR),
+ [KEY_SPREADSHEET] = XLAT(KEY_SPREADSHEET),
+ [KEY_GRAPHICSEDITOR] = XLAT(KEY_GRAPHICSEDITOR),
+ [KEY_PRESENTATION] = XLAT(KEY_PRESENTATION),
+ [KEY_DATABASE] = XLAT(KEY_DATABASE),
+ [KEY_NEWS] = XLAT(KEY_NEWS),
+ [KEY_VOICEMAIL] = XLAT(KEY_VOICEMAIL),
+ [KEY_ADDRESSBOOK] = XLAT(KEY_ADDRESSBOOK),
+ [KEY_MESSENGER] = XLAT(KEY_MESSENGER),
+ [KEY_DISPLAYTOGGLE] = XLAT(KEY_DISPLAYTOGGLE),
+ [KEY_SPELLCHECK] = XLAT(KEY_SPELLCHECK),
+ [KEY_LOGOFF] = XLAT(KEY_LOGOFF),
 
- XLAT(KEY_FRAMEBACK),
- XLAT(KEY_FRAMEFORWARD),
- XLAT(KEY_CONTEXT_MENU),
- XLAT(KEY_MEDIA_REPEAT),
- XLAT(KEY_10CHANNELSUP),
- XLAT(KEY_10CHANNELSDOWN),
- XLAT(KEY_IMAGES),
+ [KEY_DOLLAR] = XLAT(KEY_DOLLAR),
+ [KEY_EURO] = XLAT(KEY_EURO),
 
- XLAT(KEY_DEL_EOL),
- XLAT(KEY_DEL_EOS),
- XLAT(KEY_INS_LINE),
- XLAT(KEY_DEL_LINE),
+ [KEY_FRAMEBACK] = XLAT(KEY_FRAMEBACK),
+ [KEY_FRAMEFORWARD] = XLAT(KEY_FRAMEFORWARD),
+ [KEY_CONTEXT_MENU] = XLAT(KEY_CONTEXT_MENU),
+ [KEY_MEDIA_REPEAT] = XLAT(KEY_MEDIA_REPEAT),
+ [KEY_10CHANNELSUP] = XLAT(KEY_10CHANNELSUP),
+ [KEY_10CHANNELSDOWN] = XLAT(KEY_10CHANNELSDOWN),
+ [KEY_IMAGES] = XLAT(KEY_IMAGES),
 
- XLAT(KEY_FN),
- XLAT(KEY_FN_ESC),
- XLAT(KEY_FN_F1),
- XLAT(KEY_FN_F2),
- XLAT(KEY_FN_F3),
- XLAT(KEY_FN_F4),
- XLAT(KEY_FN_F5),
- XLAT(KEY_FN_F6),
- XLAT(KEY_FN_F7),
- XLAT(KEY_FN_F8),
- XLAT(KEY_FN_F9),
- XLAT(KEY_FN_F10),
- XLAT(KEY_FN_F11),
- XLAT(KEY_FN_F12),
- XLAT(KEY_FN_1),
- XLAT(KEY_FN_2),
- XLAT(KEY_FN_D),
- XLAT(KEY_FN_E),
- XLAT(KEY_FN_F),
- XLAT(KEY_FN_S),
- XLAT(KEY_FN_B),
+ [KEY_DEL_EOL] = XLAT(KEY_DEL_EOL),
+ [KEY_DEL_EOS] = XLAT(KEY_DEL_EOS),
+ [KEY_INS_LINE] = XLAT(KEY_INS_LINE),
+ [KEY_DEL_LINE] = XLAT(KEY_DEL_LINE),
 
- XLAT(KEY_BRL_DOT1),
- XLAT(KEY_BRL_DOT2),
- XLAT(KEY_BRL_DOT3),
- XLAT(KEY_BRL_DOT4),
- XLAT(KEY_BRL_DOT5),
- XLAT(KEY_BRL_DOT6),
- XLAT(KEY_BRL_DOT7),
- XLAT(KEY_BRL_DOT8),
- XLAT(KEY_BRL_DOT9),
- XLAT(KEY_BRL_DOT10),
+ [KEY_FN] = XLAT(KEY_FN),
+ [KEY_FN_ESC] = XLAT(KEY_FN_ESC),
+ [KEY_FN_F1] = XLAT(KEY_FN_F1),
+ [KEY_FN_F2] = XLAT(KEY_FN_F2),
+ [KEY_FN_F3] = XLAT(KEY_FN_F3),
+ [KEY_FN_F4] = XLAT(KEY_FN_F4),
+ [KEY_FN_F5] = XLAT(KEY_FN_F5),
+ [KEY_FN_F6] = XLAT(KEY_FN_F6),
+ [KEY_FN_F7] = XLAT(KEY_FN_F7),
+ [KEY_FN_F8] = XLAT(KEY_FN_F8),
+ [KEY_FN_F9] = XLAT(KEY_FN_F9),
+ [KEY_FN_F10] = XLAT(KEY_FN_F10),
+ [KEY_FN_F11] = XLAT(KEY_FN_F11),
+ [KEY_FN_F12] = XLAT(KEY_FN_F12),
+ [KEY_FN_1] = XLAT(KEY_FN_1),
+ [KEY_FN_2] = XLAT(KEY_FN_2),
+ [KEY_FN_D] = XLAT(KEY_FN_D),
+ [KEY_FN_E] = XLAT(KEY_FN_E),
+ [KEY_FN_F] = XLAT(KEY_FN_F),
+ [KEY_FN_S] = XLAT(KEY_FN_S),
+ [KEY_FN_B] = XLAT(KEY_FN_B),
 
- XLAT(KEY_NUMERIC_0),
- XLAT(KEY_NUMERIC_1),
- XLAT(KEY_NUMERIC_2),
- XLAT(KEY_NUMERIC_3),
- XLAT(KEY_NUMERIC_4),
- XLAT(KEY_NUMERIC_5),
- XLAT(KEY_NUMERIC_6),
- XLAT(KEY_NUMERIC_7),
- XLAT(KEY_NUMERIC_8),
- XLAT(KEY_NUMERIC_9),
- XLAT(KEY_NUMERIC_STAR),
- XLAT(KEY_NUMERIC_POUND),
- XLAT(KEY_NUMERIC_A),
- XLAT(KEY_NUMERIC_B),
- XLAT(KEY_NUMERIC_C),
- XLAT(KEY_NUMERIC_D),
+ [KEY_BRL_DOT1] = XLAT(KEY_BRL_DOT1),
+ [KEY_BRL_DOT2] = XLAT(KEY_BRL_DOT2),
+ [KEY_BRL_DOT3] = XLAT(KEY_BRL_DOT3),
+ [KEY_BRL_DOT4] = XLAT(KEY_BRL_DOT4),
+ [KEY_BRL_DOT5] = XLAT(KEY_BRL_DOT5),
+ [KEY_BRL_DOT6] = XLAT(KEY_BRL_DOT6),
+ [KEY_BRL_DOT7] = XLAT(KEY_BRL_DOT7),
+ [KEY_BRL_DOT8] = XLAT(KEY_BRL_DOT8),
+ [KEY_BRL_DOT9] = XLAT(KEY_BRL_DOT9),
+ [KEY_BRL_DOT10] = XLAT(KEY_BRL_DOT10),
 
- XLAT(KEY_CAMERA_FOCUS),
- XLAT(KEY_WPS_BUTTON),
+ [KEY_NUMERIC_0] = XLAT(KEY_NUMERIC_0),
+ [KEY_NUMERIC_1] = XLAT(KEY_NUMERIC_1),
+ [KEY_NUMERIC_2] = XLAT(KEY_NUMERIC_2),
+ [KEY_NUMERIC_3] = XLAT(KEY_NUMERIC_3),
+ [KEY_NUMERIC_4] = XLAT(KEY_NUMERIC_4),
+ [KEY_NUMERIC_5] = XLAT(KEY_NUMERIC_5),
+ [KEY_NUMERIC_6] = XLAT(KEY_NUMERIC_6),
+ [KEY_NUMERIC_7] = XLAT(KEY_NUMERIC_7),
+ [KEY_NUMERIC_8] = XLAT(KEY_NUMERIC_8),
+ [KEY_NUMERIC_9] = XLAT(KEY_NUMERIC_9),
+ [KEY_NUMERIC_STAR] = XLAT(KEY_NUMERIC_STAR),
+ [KEY_NUMERIC_POUND] = XLAT(KEY_NUMERIC_POUND),
+ [KEY_NUMERIC_A] = XLAT(KEY_NUMERIC_A),
+ [KEY_NUMERIC_B] = XLAT(KEY_NUMERIC_B),
+ [KEY_NUMERIC_C] = XLAT(KEY_NUMERIC_C),
+ [KEY_NUMERIC_D] = XLAT(KEY_NUMERIC_D),
 
- XLAT(KEY_TOUCHPAD_TOGGLE),
- XLAT(KEY_TOUCHPAD_ON),
- XLAT(KEY_TOUCHPAD_OFF),
+ [KEY_CAMERA_FOCUS] = XLAT(KEY_CAMERA_FOCUS),
+ [KEY_WPS_BUTTON] = XLAT(KEY_WPS_BUTTON),
 
- XLAT(KEY_CAMERA_ZOOMIN),
- XLAT(KEY_CAMERA_ZOOMOUT),
- XLAT(KEY_CAMERA_UP),
- XLAT(KEY_CAMERA_DOWN),
- XLAT(KEY_CAMERA_LEFT),
- XLAT(KEY_CAMERA_RIGHT),
+ [KEY_TOUCHPAD_TOGGLE] = XLAT(KEY_TOUCHPAD_TOGGLE),
+ [KEY_TOUCHPAD_ON] = XLAT(KEY_TOUCHPAD_ON),
+ [KEY_TOUCHPAD_OFF] = XLAT(KEY_TOUCHPAD_OFF),
 
- XLAT(KEY_ATTENDANT_ON),
- XLAT(KEY_ATTENDANT_OFF),
- XLAT(KEY_ATTENDANT_TOGGLE),
- XLAT(KEY_LIGHTS_TOGGLE),
+ [KEY_CAMERA_ZOOMIN] = XLAT(KEY_CAMERA_ZOOMIN),
+ [KEY_CAMERA_ZOOMOUT] = XLAT(KEY_CAMERA_ZOOMOUT),
+ [KEY_CAMERA_UP] = XLAT(KEY_CAMERA_UP),
+ [KEY_CAMERA_DOWN] = XLAT(KEY_CAMERA_DOWN),
+ [KEY_CAMERA_LEFT] = XLAT(KEY_CAMERA_LEFT),
+ [KEY_CAMERA_RIGHT] = XLAT(KEY_CAMERA_RIGHT),
 
- XLAT(BTN_DPAD_UP),
- XLAT(BTN_DPAD_DOWN),
- XLAT(BTN_DPAD_LEFT),
- XLAT(BTN_DPAD_RIGHT),
+ [KEY_ATTENDANT_ON] = XLAT(KEY_ATTENDANT_ON),
+ [KEY_ATTENDANT_OFF] = XLAT(KEY_ATTENDANT_OFF),
+ [KEY_ATTENDANT_TOGGLE] = XLAT(KEY_ATTENDANT_TOGGLE),
+ [KEY_LIGHTS_TOGGLE] = XLAT(KEY_LIGHTS_TOGGLE),
 
- XLAT(KEY_ALS_TOGGLE),
- XLAT(KEY_ROTATE_LOCK_TOGGLE),
+ [BTN_DPAD_UP] = XLAT(BTN_DPAD_UP),
+ [BTN_DPAD_DOWN] = XLAT(BTN_DPAD_DOWN),
+ [BTN_DPAD_LEFT] = XLAT(BTN_DPAD_LEFT),
+ [BTN_DPAD_RIGHT] = XLAT(BTN_DPAD_RIGHT),
 
- XLAT(KEY_BUTTONCONFIG),
- XLAT(KEY_TASKMANAGER),
- XLAT(KEY_JOURNAL),
- XLAT(KEY_CONTROLPANEL),
- XLAT(KEY_APPSELECT),
- XLAT(KEY_SCREENSAVER),
- XLAT(KEY_VOICECOMMAND),
- XLAT(KEY_ASSISTANT),
+ [KEY_ALS_TOGGLE] = XLAT(KEY_ALS_TOGGLE),
+ [KEY_ROTATE_LOCK_TOGGLE] = XLAT(KEY_ROTATE_LOCK_TOGGLE),
 
- XLAT(KEY_BRIGHTNESS_MIN),
- XLAT(KEY_BRIGHTNESS_MAX),
+ [KEY_BUTTONCONFIG] = XLAT(KEY_BUTTONCONFIG),
+ [KEY_TASKMANAGER] = XLAT(KEY_TASKMANAGER),
+ [KEY_JOURNAL] = XLAT(KEY_JOURNAL),
+ [KEY_CONTROLPANEL] = XLAT(KEY_CONTROLPANEL),
+ [KEY_APPSELECT] = XLAT(KEY_APPSELECT),
+ [KEY_SCREENSAVER] = XLAT(KEY_SCREENSAVER),
+ [KEY_VOICECOMMAND] = XLAT(KEY_VOICECOMMAND),
+ [KEY_ASSISTANT] = XLAT(KEY_ASSISTANT),
 
- XLAT(KEY_KBDINPUTASSIST_PREV),
- XLAT(KEY_KBDINPUTASSIST_NEXT),
- XLAT(KEY_KBDINPUTASSIST_PREVGROUP),
- XLAT(KEY_KBDINPUTASSIST_NEXTGROUP),
- XLAT(KEY_KBDINPUTASSIST_ACCEPT),
- XLAT(KEY_KBDINPUTASSIST_CANCEL),
+#ifndef STRACE_WORKAROUND_FOR_KEY_BRIGHTNESS_MIN
+# define STRACE_WORKAROUND_FOR_KEY_BRIGHTNESS_MIN
+/*
+* KEY_BRIGHTNESS_MIN and KEY_BRIGHTNESS_MAX constants were introduced
+* by Linux kernel commit v3.16-rc1~30^2~6^2~1^2~7.
+* Apparently, RHEL7 introduced an alternative KEY_BRIGHTNESS_MIN constant
+* with the same value as upstream KEY_BRIGHTNESS_MAX.
+* Downstream vendors are *not* allowed to do this.
+* Ignore the system value of KEY_BRIGHTNESS_MIN.
+*/
+# undef KEY_BRIGHTNESS_MIN
+#endif
+ [KEY_BRIGHTNESS_MIN] = XLAT(KEY_BRIGHTNESS_MIN),
 
- XLAT(KEY_RIGHT_UP),
- XLAT(KEY_RIGHT_DOWN),
- XLAT(KEY_LEFT_UP),
- XLAT(KEY_LEFT_DOWN),
+ [KEY_BRIGHTNESS_MAX] = XLAT(KEY_BRIGHTNESS_MAX),
 
- XLAT(KEY_ROOT_MENU),
- XLAT(KEY_MEDIA_TOP_MENU),
- XLAT(KEY_NUMERIC_11),
- XLAT(KEY_NUMERIC_12),
+ [KEY_KBDINPUTASSIST_PREV] = XLAT(KEY_KBDINPUTASSIST_PREV),
+ [KEY_KBDINPUTASSIST_NEXT] = XLAT(KEY_KBDINPUTASSIST_NEXT),
+ [KEY_KBDINPUTASSIST_PREVGROUP] = XLAT(KEY_KBDINPUTASSIST_PREVGROUP),
+ [KEY_KBDINPUTASSIST_NEXTGROUP] = XLAT(KEY_KBDINPUTASSIST_NEXTGROUP),
+ [KEY_KBDINPUTASSIST_ACCEPT] = XLAT(KEY_KBDINPUTASSIST_ACCEPT),
+ [KEY_KBDINPUTASSIST_CANCEL] = XLAT(KEY_KBDINPUTASSIST_CANCEL),
 
- XLAT(KEY_AUDIO_DESC),
- XLAT(KEY_3D_MODE),
- XLAT(KEY_NEXT_FAVORITE),
- XLAT(KEY_STOP_RECORD),
- XLAT(KEY_PAUSE_RECORD),
- XLAT(KEY_VOD),
- XLAT(KEY_UNMUTE),
- XLAT(KEY_FASTREVERSE),
- XLAT(KEY_SLOWREVERSE),
- XLAT(KEY_DATA),
- XLAT(KEY_ONSCREEN_KEYBOARD),
+ [KEY_RIGHT_UP] = XLAT(KEY_RIGHT_UP),
+ [KEY_RIGHT_DOWN] = XLAT(KEY_RIGHT_DOWN),
+ [KEY_LEFT_UP] = XLAT(KEY_LEFT_UP),
+ [KEY_LEFT_DOWN] = XLAT(KEY_LEFT_DOWN),
 
- XLAT(BTN_TRIGGER_HAPPY),
- XLAT(BTN_TRIGGER_HAPPY1),
- XLAT(BTN_TRIGGER_HAPPY2),
- XLAT(BTN_TRIGGER_HAPPY3),
- XLAT(BTN_TRIGGER_HAPPY4),
- XLAT(BTN_TRIGGER_HAPPY5),
- XLAT(BTN_TRIGGER_HAPPY6),
- XLAT(BTN_TRIGGER_HAPPY7),
- XLAT(BTN_TRIGGER_HAPPY8),
- XLAT(BTN_TRIGGER_HAPPY9),
- XLAT(BTN_TRIGGER_HAPPY10),
- XLAT(BTN_TRIGGER_HAPPY11),
- XLAT(BTN_TRIGGER_HAPPY12),
- XLAT(BTN_TRIGGER_HAPPY13),
- XLAT(BTN_TRIGGER_HAPPY14),
- XLAT(BTN_TRIGGER_HAPPY15),
- XLAT(BTN_TRIGGER_HAPPY16),
- XLAT(BTN_TRIGGER_HAPPY17),
- XLAT(BTN_TRIGGER_HAPPY18),
- XLAT(BTN_TRIGGER_HAPPY19),
- XLAT(BTN_TRIGGER_HAPPY20),
- XLAT(BTN_TRIGGER_HAPPY21),
- XLAT(BTN_TRIGGER_HAPPY22),
- XLAT(BTN_TRIGGER_HAPPY23),
- XLAT(BTN_TRIGGER_HAPPY24),
- XLAT(BTN_TRIGGER_HAPPY25),
- XLAT(BTN_TRIGGER_HAPPY26),
- XLAT(BTN_TRIGGER_HAPPY27),
- XLAT(BTN_TRIGGER_HAPPY28),
- XLAT(BTN_TRIGGER_HAPPY29),
- XLAT(BTN_TRIGGER_HAPPY30),
- XLAT(BTN_TRIGGER_HAPPY31),
- XLAT(BTN_TRIGGER_HAPPY32),
- XLAT(BTN_TRIGGER_HAPPY33),
- XLAT(BTN_TRIGGER_HAPPY34),
- XLAT(BTN_TRIGGER_HAPPY35),
- XLAT(BTN_TRIGGER_HAPPY36),
- XLAT(BTN_TRIGGER_HAPPY37),
- XLAT(BTN_TRIGGER_HAPPY38),
- XLAT(BTN_TRIGGER_HAPPY39),
- XLAT(BTN_TRIGGER_HAPPY40),
+ [KEY_ROOT_MENU] = XLAT(KEY_ROOT_MENU),
+ [KEY_MEDIA_TOP_MENU] = XLAT(KEY_MEDIA_TOP_MENU),
+ [KEY_NUMERIC_11] = XLAT(KEY_NUMERIC_11),
+ [KEY_NUMERIC_12] = XLAT(KEY_NUMERIC_12),
+
+ [KEY_AUDIO_DESC] = XLAT(KEY_AUDIO_DESC),
+ [KEY_3D_MODE] = XLAT(KEY_3D_MODE),
+ [KEY_NEXT_FAVORITE] = XLAT(KEY_NEXT_FAVORITE),
+ [KEY_STOP_RECORD] = XLAT(KEY_STOP_RECORD),
+ [KEY_PAUSE_RECORD] = XLAT(KEY_PAUSE_RECORD),
+ [KEY_VOD] = XLAT(KEY_VOD),
+ [KEY_UNMUTE] = XLAT(KEY_UNMUTE),
+ [KEY_FASTREVERSE] = XLAT(KEY_FASTREVERSE),
+ [KEY_SLOWREVERSE] = XLAT(KEY_SLOWREVERSE),
+
+#ifndef STRACE_WORKAROUND_FOR_KEY_DATA
+# define STRACE_WORKAROUND_FOR_KEY_DATA
+/*
+* Linux kernel commit v4.9-rc8~12^2 has changed the value of KEY_DATA
+* constant introduced by commit v4.7-rc6~32^2~6^2 because the old value
+* was already used by KEY_FASTREVERSE.
+* Looks like the best way to handle this situation is to pretend that
+* the old value of KEY_DATA didn't exist.
+*/
+# undef KEY_DATA
+#endif
+ [KEY_DATA] = XLAT(KEY_DATA),
+
+ [KEY_ONSCREEN_KEYBOARD] = XLAT(KEY_ONSCREEN_KEYBOARD),
+
+ [BTN_TRIGGER_HAPPY1] = XLAT(BTN_TRIGGER_HAPPY1),
+ [BTN_TRIGGER_HAPPY2] = XLAT(BTN_TRIGGER_HAPPY2),
+ [BTN_TRIGGER_HAPPY3] = XLAT(BTN_TRIGGER_HAPPY3),
+ [BTN_TRIGGER_HAPPY4] = XLAT(BTN_TRIGGER_HAPPY4),
+ [BTN_TRIGGER_HAPPY5] = XLAT(BTN_TRIGGER_HAPPY5),
+ [BTN_TRIGGER_HAPPY6] = XLAT(BTN_TRIGGER_HAPPY6),
+ [BTN_TRIGGER_HAPPY7] = XLAT(BTN_TRIGGER_HAPPY7),
+ [BTN_TRIGGER_HAPPY8] = XLAT(BTN_TRIGGER_HAPPY8),
+ [BTN_TRIGGER_HAPPY9] = XLAT(BTN_TRIGGER_HAPPY9),
+ [BTN_TRIGGER_HAPPY10] = XLAT(BTN_TRIGGER_HAPPY10),
+ [BTN_TRIGGER_HAPPY11] = XLAT(BTN_TRIGGER_HAPPY11),
+ [BTN_TRIGGER_HAPPY12] = XLAT(BTN_TRIGGER_HAPPY12),
+ [BTN_TRIGGER_HAPPY13] = XLAT(BTN_TRIGGER_HAPPY13),
+ [BTN_TRIGGER_HAPPY14] = XLAT(BTN_TRIGGER_HAPPY14),
+ [BTN_TRIGGER_HAPPY15] = XLAT(BTN_TRIGGER_HAPPY15),
+ [BTN_TRIGGER_HAPPY16] = XLAT(BTN_TRIGGER_HAPPY16),
+ [BTN_TRIGGER_HAPPY17] = XLAT(BTN_TRIGGER_HAPPY17),
+ [BTN_TRIGGER_HAPPY18] = XLAT(BTN_TRIGGER_HAPPY18),
+ [BTN_TRIGGER_HAPPY19] = XLAT(BTN_TRIGGER_HAPPY19),
+ [BTN_TRIGGER_HAPPY20] = XLAT(BTN_TRIGGER_HAPPY20),
+ [BTN_TRIGGER_HAPPY21] = XLAT(BTN_TRIGGER_HAPPY21),
+ [BTN_TRIGGER_HAPPY22] = XLAT(BTN_TRIGGER_HAPPY22),
+ [BTN_TRIGGER_HAPPY23] = XLAT(BTN_TRIGGER_HAPPY23),
+ [BTN_TRIGGER_HAPPY24] = XLAT(BTN_TRIGGER_HAPPY24),
+ [BTN_TRIGGER_HAPPY25] = XLAT(BTN_TRIGGER_HAPPY25),
+ [BTN_TRIGGER_HAPPY26] = XLAT(BTN_TRIGGER_HAPPY26),
+ [BTN_TRIGGER_HAPPY27] = XLAT(BTN_TRIGGER_HAPPY27),
+ [BTN_TRIGGER_HAPPY28] = XLAT(BTN_TRIGGER_HAPPY28),
+ [BTN_TRIGGER_HAPPY29] = XLAT(BTN_TRIGGER_HAPPY29),
+ [BTN_TRIGGER_HAPPY30] = XLAT(BTN_TRIGGER_HAPPY30),
+ [BTN_TRIGGER_HAPPY31] = XLAT(BTN_TRIGGER_HAPPY31),
+ [BTN_TRIGGER_HAPPY32] = XLAT(BTN_TRIGGER_HAPPY32),
+ [BTN_TRIGGER_HAPPY33] = XLAT(BTN_TRIGGER_HAPPY33),
+ [BTN_TRIGGER_HAPPY34] = XLAT(BTN_TRIGGER_HAPPY34),
+ [BTN_TRIGGER_HAPPY35] = XLAT(BTN_TRIGGER_HAPPY35),
+ [BTN_TRIGGER_HAPPY36] = XLAT(BTN_TRIGGER_HAPPY36),
+ [BTN_TRIGGER_HAPPY37] = XLAT(BTN_TRIGGER_HAPPY37),
+ [BTN_TRIGGER_HAPPY38] = XLAT(BTN_TRIGGER_HAPPY38),
+ [BTN_TRIGGER_HAPPY39] = XLAT(BTN_TRIGGER_HAPPY39),
+ [BTN_TRIGGER_HAPPY40] = XLAT(BTN_TRIGGER_HAPPY40),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_keycode.in b/xlat/evdev_keycode.in
index c0811ba..08fb5d1 100644
--- a/xlat/evdev_keycode.in
+++ b/xlat/evdev_keycode.in
@@ -1,3 +1,4 @@
+#value_indexed
 /* awk '{if (NF>1) {n=strtonum($2)}; printf("%d %s\n", n, $0)}' |sort -s -k1,1n |sed 's/^[0-9]* //' */
 KEY_RESERVED		0
 KEY_ESC			1
@@ -253,6 +254,19 @@
 KEY_DISPLAY_OFF		245
 
 KEY_WWAN		246
+
+#ifndef STRACE_WORKAROUND_FOR_KEY_RFKILL
+# define STRACE_WORKAROUND_FOR_KEY_RFKILL
+/*
+ * KEY_RFKILL and KEY_NUMERIC_A constants were introduced by Linux kernel
+ * commits v2.6.33~17^2~2 and v4.1-rc1~150^2~1^10~6, respectively.
+ * Apparently, RHEL6 introduced an alternative KEY_RFKILL constant
+ * with the same value as upstream KEY_NUMERIC_A.
+ * Downstream vendors are *not* allowed to do this.
+ * Ignore the system value of KEY_RFKILL.
+ */
+# undef KEY_RFKILL
+#endif
 KEY_RFKILL		247
 
 KEY_MICMUTE		248
@@ -268,7 +282,6 @@
 BTN_8			0x108
 BTN_9			0x109
 
-BTN_MOUSE		0x110
 BTN_LEFT		0x110
 BTN_RIGHT		0x111
 BTN_MIDDLE		0x112
@@ -278,7 +291,6 @@
 BTN_BACK		0x116
 BTN_TASK		0x117
 
-BTN_JOYSTICK		0x120
 BTN_TRIGGER		0x120
 BTN_THUMB		0x121
 BTN_THUMB2		0x122
@@ -293,7 +305,6 @@
 BTN_BASE6		0x12b
 BTN_DEAD		0x12f
 
-BTN_GAMEPAD		0x130
 BTN_SOUTH		0x130
 BTN_EAST		0x131
 BTN_C			0x132
@@ -310,7 +321,6 @@
 BTN_THUMBL		0x13d
 BTN_THUMBR		0x13e
 
-BTN_DIGI		0x140
 BTN_TOOL_PEN		0x140
 BTN_TOOL_RUBBER		0x141
 BTN_TOOL_BRUSH		0x142
@@ -328,7 +338,6 @@
 BTN_TOOL_TRIPLETAP	0x14e
 BTN_TOOL_QUADTAP	0x14f
 
-BTN_WHEEL		0x150
 BTN_GEAR_DOWN		0x150
 BTN_GEAR_UP		0x151
 
@@ -517,7 +526,20 @@
 KEY_VOICECOMMAND		0x246
 KEY_ASSISTANT		0x247
 
+#ifndef STRACE_WORKAROUND_FOR_KEY_BRIGHTNESS_MIN
+# define STRACE_WORKAROUND_FOR_KEY_BRIGHTNESS_MIN
+/*
+ * KEY_BRIGHTNESS_MIN and KEY_BRIGHTNESS_MAX constants were introduced
+ * by Linux kernel commit v3.16-rc1~30^2~6^2~1^2~7.
+ * Apparently, RHEL7 introduced an alternative KEY_BRIGHTNESS_MIN constant
+ * with the same value as upstream KEY_BRIGHTNESS_MAX.
+ * Downstream vendors are *not* allowed to do this.
+ * Ignore the system value of KEY_BRIGHTNESS_MIN.
+ */
+# undef KEY_BRIGHTNESS_MIN
+#endif
 KEY_BRIGHTNESS_MIN		0x250
+
 KEY_BRIGHTNESS_MAX		0x251
 
 KEY_KBDINPUTASSIST_PREV		0x260
@@ -546,10 +568,22 @@
 KEY_UNMUTE			0x274
 KEY_FASTREVERSE			0x275
 KEY_SLOWREVERSE			0x276
+
+#ifndef STRACE_WORKAROUND_FOR_KEY_DATA
+# define STRACE_WORKAROUND_FOR_KEY_DATA
+/*
+ * Linux kernel commit v4.9-rc8~12^2 has changed the value of KEY_DATA
+ * constant introduced by commit v4.7-rc6~32^2~6^2 because the old value
+ * was already used by KEY_FASTREVERSE.
+ * Looks like the best way to handle this situation is to pretend that
+ * the old value of KEY_DATA didn't exist.
+ */
+# undef KEY_DATA
+#endif
 KEY_DATA			0x277
+
 KEY_ONSCREEN_KEYBOARD		0x278
 
-BTN_TRIGGER_HAPPY		0x2c0
 BTN_TRIGGER_HAPPY1		0x2c0
 BTN_TRIGGER_HAPPY2		0x2c1
 BTN_TRIGGER_HAPPY3		0x2c2
diff --git a/xlat/evdev_leds.h b/xlat/evdev_leds.h
index ca0de38..09dc066 100644
--- a/xlat/evdev_leds.h
+++ b/xlat/evdev_leds.h
@@ -1,47 +1,110 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_leds.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_leds in mpers mode
-
+#if defined(LED_NUML) || (defined(HAVE_DECL_LED_NUML) && HAVE_DECL_LED_NUML)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_NUML) == (0x00), "LED_NUML != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define LED_NUML 0x00
+#endif
+#if defined(LED_CAPSL) || (defined(HAVE_DECL_LED_CAPSL) && HAVE_DECL_LED_CAPSL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_CAPSL) == (0x01), "LED_CAPSL != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_CAPSL 0x01
+#endif
+#if defined(LED_SCROLLL) || (defined(HAVE_DECL_LED_SCROLLL) && HAVE_DECL_LED_SCROLLL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_SCROLLL) == (0x02), "LED_SCROLLL != 0x02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_SCROLLL 0x02
+#endif
+#if defined(LED_COMPOSE) || (defined(HAVE_DECL_LED_COMPOSE) && HAVE_DECL_LED_COMPOSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_COMPOSE) == (0x03), "LED_COMPOSE != 0x03");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_COMPOSE 0x03
+#endif
+#if defined(LED_KANA) || (defined(HAVE_DECL_LED_KANA) && HAVE_DECL_LED_KANA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_KANA) == (0x04), "LED_KANA != 0x04");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_KANA 0x04
+#endif
+#if defined(LED_SLEEP) || (defined(HAVE_DECL_LED_SLEEP) && HAVE_DECL_LED_SLEEP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_SLEEP) == (0x05), "LED_SLEEP != 0x05");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_SLEEP 0x05
+#endif
+#if defined(LED_SUSPEND) || (defined(HAVE_DECL_LED_SUSPEND) && HAVE_DECL_LED_SUSPEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_SUSPEND) == (0x06), "LED_SUSPEND != 0x06");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_SUSPEND 0x06
+#endif
+#if defined(LED_MUTE) || (defined(HAVE_DECL_LED_MUTE) && HAVE_DECL_LED_MUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_MUTE) == (0x07), "LED_MUTE != 0x07");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_MUTE 0x07
+#endif
+#if defined(LED_MISC) || (defined(HAVE_DECL_LED_MISC) && HAVE_DECL_LED_MISC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_MISC) == (0x08), "LED_MISC != 0x08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_MISC 0x08
+#endif
+#if defined(LED_MAIL) || (defined(HAVE_DECL_LED_MAIL) && HAVE_DECL_LED_MAIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_MAIL) == (0x09), "LED_MAIL != 0x09");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_MAIL 0x09
+#endif
+#if defined(LED_CHARGING) || (defined(HAVE_DECL_LED_CHARGING) && HAVE_DECL_LED_CHARGING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LED_CHARGING) == (0x0a), "LED_CHARGING != 0x0a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LED_CHARGING 0x0a
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_leds in mpers mode
+
+# else
 
 static
 const struct xlat evdev_leds[] = {
-#if defined(LED_NUML) || (defined(HAVE_DECL_LED_NUML) && HAVE_DECL_LED_NUML)
-  XLAT(LED_NUML),
-#endif
-#if defined(LED_CAPSL) || (defined(HAVE_DECL_LED_CAPSL) && HAVE_DECL_LED_CAPSL)
-  XLAT(LED_CAPSL),
-#endif
-#if defined(LED_SCROLLL) || (defined(HAVE_DECL_LED_SCROLLL) && HAVE_DECL_LED_SCROLLL)
-  XLAT(LED_SCROLLL),
-#endif
-#if defined(LED_COMPOSE) || (defined(HAVE_DECL_LED_COMPOSE) && HAVE_DECL_LED_COMPOSE)
-  XLAT(LED_COMPOSE),
-#endif
-#if defined(LED_KANA) || (defined(HAVE_DECL_LED_KANA) && HAVE_DECL_LED_KANA)
-  XLAT(LED_KANA),
-#endif
-#if defined(LED_SLEEP) || (defined(HAVE_DECL_LED_SLEEP) && HAVE_DECL_LED_SLEEP)
-  XLAT(LED_SLEEP),
-#endif
-#if defined(LED_SUSPEND) || (defined(HAVE_DECL_LED_SUSPEND) && HAVE_DECL_LED_SUSPEND)
-  XLAT(LED_SUSPEND),
-#endif
-#if defined(LED_MUTE) || (defined(HAVE_DECL_LED_MUTE) && HAVE_DECL_LED_MUTE)
-  XLAT(LED_MUTE),
-#endif
-#if defined(LED_MISC) || (defined(HAVE_DECL_LED_MISC) && HAVE_DECL_LED_MISC)
-  XLAT(LED_MISC),
-#endif
-#if defined(LED_MAIL) || (defined(HAVE_DECL_LED_MAIL) && HAVE_DECL_LED_MAIL)
-  XLAT(LED_MAIL),
-#endif
-#if defined(LED_CHARGING) || (defined(HAVE_DECL_LED_CHARGING) && HAVE_DECL_LED_CHARGING)
-  XLAT(LED_CHARGING),
-#endif
+ [LED_NUML] = XLAT(LED_NUML),
+ [LED_CAPSL] = XLAT(LED_CAPSL),
+ [LED_SCROLLL] = XLAT(LED_SCROLLL),
+ [LED_COMPOSE] = XLAT(LED_COMPOSE),
+ [LED_KANA] = XLAT(LED_KANA),
+ [LED_SLEEP] = XLAT(LED_SLEEP),
+ [LED_SUSPEND] = XLAT(LED_SUSPEND),
+ [LED_MUTE] = XLAT(LED_MUTE),
+ [LED_MISC] = XLAT(LED_MISC),
+ [LED_MAIL] = XLAT(LED_MAIL),
+ [LED_CHARGING] = XLAT(LED_CHARGING),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_leds.in b/xlat/evdev_leds.in
index c085ed3..6178bbd 100644
--- a/xlat/evdev_leds.in
+++ b/xlat/evdev_leds.in
@@ -1,11 +1,12 @@
-LED_NUML
-LED_CAPSL
-LED_SCROLLL
-LED_COMPOSE
-LED_KANA
-LED_SLEEP
-LED_SUSPEND
-LED_MUTE
-LED_MISC
-LED_MAIL
-LED_CHARGING
+#value_indexed
+LED_NUML	0x00
+LED_CAPSL	0x01
+LED_SCROLLL	0x02
+LED_COMPOSE	0x03
+LED_KANA	0x04
+LED_SLEEP	0x05
+LED_SUSPEND	0x06
+LED_MUTE	0x07
+LED_MISC	0x08
+LED_MAIL	0x09
+LED_CHARGING	0x0a
diff --git a/xlat/evdev_misc.h b/xlat/evdev_misc.h
index 96f8afa..92c3879 100644
--- a/xlat/evdev_misc.h
+++ b/xlat/evdev_misc.h
@@ -1,32 +1,70 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_misc.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_misc in mpers mode
-
+#if defined(MSC_SERIAL) || (defined(HAVE_DECL_MSC_SERIAL) && HAVE_DECL_MSC_SERIAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSC_SERIAL) == (0x00), "MSC_SERIAL != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define MSC_SERIAL 0x00
+#endif
+#if defined(MSC_PULSELED) || (defined(HAVE_DECL_MSC_PULSELED) && HAVE_DECL_MSC_PULSELED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSC_PULSELED) == (0x01), "MSC_PULSELED != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSC_PULSELED 0x01
+#endif
+#if defined(MSC_GESTURE) || (defined(HAVE_DECL_MSC_GESTURE) && HAVE_DECL_MSC_GESTURE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSC_GESTURE) == (0x02), "MSC_GESTURE != 0x02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSC_GESTURE 0x02
+#endif
+#if defined(MSC_RAW) || (defined(HAVE_DECL_MSC_RAW) && HAVE_DECL_MSC_RAW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSC_RAW) == (0x03), "MSC_RAW != 0x03");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSC_RAW 0x03
+#endif
+#if defined(MSC_SCAN) || (defined(HAVE_DECL_MSC_SCAN) && HAVE_DECL_MSC_SCAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSC_SCAN) == (0x04), "MSC_SCAN != 0x04");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSC_SCAN 0x04
+#endif
+#if defined(MSC_TIMESTAMP) || (defined(HAVE_DECL_MSC_TIMESTAMP) && HAVE_DECL_MSC_TIMESTAMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSC_TIMESTAMP) == (0x05), "MSC_TIMESTAMP != 0x05");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSC_TIMESTAMP 0x05
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_misc in mpers mode
+
+# else
 
 static
 const struct xlat evdev_misc[] = {
-#if defined(MSC_SERIAL) || (defined(HAVE_DECL_MSC_SERIAL) && HAVE_DECL_MSC_SERIAL)
-  XLAT(MSC_SERIAL),
-#endif
-#if defined(MSC_PULSELED) || (defined(HAVE_DECL_MSC_PULSELED) && HAVE_DECL_MSC_PULSELED)
-  XLAT(MSC_PULSELED),
-#endif
-#if defined(MSC_GESTURE) || (defined(HAVE_DECL_MSC_GESTURE) && HAVE_DECL_MSC_GESTURE)
-  XLAT(MSC_GESTURE),
-#endif
-#if defined(MSC_RAW) || (defined(HAVE_DECL_MSC_RAW) && HAVE_DECL_MSC_RAW)
-  XLAT(MSC_RAW),
-#endif
-#if defined(MSC_SCAN) || (defined(HAVE_DECL_MSC_SCAN) && HAVE_DECL_MSC_SCAN)
-  XLAT(MSC_SCAN),
-#endif
-#if defined(MSC_TIMESTAMP) || (defined(HAVE_DECL_MSC_TIMESTAMP) && HAVE_DECL_MSC_TIMESTAMP)
-  XLAT(MSC_TIMESTAMP),
-#endif
+ [MSC_SERIAL] = XLAT(MSC_SERIAL),
+ [MSC_PULSELED] = XLAT(MSC_PULSELED),
+ [MSC_GESTURE] = XLAT(MSC_GESTURE),
+ [MSC_RAW] = XLAT(MSC_RAW),
+ [MSC_SCAN] = XLAT(MSC_SCAN),
+ [MSC_TIMESTAMP] = XLAT(MSC_TIMESTAMP),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_misc.in b/xlat/evdev_misc.in
index 385ee4d..0528092 100644
--- a/xlat/evdev_misc.in
+++ b/xlat/evdev_misc.in
@@ -1,6 +1,7 @@
-MSC_SERIAL
-MSC_PULSELED
-MSC_GESTURE
-MSC_RAW
-MSC_SCAN
-MSC_TIMESTAMP
+#value_indexed
+MSC_SERIAL	0x00
+MSC_PULSELED	0x01
+MSC_GESTURE	0x02
+MSC_RAW		0x03
+MSC_SCAN	0x04
+MSC_TIMESTAMP	0x05
diff --git a/xlat/evdev_mtslots.h b/xlat/evdev_mtslots.h
index 3633514..ec6ee61 100644
--- a/xlat/evdev_mtslots.h
+++ b/xlat/evdev_mtslots.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_mtslots.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_mtslots in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_mtslots in mpers mode
+
+# else
 
 static
 const struct xlat evdev_mtslots[] = {
@@ -56,4 +62,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_prop.h b/xlat/evdev_prop.h
index c998c82..ea872fb 100644
--- a/xlat/evdev_prop.h
+++ b/xlat/evdev_prop.h
@@ -1,35 +1,78 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_prop.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_prop in mpers mode
-
+#if defined(INPUT_PROP_POINTER) || (defined(HAVE_DECL_INPUT_PROP_POINTER) && HAVE_DECL_INPUT_PROP_POINTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((INPUT_PROP_POINTER) == (0), "INPUT_PROP_POINTER != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define INPUT_PROP_POINTER 0
+#endif
+#if defined(INPUT_PROP_DIRECT) || (defined(HAVE_DECL_INPUT_PROP_DIRECT) && HAVE_DECL_INPUT_PROP_DIRECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((INPUT_PROP_DIRECT) == (1), "INPUT_PROP_DIRECT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define INPUT_PROP_DIRECT 1
+#endif
+#if defined(INPUT_PROP_BUTTONPAD) || (defined(HAVE_DECL_INPUT_PROP_BUTTONPAD) && HAVE_DECL_INPUT_PROP_BUTTONPAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((INPUT_PROP_BUTTONPAD) == (2), "INPUT_PROP_BUTTONPAD != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define INPUT_PROP_BUTTONPAD 2
+#endif
+#if defined(INPUT_PROP_SEMI_MT) || (defined(HAVE_DECL_INPUT_PROP_SEMI_MT) && HAVE_DECL_INPUT_PROP_SEMI_MT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((INPUT_PROP_SEMI_MT) == (3), "INPUT_PROP_SEMI_MT != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define INPUT_PROP_SEMI_MT 3
+#endif
+#if defined(INPUT_PROP_TOPBUTTONPAD) || (defined(HAVE_DECL_INPUT_PROP_TOPBUTTONPAD) && HAVE_DECL_INPUT_PROP_TOPBUTTONPAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((INPUT_PROP_TOPBUTTONPAD) == (4), "INPUT_PROP_TOPBUTTONPAD != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define INPUT_PROP_TOPBUTTONPAD 4
+#endif
+#if defined(INPUT_PROP_POINTING_STICK) || (defined(HAVE_DECL_INPUT_PROP_POINTING_STICK) && HAVE_DECL_INPUT_PROP_POINTING_STICK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((INPUT_PROP_POINTING_STICK) == (5), "INPUT_PROP_POINTING_STICK != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define INPUT_PROP_POINTING_STICK 5
+#endif
+#if defined(INPUT_PROP_ACCELEROMETER) || (defined(HAVE_DECL_INPUT_PROP_ACCELEROMETER) && HAVE_DECL_INPUT_PROP_ACCELEROMETER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((INPUT_PROP_ACCELEROMETER) == (6), "INPUT_PROP_ACCELEROMETER != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define INPUT_PROP_ACCELEROMETER 6
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_prop in mpers mode
+
+# else
 
 static
 const struct xlat evdev_prop[] = {
-#if defined(INPUT_PROP_POINTER) || (defined(HAVE_DECL_INPUT_PROP_POINTER) && HAVE_DECL_INPUT_PROP_POINTER)
-  XLAT(INPUT_PROP_POINTER),
-#endif
-#if defined(INPUT_PROP_DIRECT) || (defined(HAVE_DECL_INPUT_PROP_DIRECT) && HAVE_DECL_INPUT_PROP_DIRECT)
-  XLAT(INPUT_PROP_DIRECT),
-#endif
-#if defined(INPUT_PROP_BUTTONPAD) || (defined(HAVE_DECL_INPUT_PROP_BUTTONPAD) && HAVE_DECL_INPUT_PROP_BUTTONPAD)
-  XLAT(INPUT_PROP_BUTTONPAD),
-#endif
-#if defined(INPUT_PROP_SEMI_MT) || (defined(HAVE_DECL_INPUT_PROP_SEMI_MT) && HAVE_DECL_INPUT_PROP_SEMI_MT)
-  XLAT(INPUT_PROP_SEMI_MT),
-#endif
-#if defined(INPUT_PROP_TOPBUTTONPAD) || (defined(HAVE_DECL_INPUT_PROP_TOPBUTTONPAD) && HAVE_DECL_INPUT_PROP_TOPBUTTONPAD)
-  XLAT(INPUT_PROP_TOPBUTTONPAD),
-#endif
-#if defined(INPUT_PROP_POINTING_STICK) || (defined(HAVE_DECL_INPUT_PROP_POINTING_STICK) && HAVE_DECL_INPUT_PROP_POINTING_STICK)
-  XLAT(INPUT_PROP_POINTING_STICK),
-#endif
-#if defined(INPUT_PROP_ACCELEROMETER) || (defined(HAVE_DECL_INPUT_PROP_ACCELEROMETER) && HAVE_DECL_INPUT_PROP_ACCELEROMETER)
-  XLAT(INPUT_PROP_ACCELEROMETER),
-#endif
+ [INPUT_PROP_POINTER] = XLAT(INPUT_PROP_POINTER),
+ [INPUT_PROP_DIRECT] = XLAT(INPUT_PROP_DIRECT),
+ [INPUT_PROP_BUTTONPAD] = XLAT(INPUT_PROP_BUTTONPAD),
+ [INPUT_PROP_SEMI_MT] = XLAT(INPUT_PROP_SEMI_MT),
+ [INPUT_PROP_TOPBUTTONPAD] = XLAT(INPUT_PROP_TOPBUTTONPAD),
+ [INPUT_PROP_POINTING_STICK] = XLAT(INPUT_PROP_POINTING_STICK),
+ [INPUT_PROP_ACCELEROMETER] = XLAT(INPUT_PROP_ACCELEROMETER),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_prop.in b/xlat/evdev_prop.in
index b659000..5e7d025 100644
--- a/xlat/evdev_prop.in
+++ b/xlat/evdev_prop.in
@@ -1,7 +1,8 @@
-INPUT_PROP_POINTER
-INPUT_PROP_DIRECT
-INPUT_PROP_BUTTONPAD
-INPUT_PROP_SEMI_MT
-INPUT_PROP_TOPBUTTONPAD
-INPUT_PROP_POINTING_STICK
-INPUT_PROP_ACCELEROMETER
+#value_indexed
+INPUT_PROP_POINTER		0
+INPUT_PROP_DIRECT		1
+INPUT_PROP_BUTTONPAD		2
+INPUT_PROP_SEMI_MT		3
+INPUT_PROP_TOPBUTTONPAD		4
+INPUT_PROP_POINTING_STICK	5
+INPUT_PROP_ACCELEROMETER	6
diff --git a/xlat/evdev_relative_axes.h b/xlat/evdev_relative_axes.h
index cf9efb4..60c8abf 100644
--- a/xlat/evdev_relative_axes.h
+++ b/xlat/evdev_relative_axes.h
@@ -1,44 +1,102 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_relative_axes.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_relative_axes in mpers mode
-
+#if defined(REL_X) || (defined(HAVE_DECL_REL_X) && HAVE_DECL_REL_X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_X) == (0x00), "REL_X != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define REL_X 0x00
+#endif
+#if defined(REL_Y) || (defined(HAVE_DECL_REL_Y) && HAVE_DECL_REL_Y)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_Y) == (0x01), "REL_Y != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REL_Y 0x01
+#endif
+#if defined(REL_Z) || (defined(HAVE_DECL_REL_Z) && HAVE_DECL_REL_Z)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_Z) == (0x02), "REL_Z != 0x02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REL_Z 0x02
+#endif
+#if defined(REL_RX) || (defined(HAVE_DECL_REL_RX) && HAVE_DECL_REL_RX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_RX) == (0x03), "REL_RX != 0x03");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REL_RX 0x03
+#endif
+#if defined(REL_RY) || (defined(HAVE_DECL_REL_RY) && HAVE_DECL_REL_RY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_RY) == (0x04), "REL_RY != 0x04");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REL_RY 0x04
+#endif
+#if defined(REL_RZ) || (defined(HAVE_DECL_REL_RZ) && HAVE_DECL_REL_RZ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_RZ) == (0x05), "REL_RZ != 0x05");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REL_RZ 0x05
+#endif
+#if defined(REL_HWHEEL) || (defined(HAVE_DECL_REL_HWHEEL) && HAVE_DECL_REL_HWHEEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_HWHEEL) == (0x06), "REL_HWHEEL != 0x06");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REL_HWHEEL 0x06
+#endif
+#if defined(REL_DIAL) || (defined(HAVE_DECL_REL_DIAL) && HAVE_DECL_REL_DIAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_DIAL) == (0x07), "REL_DIAL != 0x07");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REL_DIAL 0x07
+#endif
+#if defined(REL_WHEEL) || (defined(HAVE_DECL_REL_WHEEL) && HAVE_DECL_REL_WHEEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_WHEEL) == (0x08), "REL_WHEEL != 0x08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REL_WHEEL 0x08
+#endif
+#if defined(REL_MISC) || (defined(HAVE_DECL_REL_MISC) && HAVE_DECL_REL_MISC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((REL_MISC) == (0x09), "REL_MISC != 0x09");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define REL_MISC 0x09
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_relative_axes in mpers mode
+
+# else
 
 static
 const struct xlat evdev_relative_axes[] = {
-#if defined(REL_X) || (defined(HAVE_DECL_REL_X) && HAVE_DECL_REL_X)
-  XLAT(REL_X),
-#endif
-#if defined(REL_Y) || (defined(HAVE_DECL_REL_Y) && HAVE_DECL_REL_Y)
-  XLAT(REL_Y),
-#endif
-#if defined(REL_Z) || (defined(HAVE_DECL_REL_Z) && HAVE_DECL_REL_Z)
-  XLAT(REL_Z),
-#endif
-#if defined(REL_RX) || (defined(HAVE_DECL_REL_RX) && HAVE_DECL_REL_RX)
-  XLAT(REL_RX),
-#endif
-#if defined(REL_RY) || (defined(HAVE_DECL_REL_RY) && HAVE_DECL_REL_RY)
-  XLAT(REL_RY),
-#endif
-#if defined(REL_RZ) || (defined(HAVE_DECL_REL_RZ) && HAVE_DECL_REL_RZ)
-  XLAT(REL_RZ),
-#endif
-#if defined(REL_HWHEEL) || (defined(HAVE_DECL_REL_HWHEEL) && HAVE_DECL_REL_HWHEEL)
-  XLAT(REL_HWHEEL),
-#endif
-#if defined(REL_DIAL) || (defined(HAVE_DECL_REL_DIAL) && HAVE_DECL_REL_DIAL)
-  XLAT(REL_DIAL),
-#endif
-#if defined(REL_WHEEL) || (defined(HAVE_DECL_REL_WHEEL) && HAVE_DECL_REL_WHEEL)
-  XLAT(REL_WHEEL),
-#endif
-#if defined(REL_MISC) || (defined(HAVE_DECL_REL_MISC) && HAVE_DECL_REL_MISC)
-  XLAT(REL_MISC),
-#endif
+ [REL_X] = XLAT(REL_X),
+ [REL_Y] = XLAT(REL_Y),
+ [REL_Z] = XLAT(REL_Z),
+ [REL_RX] = XLAT(REL_RX),
+ [REL_RY] = XLAT(REL_RY),
+ [REL_RZ] = XLAT(REL_RZ),
+ [REL_HWHEEL] = XLAT(REL_HWHEEL),
+ [REL_DIAL] = XLAT(REL_DIAL),
+ [REL_WHEEL] = XLAT(REL_WHEEL),
+ [REL_MISC] = XLAT(REL_MISC),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_relative_axes.in b/xlat/evdev_relative_axes.in
index 7158d47..4684a52 100644
--- a/xlat/evdev_relative_axes.in
+++ b/xlat/evdev_relative_axes.in
@@ -1,10 +1,11 @@
-REL_X
-REL_Y
-REL_Z
-REL_RX
-REL_RY
-REL_RZ
-REL_HWHEEL
-REL_DIAL
-REL_WHEEL
-REL_MISC
+#value_indexed
+REL_X		0x00
+REL_Y		0x01
+REL_Z		0x02
+REL_RX		0x03
+REL_RY		0x04
+REL_RZ		0x05
+REL_HWHEEL	0x06
+REL_DIAL	0x07
+REL_WHEEL	0x08
+REL_MISC	0x09
diff --git a/xlat/evdev_snd.h b/xlat/evdev_snd.h
index 95e4cd9..35d6c44 100644
--- a/xlat/evdev_snd.h
+++ b/xlat/evdev_snd.h
@@ -1,23 +1,46 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_snd.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_snd in mpers mode
-
+#if defined(SND_CLICK) || (defined(HAVE_DECL_SND_CLICK) && HAVE_DECL_SND_CLICK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SND_CLICK) == (0x00), "SND_CLICK != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define SND_CLICK 0x00
+#endif
+#if defined(SND_BELL) || (defined(HAVE_DECL_SND_BELL) && HAVE_DECL_SND_BELL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SND_BELL) == (0x01), "SND_BELL != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SND_BELL 0x01
+#endif
+#if defined(SND_TONE) || (defined(HAVE_DECL_SND_TONE) && HAVE_DECL_SND_TONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SND_TONE) == (0x02), "SND_TONE != 0x02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SND_TONE 0x02
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_snd in mpers mode
+
+# else
 
 static
 const struct xlat evdev_snd[] = {
-#if defined(SND_CLICK) || (defined(HAVE_DECL_SND_CLICK) && HAVE_DECL_SND_CLICK)
-  XLAT(SND_CLICK),
-#endif
-#if defined(SND_BELL) || (defined(HAVE_DECL_SND_BELL) && HAVE_DECL_SND_BELL)
-  XLAT(SND_BELL),
-#endif
-#if defined(SND_TONE) || (defined(HAVE_DECL_SND_TONE) && HAVE_DECL_SND_TONE)
-  XLAT(SND_TONE),
-#endif
+ [SND_CLICK] = XLAT(SND_CLICK),
+ [SND_BELL] = XLAT(SND_BELL),
+ [SND_TONE] = XLAT(SND_TONE),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_snd.in b/xlat/evdev_snd.in
index eaebe3c..22e51cc 100644
--- a/xlat/evdev_snd.in
+++ b/xlat/evdev_snd.in
@@ -1,3 +1,4 @@
-SND_CLICK
-SND_BELL
-SND_TONE
+#value_indexed
+SND_CLICK	0x00
+SND_BELL	0x01
+SND_TONE	0x02
diff --git a/xlat/evdev_switch.h b/xlat/evdev_switch.h
index afa4b3b..d5aa9df 100644
--- a/xlat/evdev_switch.h
+++ b/xlat/evdev_switch.h
@@ -1,62 +1,150 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_switch.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_switch in mpers mode
-
+#if defined(SW_LID) || (defined(HAVE_DECL_SW_LID) && HAVE_DECL_SW_LID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_LID) == (0x00), "SW_LID != 0x00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define SW_LID 0x00
+#endif
+#if defined(SW_TABLET_MODE) || (defined(HAVE_DECL_SW_TABLET_MODE) && HAVE_DECL_SW_TABLET_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_TABLET_MODE) == (0x01), "SW_TABLET_MODE != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_TABLET_MODE 0x01
+#endif
+#if defined(SW_HEADPHONE_INSERT) || (defined(HAVE_DECL_SW_HEADPHONE_INSERT) && HAVE_DECL_SW_HEADPHONE_INSERT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_HEADPHONE_INSERT) == (0x02), "SW_HEADPHONE_INSERT != 0x02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_HEADPHONE_INSERT 0x02
+#endif
+#if defined(SW_RFKILL_ALL) || (defined(HAVE_DECL_SW_RFKILL_ALL) && HAVE_DECL_SW_RFKILL_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_RFKILL_ALL) == (0x03), "SW_RFKILL_ALL != 0x03");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_RFKILL_ALL 0x03
+#endif
+#if defined(SW_MICROPHONE_INSERT) || (defined(HAVE_DECL_SW_MICROPHONE_INSERT) && HAVE_DECL_SW_MICROPHONE_INSERT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_MICROPHONE_INSERT) == (0x04), "SW_MICROPHONE_INSERT != 0x04");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_MICROPHONE_INSERT 0x04
+#endif
+#if defined(SW_DOCK) || (defined(HAVE_DECL_SW_DOCK) && HAVE_DECL_SW_DOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_DOCK) == (0x05), "SW_DOCK != 0x05");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_DOCK 0x05
+#endif
+#if defined(SW_LINEOUT_INSERT) || (defined(HAVE_DECL_SW_LINEOUT_INSERT) && HAVE_DECL_SW_LINEOUT_INSERT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_LINEOUT_INSERT) == (0x06), "SW_LINEOUT_INSERT != 0x06");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_LINEOUT_INSERT 0x06
+#endif
+#if defined(SW_JACK_PHYSICAL_INSERT) || (defined(HAVE_DECL_SW_JACK_PHYSICAL_INSERT) && HAVE_DECL_SW_JACK_PHYSICAL_INSERT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_JACK_PHYSICAL_INSERT) == (0x07), "SW_JACK_PHYSICAL_INSERT != 0x07");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_JACK_PHYSICAL_INSERT 0x07
+#endif
+#if defined(SW_VIDEOOUT_INSERT) || (defined(HAVE_DECL_SW_VIDEOOUT_INSERT) && HAVE_DECL_SW_VIDEOOUT_INSERT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_VIDEOOUT_INSERT) == (0x08), "SW_VIDEOOUT_INSERT != 0x08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_VIDEOOUT_INSERT 0x08
+#endif
+#if defined(SW_CAMERA_LENS_COVER) || (defined(HAVE_DECL_SW_CAMERA_LENS_COVER) && HAVE_DECL_SW_CAMERA_LENS_COVER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_CAMERA_LENS_COVER) == (0x09), "SW_CAMERA_LENS_COVER != 0x09");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_CAMERA_LENS_COVER 0x09
+#endif
+#if defined(SW_KEYPAD_SLIDE) || (defined(HAVE_DECL_SW_KEYPAD_SLIDE) && HAVE_DECL_SW_KEYPAD_SLIDE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_KEYPAD_SLIDE) == (0x0a), "SW_KEYPAD_SLIDE != 0x0a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_KEYPAD_SLIDE 0x0a
+#endif
+#if defined(SW_FRONT_PROXIMITY) || (defined(HAVE_DECL_SW_FRONT_PROXIMITY) && HAVE_DECL_SW_FRONT_PROXIMITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_FRONT_PROXIMITY) == (0x0b), "SW_FRONT_PROXIMITY != 0x0b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_FRONT_PROXIMITY 0x0b
+#endif
+#if defined(SW_ROTATE_LOCK) || (defined(HAVE_DECL_SW_ROTATE_LOCK) && HAVE_DECL_SW_ROTATE_LOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_ROTATE_LOCK) == (0x0c), "SW_ROTATE_LOCK != 0x0c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_ROTATE_LOCK 0x0c
+#endif
+#if defined(SW_LINEIN_INSERT) || (defined(HAVE_DECL_SW_LINEIN_INSERT) && HAVE_DECL_SW_LINEIN_INSERT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_LINEIN_INSERT) == (0x0d), "SW_LINEIN_INSERT != 0x0d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_LINEIN_INSERT 0x0d
+#endif
+#if defined(SW_MUTE_DEVICE) || (defined(HAVE_DECL_SW_MUTE_DEVICE) && HAVE_DECL_SW_MUTE_DEVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_MUTE_DEVICE) == (0x0e), "SW_MUTE_DEVICE != 0x0e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_MUTE_DEVICE 0x0e
+#endif
+#if defined(SW_PEN_INSERTED) || (defined(HAVE_DECL_SW_PEN_INSERTED) && HAVE_DECL_SW_PEN_INSERTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SW_PEN_INSERTED) == (0x0f), "SW_PEN_INSERTED != 0x0f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SW_PEN_INSERTED 0x0f
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_switch in mpers mode
+
+# else
 
 static
 const struct xlat evdev_switch[] = {
-#if defined(SW_LID) || (defined(HAVE_DECL_SW_LID) && HAVE_DECL_SW_LID)
-  XLAT(SW_LID),
-#endif
-#if defined(SW_TABLET_MODE) || (defined(HAVE_DECL_SW_TABLET_MODE) && HAVE_DECL_SW_TABLET_MODE)
-  XLAT(SW_TABLET_MODE),
-#endif
-#if defined(SW_HEADPHONE_INSERT) || (defined(HAVE_DECL_SW_HEADPHONE_INSERT) && HAVE_DECL_SW_HEADPHONE_INSERT)
-  XLAT(SW_HEADPHONE_INSERT),
-#endif
-#if defined(SW_RFKILL_ALL) || (defined(HAVE_DECL_SW_RFKILL_ALL) && HAVE_DECL_SW_RFKILL_ALL)
-  XLAT(SW_RFKILL_ALL),
-#endif
-#if defined(SW_RADIO) || (defined(HAVE_DECL_SW_RADIO) && HAVE_DECL_SW_RADIO)
-  XLAT(SW_RADIO),
-#endif
-#if defined(SW_MICROPHONE_INSERT) || (defined(HAVE_DECL_SW_MICROPHONE_INSERT) && HAVE_DECL_SW_MICROPHONE_INSERT)
-  XLAT(SW_MICROPHONE_INSERT),
-#endif
-#if defined(SW_DOCK) || (defined(HAVE_DECL_SW_DOCK) && HAVE_DECL_SW_DOCK)
-  XLAT(SW_DOCK),
-#endif
-#if defined(SW_LINEOUT_INSERT) || (defined(HAVE_DECL_SW_LINEOUT_INSERT) && HAVE_DECL_SW_LINEOUT_INSERT)
-  XLAT(SW_LINEOUT_INSERT),
-#endif
-#if defined(SW_JACK_PHYSICAL_INSERT) || (defined(HAVE_DECL_SW_JACK_PHYSICAL_INSERT) && HAVE_DECL_SW_JACK_PHYSICAL_INSERT)
-  XLAT(SW_JACK_PHYSICAL_INSERT),
-#endif
-#if defined(SW_VIDEOOUT_INSERT) || (defined(HAVE_DECL_SW_VIDEOOUT_INSERT) && HAVE_DECL_SW_VIDEOOUT_INSERT)
-  XLAT(SW_VIDEOOUT_INSERT),
-#endif
-#if defined(SW_CAMERA_LENS_COVER) || (defined(HAVE_DECL_SW_CAMERA_LENS_COVER) && HAVE_DECL_SW_CAMERA_LENS_COVER)
-  XLAT(SW_CAMERA_LENS_COVER),
-#endif
-#if defined(SW_KEYPAD_SLIDE) || (defined(HAVE_DECL_SW_KEYPAD_SLIDE) && HAVE_DECL_SW_KEYPAD_SLIDE)
-  XLAT(SW_KEYPAD_SLIDE),
-#endif
-#if defined(SW_FRONT_PROXIMITY) || (defined(HAVE_DECL_SW_FRONT_PROXIMITY) && HAVE_DECL_SW_FRONT_PROXIMITY)
-  XLAT(SW_FRONT_PROXIMITY),
-#endif
-#if defined(SW_ROTATE_LOCK) || (defined(HAVE_DECL_SW_ROTATE_LOCK) && HAVE_DECL_SW_ROTATE_LOCK)
-  XLAT(SW_ROTATE_LOCK),
-#endif
-#if defined(SW_LINEIN_INSERT) || (defined(HAVE_DECL_SW_LINEIN_INSERT) && HAVE_DECL_SW_LINEIN_INSERT)
-  XLAT(SW_LINEIN_INSERT),
-#endif
-#if defined(SW_MUTE_DEVICE) || (defined(HAVE_DECL_SW_MUTE_DEVICE) && HAVE_DECL_SW_MUTE_DEVICE)
-  XLAT(SW_MUTE_DEVICE),
-#endif
+ [SW_LID] = XLAT(SW_LID),
+ [SW_TABLET_MODE] = XLAT(SW_TABLET_MODE),
+ [SW_HEADPHONE_INSERT] = XLAT(SW_HEADPHONE_INSERT),
+ [SW_RFKILL_ALL] = XLAT(SW_RFKILL_ALL),
+ [SW_MICROPHONE_INSERT] = XLAT(SW_MICROPHONE_INSERT),
+ [SW_DOCK] = XLAT(SW_DOCK),
+ [SW_LINEOUT_INSERT] = XLAT(SW_LINEOUT_INSERT),
+ [SW_JACK_PHYSICAL_INSERT] = XLAT(SW_JACK_PHYSICAL_INSERT),
+ [SW_VIDEOOUT_INSERT] = XLAT(SW_VIDEOOUT_INSERT),
+ [SW_CAMERA_LENS_COVER] = XLAT(SW_CAMERA_LENS_COVER),
+ [SW_KEYPAD_SLIDE] = XLAT(SW_KEYPAD_SLIDE),
+ [SW_FRONT_PROXIMITY] = XLAT(SW_FRONT_PROXIMITY),
+ [SW_ROTATE_LOCK] = XLAT(SW_ROTATE_LOCK),
+ [SW_LINEIN_INSERT] = XLAT(SW_LINEIN_INSERT),
+ [SW_MUTE_DEVICE] = XLAT(SW_MUTE_DEVICE),
+ [SW_PEN_INSERTED] = XLAT(SW_PEN_INSERTED),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_switch.in b/xlat/evdev_switch.in
index 381d838..8f80872 100644
--- a/xlat/evdev_switch.in
+++ b/xlat/evdev_switch.in
@@ -1,16 +1,17 @@
-SW_LID
-SW_TABLET_MODE
-SW_HEADPHONE_INSERT
-SW_RFKILL_ALL
-SW_RADIO
-SW_MICROPHONE_INSERT
-SW_DOCK
-SW_LINEOUT_INSERT
-SW_JACK_PHYSICAL_INSERT
-SW_VIDEOOUT_INSERT
-SW_CAMERA_LENS_COVER
-SW_KEYPAD_SLIDE
-SW_FRONT_PROXIMITY
-SW_ROTATE_LOCK
-SW_LINEIN_INSERT
-SW_MUTE_DEVICE
+#value_indexed
+SW_LID			0x00
+SW_TABLET_MODE		0x01
+SW_HEADPHONE_INSERT	0x02
+SW_RFKILL_ALL		0x03
+SW_MICROPHONE_INSERT	0x04
+SW_DOCK			0x05
+SW_LINEOUT_INSERT	0x06
+SW_JACK_PHYSICAL_INSERT	0x07
+SW_VIDEOOUT_INSERT	0x08
+SW_CAMERA_LENS_COVER	0x09
+SW_KEYPAD_SLIDE		0x0a
+SW_FRONT_PROXIMITY	0x0b
+SW_ROTATE_LOCK		0x0c
+SW_LINEIN_INSERT	0x0d
+SW_MUTE_DEVICE		0x0e
+SW_PEN_INSERTED		0x0f
diff --git a/xlat/evdev_sync.h b/xlat/evdev_sync.h
index 85372a3..7a06e15 100644
--- a/xlat/evdev_sync.h
+++ b/xlat/evdev_sync.h
@@ -1,26 +1,54 @@
 /* Generated by ./xlat/gen.sh from ./xlat/evdev_sync.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat evdev_sync in mpers mode
-
+#if defined(SYN_REPORT) || (defined(HAVE_DECL_SYN_REPORT) && HAVE_DECL_SYN_REPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYN_REPORT) == (0), "SYN_REPORT != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define SYN_REPORT 0
+#endif
+#if defined(SYN_CONFIG) || (defined(HAVE_DECL_SYN_CONFIG) && HAVE_DECL_SYN_CONFIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYN_CONFIG) == (1), "SYN_CONFIG != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SYN_CONFIG 1
+#endif
+#if defined(SYN_MT_REPORT) || (defined(HAVE_DECL_SYN_MT_REPORT) && HAVE_DECL_SYN_MT_REPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYN_MT_REPORT) == (2), "SYN_MT_REPORT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SYN_MT_REPORT 2
+#endif
+#if defined(SYN_DROPPED) || (defined(HAVE_DECL_SYN_DROPPED) && HAVE_DECL_SYN_DROPPED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYN_DROPPED) == (3), "SYN_DROPPED != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SYN_DROPPED 3
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat evdev_sync in mpers mode
+
+# else
 
 static
 const struct xlat evdev_sync[] = {
-#if defined(SYN_REPORT) || (defined(HAVE_DECL_SYN_REPORT) && HAVE_DECL_SYN_REPORT)
-  XLAT(SYN_REPORT),
-#endif
-#if defined(SYN_CONFIG) || (defined(HAVE_DECL_SYN_CONFIG) && HAVE_DECL_SYN_CONFIG)
-  XLAT(SYN_CONFIG),
-#endif
-#if defined(SYN_MT_REPORT) || (defined(HAVE_DECL_SYN_MT_REPORT) && HAVE_DECL_SYN_MT_REPORT)
-  XLAT(SYN_MT_REPORT),
-#endif
-#if defined(SYN_DROPPED) || (defined(HAVE_DECL_SYN_DROPPED) && HAVE_DECL_SYN_DROPPED)
-  XLAT(SYN_DROPPED),
-#endif
+ [SYN_REPORT] = XLAT(SYN_REPORT),
+ [SYN_CONFIG] = XLAT(SYN_CONFIG),
+ [SYN_MT_REPORT] = XLAT(SYN_MT_REPORT),
+ [SYN_DROPPED] = XLAT(SYN_DROPPED),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/evdev_sync.in b/xlat/evdev_sync.in
index 39c2e4a..ca9ea50 100644
--- a/xlat/evdev_sync.in
+++ b/xlat/evdev_sync.in
@@ -1,4 +1,5 @@
-SYN_REPORT
-SYN_CONFIG
-SYN_MT_REPORT
-SYN_DROPPED
+#value_indexed
+SYN_REPORT	0
+SYN_CONFIG	1
+SYN_MT_REPORT	2
+SYN_DROPPED	3
diff --git a/xlat/f_owner_types.h b/xlat/f_owner_types.h
index 611895a..7659871 100644
--- a/xlat/f_owner_types.h
+++ b/xlat/f_owner_types.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/f_owner_types.in; do not edit. */
-#if !(defined(F_OWNER_TID) || (defined(HAVE_DECL_F_OWNER_TID) && HAVE_DECL_F_OWNER_TID))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(F_OWNER_TID) || (defined(HAVE_DECL_F_OWNER_TID) && HAVE_DECL_F_OWNER_TID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_OWNER_TID) == (0), "F_OWNER_TID != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_OWNER_TID 0
 #endif
-#if !(defined(F_OWNER_PID) || (defined(HAVE_DECL_F_OWNER_PID) && HAVE_DECL_F_OWNER_PID))
+#if defined(F_OWNER_PID) || (defined(HAVE_DECL_F_OWNER_PID) && HAVE_DECL_F_OWNER_PID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_OWNER_PID) == (1), "F_OWNER_PID != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_OWNER_PID 1
 #endif
-#if !(defined(F_OWNER_PGRP) || (defined(HAVE_DECL_F_OWNER_PGRP) && HAVE_DECL_F_OWNER_PGRP))
+#if defined(F_OWNER_PGRP) || (defined(HAVE_DECL_F_OWNER_PGRP) && HAVE_DECL_F_OWNER_PGRP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_OWNER_PGRP) == (2), "F_OWNER_PGRP != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_OWNER_PGRP 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat f_owner_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat f_owner_types in mpers mode
+
+# else
 
 static
 const struct xlat f_owner_types[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/f_seals.h b/xlat/f_seals.h
index 6efd079..1d6383a 100644
--- a/xlat/f_seals.h
+++ b/xlat/f_seals.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/f_seals.in; do not edit. */
-#if !(defined(F_SEAL_SEAL) || (defined(HAVE_DECL_F_SEAL_SEAL) && HAVE_DECL_F_SEAL_SEAL))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(F_SEAL_SEAL) || (defined(HAVE_DECL_F_SEAL_SEAL) && HAVE_DECL_F_SEAL_SEAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SEAL_SEAL) == (1), "F_SEAL_SEAL != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SEAL_SEAL 1
 #endif
-#if !(defined(F_SEAL_SHRINK) || (defined(HAVE_DECL_F_SEAL_SHRINK) && HAVE_DECL_F_SEAL_SHRINK))
+#if defined(F_SEAL_SHRINK) || (defined(HAVE_DECL_F_SEAL_SHRINK) && HAVE_DECL_F_SEAL_SHRINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SEAL_SHRINK) == (2), "F_SEAL_SHRINK != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SEAL_SHRINK 2
 #endif
-#if !(defined(F_SEAL_GROW) || (defined(HAVE_DECL_F_SEAL_GROW) && HAVE_DECL_F_SEAL_GROW))
+#if defined(F_SEAL_GROW) || (defined(HAVE_DECL_F_SEAL_GROW) && HAVE_DECL_F_SEAL_GROW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SEAL_GROW) == (4), "F_SEAL_GROW != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SEAL_GROW 4
 #endif
-#if !(defined(F_SEAL_WRITE) || (defined(HAVE_DECL_F_SEAL_WRITE) && HAVE_DECL_F_SEAL_WRITE))
+#if defined(F_SEAL_WRITE) || (defined(HAVE_DECL_F_SEAL_WRITE) && HAVE_DECL_F_SEAL_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SEAL_WRITE) == (8), "F_SEAL_WRITE != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SEAL_WRITE 8
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat f_seals in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat f_seals in mpers mode
+
+# else
 
 static
 const struct xlat f_seals[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/falloc_flags.h b/xlat/falloc_flags.h
index f75c9a8..aaa7468 100644
--- a/xlat/falloc_flags.h
+++ b/xlat/falloc_flags.h
@@ -1,31 +1,65 @@
 /* Generated by ./xlat/gen.sh from ./xlat/falloc_flags.in; do not edit. */
-#if !(defined(FALLOC_FL_KEEP_SIZE) || (defined(HAVE_DECL_FALLOC_FL_KEEP_SIZE) && HAVE_DECL_FALLOC_FL_KEEP_SIZE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FALLOC_FL_KEEP_SIZE) || (defined(HAVE_DECL_FALLOC_FL_KEEP_SIZE) && HAVE_DECL_FALLOC_FL_KEEP_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FALLOC_FL_KEEP_SIZE) == (0x01), "FALLOC_FL_KEEP_SIZE != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FALLOC_FL_KEEP_SIZE 0x01
 #endif
-#if !(defined(FALLOC_FL_PUNCH_HOLE) || (defined(HAVE_DECL_FALLOC_FL_PUNCH_HOLE) && HAVE_DECL_FALLOC_FL_PUNCH_HOLE))
+#if defined(FALLOC_FL_PUNCH_HOLE) || (defined(HAVE_DECL_FALLOC_FL_PUNCH_HOLE) && HAVE_DECL_FALLOC_FL_PUNCH_HOLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FALLOC_FL_PUNCH_HOLE) == (0x02), "FALLOC_FL_PUNCH_HOLE != 0x02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FALLOC_FL_PUNCH_HOLE 0x02
 #endif
-#if !(defined(FALLOC_FL_NO_HIDE_STALE) || (defined(HAVE_DECL_FALLOC_FL_NO_HIDE_STALE) && HAVE_DECL_FALLOC_FL_NO_HIDE_STALE))
+#if defined(FALLOC_FL_NO_HIDE_STALE) || (defined(HAVE_DECL_FALLOC_FL_NO_HIDE_STALE) && HAVE_DECL_FALLOC_FL_NO_HIDE_STALE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FALLOC_FL_NO_HIDE_STALE) == (0x04), "FALLOC_FL_NO_HIDE_STALE != 0x04");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FALLOC_FL_NO_HIDE_STALE 0x04
 #endif
-#if !(defined(FALLOC_FL_COLLAPSE_RANGE) || (defined(HAVE_DECL_FALLOC_FL_COLLAPSE_RANGE) && HAVE_DECL_FALLOC_FL_COLLAPSE_RANGE))
+#if defined(FALLOC_FL_COLLAPSE_RANGE) || (defined(HAVE_DECL_FALLOC_FL_COLLAPSE_RANGE) && HAVE_DECL_FALLOC_FL_COLLAPSE_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FALLOC_FL_COLLAPSE_RANGE) == (0x08), "FALLOC_FL_COLLAPSE_RANGE != 0x08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FALLOC_FL_COLLAPSE_RANGE 0x08
 #endif
-#if !(defined(FALLOC_FL_ZERO_RANGE) || (defined(HAVE_DECL_FALLOC_FL_ZERO_RANGE) && HAVE_DECL_FALLOC_FL_ZERO_RANGE))
+#if defined(FALLOC_FL_ZERO_RANGE) || (defined(HAVE_DECL_FALLOC_FL_ZERO_RANGE) && HAVE_DECL_FALLOC_FL_ZERO_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FALLOC_FL_ZERO_RANGE) == (0x10), "FALLOC_FL_ZERO_RANGE != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FALLOC_FL_ZERO_RANGE 0x10
 #endif
-#if !(defined(FALLOC_FL_INSERT_RANGE) || (defined(HAVE_DECL_FALLOC_FL_INSERT_RANGE) && HAVE_DECL_FALLOC_FL_INSERT_RANGE))
+#if defined(FALLOC_FL_INSERT_RANGE) || (defined(HAVE_DECL_FALLOC_FL_INSERT_RANGE) && HAVE_DECL_FALLOC_FL_INSERT_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FALLOC_FL_INSERT_RANGE) == (0x20), "FALLOC_FL_INSERT_RANGE != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FALLOC_FL_INSERT_RANGE 0x20
 #endif
-#if !(defined(FALLOC_FL_UNSHARE_RANGE) || (defined(HAVE_DECL_FALLOC_FL_UNSHARE_RANGE) && HAVE_DECL_FALLOC_FL_UNSHARE_RANGE))
+#if defined(FALLOC_FL_UNSHARE_RANGE) || (defined(HAVE_DECL_FALLOC_FL_UNSHARE_RANGE) && HAVE_DECL_FALLOC_FL_UNSHARE_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FALLOC_FL_UNSHARE_RANGE) == (0x40), "FALLOC_FL_UNSHARE_RANGE != 0x40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FALLOC_FL_UNSHARE_RANGE 0x40
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat falloc_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat falloc_flags in mpers mode
+
+# else
 
 static
 const struct xlat falloc_flags[] = {
@@ -39,4 +73,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fan_classes.h b/xlat/fan_classes.h
index cd26d75..ff4ff95 100644
--- a/xlat/fan_classes.h
+++ b/xlat/fan_classes.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fan_classes.in; do not edit. */
-#if !(defined(FAN_CLASS_NOTIF) || (defined(HAVE_DECL_FAN_CLASS_NOTIF) && HAVE_DECL_FAN_CLASS_NOTIF))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FAN_CLASS_NOTIF) || (defined(HAVE_DECL_FAN_CLASS_NOTIF) && HAVE_DECL_FAN_CLASS_NOTIF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_CLASS_NOTIF) == (0x00000000), "FAN_CLASS_NOTIF != 0x00000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_CLASS_NOTIF 0x00000000
 #endif
-#if !(defined(FAN_CLASS_CONTENT) || (defined(HAVE_DECL_FAN_CLASS_CONTENT) && HAVE_DECL_FAN_CLASS_CONTENT))
+#if defined(FAN_CLASS_CONTENT) || (defined(HAVE_DECL_FAN_CLASS_CONTENT) && HAVE_DECL_FAN_CLASS_CONTENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_CLASS_CONTENT) == (0x00000004), "FAN_CLASS_CONTENT != 0x00000004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_CLASS_CONTENT 0x00000004
 #endif
-#if !(defined(FAN_CLASS_PRE_CONTENT) || (defined(HAVE_DECL_FAN_CLASS_PRE_CONTENT) && HAVE_DECL_FAN_CLASS_PRE_CONTENT))
+#if defined(FAN_CLASS_PRE_CONTENT) || (defined(HAVE_DECL_FAN_CLASS_PRE_CONTENT) && HAVE_DECL_FAN_CLASS_PRE_CONTENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_CLASS_PRE_CONTENT) == (0x00000008), "FAN_CLASS_PRE_CONTENT != 0x00000008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_CLASS_PRE_CONTENT 0x00000008
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat fan_classes in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat fan_classes in mpers mode
+
+# else
 
 static
 const struct xlat fan_classes[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fan_event_flags.h b/xlat/fan_event_flags.h
index 7c19d82..0ac9259 100644
--- a/xlat/fan_event_flags.h
+++ b/xlat/fan_event_flags.h
@@ -1,40 +1,86 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fan_event_flags.in; do not edit. */
-#if !(defined(FAN_ACCESS) || (defined(HAVE_DECL_FAN_ACCESS) && HAVE_DECL_FAN_ACCESS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FAN_ACCESS) || (defined(HAVE_DECL_FAN_ACCESS) && HAVE_DECL_FAN_ACCESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_ACCESS) == (0x00000001), "FAN_ACCESS != 0x00000001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_ACCESS 0x00000001
 #endif
-#if !(defined(FAN_MODIFY) || (defined(HAVE_DECL_FAN_MODIFY) && HAVE_DECL_FAN_MODIFY))
+#if defined(FAN_MODIFY) || (defined(HAVE_DECL_FAN_MODIFY) && HAVE_DECL_FAN_MODIFY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_MODIFY) == (0x00000002), "FAN_MODIFY != 0x00000002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_MODIFY 0x00000002
 #endif
-#if !(defined(FAN_CLOSE_WRITE) || (defined(HAVE_DECL_FAN_CLOSE_WRITE) && HAVE_DECL_FAN_CLOSE_WRITE))
+#if defined(FAN_CLOSE_WRITE) || (defined(HAVE_DECL_FAN_CLOSE_WRITE) && HAVE_DECL_FAN_CLOSE_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_CLOSE_WRITE) == (0x00000008), "FAN_CLOSE_WRITE != 0x00000008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_CLOSE_WRITE 0x00000008
 #endif
-#if !(defined(FAN_CLOSE_NOWRITE) || (defined(HAVE_DECL_FAN_CLOSE_NOWRITE) && HAVE_DECL_FAN_CLOSE_NOWRITE))
+#if defined(FAN_CLOSE_NOWRITE) || (defined(HAVE_DECL_FAN_CLOSE_NOWRITE) && HAVE_DECL_FAN_CLOSE_NOWRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_CLOSE_NOWRITE) == (0x00000010), "FAN_CLOSE_NOWRITE != 0x00000010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_CLOSE_NOWRITE 0x00000010
 #endif
-#if !(defined(FAN_OPEN) || (defined(HAVE_DECL_FAN_OPEN) && HAVE_DECL_FAN_OPEN))
+#if defined(FAN_OPEN) || (defined(HAVE_DECL_FAN_OPEN) && HAVE_DECL_FAN_OPEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_OPEN) == (0x00000020), "FAN_OPEN != 0x00000020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_OPEN 0x00000020
 #endif
-#if !(defined(FAN_Q_OVERFLOW) || (defined(HAVE_DECL_FAN_Q_OVERFLOW) && HAVE_DECL_FAN_Q_OVERFLOW))
+#if defined(FAN_Q_OVERFLOW) || (defined(HAVE_DECL_FAN_Q_OVERFLOW) && HAVE_DECL_FAN_Q_OVERFLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_Q_OVERFLOW) == (0x00004000), "FAN_Q_OVERFLOW != 0x00004000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_Q_OVERFLOW 0x00004000
 #endif
-#if !(defined(FAN_OPEN_PERM) || (defined(HAVE_DECL_FAN_OPEN_PERM) && HAVE_DECL_FAN_OPEN_PERM))
+#if defined(FAN_OPEN_PERM) || (defined(HAVE_DECL_FAN_OPEN_PERM) && HAVE_DECL_FAN_OPEN_PERM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_OPEN_PERM) == (0x00010000), "FAN_OPEN_PERM != 0x00010000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_OPEN_PERM 0x00010000
 #endif
-#if !(defined(FAN_ACCESS_PERM) || (defined(HAVE_DECL_FAN_ACCESS_PERM) && HAVE_DECL_FAN_ACCESS_PERM))
+#if defined(FAN_ACCESS_PERM) || (defined(HAVE_DECL_FAN_ACCESS_PERM) && HAVE_DECL_FAN_ACCESS_PERM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_ACCESS_PERM) == (0x00020000), "FAN_ACCESS_PERM != 0x00020000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_ACCESS_PERM 0x00020000
 #endif
-#if !(defined(FAN_ONDIR) || (defined(HAVE_DECL_FAN_ONDIR) && HAVE_DECL_FAN_ONDIR))
+#if defined(FAN_ONDIR) || (defined(HAVE_DECL_FAN_ONDIR) && HAVE_DECL_FAN_ONDIR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_ONDIR) == (0x40000000), "FAN_ONDIR != 0x40000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_ONDIR 0x40000000
 #endif
-#if !(defined(FAN_EVENT_ON_CHILD) || (defined(HAVE_DECL_FAN_EVENT_ON_CHILD) && HAVE_DECL_FAN_EVENT_ON_CHILD))
+#if defined(FAN_EVENT_ON_CHILD) || (defined(HAVE_DECL_FAN_EVENT_ON_CHILD) && HAVE_DECL_FAN_EVENT_ON_CHILD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_EVENT_ON_CHILD) == (0x08000000), "FAN_EVENT_ON_CHILD != 0x08000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_EVENT_ON_CHILD 0x08000000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat fan_event_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat fan_event_flags in mpers mode
+
+# else
 
 static
 const struct xlat fan_event_flags[] = {
@@ -51,4 +97,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fan_init_flags.h b/xlat/fan_init_flags.h
index b11e47a..0b8ac66 100644
--- a/xlat/fan_init_flags.h
+++ b/xlat/fan_init_flags.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fan_init_flags.in; do not edit. */
-#if !(defined(FAN_CLOEXEC) || (defined(HAVE_DECL_FAN_CLOEXEC) && HAVE_DECL_FAN_CLOEXEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FAN_CLOEXEC) || (defined(HAVE_DECL_FAN_CLOEXEC) && HAVE_DECL_FAN_CLOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_CLOEXEC) == (0x00000001), "FAN_CLOEXEC != 0x00000001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_CLOEXEC 0x00000001
 #endif
-#if !(defined(FAN_NONBLOCK) || (defined(HAVE_DECL_FAN_NONBLOCK) && HAVE_DECL_FAN_NONBLOCK))
+#if defined(FAN_NONBLOCK) || (defined(HAVE_DECL_FAN_NONBLOCK) && HAVE_DECL_FAN_NONBLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_NONBLOCK) == (0x00000002), "FAN_NONBLOCK != 0x00000002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_NONBLOCK 0x00000002
 #endif
-#if !(defined(FAN_UNLIMITED_QUEUE) || (defined(HAVE_DECL_FAN_UNLIMITED_QUEUE) && HAVE_DECL_FAN_UNLIMITED_QUEUE))
+#if defined(FAN_UNLIMITED_QUEUE) || (defined(HAVE_DECL_FAN_UNLIMITED_QUEUE) && HAVE_DECL_FAN_UNLIMITED_QUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_UNLIMITED_QUEUE) == (0x00000010), "FAN_UNLIMITED_QUEUE != 0x00000010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_UNLIMITED_QUEUE 0x00000010
 #endif
-#if !(defined(FAN_UNLIMITED_MARKS) || (defined(HAVE_DECL_FAN_UNLIMITED_MARKS) && HAVE_DECL_FAN_UNLIMITED_MARKS))
+#if defined(FAN_UNLIMITED_MARKS) || (defined(HAVE_DECL_FAN_UNLIMITED_MARKS) && HAVE_DECL_FAN_UNLIMITED_MARKS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_UNLIMITED_MARKS) == (0x00000020), "FAN_UNLIMITED_MARKS != 0x00000020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_UNLIMITED_MARKS 0x00000020
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat fan_init_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat fan_init_flags in mpers mode
+
+# else
 
 static
 const struct xlat fan_init_flags[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fan_mark_flags.h b/xlat/fan_mark_flags.h
index f2f9140..d1d1ec1 100644
--- a/xlat/fan_mark_flags.h
+++ b/xlat/fan_mark_flags.h
@@ -1,34 +1,72 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fan_mark_flags.in; do not edit. */
-#if !(defined(FAN_MARK_ADD) || (defined(HAVE_DECL_FAN_MARK_ADD) && HAVE_DECL_FAN_MARK_ADD))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FAN_MARK_ADD) || (defined(HAVE_DECL_FAN_MARK_ADD) && HAVE_DECL_FAN_MARK_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_MARK_ADD) == (0x00000001), "FAN_MARK_ADD != 0x00000001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_MARK_ADD 0x00000001
 #endif
-#if !(defined(FAN_MARK_REMOVE) || (defined(HAVE_DECL_FAN_MARK_REMOVE) && HAVE_DECL_FAN_MARK_REMOVE))
+#if defined(FAN_MARK_REMOVE) || (defined(HAVE_DECL_FAN_MARK_REMOVE) && HAVE_DECL_FAN_MARK_REMOVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_MARK_REMOVE) == (0x00000002), "FAN_MARK_REMOVE != 0x00000002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_MARK_REMOVE 0x00000002
 #endif
-#if !(defined(FAN_MARK_DONT_FOLLOW) || (defined(HAVE_DECL_FAN_MARK_DONT_FOLLOW) && HAVE_DECL_FAN_MARK_DONT_FOLLOW))
+#if defined(FAN_MARK_DONT_FOLLOW) || (defined(HAVE_DECL_FAN_MARK_DONT_FOLLOW) && HAVE_DECL_FAN_MARK_DONT_FOLLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_MARK_DONT_FOLLOW) == (0x00000004), "FAN_MARK_DONT_FOLLOW != 0x00000004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_MARK_DONT_FOLLOW 0x00000004
 #endif
-#if !(defined(FAN_MARK_ONLYDIR) || (defined(HAVE_DECL_FAN_MARK_ONLYDIR) && HAVE_DECL_FAN_MARK_ONLYDIR))
+#if defined(FAN_MARK_ONLYDIR) || (defined(HAVE_DECL_FAN_MARK_ONLYDIR) && HAVE_DECL_FAN_MARK_ONLYDIR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_MARK_ONLYDIR) == (0x00000008), "FAN_MARK_ONLYDIR != 0x00000008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_MARK_ONLYDIR 0x00000008
 #endif
-#if !(defined(FAN_MARK_MOUNT) || (defined(HAVE_DECL_FAN_MARK_MOUNT) && HAVE_DECL_FAN_MARK_MOUNT))
+#if defined(FAN_MARK_MOUNT) || (defined(HAVE_DECL_FAN_MARK_MOUNT) && HAVE_DECL_FAN_MARK_MOUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_MARK_MOUNT) == (0x00000010), "FAN_MARK_MOUNT != 0x00000010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_MARK_MOUNT 0x00000010
 #endif
-#if !(defined(FAN_MARK_IGNORED_MASK) || (defined(HAVE_DECL_FAN_MARK_IGNORED_MASK) && HAVE_DECL_FAN_MARK_IGNORED_MASK))
+#if defined(FAN_MARK_IGNORED_MASK) || (defined(HAVE_DECL_FAN_MARK_IGNORED_MASK) && HAVE_DECL_FAN_MARK_IGNORED_MASK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_MARK_IGNORED_MASK) == (0x00000020), "FAN_MARK_IGNORED_MASK != 0x00000020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_MARK_IGNORED_MASK 0x00000020
 #endif
-#if !(defined(FAN_MARK_IGNORED_SURV_MODIFY) || (defined(HAVE_DECL_FAN_MARK_IGNORED_SURV_MODIFY) && HAVE_DECL_FAN_MARK_IGNORED_SURV_MODIFY))
+#if defined(FAN_MARK_IGNORED_SURV_MODIFY) || (defined(HAVE_DECL_FAN_MARK_IGNORED_SURV_MODIFY) && HAVE_DECL_FAN_MARK_IGNORED_SURV_MODIFY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_MARK_IGNORED_SURV_MODIFY) == (0x00000040), "FAN_MARK_IGNORED_SURV_MODIFY != 0x00000040");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_MARK_IGNORED_SURV_MODIFY 0x00000040
 #endif
-#if !(defined(FAN_MARK_FLUSH) || (defined(HAVE_DECL_FAN_MARK_FLUSH) && HAVE_DECL_FAN_MARK_FLUSH))
+#if defined(FAN_MARK_FLUSH) || (defined(HAVE_DECL_FAN_MARK_FLUSH) && HAVE_DECL_FAN_MARK_FLUSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FAN_MARK_FLUSH) == (0x00000080), "FAN_MARK_FLUSH != 0x00000080");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FAN_MARK_FLUSH 0x00000080
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat fan_mark_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat fan_mark_flags in mpers mode
+
+# else
 
 static
 const struct xlat fan_mark_flags[] = {
@@ -43,4 +81,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fcntl64cmds.h b/xlat/fcntl64cmds.h
deleted file mode 100644
index 5fef627..0000000
--- a/xlat/fcntl64cmds.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/fcntl64cmds.in; do not edit. */
-#if !(defined(F_GETLK64) || (defined(HAVE_DECL_F_GETLK64) && HAVE_DECL_F_GETLK64))
-# define F_GETLK64 12
-#endif
-#if !(defined(F_SETLK64) || (defined(HAVE_DECL_F_SETLK64) && HAVE_DECL_F_SETLK64))
-# define F_SETLK64 13
-#endif
-#if !(defined(F_SETLKW64) || (defined(HAVE_DECL_F_SETLKW64) && HAVE_DECL_F_SETLKW64))
-# define F_SETLKW64 14
-#endif
-
-#ifdef IN_MPERS
-
-# error static const struct xlat fcntl64cmds in mpers mode
-
-#else
-
-static
-const struct xlat fcntl64cmds[] = {
-
- XLAT(F_GETLK64),
- XLAT(F_SETLK64),
- XLAT(F_SETLKW64),
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/fcntlcmds.h b/xlat/fcntlcmds.h
index 44434f3..ad354de 100644
--- a/xlat/fcntlcmds.h
+++ b/xlat/fcntlcmds.h
@@ -1,91 +1,397 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fcntlcmds.in; do not edit. */
-#if !(defined(F_DUPFD) || (defined(HAVE_DECL_F_DUPFD) && HAVE_DECL_F_DUPFD))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(F_DUPFD) || (defined(HAVE_DECL_F_DUPFD) && HAVE_DECL_F_DUPFD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_DUPFD) == (0), "F_DUPFD != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_DUPFD 0
 #endif
-#if !(defined(F_GETFD) || (defined(HAVE_DECL_F_GETFD) && HAVE_DECL_F_GETFD))
+#if defined(F_GETFD) || (defined(HAVE_DECL_F_GETFD) && HAVE_DECL_F_GETFD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETFD) == (1), "F_GETFD != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GETFD 1
 #endif
-#if !(defined(F_SETFD) || (defined(HAVE_DECL_F_SETFD) && HAVE_DECL_F_SETFD))
+#if defined(F_SETFD) || (defined(HAVE_DECL_F_SETFD) && HAVE_DECL_F_SETFD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETFD) == (2), "F_SETFD != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SETFD 2
 #endif
-#if !(defined(F_GETFL) || (defined(HAVE_DECL_F_GETFL) && HAVE_DECL_F_GETFL))
+#if defined(F_GETFL) || (defined(HAVE_DECL_F_GETFL) && HAVE_DECL_F_GETFL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETFL) == (3), "F_GETFL != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GETFL 3
 #endif
-#if !(defined(F_SETFL) || (defined(HAVE_DECL_F_SETFL) && HAVE_DECL_F_SETFL))
+#if defined(F_SETFL) || (defined(HAVE_DECL_F_SETFL) && HAVE_DECL_F_SETFL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETFL) == (4), "F_SETFL != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SETFL 4
 #endif
-#if !(defined(F_GETLK) || (defined(HAVE_DECL_F_GETLK) && HAVE_DECL_F_GETLK))
+#if defined __alpha__ || defined __sparc__
+#if defined(F_GETLK) || (defined(HAVE_DECL_F_GETLK) && HAVE_DECL_F_GETLK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETLK) == (7), "F_GETLK != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETLK 7
+#endif
+#elif defined __mips__
+#if defined(F_GETLK) || (defined(HAVE_DECL_F_GETLK) && HAVE_DECL_F_GETLK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETLK) == (14), "F_GETLK != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETLK 14
+#endif
+#else
+#if defined(F_GETLK) || (defined(HAVE_DECL_F_GETLK) && HAVE_DECL_F_GETLK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETLK) == (5), "F_GETLK != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GETLK 5
 #endif
-#if !(defined(F_SETLK) || (defined(HAVE_DECL_F_SETLK) && HAVE_DECL_F_SETLK))
+#endif
+#if defined __alpha__ || defined __sparc__
+#if defined(F_SETLK) || (defined(HAVE_DECL_F_SETLK) && HAVE_DECL_F_SETLK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLK) == (8), "F_SETLK != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETLK 8
+#endif
+#if defined(F_SETLKW) || (defined(HAVE_DECL_F_SETLKW) && HAVE_DECL_F_SETLKW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLKW) == (9), "F_SETLKW != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETLKW 9
+#endif
+#else
+#if defined(F_SETLK) || (defined(HAVE_DECL_F_SETLK) && HAVE_DECL_F_SETLK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLK) == (6), "F_SETLK != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SETLK 6
 #endif
-#if !(defined(F_SETLKW) || (defined(HAVE_DECL_F_SETLKW) && HAVE_DECL_F_SETLKW))
+#if defined(F_SETLKW) || (defined(HAVE_DECL_F_SETLKW) && HAVE_DECL_F_SETLKW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLKW) == (7), "F_SETLKW != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SETLKW 7
 #endif
-#if !(defined(F_SETOWN) || (defined(HAVE_DECL_F_SETOWN) && HAVE_DECL_F_SETOWN))
+#endif
+#if defined __alpha__
+#if defined(F_SETOWN) || (defined(HAVE_DECL_F_SETOWN) && HAVE_DECL_F_SETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETOWN) == (5), "F_SETOWN != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETOWN 5
+#endif
+#if defined(F_GETOWN) || (defined(HAVE_DECL_F_GETOWN) && HAVE_DECL_F_GETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETOWN) == (6), "F_GETOWN != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETOWN 6
+#endif
+#elif defined __hppa__
+#if defined(F_GETOWN) || (defined(HAVE_DECL_F_GETOWN) && HAVE_DECL_F_GETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETOWN) == (11), "F_GETOWN != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETOWN 11
+#endif
+#if defined(F_SETOWN) || (defined(HAVE_DECL_F_SETOWN) && HAVE_DECL_F_SETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETOWN) == (12), "F_SETOWN != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETOWN 12
+#endif
+#elif defined __mips__
+#if defined(F_GETOWN) || (defined(HAVE_DECL_F_GETOWN) && HAVE_DECL_F_GETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETOWN) == (23), "F_GETOWN != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETOWN 23
+#endif
+#if defined(F_SETOWN) || (defined(HAVE_DECL_F_SETOWN) && HAVE_DECL_F_SETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETOWN) == (24), "F_SETOWN != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETOWN 24
+#endif
+#elif defined __sparc__
+#if defined(F_GETOWN) || (defined(HAVE_DECL_F_GETOWN) && HAVE_DECL_F_GETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETOWN) == (5), "F_GETOWN != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETOWN 5
+#endif
+#if defined(F_SETOWN) || (defined(HAVE_DECL_F_SETOWN) && HAVE_DECL_F_SETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETOWN) == (6), "F_SETOWN != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETOWN 6
+#endif
+#else
+#if defined(F_SETOWN) || (defined(HAVE_DECL_F_SETOWN) && HAVE_DECL_F_SETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETOWN) == (8), "F_SETOWN != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SETOWN 8
 #endif
-#if !(defined(F_GETOWN) || (defined(HAVE_DECL_F_GETOWN) && HAVE_DECL_F_GETOWN))
+#if defined(F_GETOWN) || (defined(HAVE_DECL_F_GETOWN) && HAVE_DECL_F_GETOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETOWN) == (9), "F_GETOWN != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GETOWN 9
 #endif
-#if !(defined(F_SETSIG) || (defined(HAVE_DECL_F_SETSIG) && HAVE_DECL_F_SETSIG))
+#endif
+#ifdef __hppa__
+#if defined(F_SETSIG) || (defined(HAVE_DECL_F_SETSIG) && HAVE_DECL_F_SETSIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETSIG) == (13), "F_SETSIG != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETSIG 13
+#endif
+#if defined(F_GETSIG) || (defined(HAVE_DECL_F_GETSIG) && HAVE_DECL_F_GETSIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETSIG) == (14), "F_GETSIG != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETSIG 14
+#endif
+#else
+#if defined(F_SETSIG) || (defined(HAVE_DECL_F_SETSIG) && HAVE_DECL_F_SETSIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETSIG) == (10), "F_SETSIG != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SETSIG 10
 #endif
-#if !(defined(F_GETSIG) || (defined(HAVE_DECL_F_GETSIG) && HAVE_DECL_F_GETSIG))
+#if defined(F_GETSIG) || (defined(HAVE_DECL_F_GETSIG) && HAVE_DECL_F_GETSIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETSIG) == (11), "F_GETSIG != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GETSIG 11
 #endif
-#if !(defined(F_SETOWN_EX) || (defined(HAVE_DECL_F_SETOWN_EX) && HAVE_DECL_F_SETOWN_EX))
+#endif
+#if defined __hppa__
+#if defined(F_GETLK64) || (defined(HAVE_DECL_F_GETLK64) && HAVE_DECL_F_GETLK64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETLK64) == (8), "F_GETLK64 != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETLK64 8
+#endif
+#if defined(F_SETLK64) || (defined(HAVE_DECL_F_SETLK64) && HAVE_DECL_F_SETLK64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLK64) == (9), "F_SETLK64 != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETLK64 9
+#endif
+#if defined(F_SETLKW64) || (defined(HAVE_DECL_F_SETLKW64) && HAVE_DECL_F_SETLKW64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLKW64) == (10), "F_SETLKW64 != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETLKW64 10
+#endif
+#elif defined __mips__ && !defined __mips64
+#if defined(F_GETLK64) || (defined(HAVE_DECL_F_GETLK64) && HAVE_DECL_F_GETLK64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETLK64) == (33), "F_GETLK64 != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETLK64 33
+#endif
+#if defined(F_SETLK64) || (defined(HAVE_DECL_F_SETLK64) && HAVE_DECL_F_SETLK64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLK64) == (34), "F_SETLK64 != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETLK64 34
+#endif
+#if defined(F_SETLKW64) || (defined(HAVE_DECL_F_SETLKW64) && HAVE_DECL_F_SETLKW64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLKW64) == (35), "F_SETLKW64 != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETLKW64 35
+#endif
+#else
+#if defined(F_GETLK64) || (defined(HAVE_DECL_F_GETLK64) && HAVE_DECL_F_GETLK64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETLK64) == (12), "F_GETLK64 != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_GETLK64 12
+#endif
+#if defined(F_SETLK64) || (defined(HAVE_DECL_F_SETLK64) && HAVE_DECL_F_SETLK64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLK64) == (13), "F_SETLK64 != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETLK64 13
+#endif
+#if defined(F_SETLKW64) || (defined(HAVE_DECL_F_SETLKW64) && HAVE_DECL_F_SETLKW64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLKW64) == (14), "F_SETLKW64 != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define F_SETLKW64 14
+#endif
+#endif
+#ifndef STRACE_WORKAROUND_FOR_F_OWNER_EX
+# define STRACE_WORKAROUND_FOR_F_OWNER_EX
+# if defined F_SETOWN_EX && F_SETOWN_EX != 15
+#  warning invalid value of F_SETOWN_EX ignored
+# endif
+# undef F_SETOWN_EX
+# if defined F_GETOWN_EX && F_GETOWN_EX != 16
+#  warning invalid value of F_GETOWN_EX ignored
+# endif
+# undef F_GETOWN_EX
+#endif
+#if defined(F_SETOWN_EX) || (defined(HAVE_DECL_F_SETOWN_EX) && HAVE_DECL_F_SETOWN_EX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETOWN_EX) == (15), "F_SETOWN_EX != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SETOWN_EX 15
 #endif
-#if !(defined(F_GETOWN_EX) || (defined(HAVE_DECL_F_GETOWN_EX) && HAVE_DECL_F_GETOWN_EX))
+#if defined(F_GETOWN_EX) || (defined(HAVE_DECL_F_GETOWN_EX) && HAVE_DECL_F_GETOWN_EX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETOWN_EX) == (16), "F_GETOWN_EX != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GETOWN_EX 16
 #endif
-#if !(defined(F_GETOWNER_UIDS) || (defined(HAVE_DECL_F_GETOWNER_UIDS) && HAVE_DECL_F_GETOWNER_UIDS))
+#if defined(F_GETOWNER_UIDS) || (defined(HAVE_DECL_F_GETOWNER_UIDS) && HAVE_DECL_F_GETOWNER_UIDS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETOWNER_UIDS) == (17), "F_GETOWNER_UIDS != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GETOWNER_UIDS 17
 #endif
-#if !(defined(F_OFD_GETLK) || (defined(HAVE_DECL_F_OFD_GETLK) && HAVE_DECL_F_OFD_GETLK))
+#if defined(F_OFD_GETLK) || (defined(HAVE_DECL_F_OFD_GETLK) && HAVE_DECL_F_OFD_GETLK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_OFD_GETLK) == (36), "F_OFD_GETLK != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_OFD_GETLK 36
 #endif
-#if !(defined(F_OFD_SETLK) || (defined(HAVE_DECL_F_OFD_SETLK) && HAVE_DECL_F_OFD_SETLK))
+#if defined(F_OFD_SETLK) || (defined(HAVE_DECL_F_OFD_SETLK) && HAVE_DECL_F_OFD_SETLK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_OFD_SETLK) == (37), "F_OFD_SETLK != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_OFD_SETLK 37
 #endif
-#if !(defined(F_OFD_SETLKW) || (defined(HAVE_DECL_F_OFD_SETLKW) && HAVE_DECL_F_OFD_SETLKW))
+#if defined(F_OFD_SETLKW) || (defined(HAVE_DECL_F_OFD_SETLKW) && HAVE_DECL_F_OFD_SETLKW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_OFD_SETLKW) == (38), "F_OFD_SETLKW != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_OFD_SETLKW 38
 #endif
-#if !(defined(F_SETLEASE) || (defined(HAVE_DECL_F_SETLEASE) && HAVE_DECL_F_SETLEASE))
+#if defined(F_SETLEASE) || (defined(HAVE_DECL_F_SETLEASE) && HAVE_DECL_F_SETLEASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETLEASE) == ((1024 + 0)), "F_SETLEASE != (1024 + 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SETLEASE (1024 + 0)
 #endif
-#if !(defined(F_GETLEASE) || (defined(HAVE_DECL_F_GETLEASE) && HAVE_DECL_F_GETLEASE))
+#if defined(F_GETLEASE) || (defined(HAVE_DECL_F_GETLEASE) && HAVE_DECL_F_GETLEASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETLEASE) == ((1024 + 1)), "F_GETLEASE != (1024 + 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GETLEASE (1024 + 1)
 #endif
-#if !(defined(F_NOTIFY) || (defined(HAVE_DECL_F_NOTIFY) && HAVE_DECL_F_NOTIFY))
+#if defined(F_NOTIFY) || (defined(HAVE_DECL_F_NOTIFY) && HAVE_DECL_F_NOTIFY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_NOTIFY) == ((1024 + 2)), "F_NOTIFY != (1024 + 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_NOTIFY (1024 + 2)
 #endif
-#if !(defined(F_CANCELLK) || (defined(HAVE_DECL_F_CANCELLK) && HAVE_DECL_F_CANCELLK))
+#if defined(F_CANCELLK) || (defined(HAVE_DECL_F_CANCELLK) && HAVE_DECL_F_CANCELLK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_CANCELLK) == ((1024 + 5)), "F_CANCELLK != (1024 + 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_CANCELLK (1024 + 5)
 #endif
-#if !(defined(F_DUPFD_CLOEXEC) || (defined(HAVE_DECL_F_DUPFD_CLOEXEC) && HAVE_DECL_F_DUPFD_CLOEXEC))
+#if defined(F_DUPFD_CLOEXEC) || (defined(HAVE_DECL_F_DUPFD_CLOEXEC) && HAVE_DECL_F_DUPFD_CLOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_DUPFD_CLOEXEC) == ((1024 + 6)), "F_DUPFD_CLOEXEC != (1024 + 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_DUPFD_CLOEXEC (1024 + 6)
 #endif
-#if !(defined(F_SETPIPE_SZ) || (defined(HAVE_DECL_F_SETPIPE_SZ) && HAVE_DECL_F_SETPIPE_SZ))
+#if defined(F_SETPIPE_SZ) || (defined(HAVE_DECL_F_SETPIPE_SZ) && HAVE_DECL_F_SETPIPE_SZ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_SETPIPE_SZ) == ((1024 + 7)), "F_SETPIPE_SZ != (1024 + 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_SETPIPE_SZ (1024 + 7)
 #endif
-#if !(defined(F_GETPIPE_SZ) || (defined(HAVE_DECL_F_GETPIPE_SZ) && HAVE_DECL_F_GETPIPE_SZ))
+#if defined(F_GETPIPE_SZ) || (defined(HAVE_DECL_F_GETPIPE_SZ) && HAVE_DECL_F_GETPIPE_SZ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GETPIPE_SZ) == ((1024 + 8)), "F_GETPIPE_SZ != (1024 + 8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GETPIPE_SZ (1024 + 8)
 #endif
-#if !(defined(F_ADD_SEALS) || (defined(HAVE_DECL_F_ADD_SEALS) && HAVE_DECL_F_ADD_SEALS))
+#if defined(F_ADD_SEALS) || (defined(HAVE_DECL_F_ADD_SEALS) && HAVE_DECL_F_ADD_SEALS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_ADD_SEALS) == ((1024 + 9)), "F_ADD_SEALS != (1024 + 9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_ADD_SEALS (1024 + 9)
 #endif
-#if !(defined(F_GET_SEALS) || (defined(HAVE_DECL_F_GET_SEALS) && HAVE_DECL_F_GET_SEALS))
+#if defined(F_GET_SEALS) || (defined(HAVE_DECL_F_GET_SEALS) && HAVE_DECL_F_GET_SEALS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((F_GET_SEALS) == ((1024 + 10)), "F_GET_SEALS != (1024 + 10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define F_GET_SEALS (1024 + 10)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat fcntlcmds in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat fcntlcmds in mpers mode
+
+# else
 
 static
 const struct xlat fcntlcmds[] = {
@@ -95,15 +401,83 @@
  XLAT(F_SETFD),
  XLAT(F_GETFL),
  XLAT(F_SETFL),
+
+#if defined __alpha__ || defined __sparc__
  XLAT(F_GETLK),
+#elif defined __mips__
+ XLAT(F_GETLK),
+#else
+ XLAT(F_GETLK),
+#endif
+
+#if defined __alpha__ || defined __sparc__
  XLAT(F_SETLK),
  XLAT(F_SETLKW),
+#else
+ XLAT(F_SETLK),
+ XLAT(F_SETLKW),
+#endif
+
+#if defined __alpha__
  XLAT(F_SETOWN),
  XLAT(F_GETOWN),
+#elif defined __hppa__
+ XLAT(F_GETOWN),
+ XLAT(F_SETOWN),
+#elif defined __mips__
+ XLAT(F_GETOWN),
+ XLAT(F_SETOWN),
+#elif defined __sparc__
+ XLAT(F_GETOWN),
+ XLAT(F_SETOWN),
+#else
+ XLAT(F_SETOWN),
+ XLAT(F_GETOWN),
+#endif
+
+#ifdef __hppa__
  XLAT(F_SETSIG),
  XLAT(F_GETSIG),
+#else
+ XLAT(F_SETSIG),
+ XLAT(F_GETSIG),
+#endif
+
+#if defined __hppa__
+ XLAT(F_GETLK64),
+ XLAT(F_SETLK64),
+ XLAT(F_SETLKW64),
+#elif defined __mips__ && !defined __mips64
+ XLAT(F_GETLK64),
+ XLAT(F_SETLK64),
+ XLAT(F_SETLKW64),
+#else
+ XLAT(F_GETLK64),
+ XLAT(F_SETLK64),
+ XLAT(F_SETLKW64),
+#endif
+
+#ifndef STRACE_WORKAROUND_FOR_F_OWNER_EX
+# define STRACE_WORKAROUND_FOR_F_OWNER_EX
+/*
+* Linux kernel commit v2.6.32-rc7~23 has changed values of F_SETOWN_EX
+* and F_GETOWN_EX constants introduced by commit v2.6.32-rc1~96 to fix
+* the conflict with F_GETLK64 and F_SETLK64 constants.
+* Looks like the best way to handle this situation is to pretend that
+* old values of F_SETOWN_EX and F_GETOWN_EX didn't exist.
+*/
+# if defined F_SETOWN_EX && F_SETOWN_EX != 15
+#  warning invalid value of F_SETOWN_EX ignored
+# endif
+# undef F_SETOWN_EX
+# if defined F_GETOWN_EX && F_GETOWN_EX != 16
+#  warning invalid value of F_GETOWN_EX ignored
+# endif
+# undef F_GETOWN_EX
+#endif
  XLAT(F_SETOWN_EX),
  XLAT(F_GETOWN_EX),
+
  XLAT(F_GETOWNER_UIDS),
  XLAT(F_OFD_GETLK),
  XLAT(F_OFD_SETLK),
@@ -122,4 +496,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fcntlcmds.in b/xlat/fcntlcmds.in
index c050836..5602e6f 100644
--- a/xlat/fcntlcmds.in
+++ b/xlat/fcntlcmds.in
@@ -4,15 +4,83 @@
 F_SETFD		2
 F_GETFL		3
 F_SETFL		4
+
+#if defined __alpha__ || defined __sparc__
+F_GETLK		7
+#elif defined __mips__
+F_GETLK		14
+#else
 F_GETLK		5
+#endif
+
+#if defined __alpha__ || defined __sparc__
+F_SETLK		8
+F_SETLKW	9
+#else
 F_SETLK		6
 F_SETLKW	7
+#endif
+
+#if defined __alpha__
+F_SETOWN	5
+F_GETOWN	6
+#elif defined __hppa__
+F_GETOWN	11
+F_SETOWN	12
+#elif defined __mips__
+F_GETOWN	23
+F_SETOWN	24
+#elif defined __sparc__
+F_GETOWN	5
+F_SETOWN	6
+#else
 F_SETOWN	8
 F_GETOWN	9
+#endif
+
+#ifdef __hppa__
+F_SETSIG	13
+F_GETSIG	14
+#else
 F_SETSIG	10
 F_GETSIG	11
+#endif
+
+#if defined __hppa__
+F_GETLK64	8
+F_SETLK64	9
+F_SETLKW64	10
+#elif defined __mips__ && !defined __mips64
+F_GETLK64	33
+F_SETLK64	34
+F_SETLKW64	35
+#else
+F_GETLK64	12
+F_SETLK64	13
+F_SETLKW64	14
+#endif
+
+#ifndef STRACE_WORKAROUND_FOR_F_OWNER_EX
+# define STRACE_WORKAROUND_FOR_F_OWNER_EX
+/*
+ * Linux kernel commit v2.6.32-rc7~23 has changed values of F_SETOWN_EX
+ * and F_GETOWN_EX constants introduced by commit v2.6.32-rc1~96 to fix
+ * the conflict with F_GETLK64 and F_SETLK64 constants.
+ * Looks like the best way to handle this situation is to pretend that
+ * old values of F_SETOWN_EX and F_GETOWN_EX didn't exist.
+ */
+# if defined F_SETOWN_EX && F_SETOWN_EX != 15
+#  warning invalid value of F_SETOWN_EX ignored
+# endif
+# undef F_SETOWN_EX
+# if defined F_GETOWN_EX && F_GETOWN_EX != 16
+#  warning invalid value of F_GETOWN_EX ignored
+# endif
+# undef F_GETOWN_EX
+#endif
 F_SETOWN_EX	15
 F_GETOWN_EX	16
+
 F_GETOWNER_UIDS	17
 F_OFD_GETLK	36
 F_OFD_SETLK	37
diff --git a/xlat/fdflags.h b/xlat/fdflags.h
index 8a5d03c..5d627e3 100644
--- a/xlat/fdflags.h
+++ b/xlat/fdflags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fdflags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat fdflags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat fdflags in mpers mode
+
+# else
 
 static
 const struct xlat fdflags[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fib_rule_actions.h b/xlat/fib_rule_actions.h
index 741b36d..5681ddb 100644
--- a/xlat/fib_rule_actions.h
+++ b/xlat/fib_rule_actions.h
@@ -1,37 +1,79 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FR_ACT_UNSPEC) || (defined(HAVE_DECL_FR_ACT_UNSPEC) && HAVE_DECL_FR_ACT_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FR_ACT_UNSPEC) == (0), "FR_ACT_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(FR_ACT_TO_TBL) || (defined(HAVE_DECL_FR_ACT_TO_TBL) && HAVE_DECL_FR_ACT_TO_TBL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FR_ACT_TO_TBL) == (1), "FR_ACT_TO_TBL != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FR_ACT_TO_TBL 1
 #endif
-#if !(defined(FR_ACT_GOTO) || (defined(HAVE_DECL_FR_ACT_GOTO) && HAVE_DECL_FR_ACT_GOTO))
+#if defined(FR_ACT_GOTO) || (defined(HAVE_DECL_FR_ACT_GOTO) && HAVE_DECL_FR_ACT_GOTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FR_ACT_GOTO) == (2), "FR_ACT_GOTO != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FR_ACT_GOTO 2
 #endif
-#if !(defined(FR_ACT_NOP) || (defined(HAVE_DECL_FR_ACT_NOP) && HAVE_DECL_FR_ACT_NOP))
+#if defined(FR_ACT_NOP) || (defined(HAVE_DECL_FR_ACT_NOP) && HAVE_DECL_FR_ACT_NOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FR_ACT_NOP) == (3), "FR_ACT_NOP != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FR_ACT_NOP 3
 #endif
-#if !(defined(FR_ACT_RES3) || (defined(HAVE_DECL_FR_ACT_RES3) && HAVE_DECL_FR_ACT_RES3))
+#if defined(FR_ACT_RES3) || (defined(HAVE_DECL_FR_ACT_RES3) && HAVE_DECL_FR_ACT_RES3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FR_ACT_RES3) == (4), "FR_ACT_RES3 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FR_ACT_RES3 4
 #endif
-#if !(defined(FR_ACT_RES4) || (defined(HAVE_DECL_FR_ACT_RES4) && HAVE_DECL_FR_ACT_RES4))
+#if defined(FR_ACT_RES4) || (defined(HAVE_DECL_FR_ACT_RES4) && HAVE_DECL_FR_ACT_RES4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FR_ACT_RES4) == (5), "FR_ACT_RES4 != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FR_ACT_RES4 5
 #endif
-#if !(defined(FR_ACT_BLACKHOLE) || (defined(HAVE_DECL_FR_ACT_BLACKHOLE) && HAVE_DECL_FR_ACT_BLACKHOLE))
+#if defined(FR_ACT_BLACKHOLE) || (defined(HAVE_DECL_FR_ACT_BLACKHOLE) && HAVE_DECL_FR_ACT_BLACKHOLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FR_ACT_BLACKHOLE) == (6), "FR_ACT_BLACKHOLE != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FR_ACT_BLACKHOLE 6
 #endif
-#if !(defined(FR_ACT_UNREACHABLE) || (defined(HAVE_DECL_FR_ACT_UNREACHABLE) && HAVE_DECL_FR_ACT_UNREACHABLE))
+#if defined(FR_ACT_UNREACHABLE) || (defined(HAVE_DECL_FR_ACT_UNREACHABLE) && HAVE_DECL_FR_ACT_UNREACHABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FR_ACT_UNREACHABLE) == (7), "FR_ACT_UNREACHABLE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FR_ACT_UNREACHABLE 7
 #endif
-#if !(defined(FR_ACT_PROHIBIT) || (defined(HAVE_DECL_FR_ACT_PROHIBIT) && HAVE_DECL_FR_ACT_PROHIBIT))
+#if defined(FR_ACT_PROHIBIT) || (defined(HAVE_DECL_FR_ACT_PROHIBIT) && HAVE_DECL_FR_ACT_PROHIBIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FR_ACT_PROHIBIT) == (8), "FR_ACT_PROHIBIT != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FR_ACT_PROHIBIT 8
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat fib_rule_actions in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat fib_rule_actions in mpers mode
+
+# else
 
 static
 const struct xlat fib_rule_actions[] = {
@@ -47,4 +89,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fib_rule_flags.h b/xlat/fib_rule_flags.h
index 4f40da1..b395b5a 100644
--- a/xlat/fib_rule_flags.h
+++ b/xlat/fib_rule_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fib_rule_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat fib_rule_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat fib_rule_flags in mpers mode
+
+# else
 
 static
 const struct xlat fib_rule_flags[] = {
@@ -29,4 +35,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fiemap_extent_flags.h b/xlat/fiemap_extent_flags.h
index 629328c..41e85be 100644
--- a/xlat/fiemap_extent_flags.h
+++ b/xlat/fiemap_extent_flags.h
@@ -1,43 +1,93 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fiemap_extent_flags.in; do not edit. */
-#if !(defined(FIEMAP_EXTENT_LAST) || (defined(HAVE_DECL_FIEMAP_EXTENT_LAST) && HAVE_DECL_FIEMAP_EXTENT_LAST))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FIEMAP_EXTENT_LAST) || (defined(HAVE_DECL_FIEMAP_EXTENT_LAST) && HAVE_DECL_FIEMAP_EXTENT_LAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_LAST) == (0x00000001), "FIEMAP_EXTENT_LAST != 0x00000001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_LAST 0x00000001
 #endif
-#if !(defined(FIEMAP_EXTENT_UNKNOWN) || (defined(HAVE_DECL_FIEMAP_EXTENT_UNKNOWN) && HAVE_DECL_FIEMAP_EXTENT_UNKNOWN))
+#if defined(FIEMAP_EXTENT_UNKNOWN) || (defined(HAVE_DECL_FIEMAP_EXTENT_UNKNOWN) && HAVE_DECL_FIEMAP_EXTENT_UNKNOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_UNKNOWN) == (0x00000002), "FIEMAP_EXTENT_UNKNOWN != 0x00000002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_UNKNOWN 0x00000002
 #endif
-#if !(defined(FIEMAP_EXTENT_DELALLOC) || (defined(HAVE_DECL_FIEMAP_EXTENT_DELALLOC) && HAVE_DECL_FIEMAP_EXTENT_DELALLOC))
+#if defined(FIEMAP_EXTENT_DELALLOC) || (defined(HAVE_DECL_FIEMAP_EXTENT_DELALLOC) && HAVE_DECL_FIEMAP_EXTENT_DELALLOC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_DELALLOC) == (0x00000004), "FIEMAP_EXTENT_DELALLOC != 0x00000004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_DELALLOC 0x00000004
 #endif
-#if !(defined(FIEMAP_EXTENT_ENCODED) || (defined(HAVE_DECL_FIEMAP_EXTENT_ENCODED) && HAVE_DECL_FIEMAP_EXTENT_ENCODED))
+#if defined(FIEMAP_EXTENT_ENCODED) || (defined(HAVE_DECL_FIEMAP_EXTENT_ENCODED) && HAVE_DECL_FIEMAP_EXTENT_ENCODED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_ENCODED) == (0x00000008), "FIEMAP_EXTENT_ENCODED != 0x00000008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_ENCODED 0x00000008
 #endif
-#if !(defined(FIEMAP_EXTENT_DATA_ENCRYPTED) || (defined(HAVE_DECL_FIEMAP_EXTENT_DATA_ENCRYPTED) && HAVE_DECL_FIEMAP_EXTENT_DATA_ENCRYPTED))
+#if defined(FIEMAP_EXTENT_DATA_ENCRYPTED) || (defined(HAVE_DECL_FIEMAP_EXTENT_DATA_ENCRYPTED) && HAVE_DECL_FIEMAP_EXTENT_DATA_ENCRYPTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_DATA_ENCRYPTED) == (0x00000080), "FIEMAP_EXTENT_DATA_ENCRYPTED != 0x00000080");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_DATA_ENCRYPTED 0x00000080
 #endif
-#if !(defined(FIEMAP_EXTENT_NOT_ALIGNED) || (defined(HAVE_DECL_FIEMAP_EXTENT_NOT_ALIGNED) && HAVE_DECL_FIEMAP_EXTENT_NOT_ALIGNED))
+#if defined(FIEMAP_EXTENT_NOT_ALIGNED) || (defined(HAVE_DECL_FIEMAP_EXTENT_NOT_ALIGNED) && HAVE_DECL_FIEMAP_EXTENT_NOT_ALIGNED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_NOT_ALIGNED) == (0x00000100), "FIEMAP_EXTENT_NOT_ALIGNED != 0x00000100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_NOT_ALIGNED 0x00000100
 #endif
-#if !(defined(FIEMAP_EXTENT_DATA_INLINE) || (defined(HAVE_DECL_FIEMAP_EXTENT_DATA_INLINE) && HAVE_DECL_FIEMAP_EXTENT_DATA_INLINE))
+#if defined(FIEMAP_EXTENT_DATA_INLINE) || (defined(HAVE_DECL_FIEMAP_EXTENT_DATA_INLINE) && HAVE_DECL_FIEMAP_EXTENT_DATA_INLINE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_DATA_INLINE) == (0x00000200), "FIEMAP_EXTENT_DATA_INLINE != 0x00000200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_DATA_INLINE 0x00000200
 #endif
-#if !(defined(FIEMAP_EXTENT_DATA_TAIL) || (defined(HAVE_DECL_FIEMAP_EXTENT_DATA_TAIL) && HAVE_DECL_FIEMAP_EXTENT_DATA_TAIL))
+#if defined(FIEMAP_EXTENT_DATA_TAIL) || (defined(HAVE_DECL_FIEMAP_EXTENT_DATA_TAIL) && HAVE_DECL_FIEMAP_EXTENT_DATA_TAIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_DATA_TAIL) == (0x00000400), "FIEMAP_EXTENT_DATA_TAIL != 0x00000400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_DATA_TAIL 0x00000400
 #endif
-#if !(defined(FIEMAP_EXTENT_UNWRITTEN) || (defined(HAVE_DECL_FIEMAP_EXTENT_UNWRITTEN) && HAVE_DECL_FIEMAP_EXTENT_UNWRITTEN))
+#if defined(FIEMAP_EXTENT_UNWRITTEN) || (defined(HAVE_DECL_FIEMAP_EXTENT_UNWRITTEN) && HAVE_DECL_FIEMAP_EXTENT_UNWRITTEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_UNWRITTEN) == (0x00000800), "FIEMAP_EXTENT_UNWRITTEN != 0x00000800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_UNWRITTEN 0x00000800
 #endif
-#if !(defined(FIEMAP_EXTENT_MERGED) || (defined(HAVE_DECL_FIEMAP_EXTENT_MERGED) && HAVE_DECL_FIEMAP_EXTENT_MERGED))
+#if defined(FIEMAP_EXTENT_MERGED) || (defined(HAVE_DECL_FIEMAP_EXTENT_MERGED) && HAVE_DECL_FIEMAP_EXTENT_MERGED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_MERGED) == (0x00001000), "FIEMAP_EXTENT_MERGED != 0x00001000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_MERGED 0x00001000
 #endif
-#if !(defined(FIEMAP_EXTENT_SHARED) || (defined(HAVE_DECL_FIEMAP_EXTENT_SHARED) && HAVE_DECL_FIEMAP_EXTENT_SHARED))
+#if defined(FIEMAP_EXTENT_SHARED) || (defined(HAVE_DECL_FIEMAP_EXTENT_SHARED) && HAVE_DECL_FIEMAP_EXTENT_SHARED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_EXTENT_SHARED) == (0x00002000), "FIEMAP_EXTENT_SHARED != 0x00002000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_EXTENT_SHARED 0x00002000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat fiemap_extent_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat fiemap_extent_flags in mpers mode
+
+# else
 
 static
 const struct xlat fiemap_extent_flags[] = {
@@ -55,4 +105,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fiemap_flags.h b/xlat/fiemap_flags.h
index 4f463ef..73395e8 100644
--- a/xlat/fiemap_flags.h
+++ b/xlat/fiemap_flags.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fiemap_flags.in; do not edit. */
-#if !(defined(FIEMAP_FLAG_SYNC) || (defined(HAVE_DECL_FIEMAP_FLAG_SYNC) && HAVE_DECL_FIEMAP_FLAG_SYNC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FIEMAP_FLAG_SYNC) || (defined(HAVE_DECL_FIEMAP_FLAG_SYNC) && HAVE_DECL_FIEMAP_FLAG_SYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_FLAG_SYNC) == (1), "FIEMAP_FLAG_SYNC != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_FLAG_SYNC 1
 #endif
-#if !(defined(FIEMAP_FLAG_XATTR) || (defined(HAVE_DECL_FIEMAP_FLAG_XATTR) && HAVE_DECL_FIEMAP_FLAG_XATTR))
+#if defined(FIEMAP_FLAG_XATTR) || (defined(HAVE_DECL_FIEMAP_FLAG_XATTR) && HAVE_DECL_FIEMAP_FLAG_XATTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_FLAG_XATTR) == (2), "FIEMAP_FLAG_XATTR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_FLAG_XATTR 2
 #endif
-#if !(defined(FIEMAP_FLAG_CACHE) || (defined(HAVE_DECL_FIEMAP_FLAG_CACHE) && HAVE_DECL_FIEMAP_FLAG_CACHE))
+#if defined(FIEMAP_FLAG_CACHE) || (defined(HAVE_DECL_FIEMAP_FLAG_CACHE) && HAVE_DECL_FIEMAP_FLAG_CACHE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FIEMAP_FLAG_CACHE) == (4), "FIEMAP_FLAG_CACHE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FIEMAP_FLAG_CACHE 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat fiemap_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat fiemap_flags in mpers mode
+
+# else
 
 static
 const struct xlat fiemap_flags[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/flockcmds.h b/xlat/flockcmds.h
index 2ccd714..c7cf939 100644
--- a/xlat/flockcmds.h
+++ b/xlat/flockcmds.h
@@ -1,34 +1,72 @@
 /* Generated by ./xlat/gen.sh from ./xlat/flockcmds.in; do not edit. */
-#if !(defined(LOCK_SH) || (defined(HAVE_DECL_LOCK_SH) && HAVE_DECL_LOCK_SH))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(LOCK_SH) || (defined(HAVE_DECL_LOCK_SH) && HAVE_DECL_LOCK_SH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOCK_SH) == (1), "LOCK_SH != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOCK_SH 1
 #endif
-#if !(defined(LOCK_EX) || (defined(HAVE_DECL_LOCK_EX) && HAVE_DECL_LOCK_EX))
+#if defined(LOCK_EX) || (defined(HAVE_DECL_LOCK_EX) && HAVE_DECL_LOCK_EX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOCK_EX) == (2), "LOCK_EX != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOCK_EX 2
 #endif
-#if !(defined(LOCK_NB) || (defined(HAVE_DECL_LOCK_NB) && HAVE_DECL_LOCK_NB))
+#if defined(LOCK_NB) || (defined(HAVE_DECL_LOCK_NB) && HAVE_DECL_LOCK_NB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOCK_NB) == (4), "LOCK_NB != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOCK_NB 4
 #endif
-#if !(defined(LOCK_UN) || (defined(HAVE_DECL_LOCK_UN) && HAVE_DECL_LOCK_UN))
+#if defined(LOCK_UN) || (defined(HAVE_DECL_LOCK_UN) && HAVE_DECL_LOCK_UN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOCK_UN) == (8), "LOCK_UN != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOCK_UN 8
 #endif
-#if !(defined(LOCK_MAND) || (defined(HAVE_DECL_LOCK_MAND) && HAVE_DECL_LOCK_MAND))
+#if defined(LOCK_MAND) || (defined(HAVE_DECL_LOCK_MAND) && HAVE_DECL_LOCK_MAND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOCK_MAND) == (32), "LOCK_MAND != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOCK_MAND 32
 #endif
-#if !(defined(LOCK_RW) || (defined(HAVE_DECL_LOCK_RW) && HAVE_DECL_LOCK_RW))
+#if defined(LOCK_RW) || (defined(HAVE_DECL_LOCK_RW) && HAVE_DECL_LOCK_RW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOCK_RW) == (192), "LOCK_RW != 192");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOCK_RW 192
 #endif
-#if !(defined(LOCK_READ) || (defined(HAVE_DECL_LOCK_READ) && HAVE_DECL_LOCK_READ))
+#if defined(LOCK_READ) || (defined(HAVE_DECL_LOCK_READ) && HAVE_DECL_LOCK_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOCK_READ) == (64), "LOCK_READ != 64");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOCK_READ 64
 #endif
-#if !(defined(LOCK_WRITE) || (defined(HAVE_DECL_LOCK_WRITE) && HAVE_DECL_LOCK_WRITE))
+#if defined(LOCK_WRITE) || (defined(HAVE_DECL_LOCK_WRITE) && HAVE_DECL_LOCK_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOCK_WRITE) == (128), "LOCK_WRITE != 128");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOCK_WRITE 128
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat flockcmds in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat flockcmds in mpers mode
+
+# else
 
 static
 const struct xlat flockcmds[] = {
@@ -43,4 +81,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/fsmagic.h b/xlat/fsmagic.h
index 8ca93da..16ad277 100644
--- a/xlat/fsmagic.h
+++ b/xlat/fsmagic.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/fsmagic.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat fsmagic in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat fsmagic in mpers mode
+
+# else
 
 static
 const struct xlat fsmagic[] = {
@@ -114,4 +120,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/futexops.h b/xlat/futexops.h
index 4efc761..562f6af 100644
--- a/xlat/futexops.h
+++ b/xlat/futexops.h
@@ -1,85 +1,191 @@
 /* Generated by ./xlat/gen.sh from ./xlat/futexops.in; do not edit. */
-#if !(defined(FUTEX_WAIT) || (defined(HAVE_DECL_FUTEX_WAIT) && HAVE_DECL_FUTEX_WAIT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FUTEX_WAIT) || (defined(HAVE_DECL_FUTEX_WAIT) && HAVE_DECL_FUTEX_WAIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAIT) == (0), "FUTEX_WAIT != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAIT 0
 #endif
-#if !(defined(FUTEX_WAKE) || (defined(HAVE_DECL_FUTEX_WAKE) && HAVE_DECL_FUTEX_WAKE))
+#if defined(FUTEX_WAKE) || (defined(HAVE_DECL_FUTEX_WAKE) && HAVE_DECL_FUTEX_WAKE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAKE) == (1), "FUTEX_WAKE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAKE 1
 #endif
-#if !(defined(FUTEX_FD) || (defined(HAVE_DECL_FUTEX_FD) && HAVE_DECL_FUTEX_FD))
+#if defined(FUTEX_FD) || (defined(HAVE_DECL_FUTEX_FD) && HAVE_DECL_FUTEX_FD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_FD) == (2), "FUTEX_FD != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_FD 2
 #endif
-#if !(defined(FUTEX_REQUEUE) || (defined(HAVE_DECL_FUTEX_REQUEUE) && HAVE_DECL_FUTEX_REQUEUE))
+#if defined(FUTEX_REQUEUE) || (defined(HAVE_DECL_FUTEX_REQUEUE) && HAVE_DECL_FUTEX_REQUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_REQUEUE) == (3), "FUTEX_REQUEUE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_REQUEUE 3
 #endif
-#if !(defined(FUTEX_CMP_REQUEUE) || (defined(HAVE_DECL_FUTEX_CMP_REQUEUE) && HAVE_DECL_FUTEX_CMP_REQUEUE))
+#if defined(FUTEX_CMP_REQUEUE) || (defined(HAVE_DECL_FUTEX_CMP_REQUEUE) && HAVE_DECL_FUTEX_CMP_REQUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_CMP_REQUEUE) == (4), "FUTEX_CMP_REQUEUE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_CMP_REQUEUE 4
 #endif
-#if !(defined(FUTEX_WAKE_OP) || (defined(HAVE_DECL_FUTEX_WAKE_OP) && HAVE_DECL_FUTEX_WAKE_OP))
+#if defined(FUTEX_WAKE_OP) || (defined(HAVE_DECL_FUTEX_WAKE_OP) && HAVE_DECL_FUTEX_WAKE_OP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAKE_OP) == (5), "FUTEX_WAKE_OP != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAKE_OP 5
 #endif
-#if !(defined(FUTEX_LOCK_PI) || (defined(HAVE_DECL_FUTEX_LOCK_PI) && HAVE_DECL_FUTEX_LOCK_PI))
+#if defined(FUTEX_LOCK_PI) || (defined(HAVE_DECL_FUTEX_LOCK_PI) && HAVE_DECL_FUTEX_LOCK_PI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_LOCK_PI) == (6), "FUTEX_LOCK_PI != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_LOCK_PI 6
 #endif
-#if !(defined(FUTEX_UNLOCK_PI) || (defined(HAVE_DECL_FUTEX_UNLOCK_PI) && HAVE_DECL_FUTEX_UNLOCK_PI))
+#if defined(FUTEX_UNLOCK_PI) || (defined(HAVE_DECL_FUTEX_UNLOCK_PI) && HAVE_DECL_FUTEX_UNLOCK_PI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_UNLOCK_PI) == (7), "FUTEX_UNLOCK_PI != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_UNLOCK_PI 7
 #endif
-#if !(defined(FUTEX_TRYLOCK_PI) || (defined(HAVE_DECL_FUTEX_TRYLOCK_PI) && HAVE_DECL_FUTEX_TRYLOCK_PI))
+#if defined(FUTEX_TRYLOCK_PI) || (defined(HAVE_DECL_FUTEX_TRYLOCK_PI) && HAVE_DECL_FUTEX_TRYLOCK_PI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_TRYLOCK_PI) == (8), "FUTEX_TRYLOCK_PI != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_TRYLOCK_PI 8
 #endif
-#if !(defined(FUTEX_WAIT_BITSET) || (defined(HAVE_DECL_FUTEX_WAIT_BITSET) && HAVE_DECL_FUTEX_WAIT_BITSET))
+#if defined(FUTEX_WAIT_BITSET) || (defined(HAVE_DECL_FUTEX_WAIT_BITSET) && HAVE_DECL_FUTEX_WAIT_BITSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAIT_BITSET) == (9), "FUTEX_WAIT_BITSET != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAIT_BITSET 9
 #endif
-#if !(defined(FUTEX_WAKE_BITSET) || (defined(HAVE_DECL_FUTEX_WAKE_BITSET) && HAVE_DECL_FUTEX_WAKE_BITSET))
+#if defined(FUTEX_WAKE_BITSET) || (defined(HAVE_DECL_FUTEX_WAKE_BITSET) && HAVE_DECL_FUTEX_WAKE_BITSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAKE_BITSET) == (10), "FUTEX_WAKE_BITSET != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAKE_BITSET 10
 #endif
-#if !(defined(FUTEX_WAIT_REQUEUE_PI) || (defined(HAVE_DECL_FUTEX_WAIT_REQUEUE_PI) && HAVE_DECL_FUTEX_WAIT_REQUEUE_PI))
+#if defined(FUTEX_WAIT_REQUEUE_PI) || (defined(HAVE_DECL_FUTEX_WAIT_REQUEUE_PI) && HAVE_DECL_FUTEX_WAIT_REQUEUE_PI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAIT_REQUEUE_PI) == (11), "FUTEX_WAIT_REQUEUE_PI != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAIT_REQUEUE_PI 11
 #endif
-#if !(defined(FUTEX_CMP_REQUEUE_PI) || (defined(HAVE_DECL_FUTEX_CMP_REQUEUE_PI) && HAVE_DECL_FUTEX_CMP_REQUEUE_PI))
+#if defined(FUTEX_CMP_REQUEUE_PI) || (defined(HAVE_DECL_FUTEX_CMP_REQUEUE_PI) && HAVE_DECL_FUTEX_CMP_REQUEUE_PI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_CMP_REQUEUE_PI) == (12), "FUTEX_CMP_REQUEUE_PI != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_CMP_REQUEUE_PI 12
 #endif
-#if !(defined(FUTEX_WAIT_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAIT_PRIVATE) && HAVE_DECL_FUTEX_WAIT_PRIVATE))
+#if defined(FUTEX_WAIT_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAIT_PRIVATE) && HAVE_DECL_FUTEX_WAIT_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAIT_PRIVATE) == ((FUTEX_WAIT | FUTEX_PRIVATE_FLAG)), "FUTEX_WAIT_PRIVATE != (FUTEX_WAIT | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAIT_PRIVATE (FUTEX_WAIT | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_WAKE_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAKE_PRIVATE) && HAVE_DECL_FUTEX_WAKE_PRIVATE))
+#if defined(FUTEX_WAKE_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAKE_PRIVATE) && HAVE_DECL_FUTEX_WAKE_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAKE_PRIVATE) == ((FUTEX_WAKE | FUTEX_PRIVATE_FLAG)), "FUTEX_WAKE_PRIVATE != (FUTEX_WAKE | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAKE_PRIVATE (FUTEX_WAKE | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_REQUEUE_PRIVATE) || (defined(HAVE_DECL_FUTEX_REQUEUE_PRIVATE) && HAVE_DECL_FUTEX_REQUEUE_PRIVATE))
+#if defined(FUTEX_REQUEUE_PRIVATE) || (defined(HAVE_DECL_FUTEX_REQUEUE_PRIVATE) && HAVE_DECL_FUTEX_REQUEUE_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_REQUEUE_PRIVATE) == ((FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG)), "FUTEX_REQUEUE_PRIVATE != (FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_REQUEUE_PRIVATE (FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_CMP_REQUEUE_PRIVATE) || (defined(HAVE_DECL_FUTEX_CMP_REQUEUE_PRIVATE) && HAVE_DECL_FUTEX_CMP_REQUEUE_PRIVATE))
+#if defined(FUTEX_CMP_REQUEUE_PRIVATE) || (defined(HAVE_DECL_FUTEX_CMP_REQUEUE_PRIVATE) && HAVE_DECL_FUTEX_CMP_REQUEUE_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_CMP_REQUEUE_PRIVATE) == ((FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG)), "FUTEX_CMP_REQUEUE_PRIVATE != (FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_CMP_REQUEUE_PRIVATE (FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_WAKE_OP_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAKE_OP_PRIVATE) && HAVE_DECL_FUTEX_WAKE_OP_PRIVATE))
+#if defined(FUTEX_WAKE_OP_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAKE_OP_PRIVATE) && HAVE_DECL_FUTEX_WAKE_OP_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAKE_OP_PRIVATE) == ((FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG)), "FUTEX_WAKE_OP_PRIVATE != (FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAKE_OP_PRIVATE (FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_LOCK_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_LOCK_PI_PRIVATE) && HAVE_DECL_FUTEX_LOCK_PI_PRIVATE))
+#if defined(FUTEX_LOCK_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_LOCK_PI_PRIVATE) && HAVE_DECL_FUTEX_LOCK_PI_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_LOCK_PI_PRIVATE) == ((FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG)), "FUTEX_LOCK_PI_PRIVATE != (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_LOCK_PI_PRIVATE (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_UNLOCK_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_UNLOCK_PI_PRIVATE) && HAVE_DECL_FUTEX_UNLOCK_PI_PRIVATE))
+#if defined(FUTEX_UNLOCK_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_UNLOCK_PI_PRIVATE) && HAVE_DECL_FUTEX_UNLOCK_PI_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_UNLOCK_PI_PRIVATE) == ((FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG)), "FUTEX_UNLOCK_PI_PRIVATE != (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_UNLOCK_PI_PRIVATE (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_TRYLOCK_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_TRYLOCK_PI_PRIVATE) && HAVE_DECL_FUTEX_TRYLOCK_PI_PRIVATE))
+#if defined(FUTEX_TRYLOCK_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_TRYLOCK_PI_PRIVATE) && HAVE_DECL_FUTEX_TRYLOCK_PI_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_TRYLOCK_PI_PRIVATE) == ((FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)), "FUTEX_TRYLOCK_PI_PRIVATE != (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_TRYLOCK_PI_PRIVATE (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_WAIT_BITSET_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAIT_BITSET_PRIVATE) && HAVE_DECL_FUTEX_WAIT_BITSET_PRIVATE))
+#if defined(FUTEX_WAIT_BITSET_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAIT_BITSET_PRIVATE) && HAVE_DECL_FUTEX_WAIT_BITSET_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAIT_BITSET_PRIVATE) == ((FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG)), "FUTEX_WAIT_BITSET_PRIVATE != (FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAIT_BITSET_PRIVATE (FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_WAKE_BITSET_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAKE_BITSET_PRIVATE) && HAVE_DECL_FUTEX_WAKE_BITSET_PRIVATE))
+#if defined(FUTEX_WAKE_BITSET_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAKE_BITSET_PRIVATE) && HAVE_DECL_FUTEX_WAKE_BITSET_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAKE_BITSET_PRIVATE) == ((FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)), "FUTEX_WAKE_BITSET_PRIVATE != (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAKE_BITSET_PRIVATE (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_WAIT_REQUEUE_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAIT_REQUEUE_PI_PRIVATE) && HAVE_DECL_FUTEX_WAIT_REQUEUE_PI_PRIVATE))
+#if defined(FUTEX_WAIT_REQUEUE_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_WAIT_REQUEUE_PI_PRIVATE) && HAVE_DECL_FUTEX_WAIT_REQUEUE_PI_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_WAIT_REQUEUE_PI_PRIVATE) == ((FUTEX_WAIT_REQUEUE_PI | FUTEX_PRIVATE_FLAG)), "FUTEX_WAIT_REQUEUE_PI_PRIVATE != (FUTEX_WAIT_REQUEUE_PI | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_WAIT_REQUEUE_PI_PRIVATE (FUTEX_WAIT_REQUEUE_PI | FUTEX_PRIVATE_FLAG)
 #endif
-#if !(defined(FUTEX_CMP_REQUEUE_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_CMP_REQUEUE_PI_PRIVATE) && HAVE_DECL_FUTEX_CMP_REQUEUE_PI_PRIVATE))
+#if defined(FUTEX_CMP_REQUEUE_PI_PRIVATE) || (defined(HAVE_DECL_FUTEX_CMP_REQUEUE_PI_PRIVATE) && HAVE_DECL_FUTEX_CMP_REQUEUE_PI_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_CMP_REQUEUE_PI_PRIVATE) == ((FUTEX_CMP_REQUEUE_PI | FUTEX_PRIVATE_FLAG)), "FUTEX_CMP_REQUEUE_PI_PRIVATE != (FUTEX_CMP_REQUEUE_PI | FUTEX_PRIVATE_FLAG)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_CMP_REQUEUE_PI_PRIVATE (FUTEX_CMP_REQUEUE_PI | FUTEX_PRIVATE_FLAG)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat futexops in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat futexops in mpers mode
+
+# else
 
 static
 const struct xlat futexops[] = {
@@ -132,4 +238,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/futexwakecmps.h b/xlat/futexwakecmps.h
index 379e0a0..b0ee5b0 100644
--- a/xlat/futexwakecmps.h
+++ b/xlat/futexwakecmps.h
@@ -1,28 +1,58 @@
 /* Generated by ./xlat/gen.sh from ./xlat/futexwakecmps.in; do not edit. */
-#if !(defined(FUTEX_OP_CMP_EQ) || (defined(HAVE_DECL_FUTEX_OP_CMP_EQ) && HAVE_DECL_FUTEX_OP_CMP_EQ))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FUTEX_OP_CMP_EQ) || (defined(HAVE_DECL_FUTEX_OP_CMP_EQ) && HAVE_DECL_FUTEX_OP_CMP_EQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_CMP_EQ) == (0), "FUTEX_OP_CMP_EQ != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_CMP_EQ 0
 #endif
-#if !(defined(FUTEX_OP_CMP_NE) || (defined(HAVE_DECL_FUTEX_OP_CMP_NE) && HAVE_DECL_FUTEX_OP_CMP_NE))
+#if defined(FUTEX_OP_CMP_NE) || (defined(HAVE_DECL_FUTEX_OP_CMP_NE) && HAVE_DECL_FUTEX_OP_CMP_NE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_CMP_NE) == (1), "FUTEX_OP_CMP_NE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_CMP_NE 1
 #endif
-#if !(defined(FUTEX_OP_CMP_LT) || (defined(HAVE_DECL_FUTEX_OP_CMP_LT) && HAVE_DECL_FUTEX_OP_CMP_LT))
+#if defined(FUTEX_OP_CMP_LT) || (defined(HAVE_DECL_FUTEX_OP_CMP_LT) && HAVE_DECL_FUTEX_OP_CMP_LT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_CMP_LT) == (2), "FUTEX_OP_CMP_LT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_CMP_LT 2
 #endif
-#if !(defined(FUTEX_OP_CMP_LE) || (defined(HAVE_DECL_FUTEX_OP_CMP_LE) && HAVE_DECL_FUTEX_OP_CMP_LE))
+#if defined(FUTEX_OP_CMP_LE) || (defined(HAVE_DECL_FUTEX_OP_CMP_LE) && HAVE_DECL_FUTEX_OP_CMP_LE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_CMP_LE) == (3), "FUTEX_OP_CMP_LE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_CMP_LE 3
 #endif
-#if !(defined(FUTEX_OP_CMP_GT) || (defined(HAVE_DECL_FUTEX_OP_CMP_GT) && HAVE_DECL_FUTEX_OP_CMP_GT))
+#if defined(FUTEX_OP_CMP_GT) || (defined(HAVE_DECL_FUTEX_OP_CMP_GT) && HAVE_DECL_FUTEX_OP_CMP_GT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_CMP_GT) == (4), "FUTEX_OP_CMP_GT != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_CMP_GT 4
 #endif
-#if !(defined(FUTEX_OP_CMP_GE) || (defined(HAVE_DECL_FUTEX_OP_CMP_GE) && HAVE_DECL_FUTEX_OP_CMP_GE))
+#if defined(FUTEX_OP_CMP_GE) || (defined(HAVE_DECL_FUTEX_OP_CMP_GE) && HAVE_DECL_FUTEX_OP_CMP_GE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_CMP_GE) == (5), "FUTEX_OP_CMP_GE != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_CMP_GE 5
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat futexwakecmps in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat futexwakecmps in mpers mode
+
+# else
 
 static
 const struct xlat futexwakecmps[] = {
@@ -35,4 +65,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/futexwakeops.h b/xlat/futexwakeops.h
index cd9b6b5..b643353 100644
--- a/xlat/futexwakeops.h
+++ b/xlat/futexwakeops.h
@@ -1,25 +1,51 @@
 /* Generated by ./xlat/gen.sh from ./xlat/futexwakeops.in; do not edit. */
-#if !(defined(FUTEX_OP_SET) || (defined(HAVE_DECL_FUTEX_OP_SET) && HAVE_DECL_FUTEX_OP_SET))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FUTEX_OP_SET) || (defined(HAVE_DECL_FUTEX_OP_SET) && HAVE_DECL_FUTEX_OP_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_SET) == (0), "FUTEX_OP_SET != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_SET 0
 #endif
-#if !(defined(FUTEX_OP_ADD) || (defined(HAVE_DECL_FUTEX_OP_ADD) && HAVE_DECL_FUTEX_OP_ADD))
+#if defined(FUTEX_OP_ADD) || (defined(HAVE_DECL_FUTEX_OP_ADD) && HAVE_DECL_FUTEX_OP_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_ADD) == (1), "FUTEX_OP_ADD != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_ADD 1
 #endif
-#if !(defined(FUTEX_OP_OR) || (defined(HAVE_DECL_FUTEX_OP_OR) && HAVE_DECL_FUTEX_OP_OR))
+#if defined(FUTEX_OP_OR) || (defined(HAVE_DECL_FUTEX_OP_OR) && HAVE_DECL_FUTEX_OP_OR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_OR) == (2), "FUTEX_OP_OR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_OR 2
 #endif
-#if !(defined(FUTEX_OP_ANDN) || (defined(HAVE_DECL_FUTEX_OP_ANDN) && HAVE_DECL_FUTEX_OP_ANDN))
+#if defined(FUTEX_OP_ANDN) || (defined(HAVE_DECL_FUTEX_OP_ANDN) && HAVE_DECL_FUTEX_OP_ANDN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_ANDN) == (3), "FUTEX_OP_ANDN != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_ANDN 3
 #endif
-#if !(defined(FUTEX_OP_XOR) || (defined(HAVE_DECL_FUTEX_OP_XOR) && HAVE_DECL_FUTEX_OP_XOR))
+#if defined(FUTEX_OP_XOR) || (defined(HAVE_DECL_FUTEX_OP_XOR) && HAVE_DECL_FUTEX_OP_XOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FUTEX_OP_XOR) == (4), "FUTEX_OP_XOR != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FUTEX_OP_XOR 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat futexwakeops in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat futexwakeops in mpers mode
+
+# else
 
 static
 const struct xlat futexwakeops[] = {
@@ -31,4 +57,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/gen.sh b/xlat/gen.sh
index 170163c..81f2096 100755
--- a/xlat/gen.sh
+++ b/xlat/gen.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -eu
 #
 # Copyright (c) 2014-2015 Mike Frysinger <vapier@gentoo.org>
 # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
@@ -45,7 +45,7 @@
 
 	local val
 	val="$(printf %s "$line" |
-		sed -r -n 's/^([^[:space:]]+).*$/\1/p')"
+		LC_ALL=C sed -r -n 's/^([[:alpha:]_][[:alnum:]_]*).*$/\1/p')"
 
 	local def
 	def="$(printf %s "${line}" |
@@ -53,7 +53,11 @@
 
 	if [ -n "$def" ]; then
 		cat <<-EOF
-		#if !(defined($val) || (defined(HAVE_DECL_$val) && HAVE_DECL_$val))
+		#if defined($val) || (defined(HAVE_DECL_$val) && HAVE_DECL_$val)
+		DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+		static_assert(($val) == ($def), "$val != $def");
+		DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+		#else
 		# define $val $def
 		#endif
 		EOF
@@ -65,6 +69,7 @@
 	local val
 	val="$1"; shift
 
+	[ 1 = "$value_indexed" ] && printf " [%s] =" "${val}"
 	if [ -z "${val_type-}" ]; then
 		echo " XLAT(${val}),"
 	else
@@ -78,6 +83,7 @@
 	val="$1"; shift
 	str="$1"; shift
 
+	[ 1 = "$value_indexed" ] && printf " [%s] =" "${val}"
 	if [ -z "${val_type-}" ]; then
 		echo " XLAT_PAIR(${val}, \"${str}\"),"
 	else
@@ -123,13 +129,21 @@
 	local decl="extern const struct xlat ${name}[];"
 	local in_defs= in_mpers=
 
+	value_indexed=0
+
 	if grep -F -x "$decl" "$defs" > /dev/null; then
 		in_defs=1
 	elif grep -F -x "$decl" "$mpers" > /dev/null; then
 		in_mpers=1
 	fi
 
-	echo "/* Generated by $0 from $1; do not edit. */"
+	cat <<-EOF
+	/* Generated by $0 from $1; do not edit. */
+
+	#include "gcc_compat.h"
+	#include "static_assert.h"
+
+	EOF
 
 	local unconditional= line
 	# 1st pass: output directives.
@@ -151,6 +165,9 @@
 		'#val_type '*)
 			# to be processed during 2nd pass
 			;;
+		'#value_indexed')
+			value_indexed=1
+			;;
 		'#'*)
 			echo "${line}"
 			;;
@@ -161,35 +178,41 @@
 		esac
 	done < "$input"
 
-	echo
+	cat <<-EOF
+
+		#ifndef XLAT_MACROS_ONLY
+
+	EOF
+
 	if [ -n "$in_defs" ]; then
 		cat <<-EOF
-			#ifndef IN_MPERS
+			# ifndef IN_MPERS
 
 		EOF
 	elif [ -n "$in_mpers" ]; then
 		cat <<-EOF
-			#ifdef IN_MPERS
+			# ifdef IN_MPERS
 
 			${decl}
 
-			#else
+			# else
 
-			# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+			#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 			static
-			# endif
+			#  endif
 		EOF
 	else
 		cat <<-EOF
-			#ifdef IN_MPERS
+			# ifdef IN_MPERS
 
-			# error static const struct xlat ${name} in mpers mode
+			#  error static const struct xlat ${name} in mpers mode
 
-			#else
+			# else
 
 			static
 		EOF
 	fi
+
 	echo "const struct xlat ${name}[] = {"
 
 	unconditional= val_type=
@@ -206,6 +229,8 @@
 		'#unconditional')
 			unconditional=1
 			;;
+		'#value_indexed')
+			;;
 		'#val_type '*)
 			val_type="${line#\#val_type }"
 			;;
@@ -236,7 +261,9 @@
 	cat <<-EOF
 		};
 
-		#endif /* !IN_MPERS */
+		# endif /* !IN_MPERS */
+
+		#endif /* !XLAT_MACROS_ONLY */
 	EOF
 	) >"${output}"
 }
diff --git a/xlat/getrandom_flags.h b/xlat/getrandom_flags.h
index 6b88199..e2877d1 100644
--- a/xlat/getrandom_flags.h
+++ b/xlat/getrandom_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/getrandom_flags.in; do not edit. */
-#if !(defined(GRND_NONBLOCK) || (defined(HAVE_DECL_GRND_NONBLOCK) && HAVE_DECL_GRND_NONBLOCK))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(GRND_NONBLOCK) || (defined(HAVE_DECL_GRND_NONBLOCK) && HAVE_DECL_GRND_NONBLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GRND_NONBLOCK) == (1), "GRND_NONBLOCK != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define GRND_NONBLOCK 1
 #endif
-#if !(defined(GRND_RANDOM) || (defined(HAVE_DECL_GRND_RANDOM) && HAVE_DECL_GRND_RANDOM))
+#if defined(GRND_RANDOM) || (defined(HAVE_DECL_GRND_RANDOM) && HAVE_DECL_GRND_RANDOM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GRND_RANDOM) == (2), "GRND_RANDOM != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define GRND_RANDOM 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat getrandom_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat getrandom_flags in mpers mode
+
+# else
 
 static
 const struct xlat getrandom_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/getsock_ip_options.h b/xlat/getsock_ip_options.h
new file mode 100644
index 0000000..ca4bd9e
--- /dev/null
+++ b/xlat/getsock_ip_options.h
@@ -0,0 +1,91 @@
+/* Generated by ./xlat/gen.sh from ./xlat/getsock_ip_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat getsock_ip_options in mpers mode
+
+# else
+
+static
+const struct xlat getsock_ip_options[] = {
+/*
+* Options specific to getsockopt(SOL_IP).
+* Common {g,s}etsockopt(SOL_IP) options
+* should be in sock_ip_options.in instead.
+*/
+
+#if defined(ARPT_SO_GET_INFO) || (defined(HAVE_DECL_ARPT_SO_GET_INFO) && HAVE_DECL_ARPT_SO_GET_INFO)
+  XLAT(ARPT_SO_GET_INFO),
+#endif
+#if defined(ARPT_SO_GET_ENTRIES) || (defined(HAVE_DECL_ARPT_SO_GET_ENTRIES) && HAVE_DECL_ARPT_SO_GET_ENTRIES)
+  XLAT(ARPT_SO_GET_ENTRIES),
+#endif
+#if defined(ARPT_SO_GET_REVISION_MATCH) || (defined(HAVE_DECL_ARPT_SO_GET_REVISION_MATCH) && HAVE_DECL_ARPT_SO_GET_REVISION_MATCH)
+  XLAT(ARPT_SO_GET_REVISION_MATCH),
+#endif
+#if defined(ARPT_SO_GET_REVISION_TARGET) || (defined(HAVE_DECL_ARPT_SO_GET_REVISION_TARGET) && HAVE_DECL_ARPT_SO_GET_REVISION_TARGET)
+  XLAT(ARPT_SO_GET_REVISION_TARGET),
+#endif
+
+#if defined(EBT_SO_GET_INFO) || (defined(HAVE_DECL_EBT_SO_GET_INFO) && HAVE_DECL_EBT_SO_GET_INFO)
+  XLAT(EBT_SO_GET_INFO),
+#endif
+#if defined(EBT_SO_GET_ENTRIES) || (defined(HAVE_DECL_EBT_SO_GET_ENTRIES) && HAVE_DECL_EBT_SO_GET_ENTRIES)
+  XLAT(EBT_SO_GET_ENTRIES),
+#endif
+#if defined(EBT_SO_GET_INIT_INFO) || (defined(HAVE_DECL_EBT_SO_GET_INIT_INFO) && HAVE_DECL_EBT_SO_GET_INIT_INFO)
+  XLAT(EBT_SO_GET_INIT_INFO),
+#endif
+#if defined(EBT_SO_GET_INIT_ENTRIES) || (defined(HAVE_DECL_EBT_SO_GET_INIT_ENTRIES) && HAVE_DECL_EBT_SO_GET_INIT_ENTRIES)
+  XLAT(EBT_SO_GET_INIT_ENTRIES),
+#endif
+
+#if defined(IP_VS_SO_GET_VERSION) || (defined(HAVE_DECL_IP_VS_SO_GET_VERSION) && HAVE_DECL_IP_VS_SO_GET_VERSION)
+  XLAT(IP_VS_SO_GET_VERSION),
+#endif
+#if defined(IP_VS_SO_GET_INFO) || (defined(HAVE_DECL_IP_VS_SO_GET_INFO) && HAVE_DECL_IP_VS_SO_GET_INFO)
+  XLAT(IP_VS_SO_GET_INFO),
+#endif
+#if defined(IP_VS_SO_GET_SERVICES) || (defined(HAVE_DECL_IP_VS_SO_GET_SERVICES) && HAVE_DECL_IP_VS_SO_GET_SERVICES)
+  XLAT(IP_VS_SO_GET_SERVICES),
+#endif
+#if defined(IP_VS_SO_GET_SERVICE) || (defined(HAVE_DECL_IP_VS_SO_GET_SERVICE) && HAVE_DECL_IP_VS_SO_GET_SERVICE)
+  XLAT(IP_VS_SO_GET_SERVICE),
+#endif
+#if defined(IP_VS_SO_GET_DESTS) || (defined(HAVE_DECL_IP_VS_SO_GET_DESTS) && HAVE_DECL_IP_VS_SO_GET_DESTS)
+  XLAT(IP_VS_SO_GET_DESTS),
+#endif
+#if defined(IP_VS_SO_GET_DEST) || (defined(HAVE_DECL_IP_VS_SO_GET_DEST) && HAVE_DECL_IP_VS_SO_GET_DEST)
+  XLAT(IP_VS_SO_GET_DEST),
+#endif
+#if defined(IP_VS_SO_GET_TIMEOUT) || (defined(HAVE_DECL_IP_VS_SO_GET_TIMEOUT) && HAVE_DECL_IP_VS_SO_GET_TIMEOUT)
+  XLAT(IP_VS_SO_GET_TIMEOUT),
+#endif
+#if defined(IP_VS_SO_GET_DAEMON) || (defined(HAVE_DECL_IP_VS_SO_GET_DAEMON) && HAVE_DECL_IP_VS_SO_GET_DAEMON)
+  XLAT(IP_VS_SO_GET_DAEMON),
+#endif
+
+#if defined(IPT_SO_GET_INFO) || (defined(HAVE_DECL_IPT_SO_GET_INFO) && HAVE_DECL_IPT_SO_GET_INFO)
+  XLAT(IPT_SO_GET_INFO),
+#endif
+#if defined(IPT_SO_GET_ENTRIES) || (defined(HAVE_DECL_IPT_SO_GET_ENTRIES) && HAVE_DECL_IPT_SO_GET_ENTRIES)
+  XLAT(IPT_SO_GET_ENTRIES),
+#endif
+#if defined(IPT_SO_GET_REVISION_MATCH) || (defined(HAVE_DECL_IPT_SO_GET_REVISION_MATCH) && HAVE_DECL_IPT_SO_GET_REVISION_MATCH)
+  XLAT(IPT_SO_GET_REVISION_MATCH),
+#endif
+#if defined(IPT_SO_GET_REVISION_TARGET) || (defined(HAVE_DECL_IPT_SO_GET_REVISION_TARGET) && HAVE_DECL_IPT_SO_GET_REVISION_TARGET)
+  XLAT(IPT_SO_GET_REVISION_TARGET),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/getsock_ip_options.in b/xlat/getsock_ip_options.in
new file mode 100644
index 0000000..7b05460
--- /dev/null
+++ b/xlat/getsock_ip_options.in
@@ -0,0 +1,29 @@
+/*
+ * Options specific to getsockopt(SOL_IP).
+ * Common {g,s}etsockopt(SOL_IP) options
+ * should be in sock_ip_options.in instead.
+ */
+
+ARPT_SO_GET_INFO
+ARPT_SO_GET_ENTRIES
+ARPT_SO_GET_REVISION_MATCH
+ARPT_SO_GET_REVISION_TARGET
+
+EBT_SO_GET_INFO
+EBT_SO_GET_ENTRIES
+EBT_SO_GET_INIT_INFO
+EBT_SO_GET_INIT_ENTRIES
+
+IP_VS_SO_GET_VERSION
+IP_VS_SO_GET_INFO
+IP_VS_SO_GET_SERVICES
+IP_VS_SO_GET_SERVICE
+IP_VS_SO_GET_DESTS
+IP_VS_SO_GET_DEST
+IP_VS_SO_GET_TIMEOUT
+IP_VS_SO_GET_DAEMON
+
+IPT_SO_GET_INFO
+IPT_SO_GET_ENTRIES
+IPT_SO_GET_REVISION_MATCH
+IPT_SO_GET_REVISION_TARGET
diff --git a/xlat/getsock_ipv6_options.h b/xlat/getsock_ipv6_options.h
new file mode 100644
index 0000000..6525dfd
--- /dev/null
+++ b/xlat/getsock_ipv6_options.h
@@ -0,0 +1,40 @@
+/* Generated by ./xlat/gen.sh from ./xlat/getsock_ipv6_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat getsock_ipv6_options in mpers mode
+
+# else
+
+static
+const struct xlat getsock_ipv6_options[] = {
+/*
+* Options specific to getsockopt(SOL_IPV6).
+* Common {g,s}etsockopt(SOL_IPV6) options
+* should be in sock_ipv6_options.in instead.
+*/
+
+#if defined(IP6T_SO_GET_INFO) || (defined(HAVE_DECL_IP6T_SO_GET_INFO) && HAVE_DECL_IP6T_SO_GET_INFO)
+  XLAT(IP6T_SO_GET_INFO),
+#endif
+#if defined(IP6T_SO_GET_ENTRIES) || (defined(HAVE_DECL_IP6T_SO_GET_ENTRIES) && HAVE_DECL_IP6T_SO_GET_ENTRIES)
+  XLAT(IP6T_SO_GET_ENTRIES),
+#endif
+#if defined(IP6T_SO_GET_REVISION_MATCH) || (defined(HAVE_DECL_IP6T_SO_GET_REVISION_MATCH) && HAVE_DECL_IP6T_SO_GET_REVISION_MATCH)
+  XLAT(IP6T_SO_GET_REVISION_MATCH),
+#endif
+#if defined(IP6T_SO_GET_REVISION_TARGET) || (defined(HAVE_DECL_IP6T_SO_GET_REVISION_TARGET) && HAVE_DECL_IP6T_SO_GET_REVISION_TARGET)
+  XLAT(IP6T_SO_GET_REVISION_TARGET),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/getsock_ipv6_options.in b/xlat/getsock_ipv6_options.in
new file mode 100644
index 0000000..98c450f
--- /dev/null
+++ b/xlat/getsock_ipv6_options.in
@@ -0,0 +1,10 @@
+/*
+ * Options specific to getsockopt(SOL_IPV6).
+ * Common {g,s}etsockopt(SOL_IPV6) options
+ * should be in sock_ipv6_options.in instead.
+ */
+
+IP6T_SO_GET_INFO
+IP6T_SO_GET_ENTRIES
+IP6T_SO_GET_REVISION_MATCH
+IP6T_SO_GET_REVISION_TARGET
diff --git a/xlat/getsock_options.h b/xlat/getsock_options.h
new file mode 100644
index 0000000..1f2035f
--- /dev/null
+++ b/xlat/getsock_options.h
@@ -0,0 +1,44 @@
+/* Generated by ./xlat/gen.sh from ./xlat/getsock_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined __hppa__
+#if defined(SO_GET_FILTER) || (defined(HAVE_DECL_SO_GET_FILTER) && HAVE_DECL_SO_GET_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_GET_FILTER) == (16410), "SO_GET_FILTER != 16410");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_GET_FILTER 16410
+#endif
+#else
+#if defined(SO_GET_FILTER) || (defined(HAVE_DECL_SO_GET_FILTER) && HAVE_DECL_SO_GET_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_GET_FILTER) == (26), "SO_GET_FILTER != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_GET_FILTER 26
+#endif
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat getsock_options in mpers mode
+
+# else
+
+static
+const struct xlat getsock_options[] = {
+#if defined __hppa__
+ XLAT(SO_GET_FILTER),
+#else
+ XLAT(SO_GET_FILTER),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/getsock_options.in b/xlat/getsock_options.in
new file mode 100644
index 0000000..6e47623
--- /dev/null
+++ b/xlat/getsock_options.in
@@ -0,0 +1,5 @@
+#if defined __hppa__
+SO_GET_FILTER 16410
+#else
+SO_GET_FILTER 26
+#endif
diff --git a/xlat/getsockipoptions.h b/xlat/getsockipoptions.h
deleted file mode 100644
index cd043a1..0000000
--- a/xlat/getsockipoptions.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/getsockipoptions.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat getsockipoptions in mpers mode
-
-#else
-
-static
-const struct xlat getsockipoptions[] = {
-/*
-* Options specific to getsockopt(SOL_IP).
-* Common {g,s}etsockopt(SOL_IP) options
-* should be in sockipoptions.in instead.
-*/
-
-#if defined(ARPT_SO_GET_INFO) || (defined(HAVE_DECL_ARPT_SO_GET_INFO) && HAVE_DECL_ARPT_SO_GET_INFO)
-  XLAT(ARPT_SO_GET_INFO),
-#endif
-#if defined(ARPT_SO_GET_ENTRIES) || (defined(HAVE_DECL_ARPT_SO_GET_ENTRIES) && HAVE_DECL_ARPT_SO_GET_ENTRIES)
-  XLAT(ARPT_SO_GET_ENTRIES),
-#endif
-#if defined(ARPT_SO_GET_REVISION_MATCH) || (defined(HAVE_DECL_ARPT_SO_GET_REVISION_MATCH) && HAVE_DECL_ARPT_SO_GET_REVISION_MATCH)
-  XLAT(ARPT_SO_GET_REVISION_MATCH),
-#endif
-#if defined(ARPT_SO_GET_REVISION_TARGET) || (defined(HAVE_DECL_ARPT_SO_GET_REVISION_TARGET) && HAVE_DECL_ARPT_SO_GET_REVISION_TARGET)
-  XLAT(ARPT_SO_GET_REVISION_TARGET),
-#endif
-
-#if defined(EBT_SO_GET_INFO) || (defined(HAVE_DECL_EBT_SO_GET_INFO) && HAVE_DECL_EBT_SO_GET_INFO)
-  XLAT(EBT_SO_GET_INFO),
-#endif
-#if defined(EBT_SO_GET_ENTRIES) || (defined(HAVE_DECL_EBT_SO_GET_ENTRIES) && HAVE_DECL_EBT_SO_GET_ENTRIES)
-  XLAT(EBT_SO_GET_ENTRIES),
-#endif
-#if defined(EBT_SO_GET_INIT_INFO) || (defined(HAVE_DECL_EBT_SO_GET_INIT_INFO) && HAVE_DECL_EBT_SO_GET_INIT_INFO)
-  XLAT(EBT_SO_GET_INIT_INFO),
-#endif
-#if defined(EBT_SO_GET_INIT_ENTRIES) || (defined(HAVE_DECL_EBT_SO_GET_INIT_ENTRIES) && HAVE_DECL_EBT_SO_GET_INIT_ENTRIES)
-  XLAT(EBT_SO_GET_INIT_ENTRIES),
-#endif
-
-#if defined(IP_VS_SO_GET_VERSION) || (defined(HAVE_DECL_IP_VS_SO_GET_VERSION) && HAVE_DECL_IP_VS_SO_GET_VERSION)
-  XLAT(IP_VS_SO_GET_VERSION),
-#endif
-#if defined(IP_VS_SO_GET_INFO) || (defined(HAVE_DECL_IP_VS_SO_GET_INFO) && HAVE_DECL_IP_VS_SO_GET_INFO)
-  XLAT(IP_VS_SO_GET_INFO),
-#endif
-#if defined(IP_VS_SO_GET_SERVICES) || (defined(HAVE_DECL_IP_VS_SO_GET_SERVICES) && HAVE_DECL_IP_VS_SO_GET_SERVICES)
-  XLAT(IP_VS_SO_GET_SERVICES),
-#endif
-#if defined(IP_VS_SO_GET_SERVICE) || (defined(HAVE_DECL_IP_VS_SO_GET_SERVICE) && HAVE_DECL_IP_VS_SO_GET_SERVICE)
-  XLAT(IP_VS_SO_GET_SERVICE),
-#endif
-#if defined(IP_VS_SO_GET_DESTS) || (defined(HAVE_DECL_IP_VS_SO_GET_DESTS) && HAVE_DECL_IP_VS_SO_GET_DESTS)
-  XLAT(IP_VS_SO_GET_DESTS),
-#endif
-#if defined(IP_VS_SO_GET_DEST) || (defined(HAVE_DECL_IP_VS_SO_GET_DEST) && HAVE_DECL_IP_VS_SO_GET_DEST)
-  XLAT(IP_VS_SO_GET_DEST),
-#endif
-#if defined(IP_VS_SO_GET_TIMEOUT) || (defined(HAVE_DECL_IP_VS_SO_GET_TIMEOUT) && HAVE_DECL_IP_VS_SO_GET_TIMEOUT)
-  XLAT(IP_VS_SO_GET_TIMEOUT),
-#endif
-#if defined(IP_VS_SO_GET_DAEMON) || (defined(HAVE_DECL_IP_VS_SO_GET_DAEMON) && HAVE_DECL_IP_VS_SO_GET_DAEMON)
-  XLAT(IP_VS_SO_GET_DAEMON),
-#endif
-
-#if defined(IPT_SO_GET_INFO) || (defined(HAVE_DECL_IPT_SO_GET_INFO) && HAVE_DECL_IPT_SO_GET_INFO)
-  XLAT(IPT_SO_GET_INFO),
-#endif
-#if defined(IPT_SO_GET_ENTRIES) || (defined(HAVE_DECL_IPT_SO_GET_ENTRIES) && HAVE_DECL_IPT_SO_GET_ENTRIES)
-  XLAT(IPT_SO_GET_ENTRIES),
-#endif
-#if defined(IPT_SO_GET_REVISION_MATCH) || (defined(HAVE_DECL_IPT_SO_GET_REVISION_MATCH) && HAVE_DECL_IPT_SO_GET_REVISION_MATCH)
-  XLAT(IPT_SO_GET_REVISION_MATCH),
-#endif
-#if defined(IPT_SO_GET_REVISION_TARGET) || (defined(HAVE_DECL_IPT_SO_GET_REVISION_TARGET) && HAVE_DECL_IPT_SO_GET_REVISION_TARGET)
-  XLAT(IPT_SO_GET_REVISION_TARGET),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/getsockipv6options.h b/xlat/getsockipv6options.h
deleted file mode 100644
index 402be18..0000000
--- a/xlat/getsockipv6options.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/getsockipv6options.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat getsockipv6options in mpers mode
-
-#else
-
-static
-const struct xlat getsockipv6options[] = {
-/*
-* Options specific to getsockopt(SOL_IPV6).
-* Common {g,s}etsockopt(SOL_IPV6) options
-* should be in sockipv6options.in instead.
-*/
-
-#if defined(IP6T_SO_GET_INFO) || (defined(HAVE_DECL_IP6T_SO_GET_INFO) && HAVE_DECL_IP6T_SO_GET_INFO)
-  XLAT(IP6T_SO_GET_INFO),
-#endif
-#if defined(IP6T_SO_GET_ENTRIES) || (defined(HAVE_DECL_IP6T_SO_GET_ENTRIES) && HAVE_DECL_IP6T_SO_GET_ENTRIES)
-  XLAT(IP6T_SO_GET_ENTRIES),
-#endif
-#if defined(IP6T_SO_GET_REVISION_MATCH) || (defined(HAVE_DECL_IP6T_SO_GET_REVISION_MATCH) && HAVE_DECL_IP6T_SO_GET_REVISION_MATCH)
-  XLAT(IP6T_SO_GET_REVISION_MATCH),
-#endif
-#if defined(IP6T_SO_GET_REVISION_TARGET) || (defined(HAVE_DECL_IP6T_SO_GET_REVISION_TARGET) && HAVE_DECL_IP6T_SO_GET_REVISION_TARGET)
-  XLAT(IP6T_SO_GET_REVISION_TARGET),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/hci_channels.h b/xlat/hci_channels.h
index ab6d3e3..a989ff2 100644
--- a/xlat/hci_channels.h
+++ b/xlat/hci_channels.h
@@ -1,29 +1,62 @@
 /* Generated by ./xlat/gen.sh from ./xlat/hci_channels.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat hci_channels in mpers mode
-
+#if defined(HCI_CHANNEL_RAW) || (defined(HAVE_DECL_HCI_CHANNEL_RAW) && HAVE_DECL_HCI_CHANNEL_RAW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HCI_CHANNEL_RAW) == (0), "HCI_CHANNEL_RAW != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define HCI_CHANNEL_RAW 0
+#endif
+#if defined(HCI_CHANNEL_USER) || (defined(HAVE_DECL_HCI_CHANNEL_USER) && HAVE_DECL_HCI_CHANNEL_USER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HCI_CHANNEL_USER) == (1), "HCI_CHANNEL_USER != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define HCI_CHANNEL_USER 1
+#endif
+#if defined(HCI_CHANNEL_MONITOR) || (defined(HAVE_DECL_HCI_CHANNEL_MONITOR) && HAVE_DECL_HCI_CHANNEL_MONITOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HCI_CHANNEL_MONITOR) == (2), "HCI_CHANNEL_MONITOR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define HCI_CHANNEL_MONITOR 2
+#endif
+#if defined(HCI_CHANNEL_CONTROL) || (defined(HAVE_DECL_HCI_CHANNEL_CONTROL) && HAVE_DECL_HCI_CHANNEL_CONTROL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HCI_CHANNEL_CONTROL) == (3), "HCI_CHANNEL_CONTROL != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define HCI_CHANNEL_CONTROL 3
+#endif
+#if defined(HCI_CHANNEL_LOGGING) || (defined(HAVE_DECL_HCI_CHANNEL_LOGGING) && HAVE_DECL_HCI_CHANNEL_LOGGING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HCI_CHANNEL_LOGGING) == (4), "HCI_CHANNEL_LOGGING != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define HCI_CHANNEL_LOGGING 4
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat hci_channels in mpers mode
+
+# else
 
 static
 const struct xlat hci_channels[] = {
-#if defined(HCI_CHANNEL_RAW) || (defined(HAVE_DECL_HCI_CHANNEL_RAW) && HAVE_DECL_HCI_CHANNEL_RAW)
-  XLAT(HCI_CHANNEL_RAW),
-#endif
-#if defined(HCI_CHANNEL_USER) || (defined(HAVE_DECL_HCI_CHANNEL_USER) && HAVE_DECL_HCI_CHANNEL_USER)
-  XLAT(HCI_CHANNEL_USER),
-#endif
-#if defined(HCI_CHANNEL_MONITOR) || (defined(HAVE_DECL_HCI_CHANNEL_MONITOR) && HAVE_DECL_HCI_CHANNEL_MONITOR)
-  XLAT(HCI_CHANNEL_MONITOR),
-#endif
-#if defined(HCI_CHANNEL_CONTROL) || (defined(HAVE_DECL_HCI_CHANNEL_CONTROL) && HAVE_DECL_HCI_CHANNEL_CONTROL)
-  XLAT(HCI_CHANNEL_CONTROL),
-#endif
-#if defined(HCI_CHANNEL_LOGGING) || (defined(HAVE_DECL_HCI_CHANNEL_LOGGING) && HAVE_DECL_HCI_CHANNEL_LOGGING)
-  XLAT(HCI_CHANNEL_LOGGING),
-#endif
+ [HCI_CHANNEL_RAW] = XLAT(HCI_CHANNEL_RAW),
+ [HCI_CHANNEL_USER] = XLAT(HCI_CHANNEL_USER),
+ [HCI_CHANNEL_MONITOR] = XLAT(HCI_CHANNEL_MONITOR),
+ [HCI_CHANNEL_CONTROL] = XLAT(HCI_CHANNEL_CONTROL),
+ [HCI_CHANNEL_LOGGING] = XLAT(HCI_CHANNEL_LOGGING),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/hci_channels.in b/xlat/hci_channels.in
index 1fae39b..42055bb 100644
--- a/xlat/hci_channels.in
+++ b/xlat/hci_channels.in
@@ -1,5 +1,6 @@
-HCI_CHANNEL_RAW
-HCI_CHANNEL_USER
-HCI_CHANNEL_MONITOR
-HCI_CHANNEL_CONTROL
-HCI_CHANNEL_LOGGING
+#value_indexed
+HCI_CHANNEL_RAW		0
+HCI_CHANNEL_USER	1
+HCI_CHANNEL_MONITOR	2
+HCI_CHANNEL_CONTROL	3
+HCI_CHANNEL_LOGGING	4
diff --git a/xlat/hw_breakpoint_len.h b/xlat/hw_breakpoint_len.h
index c1b042d..cb6c457 100644
--- a/xlat/hw_breakpoint_len.h
+++ b/xlat/hw_breakpoint_len.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/hw_breakpoint_len.in; do not edit. */
-#if !(defined(HW_BREAKPOINT_LEN_1) || (defined(HAVE_DECL_HW_BREAKPOINT_LEN_1) && HAVE_DECL_HW_BREAKPOINT_LEN_1))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(HW_BREAKPOINT_LEN_1) || (defined(HAVE_DECL_HW_BREAKPOINT_LEN_1) && HAVE_DECL_HW_BREAKPOINT_LEN_1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HW_BREAKPOINT_LEN_1) == (1), "HW_BREAKPOINT_LEN_1 != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define HW_BREAKPOINT_LEN_1 1
 #endif
-#if !(defined(HW_BREAKPOINT_LEN_2) || (defined(HAVE_DECL_HW_BREAKPOINT_LEN_2) && HAVE_DECL_HW_BREAKPOINT_LEN_2))
+#if defined(HW_BREAKPOINT_LEN_2) || (defined(HAVE_DECL_HW_BREAKPOINT_LEN_2) && HAVE_DECL_HW_BREAKPOINT_LEN_2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HW_BREAKPOINT_LEN_2) == (2), "HW_BREAKPOINT_LEN_2 != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define HW_BREAKPOINT_LEN_2 2
 #endif
-#if !(defined(HW_BREAKPOINT_LEN_4) || (defined(HAVE_DECL_HW_BREAKPOINT_LEN_4) && HAVE_DECL_HW_BREAKPOINT_LEN_4))
+#if defined(HW_BREAKPOINT_LEN_4) || (defined(HAVE_DECL_HW_BREAKPOINT_LEN_4) && HAVE_DECL_HW_BREAKPOINT_LEN_4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HW_BREAKPOINT_LEN_4) == (4), "HW_BREAKPOINT_LEN_4 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define HW_BREAKPOINT_LEN_4 4
 #endif
-#if !(defined(HW_BREAKPOINT_LEN_8) || (defined(HAVE_DECL_HW_BREAKPOINT_LEN_8) && HAVE_DECL_HW_BREAKPOINT_LEN_8))
+#if defined(HW_BREAKPOINT_LEN_8) || (defined(HAVE_DECL_HW_BREAKPOINT_LEN_8) && HAVE_DECL_HW_BREAKPOINT_LEN_8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HW_BREAKPOINT_LEN_8) == (8), "HW_BREAKPOINT_LEN_8 != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define HW_BREAKPOINT_LEN_8 8
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat hw_breakpoint_len in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat hw_breakpoint_len in mpers mode
+
+# else
 
 static
 const struct xlat hw_breakpoint_len[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/hw_breakpoint_type.h b/xlat/hw_breakpoint_type.h
index 3f6873a..30b3af8 100644
--- a/xlat/hw_breakpoint_type.h
+++ b/xlat/hw_breakpoint_type.h
@@ -1,25 +1,51 @@
 /* Generated by ./xlat/gen.sh from ./xlat/hw_breakpoint_type.in; do not edit. */
-#if !(defined(HW_BREAKPOINT_EMPTY) || (defined(HAVE_DECL_HW_BREAKPOINT_EMPTY) && HAVE_DECL_HW_BREAKPOINT_EMPTY))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(HW_BREAKPOINT_EMPTY) || (defined(HAVE_DECL_HW_BREAKPOINT_EMPTY) && HAVE_DECL_HW_BREAKPOINT_EMPTY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HW_BREAKPOINT_EMPTY) == (0), "HW_BREAKPOINT_EMPTY != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define HW_BREAKPOINT_EMPTY 0
 #endif
-#if !(defined(HW_BREAKPOINT_R) || (defined(HAVE_DECL_HW_BREAKPOINT_R) && HAVE_DECL_HW_BREAKPOINT_R))
+#if defined(HW_BREAKPOINT_R) || (defined(HAVE_DECL_HW_BREAKPOINT_R) && HAVE_DECL_HW_BREAKPOINT_R)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HW_BREAKPOINT_R) == (1), "HW_BREAKPOINT_R != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define HW_BREAKPOINT_R 1
 #endif
-#if !(defined(HW_BREAKPOINT_W) || (defined(HAVE_DECL_HW_BREAKPOINT_W) && HAVE_DECL_HW_BREAKPOINT_W))
+#if defined(HW_BREAKPOINT_W) || (defined(HAVE_DECL_HW_BREAKPOINT_W) && HAVE_DECL_HW_BREAKPOINT_W)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HW_BREAKPOINT_W) == (2), "HW_BREAKPOINT_W != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define HW_BREAKPOINT_W 2
 #endif
-#if !(defined(HW_BREAKPOINT_RW) || (defined(HAVE_DECL_HW_BREAKPOINT_RW) && HAVE_DECL_HW_BREAKPOINT_RW))
+#if defined(HW_BREAKPOINT_RW) || (defined(HAVE_DECL_HW_BREAKPOINT_RW) && HAVE_DECL_HW_BREAKPOINT_RW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HW_BREAKPOINT_RW) == (3), "HW_BREAKPOINT_RW != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define HW_BREAKPOINT_RW 3
 #endif
-#if !(defined(HW_BREAKPOINT_X) || (defined(HAVE_DECL_HW_BREAKPOINT_X) && HAVE_DECL_HW_BREAKPOINT_X))
+#if defined(HW_BREAKPOINT_X) || (defined(HAVE_DECL_HW_BREAKPOINT_X) && HAVE_DECL_HW_BREAKPOINT_X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((HW_BREAKPOINT_X) == (4), "HW_BREAKPOINT_X != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define HW_BREAKPOINT_X 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat hw_breakpoint_type in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat hw_breakpoint_type in mpers mode
+
+# else
 
 static
 const struct xlat hw_breakpoint_type[] = {
@@ -32,4 +58,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/icmpfilterflags.h b/xlat/icmpfilterflags.h
index 1672a19..a3f1300 100644
--- a/xlat/icmpfilterflags.h
+++ b/xlat/icmpfilterflags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/icmpfilterflags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat icmpfilterflags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat icmpfilterflags in mpers mode
+
+# else
 
 static
 const struct xlat icmpfilterflags[] = {
@@ -50,4 +56,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/if_dqblk_valid.h b/xlat/if_dqblk_valid.h
index 67d3934..e6d03bf 100644
--- a/xlat/if_dqblk_valid.h
+++ b/xlat/if_dqblk_valid.h
@@ -1,28 +1,58 @@
 /* Generated by ./xlat/gen.sh from ./xlat/if_dqblk_valid.in; do not edit. */
-#if !(defined(QIF_BLIMITS) || (defined(HAVE_DECL_QIF_BLIMITS) && HAVE_DECL_QIF_BLIMITS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(QIF_BLIMITS) || (defined(HAVE_DECL_QIF_BLIMITS) && HAVE_DECL_QIF_BLIMITS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QIF_BLIMITS) == ((1 << 0)), "QIF_BLIMITS != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QIF_BLIMITS (1 << 0)
 #endif
-#if !(defined(QIF_SPACE) || (defined(HAVE_DECL_QIF_SPACE) && HAVE_DECL_QIF_SPACE))
+#if defined(QIF_SPACE) || (defined(HAVE_DECL_QIF_SPACE) && HAVE_DECL_QIF_SPACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QIF_SPACE) == ((1 << 1)), "QIF_SPACE != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QIF_SPACE (1 << 1)
 #endif
-#if !(defined(QIF_ILIMITS) || (defined(HAVE_DECL_QIF_ILIMITS) && HAVE_DECL_QIF_ILIMITS))
+#if defined(QIF_ILIMITS) || (defined(HAVE_DECL_QIF_ILIMITS) && HAVE_DECL_QIF_ILIMITS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QIF_ILIMITS) == ((1 << 2)), "QIF_ILIMITS != (1 << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QIF_ILIMITS (1 << 2)
 #endif
-#if !(defined(QIF_INODES) || (defined(HAVE_DECL_QIF_INODES) && HAVE_DECL_QIF_INODES))
+#if defined(QIF_INODES) || (defined(HAVE_DECL_QIF_INODES) && HAVE_DECL_QIF_INODES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QIF_INODES) == ((1 << 3)), "QIF_INODES != (1 << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QIF_INODES (1 << 3)
 #endif
-#if !(defined(QIF_BTIME) || (defined(HAVE_DECL_QIF_BTIME) && HAVE_DECL_QIF_BTIME))
+#if defined(QIF_BTIME) || (defined(HAVE_DECL_QIF_BTIME) && HAVE_DECL_QIF_BTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QIF_BTIME) == ((1 << 4)), "QIF_BTIME != (1 << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QIF_BTIME (1 << 4)
 #endif
-#if !(defined(QIF_ITIME) || (defined(HAVE_DECL_QIF_ITIME) && HAVE_DECL_QIF_ITIME))
+#if defined(QIF_ITIME) || (defined(HAVE_DECL_QIF_ITIME) && HAVE_DECL_QIF_ITIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QIF_ITIME) == ((1 << 5)), "QIF_ITIME != (1 << 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QIF_ITIME (1 << 5)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat if_dqblk_valid in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat if_dqblk_valid in mpers mode
+
+# else
 
 static
 const struct xlat if_dqblk_valid[] = {
@@ -35,4 +65,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/if_dqinfo_flags.h b/xlat/if_dqinfo_flags.h
index 72b2690..aeb76bd 100644
--- a/xlat/if_dqinfo_flags.h
+++ b/xlat/if_dqinfo_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/if_dqinfo_flags.in; do not edit. */
-#if !(defined(DQF_ROOT_SQUASH) || (defined(HAVE_DECL_DQF_ROOT_SQUASH) && HAVE_DECL_DQF_ROOT_SQUASH))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(DQF_ROOT_SQUASH) || (defined(HAVE_DECL_DQF_ROOT_SQUASH) && HAVE_DECL_DQF_ROOT_SQUASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DQF_ROOT_SQUASH) == ((1 << 0)), "DQF_ROOT_SQUASH != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DQF_ROOT_SQUASH (1 << 0)
 #endif
-#if !(defined(DQF_SYS_FILE) || (defined(HAVE_DECL_DQF_SYS_FILE) && HAVE_DECL_DQF_SYS_FILE))
+#if defined(DQF_SYS_FILE) || (defined(HAVE_DECL_DQF_SYS_FILE) && HAVE_DECL_DQF_SYS_FILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DQF_SYS_FILE) == ((1 << 16)), "DQF_SYS_FILE != (1 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DQF_SYS_FILE (1 << 16)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat if_dqinfo_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat if_dqinfo_flags in mpers mode
+
+# else
 
 static
 const struct xlat if_dqinfo_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/if_dqinfo_valid.h b/xlat/if_dqinfo_valid.h
index 8944d17..b4fc127 100644
--- a/xlat/if_dqinfo_valid.h
+++ b/xlat/if_dqinfo_valid.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/if_dqinfo_valid.in; do not edit. */
-#if !(defined(IIF_BGRACE) || (defined(HAVE_DECL_IIF_BGRACE) && HAVE_DECL_IIF_BGRACE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IIF_BGRACE) || (defined(HAVE_DECL_IIF_BGRACE) && HAVE_DECL_IIF_BGRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IIF_BGRACE) == ((1 << 0)), "IIF_BGRACE != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IIF_BGRACE (1 << 0)
 #endif
-#if !(defined(IIF_IGRACE) || (defined(HAVE_DECL_IIF_IGRACE) && HAVE_DECL_IIF_IGRACE))
+#if defined(IIF_IGRACE) || (defined(HAVE_DECL_IIF_IGRACE) && HAVE_DECL_IIF_IGRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IIF_IGRACE) == ((1 << 1)), "IIF_IGRACE != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IIF_IGRACE (1 << 1)
 #endif
-#if !(defined(IIF_FLAGS) || (defined(HAVE_DECL_IIF_FLAGS) && HAVE_DECL_IIF_FLAGS))
+#if defined(IIF_FLAGS) || (defined(HAVE_DECL_IIF_FLAGS) && HAVE_DECL_IIF_FLAGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IIF_FLAGS) == ((1 << 2)), "IIF_FLAGS != (1 << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IIF_FLAGS (1 << 2)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat if_dqinfo_valid in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat if_dqinfo_valid in mpers mode
+
+# else
 
 static
 const struct xlat if_dqinfo_valid[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ifaddrflags.h b/xlat/ifaddrflags.h
index 95aa830..cc2c989 100644
--- a/xlat/ifaddrflags.h
+++ b/xlat/ifaddrflags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ifaddrflags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ifaddrflags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ifaddrflags in mpers mode
+
+# else
 
 static
 const struct xlat ifaddrflags[] = {
@@ -47,4 +53,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/iffflags.h b/xlat/iffflags.h
index b197e08..5c1b507 100644
--- a/xlat/iffflags.h
+++ b/xlat/iffflags.h
@@ -1,54 +1,170 @@
 /* Generated by ./xlat/gen.sh from ./xlat/iffflags.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-const struct xlat iffflags[] = {
 #if defined(IFF_UP) || (defined(HAVE_DECL_IFF_UP) && HAVE_DECL_IFF_UP)
-  XLAT(IFF_UP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_UP) == ((1 << 0)), "IFF_UP != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_UP (1 << 0)
 #endif
 #if defined(IFF_BROADCAST) || (defined(HAVE_DECL_IFF_BROADCAST) && HAVE_DECL_IFF_BROADCAST)
-  XLAT(IFF_BROADCAST),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_BROADCAST) == ((1 << 1)), "IFF_BROADCAST != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_BROADCAST (1 << 1)
 #endif
 #if defined(IFF_DEBUG) || (defined(HAVE_DECL_IFF_DEBUG) && HAVE_DECL_IFF_DEBUG)
-  XLAT(IFF_DEBUG),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_DEBUG) == ((1 << 2)), "IFF_DEBUG != (1 << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_DEBUG (1 << 2)
 #endif
 #if defined(IFF_LOOPBACK) || (defined(HAVE_DECL_IFF_LOOPBACK) && HAVE_DECL_IFF_LOOPBACK)
-  XLAT(IFF_LOOPBACK),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_LOOPBACK) == ((1 << 3)), "IFF_LOOPBACK != (1 << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_LOOPBACK (1 << 3)
 #endif
 #if defined(IFF_POINTOPOINT) || (defined(HAVE_DECL_IFF_POINTOPOINT) && HAVE_DECL_IFF_POINTOPOINT)
-  XLAT(IFF_POINTOPOINT),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_POINTOPOINT) == ((1 << 4)), "IFF_POINTOPOINT != (1 << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_POINTOPOINT (1 << 4)
 #endif
 #if defined(IFF_NOTRAILERS) || (defined(HAVE_DECL_IFF_NOTRAILERS) && HAVE_DECL_IFF_NOTRAILERS)
-  XLAT(IFF_NOTRAILERS),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_NOTRAILERS) == ((1 << 5)), "IFF_NOTRAILERS != (1 << 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_NOTRAILERS (1 << 5)
 #endif
 #if defined(IFF_RUNNING) || (defined(HAVE_DECL_IFF_RUNNING) && HAVE_DECL_IFF_RUNNING)
-  XLAT(IFF_RUNNING),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_RUNNING) == ((1 << 6)), "IFF_RUNNING != (1 << 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_RUNNING (1 << 6)
 #endif
 #if defined(IFF_NOARP) || (defined(HAVE_DECL_IFF_NOARP) && HAVE_DECL_IFF_NOARP)
-  XLAT(IFF_NOARP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_NOARP) == ((1 << 7)), "IFF_NOARP != (1 << 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_NOARP (1 << 7)
 #endif
 #if defined(IFF_PROMISC) || (defined(HAVE_DECL_IFF_PROMISC) && HAVE_DECL_IFF_PROMISC)
-  XLAT(IFF_PROMISC),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_PROMISC) == ((1 << 8)), "IFF_PROMISC != (1 << 8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_PROMISC (1 << 8)
 #endif
 #if defined(IFF_ALLMULTI) || (defined(HAVE_DECL_IFF_ALLMULTI) && HAVE_DECL_IFF_ALLMULTI)
-  XLAT(IFF_ALLMULTI),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_ALLMULTI) == ((1 << 9)), "IFF_ALLMULTI != (1 << 9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_ALLMULTI (1 << 9)
 #endif
 #if defined(IFF_MASTER) || (defined(HAVE_DECL_IFF_MASTER) && HAVE_DECL_IFF_MASTER)
-  XLAT(IFF_MASTER),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_MASTER) == ((1 << 10)), "IFF_MASTER != (1 << 10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_MASTER (1 << 10)
 #endif
 #if defined(IFF_SLAVE) || (defined(HAVE_DECL_IFF_SLAVE) && HAVE_DECL_IFF_SLAVE)
-  XLAT(IFF_SLAVE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_SLAVE) == ((1 << 11)), "IFF_SLAVE != (1 << 11)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_SLAVE (1 << 11)
 #endif
 #if defined(IFF_MULTICAST) || (defined(HAVE_DECL_IFF_MULTICAST) && HAVE_DECL_IFF_MULTICAST)
-  XLAT(IFF_MULTICAST),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_MULTICAST) == ((1 << 12)), "IFF_MULTICAST != (1 << 12)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_MULTICAST (1 << 12)
 #endif
 #if defined(IFF_PORTSEL) || (defined(HAVE_DECL_IFF_PORTSEL) && HAVE_DECL_IFF_PORTSEL)
-  XLAT(IFF_PORTSEL),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_PORTSEL) == ((1 << 13)), "IFF_PORTSEL != (1 << 13)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_PORTSEL (1 << 13)
 #endif
 #if defined(IFF_AUTOMEDIA) || (defined(HAVE_DECL_IFF_AUTOMEDIA) && HAVE_DECL_IFF_AUTOMEDIA)
-  XLAT(IFF_AUTOMEDIA),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_AUTOMEDIA) == ((1 << 14)), "IFF_AUTOMEDIA != (1 << 14)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_AUTOMEDIA (1 << 14)
 #endif
+#if defined(IFF_DYNAMIC) || (defined(HAVE_DECL_IFF_DYNAMIC) && HAVE_DECL_IFF_DYNAMIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_DYNAMIC) == ((1 << 15)), "IFF_DYNAMIC != (1 << 15)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_DYNAMIC (1 << 15)
+#endif
+#if defined(IFF_LOWER_UP) || (defined(HAVE_DECL_IFF_LOWER_UP) && HAVE_DECL_IFF_LOWER_UP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_LOWER_UP) == ((1 << 16)), "IFF_LOWER_UP != (1 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_LOWER_UP (1 << 16)
+#endif
+#if defined(IFF_DORMANT) || (defined(HAVE_DECL_IFF_DORMANT) && HAVE_DECL_IFF_DORMANT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_DORMANT) == ((1 << 17)), "IFF_DORMANT != (1 << 17)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_DORMANT (1 << 17)
+#endif
+#if defined(IFF_ECHO) || (defined(HAVE_DECL_IFF_ECHO) && HAVE_DECL_IFF_ECHO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_ECHO) == ((1 << 18)), "IFF_ECHO != (1 << 18)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_ECHO (1 << 18)
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
+
+const struct xlat iffflags[] = {
+
+ XLAT(IFF_UP),
+ XLAT(IFF_BROADCAST),
+ XLAT(IFF_DEBUG),
+ XLAT(IFF_LOOPBACK),
+ XLAT(IFF_POINTOPOINT),
+ XLAT(IFF_NOTRAILERS),
+ XLAT(IFF_RUNNING),
+ XLAT(IFF_NOARP),
+ XLAT(IFF_PROMISC),
+ XLAT(IFF_ALLMULTI),
+ XLAT(IFF_MASTER),
+ XLAT(IFF_SLAVE),
+ XLAT(IFF_MULTICAST),
+ XLAT(IFF_PORTSEL),
+ XLAT(IFF_AUTOMEDIA),
+ XLAT(IFF_DYNAMIC),
+ XLAT(IFF_LOWER_UP),
+ XLAT(IFF_DORMANT),
+ XLAT(IFF_ECHO),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/iffflags.in b/xlat/iffflags.in
index a6249b0..210495b 100644
--- a/xlat/iffflags.in
+++ b/xlat/iffflags.in
@@ -1,15 +1,20 @@
-IFF_UP
-IFF_BROADCAST
-IFF_DEBUG
-IFF_LOOPBACK
-IFF_POINTOPOINT
-IFF_NOTRAILERS
-IFF_RUNNING
-IFF_NOARP
-IFF_PROMISC
-IFF_ALLMULTI
-IFF_MASTER
-IFF_SLAVE
-IFF_MULTICAST
-IFF_PORTSEL
-IFF_AUTOMEDIA
+/* sort -k4,4g */
+IFF_UP		(1 << 0)
+IFF_BROADCAST	(1 << 1)
+IFF_DEBUG	(1 << 2)
+IFF_LOOPBACK	(1 << 3)
+IFF_POINTOPOINT	(1 << 4)
+IFF_NOTRAILERS	(1 << 5)
+IFF_RUNNING	(1 << 6)
+IFF_NOARP	(1 << 7)
+IFF_PROMISC	(1 << 8)
+IFF_ALLMULTI	(1 << 9)
+IFF_MASTER	(1 << 10)
+IFF_SLAVE	(1 << 11)
+IFF_MULTICAST	(1 << 12)
+IFF_PORTSEL	(1 << 13)
+IFF_AUTOMEDIA	(1 << 14)
+IFF_DYNAMIC	(1 << 15)
+IFF_LOWER_UP	(1 << 16)
+IFF_DORMANT	(1 << 17)
+IFF_ECHO	(1 << 18)
diff --git a/xlat/in6_addr_gen_mode.h b/xlat/in6_addr_gen_mode.h
new file mode 100644
index 0000000..c11c00a
--- /dev/null
+++ b/xlat/in6_addr_gen_mode.h
@@ -0,0 +1,54 @@
+/* Generated by ./xlat/gen.sh from ./xlat/in6_addr_gen_mode.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IN6_ADDR_GEN_MODE_EUI64) || (defined(HAVE_DECL_IN6_ADDR_GEN_MODE_EUI64) && HAVE_DECL_IN6_ADDR_GEN_MODE_EUI64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN6_ADDR_GEN_MODE_EUI64) == (0), "IN6_ADDR_GEN_MODE_EUI64 != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IN6_ADDR_GEN_MODE_EUI64 0
+#endif
+#if defined(IN6_ADDR_GEN_MODE_NONE) || (defined(HAVE_DECL_IN6_ADDR_GEN_MODE_NONE) && HAVE_DECL_IN6_ADDR_GEN_MODE_NONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN6_ADDR_GEN_MODE_NONE) == (1), "IN6_ADDR_GEN_MODE_NONE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IN6_ADDR_GEN_MODE_NONE 1
+#endif
+#if defined(IN6_ADDR_GEN_MODE_STABLE_PRIVACY) || (defined(HAVE_DECL_IN6_ADDR_GEN_MODE_STABLE_PRIVACY) && HAVE_DECL_IN6_ADDR_GEN_MODE_STABLE_PRIVACY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN6_ADDR_GEN_MODE_STABLE_PRIVACY) == (2), "IN6_ADDR_GEN_MODE_STABLE_PRIVACY != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IN6_ADDR_GEN_MODE_STABLE_PRIVACY 2
+#endif
+#if defined(IN6_ADDR_GEN_MODE_RANDOM) || (defined(HAVE_DECL_IN6_ADDR_GEN_MODE_RANDOM) && HAVE_DECL_IN6_ADDR_GEN_MODE_RANDOM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN6_ADDR_GEN_MODE_RANDOM) == (3), "IN6_ADDR_GEN_MODE_RANDOM != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IN6_ADDR_GEN_MODE_RANDOM 3
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat in6_addr_gen_mode in mpers mode
+
+# else
+
+static
+const struct xlat in6_addr_gen_mode[] = {
+ [IN6_ADDR_GEN_MODE_EUI64] = XLAT(IN6_ADDR_GEN_MODE_EUI64),
+ [IN6_ADDR_GEN_MODE_NONE] = XLAT(IN6_ADDR_GEN_MODE_NONE),
+ [IN6_ADDR_GEN_MODE_STABLE_PRIVACY] = XLAT(IN6_ADDR_GEN_MODE_STABLE_PRIVACY),
+ [IN6_ADDR_GEN_MODE_RANDOM] = XLAT(IN6_ADDR_GEN_MODE_RANDOM),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/in6_addr_gen_mode.in b/xlat/in6_addr_gen_mode.in
new file mode 100644
index 0000000..5d01a13
--- /dev/null
+++ b/xlat/in6_addr_gen_mode.in
@@ -0,0 +1,5 @@
+#value_indexed
+IN6_ADDR_GEN_MODE_EUI64			0
+IN6_ADDR_GEN_MODE_NONE			1
+IN6_ADDR_GEN_MODE_STABLE_PRIVACY	2
+IN6_ADDR_GEN_MODE_RANDOM		3
diff --git a/xlat/inet6_devconf_indices.h b/xlat/inet6_devconf_indices.h
new file mode 100644
index 0000000..97a210b
--- /dev/null
+++ b/xlat/inet6_devconf_indices.h
@@ -0,0 +1,430 @@
+/* Generated by ./xlat/gen.sh from ./xlat/inet6_devconf_indices.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(DEVCONF_FORWARDING) || (defined(HAVE_DECL_DEVCONF_FORWARDING) && HAVE_DECL_DEVCONF_FORWARDING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_FORWARDING) == (0), "DEVCONF_FORWARDING != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_FORWARDING 0
+#endif
+#if defined(DEVCONF_HOPLIMIT) || (defined(HAVE_DECL_DEVCONF_HOPLIMIT) && HAVE_DECL_DEVCONF_HOPLIMIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_HOPLIMIT) == (1), "DEVCONF_HOPLIMIT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_HOPLIMIT 1
+#endif
+#if defined(DEVCONF_MTU6) || (defined(HAVE_DECL_DEVCONF_MTU6) && HAVE_DECL_DEVCONF_MTU6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_MTU6) == (2), "DEVCONF_MTU6 != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_MTU6 2
+#endif
+#if defined(DEVCONF_ACCEPT_RA) || (defined(HAVE_DECL_DEVCONF_ACCEPT_RA) && HAVE_DECL_DEVCONF_ACCEPT_RA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_RA) == (3), "DEVCONF_ACCEPT_RA != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_RA 3
+#endif
+#if defined(DEVCONF_ACCEPT_REDIRECTS) || (defined(HAVE_DECL_DEVCONF_ACCEPT_REDIRECTS) && HAVE_DECL_DEVCONF_ACCEPT_REDIRECTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_REDIRECTS) == (4), "DEVCONF_ACCEPT_REDIRECTS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_REDIRECTS 4
+#endif
+#if defined(DEVCONF_AUTOCONF) || (defined(HAVE_DECL_DEVCONF_AUTOCONF) && HAVE_DECL_DEVCONF_AUTOCONF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_AUTOCONF) == (5), "DEVCONF_AUTOCONF != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_AUTOCONF 5
+#endif
+#if defined(DEVCONF_DAD_TRANSMITS) || (defined(HAVE_DECL_DEVCONF_DAD_TRANSMITS) && HAVE_DECL_DEVCONF_DAD_TRANSMITS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_DAD_TRANSMITS) == (6), "DEVCONF_DAD_TRANSMITS != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_DAD_TRANSMITS 6
+#endif
+#if defined(DEVCONF_RTR_SOLICITS) || (defined(HAVE_DECL_DEVCONF_RTR_SOLICITS) && HAVE_DECL_DEVCONF_RTR_SOLICITS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_RTR_SOLICITS) == (7), "DEVCONF_RTR_SOLICITS != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_RTR_SOLICITS 7
+#endif
+#if defined(DEVCONF_RTR_SOLICIT_INTERVAL) || (defined(HAVE_DECL_DEVCONF_RTR_SOLICIT_INTERVAL) && HAVE_DECL_DEVCONF_RTR_SOLICIT_INTERVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_RTR_SOLICIT_INTERVAL) == (8), "DEVCONF_RTR_SOLICIT_INTERVAL != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_RTR_SOLICIT_INTERVAL 8
+#endif
+#if defined(DEVCONF_RTR_SOLICIT_DELAY) || (defined(HAVE_DECL_DEVCONF_RTR_SOLICIT_DELAY) && HAVE_DECL_DEVCONF_RTR_SOLICIT_DELAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_RTR_SOLICIT_DELAY) == (9), "DEVCONF_RTR_SOLICIT_DELAY != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_RTR_SOLICIT_DELAY 9
+#endif
+#if defined(DEVCONF_USE_TEMPADDR) || (defined(HAVE_DECL_DEVCONF_USE_TEMPADDR) && HAVE_DECL_DEVCONF_USE_TEMPADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_USE_TEMPADDR) == (10), "DEVCONF_USE_TEMPADDR != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_USE_TEMPADDR 10
+#endif
+#if defined(DEVCONF_TEMP_VALID_LFT) || (defined(HAVE_DECL_DEVCONF_TEMP_VALID_LFT) && HAVE_DECL_DEVCONF_TEMP_VALID_LFT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_TEMP_VALID_LFT) == (11), "DEVCONF_TEMP_VALID_LFT != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_TEMP_VALID_LFT 11
+#endif
+#if defined(DEVCONF_TEMP_PREFERED_LFT) || (defined(HAVE_DECL_DEVCONF_TEMP_PREFERED_LFT) && HAVE_DECL_DEVCONF_TEMP_PREFERED_LFT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_TEMP_PREFERED_LFT) == (12), "DEVCONF_TEMP_PREFERED_LFT != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_TEMP_PREFERED_LFT 12
+#endif
+#if defined(DEVCONF_REGEN_MAX_RETRY) || (defined(HAVE_DECL_DEVCONF_REGEN_MAX_RETRY) && HAVE_DECL_DEVCONF_REGEN_MAX_RETRY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_REGEN_MAX_RETRY) == (13), "DEVCONF_REGEN_MAX_RETRY != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_REGEN_MAX_RETRY 13
+#endif
+#if defined(DEVCONF_MAX_DESYNC_FACTOR) || (defined(HAVE_DECL_DEVCONF_MAX_DESYNC_FACTOR) && HAVE_DECL_DEVCONF_MAX_DESYNC_FACTOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_MAX_DESYNC_FACTOR) == (14), "DEVCONF_MAX_DESYNC_FACTOR != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_MAX_DESYNC_FACTOR 14
+#endif
+#if defined(DEVCONF_MAX_ADDRESSES) || (defined(HAVE_DECL_DEVCONF_MAX_ADDRESSES) && HAVE_DECL_DEVCONF_MAX_ADDRESSES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_MAX_ADDRESSES) == (15), "DEVCONF_MAX_ADDRESSES != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_MAX_ADDRESSES 15
+#endif
+#if defined(DEVCONF_FORCE_MLD_VERSION) || (defined(HAVE_DECL_DEVCONF_FORCE_MLD_VERSION) && HAVE_DECL_DEVCONF_FORCE_MLD_VERSION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_FORCE_MLD_VERSION) == (16), "DEVCONF_FORCE_MLD_VERSION != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_FORCE_MLD_VERSION 16
+#endif
+#if defined(DEVCONF_ACCEPT_RA_DEFRTR) || (defined(HAVE_DECL_DEVCONF_ACCEPT_RA_DEFRTR) && HAVE_DECL_DEVCONF_ACCEPT_RA_DEFRTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_RA_DEFRTR) == (17), "DEVCONF_ACCEPT_RA_DEFRTR != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_RA_DEFRTR 17
+#endif
+#if defined(DEVCONF_ACCEPT_RA_PINFO) || (defined(HAVE_DECL_DEVCONF_ACCEPT_RA_PINFO) && HAVE_DECL_DEVCONF_ACCEPT_RA_PINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_RA_PINFO) == (18), "DEVCONF_ACCEPT_RA_PINFO != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_RA_PINFO 18
+#endif
+#if defined(DEVCONF_ACCEPT_RA_RTR_PREF) || (defined(HAVE_DECL_DEVCONF_ACCEPT_RA_RTR_PREF) && HAVE_DECL_DEVCONF_ACCEPT_RA_RTR_PREF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_RA_RTR_PREF) == (19), "DEVCONF_ACCEPT_RA_RTR_PREF != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_RA_RTR_PREF 19
+#endif
+#if defined(DEVCONF_RTR_PROBE_INTERVAL) || (defined(HAVE_DECL_DEVCONF_RTR_PROBE_INTERVAL) && HAVE_DECL_DEVCONF_RTR_PROBE_INTERVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_RTR_PROBE_INTERVAL) == (20), "DEVCONF_RTR_PROBE_INTERVAL != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_RTR_PROBE_INTERVAL 20
+#endif
+#if defined(DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN) || (defined(HAVE_DECL_DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN) && HAVE_DECL_DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN) == (21), "DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN 21
+#endif
+#if defined(DEVCONF_PROXY_NDP) || (defined(HAVE_DECL_DEVCONF_PROXY_NDP) && HAVE_DECL_DEVCONF_PROXY_NDP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_PROXY_NDP) == (22), "DEVCONF_PROXY_NDP != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_PROXY_NDP 22
+#endif
+#if defined(DEVCONF_OPTIMISTIC_DAD) || (defined(HAVE_DECL_DEVCONF_OPTIMISTIC_DAD) && HAVE_DECL_DEVCONF_OPTIMISTIC_DAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_OPTIMISTIC_DAD) == (23), "DEVCONF_OPTIMISTIC_DAD != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_OPTIMISTIC_DAD 23
+#endif
+#if defined(DEVCONF_ACCEPT_SOURCE_ROUTE) || (defined(HAVE_DECL_DEVCONF_ACCEPT_SOURCE_ROUTE) && HAVE_DECL_DEVCONF_ACCEPT_SOURCE_ROUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_SOURCE_ROUTE) == (24), "DEVCONF_ACCEPT_SOURCE_ROUTE != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_SOURCE_ROUTE 24
+#endif
+#if defined(DEVCONF_MC_FORWARDING) || (defined(HAVE_DECL_DEVCONF_MC_FORWARDING) && HAVE_DECL_DEVCONF_MC_FORWARDING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_MC_FORWARDING) == (25), "DEVCONF_MC_FORWARDING != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_MC_FORWARDING 25
+#endif
+#if defined(DEVCONF_DISABLE_IPV6) || (defined(HAVE_DECL_DEVCONF_DISABLE_IPV6) && HAVE_DECL_DEVCONF_DISABLE_IPV6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_DISABLE_IPV6) == (26), "DEVCONF_DISABLE_IPV6 != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_DISABLE_IPV6 26
+#endif
+#if defined(DEVCONF_ACCEPT_DAD) || (defined(HAVE_DECL_DEVCONF_ACCEPT_DAD) && HAVE_DECL_DEVCONF_ACCEPT_DAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_DAD) == (27), "DEVCONF_ACCEPT_DAD != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_DAD 27
+#endif
+#if defined(DEVCONF_FORCE_TLLAO) || (defined(HAVE_DECL_DEVCONF_FORCE_TLLAO) && HAVE_DECL_DEVCONF_FORCE_TLLAO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_FORCE_TLLAO) == (28), "DEVCONF_FORCE_TLLAO != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_FORCE_TLLAO 28
+#endif
+#if defined(DEVCONF_NDISC_NOTIFY) || (defined(HAVE_DECL_DEVCONF_NDISC_NOTIFY) && HAVE_DECL_DEVCONF_NDISC_NOTIFY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_NDISC_NOTIFY) == (29), "DEVCONF_NDISC_NOTIFY != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_NDISC_NOTIFY 29
+#endif
+#if defined(DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL) || (defined(HAVE_DECL_DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL) && HAVE_DECL_DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL) == (30), "DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL 30
+#endif
+#if defined(DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL) || (defined(HAVE_DECL_DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL) && HAVE_DECL_DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL) == (31), "DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL 31
+#endif
+#if defined(DEVCONF_SUPPRESS_FRAG_NDISC) || (defined(HAVE_DECL_DEVCONF_SUPPRESS_FRAG_NDISC) && HAVE_DECL_DEVCONF_SUPPRESS_FRAG_NDISC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_SUPPRESS_FRAG_NDISC) == (32), "DEVCONF_SUPPRESS_FRAG_NDISC != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_SUPPRESS_FRAG_NDISC 32
+#endif
+#if defined(DEVCONF_ACCEPT_RA_FROM_LOCAL) || (defined(HAVE_DECL_DEVCONF_ACCEPT_RA_FROM_LOCAL) && HAVE_DECL_DEVCONF_ACCEPT_RA_FROM_LOCAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_RA_FROM_LOCAL) == (33), "DEVCONF_ACCEPT_RA_FROM_LOCAL != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_RA_FROM_LOCAL 33
+#endif
+#if defined(DEVCONF_USE_OPTIMISTIC) || (defined(HAVE_DECL_DEVCONF_USE_OPTIMISTIC) && HAVE_DECL_DEVCONF_USE_OPTIMISTIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_USE_OPTIMISTIC) == (34), "DEVCONF_USE_OPTIMISTIC != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_USE_OPTIMISTIC 34
+#endif
+#if defined(DEVCONF_ACCEPT_RA_MTU) || (defined(HAVE_DECL_DEVCONF_ACCEPT_RA_MTU) && HAVE_DECL_DEVCONF_ACCEPT_RA_MTU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_RA_MTU) == (35), "DEVCONF_ACCEPT_RA_MTU != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_RA_MTU 35
+#endif
+#if defined(DEVCONF_STABLE_SECRET) || (defined(HAVE_DECL_DEVCONF_STABLE_SECRET) && HAVE_DECL_DEVCONF_STABLE_SECRET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_STABLE_SECRET) == (36), "DEVCONF_STABLE_SECRET != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_STABLE_SECRET 36
+#endif
+#if defined(DEVCONF_USE_OIF_ADDRS_ONLY) || (defined(HAVE_DECL_DEVCONF_USE_OIF_ADDRS_ONLY) && HAVE_DECL_DEVCONF_USE_OIF_ADDRS_ONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_USE_OIF_ADDRS_ONLY) == (37), "DEVCONF_USE_OIF_ADDRS_ONLY != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_USE_OIF_ADDRS_ONLY 37
+#endif
+#if defined(DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT) || (defined(HAVE_DECL_DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT) && HAVE_DECL_DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT) == (38), "DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT 38
+#endif
+#if defined(DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN) || (defined(HAVE_DECL_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN) && HAVE_DECL_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN) == (39), "DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN != 39");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN 39
+#endif
+#if defined(DEVCONF_DROP_UNICAST_IN_L2_MULTICAST) || (defined(HAVE_DECL_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST) && HAVE_DECL_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_DROP_UNICAST_IN_L2_MULTICAST) == (40), "DEVCONF_DROP_UNICAST_IN_L2_MULTICAST != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_DROP_UNICAST_IN_L2_MULTICAST 40
+#endif
+#if defined(DEVCONF_DROP_UNSOLICITED_NA) || (defined(HAVE_DECL_DEVCONF_DROP_UNSOLICITED_NA) && HAVE_DECL_DEVCONF_DROP_UNSOLICITED_NA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_DROP_UNSOLICITED_NA) == (41), "DEVCONF_DROP_UNSOLICITED_NA != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_DROP_UNSOLICITED_NA 41
+#endif
+#if defined(DEVCONF_KEEP_ADDR_ON_DOWN) || (defined(HAVE_DECL_DEVCONF_KEEP_ADDR_ON_DOWN) && HAVE_DECL_DEVCONF_KEEP_ADDR_ON_DOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_KEEP_ADDR_ON_DOWN) == (42), "DEVCONF_KEEP_ADDR_ON_DOWN != 42");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_KEEP_ADDR_ON_DOWN 42
+#endif
+#if defined(DEVCONF_RTR_SOLICIT_MAX_INTERVAL) || (defined(HAVE_DECL_DEVCONF_RTR_SOLICIT_MAX_INTERVAL) && HAVE_DECL_DEVCONF_RTR_SOLICIT_MAX_INTERVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_RTR_SOLICIT_MAX_INTERVAL) == (43), "DEVCONF_RTR_SOLICIT_MAX_INTERVAL != 43");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_RTR_SOLICIT_MAX_INTERVAL 43
+#endif
+#if defined(DEVCONF_SEG6_ENABLED) || (defined(HAVE_DECL_DEVCONF_SEG6_ENABLED) && HAVE_DECL_DEVCONF_SEG6_ENABLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_SEG6_ENABLED) == (44), "DEVCONF_SEG6_ENABLED != 44");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_SEG6_ENABLED 44
+#endif
+#if defined(DEVCONF_SEG6_REQUIRE_HMAC) || (defined(HAVE_DECL_DEVCONF_SEG6_REQUIRE_HMAC) && HAVE_DECL_DEVCONF_SEG6_REQUIRE_HMAC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_SEG6_REQUIRE_HMAC) == (45), "DEVCONF_SEG6_REQUIRE_HMAC != 45");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_SEG6_REQUIRE_HMAC 45
+#endif
+#if defined(DEVCONF_ENHANCED_DAD) || (defined(HAVE_DECL_DEVCONF_ENHANCED_DAD) && HAVE_DECL_DEVCONF_ENHANCED_DAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ENHANCED_DAD) == (46), "DEVCONF_ENHANCED_DAD != 46");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ENHANCED_DAD 46
+#endif
+#if defined(DEVCONF_ADDR_GEN_MODE) || (defined(HAVE_DECL_DEVCONF_ADDR_GEN_MODE) && HAVE_DECL_DEVCONF_ADDR_GEN_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ADDR_GEN_MODE) == (47), "DEVCONF_ADDR_GEN_MODE != 47");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ADDR_GEN_MODE 47
+#endif
+#if defined(DEVCONF_DISABLE_POLICY) || (defined(HAVE_DECL_DEVCONF_DISABLE_POLICY) && HAVE_DECL_DEVCONF_DISABLE_POLICY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_DISABLE_POLICY) == (48), "DEVCONF_DISABLE_POLICY != 48");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_DISABLE_POLICY 48
+#endif
+#if defined(DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN) || (defined(HAVE_DECL_DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN) && HAVE_DECL_DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN) == (49), "DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN != 49");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN 49
+#endif
+#if defined(DEVCONF_NDISC_TCLASS) || (defined(HAVE_DECL_DEVCONF_NDISC_TCLASS) && HAVE_DECL_DEVCONF_NDISC_TCLASS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DEVCONF_NDISC_TCLASS) == (50), "DEVCONF_NDISC_TCLASS != 50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DEVCONF_NDISC_TCLASS 50
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat inet6_devconf_indices in mpers mode
+
+# else
+
+static
+const struct xlat inet6_devconf_indices[] = {
+ [DEVCONF_FORWARDING] = XLAT(DEVCONF_FORWARDING),
+ [DEVCONF_HOPLIMIT] = XLAT(DEVCONF_HOPLIMIT),
+ [DEVCONF_MTU6] = XLAT(DEVCONF_MTU6),
+ [DEVCONF_ACCEPT_RA] = XLAT(DEVCONF_ACCEPT_RA),
+ [DEVCONF_ACCEPT_REDIRECTS] = XLAT(DEVCONF_ACCEPT_REDIRECTS),
+ [DEVCONF_AUTOCONF] = XLAT(DEVCONF_AUTOCONF),
+ [DEVCONF_DAD_TRANSMITS] = XLAT(DEVCONF_DAD_TRANSMITS),
+ [DEVCONF_RTR_SOLICITS] = XLAT(DEVCONF_RTR_SOLICITS),
+ [DEVCONF_RTR_SOLICIT_INTERVAL] = XLAT(DEVCONF_RTR_SOLICIT_INTERVAL),
+ [DEVCONF_RTR_SOLICIT_DELAY] = XLAT(DEVCONF_RTR_SOLICIT_DELAY),
+ [DEVCONF_USE_TEMPADDR] = XLAT(DEVCONF_USE_TEMPADDR),
+ [DEVCONF_TEMP_VALID_LFT] = XLAT(DEVCONF_TEMP_VALID_LFT),
+ [DEVCONF_TEMP_PREFERED_LFT] = XLAT(DEVCONF_TEMP_PREFERED_LFT),
+ [DEVCONF_REGEN_MAX_RETRY] = XLAT(DEVCONF_REGEN_MAX_RETRY),
+ [DEVCONF_MAX_DESYNC_FACTOR] = XLAT(DEVCONF_MAX_DESYNC_FACTOR),
+ [DEVCONF_MAX_ADDRESSES] = XLAT(DEVCONF_MAX_ADDRESSES),
+ [DEVCONF_FORCE_MLD_VERSION] = XLAT(DEVCONF_FORCE_MLD_VERSION),
+ [DEVCONF_ACCEPT_RA_DEFRTR] = XLAT(DEVCONF_ACCEPT_RA_DEFRTR),
+ [DEVCONF_ACCEPT_RA_PINFO] = XLAT(DEVCONF_ACCEPT_RA_PINFO),
+ [DEVCONF_ACCEPT_RA_RTR_PREF] = XLAT(DEVCONF_ACCEPT_RA_RTR_PREF),
+ [DEVCONF_RTR_PROBE_INTERVAL] = XLAT(DEVCONF_RTR_PROBE_INTERVAL),
+ [DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN] = XLAT(DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN),
+ [DEVCONF_PROXY_NDP] = XLAT(DEVCONF_PROXY_NDP),
+ [DEVCONF_OPTIMISTIC_DAD] = XLAT(DEVCONF_OPTIMISTIC_DAD),
+ [DEVCONF_ACCEPT_SOURCE_ROUTE] = XLAT(DEVCONF_ACCEPT_SOURCE_ROUTE),
+ [DEVCONF_MC_FORWARDING] = XLAT(DEVCONF_MC_FORWARDING),
+ [DEVCONF_DISABLE_IPV6] = XLAT(DEVCONF_DISABLE_IPV6),
+ [DEVCONF_ACCEPT_DAD] = XLAT(DEVCONF_ACCEPT_DAD),
+ [DEVCONF_FORCE_TLLAO] = XLAT(DEVCONF_FORCE_TLLAO),
+ [DEVCONF_NDISC_NOTIFY] = XLAT(DEVCONF_NDISC_NOTIFY),
+ [DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL] = XLAT(DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL),
+ [DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL] = XLAT(DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL),
+ [DEVCONF_SUPPRESS_FRAG_NDISC] = XLAT(DEVCONF_SUPPRESS_FRAG_NDISC),
+ [DEVCONF_ACCEPT_RA_FROM_LOCAL] = XLAT(DEVCONF_ACCEPT_RA_FROM_LOCAL),
+ [DEVCONF_USE_OPTIMISTIC] = XLAT(DEVCONF_USE_OPTIMISTIC),
+ [DEVCONF_ACCEPT_RA_MTU] = XLAT(DEVCONF_ACCEPT_RA_MTU),
+ [DEVCONF_STABLE_SECRET] = XLAT(DEVCONF_STABLE_SECRET),
+ [DEVCONF_USE_OIF_ADDRS_ONLY] = XLAT(DEVCONF_USE_OIF_ADDRS_ONLY),
+ [DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT] = XLAT(DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT),
+ [DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN] = XLAT(DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN),
+ [DEVCONF_DROP_UNICAST_IN_L2_MULTICAST] = XLAT(DEVCONF_DROP_UNICAST_IN_L2_MULTICAST),
+ [DEVCONF_DROP_UNSOLICITED_NA] = XLAT(DEVCONF_DROP_UNSOLICITED_NA),
+ [DEVCONF_KEEP_ADDR_ON_DOWN] = XLAT(DEVCONF_KEEP_ADDR_ON_DOWN),
+ [DEVCONF_RTR_SOLICIT_MAX_INTERVAL] = XLAT(DEVCONF_RTR_SOLICIT_MAX_INTERVAL),
+ [DEVCONF_SEG6_ENABLED] = XLAT(DEVCONF_SEG6_ENABLED),
+ [DEVCONF_SEG6_REQUIRE_HMAC] = XLAT(DEVCONF_SEG6_REQUIRE_HMAC),
+ [DEVCONF_ENHANCED_DAD] = XLAT(DEVCONF_ENHANCED_DAD),
+ [DEVCONF_ADDR_GEN_MODE] = XLAT(DEVCONF_ADDR_GEN_MODE),
+ [DEVCONF_DISABLE_POLICY] = XLAT(DEVCONF_DISABLE_POLICY),
+ [DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN] = XLAT(DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN),
+ [DEVCONF_NDISC_TCLASS] = XLAT(DEVCONF_NDISC_TCLASS),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/inet6_devconf_indices.in b/xlat/inet6_devconf_indices.in
new file mode 100644
index 0000000..89efe7f
--- /dev/null
+++ b/xlat/inet6_devconf_indices.in
@@ -0,0 +1,52 @@
+#value_indexed
+DEVCONF_FORWARDING				0
+DEVCONF_HOPLIMIT				1
+DEVCONF_MTU6					2
+DEVCONF_ACCEPT_RA				3
+DEVCONF_ACCEPT_REDIRECTS			4
+DEVCONF_AUTOCONF				5
+DEVCONF_DAD_TRANSMITS				6
+DEVCONF_RTR_SOLICITS				7
+DEVCONF_RTR_SOLICIT_INTERVAL			8
+DEVCONF_RTR_SOLICIT_DELAY			9
+DEVCONF_USE_TEMPADDR				10
+DEVCONF_TEMP_VALID_LFT				11
+DEVCONF_TEMP_PREFERED_LFT			12
+DEVCONF_REGEN_MAX_RETRY				13
+DEVCONF_MAX_DESYNC_FACTOR			14
+DEVCONF_MAX_ADDRESSES				15
+DEVCONF_FORCE_MLD_VERSION			16
+DEVCONF_ACCEPT_RA_DEFRTR			17
+DEVCONF_ACCEPT_RA_PINFO				18
+DEVCONF_ACCEPT_RA_RTR_PREF			19
+DEVCONF_RTR_PROBE_INTERVAL			20
+DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN		21
+DEVCONF_PROXY_NDP				22
+DEVCONF_OPTIMISTIC_DAD				23
+DEVCONF_ACCEPT_SOURCE_ROUTE			24
+DEVCONF_MC_FORWARDING				25
+DEVCONF_DISABLE_IPV6				26
+DEVCONF_ACCEPT_DAD				27
+DEVCONF_FORCE_TLLAO				28
+DEVCONF_NDISC_NOTIFY				29
+DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL	30
+DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL	31
+DEVCONF_SUPPRESS_FRAG_NDISC			32
+DEVCONF_ACCEPT_RA_FROM_LOCAL			33
+DEVCONF_USE_OPTIMISTIC				34
+DEVCONF_ACCEPT_RA_MTU				35
+DEVCONF_STABLE_SECRET				36
+DEVCONF_USE_OIF_ADDRS_ONLY			37
+DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT			38
+DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN		39
+DEVCONF_DROP_UNICAST_IN_L2_MULTICAST		40
+DEVCONF_DROP_UNSOLICITED_NA			41
+DEVCONF_KEEP_ADDR_ON_DOWN			42
+DEVCONF_RTR_SOLICIT_MAX_INTERVAL		43
+DEVCONF_SEG6_ENABLED				44
+DEVCONF_SEG6_REQUIRE_HMAC			45
+DEVCONF_ENHANCED_DAD				46
+DEVCONF_ADDR_GEN_MODE				47
+DEVCONF_DISABLE_POLICY				48
+DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN		49
+DEVCONF_NDISC_TCLASS				50
diff --git a/xlat/inet6_if_flags.h b/xlat/inet6_if_flags.h
new file mode 100644
index 0000000..74ba7d1
--- /dev/null
+++ b/xlat/inet6_if_flags.h
@@ -0,0 +1,63 @@
+/* Generated by ./xlat/gen.sh from ./xlat/inet6_if_flags.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IF_RS_SENT) || (defined(HAVE_DECL_IF_RS_SENT) && HAVE_DECL_IF_RS_SENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IF_RS_SENT) == (0x10), "IF_RS_SENT != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IF_RS_SENT 0x10
+#endif
+#if defined(IF_RA_RCVD) || (defined(HAVE_DECL_IF_RA_RCVD) && HAVE_DECL_IF_RA_RCVD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IF_RA_RCVD) == (0x20), "IF_RA_RCVD != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IF_RA_RCVD 0x20
+#endif
+#if defined(IF_RA_MANAGED) || (defined(HAVE_DECL_IF_RA_MANAGED) && HAVE_DECL_IF_RA_MANAGED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IF_RA_MANAGED) == (0x40), "IF_RA_MANAGED != 0x40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IF_RA_MANAGED 0x40
+#endif
+#if defined(IF_RA_OTHERCONF) || (defined(HAVE_DECL_IF_RA_OTHERCONF) && HAVE_DECL_IF_RA_OTHERCONF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IF_RA_OTHERCONF) == (0x80), "IF_RA_OTHERCONF != 0x80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IF_RA_OTHERCONF 0x80
+#endif
+#if defined(IF_READY) || (defined(HAVE_DECL_IF_READY) && HAVE_DECL_IF_READY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IF_READY) == (0x80000000), "IF_READY != 0x80000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IF_READY 0x80000000
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat inet6_if_flags in mpers mode
+
+# else
+
+static
+const struct xlat inet6_if_flags[] = {
+
+ XLAT(IF_RS_SENT),
+ XLAT(IF_RA_RCVD),
+ XLAT(IF_RA_MANAGED),
+ XLAT(IF_RA_OTHERCONF),
+ XLAT(IF_READY),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/inet6_if_flags.in b/xlat/inet6_if_flags.in
new file mode 100644
index 0000000..befd223
--- /dev/null
+++ b/xlat/inet6_if_flags.in
@@ -0,0 +1,6 @@
+/* sort -k2,2g */
+IF_RS_SENT	0x10
+IF_RA_RCVD	0x20
+IF_RA_MANAGED	0x40
+IF_RA_OTHERCONF	0x80
+IF_READY	0x80000000
diff --git a/xlat/inet_devconf_indices.h b/xlat/inet_devconf_indices.h
new file mode 100644
index 0000000..ce00a54
--- /dev/null
+++ b/xlat/inet_devconf_indices.h
@@ -0,0 +1,271 @@
+/* Generated by ./xlat/gen.sh from ./xlat/inet_devconf_indices.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPV4_DEVCONF_FORWARDING) || (defined(HAVE_DECL_IPV4_DEVCONF_FORWARDING) && HAVE_DECL_IPV4_DEVCONF_FORWARDING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_FORWARDING) == (1), "IPV4_DEVCONF_FORWARDING != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_FORWARDING 1
+#endif
+#if defined(IPV4_DEVCONF_MC_FORWARDING) || (defined(HAVE_DECL_IPV4_DEVCONF_MC_FORWARDING) && HAVE_DECL_IPV4_DEVCONF_MC_FORWARDING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_MC_FORWARDING) == (2), "IPV4_DEVCONF_MC_FORWARDING != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_MC_FORWARDING 2
+#endif
+#if defined(IPV4_DEVCONF_PROXY_ARP) || (defined(HAVE_DECL_IPV4_DEVCONF_PROXY_ARP) && HAVE_DECL_IPV4_DEVCONF_PROXY_ARP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_PROXY_ARP) == (3), "IPV4_DEVCONF_PROXY_ARP != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_PROXY_ARP 3
+#endif
+#if defined(IPV4_DEVCONF_ACCEPT_REDIRECTS) || (defined(HAVE_DECL_IPV4_DEVCONF_ACCEPT_REDIRECTS) && HAVE_DECL_IPV4_DEVCONF_ACCEPT_REDIRECTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_ACCEPT_REDIRECTS) == (4), "IPV4_DEVCONF_ACCEPT_REDIRECTS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_ACCEPT_REDIRECTS 4
+#endif
+#if defined(IPV4_DEVCONF_SECURE_REDIRECTS) || (defined(HAVE_DECL_IPV4_DEVCONF_SECURE_REDIRECTS) && HAVE_DECL_IPV4_DEVCONF_SECURE_REDIRECTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_SECURE_REDIRECTS) == (5), "IPV4_DEVCONF_SECURE_REDIRECTS != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_SECURE_REDIRECTS 5
+#endif
+#if defined(IPV4_DEVCONF_SEND_REDIRECTS) || (defined(HAVE_DECL_IPV4_DEVCONF_SEND_REDIRECTS) && HAVE_DECL_IPV4_DEVCONF_SEND_REDIRECTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_SEND_REDIRECTS) == (6), "IPV4_DEVCONF_SEND_REDIRECTS != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_SEND_REDIRECTS 6
+#endif
+#if defined(IPV4_DEVCONF_SHARED_MEDIA) || (defined(HAVE_DECL_IPV4_DEVCONF_SHARED_MEDIA) && HAVE_DECL_IPV4_DEVCONF_SHARED_MEDIA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_SHARED_MEDIA) == (7), "IPV4_DEVCONF_SHARED_MEDIA != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_SHARED_MEDIA 7
+#endif
+#if defined(IPV4_DEVCONF_RP_FILTER) || (defined(HAVE_DECL_IPV4_DEVCONF_RP_FILTER) && HAVE_DECL_IPV4_DEVCONF_RP_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_RP_FILTER) == (8), "IPV4_DEVCONF_RP_FILTER != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_RP_FILTER 8
+#endif
+#if defined(IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE) || (defined(HAVE_DECL_IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE) && HAVE_DECL_IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE) == (9), "IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE 9
+#endif
+#if defined(IPV4_DEVCONF_BOOTP_RELAY) || (defined(HAVE_DECL_IPV4_DEVCONF_BOOTP_RELAY) && HAVE_DECL_IPV4_DEVCONF_BOOTP_RELAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_BOOTP_RELAY) == (10), "IPV4_DEVCONF_BOOTP_RELAY != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_BOOTP_RELAY 10
+#endif
+#if defined(IPV4_DEVCONF_LOG_MARTIANS) || (defined(HAVE_DECL_IPV4_DEVCONF_LOG_MARTIANS) && HAVE_DECL_IPV4_DEVCONF_LOG_MARTIANS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_LOG_MARTIANS) == (11), "IPV4_DEVCONF_LOG_MARTIANS != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_LOG_MARTIANS 11
+#endif
+#if defined(IPV4_DEVCONF_TAG) || (defined(HAVE_DECL_IPV4_DEVCONF_TAG) && HAVE_DECL_IPV4_DEVCONF_TAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_TAG) == (12), "IPV4_DEVCONF_TAG != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_TAG 12
+#endif
+#if defined(IPV4_DEVCONF_ARPFILTER) || (defined(HAVE_DECL_IPV4_DEVCONF_ARPFILTER) && HAVE_DECL_IPV4_DEVCONF_ARPFILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_ARPFILTER) == (13), "IPV4_DEVCONF_ARPFILTER != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_ARPFILTER 13
+#endif
+#if defined(IPV4_DEVCONF_MEDIUM_ID) || (defined(HAVE_DECL_IPV4_DEVCONF_MEDIUM_ID) && HAVE_DECL_IPV4_DEVCONF_MEDIUM_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_MEDIUM_ID) == (14), "IPV4_DEVCONF_MEDIUM_ID != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_MEDIUM_ID 14
+#endif
+#if defined(IPV4_DEVCONF_NOXFRM) || (defined(HAVE_DECL_IPV4_DEVCONF_NOXFRM) && HAVE_DECL_IPV4_DEVCONF_NOXFRM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_NOXFRM) == (15), "IPV4_DEVCONF_NOXFRM != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_NOXFRM 15
+#endif
+#if defined(IPV4_DEVCONF_NOPOLICY) || (defined(HAVE_DECL_IPV4_DEVCONF_NOPOLICY) && HAVE_DECL_IPV4_DEVCONF_NOPOLICY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_NOPOLICY) == (16), "IPV4_DEVCONF_NOPOLICY != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_NOPOLICY 16
+#endif
+#if defined(IPV4_DEVCONF_FORCE_IGMP_VERSION) || (defined(HAVE_DECL_IPV4_DEVCONF_FORCE_IGMP_VERSION) && HAVE_DECL_IPV4_DEVCONF_FORCE_IGMP_VERSION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_FORCE_IGMP_VERSION) == (17), "IPV4_DEVCONF_FORCE_IGMP_VERSION != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_FORCE_IGMP_VERSION 17
+#endif
+#if defined(IPV4_DEVCONF_ARP_ANNOUNCE) || (defined(HAVE_DECL_IPV4_DEVCONF_ARP_ANNOUNCE) && HAVE_DECL_IPV4_DEVCONF_ARP_ANNOUNCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_ARP_ANNOUNCE) == (18), "IPV4_DEVCONF_ARP_ANNOUNCE != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_ARP_ANNOUNCE 18
+#endif
+#if defined(IPV4_DEVCONF_ARP_IGNORE) || (defined(HAVE_DECL_IPV4_DEVCONF_ARP_IGNORE) && HAVE_DECL_IPV4_DEVCONF_ARP_IGNORE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_ARP_IGNORE) == (19), "IPV4_DEVCONF_ARP_IGNORE != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_ARP_IGNORE 19
+#endif
+#if defined(IPV4_DEVCONF_PROMOTE_SECONDARIES) || (defined(HAVE_DECL_IPV4_DEVCONF_PROMOTE_SECONDARIES) && HAVE_DECL_IPV4_DEVCONF_PROMOTE_SECONDARIES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_PROMOTE_SECONDARIES) == (20), "IPV4_DEVCONF_PROMOTE_SECONDARIES != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_PROMOTE_SECONDARIES 20
+#endif
+#if defined(IPV4_DEVCONF_ARP_ACCEPT) || (defined(HAVE_DECL_IPV4_DEVCONF_ARP_ACCEPT) && HAVE_DECL_IPV4_DEVCONF_ARP_ACCEPT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_ARP_ACCEPT) == (21), "IPV4_DEVCONF_ARP_ACCEPT != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_ARP_ACCEPT 21
+#endif
+#if defined(IPV4_DEVCONF_ARP_NOTIFY) || (defined(HAVE_DECL_IPV4_DEVCONF_ARP_NOTIFY) && HAVE_DECL_IPV4_DEVCONF_ARP_NOTIFY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_ARP_NOTIFY) == (22), "IPV4_DEVCONF_ARP_NOTIFY != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_ARP_NOTIFY 22
+#endif
+#if defined(IPV4_DEVCONF_ACCEPT_LOCAL) || (defined(HAVE_DECL_IPV4_DEVCONF_ACCEPT_LOCAL) && HAVE_DECL_IPV4_DEVCONF_ACCEPT_LOCAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_ACCEPT_LOCAL) == (23), "IPV4_DEVCONF_ACCEPT_LOCAL != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_ACCEPT_LOCAL 23
+#endif
+#if defined(IPV4_DEVCONF_SRC_VMARK) || (defined(HAVE_DECL_IPV4_DEVCONF_SRC_VMARK) && HAVE_DECL_IPV4_DEVCONF_SRC_VMARK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_SRC_VMARK) == (24), "IPV4_DEVCONF_SRC_VMARK != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_SRC_VMARK 24
+#endif
+#if defined(IPV4_DEVCONF_PROXY_ARP_PVLAN) || (defined(HAVE_DECL_IPV4_DEVCONF_PROXY_ARP_PVLAN) && HAVE_DECL_IPV4_DEVCONF_PROXY_ARP_PVLAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_PROXY_ARP_PVLAN) == (25), "IPV4_DEVCONF_PROXY_ARP_PVLAN != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_PROXY_ARP_PVLAN 25
+#endif
+#if defined(IPV4_DEVCONF_ROUTE_LOCALNET) || (defined(HAVE_DECL_IPV4_DEVCONF_ROUTE_LOCALNET) && HAVE_DECL_IPV4_DEVCONF_ROUTE_LOCALNET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_ROUTE_LOCALNET) == (26), "IPV4_DEVCONF_ROUTE_LOCALNET != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_ROUTE_LOCALNET 26
+#endif
+#if defined(IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL) || (defined(HAVE_DECL_IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL) && HAVE_DECL_IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL) == (27), "IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL 27
+#endif
+#if defined(IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL) || (defined(HAVE_DECL_IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL) && HAVE_DECL_IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL) == (28), "IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL 28
+#endif
+#if defined(IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN) || (defined(HAVE_DECL_IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN) && HAVE_DECL_IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN) == (29), "IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN 29
+#endif
+#if defined(IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST) || (defined(HAVE_DECL_IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST) && HAVE_DECL_IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST) == (30), "IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST 30
+#endif
+#if defined(IPV4_DEVCONF_DROP_GRATUITOUS_ARP) || (defined(HAVE_DECL_IPV4_DEVCONF_DROP_GRATUITOUS_ARP) && HAVE_DECL_IPV4_DEVCONF_DROP_GRATUITOUS_ARP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPV4_DEVCONF_DROP_GRATUITOUS_ARP) == (31), "IPV4_DEVCONF_DROP_GRATUITOUS_ARP != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPV4_DEVCONF_DROP_GRATUITOUS_ARP 31
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat inet_devconf_indices in mpers mode
+
+# else
+
+static
+const struct xlat inet_devconf_indices[] = {
+
+ [IPV4_DEVCONF_FORWARDING-1] = XLAT(IPV4_DEVCONF_FORWARDING-1),
+ [IPV4_DEVCONF_MC_FORWARDING-1] = XLAT(IPV4_DEVCONF_MC_FORWARDING-1),
+ [IPV4_DEVCONF_PROXY_ARP-1] = XLAT(IPV4_DEVCONF_PROXY_ARP-1),
+ [IPV4_DEVCONF_ACCEPT_REDIRECTS-1] = XLAT(IPV4_DEVCONF_ACCEPT_REDIRECTS-1),
+ [IPV4_DEVCONF_SECURE_REDIRECTS-1] = XLAT(IPV4_DEVCONF_SECURE_REDIRECTS-1),
+ [IPV4_DEVCONF_SEND_REDIRECTS-1] = XLAT(IPV4_DEVCONF_SEND_REDIRECTS-1),
+ [IPV4_DEVCONF_SHARED_MEDIA-1] = XLAT(IPV4_DEVCONF_SHARED_MEDIA-1),
+ [IPV4_DEVCONF_RP_FILTER-1] = XLAT(IPV4_DEVCONF_RP_FILTER-1),
+ [IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE-1] = XLAT(IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE-1),
+ [IPV4_DEVCONF_BOOTP_RELAY-1] = XLAT(IPV4_DEVCONF_BOOTP_RELAY-1),
+ [IPV4_DEVCONF_LOG_MARTIANS-1] = XLAT(IPV4_DEVCONF_LOG_MARTIANS-1),
+ [IPV4_DEVCONF_TAG-1] = XLAT(IPV4_DEVCONF_TAG-1),
+ [IPV4_DEVCONF_ARPFILTER-1] = XLAT(IPV4_DEVCONF_ARPFILTER-1),
+ [IPV4_DEVCONF_MEDIUM_ID-1] = XLAT(IPV4_DEVCONF_MEDIUM_ID-1),
+ [IPV4_DEVCONF_NOXFRM-1] = XLAT(IPV4_DEVCONF_NOXFRM-1),
+ [IPV4_DEVCONF_NOPOLICY-1] = XLAT(IPV4_DEVCONF_NOPOLICY-1),
+ [IPV4_DEVCONF_FORCE_IGMP_VERSION-1] = XLAT(IPV4_DEVCONF_FORCE_IGMP_VERSION-1),
+ [IPV4_DEVCONF_ARP_ANNOUNCE-1] = XLAT(IPV4_DEVCONF_ARP_ANNOUNCE-1),
+ [IPV4_DEVCONF_ARP_IGNORE-1] = XLAT(IPV4_DEVCONF_ARP_IGNORE-1),
+ [IPV4_DEVCONF_PROMOTE_SECONDARIES-1] = XLAT(IPV4_DEVCONF_PROMOTE_SECONDARIES-1),
+ [IPV4_DEVCONF_ARP_ACCEPT-1] = XLAT(IPV4_DEVCONF_ARP_ACCEPT-1),
+ [IPV4_DEVCONF_ARP_NOTIFY-1] = XLAT(IPV4_DEVCONF_ARP_NOTIFY-1),
+ [IPV4_DEVCONF_ACCEPT_LOCAL-1] = XLAT(IPV4_DEVCONF_ACCEPT_LOCAL-1),
+ [IPV4_DEVCONF_SRC_VMARK-1] = XLAT(IPV4_DEVCONF_SRC_VMARK-1),
+ [IPV4_DEVCONF_PROXY_ARP_PVLAN-1] = XLAT(IPV4_DEVCONF_PROXY_ARP_PVLAN-1),
+ [IPV4_DEVCONF_ROUTE_LOCALNET-1] = XLAT(IPV4_DEVCONF_ROUTE_LOCALNET-1),
+ [IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL-1] = XLAT(IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL-1),
+ [IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL-1] = XLAT(IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL-1),
+ [IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN-1] = XLAT(IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN-1),
+ [IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST-1] = XLAT(IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST-1),
+ [IPV4_DEVCONF_DROP_GRATUITOUS_ARP-1] = XLAT(IPV4_DEVCONF_DROP_GRATUITOUS_ARP-1),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/inet_devconf_indices.in b/xlat/inet_devconf_indices.in
new file mode 100644
index 0000000..eabcfc5
--- /dev/null
+++ b/xlat/inet_devconf_indices.in
@@ -0,0 +1,33 @@
+#value_indexed
+/* These fallback definitions are for constants, not for expressions.  */
+IPV4_DEVCONF_FORWARDING-1				1
+IPV4_DEVCONF_MC_FORWARDING-1				2
+IPV4_DEVCONF_PROXY_ARP-1				3
+IPV4_DEVCONF_ACCEPT_REDIRECTS-1				4
+IPV4_DEVCONF_SECURE_REDIRECTS-1				5
+IPV4_DEVCONF_SEND_REDIRECTS-1				6
+IPV4_DEVCONF_SHARED_MEDIA-1				7
+IPV4_DEVCONF_RP_FILTER-1				8
+IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE-1			9
+IPV4_DEVCONF_BOOTP_RELAY-1				10
+IPV4_DEVCONF_LOG_MARTIANS-1				11
+IPV4_DEVCONF_TAG-1					12
+IPV4_DEVCONF_ARPFILTER-1				13
+IPV4_DEVCONF_MEDIUM_ID-1				14
+IPV4_DEVCONF_NOXFRM-1					15
+IPV4_DEVCONF_NOPOLICY-1					16
+IPV4_DEVCONF_FORCE_IGMP_VERSION-1			17
+IPV4_DEVCONF_ARP_ANNOUNCE-1				18
+IPV4_DEVCONF_ARP_IGNORE-1				19
+IPV4_DEVCONF_PROMOTE_SECONDARIES-1			20
+IPV4_DEVCONF_ARP_ACCEPT-1				21
+IPV4_DEVCONF_ARP_NOTIFY-1				22
+IPV4_DEVCONF_ACCEPT_LOCAL-1				23
+IPV4_DEVCONF_SRC_VMARK-1				24
+IPV4_DEVCONF_PROXY_ARP_PVLAN-1				25
+IPV4_DEVCONF_ROUTE_LOCALNET-1				26
+IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL-1	27
+IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL-1	28
+IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN-1		29
+IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST-1		30
+IPV4_DEVCONF_DROP_GRATUITOUS_ARP-1			31
diff --git a/xlat/inet_diag_attrs.h b/xlat/inet_diag_attrs.h
index a483373..ebfd2ad 100644
--- a/xlat/inet_diag_attrs.h
+++ b/xlat/inet_diag_attrs.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/inet_diag_attrs.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat inet_diag_attrs in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat inet_diag_attrs in mpers mode
+
+# else
 
 static
 const struct xlat inet_diag_attrs[] = {
@@ -29,4 +35,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/inet_diag_bytecodes.h b/xlat/inet_diag_bytecodes.h
index 21d35eb..93286db 100644
--- a/xlat/inet_diag_bytecodes.h
+++ b/xlat/inet_diag_bytecodes.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/inet_diag_bytecodes.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat inet_diag_bytecodes in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat inet_diag_bytecodes in mpers mode
+
+# else
 
 static
 const struct xlat inet_diag_bytecodes[] = {
@@ -24,4 +30,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/inet_diag_extended_flags.h b/xlat/inet_diag_extended_flags.h
index 158e4e1..410b920 100644
--- a/xlat/inet_diag_extended_flags.h
+++ b/xlat/inet_diag_extended_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/inet_diag_extended_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat inet_diag_extended_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat inet_diag_extended_flags in mpers mode
+
+# else
 
 static
 const struct xlat inet_diag_extended_flags[] = {
@@ -28,4 +34,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/inet_diag_req_attrs.h b/xlat/inet_diag_req_attrs.h
index 6fc4bac..be64b3f 100644
--- a/xlat/inet_diag_req_attrs.h
+++ b/xlat/inet_diag_req_attrs.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/inet_diag_req_attrs.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat inet_diag_req_attrs in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat inet_diag_req_attrs in mpers mode
+
+# else
 
 static
 const struct xlat inet_diag_req_attrs[] = {
@@ -13,4 +19,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/inet_protocols.h b/xlat/inet_protocols.h
index 47c0c0d..81672b8 100644
--- a/xlat/inet_protocols.h
+++ b/xlat/inet_protocols.h
@@ -1,108 +1,282 @@
 /* Generated by ./xlat/gen.sh from ./xlat/inet_protocols.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-const struct xlat inet_protocols[] = {
 #if defined(IPPROTO_IP) || (defined(HAVE_DECL_IPPROTO_IP) && HAVE_DECL_IPPROTO_IP)
-  XLAT(IPPROTO_IP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_IP) == (0), "IPPROTO_IP != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_IP 0
 #endif
 #if defined(IPPROTO_ICMP) || (defined(HAVE_DECL_IPPROTO_ICMP) && HAVE_DECL_IPPROTO_ICMP)
-  XLAT(IPPROTO_ICMP),
-#endif
-#if defined(IPPROTO_TCP) || (defined(HAVE_DECL_IPPROTO_TCP) && HAVE_DECL_IPPROTO_TCP)
-  XLAT(IPPROTO_TCP),
-#endif
-#if defined(IPPROTO_UDP) || (defined(HAVE_DECL_IPPROTO_UDP) && HAVE_DECL_IPPROTO_UDP)
-  XLAT(IPPROTO_UDP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_ICMP) == (1), "IPPROTO_ICMP != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_ICMP 1
 #endif
 #if defined(IPPROTO_IGMP) || (defined(HAVE_DECL_IPPROTO_IGMP) && HAVE_DECL_IPPROTO_IGMP)
-  XLAT(IPPROTO_IGMP),
-#endif
-#if defined(IPPROTO_GGP) || (defined(HAVE_DECL_IPPROTO_GGP) && HAVE_DECL_IPPROTO_GGP)
-  XLAT(IPPROTO_GGP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_IGMP) == (2), "IPPROTO_IGMP != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_IGMP 2
 #endif
 #if defined(IPPROTO_IPIP) || (defined(HAVE_DECL_IPPROTO_IPIP) && HAVE_DECL_IPPROTO_IPIP)
-  XLAT(IPPROTO_IPIP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_IPIP) == (4), "IPPROTO_IPIP != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_IPIP 4
+#endif
+#if defined(IPPROTO_TCP) || (defined(HAVE_DECL_IPPROTO_TCP) && HAVE_DECL_IPPROTO_TCP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_TCP) == (6), "IPPROTO_TCP != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_TCP 6
 #endif
 #if defined(IPPROTO_EGP) || (defined(HAVE_DECL_IPPROTO_EGP) && HAVE_DECL_IPPROTO_EGP)
-  XLAT(IPPROTO_EGP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_EGP) == (8), "IPPROTO_EGP != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_EGP 8
 #endif
 #if defined(IPPROTO_PUP) || (defined(HAVE_DECL_IPPROTO_PUP) && HAVE_DECL_IPPROTO_PUP)
-  XLAT(IPPROTO_PUP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_PUP) == (12), "IPPROTO_PUP != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_PUP 12
+#endif
+#if defined(IPPROTO_UDP) || (defined(HAVE_DECL_IPPROTO_UDP) && HAVE_DECL_IPPROTO_UDP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_UDP) == (17), "IPPROTO_UDP != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_UDP 17
 #endif
 #if defined(IPPROTO_IDP) || (defined(HAVE_DECL_IPPROTO_IDP) && HAVE_DECL_IPPROTO_IDP)
-  XLAT(IPPROTO_IDP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_IDP) == (22), "IPPROTO_IDP != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_IDP 22
 #endif
 #if defined(IPPROTO_TP) || (defined(HAVE_DECL_IPPROTO_TP) && HAVE_DECL_IPPROTO_TP)
-  XLAT(IPPROTO_TP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_TP) == (29), "IPPROTO_TP != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_TP 29
 #endif
 #if defined(IPPROTO_DCCP) || (defined(HAVE_DECL_IPPROTO_DCCP) && HAVE_DECL_IPPROTO_DCCP)
-  XLAT(IPPROTO_DCCP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_DCCP) == (33), "IPPROTO_DCCP != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_DCCP 33
 #endif
 #if defined(IPPROTO_IPV6) || (defined(HAVE_DECL_IPPROTO_IPV6) && HAVE_DECL_IPPROTO_IPV6)
-  XLAT(IPPROTO_IPV6),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_IPV6) == (41), "IPPROTO_IPV6 != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_IPV6 41
 #endif
 #if defined(IPPROTO_ROUTING) || (defined(HAVE_DECL_IPPROTO_ROUTING) && HAVE_DECL_IPPROTO_ROUTING)
-  XLAT(IPPROTO_ROUTING),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_ROUTING) == (43), "IPPROTO_ROUTING != 43");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_ROUTING 43
 #endif
 #if defined(IPPROTO_FRAGMENT) || (defined(HAVE_DECL_IPPROTO_FRAGMENT) && HAVE_DECL_IPPROTO_FRAGMENT)
-  XLAT(IPPROTO_FRAGMENT),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_FRAGMENT) == (44), "IPPROTO_FRAGMENT != 44");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_FRAGMENT 44
 #endif
 #if defined(IPPROTO_RSVP) || (defined(HAVE_DECL_IPPROTO_RSVP) && HAVE_DECL_IPPROTO_RSVP)
-  XLAT(IPPROTO_RSVP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_RSVP) == (46), "IPPROTO_RSVP != 46");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_RSVP 46
 #endif
 #if defined(IPPROTO_GRE) || (defined(HAVE_DECL_IPPROTO_GRE) && HAVE_DECL_IPPROTO_GRE)
-  XLAT(IPPROTO_GRE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_GRE) == (47), "IPPROTO_GRE != 47");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_GRE 47
 #endif
 #if defined(IPPROTO_ESP) || (defined(HAVE_DECL_IPPROTO_ESP) && HAVE_DECL_IPPROTO_ESP)
-  XLAT(IPPROTO_ESP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_ESP) == (50), "IPPROTO_ESP != 50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_ESP 50
 #endif
 #if defined(IPPROTO_AH) || (defined(HAVE_DECL_IPPROTO_AH) && HAVE_DECL_IPPROTO_AH)
-  XLAT(IPPROTO_AH),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_AH) == (51), "IPPROTO_AH != 51");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_AH 51
 #endif
 #if defined(IPPROTO_ICMPV6) || (defined(HAVE_DECL_IPPROTO_ICMPV6) && HAVE_DECL_IPPROTO_ICMPV6)
-  XLAT(IPPROTO_ICMPV6),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_ICMPV6) == (58), "IPPROTO_ICMPV6 != 58");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_ICMPV6 58
 #endif
 #if defined(IPPROTO_NONE) || (defined(HAVE_DECL_IPPROTO_NONE) && HAVE_DECL_IPPROTO_NONE)
-  XLAT(IPPROTO_NONE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_NONE) == (59), "IPPROTO_NONE != 59");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_NONE 59
 #endif
 #if defined(IPPROTO_DSTOPTS) || (defined(HAVE_DECL_IPPROTO_DSTOPTS) && HAVE_DECL_IPPROTO_DSTOPTS)
-  XLAT(IPPROTO_DSTOPTS),
-#endif
-#if defined(IPPROTO_HELLO) || (defined(HAVE_DECL_IPPROTO_HELLO) && HAVE_DECL_IPPROTO_HELLO)
-  XLAT(IPPROTO_HELLO),
-#endif
-#if defined(IPPROTO_ND) || (defined(HAVE_DECL_IPPROTO_ND) && HAVE_DECL_IPPROTO_ND)
-  XLAT(IPPROTO_ND),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_DSTOPTS) == (60), "IPPROTO_DSTOPTS != 60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_DSTOPTS 60
 #endif
 #if defined(IPPROTO_MTP) || (defined(HAVE_DECL_IPPROTO_MTP) && HAVE_DECL_IPPROTO_MTP)
-  XLAT(IPPROTO_MTP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_MTP) == (92), "IPPROTO_MTP != 92");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_MTP 92
+#endif
+#if defined(IPPROTO_BEETPH) || (defined(HAVE_DECL_IPPROTO_BEETPH) && HAVE_DECL_IPPROTO_BEETPH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_BEETPH) == (94), "IPPROTO_BEETPH != 94");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_BEETPH 94
 #endif
 #if defined(IPPROTO_ENCAP) || (defined(HAVE_DECL_IPPROTO_ENCAP) && HAVE_DECL_IPPROTO_ENCAP)
-  XLAT(IPPROTO_ENCAP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_ENCAP) == (98), "IPPROTO_ENCAP != 98");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_ENCAP 98
 #endif
 #if defined(IPPROTO_PIM) || (defined(HAVE_DECL_IPPROTO_PIM) && HAVE_DECL_IPPROTO_PIM)
-  XLAT(IPPROTO_PIM),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_PIM) == (103), "IPPROTO_PIM != 103");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_PIM 103
 #endif
 #if defined(IPPROTO_COMP) || (defined(HAVE_DECL_IPPROTO_COMP) && HAVE_DECL_IPPROTO_COMP)
-  XLAT(IPPROTO_COMP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_COMP) == (108), "IPPROTO_COMP != 108");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_COMP 108
+#endif
+#if defined(IPPROTO_L2TP) || (defined(HAVE_DECL_IPPROTO_L2TP) && HAVE_DECL_IPPROTO_L2TP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_L2TP) == (115), "IPPROTO_L2TP != 115");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_L2TP 115
 #endif
 #if defined(IPPROTO_SCTP) || (defined(HAVE_DECL_IPPROTO_SCTP) && HAVE_DECL_IPPROTO_SCTP)
-  XLAT(IPPROTO_SCTP),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_SCTP) == (132), "IPPROTO_SCTP != 132");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_SCTP 132
+#endif
+#if defined(IPPROTO_MH) || (defined(HAVE_DECL_IPPROTO_MH) && HAVE_DECL_IPPROTO_MH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_MH) == (135), "IPPROTO_MH != 135");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_MH 135
 #endif
 #if defined(IPPROTO_UDPLITE) || (defined(HAVE_DECL_IPPROTO_UDPLITE) && HAVE_DECL_IPPROTO_UDPLITE)
-  XLAT(IPPROTO_UDPLITE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_UDPLITE) == (136), "IPPROTO_UDPLITE != 136");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_UDPLITE 136
 #endif
 #if defined(IPPROTO_MPLS) || (defined(HAVE_DECL_IPPROTO_MPLS) && HAVE_DECL_IPPROTO_MPLS)
-  XLAT(IPPROTO_MPLS),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_MPLS) == (137), "IPPROTO_MPLS != 137");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_MPLS 137
 #endif
 #if defined(IPPROTO_RAW) || (defined(HAVE_DECL_IPPROTO_RAW) && HAVE_DECL_IPPROTO_RAW)
-  XLAT(IPPROTO_RAW),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_RAW) == (255), "IPPROTO_RAW != 255");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_RAW 255
 #endif
 #if defined(IPPROTO_MAX) || (defined(HAVE_DECL_IPPROTO_MAX) && HAVE_DECL_IPPROTO_MAX)
-  XLAT(IPPROTO_MAX),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPPROTO_MAX) == (256), "IPPROTO_MAX != 256");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPPROTO_MAX 256
 #endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
+
+const struct xlat inet_protocols[] = {
+
+ XLAT(IPPROTO_IP),
+ XLAT(IPPROTO_ICMP),
+ XLAT(IPPROTO_IGMP),
+ XLAT(IPPROTO_IPIP),
+ XLAT(IPPROTO_TCP),
+ XLAT(IPPROTO_EGP),
+ XLAT(IPPROTO_PUP),
+ XLAT(IPPROTO_UDP),
+ XLAT(IPPROTO_IDP),
+ XLAT(IPPROTO_TP),
+ XLAT(IPPROTO_DCCP),
+ XLAT(IPPROTO_IPV6),
+ XLAT(IPPROTO_ROUTING),
+ XLAT(IPPROTO_FRAGMENT),
+ XLAT(IPPROTO_RSVP),
+ XLAT(IPPROTO_GRE),
+ XLAT(IPPROTO_ESP),
+ XLAT(IPPROTO_AH),
+ XLAT(IPPROTO_ICMPV6),
+ XLAT(IPPROTO_NONE),
+ XLAT(IPPROTO_DSTOPTS),
+ XLAT(IPPROTO_MTP),
+ XLAT(IPPROTO_BEETPH),
+ XLAT(IPPROTO_ENCAP),
+ XLAT(IPPROTO_PIM),
+ XLAT(IPPROTO_COMP),
+ XLAT(IPPROTO_L2TP),
+ XLAT(IPPROTO_SCTP),
+ XLAT(IPPROTO_MH),
+ XLAT(IPPROTO_UDPLITE),
+ XLAT(IPPROTO_MPLS),
+ XLAT(IPPROTO_RAW),
+ XLAT(IPPROTO_MAX),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/inet_protocols.in b/xlat/inet_protocols.in
index b7e13c9..b35b428 100644
--- a/xlat/inet_protocols.in
+++ b/xlat/inet_protocols.in
@@ -1,33 +1,34 @@
-IPPROTO_IP
-IPPROTO_ICMP
-IPPROTO_TCP
-IPPROTO_UDP
-IPPROTO_IGMP
-IPPROTO_GGP
-IPPROTO_IPIP
-IPPROTO_EGP
-IPPROTO_PUP
-IPPROTO_IDP
-IPPROTO_TP
-IPPROTO_DCCP
-IPPROTO_IPV6
-IPPROTO_ROUTING
-IPPROTO_FRAGMENT
-IPPROTO_RSVP
-IPPROTO_GRE
-IPPROTO_ESP
-IPPROTO_AH
-IPPROTO_ICMPV6
-IPPROTO_NONE
-IPPROTO_DSTOPTS
-IPPROTO_HELLO
-IPPROTO_ND
-IPPROTO_MTP
-IPPROTO_ENCAP
-IPPROTO_PIM
-IPPROTO_COMP
-IPPROTO_SCTP
-IPPROTO_UDPLITE
-IPPROTO_MPLS
-IPPROTO_RAW
-IPPROTO_MAX
+/* sort -k2,2n */
+IPPROTO_IP		0
+IPPROTO_ICMP		1
+IPPROTO_IGMP		2
+IPPROTO_IPIP		4
+IPPROTO_TCP		6
+IPPROTO_EGP		8
+IPPROTO_PUP		12
+IPPROTO_UDP		17
+IPPROTO_IDP		22
+IPPROTO_TP		29
+IPPROTO_DCCP		33
+IPPROTO_IPV6		41
+IPPROTO_ROUTING		43
+IPPROTO_FRAGMENT	44
+IPPROTO_RSVP		46
+IPPROTO_GRE		47
+IPPROTO_ESP		50
+IPPROTO_AH		51
+IPPROTO_ICMPV6		58
+IPPROTO_NONE		59
+IPPROTO_DSTOPTS		60
+IPPROTO_MTP		92
+IPPROTO_BEETPH		94
+IPPROTO_ENCAP		98
+IPPROTO_PIM		103
+IPPROTO_COMP		108
+IPPROTO_L2TP		115
+IPPROTO_SCTP		132
+IPPROTO_MH		135
+IPPROTO_UDPLITE		136
+IPPROTO_MPLS		137
+IPPROTO_RAW		255
+IPPROTO_MAX		256
diff --git a/xlat/inotify_flags.h b/xlat/inotify_flags.h
index 5638f5b..1cab92d 100644
--- a/xlat/inotify_flags.h
+++ b/xlat/inotify_flags.h
@@ -1,73 +1,163 @@
 /* Generated by ./xlat/gen.sh from ./xlat/inotify_flags.in; do not edit. */
-#if !(defined(IN_ACCESS) || (defined(HAVE_DECL_IN_ACCESS) && HAVE_DECL_IN_ACCESS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IN_ACCESS) || (defined(HAVE_DECL_IN_ACCESS) && HAVE_DECL_IN_ACCESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_ACCESS) == (0x00000001), "IN_ACCESS != 0x00000001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_ACCESS 0x00000001
 #endif
-#if !(defined(IN_MODIFY) || (defined(HAVE_DECL_IN_MODIFY) && HAVE_DECL_IN_MODIFY))
+#if defined(IN_MODIFY) || (defined(HAVE_DECL_IN_MODIFY) && HAVE_DECL_IN_MODIFY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_MODIFY) == (0x00000002), "IN_MODIFY != 0x00000002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_MODIFY 0x00000002
 #endif
-#if !(defined(IN_ATTRIB) || (defined(HAVE_DECL_IN_ATTRIB) && HAVE_DECL_IN_ATTRIB))
+#if defined(IN_ATTRIB) || (defined(HAVE_DECL_IN_ATTRIB) && HAVE_DECL_IN_ATTRIB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_ATTRIB) == (0x00000004), "IN_ATTRIB != 0x00000004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_ATTRIB 0x00000004
 #endif
-#if !(defined(IN_CLOSE_WRITE) || (defined(HAVE_DECL_IN_CLOSE_WRITE) && HAVE_DECL_IN_CLOSE_WRITE))
+#if defined(IN_CLOSE_WRITE) || (defined(HAVE_DECL_IN_CLOSE_WRITE) && HAVE_DECL_IN_CLOSE_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_CLOSE_WRITE) == (0x00000008), "IN_CLOSE_WRITE != 0x00000008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_CLOSE_WRITE 0x00000008
 #endif
-#if !(defined(IN_CLOSE_NOWRITE) || (defined(HAVE_DECL_IN_CLOSE_NOWRITE) && HAVE_DECL_IN_CLOSE_NOWRITE))
+#if defined(IN_CLOSE_NOWRITE) || (defined(HAVE_DECL_IN_CLOSE_NOWRITE) && HAVE_DECL_IN_CLOSE_NOWRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_CLOSE_NOWRITE) == (0x00000010), "IN_CLOSE_NOWRITE != 0x00000010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_CLOSE_NOWRITE 0x00000010
 #endif
-#if !(defined(IN_OPEN) || (defined(HAVE_DECL_IN_OPEN) && HAVE_DECL_IN_OPEN))
+#if defined(IN_OPEN) || (defined(HAVE_DECL_IN_OPEN) && HAVE_DECL_IN_OPEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_OPEN) == (0x00000020), "IN_OPEN != 0x00000020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_OPEN 0x00000020
 #endif
-#if !(defined(IN_MOVED_FROM) || (defined(HAVE_DECL_IN_MOVED_FROM) && HAVE_DECL_IN_MOVED_FROM))
+#if defined(IN_MOVED_FROM) || (defined(HAVE_DECL_IN_MOVED_FROM) && HAVE_DECL_IN_MOVED_FROM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_MOVED_FROM) == (0x00000040), "IN_MOVED_FROM != 0x00000040");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_MOVED_FROM 0x00000040
 #endif
-#if !(defined(IN_MOVED_TO) || (defined(HAVE_DECL_IN_MOVED_TO) && HAVE_DECL_IN_MOVED_TO))
+#if defined(IN_MOVED_TO) || (defined(HAVE_DECL_IN_MOVED_TO) && HAVE_DECL_IN_MOVED_TO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_MOVED_TO) == (0x00000080), "IN_MOVED_TO != 0x00000080");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_MOVED_TO 0x00000080
 #endif
-#if !(defined(IN_CREATE) || (defined(HAVE_DECL_IN_CREATE) && HAVE_DECL_IN_CREATE))
+#if defined(IN_CREATE) || (defined(HAVE_DECL_IN_CREATE) && HAVE_DECL_IN_CREATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_CREATE) == (0x00000100), "IN_CREATE != 0x00000100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_CREATE 0x00000100
 #endif
-#if !(defined(IN_DELETE) || (defined(HAVE_DECL_IN_DELETE) && HAVE_DECL_IN_DELETE))
+#if defined(IN_DELETE) || (defined(HAVE_DECL_IN_DELETE) && HAVE_DECL_IN_DELETE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_DELETE) == (0x00000200), "IN_DELETE != 0x00000200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_DELETE 0x00000200
 #endif
-#if !(defined(IN_DELETE_SELF) || (defined(HAVE_DECL_IN_DELETE_SELF) && HAVE_DECL_IN_DELETE_SELF))
+#if defined(IN_DELETE_SELF) || (defined(HAVE_DECL_IN_DELETE_SELF) && HAVE_DECL_IN_DELETE_SELF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_DELETE_SELF) == (0x00000400), "IN_DELETE_SELF != 0x00000400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_DELETE_SELF 0x00000400
 #endif
-#if !(defined(IN_MOVE_SELF) || (defined(HAVE_DECL_IN_MOVE_SELF) && HAVE_DECL_IN_MOVE_SELF))
+#if defined(IN_MOVE_SELF) || (defined(HAVE_DECL_IN_MOVE_SELF) && HAVE_DECL_IN_MOVE_SELF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_MOVE_SELF) == (0x00000800), "IN_MOVE_SELF != 0x00000800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_MOVE_SELF 0x00000800
 #endif
-#if !(defined(IN_UNMOUNT) || (defined(HAVE_DECL_IN_UNMOUNT) && HAVE_DECL_IN_UNMOUNT))
+#if defined(IN_UNMOUNT) || (defined(HAVE_DECL_IN_UNMOUNT) && HAVE_DECL_IN_UNMOUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_UNMOUNT) == (0x00002000), "IN_UNMOUNT != 0x00002000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_UNMOUNT 0x00002000
 #endif
-#if !(defined(IN_Q_OVERFLOW) || (defined(HAVE_DECL_IN_Q_OVERFLOW) && HAVE_DECL_IN_Q_OVERFLOW))
+#if defined(IN_Q_OVERFLOW) || (defined(HAVE_DECL_IN_Q_OVERFLOW) && HAVE_DECL_IN_Q_OVERFLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_Q_OVERFLOW) == (0x00004000), "IN_Q_OVERFLOW != 0x00004000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_Q_OVERFLOW 0x00004000
 #endif
-#if !(defined(IN_IGNORED) || (defined(HAVE_DECL_IN_IGNORED) && HAVE_DECL_IN_IGNORED))
+#if defined(IN_IGNORED) || (defined(HAVE_DECL_IN_IGNORED) && HAVE_DECL_IN_IGNORED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_IGNORED) == (0x00008000), "IN_IGNORED != 0x00008000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_IGNORED 0x00008000
 #endif
-#if !(defined(IN_ONLYDIR) || (defined(HAVE_DECL_IN_ONLYDIR) && HAVE_DECL_IN_ONLYDIR))
+#if defined(IN_ONLYDIR) || (defined(HAVE_DECL_IN_ONLYDIR) && HAVE_DECL_IN_ONLYDIR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_ONLYDIR) == (0x01000000), "IN_ONLYDIR != 0x01000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_ONLYDIR 0x01000000
 #endif
-#if !(defined(IN_DONT_FOLLOW) || (defined(HAVE_DECL_IN_DONT_FOLLOW) && HAVE_DECL_IN_DONT_FOLLOW))
+#if defined(IN_DONT_FOLLOW) || (defined(HAVE_DECL_IN_DONT_FOLLOW) && HAVE_DECL_IN_DONT_FOLLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_DONT_FOLLOW) == (0x02000000), "IN_DONT_FOLLOW != 0x02000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_DONT_FOLLOW 0x02000000
 #endif
-#if !(defined(IN_EXCL_UNLINK) || (defined(HAVE_DECL_IN_EXCL_UNLINK) && HAVE_DECL_IN_EXCL_UNLINK))
+#if defined(IN_EXCL_UNLINK) || (defined(HAVE_DECL_IN_EXCL_UNLINK) && HAVE_DECL_IN_EXCL_UNLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_EXCL_UNLINK) == (0x04000000), "IN_EXCL_UNLINK != 0x04000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_EXCL_UNLINK 0x04000000
 #endif
-#if !(defined(IN_MASK_ADD) || (defined(HAVE_DECL_IN_MASK_ADD) && HAVE_DECL_IN_MASK_ADD))
+#if defined(IN_MASK_ADD) || (defined(HAVE_DECL_IN_MASK_ADD) && HAVE_DECL_IN_MASK_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_MASK_ADD) == (0x20000000), "IN_MASK_ADD != 0x20000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_MASK_ADD 0x20000000
 #endif
-#if !(defined(IN_ISDIR) || (defined(HAVE_DECL_IN_ISDIR) && HAVE_DECL_IN_ISDIR))
+#if defined(IN_ISDIR) || (defined(HAVE_DECL_IN_ISDIR) && HAVE_DECL_IN_ISDIR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_ISDIR) == (0x40000000), "IN_ISDIR != 0x40000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_ISDIR 0x40000000
 #endif
-#if !(defined(IN_ONESHOT) || (defined(HAVE_DECL_IN_ONESHOT) && HAVE_DECL_IN_ONESHOT))
+#if defined(IN_ONESHOT) || (defined(HAVE_DECL_IN_ONESHOT) && HAVE_DECL_IN_ONESHOT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_ONESHOT) == (0x80000000), "IN_ONESHOT != 0x80000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_ONESHOT 0x80000000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat inotify_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat inotify_flags in mpers mode
+
+# else
 
 static
 const struct xlat inotify_flags[] = {
@@ -95,4 +185,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/inotify_init_flags.h b/xlat/inotify_init_flags.h
index f413147..973a54b 100644
--- a/xlat/inotify_init_flags.h
+++ b/xlat/inotify_init_flags.h
@@ -1,18 +1,32 @@
 /* Generated by ./xlat/gen.sh from ./xlat/inotify_init_flags.in; do not edit. */
-#if !(defined(IN_NONBLOCK) || (defined(HAVE_DECL_IN_NONBLOCK) && HAVE_DECL_IN_NONBLOCK))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IN_NONBLOCK) || (defined(HAVE_DECL_IN_NONBLOCK) && HAVE_DECL_IN_NONBLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_NONBLOCK) == (O_NONBLOCK), "IN_NONBLOCK != O_NONBLOCK");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_NONBLOCK O_NONBLOCK
 #endif
 #if defined IN_CLOEXEC || defined O_CLOEXEC
-#if !(defined(IN_CLOEXEC) || (defined(HAVE_DECL_IN_CLOEXEC) && HAVE_DECL_IN_CLOEXEC))
+#if defined(IN_CLOEXEC) || (defined(HAVE_DECL_IN_CLOEXEC) && HAVE_DECL_IN_CLOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IN_CLOEXEC) == (O_CLOEXEC), "IN_CLOEXEC != O_CLOEXEC");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IN_CLOEXEC O_CLOEXEC
 #endif
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat inotify_init_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat inotify_init_flags in mpers mode
+
+# else
 
 static
 const struct xlat inotify_init_flags[] = {
@@ -23,4 +37,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ioctl_dirs.h b/xlat/ioctl_dirs.h
index 14bb3e4..d4cae21 100644
--- a/xlat/ioctl_dirs.h
+++ b/xlat/ioctl_dirs.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ioctl_dirs.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ioctl_dirs in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ioctl_dirs in mpers mode
+
+# else
 
 static
 const struct xlat ioctl_dirs[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ioprio_class.h b/xlat/ioprio_class.h
index 3e4f893..c7bfa4b 100644
--- a/xlat/ioprio_class.h
+++ b/xlat/ioprio_class.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ioprio_class.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ioprio_class in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ioprio_class in mpers mode
+
+# else
 
 static
 const struct xlat ioprio_class[] = {
@@ -15,4 +21,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ioprio_who.h b/xlat/ioprio_who.h
index b7880ca..e296fde 100644
--- a/xlat/ioprio_who.h
+++ b/xlat/ioprio_who.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ioprio_who.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ioprio_who in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ioprio_who in mpers mode
+
+# else
 
 static
 const struct xlat ioprio_who[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ip_cmsg_types.h b/xlat/ip_cmsg_types.h
index 979d295..5d714e3 100644
--- a/xlat/ip_cmsg_types.h
+++ b/xlat/ip_cmsg_types.h
@@ -1,34 +1,72 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ip_cmsg_types.in; do not edit. */
-#if !(defined(IP_TOS) || (defined(HAVE_DECL_IP_TOS) && HAVE_DECL_IP_TOS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IP_TOS) || (defined(HAVE_DECL_IP_TOS) && HAVE_DECL_IP_TOS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IP_TOS) == (1), "IP_TOS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IP_TOS 1
 #endif
-#if !(defined(IP_TTL) || (defined(HAVE_DECL_IP_TTL) && HAVE_DECL_IP_TTL))
+#if defined(IP_TTL) || (defined(HAVE_DECL_IP_TTL) && HAVE_DECL_IP_TTL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IP_TTL) == (2), "IP_TTL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IP_TTL 2
 #endif
-#if !(defined(IP_RECVOPTS) || (defined(HAVE_DECL_IP_RECVOPTS) && HAVE_DECL_IP_RECVOPTS))
+#if defined(IP_RECVOPTS) || (defined(HAVE_DECL_IP_RECVOPTS) && HAVE_DECL_IP_RECVOPTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IP_RECVOPTS) == (6), "IP_RECVOPTS != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IP_RECVOPTS 6
 #endif
-#if !(defined(IP_RETOPTS) || (defined(HAVE_DECL_IP_RETOPTS) && HAVE_DECL_IP_RETOPTS))
+#if defined(IP_RETOPTS) || (defined(HAVE_DECL_IP_RETOPTS) && HAVE_DECL_IP_RETOPTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IP_RETOPTS) == (7), "IP_RETOPTS != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IP_RETOPTS 7
 #endif
-#if !(defined(IP_PKTINFO) || (defined(HAVE_DECL_IP_PKTINFO) && HAVE_DECL_IP_PKTINFO))
+#if defined(IP_PKTINFO) || (defined(HAVE_DECL_IP_PKTINFO) && HAVE_DECL_IP_PKTINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IP_PKTINFO) == (8), "IP_PKTINFO != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IP_PKTINFO 8
 #endif
-#if !(defined(IP_RECVERR) || (defined(HAVE_DECL_IP_RECVERR) && HAVE_DECL_IP_RECVERR))
+#if defined(IP_RECVERR) || (defined(HAVE_DECL_IP_RECVERR) && HAVE_DECL_IP_RECVERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IP_RECVERR) == (11), "IP_RECVERR != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IP_RECVERR 11
 #endif
-#if !(defined(IP_ORIGDSTADDR) || (defined(HAVE_DECL_IP_ORIGDSTADDR) && HAVE_DECL_IP_ORIGDSTADDR))
+#if defined(IP_ORIGDSTADDR) || (defined(HAVE_DECL_IP_ORIGDSTADDR) && HAVE_DECL_IP_ORIGDSTADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IP_ORIGDSTADDR) == (20), "IP_ORIGDSTADDR != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IP_ORIGDSTADDR 20
 #endif
-#if !(defined(IP_CHECKSUM) || (defined(HAVE_DECL_IP_CHECKSUM) && HAVE_DECL_IP_CHECKSUM))
+#if defined(IP_CHECKSUM) || (defined(HAVE_DECL_IP_CHECKSUM) && HAVE_DECL_IP_CHECKSUM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IP_CHECKSUM) == (23), "IP_CHECKSUM != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IP_CHECKSUM 23
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat ip_cmsg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat ip_cmsg_types in mpers mode
+
+# else
 
 static
 const struct xlat ip_cmsg_types[] = {
@@ -46,4 +84,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ip_type_of_services.h b/xlat/ip_type_of_services.h
index 9a327fa..78a451c 100644
--- a/xlat/ip_type_of_services.h
+++ b/xlat/ip_type_of_services.h
@@ -1,6 +1,12 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ip_type_of_services.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat ip_type_of_services[] = {
 #if defined(IPTOS_LOWDELAY) || (defined(HAVE_DECL_IPTOS_LOWDELAY) && HAVE_DECL_IPTOS_LOWDELAY)
@@ -18,4 +24,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ipc_msg_flags.h b/xlat/ipc_msg_flags.h
index a37ca87..df3bd1d 100644
--- a/xlat/ipc_msg_flags.h
+++ b/xlat/ipc_msg_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ipc_msg_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ipc_msg_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ipc_msg_flags in mpers mode
+
+# else
 
 static
 const struct xlat ipc_msg_flags[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ipc_private.h b/xlat/ipc_private.h
new file mode 100644
index 0000000..d6dd0ea
--- /dev/null
+++ b/xlat/ipc_private.h
@@ -0,0 +1,25 @@
+/* Generated by ./xlat/gen.sh from ./xlat/ipc_private.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPC_PRIVATE) || (defined(HAVE_DECL_IPC_PRIVATE) && HAVE_DECL_IPC_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_PRIVATE) == (0), "IPC_PRIVATE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_PRIVATE 0
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
+
+const struct xlat ipc_private[] = {
+ XLAT(IPC_PRIVATE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ipc_private.in b/xlat/ipc_private.in
new file mode 100644
index 0000000..b3b233b
--- /dev/null
+++ b/xlat/ipc_private.in
@@ -0,0 +1 @@
+IPC_PRIVATE 0
diff --git a/xlat/ipccalls.h b/xlat/ipccalls.h
index fc988e6..1079e3e 100644
--- a/xlat/ipccalls.h
+++ b/xlat/ipccalls.h
@@ -1,46 +1,100 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ipccalls.in; do not edit. */
-#if !(defined(SEMOP) || (defined(HAVE_DECL_SEMOP) && HAVE_DECL_SEMOP))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SEMOP) || (defined(HAVE_DECL_SEMOP) && HAVE_DECL_SEMOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEMOP) == (1), "SEMOP != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEMOP 1
 #endif
-#if !(defined(SEMGET) || (defined(HAVE_DECL_SEMGET) && HAVE_DECL_SEMGET))
+#if defined(SEMGET) || (defined(HAVE_DECL_SEMGET) && HAVE_DECL_SEMGET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEMGET) == (2), "SEMGET != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEMGET 2
 #endif
-#if !(defined(SEMCTL) || (defined(HAVE_DECL_SEMCTL) && HAVE_DECL_SEMCTL))
+#if defined(SEMCTL) || (defined(HAVE_DECL_SEMCTL) && HAVE_DECL_SEMCTL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEMCTL) == (3), "SEMCTL != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEMCTL 3
 #endif
-#if !(defined(SEMTIMEDOP) || (defined(HAVE_DECL_SEMTIMEDOP) && HAVE_DECL_SEMTIMEDOP))
+#if defined(SEMTIMEDOP) || (defined(HAVE_DECL_SEMTIMEDOP) && HAVE_DECL_SEMTIMEDOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEMTIMEDOP) == (4), "SEMTIMEDOP != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEMTIMEDOP 4
 #endif
-#if !(defined(MSGSND) || (defined(HAVE_DECL_MSGSND) && HAVE_DECL_MSGSND))
+#if defined(MSGSND) || (defined(HAVE_DECL_MSGSND) && HAVE_DECL_MSGSND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSGSND) == (11), "MSGSND != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MSGSND 11
 #endif
-#if !(defined(MSGRCV) || (defined(HAVE_DECL_MSGRCV) && HAVE_DECL_MSGRCV))
+#if defined(MSGRCV) || (defined(HAVE_DECL_MSGRCV) && HAVE_DECL_MSGRCV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSGRCV) == (12), "MSGRCV != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MSGRCV 12
 #endif
-#if !(defined(MSGGET) || (defined(HAVE_DECL_MSGGET) && HAVE_DECL_MSGGET))
+#if defined(MSGGET) || (defined(HAVE_DECL_MSGGET) && HAVE_DECL_MSGGET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSGGET) == (13), "MSGGET != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MSGGET 13
 #endif
-#if !(defined(MSGCTL) || (defined(HAVE_DECL_MSGCTL) && HAVE_DECL_MSGCTL))
+#if defined(MSGCTL) || (defined(HAVE_DECL_MSGCTL) && HAVE_DECL_MSGCTL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSGCTL) == (14), "MSGCTL != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MSGCTL 14
 #endif
-#if !(defined(SHMAT) || (defined(HAVE_DECL_SHMAT) && HAVE_DECL_SHMAT))
+#if defined(SHMAT) || (defined(HAVE_DECL_SHMAT) && HAVE_DECL_SHMAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHMAT) == (21), "SHMAT != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SHMAT 21
 #endif
-#if !(defined(SHMDT) || (defined(HAVE_DECL_SHMDT) && HAVE_DECL_SHMDT))
+#if defined(SHMDT) || (defined(HAVE_DECL_SHMDT) && HAVE_DECL_SHMDT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHMDT) == (22), "SHMDT != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SHMDT 22
 #endif
-#if !(defined(SHMGET) || (defined(HAVE_DECL_SHMGET) && HAVE_DECL_SHMGET))
+#if defined(SHMGET) || (defined(HAVE_DECL_SHMGET) && HAVE_DECL_SHMGET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHMGET) == (23), "SHMGET != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SHMGET 23
 #endif
-#if !(defined(SHMCTL) || (defined(HAVE_DECL_SHMCTL) && HAVE_DECL_SHMCTL))
+#if defined(SHMCTL) || (defined(HAVE_DECL_SHMCTL) && HAVE_DECL_SHMCTL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHMCTL) == (24), "SHMCTL != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SHMCTL 24
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat ipccalls in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat ipccalls in mpers mode
+
+# else
 
 static
 const struct xlat ipccalls[] = {
@@ -59,4 +113,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/irda_protocols.h b/xlat/irda_protocols.h
new file mode 100644
index 0000000..6c7e9ad
--- /dev/null
+++ b/xlat/irda_protocols.h
@@ -0,0 +1,38 @@
+/* Generated by ./xlat/gen.sh from ./xlat/irda_protocols.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IRDAPROTO_UNITDATA) || (defined(HAVE_DECL_IRDAPROTO_UNITDATA) && HAVE_DECL_IRDAPROTO_UNITDATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRDAPROTO_UNITDATA) == (0), "IRDAPROTO_UNITDATA != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRDAPROTO_UNITDATA 0
+#endif
+#if defined(IRDAPROTO_ULTRA) || (defined(HAVE_DECL_IRDAPROTO_ULTRA) && HAVE_DECL_IRDAPROTO_ULTRA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRDAPROTO_ULTRA) == (1), "IRDAPROTO_ULTRA != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRDAPROTO_ULTRA 1
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat irda_protocols in mpers mode
+
+# else
+
+static
+const struct xlat irda_protocols[] = {
+ [IRDAPROTO_UNITDATA] = XLAT(IRDAPROTO_UNITDATA),
+ [IRDAPROTO_ULTRA] = XLAT(IRDAPROTO_ULTRA),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/irda_protocols.in b/xlat/irda_protocols.in
new file mode 100644
index 0000000..e3cd40f
--- /dev/null
+++ b/xlat/irda_protocols.in
@@ -0,0 +1,3 @@
+#value_indexed
+IRDAPROTO_UNITDATA	0
+IRDAPROTO_ULTRA		1
diff --git a/xlat/isdn_protocols.h b/xlat/isdn_protocols.h
new file mode 100644
index 0000000..51ecb7a
--- /dev/null
+++ b/xlat/isdn_protocols.h
@@ -0,0 +1,132 @@
+/* Generated by ./xlat/gen.sh from ./xlat/isdn_protocols.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(ISDN_P_BASE) || (defined(HAVE_DECL_ISDN_P_BASE) && HAVE_DECL_ISDN_P_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_BASE) == (0), "ISDN_P_BASE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_BASE 0
+#endif
+#if defined(ISDN_P_TE_S0) || (defined(HAVE_DECL_ISDN_P_TE_S0) && HAVE_DECL_ISDN_P_TE_S0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_TE_S0) == (1), "ISDN_P_TE_S0 != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_TE_S0 1
+#endif
+#if defined(ISDN_P_NT_S0) || (defined(HAVE_DECL_ISDN_P_NT_S0) && HAVE_DECL_ISDN_P_NT_S0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_NT_S0) == (2), "ISDN_P_NT_S0 != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_NT_S0 2
+#endif
+#if defined(ISDN_P_TE_E1) || (defined(HAVE_DECL_ISDN_P_TE_E1) && HAVE_DECL_ISDN_P_TE_E1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_TE_E1) == (3), "ISDN_P_TE_E1 != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_TE_E1 3
+#endif
+#if defined(ISDN_P_NT_E1) || (defined(HAVE_DECL_ISDN_P_NT_E1) && HAVE_DECL_ISDN_P_NT_E1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_NT_E1) == (4), "ISDN_P_NT_E1 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_NT_E1 4
+#endif
+#if defined(ISDN_P_LAPD_TE) || (defined(HAVE_DECL_ISDN_P_LAPD_TE) && HAVE_DECL_ISDN_P_LAPD_TE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_LAPD_TE) == (0x10), "ISDN_P_LAPD_TE != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_LAPD_TE 0x10
+#endif
+#if defined(ISDN_P_LAPD_NT) || (defined(HAVE_DECL_ISDN_P_LAPD_NT) && HAVE_DECL_ISDN_P_LAPD_NT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_LAPD_NT) == (0x11), "ISDN_P_LAPD_NT != 0x11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_LAPD_NT 0x11
+#endif
+#if defined(ISDN_P_B_RAW) || (defined(HAVE_DECL_ISDN_P_B_RAW) && HAVE_DECL_ISDN_P_B_RAW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_B_RAW) == (0x21), "ISDN_P_B_RAW != 0x21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_B_RAW 0x21
+#endif
+#if defined(ISDN_P_B_HDLC) || (defined(HAVE_DECL_ISDN_P_B_HDLC) && HAVE_DECL_ISDN_P_B_HDLC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_B_HDLC) == (0x22), "ISDN_P_B_HDLC != 0x22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_B_HDLC 0x22
+#endif
+#if defined(ISDN_P_B_X75SLP) || (defined(HAVE_DECL_ISDN_P_B_X75SLP) && HAVE_DECL_ISDN_P_B_X75SLP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_B_X75SLP) == (0x23), "ISDN_P_B_X75SLP != 0x23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_B_X75SLP 0x23
+#endif
+#if defined(ISDN_P_B_L2DTMF) || (defined(HAVE_DECL_ISDN_P_B_L2DTMF) && HAVE_DECL_ISDN_P_B_L2DTMF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_B_L2DTMF) == (0x24), "ISDN_P_B_L2DTMF != 0x24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_B_L2DTMF 0x24
+#endif
+#if defined(ISDN_P_B_L2DSP) || (defined(HAVE_DECL_ISDN_P_B_L2DSP) && HAVE_DECL_ISDN_P_B_L2DSP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_B_L2DSP) == (0x25), "ISDN_P_B_L2DSP != 0x25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_B_L2DSP 0x25
+#endif
+#if defined(ISDN_P_B_L2DSPHDLC) || (defined(HAVE_DECL_ISDN_P_B_L2DSPHDLC) && HAVE_DECL_ISDN_P_B_L2DSPHDLC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ISDN_P_B_L2DSPHDLC) == (0x26), "ISDN_P_B_L2DSPHDLC != 0x26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ISDN_P_B_L2DSPHDLC 0x26
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat isdn_protocols in mpers mode
+
+# else
+
+static
+const struct xlat isdn_protocols[] = {
+ XLAT(ISDN_P_BASE),
+ XLAT(ISDN_P_TE_S0),
+ XLAT(ISDN_P_NT_S0),
+ XLAT(ISDN_P_TE_E1),
+ XLAT(ISDN_P_NT_E1),
+ XLAT(ISDN_P_LAPD_TE),
+ XLAT(ISDN_P_LAPD_NT),
+ XLAT(ISDN_P_B_RAW),
+ XLAT(ISDN_P_B_HDLC),
+ XLAT(ISDN_P_B_X75SLP),
+ XLAT(ISDN_P_B_L2DTMF),
+ XLAT(ISDN_P_B_L2DSP),
+ XLAT(ISDN_P_B_L2DSPHDLC),
+/*
+* those two are present in include/linux/mISDNif.h but are not handled during
+* socket creation.
+*/
+
+
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/isdn_protocols.in b/xlat/isdn_protocols.in
new file mode 100644
index 0000000..a193607
--- /dev/null
+++ b/xlat/isdn_protocols.in
@@ -0,0 +1,19 @@
+ISDN_P_BASE		0
+ISDN_P_TE_S0		1
+ISDN_P_NT_S0		2
+ISDN_P_TE_E1		3
+ISDN_P_NT_E1		4
+ISDN_P_LAPD_TE		0x10
+ISDN_P_LAPD_NT		0x11
+ISDN_P_B_RAW		0x21
+ISDN_P_B_HDLC		0x22
+ISDN_P_B_X75SLP		0x23
+ISDN_P_B_L2DTMF		0x24
+ISDN_P_B_L2DSP		0x25
+ISDN_P_B_L2DSPHDLC	0x26
+/*
+ * those two are present in include/linux/mISDNif.h but are not handled during
+ * socket creation.
+ */
+/* ISDN_P_B_T30_FAX	0x27 */
+/* ISDN_P_B_MODEM_ASYNC	0x28 */
diff --git a/xlat/itimer_which.h b/xlat/itimer_which.h
index a9180c6..c82be25 100644
--- a/xlat/itimer_which.h
+++ b/xlat/itimer_which.h
@@ -1,23 +1,46 @@
 /* Generated by ./xlat/gen.sh from ./xlat/itimer_which.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat itimer_which in mpers mode
-
+#if defined(ITIMER_REAL) || (defined(HAVE_DECL_ITIMER_REAL) && HAVE_DECL_ITIMER_REAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ITIMER_REAL) == (0), "ITIMER_REAL != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define ITIMER_REAL 0
+#endif
+#if defined(ITIMER_VIRTUAL) || (defined(HAVE_DECL_ITIMER_VIRTUAL) && HAVE_DECL_ITIMER_VIRTUAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ITIMER_VIRTUAL) == (1), "ITIMER_VIRTUAL != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ITIMER_VIRTUAL 1
+#endif
+#if defined(ITIMER_PROF) || (defined(HAVE_DECL_ITIMER_PROF) && HAVE_DECL_ITIMER_PROF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ITIMER_PROF) == (2), "ITIMER_PROF != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ITIMER_PROF 2
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat itimer_which in mpers mode
+
+# else
 
 static
 const struct xlat itimer_which[] = {
-#if defined(ITIMER_REAL) || (defined(HAVE_DECL_ITIMER_REAL) && HAVE_DECL_ITIMER_REAL)
-  XLAT(ITIMER_REAL),
-#endif
-#if defined(ITIMER_VIRTUAL) || (defined(HAVE_DECL_ITIMER_VIRTUAL) && HAVE_DECL_ITIMER_VIRTUAL)
-  XLAT(ITIMER_VIRTUAL),
-#endif
-#if defined(ITIMER_PROF) || (defined(HAVE_DECL_ITIMER_PROF) && HAVE_DECL_ITIMER_PROF)
-  XLAT(ITIMER_PROF),
-#endif
+ [ITIMER_REAL] = XLAT(ITIMER_REAL),
+ [ITIMER_VIRTUAL] = XLAT(ITIMER_VIRTUAL),
+ [ITIMER_PROF] = XLAT(ITIMER_PROF),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/itimer_which.in b/xlat/itimer_which.in
index 768b20f..23635a2 100644
--- a/xlat/itimer_which.in
+++ b/xlat/itimer_which.in
@@ -1,3 +1,4 @@
-ITIMER_REAL
-ITIMER_VIRTUAL
-ITIMER_PROF
+#value_indexed
+ITIMER_REAL	0
+ITIMER_VIRTUAL	1
+ITIMER_PROF	2
diff --git a/xlat/kcm_protocols.h b/xlat/kcm_protocols.h
new file mode 100644
index 0000000..e386380
--- /dev/null
+++ b/xlat/kcm_protocols.h
@@ -0,0 +1,30 @@
+/* Generated by ./xlat/gen.sh from ./xlat/kcm_protocols.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KCMPROTO_CONNECTED) || (defined(HAVE_DECL_KCMPROTO_CONNECTED) && HAVE_DECL_KCMPROTO_CONNECTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCMPROTO_CONNECTED) == (0), "KCMPROTO_CONNECTED != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define KCMPROTO_CONNECTED 0
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat kcm_protocols in mpers mode
+
+# else
+
+static
+const struct xlat kcm_protocols[] = {
+ [KCMPROTO_CONNECTED] = XLAT(KCMPROTO_CONNECTED),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/kcm_protocols.in b/xlat/kcm_protocols.in
new file mode 100644
index 0000000..0001455
--- /dev/null
+++ b/xlat/kcm_protocols.in
@@ -0,0 +1,2 @@
+#value_indexed
+KCMPROTO_CONNECTED	0
diff --git a/xlat/kcmp_types.h b/xlat/kcmp_types.h
index 1b88607..d666fa2 100644
--- a/xlat/kcmp_types.h
+++ b/xlat/kcmp_types.h
@@ -1,34 +1,72 @@
 /* Generated by ./xlat/gen.sh from ./xlat/kcmp_types.in; do not edit. */
-#if !(defined(KCMP_FILE) || (defined(HAVE_DECL_KCMP_FILE) && HAVE_DECL_KCMP_FILE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KCMP_FILE) || (defined(HAVE_DECL_KCMP_FILE) && HAVE_DECL_KCMP_FILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCMP_FILE) == (0), "KCMP_FILE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KCMP_FILE 0
 #endif
-#if !(defined(KCMP_VM) || (defined(HAVE_DECL_KCMP_VM) && HAVE_DECL_KCMP_VM))
+#if defined(KCMP_VM) || (defined(HAVE_DECL_KCMP_VM) && HAVE_DECL_KCMP_VM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCMP_VM) == (1), "KCMP_VM != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KCMP_VM 1
 #endif
-#if !(defined(KCMP_FILES) || (defined(HAVE_DECL_KCMP_FILES) && HAVE_DECL_KCMP_FILES))
+#if defined(KCMP_FILES) || (defined(HAVE_DECL_KCMP_FILES) && HAVE_DECL_KCMP_FILES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCMP_FILES) == (2), "KCMP_FILES != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KCMP_FILES 2
 #endif
-#if !(defined(KCMP_FS) || (defined(HAVE_DECL_KCMP_FS) && HAVE_DECL_KCMP_FS))
+#if defined(KCMP_FS) || (defined(HAVE_DECL_KCMP_FS) && HAVE_DECL_KCMP_FS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCMP_FS) == (3), "KCMP_FS != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KCMP_FS 3
 #endif
-#if !(defined(KCMP_SIGHAND) || (defined(HAVE_DECL_KCMP_SIGHAND) && HAVE_DECL_KCMP_SIGHAND))
+#if defined(KCMP_SIGHAND) || (defined(HAVE_DECL_KCMP_SIGHAND) && HAVE_DECL_KCMP_SIGHAND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCMP_SIGHAND) == (4), "KCMP_SIGHAND != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KCMP_SIGHAND 4
 #endif
-#if !(defined(KCMP_IO) || (defined(HAVE_DECL_KCMP_IO) && HAVE_DECL_KCMP_IO))
+#if defined(KCMP_IO) || (defined(HAVE_DECL_KCMP_IO) && HAVE_DECL_KCMP_IO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCMP_IO) == (5), "KCMP_IO != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KCMP_IO 5
 #endif
-#if !(defined(KCMP_SYSVSEM) || (defined(HAVE_DECL_KCMP_SYSVSEM) && HAVE_DECL_KCMP_SYSVSEM))
+#if defined(KCMP_SYSVSEM) || (defined(HAVE_DECL_KCMP_SYSVSEM) && HAVE_DECL_KCMP_SYSVSEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCMP_SYSVSEM) == (6), "KCMP_SYSVSEM != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KCMP_SYSVSEM 6
 #endif
-#if !(defined(KCMP_EPOLL_TFD) || (defined(HAVE_DECL_KCMP_EPOLL_TFD) && HAVE_DECL_KCMP_EPOLL_TFD))
+#if defined(KCMP_EPOLL_TFD) || (defined(HAVE_DECL_KCMP_EPOLL_TFD) && HAVE_DECL_KCMP_EPOLL_TFD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCMP_EPOLL_TFD) == (7), "KCMP_EPOLL_TFD != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KCMP_EPOLL_TFD 7
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat kcmp_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat kcmp_types in mpers mode
+
+# else
 
 static
 const struct xlat kcmp_types[] = {
@@ -43,4 +81,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/kexec_arch_values.h b/xlat/kexec_arch_values.h
index 537ba4b..df40c4b 100644
--- a/xlat/kexec_arch_values.h
+++ b/xlat/kexec_arch_values.h
@@ -1,49 +1,107 @@
 /* Generated by ./xlat/gen.sh from ./xlat/kexec_arch_values.in; do not edit. */
-#if !(defined(KEXEC_ARCH_DEFAULT) || (defined(HAVE_DECL_KEXEC_ARCH_DEFAULT) && HAVE_DECL_KEXEC_ARCH_DEFAULT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KEXEC_ARCH_DEFAULT) || (defined(HAVE_DECL_KEXEC_ARCH_DEFAULT) && HAVE_DECL_KEXEC_ARCH_DEFAULT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_DEFAULT) == (( 0 << 16)), "KEXEC_ARCH_DEFAULT != ( 0 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_DEFAULT ( 0 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_386) || (defined(HAVE_DECL_KEXEC_ARCH_386) && HAVE_DECL_KEXEC_ARCH_386))
+#if defined(KEXEC_ARCH_386) || (defined(HAVE_DECL_KEXEC_ARCH_386) && HAVE_DECL_KEXEC_ARCH_386)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_386) == (( 3 << 16)), "KEXEC_ARCH_386 != ( 3 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_386 ( 3 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_68K) || (defined(HAVE_DECL_KEXEC_ARCH_68K) && HAVE_DECL_KEXEC_ARCH_68K))
+#if defined(KEXEC_ARCH_68K) || (defined(HAVE_DECL_KEXEC_ARCH_68K) && HAVE_DECL_KEXEC_ARCH_68K)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_68K) == (( 4 << 16)), "KEXEC_ARCH_68K != ( 4 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_68K ( 4 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_X86_64) || (defined(HAVE_DECL_KEXEC_ARCH_X86_64) && HAVE_DECL_KEXEC_ARCH_X86_64))
+#if defined(KEXEC_ARCH_X86_64) || (defined(HAVE_DECL_KEXEC_ARCH_X86_64) && HAVE_DECL_KEXEC_ARCH_X86_64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_X86_64) == ((62 << 16)), "KEXEC_ARCH_X86_64 != (62 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_X86_64 (62 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_PPC) || (defined(HAVE_DECL_KEXEC_ARCH_PPC) && HAVE_DECL_KEXEC_ARCH_PPC))
+#if defined(KEXEC_ARCH_PPC) || (defined(HAVE_DECL_KEXEC_ARCH_PPC) && HAVE_DECL_KEXEC_ARCH_PPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_PPC) == ((20 << 16)), "KEXEC_ARCH_PPC != (20 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_PPC (20 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_PPC64) || (defined(HAVE_DECL_KEXEC_ARCH_PPC64) && HAVE_DECL_KEXEC_ARCH_PPC64))
+#if defined(KEXEC_ARCH_PPC64) || (defined(HAVE_DECL_KEXEC_ARCH_PPC64) && HAVE_DECL_KEXEC_ARCH_PPC64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_PPC64) == ((21 << 16)), "KEXEC_ARCH_PPC64 != (21 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_PPC64 (21 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_IA_64) || (defined(HAVE_DECL_KEXEC_ARCH_IA_64) && HAVE_DECL_KEXEC_ARCH_IA_64))
+#if defined(KEXEC_ARCH_IA_64) || (defined(HAVE_DECL_KEXEC_ARCH_IA_64) && HAVE_DECL_KEXEC_ARCH_IA_64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_IA_64) == ((50 << 16)), "KEXEC_ARCH_IA_64 != (50 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_IA_64 (50 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_ARM) || (defined(HAVE_DECL_KEXEC_ARCH_ARM) && HAVE_DECL_KEXEC_ARCH_ARM))
+#if defined(KEXEC_ARCH_ARM) || (defined(HAVE_DECL_KEXEC_ARCH_ARM) && HAVE_DECL_KEXEC_ARCH_ARM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_ARM) == ((40 << 16)), "KEXEC_ARCH_ARM != (40 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_ARM (40 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_S390) || (defined(HAVE_DECL_KEXEC_ARCH_S390) && HAVE_DECL_KEXEC_ARCH_S390))
+#if defined(KEXEC_ARCH_S390) || (defined(HAVE_DECL_KEXEC_ARCH_S390) && HAVE_DECL_KEXEC_ARCH_S390)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_S390) == ((22 << 16)), "KEXEC_ARCH_S390 != (22 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_S390 (22 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_SH) || (defined(HAVE_DECL_KEXEC_ARCH_SH) && HAVE_DECL_KEXEC_ARCH_SH))
+#if defined(KEXEC_ARCH_SH) || (defined(HAVE_DECL_KEXEC_ARCH_SH) && HAVE_DECL_KEXEC_ARCH_SH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_SH) == ((42 << 16)), "KEXEC_ARCH_SH != (42 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_SH (42 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_MIPS_LE) || (defined(HAVE_DECL_KEXEC_ARCH_MIPS_LE) && HAVE_DECL_KEXEC_ARCH_MIPS_LE))
+#if defined(KEXEC_ARCH_MIPS_LE) || (defined(HAVE_DECL_KEXEC_ARCH_MIPS_LE) && HAVE_DECL_KEXEC_ARCH_MIPS_LE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_MIPS_LE) == ((10 << 16)), "KEXEC_ARCH_MIPS_LE != (10 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_MIPS_LE (10 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_MIPS) || (defined(HAVE_DECL_KEXEC_ARCH_MIPS) && HAVE_DECL_KEXEC_ARCH_MIPS))
+#if defined(KEXEC_ARCH_MIPS) || (defined(HAVE_DECL_KEXEC_ARCH_MIPS) && HAVE_DECL_KEXEC_ARCH_MIPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_MIPS) == (( 8 << 16)), "KEXEC_ARCH_MIPS != ( 8 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_MIPS ( 8 << 16)
 #endif
-#if !(defined(KEXEC_ARCH_AARCH64) || (defined(HAVE_DECL_KEXEC_ARCH_AARCH64) && HAVE_DECL_KEXEC_ARCH_AARCH64))
+#if defined(KEXEC_ARCH_AARCH64) || (defined(HAVE_DECL_KEXEC_ARCH_AARCH64) && HAVE_DECL_KEXEC_ARCH_AARCH64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ARCH_AARCH64) == ((183 << 16)), "KEXEC_ARCH_AARCH64 != (183 << 16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ARCH_AARCH64 (183 << 16)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat kexec_arch_values in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat kexec_arch_values in mpers mode
+
+# else
 
 static
 const struct xlat kexec_arch_values[] = {
@@ -63,4 +121,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/kexec_file_load_flags.h b/xlat/kexec_file_load_flags.h
index 340ca3f..5c257c8 100644
--- a/xlat/kexec_file_load_flags.h
+++ b/xlat/kexec_file_load_flags.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/kexec_file_load_flags.in; do not edit. */
-#if !(defined(KEXEC_FILE_UNLOAD) || (defined(HAVE_DECL_KEXEC_FILE_UNLOAD) && HAVE_DECL_KEXEC_FILE_UNLOAD))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KEXEC_FILE_UNLOAD) || (defined(HAVE_DECL_KEXEC_FILE_UNLOAD) && HAVE_DECL_KEXEC_FILE_UNLOAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_FILE_UNLOAD) == (1), "KEXEC_FILE_UNLOAD != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_FILE_UNLOAD 1
 #endif
-#if !(defined(KEXEC_FILE_ON_CRASH) || (defined(HAVE_DECL_KEXEC_FILE_ON_CRASH) && HAVE_DECL_KEXEC_FILE_ON_CRASH))
+#if defined(KEXEC_FILE_ON_CRASH) || (defined(HAVE_DECL_KEXEC_FILE_ON_CRASH) && HAVE_DECL_KEXEC_FILE_ON_CRASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_FILE_ON_CRASH) == (2), "KEXEC_FILE_ON_CRASH != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_FILE_ON_CRASH 2
 #endif
-#if !(defined(KEXEC_FILE_NO_INITRAMFS) || (defined(HAVE_DECL_KEXEC_FILE_NO_INITRAMFS) && HAVE_DECL_KEXEC_FILE_NO_INITRAMFS))
+#if defined(KEXEC_FILE_NO_INITRAMFS) || (defined(HAVE_DECL_KEXEC_FILE_NO_INITRAMFS) && HAVE_DECL_KEXEC_FILE_NO_INITRAMFS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_FILE_NO_INITRAMFS) == (4), "KEXEC_FILE_NO_INITRAMFS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_FILE_NO_INITRAMFS 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat kexec_file_load_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat kexec_file_load_flags in mpers mode
+
+# else
 
 static
 const struct xlat kexec_file_load_flags[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/kexec_load_flags.h b/xlat/kexec_load_flags.h
index 00a51c7..dcee0c1 100644
--- a/xlat/kexec_load_flags.h
+++ b/xlat/kexec_load_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/kexec_load_flags.in; do not edit. */
-#if !(defined(KEXEC_ON_CRASH) || (defined(HAVE_DECL_KEXEC_ON_CRASH) && HAVE_DECL_KEXEC_ON_CRASH))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KEXEC_ON_CRASH) || (defined(HAVE_DECL_KEXEC_ON_CRASH) && HAVE_DECL_KEXEC_ON_CRASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_ON_CRASH) == (0x00000001), "KEXEC_ON_CRASH != 0x00000001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_ON_CRASH 0x00000001
 #endif
-#if !(defined(KEXEC_PRESERVE_CONTEXT) || (defined(HAVE_DECL_KEXEC_PRESERVE_CONTEXT) && HAVE_DECL_KEXEC_PRESERVE_CONTEXT))
+#if defined(KEXEC_PRESERVE_CONTEXT) || (defined(HAVE_DECL_KEXEC_PRESERVE_CONTEXT) && HAVE_DECL_KEXEC_PRESERVE_CONTEXT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEXEC_PRESERVE_CONTEXT) == (0x00000002), "KEXEC_PRESERVE_CONTEXT != 0x00000002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEXEC_PRESERVE_CONTEXT 0x00000002
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat kexec_load_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat kexec_load_flags in mpers mode
+
+# else
 
 static
 const struct xlat kexec_load_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/key_perms.h b/xlat/key_perms.h
index 4488f70..852a9fe 100644
--- a/xlat/key_perms.h
+++ b/xlat/key_perms.h
@@ -1,94 +1,212 @@
 /* Generated by ./xlat/gen.sh from ./xlat/key_perms.in; do not edit. */
-#if !(defined(KEY_POS_VIEW) || (defined(HAVE_DECL_KEY_POS_VIEW) && HAVE_DECL_KEY_POS_VIEW))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KEY_POS_VIEW) || (defined(HAVE_DECL_KEY_POS_VIEW) && HAVE_DECL_KEY_POS_VIEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_POS_VIEW) == (0x01000000), "KEY_POS_VIEW != 0x01000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_POS_VIEW 0x01000000
 #endif
-#if !(defined(KEY_POS_READ) || (defined(HAVE_DECL_KEY_POS_READ) && HAVE_DECL_KEY_POS_READ))
+#if defined(KEY_POS_READ) || (defined(HAVE_DECL_KEY_POS_READ) && HAVE_DECL_KEY_POS_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_POS_READ) == (0x02000000), "KEY_POS_READ != 0x02000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_POS_READ 0x02000000
 #endif
-#if !(defined(KEY_POS_WRITE) || (defined(HAVE_DECL_KEY_POS_WRITE) && HAVE_DECL_KEY_POS_WRITE))
+#if defined(KEY_POS_WRITE) || (defined(HAVE_DECL_KEY_POS_WRITE) && HAVE_DECL_KEY_POS_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_POS_WRITE) == (0x04000000), "KEY_POS_WRITE != 0x04000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_POS_WRITE 0x04000000
 #endif
-#if !(defined(KEY_POS_SEARCH) || (defined(HAVE_DECL_KEY_POS_SEARCH) && HAVE_DECL_KEY_POS_SEARCH))
+#if defined(KEY_POS_SEARCH) || (defined(HAVE_DECL_KEY_POS_SEARCH) && HAVE_DECL_KEY_POS_SEARCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_POS_SEARCH) == (0x08000000), "KEY_POS_SEARCH != 0x08000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_POS_SEARCH 0x08000000
 #endif
-#if !(defined(KEY_POS_LINK) || (defined(HAVE_DECL_KEY_POS_LINK) && HAVE_DECL_KEY_POS_LINK))
+#if defined(KEY_POS_LINK) || (defined(HAVE_DECL_KEY_POS_LINK) && HAVE_DECL_KEY_POS_LINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_POS_LINK) == (0x10000000), "KEY_POS_LINK != 0x10000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_POS_LINK 0x10000000
 #endif
-#if !(defined(KEY_POS_SETATTR) || (defined(HAVE_DECL_KEY_POS_SETATTR) && HAVE_DECL_KEY_POS_SETATTR))
+#if defined(KEY_POS_SETATTR) || (defined(HAVE_DECL_KEY_POS_SETATTR) && HAVE_DECL_KEY_POS_SETATTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_POS_SETATTR) == (0x20000000), "KEY_POS_SETATTR != 0x20000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_POS_SETATTR 0x20000000
 #endif
-#if !(defined(KEY_POS_ALL) || (defined(HAVE_DECL_KEY_POS_ALL) && HAVE_DECL_KEY_POS_ALL))
+#if defined(KEY_POS_ALL) || (defined(HAVE_DECL_KEY_POS_ALL) && HAVE_DECL_KEY_POS_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_POS_ALL) == (0x3f000000), "KEY_POS_ALL != 0x3f000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_POS_ALL 0x3f000000
 #endif
-#if !(defined(KEY_USR_VIEW) || (defined(HAVE_DECL_KEY_USR_VIEW) && HAVE_DECL_KEY_USR_VIEW))
+#if defined(KEY_USR_VIEW) || (defined(HAVE_DECL_KEY_USR_VIEW) && HAVE_DECL_KEY_USR_VIEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_USR_VIEW) == (0x00010000), "KEY_USR_VIEW != 0x00010000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_USR_VIEW 0x00010000
 #endif
-#if !(defined(KEY_USR_READ) || (defined(HAVE_DECL_KEY_USR_READ) && HAVE_DECL_KEY_USR_READ))
+#if defined(KEY_USR_READ) || (defined(HAVE_DECL_KEY_USR_READ) && HAVE_DECL_KEY_USR_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_USR_READ) == (0x00020000), "KEY_USR_READ != 0x00020000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_USR_READ 0x00020000
 #endif
-#if !(defined(KEY_USR_WRITE) || (defined(HAVE_DECL_KEY_USR_WRITE) && HAVE_DECL_KEY_USR_WRITE))
+#if defined(KEY_USR_WRITE) || (defined(HAVE_DECL_KEY_USR_WRITE) && HAVE_DECL_KEY_USR_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_USR_WRITE) == (0x00040000), "KEY_USR_WRITE != 0x00040000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_USR_WRITE 0x00040000
 #endif
-#if !(defined(KEY_USR_SEARCH) || (defined(HAVE_DECL_KEY_USR_SEARCH) && HAVE_DECL_KEY_USR_SEARCH))
+#if defined(KEY_USR_SEARCH) || (defined(HAVE_DECL_KEY_USR_SEARCH) && HAVE_DECL_KEY_USR_SEARCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_USR_SEARCH) == (0x00080000), "KEY_USR_SEARCH != 0x00080000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_USR_SEARCH 0x00080000
 #endif
-#if !(defined(KEY_USR_LINK) || (defined(HAVE_DECL_KEY_USR_LINK) && HAVE_DECL_KEY_USR_LINK))
+#if defined(KEY_USR_LINK) || (defined(HAVE_DECL_KEY_USR_LINK) && HAVE_DECL_KEY_USR_LINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_USR_LINK) == (0x00100000), "KEY_USR_LINK != 0x00100000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_USR_LINK 0x00100000
 #endif
-#if !(defined(KEY_USR_SETATTR) || (defined(HAVE_DECL_KEY_USR_SETATTR) && HAVE_DECL_KEY_USR_SETATTR))
+#if defined(KEY_USR_SETATTR) || (defined(HAVE_DECL_KEY_USR_SETATTR) && HAVE_DECL_KEY_USR_SETATTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_USR_SETATTR) == (0x00200000), "KEY_USR_SETATTR != 0x00200000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_USR_SETATTR 0x00200000
 #endif
-#if !(defined(KEY_USR_ALL) || (defined(HAVE_DECL_KEY_USR_ALL) && HAVE_DECL_KEY_USR_ALL))
+#if defined(KEY_USR_ALL) || (defined(HAVE_DECL_KEY_USR_ALL) && HAVE_DECL_KEY_USR_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_USR_ALL) == (0x003f0000), "KEY_USR_ALL != 0x003f0000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_USR_ALL 0x003f0000
 #endif
-#if !(defined(KEY_GRP_VIEW) || (defined(HAVE_DECL_KEY_GRP_VIEW) && HAVE_DECL_KEY_GRP_VIEW))
+#if defined(KEY_GRP_VIEW) || (defined(HAVE_DECL_KEY_GRP_VIEW) && HAVE_DECL_KEY_GRP_VIEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GRP_VIEW) == (0x00000100), "KEY_GRP_VIEW != 0x00000100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GRP_VIEW 0x00000100
 #endif
-#if !(defined(KEY_GRP_READ) || (defined(HAVE_DECL_KEY_GRP_READ) && HAVE_DECL_KEY_GRP_READ))
+#if defined(KEY_GRP_READ) || (defined(HAVE_DECL_KEY_GRP_READ) && HAVE_DECL_KEY_GRP_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GRP_READ) == (0x00000200), "KEY_GRP_READ != 0x00000200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GRP_READ 0x00000200
 #endif
-#if !(defined(KEY_GRP_WRITE) || (defined(HAVE_DECL_KEY_GRP_WRITE) && HAVE_DECL_KEY_GRP_WRITE))
+#if defined(KEY_GRP_WRITE) || (defined(HAVE_DECL_KEY_GRP_WRITE) && HAVE_DECL_KEY_GRP_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GRP_WRITE) == (0x00000400), "KEY_GRP_WRITE != 0x00000400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GRP_WRITE 0x00000400
 #endif
-#if !(defined(KEY_GRP_SEARCH) || (defined(HAVE_DECL_KEY_GRP_SEARCH) && HAVE_DECL_KEY_GRP_SEARCH))
+#if defined(KEY_GRP_SEARCH) || (defined(HAVE_DECL_KEY_GRP_SEARCH) && HAVE_DECL_KEY_GRP_SEARCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GRP_SEARCH) == (0x00000800), "KEY_GRP_SEARCH != 0x00000800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GRP_SEARCH 0x00000800
 #endif
-#if !(defined(KEY_GRP_LINK) || (defined(HAVE_DECL_KEY_GRP_LINK) && HAVE_DECL_KEY_GRP_LINK))
+#if defined(KEY_GRP_LINK) || (defined(HAVE_DECL_KEY_GRP_LINK) && HAVE_DECL_KEY_GRP_LINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GRP_LINK) == (0x00001000), "KEY_GRP_LINK != 0x00001000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GRP_LINK 0x00001000
 #endif
-#if !(defined(KEY_GRP_SETATTR) || (defined(HAVE_DECL_KEY_GRP_SETATTR) && HAVE_DECL_KEY_GRP_SETATTR))
+#if defined(KEY_GRP_SETATTR) || (defined(HAVE_DECL_KEY_GRP_SETATTR) && HAVE_DECL_KEY_GRP_SETATTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GRP_SETATTR) == (0x00002000), "KEY_GRP_SETATTR != 0x00002000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GRP_SETATTR 0x00002000
 #endif
-#if !(defined(KEY_GRP_ALL) || (defined(HAVE_DECL_KEY_GRP_ALL) && HAVE_DECL_KEY_GRP_ALL))
+#if defined(KEY_GRP_ALL) || (defined(HAVE_DECL_KEY_GRP_ALL) && HAVE_DECL_KEY_GRP_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_GRP_ALL) == (0x00003f00), "KEY_GRP_ALL != 0x00003f00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_GRP_ALL 0x00003f00
 #endif
-#if !(defined(KEY_OTH_VIEW) || (defined(HAVE_DECL_KEY_OTH_VIEW) && HAVE_DECL_KEY_OTH_VIEW))
+#if defined(KEY_OTH_VIEW) || (defined(HAVE_DECL_KEY_OTH_VIEW) && HAVE_DECL_KEY_OTH_VIEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OTH_VIEW) == (0x00000001), "KEY_OTH_VIEW != 0x00000001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OTH_VIEW 0x00000001
 #endif
-#if !(defined(KEY_OTH_READ) || (defined(HAVE_DECL_KEY_OTH_READ) && HAVE_DECL_KEY_OTH_READ))
+#if defined(KEY_OTH_READ) || (defined(HAVE_DECL_KEY_OTH_READ) && HAVE_DECL_KEY_OTH_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OTH_READ) == (0x00000002), "KEY_OTH_READ != 0x00000002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OTH_READ 0x00000002
 #endif
-#if !(defined(KEY_OTH_WRITE) || (defined(HAVE_DECL_KEY_OTH_WRITE) && HAVE_DECL_KEY_OTH_WRITE))
+#if defined(KEY_OTH_WRITE) || (defined(HAVE_DECL_KEY_OTH_WRITE) && HAVE_DECL_KEY_OTH_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OTH_WRITE) == (0x00000004), "KEY_OTH_WRITE != 0x00000004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OTH_WRITE 0x00000004
 #endif
-#if !(defined(KEY_OTH_SEARCH) || (defined(HAVE_DECL_KEY_OTH_SEARCH) && HAVE_DECL_KEY_OTH_SEARCH))
+#if defined(KEY_OTH_SEARCH) || (defined(HAVE_DECL_KEY_OTH_SEARCH) && HAVE_DECL_KEY_OTH_SEARCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OTH_SEARCH) == (0x00000008), "KEY_OTH_SEARCH != 0x00000008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OTH_SEARCH 0x00000008
 #endif
-#if !(defined(KEY_OTH_LINK) || (defined(HAVE_DECL_KEY_OTH_LINK) && HAVE_DECL_KEY_OTH_LINK))
+#if defined(KEY_OTH_LINK) || (defined(HAVE_DECL_KEY_OTH_LINK) && HAVE_DECL_KEY_OTH_LINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OTH_LINK) == (0x00000010), "KEY_OTH_LINK != 0x00000010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OTH_LINK 0x00000010
 #endif
-#if !(defined(KEY_OTH_SETATTR) || (defined(HAVE_DECL_KEY_OTH_SETATTR) && HAVE_DECL_KEY_OTH_SETATTR))
+#if defined(KEY_OTH_SETATTR) || (defined(HAVE_DECL_KEY_OTH_SETATTR) && HAVE_DECL_KEY_OTH_SETATTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OTH_SETATTR) == (0x00000020), "KEY_OTH_SETATTR != 0x00000020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OTH_SETATTR 0x00000020
 #endif
-#if !(defined(KEY_OTH_ALL) || (defined(HAVE_DECL_KEY_OTH_ALL) && HAVE_DECL_KEY_OTH_ALL))
+#if defined(KEY_OTH_ALL) || (defined(HAVE_DECL_KEY_OTH_ALL) && HAVE_DECL_KEY_OTH_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_OTH_ALL) == (0x0000003f), "KEY_OTH_ALL != 0x0000003f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_OTH_ALL 0x0000003f
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat key_perms in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat key_perms in mpers mode
+
+# else
 
 static
 const struct xlat key_perms[] = {
@@ -123,4 +241,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/key_reqkeys.h b/xlat/key_reqkeys.h
index 920fbe4..52b0823 100644
--- a/xlat/key_reqkeys.h
+++ b/xlat/key_reqkeys.h
@@ -1,50 +1,94 @@
 /* Generated by ./xlat/gen.sh from ./xlat/key_reqkeys.in; do not edit. */
-#if !(defined(KEY_REQKEY_DEFL_NO_CHANGE) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_NO_CHANGE) && HAVE_DECL_KEY_REQKEY_DEFL_NO_CHANGE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KEY_REQKEY_DEFL_NO_CHANGE) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_NO_CHANGE) && HAVE_DECL_KEY_REQKEY_DEFL_NO_CHANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REQKEY_DEFL_NO_CHANGE) == (-1), "KEY_REQKEY_DEFL_NO_CHANGE != -1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REQKEY_DEFL_NO_CHANGE -1
 #endif
-#if !(defined(KEY_REQKEY_DEFL_DEFAULT) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_DEFAULT) && HAVE_DECL_KEY_REQKEY_DEFL_DEFAULT))
+#if defined(KEY_REQKEY_DEFL_DEFAULT) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_DEFAULT) && HAVE_DECL_KEY_REQKEY_DEFL_DEFAULT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REQKEY_DEFL_DEFAULT) == (0), "KEY_REQKEY_DEFL_DEFAULT != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REQKEY_DEFL_DEFAULT 0
 #endif
-#if !(defined(KEY_REQKEY_DEFL_THREAD_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_THREAD_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_THREAD_KEYRING))
+#if defined(KEY_REQKEY_DEFL_THREAD_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_THREAD_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_THREAD_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REQKEY_DEFL_THREAD_KEYRING) == (1), "KEY_REQKEY_DEFL_THREAD_KEYRING != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REQKEY_DEFL_THREAD_KEYRING 1
 #endif
-#if !(defined(KEY_REQKEY_DEFL_PROCESS_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_PROCESS_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_PROCESS_KEYRING))
+#if defined(KEY_REQKEY_DEFL_PROCESS_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_PROCESS_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_PROCESS_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REQKEY_DEFL_PROCESS_KEYRING) == (2), "KEY_REQKEY_DEFL_PROCESS_KEYRING != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REQKEY_DEFL_PROCESS_KEYRING 2
 #endif
-#if !(defined(KEY_REQKEY_DEFL_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_SESSION_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_SESSION_KEYRING))
+#if defined(KEY_REQKEY_DEFL_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_SESSION_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_SESSION_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REQKEY_DEFL_SESSION_KEYRING) == (3), "KEY_REQKEY_DEFL_SESSION_KEYRING != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REQKEY_DEFL_SESSION_KEYRING 3
 #endif
-#if !(defined(KEY_REQKEY_DEFL_USER_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_USER_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_USER_KEYRING))
+#if defined(KEY_REQKEY_DEFL_USER_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_USER_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_USER_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REQKEY_DEFL_USER_KEYRING) == (4), "KEY_REQKEY_DEFL_USER_KEYRING != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REQKEY_DEFL_USER_KEYRING 4
 #endif
-#if !(defined(KEY_REQKEY_DEFL_USER_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_USER_SESSION_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_USER_SESSION_KEYRING))
+#if defined(KEY_REQKEY_DEFL_USER_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_USER_SESSION_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_USER_SESSION_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REQKEY_DEFL_USER_SESSION_KEYRING) == (5), "KEY_REQKEY_DEFL_USER_SESSION_KEYRING != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REQKEY_DEFL_USER_SESSION_KEYRING 5
 #endif
-#if !(defined(KEY_REQKEY_DEFL_GROUP_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_GROUP_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_GROUP_KEYRING))
+#if defined(KEY_REQKEY_DEFL_GROUP_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_GROUP_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_GROUP_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REQKEY_DEFL_GROUP_KEYRING) == (6), "KEY_REQKEY_DEFL_GROUP_KEYRING != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REQKEY_DEFL_GROUP_KEYRING 6
 #endif
-#if !(defined(KEY_REQKEY_DEFL_REQUESTOR_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_REQUESTOR_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_REQUESTOR_KEYRING))
+#if defined(KEY_REQKEY_DEFL_REQUESTOR_KEYRING) || (defined(HAVE_DECL_KEY_REQKEY_DEFL_REQUESTOR_KEYRING) && HAVE_DECL_KEY_REQKEY_DEFL_REQUESTOR_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_REQKEY_DEFL_REQUESTOR_KEYRING) == (7), "KEY_REQKEY_DEFL_REQUESTOR_KEYRING != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_REQKEY_DEFL_REQUESTOR_KEYRING 7
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat key_reqkeys in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat key_reqkeys in mpers mode
+
+# else
 
 static
 const struct xlat key_reqkeys[] = {
- XLAT(KEY_REQKEY_DEFL_NO_CHANGE),
- XLAT(KEY_REQKEY_DEFL_DEFAULT),
- XLAT(KEY_REQKEY_DEFL_THREAD_KEYRING),
- XLAT(KEY_REQKEY_DEFL_PROCESS_KEYRING),
- XLAT(KEY_REQKEY_DEFL_SESSION_KEYRING),
- XLAT(KEY_REQKEY_DEFL_USER_KEYRING),
- XLAT(KEY_REQKEY_DEFL_USER_SESSION_KEYRING),
- XLAT(KEY_REQKEY_DEFL_GROUP_KEYRING),
- XLAT(KEY_REQKEY_DEFL_REQUESTOR_KEYRING),
+ XLAT_TYPE(int, KEY_REQKEY_DEFL_NO_CHANGE),
+ XLAT_TYPE(int, KEY_REQKEY_DEFL_DEFAULT),
+ XLAT_TYPE(int, KEY_REQKEY_DEFL_THREAD_KEYRING),
+ XLAT_TYPE(int, KEY_REQKEY_DEFL_PROCESS_KEYRING),
+ XLAT_TYPE(int, KEY_REQKEY_DEFL_SESSION_KEYRING),
+ XLAT_TYPE(int, KEY_REQKEY_DEFL_USER_KEYRING),
+ XLAT_TYPE(int, KEY_REQKEY_DEFL_USER_SESSION_KEYRING),
+ XLAT_TYPE(int, KEY_REQKEY_DEFL_GROUP_KEYRING),
+ XLAT_TYPE(int, KEY_REQKEY_DEFL_REQUESTOR_KEYRING),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/key_reqkeys.in b/xlat/key_reqkeys.in
index 747e440..ca60ca6 100644
--- a/xlat/key_reqkeys.in
+++ b/xlat/key_reqkeys.in
@@ -1,3 +1,4 @@
+#val_type int
 KEY_REQKEY_DEFL_NO_CHANGE -1
 KEY_REQKEY_DEFL_DEFAULT 0
 KEY_REQKEY_DEFL_THREAD_KEYRING 1
diff --git a/xlat/key_spec.h b/xlat/key_spec.h
index 888a8f3..98d317d 100644
--- a/xlat/key_spec.h
+++ b/xlat/key_spec.h
@@ -1,46 +1,86 @@
 /* Generated by ./xlat/gen.sh from ./xlat/key_spec.in; do not edit. */
-#if !(defined(KEY_SPEC_THREAD_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_THREAD_KEYRING) && HAVE_DECL_KEY_SPEC_THREAD_KEYRING))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KEY_SPEC_THREAD_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_THREAD_KEYRING) && HAVE_DECL_KEY_SPEC_THREAD_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPEC_THREAD_KEYRING) == (-1), "KEY_SPEC_THREAD_KEYRING != -1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPEC_THREAD_KEYRING -1
 #endif
-#if !(defined(KEY_SPEC_PROCESS_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_PROCESS_KEYRING) && HAVE_DECL_KEY_SPEC_PROCESS_KEYRING))
+#if defined(KEY_SPEC_PROCESS_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_PROCESS_KEYRING) && HAVE_DECL_KEY_SPEC_PROCESS_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPEC_PROCESS_KEYRING) == (-2), "KEY_SPEC_PROCESS_KEYRING != -2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPEC_PROCESS_KEYRING -2
 #endif
-#if !(defined(KEY_SPEC_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_SESSION_KEYRING) && HAVE_DECL_KEY_SPEC_SESSION_KEYRING))
+#if defined(KEY_SPEC_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_SESSION_KEYRING) && HAVE_DECL_KEY_SPEC_SESSION_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPEC_SESSION_KEYRING) == (-3), "KEY_SPEC_SESSION_KEYRING != -3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPEC_SESSION_KEYRING -3
 #endif
-#if !(defined(KEY_SPEC_USER_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_USER_KEYRING) && HAVE_DECL_KEY_SPEC_USER_KEYRING))
+#if defined(KEY_SPEC_USER_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_USER_KEYRING) && HAVE_DECL_KEY_SPEC_USER_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPEC_USER_KEYRING) == (-4), "KEY_SPEC_USER_KEYRING != -4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPEC_USER_KEYRING -4
 #endif
-#if !(defined(KEY_SPEC_USER_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_USER_SESSION_KEYRING) && HAVE_DECL_KEY_SPEC_USER_SESSION_KEYRING))
+#if defined(KEY_SPEC_USER_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_USER_SESSION_KEYRING) && HAVE_DECL_KEY_SPEC_USER_SESSION_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPEC_USER_SESSION_KEYRING) == (-5), "KEY_SPEC_USER_SESSION_KEYRING != -5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPEC_USER_SESSION_KEYRING -5
 #endif
-#if !(defined(KEY_SPEC_GROUP_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_GROUP_KEYRING) && HAVE_DECL_KEY_SPEC_GROUP_KEYRING))
+#if defined(KEY_SPEC_GROUP_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_GROUP_KEYRING) && HAVE_DECL_KEY_SPEC_GROUP_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPEC_GROUP_KEYRING) == (-6), "KEY_SPEC_GROUP_KEYRING != -6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPEC_GROUP_KEYRING -6
 #endif
-#if !(defined(KEY_SPEC_REQKEY_AUTH_KEY) || (defined(HAVE_DECL_KEY_SPEC_REQKEY_AUTH_KEY) && HAVE_DECL_KEY_SPEC_REQKEY_AUTH_KEY))
+#if defined(KEY_SPEC_REQKEY_AUTH_KEY) || (defined(HAVE_DECL_KEY_SPEC_REQKEY_AUTH_KEY) && HAVE_DECL_KEY_SPEC_REQKEY_AUTH_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPEC_REQKEY_AUTH_KEY) == (-7), "KEY_SPEC_REQKEY_AUTH_KEY != -7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPEC_REQKEY_AUTH_KEY -7
 #endif
-#if !(defined(KEY_SPEC_REQUESTOR_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_REQUESTOR_KEYRING) && HAVE_DECL_KEY_SPEC_REQUESTOR_KEYRING))
+#if defined(KEY_SPEC_REQUESTOR_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_REQUESTOR_KEYRING) && HAVE_DECL_KEY_SPEC_REQUESTOR_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEY_SPEC_REQUESTOR_KEYRING) == (-8), "KEY_SPEC_REQUESTOR_KEYRING != -8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEY_SPEC_REQUESTOR_KEYRING -8
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat key_spec in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat key_spec in mpers mode
+
+# else
 
 static
 const struct xlat key_spec[] = {
- XLAT(KEY_SPEC_THREAD_KEYRING),
- XLAT(KEY_SPEC_PROCESS_KEYRING),
- XLAT(KEY_SPEC_SESSION_KEYRING),
- XLAT(KEY_SPEC_USER_KEYRING),
- XLAT(KEY_SPEC_USER_SESSION_KEYRING),
- XLAT(KEY_SPEC_GROUP_KEYRING),
- XLAT(KEY_SPEC_REQKEY_AUTH_KEY),
- XLAT(KEY_SPEC_REQUESTOR_KEYRING),
+ XLAT_TYPE(int, KEY_SPEC_THREAD_KEYRING),
+ XLAT_TYPE(int, KEY_SPEC_PROCESS_KEYRING),
+ XLAT_TYPE(int, KEY_SPEC_SESSION_KEYRING),
+ XLAT_TYPE(int, KEY_SPEC_USER_KEYRING),
+ XLAT_TYPE(int, KEY_SPEC_USER_SESSION_KEYRING),
+ XLAT_TYPE(int, KEY_SPEC_GROUP_KEYRING),
+ XLAT_TYPE(int, KEY_SPEC_REQKEY_AUTH_KEY),
+ XLAT_TYPE(int, KEY_SPEC_REQUESTOR_KEYRING),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/key_spec.in b/xlat/key_spec.in
index 3e87954..02d9ee0 100644
--- a/xlat/key_spec.in
+++ b/xlat/key_spec.in
@@ -1,3 +1,4 @@
+#val_type int
 KEY_SPEC_THREAD_KEYRING -1
 KEY_SPEC_PROCESS_KEYRING -2
 KEY_SPEC_SESSION_KEYRING -3
diff --git a/xlat/keyctl_commands.h b/xlat/keyctl_commands.h
index cbe760d..2766271 100644
--- a/xlat/keyctl_commands.h
+++ b/xlat/keyctl_commands.h
@@ -1,85 +1,191 @@
 /* Generated by ./xlat/gen.sh from ./xlat/keyctl_commands.in; do not edit. */
-#if !(defined(KEYCTL_GET_KEYRING_ID) || (defined(HAVE_DECL_KEYCTL_GET_KEYRING_ID) && HAVE_DECL_KEYCTL_GET_KEYRING_ID))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KEYCTL_GET_KEYRING_ID) || (defined(HAVE_DECL_KEYCTL_GET_KEYRING_ID) && HAVE_DECL_KEYCTL_GET_KEYRING_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_GET_KEYRING_ID) == (0), "KEYCTL_GET_KEYRING_ID != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_GET_KEYRING_ID 0
 #endif
-#if !(defined(KEYCTL_JOIN_SESSION_KEYRING) || (defined(HAVE_DECL_KEYCTL_JOIN_SESSION_KEYRING) && HAVE_DECL_KEYCTL_JOIN_SESSION_KEYRING))
+#if defined(KEYCTL_JOIN_SESSION_KEYRING) || (defined(HAVE_DECL_KEYCTL_JOIN_SESSION_KEYRING) && HAVE_DECL_KEYCTL_JOIN_SESSION_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_JOIN_SESSION_KEYRING) == (1), "KEYCTL_JOIN_SESSION_KEYRING != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_JOIN_SESSION_KEYRING 1
 #endif
-#if !(defined(KEYCTL_UPDATE) || (defined(HAVE_DECL_KEYCTL_UPDATE) && HAVE_DECL_KEYCTL_UPDATE))
+#if defined(KEYCTL_UPDATE) || (defined(HAVE_DECL_KEYCTL_UPDATE) && HAVE_DECL_KEYCTL_UPDATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_UPDATE) == (2), "KEYCTL_UPDATE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_UPDATE 2
 #endif
-#if !(defined(KEYCTL_REVOKE) || (defined(HAVE_DECL_KEYCTL_REVOKE) && HAVE_DECL_KEYCTL_REVOKE))
+#if defined(KEYCTL_REVOKE) || (defined(HAVE_DECL_KEYCTL_REVOKE) && HAVE_DECL_KEYCTL_REVOKE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_REVOKE) == (3), "KEYCTL_REVOKE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_REVOKE 3
 #endif
-#if !(defined(KEYCTL_CHOWN) || (defined(HAVE_DECL_KEYCTL_CHOWN) && HAVE_DECL_KEYCTL_CHOWN))
+#if defined(KEYCTL_CHOWN) || (defined(HAVE_DECL_KEYCTL_CHOWN) && HAVE_DECL_KEYCTL_CHOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_CHOWN) == (4), "KEYCTL_CHOWN != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_CHOWN 4
 #endif
-#if !(defined(KEYCTL_SETPERM) || (defined(HAVE_DECL_KEYCTL_SETPERM) && HAVE_DECL_KEYCTL_SETPERM))
+#if defined(KEYCTL_SETPERM) || (defined(HAVE_DECL_KEYCTL_SETPERM) && HAVE_DECL_KEYCTL_SETPERM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_SETPERM) == (5), "KEYCTL_SETPERM != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_SETPERM 5
 #endif
-#if !(defined(KEYCTL_DESCRIBE) || (defined(HAVE_DECL_KEYCTL_DESCRIBE) && HAVE_DECL_KEYCTL_DESCRIBE))
+#if defined(KEYCTL_DESCRIBE) || (defined(HAVE_DECL_KEYCTL_DESCRIBE) && HAVE_DECL_KEYCTL_DESCRIBE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_DESCRIBE) == (6), "KEYCTL_DESCRIBE != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_DESCRIBE 6
 #endif
-#if !(defined(KEYCTL_CLEAR) || (defined(HAVE_DECL_KEYCTL_CLEAR) && HAVE_DECL_KEYCTL_CLEAR))
+#if defined(KEYCTL_CLEAR) || (defined(HAVE_DECL_KEYCTL_CLEAR) && HAVE_DECL_KEYCTL_CLEAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_CLEAR) == (7), "KEYCTL_CLEAR != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_CLEAR 7
 #endif
-#if !(defined(KEYCTL_LINK) || (defined(HAVE_DECL_KEYCTL_LINK) && HAVE_DECL_KEYCTL_LINK))
+#if defined(KEYCTL_LINK) || (defined(HAVE_DECL_KEYCTL_LINK) && HAVE_DECL_KEYCTL_LINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_LINK) == (8), "KEYCTL_LINK != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_LINK 8
 #endif
-#if !(defined(KEYCTL_UNLINK) || (defined(HAVE_DECL_KEYCTL_UNLINK) && HAVE_DECL_KEYCTL_UNLINK))
+#if defined(KEYCTL_UNLINK) || (defined(HAVE_DECL_KEYCTL_UNLINK) && HAVE_DECL_KEYCTL_UNLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_UNLINK) == (9), "KEYCTL_UNLINK != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_UNLINK 9
 #endif
-#if !(defined(KEYCTL_SEARCH) || (defined(HAVE_DECL_KEYCTL_SEARCH) && HAVE_DECL_KEYCTL_SEARCH))
+#if defined(KEYCTL_SEARCH) || (defined(HAVE_DECL_KEYCTL_SEARCH) && HAVE_DECL_KEYCTL_SEARCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_SEARCH) == (10), "KEYCTL_SEARCH != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_SEARCH 10
 #endif
-#if !(defined(KEYCTL_READ) || (defined(HAVE_DECL_KEYCTL_READ) && HAVE_DECL_KEYCTL_READ))
+#if defined(KEYCTL_READ) || (defined(HAVE_DECL_KEYCTL_READ) && HAVE_DECL_KEYCTL_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_READ) == (11), "KEYCTL_READ != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_READ 11
 #endif
-#if !(defined(KEYCTL_INSTANTIATE) || (defined(HAVE_DECL_KEYCTL_INSTANTIATE) && HAVE_DECL_KEYCTL_INSTANTIATE))
+#if defined(KEYCTL_INSTANTIATE) || (defined(HAVE_DECL_KEYCTL_INSTANTIATE) && HAVE_DECL_KEYCTL_INSTANTIATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_INSTANTIATE) == (12), "KEYCTL_INSTANTIATE != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_INSTANTIATE 12
 #endif
-#if !(defined(KEYCTL_NEGATE) || (defined(HAVE_DECL_KEYCTL_NEGATE) && HAVE_DECL_KEYCTL_NEGATE))
+#if defined(KEYCTL_NEGATE) || (defined(HAVE_DECL_KEYCTL_NEGATE) && HAVE_DECL_KEYCTL_NEGATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_NEGATE) == (13), "KEYCTL_NEGATE != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_NEGATE 13
 #endif
-#if !(defined(KEYCTL_SET_REQKEY_KEYRING) || (defined(HAVE_DECL_KEYCTL_SET_REQKEY_KEYRING) && HAVE_DECL_KEYCTL_SET_REQKEY_KEYRING))
+#if defined(KEYCTL_SET_REQKEY_KEYRING) || (defined(HAVE_DECL_KEYCTL_SET_REQKEY_KEYRING) && HAVE_DECL_KEYCTL_SET_REQKEY_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_SET_REQKEY_KEYRING) == (14), "KEYCTL_SET_REQKEY_KEYRING != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_SET_REQKEY_KEYRING 14
 #endif
-#if !(defined(KEYCTL_SET_TIMEOUT) || (defined(HAVE_DECL_KEYCTL_SET_TIMEOUT) && HAVE_DECL_KEYCTL_SET_TIMEOUT))
+#if defined(KEYCTL_SET_TIMEOUT) || (defined(HAVE_DECL_KEYCTL_SET_TIMEOUT) && HAVE_DECL_KEYCTL_SET_TIMEOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_SET_TIMEOUT) == (15), "KEYCTL_SET_TIMEOUT != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_SET_TIMEOUT 15
 #endif
-#if !(defined(KEYCTL_ASSUME_AUTHORITY) || (defined(HAVE_DECL_KEYCTL_ASSUME_AUTHORITY) && HAVE_DECL_KEYCTL_ASSUME_AUTHORITY))
+#if defined(KEYCTL_ASSUME_AUTHORITY) || (defined(HAVE_DECL_KEYCTL_ASSUME_AUTHORITY) && HAVE_DECL_KEYCTL_ASSUME_AUTHORITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_ASSUME_AUTHORITY) == (16), "KEYCTL_ASSUME_AUTHORITY != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_ASSUME_AUTHORITY 16
 #endif
-#if !(defined(KEYCTL_GET_SECURITY) || (defined(HAVE_DECL_KEYCTL_GET_SECURITY) && HAVE_DECL_KEYCTL_GET_SECURITY))
+#if defined(KEYCTL_GET_SECURITY) || (defined(HAVE_DECL_KEYCTL_GET_SECURITY) && HAVE_DECL_KEYCTL_GET_SECURITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_GET_SECURITY) == (17), "KEYCTL_GET_SECURITY != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_GET_SECURITY 17
 #endif
-#if !(defined(KEYCTL_SESSION_TO_PARENT) || (defined(HAVE_DECL_KEYCTL_SESSION_TO_PARENT) && HAVE_DECL_KEYCTL_SESSION_TO_PARENT))
+#if defined(KEYCTL_SESSION_TO_PARENT) || (defined(HAVE_DECL_KEYCTL_SESSION_TO_PARENT) && HAVE_DECL_KEYCTL_SESSION_TO_PARENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_SESSION_TO_PARENT) == (18), "KEYCTL_SESSION_TO_PARENT != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_SESSION_TO_PARENT 18
 #endif
-#if !(defined(KEYCTL_REJECT) || (defined(HAVE_DECL_KEYCTL_REJECT) && HAVE_DECL_KEYCTL_REJECT))
+#if defined(KEYCTL_REJECT) || (defined(HAVE_DECL_KEYCTL_REJECT) && HAVE_DECL_KEYCTL_REJECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_REJECT) == (19), "KEYCTL_REJECT != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_REJECT 19
 #endif
-#if !(defined(KEYCTL_INSTANTIATE_IOV) || (defined(HAVE_DECL_KEYCTL_INSTANTIATE_IOV) && HAVE_DECL_KEYCTL_INSTANTIATE_IOV))
+#if defined(KEYCTL_INSTANTIATE_IOV) || (defined(HAVE_DECL_KEYCTL_INSTANTIATE_IOV) && HAVE_DECL_KEYCTL_INSTANTIATE_IOV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_INSTANTIATE_IOV) == (20), "KEYCTL_INSTANTIATE_IOV != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_INSTANTIATE_IOV 20
 #endif
-#if !(defined(KEYCTL_INVALIDATE) || (defined(HAVE_DECL_KEYCTL_INVALIDATE) && HAVE_DECL_KEYCTL_INVALIDATE))
+#if defined(KEYCTL_INVALIDATE) || (defined(HAVE_DECL_KEYCTL_INVALIDATE) && HAVE_DECL_KEYCTL_INVALIDATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_INVALIDATE) == (21), "KEYCTL_INVALIDATE != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_INVALIDATE 21
 #endif
-#if !(defined(KEYCTL_GET_PERSISTENT) || (defined(HAVE_DECL_KEYCTL_GET_PERSISTENT) && HAVE_DECL_KEYCTL_GET_PERSISTENT))
+#if defined(KEYCTL_GET_PERSISTENT) || (defined(HAVE_DECL_KEYCTL_GET_PERSISTENT) && HAVE_DECL_KEYCTL_GET_PERSISTENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_GET_PERSISTENT) == (22), "KEYCTL_GET_PERSISTENT != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_GET_PERSISTENT 22
 #endif
-#if !(defined(KEYCTL_DH_COMPUTE) || (defined(HAVE_DECL_KEYCTL_DH_COMPUTE) && HAVE_DECL_KEYCTL_DH_COMPUTE))
+#if defined(KEYCTL_DH_COMPUTE) || (defined(HAVE_DECL_KEYCTL_DH_COMPUTE) && HAVE_DECL_KEYCTL_DH_COMPUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_DH_COMPUTE) == (23), "KEYCTL_DH_COMPUTE != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_DH_COMPUTE 23
 #endif
-#if !(defined(KEYCTL_RESTRICT_KEYRING) || (defined(HAVE_DECL_KEYCTL_RESTRICT_KEYRING) && HAVE_DECL_KEYCTL_RESTRICT_KEYRING))
+#if defined(KEYCTL_RESTRICT_KEYRING) || (defined(HAVE_DECL_KEYCTL_RESTRICT_KEYRING) && HAVE_DECL_KEYCTL_RESTRICT_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KEYCTL_RESTRICT_KEYRING) == (29), "KEYCTL_RESTRICT_KEYRING != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KEYCTL_RESTRICT_KEYRING 29
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat keyctl_commands in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat keyctl_commands in mpers mode
+
+# else
 
 static
 const struct xlat keyctl_commands[] = {
@@ -111,4 +217,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/kvm_mem_flags.h b/xlat/kvm_mem_flags.h
index 5a8ebee..3598821 100644
--- a/xlat/kvm_mem_flags.h
+++ b/xlat/kvm_mem_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/kvm_mem_flags.in; do not edit. */
-#if !(defined(KVM_MEM_LOG_DIRTY_PAGES) || (defined(HAVE_DECL_KVM_MEM_LOG_DIRTY_PAGES) && HAVE_DECL_KVM_MEM_LOG_DIRTY_PAGES))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KVM_MEM_LOG_DIRTY_PAGES) || (defined(HAVE_DECL_KVM_MEM_LOG_DIRTY_PAGES) && HAVE_DECL_KVM_MEM_LOG_DIRTY_PAGES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KVM_MEM_LOG_DIRTY_PAGES) == ((1 << 0)), "KVM_MEM_LOG_DIRTY_PAGES != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KVM_MEM_LOG_DIRTY_PAGES (1 << 0)
 #endif
-#if !(defined(KVM_MEM_READONLY) || (defined(HAVE_DECL_KVM_MEM_READONLY) && HAVE_DECL_KVM_MEM_READONLY))
+#if defined(KVM_MEM_READONLY) || (defined(HAVE_DECL_KVM_MEM_READONLY) && HAVE_DECL_KVM_MEM_READONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KVM_MEM_READONLY) == ((1 << 1)), "KVM_MEM_READONLY != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KVM_MEM_READONLY (1 << 1)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat kvm_mem_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat kvm_mem_flags in mpers mode
+
+# else
 
 static
 const struct xlat kvm_mem_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/lockfcmds.h b/xlat/lockfcmds.h
index 632c9cb..da69625 100644
--- a/xlat/lockfcmds.h
+++ b/xlat/lockfcmds.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/lockfcmds.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat lockfcmds in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat lockfcmds in mpers mode
+
+# else
 
 static
 const struct xlat lockfcmds[] = {
@@ -26,4 +32,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/loop_cmds.h b/xlat/loop_cmds.h
index cc8a7c9..7230821 100644
--- a/xlat/loop_cmds.h
+++ b/xlat/loop_cmds.h
@@ -1,40 +1,96 @@
 /* Generated by ./xlat/gen.sh from ./xlat/loop_cmds.in; do not edit. */
-#if !(defined(LOOP_SET_FD) || (defined(HAVE_DECL_LOOP_SET_FD) && HAVE_DECL_LOOP_SET_FD))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(LOOP_SET_FD) || (defined(HAVE_DECL_LOOP_SET_FD) && HAVE_DECL_LOOP_SET_FD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_SET_FD) == (0x4C00), "LOOP_SET_FD != 0x4C00");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_SET_FD 0x4C00
 #endif
-#if !(defined(LOOP_CLR_FD) || (defined(HAVE_DECL_LOOP_CLR_FD) && HAVE_DECL_LOOP_CLR_FD))
+#if defined(LOOP_CLR_FD) || (defined(HAVE_DECL_LOOP_CLR_FD) && HAVE_DECL_LOOP_CLR_FD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_CLR_FD) == (0x4C01), "LOOP_CLR_FD != 0x4C01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_CLR_FD 0x4C01
 #endif
-#if !(defined(LOOP_SET_STATUS) || (defined(HAVE_DECL_LOOP_SET_STATUS) && HAVE_DECL_LOOP_SET_STATUS))
+#if defined(LOOP_SET_STATUS) || (defined(HAVE_DECL_LOOP_SET_STATUS) && HAVE_DECL_LOOP_SET_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_SET_STATUS) == (0x4C02), "LOOP_SET_STATUS != 0x4C02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_SET_STATUS 0x4C02
 #endif
-#if !(defined(LOOP_GET_STATUS) || (defined(HAVE_DECL_LOOP_GET_STATUS) && HAVE_DECL_LOOP_GET_STATUS))
+#if defined(LOOP_GET_STATUS) || (defined(HAVE_DECL_LOOP_GET_STATUS) && HAVE_DECL_LOOP_GET_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_GET_STATUS) == (0x4C03), "LOOP_GET_STATUS != 0x4C03");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_GET_STATUS 0x4C03
 #endif
-#if !(defined(LOOP_SET_STATUS64) || (defined(HAVE_DECL_LOOP_SET_STATUS64) && HAVE_DECL_LOOP_SET_STATUS64))
+#if defined(LOOP_SET_STATUS64) || (defined(HAVE_DECL_LOOP_SET_STATUS64) && HAVE_DECL_LOOP_SET_STATUS64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_SET_STATUS64) == (0x4C04), "LOOP_SET_STATUS64 != 0x4C04");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_SET_STATUS64 0x4C04
 #endif
-#if !(defined(LOOP_GET_STATUS64) || (defined(HAVE_DECL_LOOP_GET_STATUS64) && HAVE_DECL_LOOP_GET_STATUS64))
+#if defined(LOOP_GET_STATUS64) || (defined(HAVE_DECL_LOOP_GET_STATUS64) && HAVE_DECL_LOOP_GET_STATUS64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_GET_STATUS64) == (0x4C05), "LOOP_GET_STATUS64 != 0x4C05");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_GET_STATUS64 0x4C05
 #endif
-#if !(defined(LOOP_CHANGE_FD) || (defined(HAVE_DECL_LOOP_CHANGE_FD) && HAVE_DECL_LOOP_CHANGE_FD))
+#if defined(LOOP_CHANGE_FD) || (defined(HAVE_DECL_LOOP_CHANGE_FD) && HAVE_DECL_LOOP_CHANGE_FD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_CHANGE_FD) == (0x4C06), "LOOP_CHANGE_FD != 0x4C06");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_CHANGE_FD 0x4C06
 #endif
-#if !(defined(LOOP_SET_CAPACITY) || (defined(HAVE_DECL_LOOP_SET_CAPACITY) && HAVE_DECL_LOOP_SET_CAPACITY))
+#if defined(LOOP_SET_CAPACITY) || (defined(HAVE_DECL_LOOP_SET_CAPACITY) && HAVE_DECL_LOOP_SET_CAPACITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_SET_CAPACITY) == (0x4C07), "LOOP_SET_CAPACITY != 0x4C07");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_SET_CAPACITY 0x4C07
 #endif
-#if !(defined(LOOP_SET_DIRECT_IO) || (defined(HAVE_DECL_LOOP_SET_DIRECT_IO) && HAVE_DECL_LOOP_SET_DIRECT_IO))
+#if defined(LOOP_SET_DIRECT_IO) || (defined(HAVE_DECL_LOOP_SET_DIRECT_IO) && HAVE_DECL_LOOP_SET_DIRECT_IO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_SET_DIRECT_IO) == (0x4C08), "LOOP_SET_DIRECT_IO != 0x4C08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_SET_DIRECT_IO 0x4C08
 #endif
-#if !(defined(LOOP_SET_BLOCK_SIZE) || (defined(HAVE_DECL_LOOP_SET_BLOCK_SIZE) && HAVE_DECL_LOOP_SET_BLOCK_SIZE))
+#if defined(LOOP_SET_BLOCK_SIZE) || (defined(HAVE_DECL_LOOP_SET_BLOCK_SIZE) && HAVE_DECL_LOOP_SET_BLOCK_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_SET_BLOCK_SIZE) == (0x4C09), "LOOP_SET_BLOCK_SIZE != 0x4C09");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_SET_BLOCK_SIZE 0x4C09
 #endif
-#if !(defined(LOOP_CTL_ADD) || (defined(HAVE_DECL_LOOP_CTL_ADD) && HAVE_DECL_LOOP_CTL_ADD))
+#if defined(LOOP_CTL_ADD) || (defined(HAVE_DECL_LOOP_CTL_ADD) && HAVE_DECL_LOOP_CTL_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_CTL_ADD) == (0x4C80), "LOOP_CTL_ADD != 0x4C80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_CTL_ADD 0x4C80
 #endif
-#if !(defined(LOOP_CTL_REMOVE) || (defined(HAVE_DECL_LOOP_CTL_REMOVE) && HAVE_DECL_LOOP_CTL_REMOVE))
+#if defined(LOOP_CTL_REMOVE) || (defined(HAVE_DECL_LOOP_CTL_REMOVE) && HAVE_DECL_LOOP_CTL_REMOVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_CTL_REMOVE) == (0x4C81), "LOOP_CTL_REMOVE != 0x4C81");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_CTL_REMOVE 0x4C81
 #endif
-#if !(defined(LOOP_CTL_GET_FREE) || (defined(HAVE_DECL_LOOP_CTL_GET_FREE) && HAVE_DECL_LOOP_CTL_GET_FREE))
+#if defined(LOOP_CTL_GET_FREE) || (defined(HAVE_DECL_LOOP_CTL_GET_FREE) && HAVE_DECL_LOOP_CTL_GET_FREE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LOOP_CTL_GET_FREE) == (0x4C82), "LOOP_CTL_GET_FREE != 0x4C82");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LOOP_CTL_GET_FREE 0x4C82
 #endif
diff --git a/xlat/loop_crypt_type_options.h b/xlat/loop_crypt_type_options.h
index 478618b..a08c6a7 100644
--- a/xlat/loop_crypt_type_options.h
+++ b/xlat/loop_crypt_type_options.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/loop_crypt_type_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat loop_crypt_type_options[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat loop_crypt_type_options[] = {
 #if defined(LO_CRYPT_NONE) || (defined(HAVE_DECL_LO_CRYPT_NONE) && HAVE_DECL_LO_CRYPT_NONE)
   XLAT(LO_CRYPT_NONE),
@@ -43,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/loop_flags_options.h b/xlat/loop_flags_options.h
index d69f53d..5af8dfc 100644
--- a/xlat/loop_flags_options.h
+++ b/xlat/loop_flags_options.h
@@ -1,29 +1,55 @@
 /* Generated by ./xlat/gen.sh from ./xlat/loop_flags_options.in; do not edit. */
-#if !(defined(LO_FLAGS_READ_ONLY) || (defined(HAVE_DECL_LO_FLAGS_READ_ONLY) && HAVE_DECL_LO_FLAGS_READ_ONLY))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(LO_FLAGS_READ_ONLY) || (defined(HAVE_DECL_LO_FLAGS_READ_ONLY) && HAVE_DECL_LO_FLAGS_READ_ONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LO_FLAGS_READ_ONLY) == (1), "LO_FLAGS_READ_ONLY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LO_FLAGS_READ_ONLY 1
 #endif
-#if !(defined(LO_FLAGS_USE_AOPS) || (defined(HAVE_DECL_LO_FLAGS_USE_AOPS) && HAVE_DECL_LO_FLAGS_USE_AOPS))
+#if defined(LO_FLAGS_USE_AOPS) || (defined(HAVE_DECL_LO_FLAGS_USE_AOPS) && HAVE_DECL_LO_FLAGS_USE_AOPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LO_FLAGS_USE_AOPS) == (2), "LO_FLAGS_USE_AOPS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LO_FLAGS_USE_AOPS 2
 #endif
-#if !(defined(LO_FLAGS_AUTOCLEAR) || (defined(HAVE_DECL_LO_FLAGS_AUTOCLEAR) && HAVE_DECL_LO_FLAGS_AUTOCLEAR))
+#if defined(LO_FLAGS_AUTOCLEAR) || (defined(HAVE_DECL_LO_FLAGS_AUTOCLEAR) && HAVE_DECL_LO_FLAGS_AUTOCLEAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LO_FLAGS_AUTOCLEAR) == (4), "LO_FLAGS_AUTOCLEAR != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LO_FLAGS_AUTOCLEAR 4
 #endif
-#if !(defined(LO_FLAGS_PARTSCAN) || (defined(HAVE_DECL_LO_FLAGS_PARTSCAN) && HAVE_DECL_LO_FLAGS_PARTSCAN))
+#if defined(LO_FLAGS_PARTSCAN) || (defined(HAVE_DECL_LO_FLAGS_PARTSCAN) && HAVE_DECL_LO_FLAGS_PARTSCAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LO_FLAGS_PARTSCAN) == (8), "LO_FLAGS_PARTSCAN != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LO_FLAGS_PARTSCAN 8
 #endif
-#if !(defined(LO_FLAGS_DIRECT_IO) || (defined(HAVE_DECL_LO_FLAGS_DIRECT_IO) && HAVE_DECL_LO_FLAGS_DIRECT_IO))
+#if defined(LO_FLAGS_DIRECT_IO) || (defined(HAVE_DECL_LO_FLAGS_DIRECT_IO) && HAVE_DECL_LO_FLAGS_DIRECT_IO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LO_FLAGS_DIRECT_IO) == (16), "LO_FLAGS_DIRECT_IO != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LO_FLAGS_DIRECT_IO 16
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat loop_flags_options[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat loop_flags_options[] = {
  XLAT(LO_FLAGS_READ_ONLY),
 
@@ -37,4 +63,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/lwtunnel_encap_types.h b/xlat/lwtunnel_encap_types.h
index ce29b6f..f5f4c5f 100644
--- a/xlat/lwtunnel_encap_types.h
+++ b/xlat/lwtunnel_encap_types.h
@@ -1,31 +1,65 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(LWTUNNEL_ENCAP_NONE) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_NONE) && HAVE_DECL_LWTUNNEL_ENCAP_NONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LWTUNNEL_ENCAP_NONE) == (0), "LWTUNNEL_ENCAP_NONE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LWTUNNEL_ENCAP_NONE 0
 #endif
-#if !(defined(LWTUNNEL_ENCAP_MPLS) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_MPLS) && HAVE_DECL_LWTUNNEL_ENCAP_MPLS))
+#if defined(LWTUNNEL_ENCAP_MPLS) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_MPLS) && HAVE_DECL_LWTUNNEL_ENCAP_MPLS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LWTUNNEL_ENCAP_MPLS) == (1), "LWTUNNEL_ENCAP_MPLS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LWTUNNEL_ENCAP_MPLS 1
 #endif
-#if !(defined(LWTUNNEL_ENCAP_IP) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_IP) && HAVE_DECL_LWTUNNEL_ENCAP_IP))
+#if defined(LWTUNNEL_ENCAP_IP) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_IP) && HAVE_DECL_LWTUNNEL_ENCAP_IP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LWTUNNEL_ENCAP_IP) == (2), "LWTUNNEL_ENCAP_IP != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LWTUNNEL_ENCAP_IP 2
 #endif
-#if !(defined(LWTUNNEL_ENCAP_ILA) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_ILA) && HAVE_DECL_LWTUNNEL_ENCAP_ILA))
+#if defined(LWTUNNEL_ENCAP_ILA) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_ILA) && HAVE_DECL_LWTUNNEL_ENCAP_ILA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LWTUNNEL_ENCAP_ILA) == (3), "LWTUNNEL_ENCAP_ILA != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LWTUNNEL_ENCAP_ILA 3
 #endif
-#if !(defined(LWTUNNEL_ENCAP_IP6) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_IP6) && HAVE_DECL_LWTUNNEL_ENCAP_IP6))
+#if defined(LWTUNNEL_ENCAP_IP6) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_IP6) && HAVE_DECL_LWTUNNEL_ENCAP_IP6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LWTUNNEL_ENCAP_IP6) == (4), "LWTUNNEL_ENCAP_IP6 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LWTUNNEL_ENCAP_IP6 4
 #endif
-#if !(defined(LWTUNNEL_ENCAP_SEG6) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_SEG6) && HAVE_DECL_LWTUNNEL_ENCAP_SEG6))
+#if defined(LWTUNNEL_ENCAP_SEG6) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_SEG6) && HAVE_DECL_LWTUNNEL_ENCAP_SEG6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LWTUNNEL_ENCAP_SEG6) == (5), "LWTUNNEL_ENCAP_SEG6 != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LWTUNNEL_ENCAP_SEG6 5
 #endif
-#if !(defined(LWTUNNEL_ENCAP_BPF) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_BPF) && HAVE_DECL_LWTUNNEL_ENCAP_BPF))
+#if defined(LWTUNNEL_ENCAP_BPF) || (defined(HAVE_DECL_LWTUNNEL_ENCAP_BPF) && HAVE_DECL_LWTUNNEL_ENCAP_BPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LWTUNNEL_ENCAP_BPF) == (6), "LWTUNNEL_ENCAP_BPF != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define LWTUNNEL_ENCAP_BPF 6
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat lwtunnel_encap_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat lwtunnel_encap_types in mpers mode
+
+# else
 
 static
 const struct xlat lwtunnel_encap_types[] = {
@@ -39,4 +73,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/madvise_cmds.h b/xlat/madvise_cmds.h
index ec5b06b..15cdd0f 100644
--- a/xlat/madvise_cmds.h
+++ b/xlat/madvise_cmds.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/madvise_cmds.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat madvise_cmds in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat madvise_cmds in mpers mode
+
+# else
 
 static
 const struct xlat madvise_cmds[] = {
@@ -68,4 +74,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mbindflags.h b/xlat/mbindflags.h
index eb30ba1..ea4e1ec 100644
--- a/xlat/mbindflags.h
+++ b/xlat/mbindflags.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mbindflags.in; do not edit. */
-#if !(defined(MPOL_MF_STRICT) || (defined(HAVE_DECL_MPOL_MF_STRICT) && HAVE_DECL_MPOL_MF_STRICT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MPOL_MF_STRICT) || (defined(HAVE_DECL_MPOL_MF_STRICT) && HAVE_DECL_MPOL_MF_STRICT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MPOL_MF_STRICT) == (1), "MPOL_MF_STRICT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MPOL_MF_STRICT 1
 #endif
-#if !(defined(MPOL_MF_MOVE) || (defined(HAVE_DECL_MPOL_MF_MOVE) && HAVE_DECL_MPOL_MF_MOVE))
+#if defined(MPOL_MF_MOVE) || (defined(HAVE_DECL_MPOL_MF_MOVE) && HAVE_DECL_MPOL_MF_MOVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MPOL_MF_MOVE) == (2), "MPOL_MF_MOVE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MPOL_MF_MOVE 2
 #endif
-#if !(defined(MPOL_MF_MOVE_ALL) || (defined(HAVE_DECL_MPOL_MF_MOVE_ALL) && HAVE_DECL_MPOL_MF_MOVE_ALL))
+#if defined(MPOL_MF_MOVE_ALL) || (defined(HAVE_DECL_MPOL_MF_MOVE_ALL) && HAVE_DECL_MPOL_MF_MOVE_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MPOL_MF_MOVE_ALL) == (4), "MPOL_MF_MOVE_ALL != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MPOL_MF_MOVE_ALL 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat mbindflags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat mbindflags in mpers mode
+
+# else
 
 static
 const struct xlat mbindflags[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mctl_sync.h b/xlat/mctl_sync.h
index 144f7f7..f70c693 100644
--- a/xlat/mctl_sync.h
+++ b/xlat/mctl_sync.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mctl_sync.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat mctl_sync in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat mctl_sync in mpers mode
+
+# else
 
 static
 const struct xlat mctl_sync[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mdb_flags.h b/xlat/mdb_flags.h
index 4340f3e..15b066c 100644
--- a/xlat/mdb_flags.h
+++ b/xlat/mdb_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mdb_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat mdb_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat mdb_flags in mpers mode
+
+# else
 
 static
 const struct xlat mdb_flags[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mdb_states.h b/xlat/mdb_states.h
index dd1337d..f5ca3ed 100644
--- a/xlat/mdb_states.h
+++ b/xlat/mdb_states.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mdb_states.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat mdb_states in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat mdb_states in mpers mode
+
+# else
 
 static
 const struct xlat mdb_states[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/membarrier_cmds.h b/xlat/membarrier_cmds.h
index 25c3e32..71e2960 100644
--- a/xlat/membarrier_cmds.h
+++ b/xlat/membarrier_cmds.h
@@ -1,34 +1,72 @@
 /* Generated by ./xlat/gen.sh from ./xlat/membarrier_cmds.in; do not edit. */
-#if !(defined(MEMBARRIER_CMD_QUERY) || (defined(HAVE_DECL_MEMBARRIER_CMD_QUERY) && HAVE_DECL_MEMBARRIER_CMD_QUERY))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MEMBARRIER_CMD_QUERY) || (defined(HAVE_DECL_MEMBARRIER_CMD_QUERY) && HAVE_DECL_MEMBARRIER_CMD_QUERY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MEMBARRIER_CMD_QUERY) == (0), "MEMBARRIER_CMD_QUERY != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MEMBARRIER_CMD_QUERY 0
 #endif
-#if !(defined(MEMBARRIER_CMD_GLOBAL) || (defined(HAVE_DECL_MEMBARRIER_CMD_GLOBAL) && HAVE_DECL_MEMBARRIER_CMD_GLOBAL))
+#if defined(MEMBARRIER_CMD_GLOBAL) || (defined(HAVE_DECL_MEMBARRIER_CMD_GLOBAL) && HAVE_DECL_MEMBARRIER_CMD_GLOBAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MEMBARRIER_CMD_GLOBAL) == (1 << 0), "MEMBARRIER_CMD_GLOBAL != 1 << 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MEMBARRIER_CMD_GLOBAL 1 << 0
 #endif
-#if !(defined(MEMBARRIER_CMD_GLOBAL_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_GLOBAL_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_GLOBAL_EXPEDITED))
+#if defined(MEMBARRIER_CMD_GLOBAL_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_GLOBAL_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_GLOBAL_EXPEDITED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MEMBARRIER_CMD_GLOBAL_EXPEDITED) == (1 << 1), "MEMBARRIER_CMD_GLOBAL_EXPEDITED != 1 << 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MEMBARRIER_CMD_GLOBAL_EXPEDITED 1 << 1
 #endif
-#if !(defined(MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED))
+#if defined(MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED) == (1 << 2), "MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED != 1 << 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED 1 << 2
 #endif
-#if !(defined(MEMBARRIER_CMD_PRIVATE_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED))
+#if defined(MEMBARRIER_CMD_PRIVATE_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MEMBARRIER_CMD_PRIVATE_EXPEDITED) == (1 << 3), "MEMBARRIER_CMD_PRIVATE_EXPEDITED != 1 << 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MEMBARRIER_CMD_PRIVATE_EXPEDITED 1 << 3
 #endif
-#if !(defined(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED))
+#if defined(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED) == (1 << 4), "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED != 1 << 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED 1 << 4
 #endif
-#if !(defined(MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE) || (defined(HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE) && HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE))
+#if defined(MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE) || (defined(HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE) && HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE) == (1 << 5), "MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE != 1 << 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE 1 << 5
 #endif
-#if !(defined(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE) || (defined(HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE) && HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE))
+#if defined(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE) || (defined(HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE) && HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE) == (1 << 6), "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE != 1 << 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE 1 << 6
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat membarrier_cmds in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat membarrier_cmds in mpers mode
+
+# else
 
 static
 const struct xlat membarrier_cmds[] = {
@@ -43,4 +81,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/memfd_create_flags.h b/xlat/memfd_create_flags.h
index f656e6b..1fd77d1 100644
--- a/xlat/memfd_create_flags.h
+++ b/xlat/memfd_create_flags.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/memfd_create_flags.in; do not edit. */
-#if !(defined(MFD_CLOEXEC) || (defined(HAVE_DECL_MFD_CLOEXEC) && HAVE_DECL_MFD_CLOEXEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MFD_CLOEXEC) || (defined(HAVE_DECL_MFD_CLOEXEC) && HAVE_DECL_MFD_CLOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MFD_CLOEXEC) == (1), "MFD_CLOEXEC != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MFD_CLOEXEC 1
 #endif
-#if !(defined(MFD_ALLOW_SEALING) || (defined(HAVE_DECL_MFD_ALLOW_SEALING) && HAVE_DECL_MFD_ALLOW_SEALING))
+#if defined(MFD_ALLOW_SEALING) || (defined(HAVE_DECL_MFD_ALLOW_SEALING) && HAVE_DECL_MFD_ALLOW_SEALING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MFD_ALLOW_SEALING) == (2), "MFD_ALLOW_SEALING != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MFD_ALLOW_SEALING 2
 #endif
-#if !(defined(MFD_HUGETLB) || (defined(HAVE_DECL_MFD_HUGETLB) && HAVE_DECL_MFD_HUGETLB))
+#if defined(MFD_HUGETLB) || (defined(HAVE_DECL_MFD_HUGETLB) && HAVE_DECL_MFD_HUGETLB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MFD_HUGETLB) == (4), "MFD_HUGETLB != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MFD_HUGETLB 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat memfd_create_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat memfd_create_flags in mpers mode
+
+# else
 
 static
 const struct xlat memfd_create_flags[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mempolicyflags.h b/xlat/mempolicyflags.h
index 38db13c..a68fcec 100644
--- a/xlat/mempolicyflags.h
+++ b/xlat/mempolicyflags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mempolicyflags.in; do not edit. */
-#if !(defined(MPOL_F_NODE) || (defined(HAVE_DECL_MPOL_F_NODE) && HAVE_DECL_MPOL_F_NODE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MPOL_F_NODE) || (defined(HAVE_DECL_MPOL_F_NODE) && HAVE_DECL_MPOL_F_NODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MPOL_F_NODE) == (1), "MPOL_F_NODE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MPOL_F_NODE 1
 #endif
-#if !(defined(MPOL_F_ADDR) || (defined(HAVE_DECL_MPOL_F_ADDR) && HAVE_DECL_MPOL_F_ADDR))
+#if defined(MPOL_F_ADDR) || (defined(HAVE_DECL_MPOL_F_ADDR) && HAVE_DECL_MPOL_F_ADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MPOL_F_ADDR) == (2), "MPOL_F_ADDR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MPOL_F_ADDR 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat mempolicyflags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat mempolicyflags in mpers mode
+
+# else
 
 static
 const struct xlat mempolicyflags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mlock_flags.h b/xlat/mlock_flags.h
index 9ec2e54..f2ef3e4 100644
--- a/xlat/mlock_flags.h
+++ b/xlat/mlock_flags.h
@@ -1,13 +1,23 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mlock_flags.in; do not edit. */
-#if !(defined(MLOCK_ONFAULT) || (defined(HAVE_DECL_MLOCK_ONFAULT) && HAVE_DECL_MLOCK_ONFAULT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MLOCK_ONFAULT) || (defined(HAVE_DECL_MLOCK_ONFAULT) && HAVE_DECL_MLOCK_ONFAULT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MLOCK_ONFAULT) == (1), "MLOCK_ONFAULT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MLOCK_ONFAULT 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat mlock_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat mlock_flags in mpers mode
+
+# else
 
 static
 const struct xlat mlock_flags[] = {
@@ -15,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mlockall_flags.h b/xlat/mlockall_flags.h
index c3fb08f..718ce3f 100644
--- a/xlat/mlockall_flags.h
+++ b/xlat/mlockall_flags.h
@@ -1,26 +1,76 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mlockall_flags.in; do not edit. */
-#if !(defined(MCL_CURRENT) || (defined(HAVE_DECL_MCL_CURRENT) && HAVE_DECL_MCL_CURRENT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined __alpha__ || defined __powerpc__ || defined __powerpc64__ || defined __sparc__
+#if defined(MCL_CURRENT) || (defined(HAVE_DECL_MCL_CURRENT) && HAVE_DECL_MCL_CURRENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MCL_CURRENT) == (0x2000), "MCL_CURRENT != 0x2000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MCL_CURRENT 0x2000
+#endif
+#if defined(MCL_FUTURE) || (defined(HAVE_DECL_MCL_FUTURE) && HAVE_DECL_MCL_FUTURE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MCL_FUTURE) == (0x4000), "MCL_FUTURE != 0x4000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MCL_FUTURE 0x4000
+#endif
+#if defined(MCL_ONFAULT) || (defined(HAVE_DECL_MCL_ONFAULT) && HAVE_DECL_MCL_ONFAULT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MCL_ONFAULT) == (0x8000), "MCL_ONFAULT != 0x8000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MCL_ONFAULT 0x8000
+#endif
+#else
+#if defined(MCL_CURRENT) || (defined(HAVE_DECL_MCL_CURRENT) && HAVE_DECL_MCL_CURRENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MCL_CURRENT) == (1), "MCL_CURRENT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MCL_CURRENT 1
 #endif
-#if !(defined(MCL_FUTURE) || (defined(HAVE_DECL_MCL_FUTURE) && HAVE_DECL_MCL_FUTURE))
+#if defined(MCL_FUTURE) || (defined(HAVE_DECL_MCL_FUTURE) && HAVE_DECL_MCL_FUTURE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MCL_FUTURE) == (2), "MCL_FUTURE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MCL_FUTURE 2
 #endif
-#if !(defined(MCL_ONFAULT) || (defined(HAVE_DECL_MCL_ONFAULT) && HAVE_DECL_MCL_ONFAULT))
+#if defined(MCL_ONFAULT) || (defined(HAVE_DECL_MCL_ONFAULT) && HAVE_DECL_MCL_ONFAULT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MCL_ONFAULT) == (4), "MCL_ONFAULT != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MCL_ONFAULT 4
 #endif
+#endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat mlockall_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat mlockall_flags in mpers mode
+
+# else
 
 static
 const struct xlat mlockall_flags[] = {
+#if defined __alpha__ || defined __powerpc__ || defined __powerpc64__ || defined __sparc__
  XLAT(MCL_CURRENT),
  XLAT(MCL_FUTURE),
  XLAT(MCL_ONFAULT),
+#else
+ XLAT(MCL_CURRENT),
+ XLAT(MCL_FUTURE),
+ XLAT(MCL_ONFAULT),
+#endif
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mlockall_flags.in b/xlat/mlockall_flags.in
index a39d7ba..d9ad7af 100644
--- a/xlat/mlockall_flags.in
+++ b/xlat/mlockall_flags.in
@@ -1,3 +1,9 @@
+#if defined __alpha__ || defined __powerpc__ || defined __powerpc64__ || defined __sparc__
+MCL_CURRENT	0x2000
+MCL_FUTURE	0x4000
+MCL_ONFAULT	0x8000
+#else
 MCL_CURRENT	1
 MCL_FUTURE	2
 MCL_ONFAULT	4
+#endif
diff --git a/xlat/mmap_flags.h b/xlat/mmap_flags.h
index 4858f07..aafa168 100644
--- a/xlat/mmap_flags.h
+++ b/xlat/mmap_flags.h
@@ -1,21 +1,39 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mmap_flags.in; do not edit. */
-#if !(defined(MAP_SHARED) || (defined(HAVE_DECL_MAP_SHARED) && HAVE_DECL_MAP_SHARED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MAP_SHARED) || (defined(HAVE_DECL_MAP_SHARED) && HAVE_DECL_MAP_SHARED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MAP_SHARED) == (1), "MAP_SHARED != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MAP_SHARED 1
 #endif
-#if !(defined(MAP_PRIVATE) || (defined(HAVE_DECL_MAP_PRIVATE) && HAVE_DECL_MAP_PRIVATE))
+#if defined(MAP_PRIVATE) || (defined(HAVE_DECL_MAP_PRIVATE) && HAVE_DECL_MAP_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MAP_PRIVATE) == (2), "MAP_PRIVATE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MAP_PRIVATE 2
 #endif
-#if !(defined(MAP_SHARED_VALIDATE) || (defined(HAVE_DECL_MAP_SHARED_VALIDATE) && HAVE_DECL_MAP_SHARED_VALIDATE))
+#if defined(MAP_SHARED_VALIDATE) || (defined(HAVE_DECL_MAP_SHARED_VALIDATE) && HAVE_DECL_MAP_SHARED_VALIDATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MAP_SHARED_VALIDATE) == (3), "MAP_SHARED_VALIDATE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MAP_SHARED_VALIDATE 3
 #endif
 #if defined MAP_UNINITIALIZED && MAP_UNINITIALIZED > 0
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat mmap_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat mmap_flags in mpers mode
+
+# else
 
 static
 const struct xlat mmap_flags[] = {
@@ -87,6 +105,9 @@
   XLAT(MAP_UNINITIALIZED),
 #endif
 #endif
+#if defined(MAP_FIXED_NOREPLACE) || (defined(HAVE_DECL_MAP_FIXED_NOREPLACE) && HAVE_DECL_MAP_FIXED_NOREPLACE)
+  XLAT(MAP_FIXED_NOREPLACE),
+#endif
 #if defined(MAP_AUTOGROW) || (defined(HAVE_DECL_MAP_AUTOGROW) && HAVE_DECL_MAP_AUTOGROW)
   XLAT(MAP_AUTOGROW),
 #endif
@@ -102,4 +123,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mmap_flags.in b/xlat/mmap_flags.in
index 5b05e61..150717a 100644
--- a/xlat/mmap_flags.in
+++ b/xlat/mmap_flags.in
@@ -24,6 +24,7 @@
 #if defined MAP_UNINITIALIZED && MAP_UNINITIALIZED > 0
 MAP_UNINITIALIZED
 #endif
+MAP_FIXED_NOREPLACE
 MAP_AUTOGROW /* MIPS, xtensa */
 MAP_AUTORSRV /* MIPS, xtensa */
 MAP_LOCAL /* MIPS, xtensa */
diff --git a/xlat/mmap_prot.h b/xlat/mmap_prot.h
index 0ff04eb..310e7f1 100644
--- a/xlat/mmap_prot.h
+++ b/xlat/mmap_prot.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mmap_prot.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat mmap_prot in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat mmap_prot in mpers mode
+
+# else
 
 static
 const struct xlat mmap_prot[] = {
@@ -32,7 +38,12 @@
 #if defined(PROT_SAO) || (defined(HAVE_DECL_PROT_SAO) && HAVE_DECL_PROT_SAO)
   XLAT(PROT_SAO),
 #endif
+#if defined(PROT_ADI) || (defined(HAVE_DECL_PROT_ADI) && HAVE_DECL_PROT_ADI)
+  XLAT(PROT_ADI),
+#endif
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mmap_prot.in b/xlat/mmap_prot.in
index 0589980..e99ec29 100644
--- a/xlat/mmap_prot.in
+++ b/xlat/mmap_prot.in
@@ -6,3 +6,4 @@
 PROT_GROWSDOWN
 PROT_GROWSUP
 PROT_SAO
+PROT_ADI
diff --git a/xlat/modem_flags.h b/xlat/modem_flags.h
index f171975..322ff11 100644
--- a/xlat/modem_flags.h
+++ b/xlat/modem_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/modem_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat modem_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat modem_flags in mpers mode
+
+# else
 
 static
 const struct xlat modem_flags[] = {
@@ -44,4 +50,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/modetypes.h b/xlat/modetypes.h
index 70d1868..94bd51a 100644
--- a/xlat/modetypes.h
+++ b/xlat/modetypes.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/modetypes.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat modetypes in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat modetypes in mpers mode
+
+# else
 
 static
 const struct xlat modetypes[] = {
@@ -32,4 +38,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/module_init_flags.h b/xlat/module_init_flags.h
index b3219d1..3057478 100644
--- a/xlat/module_init_flags.h
+++ b/xlat/module_init_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/module_init_flags.in; do not edit. */
-#if !(defined(MODULE_INIT_IGNORE_MODVERSIONS) || (defined(HAVE_DECL_MODULE_INIT_IGNORE_MODVERSIONS) && HAVE_DECL_MODULE_INIT_IGNORE_MODVERSIONS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MODULE_INIT_IGNORE_MODVERSIONS) || (defined(HAVE_DECL_MODULE_INIT_IGNORE_MODVERSIONS) && HAVE_DECL_MODULE_INIT_IGNORE_MODVERSIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MODULE_INIT_IGNORE_MODVERSIONS) == ((1 << 0)), "MODULE_INIT_IGNORE_MODVERSIONS != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MODULE_INIT_IGNORE_MODVERSIONS (1 << 0)
 #endif
-#if !(defined(MODULE_INIT_IGNORE_VERMAGIC) || (defined(HAVE_DECL_MODULE_INIT_IGNORE_VERMAGIC) && HAVE_DECL_MODULE_INIT_IGNORE_VERMAGIC))
+#if defined(MODULE_INIT_IGNORE_VERMAGIC) || (defined(HAVE_DECL_MODULE_INIT_IGNORE_VERMAGIC) && HAVE_DECL_MODULE_INIT_IGNORE_VERMAGIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MODULE_INIT_IGNORE_VERMAGIC) == ((1 << 1)), "MODULE_INIT_IGNORE_VERMAGIC != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MODULE_INIT_IGNORE_VERMAGIC (1 << 1)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat module_init_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat module_init_flags in mpers mode
+
+# else
 
 static
 const struct xlat module_init_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mount_flags.h b/xlat/mount_flags.h
index 98f1215..8c552a4 100644
--- a/xlat/mount_flags.h
+++ b/xlat/mount_flags.h
@@ -1,97 +1,226 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mount_flags.in; do not edit. */
-#if !(defined(MS_RDONLY) || (defined(HAVE_DECL_MS_RDONLY) && HAVE_DECL_MS_RDONLY))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MS_RDONLY) || (defined(HAVE_DECL_MS_RDONLY) && HAVE_DECL_MS_RDONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_RDONLY) == (1), "MS_RDONLY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_RDONLY 1
 #endif
-#if !(defined(MS_NOSUID) || (defined(HAVE_DECL_MS_NOSUID) && HAVE_DECL_MS_NOSUID))
+#if defined(MS_NOSUID) || (defined(HAVE_DECL_MS_NOSUID) && HAVE_DECL_MS_NOSUID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_NOSUID) == (2), "MS_NOSUID != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_NOSUID 2
 #endif
-#if !(defined(MS_NODEV) || (defined(HAVE_DECL_MS_NODEV) && HAVE_DECL_MS_NODEV))
+#if defined(MS_NODEV) || (defined(HAVE_DECL_MS_NODEV) && HAVE_DECL_MS_NODEV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_NODEV) == (4), "MS_NODEV != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_NODEV 4
 #endif
-#if !(defined(MS_NOEXEC) || (defined(HAVE_DECL_MS_NOEXEC) && HAVE_DECL_MS_NOEXEC))
+#if defined(MS_NOEXEC) || (defined(HAVE_DECL_MS_NOEXEC) && HAVE_DECL_MS_NOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_NOEXEC) == (8), "MS_NOEXEC != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_NOEXEC 8
 #endif
-#if !(defined(MS_SYNCHRONOUS) || (defined(HAVE_DECL_MS_SYNCHRONOUS) && HAVE_DECL_MS_SYNCHRONOUS))
+#if defined(MS_SYNCHRONOUS) || (defined(HAVE_DECL_MS_SYNCHRONOUS) && HAVE_DECL_MS_SYNCHRONOUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_SYNCHRONOUS) == (16), "MS_SYNCHRONOUS != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_SYNCHRONOUS 16
 #endif
-#if !(defined(MS_REMOUNT) || (defined(HAVE_DECL_MS_REMOUNT) && HAVE_DECL_MS_REMOUNT))
+#if defined(MS_REMOUNT) || (defined(HAVE_DECL_MS_REMOUNT) && HAVE_DECL_MS_REMOUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_REMOUNT) == (32), "MS_REMOUNT != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_REMOUNT 32
 #endif
-#if !(defined(MS_MANDLOCK) || (defined(HAVE_DECL_MS_MANDLOCK) && HAVE_DECL_MS_MANDLOCK))
+#if defined(MS_MANDLOCK) || (defined(HAVE_DECL_MS_MANDLOCK) && HAVE_DECL_MS_MANDLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_MANDLOCK) == (64), "MS_MANDLOCK != 64");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_MANDLOCK 64
 #endif
-#if !(defined(MS_DIRSYNC) || (defined(HAVE_DECL_MS_DIRSYNC) && HAVE_DECL_MS_DIRSYNC))
+#if defined(MS_DIRSYNC) || (defined(HAVE_DECL_MS_DIRSYNC) && HAVE_DECL_MS_DIRSYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_DIRSYNC) == (128), "MS_DIRSYNC != 128");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_DIRSYNC 128
 #endif
-#if !(defined(MS_NOATIME) || (defined(HAVE_DECL_MS_NOATIME) && HAVE_DECL_MS_NOATIME))
+#if defined(MS_NOATIME) || (defined(HAVE_DECL_MS_NOATIME) && HAVE_DECL_MS_NOATIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_NOATIME) == (1024), "MS_NOATIME != 1024");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_NOATIME 1024
 #endif
-#if !(defined(MS_NODIRATIME) || (defined(HAVE_DECL_MS_NODIRATIME) && HAVE_DECL_MS_NODIRATIME))
+#if defined(MS_NODIRATIME) || (defined(HAVE_DECL_MS_NODIRATIME) && HAVE_DECL_MS_NODIRATIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_NODIRATIME) == (2048), "MS_NODIRATIME != 2048");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_NODIRATIME 2048
 #endif
-#if !(defined(MS_BIND) || (defined(HAVE_DECL_MS_BIND) && HAVE_DECL_MS_BIND))
+#if defined(MS_BIND) || (defined(HAVE_DECL_MS_BIND) && HAVE_DECL_MS_BIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_BIND) == (4096), "MS_BIND != 4096");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_BIND 4096
 #endif
-#if !(defined(MS_MOVE) || (defined(HAVE_DECL_MS_MOVE) && HAVE_DECL_MS_MOVE))
+#if defined(MS_MOVE) || (defined(HAVE_DECL_MS_MOVE) && HAVE_DECL_MS_MOVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_MOVE) == (8192), "MS_MOVE != 8192");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_MOVE 8192
 #endif
-#if !(defined(MS_REC) || (defined(HAVE_DECL_MS_REC) && HAVE_DECL_MS_REC))
+#if defined(MS_REC) || (defined(HAVE_DECL_MS_REC) && HAVE_DECL_MS_REC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_REC) == (16384), "MS_REC != 16384");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_REC 16384
 #endif
-#if !(defined(MS_SILENT) || (defined(HAVE_DECL_MS_SILENT) && HAVE_DECL_MS_SILENT))
+#if defined(MS_SILENT) || (defined(HAVE_DECL_MS_SILENT) && HAVE_DECL_MS_SILENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_SILENT) == (32768), "MS_SILENT != 32768");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_SILENT 32768
 #endif
-#if !(defined(MS_POSIXACL) || (defined(HAVE_DECL_MS_POSIXACL) && HAVE_DECL_MS_POSIXACL))
+#if defined(MS_POSIXACL) || (defined(HAVE_DECL_MS_POSIXACL) && HAVE_DECL_MS_POSIXACL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_POSIXACL) == ((1<<16)), "MS_POSIXACL != (1<<16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_POSIXACL (1<<16)
 #endif
-#if !(defined(MS_UNBINDABLE) || (defined(HAVE_DECL_MS_UNBINDABLE) && HAVE_DECL_MS_UNBINDABLE))
+#if defined(MS_UNBINDABLE) || (defined(HAVE_DECL_MS_UNBINDABLE) && HAVE_DECL_MS_UNBINDABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_UNBINDABLE) == ((1<<17)), "MS_UNBINDABLE != (1<<17)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_UNBINDABLE (1<<17)
 #endif
-#if !(defined(MS_PRIVATE) || (defined(HAVE_DECL_MS_PRIVATE) && HAVE_DECL_MS_PRIVATE))
+#if defined(MS_PRIVATE) || (defined(HAVE_DECL_MS_PRIVATE) && HAVE_DECL_MS_PRIVATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_PRIVATE) == ((1<<18)), "MS_PRIVATE != (1<<18)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_PRIVATE (1<<18)
 #endif
-#if !(defined(MS_SLAVE) || (defined(HAVE_DECL_MS_SLAVE) && HAVE_DECL_MS_SLAVE))
+#if defined(MS_SLAVE) || (defined(HAVE_DECL_MS_SLAVE) && HAVE_DECL_MS_SLAVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_SLAVE) == ((1<<19)), "MS_SLAVE != (1<<19)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_SLAVE (1<<19)
 #endif
-#if !(defined(MS_SHARED) || (defined(HAVE_DECL_MS_SHARED) && HAVE_DECL_MS_SHARED))
+#if defined(MS_SHARED) || (defined(HAVE_DECL_MS_SHARED) && HAVE_DECL_MS_SHARED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_SHARED) == ((1<<20)), "MS_SHARED != (1<<20)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_SHARED (1<<20)
 #endif
-#if !(defined(MS_RELATIME) || (defined(HAVE_DECL_MS_RELATIME) && HAVE_DECL_MS_RELATIME))
+#if defined(MS_RELATIME) || (defined(HAVE_DECL_MS_RELATIME) && HAVE_DECL_MS_RELATIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_RELATIME) == ((1<<21)), "MS_RELATIME != (1<<21)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_RELATIME (1<<21)
 #endif
-#if !(defined(MS_KERNMOUNT) || (defined(HAVE_DECL_MS_KERNMOUNT) && HAVE_DECL_MS_KERNMOUNT))
+#if defined(MS_KERNMOUNT) || (defined(HAVE_DECL_MS_KERNMOUNT) && HAVE_DECL_MS_KERNMOUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_KERNMOUNT) == ((1<<22)), "MS_KERNMOUNT != (1<<22)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_KERNMOUNT (1<<22)
 #endif
-#if !(defined(MS_I_VERSION) || (defined(HAVE_DECL_MS_I_VERSION) && HAVE_DECL_MS_I_VERSION))
+#if defined(MS_I_VERSION) || (defined(HAVE_DECL_MS_I_VERSION) && HAVE_DECL_MS_I_VERSION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_I_VERSION) == ((1<<23)), "MS_I_VERSION != (1<<23)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_I_VERSION (1<<23)
 #endif
-#if !(defined(MS_STRICTATIME) || (defined(HAVE_DECL_MS_STRICTATIME) && HAVE_DECL_MS_STRICTATIME))
+#if defined(MS_STRICTATIME) || (defined(HAVE_DECL_MS_STRICTATIME) && HAVE_DECL_MS_STRICTATIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_STRICTATIME) == ((1<<24)), "MS_STRICTATIME != (1<<24)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_STRICTATIME (1<<24)
 #endif
-#if !(defined(MS_LAZYTIME) || (defined(HAVE_DECL_MS_LAZYTIME) && HAVE_DECL_MS_LAZYTIME))
+#if defined(MS_LAZYTIME) || (defined(HAVE_DECL_MS_LAZYTIME) && HAVE_DECL_MS_LAZYTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_LAZYTIME) == ((1<<25)), "MS_LAZYTIME != (1<<25)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_LAZYTIME (1<<25)
 #endif
-#if !(defined(MS_NOREMOTELOCK) || (defined(HAVE_DECL_MS_NOREMOTELOCK) && HAVE_DECL_MS_NOREMOTELOCK))
+#if defined(MS_SUBMOUNT) || (defined(HAVE_DECL_MS_SUBMOUNT) && HAVE_DECL_MS_SUBMOUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_SUBMOUNT) == ((1<<26)), "MS_SUBMOUNT != (1<<26)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MS_SUBMOUNT (1<<26)
+#endif
+#if defined(MS_NOREMOTELOCK) || (defined(HAVE_DECL_MS_NOREMOTELOCK) && HAVE_DECL_MS_NOREMOTELOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_NOREMOTELOCK) == ((1<<27)), "MS_NOREMOTELOCK != (1<<27)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_NOREMOTELOCK (1<<27)
 #endif
-#if !(defined(MS_NOSEC) || (defined(HAVE_DECL_MS_NOSEC) && HAVE_DECL_MS_NOSEC))
+#if defined(MS_NOSEC) || (defined(HAVE_DECL_MS_NOSEC) && HAVE_DECL_MS_NOSEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_NOSEC) == ((1<<28)), "MS_NOSEC != (1<<28)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_NOSEC (1<<28)
 #endif
-#if !(defined(MS_BORN) || (defined(HAVE_DECL_MS_BORN) && HAVE_DECL_MS_BORN))
+#if defined(MS_BORN) || (defined(HAVE_DECL_MS_BORN) && HAVE_DECL_MS_BORN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_BORN) == ((1<<29)), "MS_BORN != (1<<29)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_BORN (1<<29)
 #endif
-#if !(defined(MS_ACTIVE) || (defined(HAVE_DECL_MS_ACTIVE) && HAVE_DECL_MS_ACTIVE))
+#if defined(MS_ACTIVE) || (defined(HAVE_DECL_MS_ACTIVE) && HAVE_DECL_MS_ACTIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_ACTIVE) == ((1<<30)), "MS_ACTIVE != (1<<30)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_ACTIVE (1<<30)
 #endif
-#if !(defined(MS_NOUSER) || (defined(HAVE_DECL_MS_NOUSER) && HAVE_DECL_MS_NOUSER))
+#if defined(MS_NOUSER) || (defined(HAVE_DECL_MS_NOUSER) && HAVE_DECL_MS_NOUSER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MS_NOUSER) == ((1<<31)), "MS_NOUSER != (1<<31)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MS_NOUSER (1<<31)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat mount_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat mount_flags in mpers mode
+
+# else
 
 static
 const struct xlat mount_flags[] = {
@@ -119,6 +248,7 @@
  XLAT(MS_I_VERSION),
  XLAT(MS_STRICTATIME),
  XLAT(MS_LAZYTIME),
+ XLAT(MS_SUBMOUNT),
  XLAT(MS_NOREMOTELOCK),
  XLAT(MS_NOSEC),
  XLAT(MS_BORN),
@@ -127,4 +257,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mount_flags.in b/xlat/mount_flags.in
index bf903d2..e7f3ce1 100644
--- a/xlat/mount_flags.in
+++ b/xlat/mount_flags.in
@@ -22,6 +22,7 @@
 MS_I_VERSION	(1<<23)
 MS_STRICTATIME	(1<<24)
 MS_LAZYTIME	(1<<25)
+MS_SUBMOUNT     (1<<26)
 MS_NOREMOTELOCK	(1<<27)
 MS_NOSEC	(1<<28)
 MS_BORN		(1<<29)
diff --git a/xlat/move_pages_flags.h b/xlat/move_pages_flags.h
index 0844fda..150d10d 100644
--- a/xlat/move_pages_flags.h
+++ b/xlat/move_pages_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/move_pages_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat move_pages_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat move_pages_flags in mpers mode
+
+# else
 
 static
 const struct xlat move_pages_flags[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mq_attr_flags.h b/xlat/mq_attr_flags.h
index ed2d767..bde6678 100644
--- a/xlat/mq_attr_flags.h
+++ b/xlat/mq_attr_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mq_attr_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat mq_attr_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat mq_attr_flags[] = {
 #if defined(O_NONBLOCK) || (defined(HAVE_DECL_O_NONBLOCK) && HAVE_DECL_O_NONBLOCK)
   XLAT(O_NONBLOCK),
@@ -16,4 +22,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mremap_flags.h b/xlat/mremap_flags.h
index 803cdeb..ad86af7 100644
--- a/xlat/mremap_flags.h
+++ b/xlat/mremap_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mremap_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat mremap_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat mremap_flags in mpers mode
+
+# else
 
 static
 const struct xlat mremap_flags[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/msg_flags.h b/xlat/msg_flags.h
index 6518c9b..a169d9c 100644
--- a/xlat/msg_flags.h
+++ b/xlat/msg_flags.h
@@ -1,77 +1,223 @@
 /* Generated by ./xlat/gen.sh from ./xlat/msg_flags.in; do not edit. */
-#if !(defined(MSG_BATCH) || (defined(HAVE_DECL_MSG_BATCH) && HAVE_DECL_MSG_BATCH))
-# define MSG_BATCH 0x40000
-#endif
-#if !(defined(MSG_ZEROCOPY) || (defined(HAVE_DECL_MSG_ZEROCOPY) && HAVE_DECL_MSG_ZEROCOPY))
-# define MSG_ZEROCOPY 0x20000000
-#endif
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-const struct xlat msg_flags[] = {
 #if defined(MSG_OOB) || (defined(HAVE_DECL_MSG_OOB) && HAVE_DECL_MSG_OOB)
-  XLAT(MSG_OOB),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_OOB) == (0x1), "MSG_OOB != 0x1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_OOB 0x1
 #endif
 #if defined(MSG_PEEK) || (defined(HAVE_DECL_MSG_PEEK) && HAVE_DECL_MSG_PEEK)
-  XLAT(MSG_PEEK),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_PEEK) == (0x2), "MSG_PEEK != 0x2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_PEEK 0x2
 #endif
 #if defined(MSG_DONTROUTE) || (defined(HAVE_DECL_MSG_DONTROUTE) && HAVE_DECL_MSG_DONTROUTE)
-  XLAT(MSG_DONTROUTE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_DONTROUTE) == (0x4), "MSG_DONTROUTE != 0x4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_DONTROUTE 0x4
 #endif
 #if defined(MSG_CTRUNC) || (defined(HAVE_DECL_MSG_CTRUNC) && HAVE_DECL_MSG_CTRUNC)
-  XLAT(MSG_CTRUNC),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_CTRUNC) == (0x8), "MSG_CTRUNC != 0x8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_CTRUNC 0x8
 #endif
 #if defined(MSG_PROBE) || (defined(HAVE_DECL_MSG_PROBE) && HAVE_DECL_MSG_PROBE)
-  XLAT(MSG_PROBE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_PROBE) == (0x10), "MSG_PROBE != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_PROBE 0x10
 #endif
 #if defined(MSG_TRUNC) || (defined(HAVE_DECL_MSG_TRUNC) && HAVE_DECL_MSG_TRUNC)
-  XLAT(MSG_TRUNC),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_TRUNC) == (0x20), "MSG_TRUNC != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_TRUNC 0x20
 #endif
 #if defined(MSG_DONTWAIT) || (defined(HAVE_DECL_MSG_DONTWAIT) && HAVE_DECL_MSG_DONTWAIT)
-  XLAT(MSG_DONTWAIT),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_DONTWAIT) == (0x40), "MSG_DONTWAIT != 0x40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_DONTWAIT 0x40
 #endif
 #if defined(MSG_EOR) || (defined(HAVE_DECL_MSG_EOR) && HAVE_DECL_MSG_EOR)
-  XLAT(MSG_EOR),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_EOR) == (0x80), "MSG_EOR != 0x80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_EOR 0x80
 #endif
 #if defined(MSG_WAITALL) || (defined(HAVE_DECL_MSG_WAITALL) && HAVE_DECL_MSG_WAITALL)
-  XLAT(MSG_WAITALL),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_WAITALL) == (0x100), "MSG_WAITALL != 0x100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_WAITALL 0x100
 #endif
 #if defined(MSG_FIN) || (defined(HAVE_DECL_MSG_FIN) && HAVE_DECL_MSG_FIN)
-  XLAT(MSG_FIN),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_FIN) == (0x200), "MSG_FIN != 0x200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_FIN 0x200
 #endif
 #if defined(MSG_SYN) || (defined(HAVE_DECL_MSG_SYN) && HAVE_DECL_MSG_SYN)
-  XLAT(MSG_SYN),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_SYN) == (0x400), "MSG_SYN != 0x400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_SYN 0x400
 #endif
 #if defined(MSG_CONFIRM) || (defined(HAVE_DECL_MSG_CONFIRM) && HAVE_DECL_MSG_CONFIRM)
-  XLAT(MSG_CONFIRM),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_CONFIRM) == (0x800), "MSG_CONFIRM != 0x800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_CONFIRM 0x800
 #endif
 #if defined(MSG_RST) || (defined(HAVE_DECL_MSG_RST) && HAVE_DECL_MSG_RST)
-  XLAT(MSG_RST),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_RST) == (0x1000), "MSG_RST != 0x1000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_RST 0x1000
 #endif
 #if defined(MSG_ERRQUEUE) || (defined(HAVE_DECL_MSG_ERRQUEUE) && HAVE_DECL_MSG_ERRQUEUE)
-  XLAT(MSG_ERRQUEUE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_ERRQUEUE) == (0x2000), "MSG_ERRQUEUE != 0x2000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_ERRQUEUE 0x2000
 #endif
 #if defined(MSG_NOSIGNAL) || (defined(HAVE_DECL_MSG_NOSIGNAL) && HAVE_DECL_MSG_NOSIGNAL)
-  XLAT(MSG_NOSIGNAL),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_NOSIGNAL) == (0x4000), "MSG_NOSIGNAL != 0x4000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_NOSIGNAL 0x4000
 #endif
 #if defined(MSG_MORE) || (defined(HAVE_DECL_MSG_MORE) && HAVE_DECL_MSG_MORE)
-  XLAT(MSG_MORE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_MORE) == (0x8000), "MSG_MORE != 0x8000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_MORE 0x8000
 #endif
 #if defined(MSG_WAITFORONE) || (defined(HAVE_DECL_MSG_WAITFORONE) && HAVE_DECL_MSG_WAITFORONE)
-  XLAT(MSG_WAITFORONE),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_WAITFORONE) == (0x10000), "MSG_WAITFORONE != 0x10000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_WAITFORONE 0x10000
 #endif
- XLAT(MSG_BATCH),
- XLAT(MSG_ZEROCOPY),
-#if defined(MSG_EOF) || (defined(HAVE_DECL_MSG_EOF) && HAVE_DECL_MSG_EOF)
-  XLAT(MSG_EOF),
+#if defined(MSG_SENDPAGE_NOTLAST) || (defined(HAVE_DECL_MSG_SENDPAGE_NOTLAST) && HAVE_DECL_MSG_SENDPAGE_NOTLAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_SENDPAGE_NOTLAST) == (0x20000), "MSG_SENDPAGE_NOTLAST != 0x20000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_SENDPAGE_NOTLAST 0x20000
+#endif
+#if defined(MSG_BATCH) || (defined(HAVE_DECL_MSG_BATCH) && HAVE_DECL_MSG_BATCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_BATCH) == (0x40000), "MSG_BATCH != 0x40000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_BATCH 0x40000
+#endif
+#if defined(MSG_NO_SHARED_FRAGS) || (defined(HAVE_DECL_MSG_NO_SHARED_FRAGS) && HAVE_DECL_MSG_NO_SHARED_FRAGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_NO_SHARED_FRAGS) == (0x80000), "MSG_NO_SHARED_FRAGS != 0x80000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_NO_SHARED_FRAGS 0x80000
+#endif
+#if defined(MSG_ZEROCOPY) || (defined(HAVE_DECL_MSG_ZEROCOPY) && HAVE_DECL_MSG_ZEROCOPY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_ZEROCOPY) == (0x4000000), "MSG_ZEROCOPY != 0x4000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_ZEROCOPY 0x4000000
 #endif
 #if defined(MSG_FASTOPEN) || (defined(HAVE_DECL_MSG_FASTOPEN) && HAVE_DECL_MSG_FASTOPEN)
-  XLAT(MSG_FASTOPEN),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_FASTOPEN) == (0x20000000), "MSG_FASTOPEN != 0x20000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_FASTOPEN 0x20000000
 #endif
 #if defined(MSG_CMSG_CLOEXEC) || (defined(HAVE_DECL_MSG_CMSG_CLOEXEC) && HAVE_DECL_MSG_CMSG_CLOEXEC)
-  XLAT(MSG_CMSG_CLOEXEC),
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_CMSG_CLOEXEC) == (0x40000000), "MSG_CMSG_CLOEXEC != 0x40000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_CMSG_CLOEXEC 0x40000000
 #endif
+#ifndef STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
+# define STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
+# undef MSG_CMSG_COMPAT
+#endif
+#if defined(MSG_CMSG_COMPAT) || (defined(HAVE_DECL_MSG_CMSG_COMPAT) && HAVE_DECL_MSG_CMSG_COMPAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_CMSG_COMPAT) == (0x80000000), "MSG_CMSG_COMPAT != 0x80000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_CMSG_COMPAT 0x80000000
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
+
+const struct xlat msg_flags[] = {
+ XLAT(MSG_OOB),
+ XLAT(MSG_PEEK),
+ XLAT(MSG_DONTROUTE),
+
+ XLAT(MSG_CTRUNC),
+ XLAT(MSG_PROBE),
+ XLAT(MSG_TRUNC),
+ XLAT(MSG_DONTWAIT),
+ XLAT(MSG_EOR),
+ XLAT(MSG_WAITALL),
+ XLAT(MSG_FIN),
+ XLAT(MSG_SYN),
+ XLAT(MSG_CONFIRM),
+ XLAT(MSG_RST),
+ XLAT(MSG_ERRQUEUE),
+ XLAT(MSG_NOSIGNAL),
+ XLAT(MSG_MORE),
+ XLAT(MSG_WAITFORONE),
+ XLAT(MSG_SENDPAGE_NOTLAST),
+ XLAT(MSG_BATCH),
+ XLAT(MSG_NO_SHARED_FRAGS),
+ XLAT(MSG_ZEROCOPY),
+
+ XLAT(MSG_FASTOPEN),
+ XLAT(MSG_CMSG_CLOEXEC),
+#ifndef STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
+# define STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
+/*
+* In Linux, the value of MSG_CMSG_COMPAT depends on CONFIG_COMPAT,
+* and libc might want to replicate that behaviour.
+*/
+# undef MSG_CMSG_COMPAT
+#endif
+ XLAT(MSG_CMSG_COMPAT),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/msg_flags.in b/xlat/msg_flags.in
index 1fdd819..946b132 100644
--- a/xlat/msg_flags.in
+++ b/xlat/msg_flags.in
@@ -1,22 +1,34 @@
-MSG_OOB
-MSG_PEEK
-MSG_DONTROUTE
-MSG_CTRUNC
-MSG_PROBE
-MSG_TRUNC
-MSG_DONTWAIT
-MSG_EOR
-MSG_WAITALL
-MSG_FIN
-MSG_SYN
-MSG_CONFIRM
-MSG_RST
-MSG_ERRQUEUE
-MSG_NOSIGNAL
-MSG_MORE
-MSG_WAITFORONE
-MSG_BATCH	0x40000
-MSG_ZEROCOPY	0x20000000
-MSG_EOF
-MSG_FASTOPEN
-MSG_CMSG_CLOEXEC
+MSG_OOB			0x1
+MSG_PEEK		0x2
+MSG_DONTROUTE		0x4
+/* MSG_TRYHARD 0x4 - synonym for MSG_DONTROUTE for DECnet */
+MSG_CTRUNC		0x8
+MSG_PROBE		0x10
+MSG_TRUNC		0x20
+MSG_DONTWAIT		0x40
+MSG_EOR			0x80
+MSG_WAITALL		0x100
+MSG_FIN			0x200
+MSG_SYN			0x400
+MSG_CONFIRM		0x800
+MSG_RST			0x1000
+MSG_ERRQUEUE		0x2000
+MSG_NOSIGNAL		0x4000
+MSG_MORE		0x8000
+MSG_WAITFORONE		0x10000
+MSG_SENDPAGE_NOTLAST	0x20000 /* sendpage() internal */
+MSG_BATCH		0x40000
+MSG_NO_SHARED_FRAGS	0x80000 /* sendpage() internal */
+MSG_ZEROCOPY		0x4000000
+/* MSG_EOF MSG_FIN */
+MSG_FASTOPEN		0x20000000
+MSG_CMSG_CLOEXEC	0x40000000
+#ifndef STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
+# define STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
+/*
+ * In Linux, the value of MSG_CMSG_COMPAT depends on CONFIG_COMPAT,
+ * and libc might want to replicate that behaviour.
+ */
+# undef MSG_CMSG_COMPAT
+#endif
+MSG_CMSG_COMPAT		0x80000000
diff --git a/xlat/msgctl_flags.h b/xlat/msgctl_flags.h
index a78ee14..0ac131d 100644
--- a/xlat/msgctl_flags.h
+++ b/xlat/msgctl_flags.h
@@ -1,36 +1,81 @@
 /* Generated by ./xlat/gen.sh from ./xlat/msgctl_flags.in; do not edit. */
-#if !(defined(MSG_STAT) || (defined(HAVE_DECL_MSG_STAT) && HAVE_DECL_MSG_STAT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPC_RMID) || (defined(HAVE_DECL_IPC_RMID) && HAVE_DECL_IPC_RMID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_RMID) == (0), "IPC_RMID != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_RMID 0
+#endif
+#if defined(IPC_SET) || (defined(HAVE_DECL_IPC_SET) && HAVE_DECL_IPC_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_SET) == (1), "IPC_SET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_SET 1
+#endif
+#if defined(IPC_STAT) || (defined(HAVE_DECL_IPC_STAT) && HAVE_DECL_IPC_STAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_STAT) == (2), "IPC_STAT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_STAT 2
+#endif
+#if defined(IPC_INFO) || (defined(HAVE_DECL_IPC_INFO) && HAVE_DECL_IPC_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_INFO) == (3), "IPC_INFO != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_INFO 3
+#endif
+#if defined(MSG_STAT) || (defined(HAVE_DECL_MSG_STAT) && HAVE_DECL_MSG_STAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_STAT) == (11), "MSG_STAT != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MSG_STAT 11
 #endif
-#if !(defined(MSG_INFO) || (defined(HAVE_DECL_MSG_INFO) && HAVE_DECL_MSG_INFO))
+#if defined(MSG_INFO) || (defined(HAVE_DECL_MSG_INFO) && HAVE_DECL_MSG_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_INFO) == (12), "MSG_INFO != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MSG_INFO 12
 #endif
+#if defined(MSG_STAT_ANY) || (defined(HAVE_DECL_MSG_STAT_ANY) && HAVE_DECL_MSG_STAT_ANY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MSG_STAT_ANY) == (13), "MSG_STAT_ANY != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MSG_STAT_ANY 13
+#endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat msgctl_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat msgctl_flags[] = {
-#if defined(IPC_RMID) || (defined(HAVE_DECL_IPC_RMID) && HAVE_DECL_IPC_RMID)
-  XLAT(IPC_RMID),
-#endif
-#if defined(IPC_SET) || (defined(HAVE_DECL_IPC_SET) && HAVE_DECL_IPC_SET)
-  XLAT(IPC_SET),
-#endif
-#if defined(IPC_STAT) || (defined(HAVE_DECL_IPC_STAT) && HAVE_DECL_IPC_STAT)
-  XLAT(IPC_STAT),
-#endif
-#if defined(IPC_INFO) || (defined(HAVE_DECL_IPC_INFO) && HAVE_DECL_IPC_INFO)
-  XLAT(IPC_INFO),
-#endif
+
+ XLAT(IPC_RMID),
+ XLAT(IPC_SET),
+ XLAT(IPC_STAT),
+ XLAT(IPC_INFO),
  XLAT(MSG_STAT),
  XLAT(MSG_INFO),
+ XLAT(MSG_STAT_ANY),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/msgctl_flags.in b/xlat/msgctl_flags.in
index 4b54adf..a81a819 100644
--- a/xlat/msgctl_flags.in
+++ b/xlat/msgctl_flags.in
@@ -1,6 +1,8 @@
-IPC_RMID
-IPC_SET
-IPC_STAT
-IPC_INFO
+/* sort -k2,2g */
+IPC_RMID 0
+IPC_SET 1
+IPC_STAT 2
+IPC_INFO 3
 MSG_STAT 11
 MSG_INFO 12
+MSG_STAT_ANY 13
diff --git a/xlat/mtd_file_mode_options.h b/xlat/mtd_file_mode_options.h
index 943919f..0cbeeed 100644
--- a/xlat/mtd_file_mode_options.h
+++ b/xlat/mtd_file_mode_options.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mtd_file_mode_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat mtd_file_mode_options[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat mtd_file_mode_options[] = {
  XLAT(MTD_FILE_MODE_NORMAL),
  XLAT(MTD_FILE_MODE_OTP_FACTORY),
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mtd_flags_options.h b/xlat/mtd_flags_options.h
index 8712561..91d168f 100644
--- a/xlat/mtd_flags_options.h
+++ b/xlat/mtd_flags_options.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mtd_flags_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat mtd_flags_options[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat mtd_flags_options[] = {
 #if defined(MTD_WRITEABLE) || (defined(HAVE_DECL_MTD_WRITEABLE) && HAVE_DECL_MTD_WRITEABLE)
   XLAT(MTD_WRITEABLE),
@@ -25,4 +31,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mtd_mode_options.h b/xlat/mtd_mode_options.h
index b7e8b4a..89a238f 100644
--- a/xlat/mtd_mode_options.h
+++ b/xlat/mtd_mode_options.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mtd_mode_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat mtd_mode_options[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat mtd_mode_options[] = {
  XLAT(MTD_OPS_PLACE_OOB),
  XLAT(MTD_OPS_AUTO_OOB),
@@ -16,4 +22,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mtd_nandecc_options.h b/xlat/mtd_nandecc_options.h
index 21b0166..08a37f5 100644
--- a/xlat/mtd_nandecc_options.h
+++ b/xlat/mtd_nandecc_options.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mtd_nandecc_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat mtd_nandecc_options[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat mtd_nandecc_options[] = {
 #if defined(MTD_NANDECC_OFF) || (defined(HAVE_DECL_MTD_NANDECC_OFF) && HAVE_DECL_MTD_NANDECC_OFF)
   XLAT(MTD_NANDECC_OFF),
@@ -28,4 +34,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mtd_otp_options.h b/xlat/mtd_otp_options.h
index 2ee7f49..071fc5c 100644
--- a/xlat/mtd_otp_options.h
+++ b/xlat/mtd_otp_options.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mtd_otp_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat mtd_otp_options[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat mtd_otp_options[] = {
 #if defined(MTD_OTP_OFF) || (defined(HAVE_DECL_MTD_OTP_OFF) && HAVE_DECL_MTD_OTP_OFF)
   XLAT(MTD_OTP_OFF),
@@ -22,4 +28,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/mtd_type_options.h b/xlat/mtd_type_options.h
index 46829e8..c6e0ecf 100644
--- a/xlat/mtd_type_options.h
+++ b/xlat/mtd_type_options.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/mtd_type_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat mtd_type_options[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat mtd_type_options[] = {
 #if defined(MTD_ABSENT) || (defined(HAVE_DECL_MTD_ABSENT) && HAVE_DECL_MTD_ABSENT)
   XLAT(MTD_ABSENT),
@@ -37,4 +43,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/multicast_router_types.h b/xlat/multicast_router_types.h
index 8c68b2f..e180205 100644
--- a/xlat/multicast_router_types.h
+++ b/xlat/multicast_router_types.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/multicast_router_types.in; do not edit. */
-#if !(defined(MDB_RTR_TYPE_DISABLED) || (defined(HAVE_DECL_MDB_RTR_TYPE_DISABLED) && HAVE_DECL_MDB_RTR_TYPE_DISABLED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MDB_RTR_TYPE_DISABLED) || (defined(HAVE_DECL_MDB_RTR_TYPE_DISABLED) && HAVE_DECL_MDB_RTR_TYPE_DISABLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDB_RTR_TYPE_DISABLED) == (0), "MDB_RTR_TYPE_DISABLED != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDB_RTR_TYPE_DISABLED 0
 #endif
-#if !(defined(MDB_RTR_TYPE_TEMP_QUERY) || (defined(HAVE_DECL_MDB_RTR_TYPE_TEMP_QUERY) && HAVE_DECL_MDB_RTR_TYPE_TEMP_QUERY))
+#if defined(MDB_RTR_TYPE_TEMP_QUERY) || (defined(HAVE_DECL_MDB_RTR_TYPE_TEMP_QUERY) && HAVE_DECL_MDB_RTR_TYPE_TEMP_QUERY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDB_RTR_TYPE_TEMP_QUERY) == (1), "MDB_RTR_TYPE_TEMP_QUERY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDB_RTR_TYPE_TEMP_QUERY 1
 #endif
-#if !(defined(MDB_RTR_TYPE_PERM) || (defined(HAVE_DECL_MDB_RTR_TYPE_PERM) && HAVE_DECL_MDB_RTR_TYPE_PERM))
+#if defined(MDB_RTR_TYPE_PERM) || (defined(HAVE_DECL_MDB_RTR_TYPE_PERM) && HAVE_DECL_MDB_RTR_TYPE_PERM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDB_RTR_TYPE_PERM) == (2), "MDB_RTR_TYPE_PERM != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDB_RTR_TYPE_PERM 2
 #endif
-#if !(defined(MDB_RTR_TYPE_TEMP) || (defined(HAVE_DECL_MDB_RTR_TYPE_TEMP) && HAVE_DECL_MDB_RTR_TYPE_TEMP))
+#if defined(MDB_RTR_TYPE_TEMP) || (defined(HAVE_DECL_MDB_RTR_TYPE_TEMP) && HAVE_DECL_MDB_RTR_TYPE_TEMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDB_RTR_TYPE_TEMP) == (3), "MDB_RTR_TYPE_TEMP != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDB_RTR_TYPE_TEMP 3
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat multicast_router_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat multicast_router_types in mpers mode
+
+# else
 
 static
 const struct xlat multicast_router_types[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/name_to_handle_at_flags.h b/xlat/name_to_handle_at_flags.h
index 512889d..87e63ae 100644
--- a/xlat/name_to_handle_at_flags.h
+++ b/xlat/name_to_handle_at_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/name_to_handle_at_flags.in; do not edit. */
-#if !(defined(AT_SYMLINK_FOLLOW) || (defined(HAVE_DECL_AT_SYMLINK_FOLLOW) && HAVE_DECL_AT_SYMLINK_FOLLOW))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(AT_SYMLINK_FOLLOW) || (defined(HAVE_DECL_AT_SYMLINK_FOLLOW) && HAVE_DECL_AT_SYMLINK_FOLLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_SYMLINK_FOLLOW) == (0x400), "AT_SYMLINK_FOLLOW != 0x400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_SYMLINK_FOLLOW 0x400
 #endif
-#if !(defined(AT_EMPTY_PATH) || (defined(HAVE_DECL_AT_EMPTY_PATH) && HAVE_DECL_AT_EMPTY_PATH))
+#if defined(AT_EMPTY_PATH) || (defined(HAVE_DECL_AT_EMPTY_PATH) && HAVE_DECL_AT_EMPTY_PATH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AT_EMPTY_PATH) == (0x1000), "AT_EMPTY_PATH != 0x1000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AT_EMPTY_PATH 0x1000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat name_to_handle_at_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat name_to_handle_at_flags in mpers mode
+
+# else
 
 static
 const struct xlat name_to_handle_at_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/neighbor_cache_entry_flags.h b/xlat/neighbor_cache_entry_flags.h
index 3bf2652..491db92 100644
--- a/xlat/neighbor_cache_entry_flags.h
+++ b/xlat/neighbor_cache_entry_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/neighbor_cache_entry_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat neighbor_cache_entry_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat neighbor_cache_entry_flags in mpers mode
+
+# else
 
 static
 const struct xlat neighbor_cache_entry_flags[] = {
@@ -29,4 +35,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/neighbor_cache_entry_states.h b/xlat/neighbor_cache_entry_states.h
index 40454eb..d111697 100644
--- a/xlat/neighbor_cache_entry_states.h
+++ b/xlat/neighbor_cache_entry_states.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/neighbor_cache_entry_states.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat neighbor_cache_entry_states in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat neighbor_cache_entry_states in mpers mode
+
+# else
 
 static
 const struct xlat neighbor_cache_entry_states[] = {
@@ -38,4 +44,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netfilter_versions.h b/xlat/netfilter_versions.h
index 2055c5b..9ccfd5a 100644
--- a/xlat/netfilter_versions.h
+++ b/xlat/netfilter_versions.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netfilter_versions.in; do not edit. */
-#if !(defined(NFNETLINK_V0) || (defined(HAVE_DECL_NFNETLINK_V0) && HAVE_DECL_NFNETLINK_V0))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFNETLINK_V0) || (defined(HAVE_DECL_NFNETLINK_V0) && HAVE_DECL_NFNETLINK_V0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNETLINK_V0) == (0), "NFNETLINK_V0 != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNETLINK_V0 0
 #endif
-#if !(defined(NFNETLINK_V1) || (defined(HAVE_DECL_NFNETLINK_V1) && HAVE_DECL_NFNETLINK_V1))
+#if defined(NFNETLINK_V1) || (defined(HAVE_DECL_NFNETLINK_V1) && HAVE_DECL_NFNETLINK_V1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNETLINK_V1) == (1), "NFNETLINK_V1 != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNETLINK_V1 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat netfilter_versions in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat netfilter_versions in mpers mode
+
+# else
 
 static
 const struct xlat netfilter_versions[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_ack_flags.h b/xlat/netlink_ack_flags.h
index bb8c9d8..dbe197d 100644
--- a/xlat/netlink_ack_flags.h
+++ b/xlat/netlink_ack_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_ack_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat netlink_ack_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat netlink_ack_flags in mpers mode
+
+# else
 
 static
 const struct xlat netlink_ack_flags[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_delete_flags.h b/xlat/netlink_delete_flags.h
index a40c7df..4fe0db5 100644
--- a/xlat/netlink_delete_flags.h
+++ b/xlat/netlink_delete_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_delete_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat netlink_delete_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat netlink_delete_flags in mpers mode
+
+# else
 
 static
 const struct xlat netlink_delete_flags[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_diag_attrs.h b/xlat/netlink_diag_attrs.h
index 5dcc736..fd8cd4f 100644
--- a/xlat/netlink_diag_attrs.h
+++ b/xlat/netlink_diag_attrs.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_diag_attrs.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat netlink_diag_attrs in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat netlink_diag_attrs in mpers mode
+
+# else
 
 static
 const struct xlat netlink_diag_attrs[] = {
@@ -16,4 +22,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_diag_show.h b/xlat/netlink_diag_show.h
index 7d6f9be..e7afb75 100644
--- a/xlat/netlink_diag_show.h
+++ b/xlat/netlink_diag_show.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_diag_show.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat netlink_diag_show in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat netlink_diag_show in mpers mode
+
+# else
 
 static
 const struct xlat netlink_diag_show[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_flags.h b/xlat/netlink_flags.h
index ca1f3a3..217c9df 100644
--- a/xlat/netlink_flags.h
+++ b/xlat/netlink_flags.h
@@ -1,28 +1,58 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_flags.in; do not edit. */
-#if !(defined(NLM_F_REQUEST) || (defined(HAVE_DECL_NLM_F_REQUEST) && HAVE_DECL_NLM_F_REQUEST))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NLM_F_REQUEST) || (defined(HAVE_DECL_NLM_F_REQUEST) && HAVE_DECL_NLM_F_REQUEST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLM_F_REQUEST) == (0x1), "NLM_F_REQUEST != 0x1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLM_F_REQUEST 0x1
 #endif
-#if !(defined(NLM_F_MULTI) || (defined(HAVE_DECL_NLM_F_MULTI) && HAVE_DECL_NLM_F_MULTI))
+#if defined(NLM_F_MULTI) || (defined(HAVE_DECL_NLM_F_MULTI) && HAVE_DECL_NLM_F_MULTI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLM_F_MULTI) == (0x2), "NLM_F_MULTI != 0x2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLM_F_MULTI 0x2
 #endif
-#if !(defined(NLM_F_ACK) || (defined(HAVE_DECL_NLM_F_ACK) && HAVE_DECL_NLM_F_ACK))
+#if defined(NLM_F_ACK) || (defined(HAVE_DECL_NLM_F_ACK) && HAVE_DECL_NLM_F_ACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLM_F_ACK) == (0x4), "NLM_F_ACK != 0x4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLM_F_ACK 0x4
 #endif
-#if !(defined(NLM_F_ECHO) || (defined(HAVE_DECL_NLM_F_ECHO) && HAVE_DECL_NLM_F_ECHO))
+#if defined(NLM_F_ECHO) || (defined(HAVE_DECL_NLM_F_ECHO) && HAVE_DECL_NLM_F_ECHO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLM_F_ECHO) == (0x8), "NLM_F_ECHO != 0x8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLM_F_ECHO 0x8
 #endif
-#if !(defined(NLM_F_DUMP_INTR) || (defined(HAVE_DECL_NLM_F_DUMP_INTR) && HAVE_DECL_NLM_F_DUMP_INTR))
+#if defined(NLM_F_DUMP_INTR) || (defined(HAVE_DECL_NLM_F_DUMP_INTR) && HAVE_DECL_NLM_F_DUMP_INTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLM_F_DUMP_INTR) == (0x10), "NLM_F_DUMP_INTR != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLM_F_DUMP_INTR 0x10
 #endif
-#if !(defined(NLM_F_DUMP_FILTERED) || (defined(HAVE_DECL_NLM_F_DUMP_FILTERED) && HAVE_DECL_NLM_F_DUMP_FILTERED))
+#if defined(NLM_F_DUMP_FILTERED) || (defined(HAVE_DECL_NLM_F_DUMP_FILTERED) && HAVE_DECL_NLM_F_DUMP_FILTERED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLM_F_DUMP_FILTERED) == (0x20), "NLM_F_DUMP_FILTERED != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLM_F_DUMP_FILTERED 0x20
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat netlink_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat netlink_flags in mpers mode
+
+# else
 
 static
 const struct xlat netlink_flags[] = {
@@ -35,4 +65,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_get_flags.h b/xlat/netlink_get_flags.h
index 3a4631c..4855c78 100644
--- a/xlat/netlink_get_flags.h
+++ b/xlat/netlink_get_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_get_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat netlink_get_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat netlink_get_flags in mpers mode
+
+# else
 
 static
 const struct xlat netlink_get_flags[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_new_flags.h b/xlat/netlink_new_flags.h
index 61af6d5..372432c 100644
--- a/xlat/netlink_new_flags.h
+++ b/xlat/netlink_new_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_new_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat netlink_new_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat netlink_new_flags in mpers mode
+
+# else
 
 static
 const struct xlat netlink_new_flags[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_protocols.h b/xlat/netlink_protocols.h
index fb86233..36845dc 100644
--- a/xlat/netlink_protocols.h
+++ b/xlat/netlink_protocols.h
@@ -1,69 +1,166 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_protocols.in; do not edit. */
-#if !(defined(NETLINK_ROUTE) || (defined(HAVE_DECL_NETLINK_ROUTE) && HAVE_DECL_NETLINK_ROUTE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NETLINK_ROUTE) || (defined(HAVE_DECL_NETLINK_ROUTE) && HAVE_DECL_NETLINK_ROUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_ROUTE) == (0), "NETLINK_ROUTE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_ROUTE 0
 #endif
-#if !(defined(NETLINK_UNUSED) || (defined(HAVE_DECL_NETLINK_UNUSED) && HAVE_DECL_NETLINK_UNUSED))
+#if defined(NETLINK_UNUSED) || (defined(HAVE_DECL_NETLINK_UNUSED) && HAVE_DECL_NETLINK_UNUSED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_UNUSED) == (1), "NETLINK_UNUSED != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_UNUSED 1
 #endif
-#if !(defined(NETLINK_USERSOCK) || (defined(HAVE_DECL_NETLINK_USERSOCK) && HAVE_DECL_NETLINK_USERSOCK))
+#if defined(NETLINK_USERSOCK) || (defined(HAVE_DECL_NETLINK_USERSOCK) && HAVE_DECL_NETLINK_USERSOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_USERSOCK) == (2), "NETLINK_USERSOCK != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_USERSOCK 2
 #endif
-#if !(defined(NETLINK_FIREWALL) || (defined(HAVE_DECL_NETLINK_FIREWALL) && HAVE_DECL_NETLINK_FIREWALL))
+#if defined(NETLINK_FIREWALL) || (defined(HAVE_DECL_NETLINK_FIREWALL) && HAVE_DECL_NETLINK_FIREWALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_FIREWALL) == (3), "NETLINK_FIREWALL != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_FIREWALL 3
 #endif
-#if !(defined(NETLINK_SOCK_DIAG) || (defined(HAVE_DECL_NETLINK_SOCK_DIAG) && HAVE_DECL_NETLINK_SOCK_DIAG))
+#if defined(NETLINK_SOCK_DIAG) || (defined(HAVE_DECL_NETLINK_SOCK_DIAG) && HAVE_DECL_NETLINK_SOCK_DIAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_SOCK_DIAG) == (4), "NETLINK_SOCK_DIAG != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_SOCK_DIAG 4
 #endif
-#if !(defined(NETLINK_NFLOG) || (defined(HAVE_DECL_NETLINK_NFLOG) && HAVE_DECL_NETLINK_NFLOG))
+#if defined(NETLINK_NFLOG) || (defined(HAVE_DECL_NETLINK_NFLOG) && HAVE_DECL_NETLINK_NFLOG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_NFLOG) == (5), "NETLINK_NFLOG != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_NFLOG 5
 #endif
-#if !(defined(NETLINK_XFRM) || (defined(HAVE_DECL_NETLINK_XFRM) && HAVE_DECL_NETLINK_XFRM))
+#if defined(NETLINK_XFRM) || (defined(HAVE_DECL_NETLINK_XFRM) && HAVE_DECL_NETLINK_XFRM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_XFRM) == (6), "NETLINK_XFRM != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_XFRM 6
 #endif
-#if !(defined(NETLINK_SELINUX) || (defined(HAVE_DECL_NETLINK_SELINUX) && HAVE_DECL_NETLINK_SELINUX))
+#if defined(NETLINK_SELINUX) || (defined(HAVE_DECL_NETLINK_SELINUX) && HAVE_DECL_NETLINK_SELINUX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_SELINUX) == (7), "NETLINK_SELINUX != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_SELINUX 7
 #endif
-#if !(defined(NETLINK_ISCSI) || (defined(HAVE_DECL_NETLINK_ISCSI) && HAVE_DECL_NETLINK_ISCSI))
+#if defined(NETLINK_ISCSI) || (defined(HAVE_DECL_NETLINK_ISCSI) && HAVE_DECL_NETLINK_ISCSI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_ISCSI) == (8), "NETLINK_ISCSI != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_ISCSI 8
 #endif
-#if !(defined(NETLINK_AUDIT) || (defined(HAVE_DECL_NETLINK_AUDIT) && HAVE_DECL_NETLINK_AUDIT))
+#if defined(NETLINK_AUDIT) || (defined(HAVE_DECL_NETLINK_AUDIT) && HAVE_DECL_NETLINK_AUDIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_AUDIT) == (9), "NETLINK_AUDIT != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_AUDIT 9
 #endif
-#if !(defined(NETLINK_FIB_LOOKUP) || (defined(HAVE_DECL_NETLINK_FIB_LOOKUP) && HAVE_DECL_NETLINK_FIB_LOOKUP))
+#if defined(NETLINK_FIB_LOOKUP) || (defined(HAVE_DECL_NETLINK_FIB_LOOKUP) && HAVE_DECL_NETLINK_FIB_LOOKUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_FIB_LOOKUP) == (10), "NETLINK_FIB_LOOKUP != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_FIB_LOOKUP 10
 #endif
-#if !(defined(NETLINK_CONNECTOR) || (defined(HAVE_DECL_NETLINK_CONNECTOR) && HAVE_DECL_NETLINK_CONNECTOR))
+#if defined(NETLINK_CONNECTOR) || (defined(HAVE_DECL_NETLINK_CONNECTOR) && HAVE_DECL_NETLINK_CONNECTOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_CONNECTOR) == (11), "NETLINK_CONNECTOR != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_CONNECTOR 11
 #endif
-#if !(defined(NETLINK_NETFILTER) || (defined(HAVE_DECL_NETLINK_NETFILTER) && HAVE_DECL_NETLINK_NETFILTER))
+#if defined(NETLINK_NETFILTER) || (defined(HAVE_DECL_NETLINK_NETFILTER) && HAVE_DECL_NETLINK_NETFILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_NETFILTER) == (12), "NETLINK_NETFILTER != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_NETFILTER 12
 #endif
-#if !(defined(NETLINK_IP6_FW) || (defined(HAVE_DECL_NETLINK_IP6_FW) && HAVE_DECL_NETLINK_IP6_FW))
+#if defined(NETLINK_IP6_FW) || (defined(HAVE_DECL_NETLINK_IP6_FW) && HAVE_DECL_NETLINK_IP6_FW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_IP6_FW) == (13), "NETLINK_IP6_FW != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_IP6_FW 13
 #endif
-#if !(defined(NETLINK_DNRTMSG) || (defined(HAVE_DECL_NETLINK_DNRTMSG) && HAVE_DECL_NETLINK_DNRTMSG))
+#if defined(NETLINK_DNRTMSG) || (defined(HAVE_DECL_NETLINK_DNRTMSG) && HAVE_DECL_NETLINK_DNRTMSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_DNRTMSG) == (14), "NETLINK_DNRTMSG != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_DNRTMSG 14
 #endif
-#if !(defined(NETLINK_KOBJECT_UEVENT) || (defined(HAVE_DECL_NETLINK_KOBJECT_UEVENT) && HAVE_DECL_NETLINK_KOBJECT_UEVENT))
+#if defined(NETLINK_KOBJECT_UEVENT) || (defined(HAVE_DECL_NETLINK_KOBJECT_UEVENT) && HAVE_DECL_NETLINK_KOBJECT_UEVENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_KOBJECT_UEVENT) == (15), "NETLINK_KOBJECT_UEVENT != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_KOBJECT_UEVENT 15
 #endif
-#if !(defined(NETLINK_GENERIC) || (defined(HAVE_DECL_NETLINK_GENERIC) && HAVE_DECL_NETLINK_GENERIC))
+#if defined(NETLINK_GENERIC) || (defined(HAVE_DECL_NETLINK_GENERIC) && HAVE_DECL_NETLINK_GENERIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_GENERIC) == (16), "NETLINK_GENERIC != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_GENERIC 16
 #endif
-#if !(defined(NETLINK_SCSITRANSPORT) || (defined(HAVE_DECL_NETLINK_SCSITRANSPORT) && HAVE_DECL_NETLINK_SCSITRANSPORT))
+#if defined(NETLINK_SCSITRANSPORT) || (defined(HAVE_DECL_NETLINK_SCSITRANSPORT) && HAVE_DECL_NETLINK_SCSITRANSPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_SCSITRANSPORT) == (18), "NETLINK_SCSITRANSPORT != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_SCSITRANSPORT 18
 #endif
-#if !(defined(NETLINK_ECRYPTFS) || (defined(HAVE_DECL_NETLINK_ECRYPTFS) && HAVE_DECL_NETLINK_ECRYPTFS))
+#if defined(NETLINK_ECRYPTFS) || (defined(HAVE_DECL_NETLINK_ECRYPTFS) && HAVE_DECL_NETLINK_ECRYPTFS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_ECRYPTFS) == (19), "NETLINK_ECRYPTFS != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_ECRYPTFS 19
 #endif
-#if !(defined(NETLINK_RDMA) || (defined(HAVE_DECL_NETLINK_RDMA) && HAVE_DECL_NETLINK_RDMA))
+#if defined(NETLINK_RDMA) || (defined(HAVE_DECL_NETLINK_RDMA) && HAVE_DECL_NETLINK_RDMA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_RDMA) == (20), "NETLINK_RDMA != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_RDMA 20
 #endif
-#if !(defined(NETLINK_CRYPTO) || (defined(HAVE_DECL_NETLINK_CRYPTO) && HAVE_DECL_NETLINK_CRYPTO))
+#if defined(NETLINK_CRYPTO) || (defined(HAVE_DECL_NETLINK_CRYPTO) && HAVE_DECL_NETLINK_CRYPTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_CRYPTO) == (21), "NETLINK_CRYPTO != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_CRYPTO 21
 #endif
+#if defined(NETLINK_SMC) || (defined(HAVE_DECL_NETLINK_SMC) && HAVE_DECL_NETLINK_SMC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_SMC) == (22), "NETLINK_SMC != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_SMC 22
+#endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat netlink_protocols[] = {
  XLAT(NETLINK_ROUTE),
@@ -87,7 +184,10 @@
  XLAT(NETLINK_ECRYPTFS),
  XLAT(NETLINK_RDMA),
  XLAT(NETLINK_CRYPTO),
+ XLAT(NETLINK_SMC),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_protocols.in b/xlat/netlink_protocols.in
index 45116cf..a76ebd7 100644
--- a/xlat/netlink_protocols.in
+++ b/xlat/netlink_protocols.in
@@ -19,3 +19,4 @@
 NETLINK_ECRYPTFS	19
 NETLINK_RDMA		20
 NETLINK_CRYPTO		21
+NETLINK_SMC		22
diff --git a/xlat/netlink_sk_meminfo_indices.h b/xlat/netlink_sk_meminfo_indices.h
new file mode 100644
index 0000000..9d36e15
--- /dev/null
+++ b/xlat/netlink_sk_meminfo_indices.h
@@ -0,0 +1,94 @@
+/* Generated by ./xlat/gen.sh from ./xlat/netlink_sk_meminfo_indices.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SK_MEMINFO_RMEM_ALLOC) || (defined(HAVE_DECL_SK_MEMINFO_RMEM_ALLOC) && HAVE_DECL_SK_MEMINFO_RMEM_ALLOC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SK_MEMINFO_RMEM_ALLOC) == (0), "SK_MEMINFO_RMEM_ALLOC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SK_MEMINFO_RMEM_ALLOC 0
+#endif
+#if defined(SK_MEMINFO_RCVBUF) || (defined(HAVE_DECL_SK_MEMINFO_RCVBUF) && HAVE_DECL_SK_MEMINFO_RCVBUF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SK_MEMINFO_RCVBUF) == (1), "SK_MEMINFO_RCVBUF != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SK_MEMINFO_RCVBUF 1
+#endif
+#if defined(SK_MEMINFO_WMEM_ALLOC) || (defined(HAVE_DECL_SK_MEMINFO_WMEM_ALLOC) && HAVE_DECL_SK_MEMINFO_WMEM_ALLOC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SK_MEMINFO_WMEM_ALLOC) == (2), "SK_MEMINFO_WMEM_ALLOC != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SK_MEMINFO_WMEM_ALLOC 2
+#endif
+#if defined(SK_MEMINFO_SNDBUF) || (defined(HAVE_DECL_SK_MEMINFO_SNDBUF) && HAVE_DECL_SK_MEMINFO_SNDBUF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SK_MEMINFO_SNDBUF) == (3), "SK_MEMINFO_SNDBUF != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SK_MEMINFO_SNDBUF 3
+#endif
+#if defined(SK_MEMINFO_FWD_ALLOC) || (defined(HAVE_DECL_SK_MEMINFO_FWD_ALLOC) && HAVE_DECL_SK_MEMINFO_FWD_ALLOC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SK_MEMINFO_FWD_ALLOC) == (4), "SK_MEMINFO_FWD_ALLOC != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SK_MEMINFO_FWD_ALLOC 4
+#endif
+#if defined(SK_MEMINFO_WMEM_QUEUED) || (defined(HAVE_DECL_SK_MEMINFO_WMEM_QUEUED) && HAVE_DECL_SK_MEMINFO_WMEM_QUEUED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SK_MEMINFO_WMEM_QUEUED) == (5), "SK_MEMINFO_WMEM_QUEUED != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SK_MEMINFO_WMEM_QUEUED 5
+#endif
+#if defined(SK_MEMINFO_OPTMEM) || (defined(HAVE_DECL_SK_MEMINFO_OPTMEM) && HAVE_DECL_SK_MEMINFO_OPTMEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SK_MEMINFO_OPTMEM) == (6), "SK_MEMINFO_OPTMEM != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SK_MEMINFO_OPTMEM 6
+#endif
+#if defined(SK_MEMINFO_BACKLOG) || (defined(HAVE_DECL_SK_MEMINFO_BACKLOG) && HAVE_DECL_SK_MEMINFO_BACKLOG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SK_MEMINFO_BACKLOG) == (7), "SK_MEMINFO_BACKLOG != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SK_MEMINFO_BACKLOG 7
+#endif
+#if defined(SK_MEMINFO_DROPS) || (defined(HAVE_DECL_SK_MEMINFO_DROPS) && HAVE_DECL_SK_MEMINFO_DROPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SK_MEMINFO_DROPS) == (8), "SK_MEMINFO_DROPS != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SK_MEMINFO_DROPS 8
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat netlink_sk_meminfo_indices in mpers mode
+
+# else
+
+static
+const struct xlat netlink_sk_meminfo_indices[] = {
+ [SK_MEMINFO_RMEM_ALLOC] = XLAT(SK_MEMINFO_RMEM_ALLOC),
+ [SK_MEMINFO_RCVBUF] = XLAT(SK_MEMINFO_RCVBUF),
+ [SK_MEMINFO_WMEM_ALLOC] = XLAT(SK_MEMINFO_WMEM_ALLOC),
+ [SK_MEMINFO_SNDBUF] = XLAT(SK_MEMINFO_SNDBUF),
+ [SK_MEMINFO_FWD_ALLOC] = XLAT(SK_MEMINFO_FWD_ALLOC),
+ [SK_MEMINFO_WMEM_QUEUED] = XLAT(SK_MEMINFO_WMEM_QUEUED),
+ [SK_MEMINFO_OPTMEM] = XLAT(SK_MEMINFO_OPTMEM),
+ [SK_MEMINFO_BACKLOG] = XLAT(SK_MEMINFO_BACKLOG),
+ [SK_MEMINFO_DROPS] = XLAT(SK_MEMINFO_DROPS),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_sk_meminfo_indices.in b/xlat/netlink_sk_meminfo_indices.in
new file mode 100644
index 0000000..1e2f795
--- /dev/null
+++ b/xlat/netlink_sk_meminfo_indices.in
@@ -0,0 +1,10 @@
+#value_indexed
+SK_MEMINFO_RMEM_ALLOC	0
+SK_MEMINFO_RCVBUF	1
+SK_MEMINFO_WMEM_ALLOC	2
+SK_MEMINFO_SNDBUF	3
+SK_MEMINFO_FWD_ALLOC	4
+SK_MEMINFO_WMEM_QUEUED	5
+SK_MEMINFO_OPTMEM	6
+SK_MEMINFO_BACKLOG	7
+SK_MEMINFO_DROPS	8
diff --git a/xlat/netlink_socket_flags.h b/xlat/netlink_socket_flags.h
index bd9a830..7c090d2 100644
--- a/xlat/netlink_socket_flags.h
+++ b/xlat/netlink_socket_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_socket_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat netlink_socket_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat netlink_socket_flags in mpers mode
+
+# else
 
 static
 const struct xlat netlink_socket_flags[] = {
@@ -29,4 +35,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_states.h b/xlat/netlink_states.h
index 600b52f..47dc9ed 100644
--- a/xlat/netlink_states.h
+++ b/xlat/netlink_states.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_states.in; do not edit. */
-#if !(defined(NETLINK_UNCONNECTED) || (defined(HAVE_DECL_NETLINK_UNCONNECTED) && HAVE_DECL_NETLINK_UNCONNECTED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NETLINK_UNCONNECTED) || (defined(HAVE_DECL_NETLINK_UNCONNECTED) && HAVE_DECL_NETLINK_UNCONNECTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_UNCONNECTED) == (0), "NETLINK_UNCONNECTED != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_UNCONNECTED 0
 #endif
-#if !(defined(NETLINK_CONNECTED) || (defined(HAVE_DECL_NETLINK_CONNECTED) && HAVE_DECL_NETLINK_CONNECTED))
+#if defined(NETLINK_CONNECTED) || (defined(HAVE_DECL_NETLINK_CONNECTED) && HAVE_DECL_NETLINK_CONNECTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_CONNECTED) == (1), "NETLINK_CONNECTED != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETLINK_CONNECTED 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat netlink_states in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat netlink_states in mpers mode
+
+# else
 
 static
 const struct xlat netlink_states[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/netlink_types.h b/xlat/netlink_types.h
index 96031f2..f6d44a3 100644
--- a/xlat/netlink_types.h
+++ b/xlat/netlink_types.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/netlink_types.in; do not edit. */
-#if !(defined(NLMSG_NOOP) || (defined(HAVE_DECL_NLMSG_NOOP) && HAVE_DECL_NLMSG_NOOP))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NLMSG_NOOP) || (defined(HAVE_DECL_NLMSG_NOOP) && HAVE_DECL_NLMSG_NOOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLMSG_NOOP) == (0x1), "NLMSG_NOOP != 0x1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLMSG_NOOP 0x1
 #endif
-#if !(defined(NLMSG_ERROR) || (defined(HAVE_DECL_NLMSG_ERROR) && HAVE_DECL_NLMSG_ERROR))
+#if defined(NLMSG_ERROR) || (defined(HAVE_DECL_NLMSG_ERROR) && HAVE_DECL_NLMSG_ERROR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLMSG_ERROR) == (0x2), "NLMSG_ERROR != 0x2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLMSG_ERROR 0x2
 #endif
-#if !(defined(NLMSG_DONE) || (defined(HAVE_DECL_NLMSG_DONE) && HAVE_DECL_NLMSG_DONE))
+#if defined(NLMSG_DONE) || (defined(HAVE_DECL_NLMSG_DONE) && HAVE_DECL_NLMSG_DONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLMSG_DONE) == (0x3), "NLMSG_DONE != 0x3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLMSG_DONE 0x3
 #endif
-#if !(defined(NLMSG_OVERRUN) || (defined(HAVE_DECL_NLMSG_OVERRUN) && HAVE_DECL_NLMSG_OVERRUN))
+#if defined(NLMSG_OVERRUN) || (defined(HAVE_DECL_NLMSG_OVERRUN) && HAVE_DECL_NLMSG_OVERRUN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLMSG_OVERRUN) == (0x4), "NLMSG_OVERRUN != 0x4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLMSG_OVERRUN 0x4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat netlink_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat netlink_types in mpers mode
+
+# else
 
 static
 const struct xlat netlink_types[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_acct_msg_types.h b/xlat/nf_acct_msg_types.h
index d20681a..d0584b3 100644
--- a/xlat/nf_acct_msg_types.h
+++ b/xlat/nf_acct_msg_types.h
@@ -1,25 +1,51 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_acct_msg_types.in; do not edit. */
-#if !(defined(NFNL_MSG_ACCT_NEW) || (defined(HAVE_DECL_NFNL_MSG_ACCT_NEW) && HAVE_DECL_NFNL_MSG_ACCT_NEW))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFNL_MSG_ACCT_NEW) || (defined(HAVE_DECL_NFNL_MSG_ACCT_NEW) && HAVE_DECL_NFNL_MSG_ACCT_NEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_ACCT_NEW) == (0), "NFNL_MSG_ACCT_NEW != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_ACCT_NEW 0
 #endif
-#if !(defined(NFNL_MSG_ACCT_GET) || (defined(HAVE_DECL_NFNL_MSG_ACCT_GET) && HAVE_DECL_NFNL_MSG_ACCT_GET))
+#if defined(NFNL_MSG_ACCT_GET) || (defined(HAVE_DECL_NFNL_MSG_ACCT_GET) && HAVE_DECL_NFNL_MSG_ACCT_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_ACCT_GET) == (1), "NFNL_MSG_ACCT_GET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_ACCT_GET 1
 #endif
-#if !(defined(NFNL_MSG_ACCT_GET_CTRZERO) || (defined(HAVE_DECL_NFNL_MSG_ACCT_GET_CTRZERO) && HAVE_DECL_NFNL_MSG_ACCT_GET_CTRZERO))
+#if defined(NFNL_MSG_ACCT_GET_CTRZERO) || (defined(HAVE_DECL_NFNL_MSG_ACCT_GET_CTRZERO) && HAVE_DECL_NFNL_MSG_ACCT_GET_CTRZERO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_ACCT_GET_CTRZERO) == (2), "NFNL_MSG_ACCT_GET_CTRZERO != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_ACCT_GET_CTRZERO 2
 #endif
-#if !(defined(NFNL_MSG_ACCT_DEL) || (defined(HAVE_DECL_NFNL_MSG_ACCT_DEL) && HAVE_DECL_NFNL_MSG_ACCT_DEL))
+#if defined(NFNL_MSG_ACCT_DEL) || (defined(HAVE_DECL_NFNL_MSG_ACCT_DEL) && HAVE_DECL_NFNL_MSG_ACCT_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_ACCT_DEL) == (3), "NFNL_MSG_ACCT_DEL != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_ACCT_DEL 3
 #endif
-#if !(defined(NFNL_MSG_ACCT_OVERQUOTA) || (defined(HAVE_DECL_NFNL_MSG_ACCT_OVERQUOTA) && HAVE_DECL_NFNL_MSG_ACCT_OVERQUOTA))
+#if defined(NFNL_MSG_ACCT_OVERQUOTA) || (defined(HAVE_DECL_NFNL_MSG_ACCT_OVERQUOTA) && HAVE_DECL_NFNL_MSG_ACCT_OVERQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_ACCT_OVERQUOTA) == (4), "NFNL_MSG_ACCT_OVERQUOTA != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_ACCT_OVERQUOTA 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_acct_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_acct_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_acct_msg_types[] = {
@@ -31,4 +57,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_cthelper_msg_types.h b/xlat/nf_cthelper_msg_types.h
index 3b3ee1b..0fa432a 100644
--- a/xlat/nf_cthelper_msg_types.h
+++ b/xlat/nf_cthelper_msg_types.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_cthelper_msg_types.in; do not edit. */
-#if !(defined(NFNL_MSG_CTHELPER_NEW) || (defined(HAVE_DECL_NFNL_MSG_CTHELPER_NEW) && HAVE_DECL_NFNL_MSG_CTHELPER_NEW))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFNL_MSG_CTHELPER_NEW) || (defined(HAVE_DECL_NFNL_MSG_CTHELPER_NEW) && HAVE_DECL_NFNL_MSG_CTHELPER_NEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_CTHELPER_NEW) == (0), "NFNL_MSG_CTHELPER_NEW != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_CTHELPER_NEW 0
 #endif
-#if !(defined(NFNL_MSG_CTHELPER_GET) || (defined(HAVE_DECL_NFNL_MSG_CTHELPER_GET) && HAVE_DECL_NFNL_MSG_CTHELPER_GET))
+#if defined(NFNL_MSG_CTHELPER_GET) || (defined(HAVE_DECL_NFNL_MSG_CTHELPER_GET) && HAVE_DECL_NFNL_MSG_CTHELPER_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_CTHELPER_GET) == (1), "NFNL_MSG_CTHELPER_GET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_CTHELPER_GET 1
 #endif
-#if !(defined(NFNL_MSG_CTHELPER_DEL) || (defined(HAVE_DECL_NFNL_MSG_CTHELPER_DEL) && HAVE_DECL_NFNL_MSG_CTHELPER_DEL))
+#if defined(NFNL_MSG_CTHELPER_DEL) || (defined(HAVE_DECL_NFNL_MSG_CTHELPER_DEL) && HAVE_DECL_NFNL_MSG_CTHELPER_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_CTHELPER_DEL) == (2), "NFNL_MSG_CTHELPER_DEL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_CTHELPER_DEL 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_cthelper_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_cthelper_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_cthelper_msg_types[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_ctnetlink_exp_msg_types.h b/xlat/nf_ctnetlink_exp_msg_types.h
index 4988dd3..a6b13a1 100644
--- a/xlat/nf_ctnetlink_exp_msg_types.h
+++ b/xlat/nf_ctnetlink_exp_msg_types.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_ctnetlink_exp_msg_types.in; do not edit. */
-#if !(defined(IPCTNL_MSG_EXP_NEW) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_NEW) && HAVE_DECL_IPCTNL_MSG_EXP_NEW))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPCTNL_MSG_EXP_NEW) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_NEW) && HAVE_DECL_IPCTNL_MSG_EXP_NEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_EXP_NEW) == (0), "IPCTNL_MSG_EXP_NEW != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_EXP_NEW 0
 #endif
-#if !(defined(IPCTNL_MSG_EXP_GET) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_GET) && HAVE_DECL_IPCTNL_MSG_EXP_GET))
+#if defined(IPCTNL_MSG_EXP_GET) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_GET) && HAVE_DECL_IPCTNL_MSG_EXP_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_EXP_GET) == (1), "IPCTNL_MSG_EXP_GET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_EXP_GET 1
 #endif
-#if !(defined(IPCTNL_MSG_EXP_DELETE) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_DELETE) && HAVE_DECL_IPCTNL_MSG_EXP_DELETE))
+#if defined(IPCTNL_MSG_EXP_DELETE) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_DELETE) && HAVE_DECL_IPCTNL_MSG_EXP_DELETE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_EXP_DELETE) == (2), "IPCTNL_MSG_EXP_DELETE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_EXP_DELETE 2
 #endif
-#if !(defined(IPCTNL_MSG_EXP_GET_STATS_CPU) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_GET_STATS_CPU) && HAVE_DECL_IPCTNL_MSG_EXP_GET_STATS_CPU))
+#if defined(IPCTNL_MSG_EXP_GET_STATS_CPU) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_GET_STATS_CPU) && HAVE_DECL_IPCTNL_MSG_EXP_GET_STATS_CPU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_EXP_GET_STATS_CPU) == (3), "IPCTNL_MSG_EXP_GET_STATS_CPU != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_EXP_GET_STATS_CPU 3
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_ctnetlink_exp_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_ctnetlink_exp_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_ctnetlink_exp_msg_types[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_ctnetlink_msg_types.h b/xlat/nf_ctnetlink_msg_types.h
index 8b61e44..71d24ae 100644
--- a/xlat/nf_ctnetlink_msg_types.h
+++ b/xlat/nf_ctnetlink_msg_types.h
@@ -1,34 +1,72 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_ctnetlink_msg_types.in; do not edit. */
-#if !(defined(IPCTNL_MSG_CT_NEW) || (defined(HAVE_DECL_IPCTNL_MSG_CT_NEW) && HAVE_DECL_IPCTNL_MSG_CT_NEW))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPCTNL_MSG_CT_NEW) || (defined(HAVE_DECL_IPCTNL_MSG_CT_NEW) && HAVE_DECL_IPCTNL_MSG_CT_NEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_CT_NEW) == (0), "IPCTNL_MSG_CT_NEW != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_CT_NEW 0
 #endif
-#if !(defined(IPCTNL_MSG_CT_GET) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET) && HAVE_DECL_IPCTNL_MSG_CT_GET))
+#if defined(IPCTNL_MSG_CT_GET) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET) && HAVE_DECL_IPCTNL_MSG_CT_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_CT_GET) == (1), "IPCTNL_MSG_CT_GET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_CT_GET 1
 #endif
-#if !(defined(IPCTNL_MSG_CT_DELETE) || (defined(HAVE_DECL_IPCTNL_MSG_CT_DELETE) && HAVE_DECL_IPCTNL_MSG_CT_DELETE))
+#if defined(IPCTNL_MSG_CT_DELETE) || (defined(HAVE_DECL_IPCTNL_MSG_CT_DELETE) && HAVE_DECL_IPCTNL_MSG_CT_DELETE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_CT_DELETE) == (2), "IPCTNL_MSG_CT_DELETE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_CT_DELETE 2
 #endif
-#if !(defined(IPCTNL_MSG_CT_GET_CTRZERO) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_CTRZERO) && HAVE_DECL_IPCTNL_MSG_CT_GET_CTRZERO))
+#if defined(IPCTNL_MSG_CT_GET_CTRZERO) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_CTRZERO) && HAVE_DECL_IPCTNL_MSG_CT_GET_CTRZERO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_CT_GET_CTRZERO) == (3), "IPCTNL_MSG_CT_GET_CTRZERO != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_CT_GET_CTRZERO 3
 #endif
-#if !(defined(IPCTNL_MSG_CT_GET_STATS_CPU) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_STATS_CPU) && HAVE_DECL_IPCTNL_MSG_CT_GET_STATS_CPU))
+#if defined(IPCTNL_MSG_CT_GET_STATS_CPU) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_STATS_CPU) && HAVE_DECL_IPCTNL_MSG_CT_GET_STATS_CPU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_CT_GET_STATS_CPU) == (4), "IPCTNL_MSG_CT_GET_STATS_CPU != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_CT_GET_STATS_CPU 4
 #endif
-#if !(defined(IPCTNL_MSG_CT_GET_STATS) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_STATS) && HAVE_DECL_IPCTNL_MSG_CT_GET_STATS))
+#if defined(IPCTNL_MSG_CT_GET_STATS) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_STATS) && HAVE_DECL_IPCTNL_MSG_CT_GET_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_CT_GET_STATS) == (5), "IPCTNL_MSG_CT_GET_STATS != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_CT_GET_STATS 5
 #endif
-#if !(defined(IPCTNL_MSG_CT_GET_DYING) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_DYING) && HAVE_DECL_IPCTNL_MSG_CT_GET_DYING))
+#if defined(IPCTNL_MSG_CT_GET_DYING) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_DYING) && HAVE_DECL_IPCTNL_MSG_CT_GET_DYING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_CT_GET_DYING) == (6), "IPCTNL_MSG_CT_GET_DYING != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_CT_GET_DYING 6
 #endif
-#if !(defined(IPCTNL_MSG_CT_GET_UNCONFIRMED) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_UNCONFIRMED) && HAVE_DECL_IPCTNL_MSG_CT_GET_UNCONFIRMED))
+#if defined(IPCTNL_MSG_CT_GET_UNCONFIRMED) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_UNCONFIRMED) && HAVE_DECL_IPCTNL_MSG_CT_GET_UNCONFIRMED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_CT_GET_UNCONFIRMED) == (7), "IPCTNL_MSG_CT_GET_UNCONFIRMED != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_CT_GET_UNCONFIRMED 7
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_ctnetlink_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_ctnetlink_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_ctnetlink_msg_types[] = {
@@ -43,4 +81,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_cttimeout_msg_types.h b/xlat/nf_cttimeout_msg_types.h
index 9c7b551..43ebec4 100644
--- a/xlat/nf_cttimeout_msg_types.h
+++ b/xlat/nf_cttimeout_msg_types.h
@@ -1,25 +1,51 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_cttimeout_msg_types.in; do not edit. */
-#if !(defined(IPCTNL_MSG_TIMEOUT_NEW) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_NEW) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_NEW))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPCTNL_MSG_TIMEOUT_NEW) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_NEW) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_NEW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_TIMEOUT_NEW) == (0), "IPCTNL_MSG_TIMEOUT_NEW != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_TIMEOUT_NEW 0
 #endif
-#if !(defined(IPCTNL_MSG_TIMEOUT_GET) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_GET) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_GET))
+#if defined(IPCTNL_MSG_TIMEOUT_GET) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_GET) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_TIMEOUT_GET) == (1), "IPCTNL_MSG_TIMEOUT_GET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_TIMEOUT_GET 1
 #endif
-#if !(defined(IPCTNL_MSG_TIMEOUT_DELETE) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_DELETE) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_DELETE))
+#if defined(IPCTNL_MSG_TIMEOUT_DELETE) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_DELETE) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_DELETE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_TIMEOUT_DELETE) == (2), "IPCTNL_MSG_TIMEOUT_DELETE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_TIMEOUT_DELETE 2
 #endif
-#if !(defined(IPCTNL_MSG_TIMEOUT_DEFAULT_SET) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_DEFAULT_SET) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_DEFAULT_SET))
+#if defined(IPCTNL_MSG_TIMEOUT_DEFAULT_SET) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_DEFAULT_SET) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_DEFAULT_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_TIMEOUT_DEFAULT_SET) == (3), "IPCTNL_MSG_TIMEOUT_DEFAULT_SET != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_TIMEOUT_DEFAULT_SET 3
 #endif
-#if !(defined(IPCTNL_MSG_TIMEOUT_DEFAULT_GET) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_DEFAULT_GET) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_DEFAULT_GET))
+#if defined(IPCTNL_MSG_TIMEOUT_DEFAULT_GET) || (defined(HAVE_DECL_IPCTNL_MSG_TIMEOUT_DEFAULT_GET) && HAVE_DECL_IPCTNL_MSG_TIMEOUT_DEFAULT_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPCTNL_MSG_TIMEOUT_DEFAULT_GET) == (4), "IPCTNL_MSG_TIMEOUT_DEFAULT_GET != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPCTNL_MSG_TIMEOUT_DEFAULT_GET 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_cttimeout_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_cttimeout_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_cttimeout_msg_types[] = {
@@ -31,4 +57,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_ipset_msg_types.h b/xlat/nf_ipset_msg_types.h
index b6b32bb..4fdedd9 100644
--- a/xlat/nf_ipset_msg_types.h
+++ b/xlat/nf_ipset_msg_types.h
@@ -1,67 +1,149 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_ipset_msg_types.in; do not edit. */
-#if !(defined(IPSET_CMD_NONE) || (defined(HAVE_DECL_IPSET_CMD_NONE) && HAVE_DECL_IPSET_CMD_NONE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPSET_CMD_NONE) || (defined(HAVE_DECL_IPSET_CMD_NONE) && HAVE_DECL_IPSET_CMD_NONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_NONE) == (0), "IPSET_CMD_NONE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_NONE 0
 #endif
-#if !(defined(IPSET_CMD_PROTOCOL) || (defined(HAVE_DECL_IPSET_CMD_PROTOCOL) && HAVE_DECL_IPSET_CMD_PROTOCOL))
+#if defined(IPSET_CMD_PROTOCOL) || (defined(HAVE_DECL_IPSET_CMD_PROTOCOL) && HAVE_DECL_IPSET_CMD_PROTOCOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_PROTOCOL) == (1), "IPSET_CMD_PROTOCOL != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_PROTOCOL 1
 #endif
-#if !(defined(IPSET_CMD_CREATE) || (defined(HAVE_DECL_IPSET_CMD_CREATE) && HAVE_DECL_IPSET_CMD_CREATE))
+#if defined(IPSET_CMD_CREATE) || (defined(HAVE_DECL_IPSET_CMD_CREATE) && HAVE_DECL_IPSET_CMD_CREATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_CREATE) == (2), "IPSET_CMD_CREATE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_CREATE 2
 #endif
-#if !(defined(IPSET_CMD_DESTROY) || (defined(HAVE_DECL_IPSET_CMD_DESTROY) && HAVE_DECL_IPSET_CMD_DESTROY))
+#if defined(IPSET_CMD_DESTROY) || (defined(HAVE_DECL_IPSET_CMD_DESTROY) && HAVE_DECL_IPSET_CMD_DESTROY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_DESTROY) == (3), "IPSET_CMD_DESTROY != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_DESTROY 3
 #endif
-#if !(defined(IPSET_CMD_FLUSH) || (defined(HAVE_DECL_IPSET_CMD_FLUSH) && HAVE_DECL_IPSET_CMD_FLUSH))
+#if defined(IPSET_CMD_FLUSH) || (defined(HAVE_DECL_IPSET_CMD_FLUSH) && HAVE_DECL_IPSET_CMD_FLUSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_FLUSH) == (4), "IPSET_CMD_FLUSH != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_FLUSH 4
 #endif
-#if !(defined(IPSET_CMD_RENAME) || (defined(HAVE_DECL_IPSET_CMD_RENAME) && HAVE_DECL_IPSET_CMD_RENAME))
+#if defined(IPSET_CMD_RENAME) || (defined(HAVE_DECL_IPSET_CMD_RENAME) && HAVE_DECL_IPSET_CMD_RENAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_RENAME) == (5), "IPSET_CMD_RENAME != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_RENAME 5
 #endif
-#if !(defined(IPSET_CMD_SWAP) || (defined(HAVE_DECL_IPSET_CMD_SWAP) && HAVE_DECL_IPSET_CMD_SWAP))
+#if defined(IPSET_CMD_SWAP) || (defined(HAVE_DECL_IPSET_CMD_SWAP) && HAVE_DECL_IPSET_CMD_SWAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_SWAP) == (6), "IPSET_CMD_SWAP != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_SWAP 6
 #endif
-#if !(defined(IPSET_CMD_LIST) || (defined(HAVE_DECL_IPSET_CMD_LIST) && HAVE_DECL_IPSET_CMD_LIST))
+#if defined(IPSET_CMD_LIST) || (defined(HAVE_DECL_IPSET_CMD_LIST) && HAVE_DECL_IPSET_CMD_LIST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_LIST) == (7), "IPSET_CMD_LIST != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_LIST 7
 #endif
-#if !(defined(IPSET_CMD_SAVE) || (defined(HAVE_DECL_IPSET_CMD_SAVE) && HAVE_DECL_IPSET_CMD_SAVE))
+#if defined(IPSET_CMD_SAVE) || (defined(HAVE_DECL_IPSET_CMD_SAVE) && HAVE_DECL_IPSET_CMD_SAVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_SAVE) == (8), "IPSET_CMD_SAVE != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_SAVE 8
 #endif
-#if !(defined(IPSET_CMD_ADD) || (defined(HAVE_DECL_IPSET_CMD_ADD) && HAVE_DECL_IPSET_CMD_ADD))
+#if defined(IPSET_CMD_ADD) || (defined(HAVE_DECL_IPSET_CMD_ADD) && HAVE_DECL_IPSET_CMD_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_ADD) == (9), "IPSET_CMD_ADD != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_ADD 9
 #endif
-#if !(defined(IPSET_CMD_DEL) || (defined(HAVE_DECL_IPSET_CMD_DEL) && HAVE_DECL_IPSET_CMD_DEL))
+#if defined(IPSET_CMD_DEL) || (defined(HAVE_DECL_IPSET_CMD_DEL) && HAVE_DECL_IPSET_CMD_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_DEL) == (10), "IPSET_CMD_DEL != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_DEL 10
 #endif
-#if !(defined(IPSET_CMD_TEST) || (defined(HAVE_DECL_IPSET_CMD_TEST) && HAVE_DECL_IPSET_CMD_TEST))
+#if defined(IPSET_CMD_TEST) || (defined(HAVE_DECL_IPSET_CMD_TEST) && HAVE_DECL_IPSET_CMD_TEST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_TEST) == (11), "IPSET_CMD_TEST != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_TEST 11
 #endif
-#if !(defined(IPSET_CMD_HEADER) || (defined(HAVE_DECL_IPSET_CMD_HEADER) && HAVE_DECL_IPSET_CMD_HEADER))
+#if defined(IPSET_CMD_HEADER) || (defined(HAVE_DECL_IPSET_CMD_HEADER) && HAVE_DECL_IPSET_CMD_HEADER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_HEADER) == (12), "IPSET_CMD_HEADER != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_HEADER 12
 #endif
-#if !(defined(IPSET_CMD_TYPE) || (defined(HAVE_DECL_IPSET_CMD_TYPE) && HAVE_DECL_IPSET_CMD_TYPE))
+#if defined(IPSET_CMD_TYPE) || (defined(HAVE_DECL_IPSET_CMD_TYPE) && HAVE_DECL_IPSET_CMD_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_TYPE) == (13), "IPSET_CMD_TYPE != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_TYPE 13
 #endif
-#if !(defined(IPSET_CMD_RESTORE) || (defined(HAVE_DECL_IPSET_CMD_RESTORE) && HAVE_DECL_IPSET_CMD_RESTORE))
+#if defined(IPSET_CMD_RESTORE) || (defined(HAVE_DECL_IPSET_CMD_RESTORE) && HAVE_DECL_IPSET_CMD_RESTORE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_RESTORE) == (14), "IPSET_CMD_RESTORE != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_RESTORE 14
 #endif
-#if !(defined(IPSET_CMD_HELP) || (defined(HAVE_DECL_IPSET_CMD_HELP) && HAVE_DECL_IPSET_CMD_HELP))
+#if defined(IPSET_CMD_HELP) || (defined(HAVE_DECL_IPSET_CMD_HELP) && HAVE_DECL_IPSET_CMD_HELP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_HELP) == (15), "IPSET_CMD_HELP != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_HELP 15
 #endif
-#if !(defined(IPSET_CMD_VERSION) || (defined(HAVE_DECL_IPSET_CMD_VERSION) && HAVE_DECL_IPSET_CMD_VERSION))
+#if defined(IPSET_CMD_VERSION) || (defined(HAVE_DECL_IPSET_CMD_VERSION) && HAVE_DECL_IPSET_CMD_VERSION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_VERSION) == (16), "IPSET_CMD_VERSION != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_VERSION 16
 #endif
-#if !(defined(IPSET_CMD_QUIT) || (defined(HAVE_DECL_IPSET_CMD_QUIT) && HAVE_DECL_IPSET_CMD_QUIT))
+#if defined(IPSET_CMD_QUIT) || (defined(HAVE_DECL_IPSET_CMD_QUIT) && HAVE_DECL_IPSET_CMD_QUIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_QUIT) == (17), "IPSET_CMD_QUIT != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_QUIT 17
 #endif
-#if !(defined(IPSET_CMD_COMMIT) || (defined(HAVE_DECL_IPSET_CMD_COMMIT) && HAVE_DECL_IPSET_CMD_COMMIT))
+#if defined(IPSET_CMD_COMMIT) || (defined(HAVE_DECL_IPSET_CMD_COMMIT) && HAVE_DECL_IPSET_CMD_COMMIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSET_CMD_COMMIT) == (18), "IPSET_CMD_COMMIT != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IPSET_CMD_COMMIT 18
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_ipset_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_ipset_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_ipset_msg_types[] = {
@@ -89,4 +171,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_nft_compat_msg_types.h b/xlat/nf_nft_compat_msg_types.h
index 1134678..010ec9d 100644
--- a/xlat/nf_nft_compat_msg_types.h
+++ b/xlat/nf_nft_compat_msg_types.h
@@ -1,13 +1,23 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_nft_compat_msg_types.in; do not edit. */
-#if !(defined(NFNL_MSG_COMPAT_GET) || (defined(HAVE_DECL_NFNL_MSG_COMPAT_GET) && HAVE_DECL_NFNL_MSG_COMPAT_GET))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFNL_MSG_COMPAT_GET) || (defined(HAVE_DECL_NFNL_MSG_COMPAT_GET) && HAVE_DECL_NFNL_MSG_COMPAT_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_COMPAT_GET) == (0), "NFNL_MSG_COMPAT_GET != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_COMPAT_GET 0
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_nft_compat_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_nft_compat_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_nft_compat_msg_types[] = {
@@ -15,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_nftables_msg_types.h b/xlat/nf_nftables_msg_types.h
index 8a1a6de..f2b3c51 100644
--- a/xlat/nf_nftables_msg_types.h
+++ b/xlat/nf_nftables_msg_types.h
@@ -1,76 +1,170 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_nftables_msg_types.in; do not edit. */
-#if !(defined(NFT_MSG_NEWTABLE) || (defined(HAVE_DECL_NFT_MSG_NEWTABLE) && HAVE_DECL_NFT_MSG_NEWTABLE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFT_MSG_NEWTABLE) || (defined(HAVE_DECL_NFT_MSG_NEWTABLE) && HAVE_DECL_NFT_MSG_NEWTABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_NEWTABLE) == (0), "NFT_MSG_NEWTABLE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_NEWTABLE 0
 #endif
-#if !(defined(NFT_MSG_GETTABLE) || (defined(HAVE_DECL_NFT_MSG_GETTABLE) && HAVE_DECL_NFT_MSG_GETTABLE))
+#if defined(NFT_MSG_GETTABLE) || (defined(HAVE_DECL_NFT_MSG_GETTABLE) && HAVE_DECL_NFT_MSG_GETTABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_GETTABLE) == (1), "NFT_MSG_GETTABLE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_GETTABLE 1
 #endif
-#if !(defined(NFT_MSG_DELTABLE) || (defined(HAVE_DECL_NFT_MSG_DELTABLE) && HAVE_DECL_NFT_MSG_DELTABLE))
+#if defined(NFT_MSG_DELTABLE) || (defined(HAVE_DECL_NFT_MSG_DELTABLE) && HAVE_DECL_NFT_MSG_DELTABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_DELTABLE) == (2), "NFT_MSG_DELTABLE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_DELTABLE 2
 #endif
-#if !(defined(NFT_MSG_NEWCHAIN) || (defined(HAVE_DECL_NFT_MSG_NEWCHAIN) && HAVE_DECL_NFT_MSG_NEWCHAIN))
+#if defined(NFT_MSG_NEWCHAIN) || (defined(HAVE_DECL_NFT_MSG_NEWCHAIN) && HAVE_DECL_NFT_MSG_NEWCHAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_NEWCHAIN) == (3), "NFT_MSG_NEWCHAIN != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_NEWCHAIN 3
 #endif
-#if !(defined(NFT_MSG_GETCHAIN) || (defined(HAVE_DECL_NFT_MSG_GETCHAIN) && HAVE_DECL_NFT_MSG_GETCHAIN))
+#if defined(NFT_MSG_GETCHAIN) || (defined(HAVE_DECL_NFT_MSG_GETCHAIN) && HAVE_DECL_NFT_MSG_GETCHAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_GETCHAIN) == (4), "NFT_MSG_GETCHAIN != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_GETCHAIN 4
 #endif
-#if !(defined(NFT_MSG_DELCHAIN) || (defined(HAVE_DECL_NFT_MSG_DELCHAIN) && HAVE_DECL_NFT_MSG_DELCHAIN))
+#if defined(NFT_MSG_DELCHAIN) || (defined(HAVE_DECL_NFT_MSG_DELCHAIN) && HAVE_DECL_NFT_MSG_DELCHAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_DELCHAIN) == (5), "NFT_MSG_DELCHAIN != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_DELCHAIN 5
 #endif
-#if !(defined(NFT_MSG_NEWRULE) || (defined(HAVE_DECL_NFT_MSG_NEWRULE) && HAVE_DECL_NFT_MSG_NEWRULE))
+#if defined(NFT_MSG_NEWRULE) || (defined(HAVE_DECL_NFT_MSG_NEWRULE) && HAVE_DECL_NFT_MSG_NEWRULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_NEWRULE) == (6), "NFT_MSG_NEWRULE != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_NEWRULE 6
 #endif
-#if !(defined(NFT_MSG_GETRULE) || (defined(HAVE_DECL_NFT_MSG_GETRULE) && HAVE_DECL_NFT_MSG_GETRULE))
+#if defined(NFT_MSG_GETRULE) || (defined(HAVE_DECL_NFT_MSG_GETRULE) && HAVE_DECL_NFT_MSG_GETRULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_GETRULE) == (7), "NFT_MSG_GETRULE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_GETRULE 7
 #endif
-#if !(defined(NFT_MSG_DELRULE) || (defined(HAVE_DECL_NFT_MSG_DELRULE) && HAVE_DECL_NFT_MSG_DELRULE))
+#if defined(NFT_MSG_DELRULE) || (defined(HAVE_DECL_NFT_MSG_DELRULE) && HAVE_DECL_NFT_MSG_DELRULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_DELRULE) == (8), "NFT_MSG_DELRULE != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_DELRULE 8
 #endif
-#if !(defined(NFT_MSG_NEWSET) || (defined(HAVE_DECL_NFT_MSG_NEWSET) && HAVE_DECL_NFT_MSG_NEWSET))
+#if defined(NFT_MSG_NEWSET) || (defined(HAVE_DECL_NFT_MSG_NEWSET) && HAVE_DECL_NFT_MSG_NEWSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_NEWSET) == (9), "NFT_MSG_NEWSET != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_NEWSET 9
 #endif
-#if !(defined(NFT_MSG_GETSET) || (defined(HAVE_DECL_NFT_MSG_GETSET) && HAVE_DECL_NFT_MSG_GETSET))
+#if defined(NFT_MSG_GETSET) || (defined(HAVE_DECL_NFT_MSG_GETSET) && HAVE_DECL_NFT_MSG_GETSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_GETSET) == (10), "NFT_MSG_GETSET != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_GETSET 10
 #endif
-#if !(defined(NFT_MSG_DELSET) || (defined(HAVE_DECL_NFT_MSG_DELSET) && HAVE_DECL_NFT_MSG_DELSET))
+#if defined(NFT_MSG_DELSET) || (defined(HAVE_DECL_NFT_MSG_DELSET) && HAVE_DECL_NFT_MSG_DELSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_DELSET) == (11), "NFT_MSG_DELSET != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_DELSET 11
 #endif
-#if !(defined(NFT_MSG_NEWSETELEM) || (defined(HAVE_DECL_NFT_MSG_NEWSETELEM) && HAVE_DECL_NFT_MSG_NEWSETELEM))
+#if defined(NFT_MSG_NEWSETELEM) || (defined(HAVE_DECL_NFT_MSG_NEWSETELEM) && HAVE_DECL_NFT_MSG_NEWSETELEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_NEWSETELEM) == (12), "NFT_MSG_NEWSETELEM != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_NEWSETELEM 12
 #endif
-#if !(defined(NFT_MSG_GETSETELEM) || (defined(HAVE_DECL_NFT_MSG_GETSETELEM) && HAVE_DECL_NFT_MSG_GETSETELEM))
+#if defined(NFT_MSG_GETSETELEM) || (defined(HAVE_DECL_NFT_MSG_GETSETELEM) && HAVE_DECL_NFT_MSG_GETSETELEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_GETSETELEM) == (13), "NFT_MSG_GETSETELEM != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_GETSETELEM 13
 #endif
-#if !(defined(NFT_MSG_DELSETELEM) || (defined(HAVE_DECL_NFT_MSG_DELSETELEM) && HAVE_DECL_NFT_MSG_DELSETELEM))
+#if defined(NFT_MSG_DELSETELEM) || (defined(HAVE_DECL_NFT_MSG_DELSETELEM) && HAVE_DECL_NFT_MSG_DELSETELEM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_DELSETELEM) == (14), "NFT_MSG_DELSETELEM != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_DELSETELEM 14
 #endif
-#if !(defined(NFT_MSG_NEWGEN) || (defined(HAVE_DECL_NFT_MSG_NEWGEN) && HAVE_DECL_NFT_MSG_NEWGEN))
+#if defined(NFT_MSG_NEWGEN) || (defined(HAVE_DECL_NFT_MSG_NEWGEN) && HAVE_DECL_NFT_MSG_NEWGEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_NEWGEN) == (15), "NFT_MSG_NEWGEN != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_NEWGEN 15
 #endif
-#if !(defined(NFT_MSG_GETGEN) || (defined(HAVE_DECL_NFT_MSG_GETGEN) && HAVE_DECL_NFT_MSG_GETGEN))
+#if defined(NFT_MSG_GETGEN) || (defined(HAVE_DECL_NFT_MSG_GETGEN) && HAVE_DECL_NFT_MSG_GETGEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_GETGEN) == (16), "NFT_MSG_GETGEN != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_GETGEN 16
 #endif
-#if !(defined(NFT_MSG_TRACE) || (defined(HAVE_DECL_NFT_MSG_TRACE) && HAVE_DECL_NFT_MSG_TRACE))
+#if defined(NFT_MSG_TRACE) || (defined(HAVE_DECL_NFT_MSG_TRACE) && HAVE_DECL_NFT_MSG_TRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_TRACE) == (17), "NFT_MSG_TRACE != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_TRACE 17
 #endif
-#if !(defined(NFT_MSG_NEWOBJ) || (defined(HAVE_DECL_NFT_MSG_NEWOBJ) && HAVE_DECL_NFT_MSG_NEWOBJ))
+#if defined(NFT_MSG_NEWOBJ) || (defined(HAVE_DECL_NFT_MSG_NEWOBJ) && HAVE_DECL_NFT_MSG_NEWOBJ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_NEWOBJ) == (18), "NFT_MSG_NEWOBJ != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_NEWOBJ 18
 #endif
-#if !(defined(NFT_MSG_GETOBJ) || (defined(HAVE_DECL_NFT_MSG_GETOBJ) && HAVE_DECL_NFT_MSG_GETOBJ))
+#if defined(NFT_MSG_GETOBJ) || (defined(HAVE_DECL_NFT_MSG_GETOBJ) && HAVE_DECL_NFT_MSG_GETOBJ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_GETOBJ) == (19), "NFT_MSG_GETOBJ != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_GETOBJ 19
 #endif
-#if !(defined(NFT_MSG_DELOBJ) || (defined(HAVE_DECL_NFT_MSG_DELOBJ) && HAVE_DECL_NFT_MSG_DELOBJ))
+#if defined(NFT_MSG_DELOBJ) || (defined(HAVE_DECL_NFT_MSG_DELOBJ) && HAVE_DECL_NFT_MSG_DELOBJ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_DELOBJ) == (20), "NFT_MSG_DELOBJ != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_DELOBJ 20
 #endif
-#if !(defined(NFT_MSG_GETOBJ_RESET) || (defined(HAVE_DECL_NFT_MSG_GETOBJ_RESET) && HAVE_DECL_NFT_MSG_GETOBJ_RESET))
+#if defined(NFT_MSG_GETOBJ_RESET) || (defined(HAVE_DECL_NFT_MSG_GETOBJ_RESET) && HAVE_DECL_NFT_MSG_GETOBJ_RESET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFT_MSG_GETOBJ_RESET) == (21), "NFT_MSG_GETOBJ_RESET != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFT_MSG_GETOBJ_RESET 21
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_nftables_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_nftables_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_nftables_msg_types[] = {
@@ -99,4 +193,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_osf_msg_types.h b/xlat/nf_osf_msg_types.h
index f5661ef..bf84df6 100644
--- a/xlat/nf_osf_msg_types.h
+++ b/xlat/nf_osf_msg_types.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_osf_msg_types.in; do not edit. */
-#if !(defined(OSF_MSG_ADD) || (defined(HAVE_DECL_OSF_MSG_ADD) && HAVE_DECL_OSF_MSG_ADD))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(OSF_MSG_ADD) || (defined(HAVE_DECL_OSF_MSG_ADD) && HAVE_DECL_OSF_MSG_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((OSF_MSG_ADD) == (0), "OSF_MSG_ADD != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define OSF_MSG_ADD 0
 #endif
-#if !(defined(OSF_MSG_REMOVE) || (defined(HAVE_DECL_OSF_MSG_REMOVE) && HAVE_DECL_OSF_MSG_REMOVE))
+#if defined(OSF_MSG_REMOVE) || (defined(HAVE_DECL_OSF_MSG_REMOVE) && HAVE_DECL_OSF_MSG_REMOVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((OSF_MSG_REMOVE) == (1), "OSF_MSG_REMOVE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define OSF_MSG_REMOVE 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_osf_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_osf_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_osf_msg_types[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_queue_msg_types.h b/xlat/nf_queue_msg_types.h
index 7b4f4a4..88ab109 100644
--- a/xlat/nf_queue_msg_types.h
+++ b/xlat/nf_queue_msg_types.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_queue_msg_types.in; do not edit. */
-#if !(defined(NFQNL_MSG_PACKET) || (defined(HAVE_DECL_NFQNL_MSG_PACKET) && HAVE_DECL_NFQNL_MSG_PACKET))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFQNL_MSG_PACKET) || (defined(HAVE_DECL_NFQNL_MSG_PACKET) && HAVE_DECL_NFQNL_MSG_PACKET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFQNL_MSG_PACKET) == (0), "NFQNL_MSG_PACKET != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFQNL_MSG_PACKET 0
 #endif
-#if !(defined(NFQNL_MSG_VERDICT) || (defined(HAVE_DECL_NFQNL_MSG_VERDICT) && HAVE_DECL_NFQNL_MSG_VERDICT))
+#if defined(NFQNL_MSG_VERDICT) || (defined(HAVE_DECL_NFQNL_MSG_VERDICT) && HAVE_DECL_NFQNL_MSG_VERDICT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFQNL_MSG_VERDICT) == (1), "NFQNL_MSG_VERDICT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFQNL_MSG_VERDICT 1
 #endif
-#if !(defined(NFQNL_MSG_CONFIG) || (defined(HAVE_DECL_NFQNL_MSG_CONFIG) && HAVE_DECL_NFQNL_MSG_CONFIG))
+#if defined(NFQNL_MSG_CONFIG) || (defined(HAVE_DECL_NFQNL_MSG_CONFIG) && HAVE_DECL_NFQNL_MSG_CONFIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFQNL_MSG_CONFIG) == (2), "NFQNL_MSG_CONFIG != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFQNL_MSG_CONFIG 2
 #endif
-#if !(defined(NFQNL_MSG_VERDICT_BATCH) || (defined(HAVE_DECL_NFQNL_MSG_VERDICT_BATCH) && HAVE_DECL_NFQNL_MSG_VERDICT_BATCH))
+#if defined(NFQNL_MSG_VERDICT_BATCH) || (defined(HAVE_DECL_NFQNL_MSG_VERDICT_BATCH) && HAVE_DECL_NFQNL_MSG_VERDICT_BATCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFQNL_MSG_VERDICT_BATCH) == (3), "NFQNL_MSG_VERDICT_BATCH != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFQNL_MSG_VERDICT_BATCH 3
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_queue_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_queue_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_queue_msg_types[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nf_ulog_msg_types.h b/xlat/nf_ulog_msg_types.h
index b0ab051..c8c8389 100644
--- a/xlat/nf_ulog_msg_types.h
+++ b/xlat/nf_ulog_msg_types.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nf_ulog_msg_types.in; do not edit. */
-#if !(defined(NFULNL_MSG_PACKET) || (defined(HAVE_DECL_NFULNL_MSG_PACKET) && HAVE_DECL_NFULNL_MSG_PACKET))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFULNL_MSG_PACKET) || (defined(HAVE_DECL_NFULNL_MSG_PACKET) && HAVE_DECL_NFULNL_MSG_PACKET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFULNL_MSG_PACKET) == (0), "NFULNL_MSG_PACKET != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFULNL_MSG_PACKET 0
 #endif
-#if !(defined(NFULNL_MSG_CONFIG) || (defined(HAVE_DECL_NFULNL_MSG_CONFIG) && HAVE_DECL_NFULNL_MSG_CONFIG))
+#if defined(NFULNL_MSG_CONFIG) || (defined(HAVE_DECL_NFULNL_MSG_CONFIG) && HAVE_DECL_NFULNL_MSG_CONFIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFULNL_MSG_CONFIG) == (1), "NFULNL_MSG_CONFIG != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFULNL_MSG_CONFIG 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nf_ulog_msg_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nf_ulog_msg_types in mpers mode
+
+# else
 
 static
 const struct xlat nf_ulog_msg_types[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nfc_protocols.h b/xlat/nfc_protocols.h
new file mode 100644
index 0000000..88331a5
--- /dev/null
+++ b/xlat/nfc_protocols.h
@@ -0,0 +1,38 @@
+/* Generated by ./xlat/gen.sh from ./xlat/nfc_protocols.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFC_SOCKPROTO_RAW) || (defined(HAVE_DECL_NFC_SOCKPROTO_RAW) && HAVE_DECL_NFC_SOCKPROTO_RAW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFC_SOCKPROTO_RAW) == (0), "NFC_SOCKPROTO_RAW != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NFC_SOCKPROTO_RAW 0
+#endif
+#if defined(NFC_SOCKPROTO_LLCP) || (defined(HAVE_DECL_NFC_SOCKPROTO_LLCP) && HAVE_DECL_NFC_SOCKPROTO_LLCP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFC_SOCKPROTO_LLCP) == (1), "NFC_SOCKPROTO_LLCP != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NFC_SOCKPROTO_LLCP 1
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat nfc_protocols in mpers mode
+
+# else
+
+static
+const struct xlat nfc_protocols[] = {
+ [NFC_SOCKPROTO_RAW] = XLAT(NFC_SOCKPROTO_RAW),
+ [NFC_SOCKPROTO_LLCP] = XLAT(NFC_SOCKPROTO_LLCP),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nfc_protocols.in b/xlat/nfc_protocols.in
new file mode 100644
index 0000000..2771897
--- /dev/null
+++ b/xlat/nfc_protocols.in
@@ -0,0 +1,3 @@
+#value_indexed
+NFC_SOCKPROTO_RAW	0
+NFC_SOCKPROTO_LLCP	1
diff --git a/xlat/nl_audit_types.h b/xlat/nl_audit_types.h
index 37f658a..076bcc5 100644
--- a/xlat/nl_audit_types.h
+++ b/xlat/nl_audit_types.h
@@ -1,280 +1,650 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nl_audit_types.in; do not edit. */
-#if !(defined(AUDIT_GET) || (defined(HAVE_DECL_AUDIT_GET) && HAVE_DECL_AUDIT_GET))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(AUDIT_GET) || (defined(HAVE_DECL_AUDIT_GET) && HAVE_DECL_AUDIT_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_GET) == (1000), "AUDIT_GET != 1000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_GET 1000
 #endif
-#if !(defined(AUDIT_SET) || (defined(HAVE_DECL_AUDIT_SET) && HAVE_DECL_AUDIT_SET))
+#if defined(AUDIT_SET) || (defined(HAVE_DECL_AUDIT_SET) && HAVE_DECL_AUDIT_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_SET) == (1001), "AUDIT_SET != 1001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_SET 1001
 #endif
-#if !(defined(AUDIT_LIST) || (defined(HAVE_DECL_AUDIT_LIST) && HAVE_DECL_AUDIT_LIST))
+#if defined(AUDIT_LIST) || (defined(HAVE_DECL_AUDIT_LIST) && HAVE_DECL_AUDIT_LIST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_LIST) == (1002), "AUDIT_LIST != 1002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_LIST 1002
 #endif
-#if !(defined(AUDIT_ADD) || (defined(HAVE_DECL_AUDIT_ADD) && HAVE_DECL_AUDIT_ADD))
+#if defined(AUDIT_ADD) || (defined(HAVE_DECL_AUDIT_ADD) && HAVE_DECL_AUDIT_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_ADD) == (1003), "AUDIT_ADD != 1003");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_ADD 1003
 #endif
-#if !(defined(AUDIT_DEL) || (defined(HAVE_DECL_AUDIT_DEL) && HAVE_DECL_AUDIT_DEL))
+#if defined(AUDIT_DEL) || (defined(HAVE_DECL_AUDIT_DEL) && HAVE_DECL_AUDIT_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_DEL) == (1004), "AUDIT_DEL != 1004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_DEL 1004
 #endif
-#if !(defined(AUDIT_USER) || (defined(HAVE_DECL_AUDIT_USER) && HAVE_DECL_AUDIT_USER))
+#if defined(AUDIT_USER) || (defined(HAVE_DECL_AUDIT_USER) && HAVE_DECL_AUDIT_USER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_USER) == (1005), "AUDIT_USER != 1005");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_USER 1005
 #endif
-#if !(defined(AUDIT_LOGIN) || (defined(HAVE_DECL_AUDIT_LOGIN) && HAVE_DECL_AUDIT_LOGIN))
+#if defined(AUDIT_LOGIN) || (defined(HAVE_DECL_AUDIT_LOGIN) && HAVE_DECL_AUDIT_LOGIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_LOGIN) == (1006), "AUDIT_LOGIN != 1006");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_LOGIN 1006
 #endif
-#if !(defined(AUDIT_WATCH_INS) || (defined(HAVE_DECL_AUDIT_WATCH_INS) && HAVE_DECL_AUDIT_WATCH_INS))
+#if defined(AUDIT_WATCH_INS) || (defined(HAVE_DECL_AUDIT_WATCH_INS) && HAVE_DECL_AUDIT_WATCH_INS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_WATCH_INS) == (1007), "AUDIT_WATCH_INS != 1007");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_WATCH_INS 1007
 #endif
-#if !(defined(AUDIT_WATCH_REM) || (defined(HAVE_DECL_AUDIT_WATCH_REM) && HAVE_DECL_AUDIT_WATCH_REM))
+#if defined(AUDIT_WATCH_REM) || (defined(HAVE_DECL_AUDIT_WATCH_REM) && HAVE_DECL_AUDIT_WATCH_REM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_WATCH_REM) == (1008), "AUDIT_WATCH_REM != 1008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_WATCH_REM 1008
 #endif
-#if !(defined(AUDIT_WATCH_LIST) || (defined(HAVE_DECL_AUDIT_WATCH_LIST) && HAVE_DECL_AUDIT_WATCH_LIST))
+#if defined(AUDIT_WATCH_LIST) || (defined(HAVE_DECL_AUDIT_WATCH_LIST) && HAVE_DECL_AUDIT_WATCH_LIST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_WATCH_LIST) == (1009), "AUDIT_WATCH_LIST != 1009");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_WATCH_LIST 1009
 #endif
-#if !(defined(AUDIT_SIGNAL_INFO) || (defined(HAVE_DECL_AUDIT_SIGNAL_INFO) && HAVE_DECL_AUDIT_SIGNAL_INFO))
+#if defined(AUDIT_SIGNAL_INFO) || (defined(HAVE_DECL_AUDIT_SIGNAL_INFO) && HAVE_DECL_AUDIT_SIGNAL_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_SIGNAL_INFO) == (1010), "AUDIT_SIGNAL_INFO != 1010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_SIGNAL_INFO 1010
 #endif
-#if !(defined(AUDIT_ADD_RULE) || (defined(HAVE_DECL_AUDIT_ADD_RULE) && HAVE_DECL_AUDIT_ADD_RULE))
+#if defined(AUDIT_ADD_RULE) || (defined(HAVE_DECL_AUDIT_ADD_RULE) && HAVE_DECL_AUDIT_ADD_RULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_ADD_RULE) == (1011), "AUDIT_ADD_RULE != 1011");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_ADD_RULE 1011
 #endif
-#if !(defined(AUDIT_DEL_RULE) || (defined(HAVE_DECL_AUDIT_DEL_RULE) && HAVE_DECL_AUDIT_DEL_RULE))
+#if defined(AUDIT_DEL_RULE) || (defined(HAVE_DECL_AUDIT_DEL_RULE) && HAVE_DECL_AUDIT_DEL_RULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_DEL_RULE) == (1012), "AUDIT_DEL_RULE != 1012");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_DEL_RULE 1012
 #endif
-#if !(defined(AUDIT_LIST_RULES) || (defined(HAVE_DECL_AUDIT_LIST_RULES) && HAVE_DECL_AUDIT_LIST_RULES))
+#if defined(AUDIT_LIST_RULES) || (defined(HAVE_DECL_AUDIT_LIST_RULES) && HAVE_DECL_AUDIT_LIST_RULES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_LIST_RULES) == (1013), "AUDIT_LIST_RULES != 1013");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_LIST_RULES 1013
 #endif
-#if !(defined(AUDIT_TRIM) || (defined(HAVE_DECL_AUDIT_TRIM) && HAVE_DECL_AUDIT_TRIM))
+#if defined(AUDIT_TRIM) || (defined(HAVE_DECL_AUDIT_TRIM) && HAVE_DECL_AUDIT_TRIM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_TRIM) == (1014), "AUDIT_TRIM != 1014");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_TRIM 1014
 #endif
-#if !(defined(AUDIT_MAKE_EQUIV) || (defined(HAVE_DECL_AUDIT_MAKE_EQUIV) && HAVE_DECL_AUDIT_MAKE_EQUIV))
+#if defined(AUDIT_MAKE_EQUIV) || (defined(HAVE_DECL_AUDIT_MAKE_EQUIV) && HAVE_DECL_AUDIT_MAKE_EQUIV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAKE_EQUIV) == (1015), "AUDIT_MAKE_EQUIV != 1015");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAKE_EQUIV 1015
 #endif
-#if !(defined(AUDIT_TTY_GET) || (defined(HAVE_DECL_AUDIT_TTY_GET) && HAVE_DECL_AUDIT_TTY_GET))
+#if defined(AUDIT_TTY_GET) || (defined(HAVE_DECL_AUDIT_TTY_GET) && HAVE_DECL_AUDIT_TTY_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_TTY_GET) == (1016), "AUDIT_TTY_GET != 1016");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_TTY_GET 1016
 #endif
-#if !(defined(AUDIT_TTY_SET) || (defined(HAVE_DECL_AUDIT_TTY_SET) && HAVE_DECL_AUDIT_TTY_SET))
+#if defined(AUDIT_TTY_SET) || (defined(HAVE_DECL_AUDIT_TTY_SET) && HAVE_DECL_AUDIT_TTY_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_TTY_SET) == (1017), "AUDIT_TTY_SET != 1017");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_TTY_SET 1017
 #endif
-#if !(defined(AUDIT_SET_FEATURE) || (defined(HAVE_DECL_AUDIT_SET_FEATURE) && HAVE_DECL_AUDIT_SET_FEATURE))
+#if defined(AUDIT_SET_FEATURE) || (defined(HAVE_DECL_AUDIT_SET_FEATURE) && HAVE_DECL_AUDIT_SET_FEATURE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_SET_FEATURE) == (1018), "AUDIT_SET_FEATURE != 1018");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_SET_FEATURE 1018
 #endif
-#if !(defined(AUDIT_GET_FEATURE) || (defined(HAVE_DECL_AUDIT_GET_FEATURE) && HAVE_DECL_AUDIT_GET_FEATURE))
+#if defined(AUDIT_GET_FEATURE) || (defined(HAVE_DECL_AUDIT_GET_FEATURE) && HAVE_DECL_AUDIT_GET_FEATURE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_GET_FEATURE) == (1019), "AUDIT_GET_FEATURE != 1019");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_GET_FEATURE 1019
 #endif
-#if !(defined(AUDIT_FIRST_USER_MSG) || (defined(HAVE_DECL_AUDIT_FIRST_USER_MSG) && HAVE_DECL_AUDIT_FIRST_USER_MSG))
+#if defined(AUDIT_FIRST_USER_MSG) || (defined(HAVE_DECL_AUDIT_FIRST_USER_MSG) && HAVE_DECL_AUDIT_FIRST_USER_MSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_FIRST_USER_MSG) == (1100), "AUDIT_FIRST_USER_MSG != 1100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_FIRST_USER_MSG 1100
 #endif
-#if !(defined(AUDIT_USER_AVC) || (defined(HAVE_DECL_AUDIT_USER_AVC) && HAVE_DECL_AUDIT_USER_AVC))
+#if defined(AUDIT_USER_AVC) || (defined(HAVE_DECL_AUDIT_USER_AVC) && HAVE_DECL_AUDIT_USER_AVC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_USER_AVC) == (1107), "AUDIT_USER_AVC != 1107");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_USER_AVC 1107
 #endif
-#if !(defined(AUDIT_USER_TTY) || (defined(HAVE_DECL_AUDIT_USER_TTY) && HAVE_DECL_AUDIT_USER_TTY))
+#if defined(AUDIT_USER_TTY) || (defined(HAVE_DECL_AUDIT_USER_TTY) && HAVE_DECL_AUDIT_USER_TTY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_USER_TTY) == (1124), "AUDIT_USER_TTY != 1124");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_USER_TTY 1124
 #endif
-#if !(defined(AUDIT_LAST_USER_MSG) || (defined(HAVE_DECL_AUDIT_LAST_USER_MSG) && HAVE_DECL_AUDIT_LAST_USER_MSG))
+#if defined(AUDIT_LAST_USER_MSG) || (defined(HAVE_DECL_AUDIT_LAST_USER_MSG) && HAVE_DECL_AUDIT_LAST_USER_MSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_LAST_USER_MSG) == (1199), "AUDIT_LAST_USER_MSG != 1199");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_LAST_USER_MSG 1199
 #endif
-#if !(defined(AUDIT_DAEMON_START) || (defined(HAVE_DECL_AUDIT_DAEMON_START) && HAVE_DECL_AUDIT_DAEMON_START))
+#if defined(AUDIT_DAEMON_START) || (defined(HAVE_DECL_AUDIT_DAEMON_START) && HAVE_DECL_AUDIT_DAEMON_START)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_DAEMON_START) == (1200), "AUDIT_DAEMON_START != 1200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_DAEMON_START 1200
 #endif
-#if !(defined(AUDIT_DAEMON_END) || (defined(HAVE_DECL_AUDIT_DAEMON_END) && HAVE_DECL_AUDIT_DAEMON_END))
+#if defined(AUDIT_DAEMON_END) || (defined(HAVE_DECL_AUDIT_DAEMON_END) && HAVE_DECL_AUDIT_DAEMON_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_DAEMON_END) == (1201), "AUDIT_DAEMON_END != 1201");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_DAEMON_END 1201
 #endif
-#if !(defined(AUDIT_DAEMON_ABORT) || (defined(HAVE_DECL_AUDIT_DAEMON_ABORT) && HAVE_DECL_AUDIT_DAEMON_ABORT))
+#if defined(AUDIT_DAEMON_ABORT) || (defined(HAVE_DECL_AUDIT_DAEMON_ABORT) && HAVE_DECL_AUDIT_DAEMON_ABORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_DAEMON_ABORT) == (1202), "AUDIT_DAEMON_ABORT != 1202");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_DAEMON_ABORT 1202
 #endif
-#if !(defined(AUDIT_DAEMON_CONFIG) || (defined(HAVE_DECL_AUDIT_DAEMON_CONFIG) && HAVE_DECL_AUDIT_DAEMON_CONFIG))
+#if defined(AUDIT_DAEMON_CONFIG) || (defined(HAVE_DECL_AUDIT_DAEMON_CONFIG) && HAVE_DECL_AUDIT_DAEMON_CONFIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_DAEMON_CONFIG) == (1203), "AUDIT_DAEMON_CONFIG != 1203");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_DAEMON_CONFIG 1203
 #endif
-#if !(defined(AUDIT_SYSCALL) || (defined(HAVE_DECL_AUDIT_SYSCALL) && HAVE_DECL_AUDIT_SYSCALL))
+#if defined(AUDIT_SYSCALL) || (defined(HAVE_DECL_AUDIT_SYSCALL) && HAVE_DECL_AUDIT_SYSCALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_SYSCALL) == (1300), "AUDIT_SYSCALL != 1300");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_SYSCALL 1300
 #endif
-#if !(defined(AUDIT_FS_WATCH) || (defined(HAVE_DECL_AUDIT_FS_WATCH) && HAVE_DECL_AUDIT_FS_WATCH))
+#if defined(AUDIT_FS_WATCH) || (defined(HAVE_DECL_AUDIT_FS_WATCH) && HAVE_DECL_AUDIT_FS_WATCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_FS_WATCH) == (1301), "AUDIT_FS_WATCH != 1301");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_FS_WATCH 1301
 #endif
-#if !(defined(AUDIT_PATH) || (defined(HAVE_DECL_AUDIT_PATH) && HAVE_DECL_AUDIT_PATH))
+#if defined(AUDIT_PATH) || (defined(HAVE_DECL_AUDIT_PATH) && HAVE_DECL_AUDIT_PATH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_PATH) == (1302), "AUDIT_PATH != 1302");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_PATH 1302
 #endif
-#if !(defined(AUDIT_IPC) || (defined(HAVE_DECL_AUDIT_IPC) && HAVE_DECL_AUDIT_IPC))
+#if defined(AUDIT_IPC) || (defined(HAVE_DECL_AUDIT_IPC) && HAVE_DECL_AUDIT_IPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_IPC) == (1303), "AUDIT_IPC != 1303");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_IPC 1303
 #endif
-#if !(defined(AUDIT_SOCKETCALL) || (defined(HAVE_DECL_AUDIT_SOCKETCALL) && HAVE_DECL_AUDIT_SOCKETCALL))
+#if defined(AUDIT_SOCKETCALL) || (defined(HAVE_DECL_AUDIT_SOCKETCALL) && HAVE_DECL_AUDIT_SOCKETCALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_SOCKETCALL) == (1304), "AUDIT_SOCKETCALL != 1304");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_SOCKETCALL 1304
 #endif
-#if !(defined(AUDIT_CONFIG_CHANGE) || (defined(HAVE_DECL_AUDIT_CONFIG_CHANGE) && HAVE_DECL_AUDIT_CONFIG_CHANGE))
+#if defined(AUDIT_CONFIG_CHANGE) || (defined(HAVE_DECL_AUDIT_CONFIG_CHANGE) && HAVE_DECL_AUDIT_CONFIG_CHANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_CONFIG_CHANGE) == (1305), "AUDIT_CONFIG_CHANGE != 1305");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_CONFIG_CHANGE 1305
 #endif
-#if !(defined(AUDIT_SOCKADDR) || (defined(HAVE_DECL_AUDIT_SOCKADDR) && HAVE_DECL_AUDIT_SOCKADDR))
+#if defined(AUDIT_SOCKADDR) || (defined(HAVE_DECL_AUDIT_SOCKADDR) && HAVE_DECL_AUDIT_SOCKADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_SOCKADDR) == (1306), "AUDIT_SOCKADDR != 1306");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_SOCKADDR 1306
 #endif
-#if !(defined(AUDIT_CWD) || (defined(HAVE_DECL_AUDIT_CWD) && HAVE_DECL_AUDIT_CWD))
+#if defined(AUDIT_CWD) || (defined(HAVE_DECL_AUDIT_CWD) && HAVE_DECL_AUDIT_CWD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_CWD) == (1307), "AUDIT_CWD != 1307");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_CWD 1307
 #endif
-#if !(defined(AUDIT_EXECVE) || (defined(HAVE_DECL_AUDIT_EXECVE) && HAVE_DECL_AUDIT_EXECVE))
+#if defined(AUDIT_EXECVE) || (defined(HAVE_DECL_AUDIT_EXECVE) && HAVE_DECL_AUDIT_EXECVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_EXECVE) == (1309), "AUDIT_EXECVE != 1309");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_EXECVE 1309
 #endif
-#if !(defined(AUDIT_IPC_SET_PERM) || (defined(HAVE_DECL_AUDIT_IPC_SET_PERM) && HAVE_DECL_AUDIT_IPC_SET_PERM))
+#if defined(AUDIT_IPC_SET_PERM) || (defined(HAVE_DECL_AUDIT_IPC_SET_PERM) && HAVE_DECL_AUDIT_IPC_SET_PERM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_IPC_SET_PERM) == (1311), "AUDIT_IPC_SET_PERM != 1311");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_IPC_SET_PERM 1311
 #endif
-#if !(defined(AUDIT_MQ_OPEN) || (defined(HAVE_DECL_AUDIT_MQ_OPEN) && HAVE_DECL_AUDIT_MQ_OPEN))
+#if defined(AUDIT_MQ_OPEN) || (defined(HAVE_DECL_AUDIT_MQ_OPEN) && HAVE_DECL_AUDIT_MQ_OPEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MQ_OPEN) == (1312), "AUDIT_MQ_OPEN != 1312");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MQ_OPEN 1312
 #endif
-#if !(defined(AUDIT_MQ_SENDRECV) || (defined(HAVE_DECL_AUDIT_MQ_SENDRECV) && HAVE_DECL_AUDIT_MQ_SENDRECV))
+#if defined(AUDIT_MQ_SENDRECV) || (defined(HAVE_DECL_AUDIT_MQ_SENDRECV) && HAVE_DECL_AUDIT_MQ_SENDRECV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MQ_SENDRECV) == (1313), "AUDIT_MQ_SENDRECV != 1313");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MQ_SENDRECV 1313
 #endif
-#if !(defined(AUDIT_MQ_NOTIFY) || (defined(HAVE_DECL_AUDIT_MQ_NOTIFY) && HAVE_DECL_AUDIT_MQ_NOTIFY))
+#if defined(AUDIT_MQ_NOTIFY) || (defined(HAVE_DECL_AUDIT_MQ_NOTIFY) && HAVE_DECL_AUDIT_MQ_NOTIFY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MQ_NOTIFY) == (1314), "AUDIT_MQ_NOTIFY != 1314");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MQ_NOTIFY 1314
 #endif
-#if !(defined(AUDIT_MQ_GETSETATTR) || (defined(HAVE_DECL_AUDIT_MQ_GETSETATTR) && HAVE_DECL_AUDIT_MQ_GETSETATTR))
+#if defined(AUDIT_MQ_GETSETATTR) || (defined(HAVE_DECL_AUDIT_MQ_GETSETATTR) && HAVE_DECL_AUDIT_MQ_GETSETATTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MQ_GETSETATTR) == (1315), "AUDIT_MQ_GETSETATTR != 1315");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MQ_GETSETATTR 1315
 #endif
-#if !(defined(AUDIT_KERNEL_OTHER) || (defined(HAVE_DECL_AUDIT_KERNEL_OTHER) && HAVE_DECL_AUDIT_KERNEL_OTHER))
+#if defined(AUDIT_KERNEL_OTHER) || (defined(HAVE_DECL_AUDIT_KERNEL_OTHER) && HAVE_DECL_AUDIT_KERNEL_OTHER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_KERNEL_OTHER) == (1316), "AUDIT_KERNEL_OTHER != 1316");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_KERNEL_OTHER 1316
 #endif
-#if !(defined(AUDIT_FD_PAIR) || (defined(HAVE_DECL_AUDIT_FD_PAIR) && HAVE_DECL_AUDIT_FD_PAIR))
+#if defined(AUDIT_FD_PAIR) || (defined(HAVE_DECL_AUDIT_FD_PAIR) && HAVE_DECL_AUDIT_FD_PAIR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_FD_PAIR) == (1317), "AUDIT_FD_PAIR != 1317");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_FD_PAIR 1317
 #endif
-#if !(defined(AUDIT_OBJ_PID) || (defined(HAVE_DECL_AUDIT_OBJ_PID) && HAVE_DECL_AUDIT_OBJ_PID))
+#if defined(AUDIT_OBJ_PID) || (defined(HAVE_DECL_AUDIT_OBJ_PID) && HAVE_DECL_AUDIT_OBJ_PID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_OBJ_PID) == (1318), "AUDIT_OBJ_PID != 1318");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_OBJ_PID 1318
 #endif
-#if !(defined(AUDIT_TTY) || (defined(HAVE_DECL_AUDIT_TTY) && HAVE_DECL_AUDIT_TTY))
+#if defined(AUDIT_TTY) || (defined(HAVE_DECL_AUDIT_TTY) && HAVE_DECL_AUDIT_TTY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_TTY) == (1319), "AUDIT_TTY != 1319");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_TTY 1319
 #endif
-#if !(defined(AUDIT_EOE) || (defined(HAVE_DECL_AUDIT_EOE) && HAVE_DECL_AUDIT_EOE))
+#if defined(AUDIT_EOE) || (defined(HAVE_DECL_AUDIT_EOE) && HAVE_DECL_AUDIT_EOE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_EOE) == (1320), "AUDIT_EOE != 1320");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_EOE 1320
 #endif
-#if !(defined(AUDIT_BPRM_FCAPS) || (defined(HAVE_DECL_AUDIT_BPRM_FCAPS) && HAVE_DECL_AUDIT_BPRM_FCAPS))
+#if defined(AUDIT_BPRM_FCAPS) || (defined(HAVE_DECL_AUDIT_BPRM_FCAPS) && HAVE_DECL_AUDIT_BPRM_FCAPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_BPRM_FCAPS) == (1321), "AUDIT_BPRM_FCAPS != 1321");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_BPRM_FCAPS 1321
 #endif
-#if !(defined(AUDIT_CAPSET) || (defined(HAVE_DECL_AUDIT_CAPSET) && HAVE_DECL_AUDIT_CAPSET))
+#if defined(AUDIT_CAPSET) || (defined(HAVE_DECL_AUDIT_CAPSET) && HAVE_DECL_AUDIT_CAPSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_CAPSET) == (1322), "AUDIT_CAPSET != 1322");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_CAPSET 1322
 #endif
-#if !(defined(AUDIT_MMAP) || (defined(HAVE_DECL_AUDIT_MMAP) && HAVE_DECL_AUDIT_MMAP))
+#if defined(AUDIT_MMAP) || (defined(HAVE_DECL_AUDIT_MMAP) && HAVE_DECL_AUDIT_MMAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MMAP) == (1323), "AUDIT_MMAP != 1323");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MMAP 1323
 #endif
-#if !(defined(AUDIT_NETFILTER_PKT) || (defined(HAVE_DECL_AUDIT_NETFILTER_PKT) && HAVE_DECL_AUDIT_NETFILTER_PKT))
+#if defined(AUDIT_NETFILTER_PKT) || (defined(HAVE_DECL_AUDIT_NETFILTER_PKT) && HAVE_DECL_AUDIT_NETFILTER_PKT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_NETFILTER_PKT) == (1324), "AUDIT_NETFILTER_PKT != 1324");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_NETFILTER_PKT 1324
 #endif
-#if !(defined(AUDIT_NETFILTER_CFG) || (defined(HAVE_DECL_AUDIT_NETFILTER_CFG) && HAVE_DECL_AUDIT_NETFILTER_CFG))
+#if defined(AUDIT_NETFILTER_CFG) || (defined(HAVE_DECL_AUDIT_NETFILTER_CFG) && HAVE_DECL_AUDIT_NETFILTER_CFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_NETFILTER_CFG) == (1325), "AUDIT_NETFILTER_CFG != 1325");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_NETFILTER_CFG 1325
 #endif
-#if !(defined(AUDIT_SECCOMP) || (defined(HAVE_DECL_AUDIT_SECCOMP) && HAVE_DECL_AUDIT_SECCOMP))
+#if defined(AUDIT_SECCOMP) || (defined(HAVE_DECL_AUDIT_SECCOMP) && HAVE_DECL_AUDIT_SECCOMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_SECCOMP) == (1326), "AUDIT_SECCOMP != 1326");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_SECCOMP 1326
 #endif
-#if !(defined(AUDIT_PROCTITLE) || (defined(HAVE_DECL_AUDIT_PROCTITLE) && HAVE_DECL_AUDIT_PROCTITLE))
+#if defined(AUDIT_PROCTITLE) || (defined(HAVE_DECL_AUDIT_PROCTITLE) && HAVE_DECL_AUDIT_PROCTITLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_PROCTITLE) == (1327), "AUDIT_PROCTITLE != 1327");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_PROCTITLE 1327
 #endif
-#if !(defined(AUDIT_FEATURE_CHANGE) || (defined(HAVE_DECL_AUDIT_FEATURE_CHANGE) && HAVE_DECL_AUDIT_FEATURE_CHANGE))
+#ifndef STRACE_WORKAROUND_FOR_AUDIT_FEATURE_CHANGE
+# define STRACE_WORKAROUND_FOR_AUDIT_FEATURE_CHANGE
+# undef AUDIT_FEATURE_CHANGE
+#endif
+#if defined(AUDIT_FEATURE_CHANGE) || (defined(HAVE_DECL_AUDIT_FEATURE_CHANGE) && HAVE_DECL_AUDIT_FEATURE_CHANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_FEATURE_CHANGE) == (1328), "AUDIT_FEATURE_CHANGE != 1328");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_FEATURE_CHANGE 1328
 #endif
-#if !(defined(AUDIT_REPLACE) || (defined(HAVE_DECL_AUDIT_REPLACE) && HAVE_DECL_AUDIT_REPLACE))
+#if defined(AUDIT_REPLACE) || (defined(HAVE_DECL_AUDIT_REPLACE) && HAVE_DECL_AUDIT_REPLACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_REPLACE) == (1329), "AUDIT_REPLACE != 1329");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_REPLACE 1329
 #endif
-#if !(defined(AUDIT_KERN_MODULE) || (defined(HAVE_DECL_AUDIT_KERN_MODULE) && HAVE_DECL_AUDIT_KERN_MODULE))
+#if defined(AUDIT_KERN_MODULE) || (defined(HAVE_DECL_AUDIT_KERN_MODULE) && HAVE_DECL_AUDIT_KERN_MODULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_KERN_MODULE) == (1330), "AUDIT_KERN_MODULE != 1330");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_KERN_MODULE 1330
 #endif
-#if !(defined(AUDIT_AVC) || (defined(HAVE_DECL_AUDIT_AVC) && HAVE_DECL_AUDIT_AVC))
+#if defined(AUDIT_AVC) || (defined(HAVE_DECL_AUDIT_AVC) && HAVE_DECL_AUDIT_AVC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_AVC) == (1400), "AUDIT_AVC != 1400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_AVC 1400
 #endif
-#if !(defined(AUDIT_SELINUX_ERR) || (defined(HAVE_DECL_AUDIT_SELINUX_ERR) && HAVE_DECL_AUDIT_SELINUX_ERR))
+#if defined(AUDIT_SELINUX_ERR) || (defined(HAVE_DECL_AUDIT_SELINUX_ERR) && HAVE_DECL_AUDIT_SELINUX_ERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_SELINUX_ERR) == (1401), "AUDIT_SELINUX_ERR != 1401");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_SELINUX_ERR 1401
 #endif
-#if !(defined(AUDIT_AVC_PATH) || (defined(HAVE_DECL_AUDIT_AVC_PATH) && HAVE_DECL_AUDIT_AVC_PATH))
+#if defined(AUDIT_AVC_PATH) || (defined(HAVE_DECL_AUDIT_AVC_PATH) && HAVE_DECL_AUDIT_AVC_PATH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_AVC_PATH) == (1402), "AUDIT_AVC_PATH != 1402");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_AVC_PATH 1402
 #endif
-#if !(defined(AUDIT_MAC_POLICY_LOAD) || (defined(HAVE_DECL_AUDIT_MAC_POLICY_LOAD) && HAVE_DECL_AUDIT_MAC_POLICY_LOAD))
+#if defined(AUDIT_MAC_POLICY_LOAD) || (defined(HAVE_DECL_AUDIT_MAC_POLICY_LOAD) && HAVE_DECL_AUDIT_MAC_POLICY_LOAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_POLICY_LOAD) == (1403), "AUDIT_MAC_POLICY_LOAD != 1403");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_POLICY_LOAD 1403
 #endif
-#if !(defined(AUDIT_MAC_STATUS) || (defined(HAVE_DECL_AUDIT_MAC_STATUS) && HAVE_DECL_AUDIT_MAC_STATUS))
+#if defined(AUDIT_MAC_STATUS) || (defined(HAVE_DECL_AUDIT_MAC_STATUS) && HAVE_DECL_AUDIT_MAC_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_STATUS) == (1404), "AUDIT_MAC_STATUS != 1404");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_STATUS 1404
 #endif
-#if !(defined(AUDIT_MAC_CONFIG_CHANGE) || (defined(HAVE_DECL_AUDIT_MAC_CONFIG_CHANGE) && HAVE_DECL_AUDIT_MAC_CONFIG_CHANGE))
+#if defined(AUDIT_MAC_CONFIG_CHANGE) || (defined(HAVE_DECL_AUDIT_MAC_CONFIG_CHANGE) && HAVE_DECL_AUDIT_MAC_CONFIG_CHANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_CONFIG_CHANGE) == (1405), "AUDIT_MAC_CONFIG_CHANGE != 1405");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_CONFIG_CHANGE 1405
 #endif
-#if !(defined(AUDIT_MAC_UNLBL_ALLOW) || (defined(HAVE_DECL_AUDIT_MAC_UNLBL_ALLOW) && HAVE_DECL_AUDIT_MAC_UNLBL_ALLOW))
+#if defined(AUDIT_MAC_UNLBL_ALLOW) || (defined(HAVE_DECL_AUDIT_MAC_UNLBL_ALLOW) && HAVE_DECL_AUDIT_MAC_UNLBL_ALLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_UNLBL_ALLOW) == (1406), "AUDIT_MAC_UNLBL_ALLOW != 1406");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_UNLBL_ALLOW 1406
 #endif
-#if !(defined(AUDIT_MAC_CIPSOV4_ADD) || (defined(HAVE_DECL_AUDIT_MAC_CIPSOV4_ADD) && HAVE_DECL_AUDIT_MAC_CIPSOV4_ADD))
+#if defined(AUDIT_MAC_CIPSOV4_ADD) || (defined(HAVE_DECL_AUDIT_MAC_CIPSOV4_ADD) && HAVE_DECL_AUDIT_MAC_CIPSOV4_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_CIPSOV4_ADD) == (1407), "AUDIT_MAC_CIPSOV4_ADD != 1407");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_CIPSOV4_ADD 1407
 #endif
-#if !(defined(AUDIT_MAC_CIPSOV4_DEL) || (defined(HAVE_DECL_AUDIT_MAC_CIPSOV4_DEL) && HAVE_DECL_AUDIT_MAC_CIPSOV4_DEL))
+#if defined(AUDIT_MAC_CIPSOV4_DEL) || (defined(HAVE_DECL_AUDIT_MAC_CIPSOV4_DEL) && HAVE_DECL_AUDIT_MAC_CIPSOV4_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_CIPSOV4_DEL) == (1408), "AUDIT_MAC_CIPSOV4_DEL != 1408");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_CIPSOV4_DEL 1408
 #endif
-#if !(defined(AUDIT_MAC_MAP_ADD) || (defined(HAVE_DECL_AUDIT_MAC_MAP_ADD) && HAVE_DECL_AUDIT_MAC_MAP_ADD))
+#if defined(AUDIT_MAC_MAP_ADD) || (defined(HAVE_DECL_AUDIT_MAC_MAP_ADD) && HAVE_DECL_AUDIT_MAC_MAP_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_MAP_ADD) == (1409), "AUDIT_MAC_MAP_ADD != 1409");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_MAP_ADD 1409
 #endif
-#if !(defined(AUDIT_MAC_MAP_DEL) || (defined(HAVE_DECL_AUDIT_MAC_MAP_DEL) && HAVE_DECL_AUDIT_MAC_MAP_DEL))
+#if defined(AUDIT_MAC_MAP_DEL) || (defined(HAVE_DECL_AUDIT_MAC_MAP_DEL) && HAVE_DECL_AUDIT_MAC_MAP_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_MAP_DEL) == (1410), "AUDIT_MAC_MAP_DEL != 1410");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_MAP_DEL 1410
 #endif
-#if !(defined(AUDIT_MAC_IPSEC_ADDSA) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_ADDSA) && HAVE_DECL_AUDIT_MAC_IPSEC_ADDSA))
+#if defined(AUDIT_MAC_IPSEC_ADDSA) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_ADDSA) && HAVE_DECL_AUDIT_MAC_IPSEC_ADDSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_IPSEC_ADDSA) == (1411), "AUDIT_MAC_IPSEC_ADDSA != 1411");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_IPSEC_ADDSA 1411
 #endif
-#if !(defined(AUDIT_MAC_IPSEC_DELSA) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_DELSA) && HAVE_DECL_AUDIT_MAC_IPSEC_DELSA))
+#if defined(AUDIT_MAC_IPSEC_DELSA) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_DELSA) && HAVE_DECL_AUDIT_MAC_IPSEC_DELSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_IPSEC_DELSA) == (1412), "AUDIT_MAC_IPSEC_DELSA != 1412");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_IPSEC_DELSA 1412
 #endif
-#if !(defined(AUDIT_MAC_IPSEC_ADDSPD) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_ADDSPD) && HAVE_DECL_AUDIT_MAC_IPSEC_ADDSPD))
+#if defined(AUDIT_MAC_IPSEC_ADDSPD) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_ADDSPD) && HAVE_DECL_AUDIT_MAC_IPSEC_ADDSPD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_IPSEC_ADDSPD) == (1413), "AUDIT_MAC_IPSEC_ADDSPD != 1413");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_IPSEC_ADDSPD 1413
 #endif
-#if !(defined(AUDIT_MAC_IPSEC_DELSPD) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_DELSPD) && HAVE_DECL_AUDIT_MAC_IPSEC_DELSPD))
+#if defined(AUDIT_MAC_IPSEC_DELSPD) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_DELSPD) && HAVE_DECL_AUDIT_MAC_IPSEC_DELSPD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_IPSEC_DELSPD) == (1414), "AUDIT_MAC_IPSEC_DELSPD != 1414");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_IPSEC_DELSPD 1414
 #endif
-#if !(defined(AUDIT_MAC_IPSEC_EVENT) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_EVENT) && HAVE_DECL_AUDIT_MAC_IPSEC_EVENT))
+#if defined(AUDIT_MAC_IPSEC_EVENT) || (defined(HAVE_DECL_AUDIT_MAC_IPSEC_EVENT) && HAVE_DECL_AUDIT_MAC_IPSEC_EVENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_IPSEC_EVENT) == (1415), "AUDIT_MAC_IPSEC_EVENT != 1415");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_IPSEC_EVENT 1415
 #endif
-#if !(defined(AUDIT_MAC_UNLBL_STCADD) || (defined(HAVE_DECL_AUDIT_MAC_UNLBL_STCADD) && HAVE_DECL_AUDIT_MAC_UNLBL_STCADD))
+#if defined(AUDIT_MAC_UNLBL_STCADD) || (defined(HAVE_DECL_AUDIT_MAC_UNLBL_STCADD) && HAVE_DECL_AUDIT_MAC_UNLBL_STCADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_UNLBL_STCADD) == (1416), "AUDIT_MAC_UNLBL_STCADD != 1416");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_UNLBL_STCADD 1416
 #endif
-#if !(defined(AUDIT_MAC_UNLBL_STCDEL) || (defined(HAVE_DECL_AUDIT_MAC_UNLBL_STCDEL) && HAVE_DECL_AUDIT_MAC_UNLBL_STCDEL))
+#if defined(AUDIT_MAC_UNLBL_STCDEL) || (defined(HAVE_DECL_AUDIT_MAC_UNLBL_STCDEL) && HAVE_DECL_AUDIT_MAC_UNLBL_STCDEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_UNLBL_STCDEL) == (1417), "AUDIT_MAC_UNLBL_STCDEL != 1417");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_UNLBL_STCDEL 1417
 #endif
-#if !(defined(AUDIT_MAC_CALIPSO_ADD) || (defined(HAVE_DECL_AUDIT_MAC_CALIPSO_ADD) && HAVE_DECL_AUDIT_MAC_CALIPSO_ADD))
+#if defined(AUDIT_MAC_CALIPSO_ADD) || (defined(HAVE_DECL_AUDIT_MAC_CALIPSO_ADD) && HAVE_DECL_AUDIT_MAC_CALIPSO_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_CALIPSO_ADD) == (1418), "AUDIT_MAC_CALIPSO_ADD != 1418");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_CALIPSO_ADD 1418
 #endif
-#if !(defined(AUDIT_MAC_CALIPSO_DEL) || (defined(HAVE_DECL_AUDIT_MAC_CALIPSO_DEL) && HAVE_DECL_AUDIT_MAC_CALIPSO_DEL))
+#if defined(AUDIT_MAC_CALIPSO_DEL) || (defined(HAVE_DECL_AUDIT_MAC_CALIPSO_DEL) && HAVE_DECL_AUDIT_MAC_CALIPSO_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_MAC_CALIPSO_DEL) == (1419), "AUDIT_MAC_CALIPSO_DEL != 1419");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_MAC_CALIPSO_DEL 1419
 #endif
-#if !(defined(AUDIT_ANOM_PROMISCUOUS) || (defined(HAVE_DECL_AUDIT_ANOM_PROMISCUOUS) && HAVE_DECL_AUDIT_ANOM_PROMISCUOUS))
+#if defined(AUDIT_ANOM_PROMISCUOUS) || (defined(HAVE_DECL_AUDIT_ANOM_PROMISCUOUS) && HAVE_DECL_AUDIT_ANOM_PROMISCUOUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_ANOM_PROMISCUOUS) == (1700), "AUDIT_ANOM_PROMISCUOUS != 1700");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_ANOM_PROMISCUOUS 1700
 #endif
-#if !(defined(AUDIT_ANOM_ABEND) || (defined(HAVE_DECL_AUDIT_ANOM_ABEND) && HAVE_DECL_AUDIT_ANOM_ABEND))
+#if defined(AUDIT_ANOM_ABEND) || (defined(HAVE_DECL_AUDIT_ANOM_ABEND) && HAVE_DECL_AUDIT_ANOM_ABEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_ANOM_ABEND) == (1701), "AUDIT_ANOM_ABEND != 1701");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_ANOM_ABEND 1701
 #endif
-#if !(defined(AUDIT_ANOM_LINK) || (defined(HAVE_DECL_AUDIT_ANOM_LINK) && HAVE_DECL_AUDIT_ANOM_LINK))
+#if defined(AUDIT_ANOM_LINK) || (defined(HAVE_DECL_AUDIT_ANOM_LINK) && HAVE_DECL_AUDIT_ANOM_LINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_ANOM_LINK) == (1702), "AUDIT_ANOM_LINK != 1702");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_ANOM_LINK 1702
 #endif
-#if !(defined(AUDIT_LAST_KERN_ANOM_MSG) || (defined(HAVE_DECL_AUDIT_LAST_KERN_ANOM_MSG) && HAVE_DECL_AUDIT_LAST_KERN_ANOM_MSG))
+#if defined(AUDIT_LAST_KERN_ANOM_MSG) || (defined(HAVE_DECL_AUDIT_LAST_KERN_ANOM_MSG) && HAVE_DECL_AUDIT_LAST_KERN_ANOM_MSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_LAST_KERN_ANOM_MSG) == (1799), "AUDIT_LAST_KERN_ANOM_MSG != 1799");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_LAST_KERN_ANOM_MSG 1799
 #endif
-#if !(defined(AUDIT_INTEGRITY_DATA) || (defined(HAVE_DECL_AUDIT_INTEGRITY_DATA) && HAVE_DECL_AUDIT_INTEGRITY_DATA))
+#if defined(AUDIT_INTEGRITY_DATA) || (defined(HAVE_DECL_AUDIT_INTEGRITY_DATA) && HAVE_DECL_AUDIT_INTEGRITY_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_INTEGRITY_DATA) == (1800), "AUDIT_INTEGRITY_DATA != 1800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_INTEGRITY_DATA 1800
 #endif
-#if !(defined(AUDIT_INTEGRITY_METADATA) || (defined(HAVE_DECL_AUDIT_INTEGRITY_METADATA) && HAVE_DECL_AUDIT_INTEGRITY_METADATA))
+#if defined(AUDIT_INTEGRITY_METADATA) || (defined(HAVE_DECL_AUDIT_INTEGRITY_METADATA) && HAVE_DECL_AUDIT_INTEGRITY_METADATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_INTEGRITY_METADATA) == (1801), "AUDIT_INTEGRITY_METADATA != 1801");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_INTEGRITY_METADATA 1801
 #endif
-#if !(defined(AUDIT_INTEGRITY_STATUS) || (defined(HAVE_DECL_AUDIT_INTEGRITY_STATUS) && HAVE_DECL_AUDIT_INTEGRITY_STATUS))
+#if defined(AUDIT_INTEGRITY_STATUS) || (defined(HAVE_DECL_AUDIT_INTEGRITY_STATUS) && HAVE_DECL_AUDIT_INTEGRITY_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_INTEGRITY_STATUS) == (1802), "AUDIT_INTEGRITY_STATUS != 1802");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_INTEGRITY_STATUS 1802
 #endif
-#if !(defined(AUDIT_INTEGRITY_HASH) || (defined(HAVE_DECL_AUDIT_INTEGRITY_HASH) && HAVE_DECL_AUDIT_INTEGRITY_HASH))
+#if defined(AUDIT_INTEGRITY_HASH) || (defined(HAVE_DECL_AUDIT_INTEGRITY_HASH) && HAVE_DECL_AUDIT_INTEGRITY_HASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_INTEGRITY_HASH) == (1803), "AUDIT_INTEGRITY_HASH != 1803");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_INTEGRITY_HASH 1803
 #endif
-#if !(defined(AUDIT_INTEGRITY_PCR) || (defined(HAVE_DECL_AUDIT_INTEGRITY_PCR) && HAVE_DECL_AUDIT_INTEGRITY_PCR))
+#if defined(AUDIT_INTEGRITY_PCR) || (defined(HAVE_DECL_AUDIT_INTEGRITY_PCR) && HAVE_DECL_AUDIT_INTEGRITY_PCR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_INTEGRITY_PCR) == (1804), "AUDIT_INTEGRITY_PCR != 1804");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_INTEGRITY_PCR 1804
 #endif
-#if !(defined(AUDIT_INTEGRITY_RULE) || (defined(HAVE_DECL_AUDIT_INTEGRITY_RULE) && HAVE_DECL_AUDIT_INTEGRITY_RULE))
+#if defined(AUDIT_INTEGRITY_RULE) || (defined(HAVE_DECL_AUDIT_INTEGRITY_RULE) && HAVE_DECL_AUDIT_INTEGRITY_RULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_INTEGRITY_RULE) == (1805), "AUDIT_INTEGRITY_RULE != 1805");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_INTEGRITY_RULE 1805
 #endif
-#if !(defined(AUDIT_KERNEL) || (defined(HAVE_DECL_AUDIT_KERNEL) && HAVE_DECL_AUDIT_KERNEL))
+#if defined(AUDIT_KERNEL) || (defined(HAVE_DECL_AUDIT_KERNEL) && HAVE_DECL_AUDIT_KERNEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_KERNEL) == (2000), "AUDIT_KERNEL != 2000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_KERNEL 2000
 #endif
-#if !(defined(AUDIT_FIRST_USER_MSG2) || (defined(HAVE_DECL_AUDIT_FIRST_USER_MSG2) && HAVE_DECL_AUDIT_FIRST_USER_MSG2))
+#if defined(AUDIT_FIRST_USER_MSG2) || (defined(HAVE_DECL_AUDIT_FIRST_USER_MSG2) && HAVE_DECL_AUDIT_FIRST_USER_MSG2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_FIRST_USER_MSG2) == (2100), "AUDIT_FIRST_USER_MSG2 != 2100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_FIRST_USER_MSG2 2100
 #endif
-#if !(defined(AUDIT_LAST_USER_MSG2) || (defined(HAVE_DECL_AUDIT_LAST_USER_MSG2) && HAVE_DECL_AUDIT_LAST_USER_MSG2))
+#if defined(AUDIT_LAST_USER_MSG2) || (defined(HAVE_DECL_AUDIT_LAST_USER_MSG2) && HAVE_DECL_AUDIT_LAST_USER_MSG2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((AUDIT_LAST_USER_MSG2) == (2999), "AUDIT_LAST_USER_MSG2 != 2999");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define AUDIT_LAST_USER_MSG2 2999
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nl_audit_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nl_audit_types in mpers mode
+
+# else
 
 static
 const struct xlat nl_audit_types[] = {
@@ -335,7 +705,24 @@
  XLAT(AUDIT_NETFILTER_CFG),
  XLAT(AUDIT_SECCOMP),
  XLAT(AUDIT_PROCTITLE),
+
+#ifndef STRACE_WORKAROUND_FOR_AUDIT_FEATURE_CHANGE
+# define STRACE_WORKAROUND_FOR_AUDIT_FEATURE_CHANGE
+/*
+* Linux kernel commit v3.15-rc1~18^2~1 has changed the value
+* of AUDIT_FEATURE_CHANGE constant introduced by commit v3.13-rc1~19^2~20
+* which is of course an ABI breakage that affected 3.13 and 3.14 kernel
+* releases as well as their LTS derivatives.
+* Linux kernel commit v3.15-rc1~18^2~1 also claims that the old value
+* of AUDIT_FEATURE_CHANGE was ignored by userspace because of the established
+* convention how netlink messages for the audit system are divided into blocks.
+* Looks like the best way to handle this situation is to pretend that
+* the old value of AUDIT_FEATURE_CHANGE didn't exist.
+*/
+# undef AUDIT_FEATURE_CHANGE
+#endif
  XLAT(AUDIT_FEATURE_CHANGE),
+
  XLAT(AUDIT_REPLACE),
  XLAT(AUDIT_KERN_MODULE),
 
@@ -379,4 +766,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nl_audit_types.in b/xlat/nl_audit_types.in
index 8b52010..f03dd01 100644
--- a/xlat/nl_audit_types.in
+++ b/xlat/nl_audit_types.in
@@ -55,7 +55,24 @@
 AUDIT_NETFILTER_CFG	1325
 AUDIT_SECCOMP	1326
 AUDIT_PROCTITLE	1327
+
+#ifndef STRACE_WORKAROUND_FOR_AUDIT_FEATURE_CHANGE
+# define STRACE_WORKAROUND_FOR_AUDIT_FEATURE_CHANGE
+/*
+ * Linux kernel commit v3.15-rc1~18^2~1 has changed the value
+ * of AUDIT_FEATURE_CHANGE constant introduced by commit v3.13-rc1~19^2~20
+ * which is of course an ABI breakage that affected 3.13 and 3.14 kernel
+ * releases as well as their LTS derivatives.
+ * Linux kernel commit v3.15-rc1~18^2~1 also claims that the old value
+ * of AUDIT_FEATURE_CHANGE was ignored by userspace because of the established
+ * convention how netlink messages for the audit system are divided into blocks.
+ * Looks like the best way to handle this situation is to pretend that
+ * the old value of AUDIT_FEATURE_CHANGE didn't exist.
+ */
+# undef AUDIT_FEATURE_CHANGE
+#endif
 AUDIT_FEATURE_CHANGE	1328
+
 AUDIT_REPLACE	1329
 AUDIT_KERN_MODULE	1330
 
diff --git a/xlat/nl_crypto_types.h b/xlat/nl_crypto_types.h
index 4e15ec6..87b6a68 100644
--- a/xlat/nl_crypto_types.h
+++ b/xlat/nl_crypto_types.h
@@ -1,25 +1,51 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(CRYPTO_MSG_NEWALG) || (defined(HAVE_DECL_CRYPTO_MSG_NEWALG) && HAVE_DECL_CRYPTO_MSG_NEWALG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTO_MSG_NEWALG) == (0x10), "CRYPTO_MSG_NEWALG != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTO_MSG_NEWALG 0x10
 #endif
-#if !(defined(CRYPTO_MSG_DELALG) || (defined(HAVE_DECL_CRYPTO_MSG_DELALG) && HAVE_DECL_CRYPTO_MSG_DELALG))
+#if defined(CRYPTO_MSG_DELALG) || (defined(HAVE_DECL_CRYPTO_MSG_DELALG) && HAVE_DECL_CRYPTO_MSG_DELALG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTO_MSG_DELALG) == (0x11), "CRYPTO_MSG_DELALG != 0x11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTO_MSG_DELALG 0x11
 #endif
-#if !(defined(CRYPTO_MSG_UPDATEALG) || (defined(HAVE_DECL_CRYPTO_MSG_UPDATEALG) && HAVE_DECL_CRYPTO_MSG_UPDATEALG))
+#if defined(CRYPTO_MSG_UPDATEALG) || (defined(HAVE_DECL_CRYPTO_MSG_UPDATEALG) && HAVE_DECL_CRYPTO_MSG_UPDATEALG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTO_MSG_UPDATEALG) == (0x12), "CRYPTO_MSG_UPDATEALG != 0x12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTO_MSG_UPDATEALG 0x12
 #endif
-#if !(defined(CRYPTO_MSG_GETALG) || (defined(HAVE_DECL_CRYPTO_MSG_GETALG) && HAVE_DECL_CRYPTO_MSG_GETALG))
+#if defined(CRYPTO_MSG_GETALG) || (defined(HAVE_DECL_CRYPTO_MSG_GETALG) && HAVE_DECL_CRYPTO_MSG_GETALG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTO_MSG_GETALG) == (0x13), "CRYPTO_MSG_GETALG != 0x13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTO_MSG_GETALG 0x13
 #endif
-#if !(defined(CRYPTO_MSG_DELRNG) || (defined(HAVE_DECL_CRYPTO_MSG_DELRNG) && HAVE_DECL_CRYPTO_MSG_DELRNG))
+#if defined(CRYPTO_MSG_DELRNG) || (defined(HAVE_DECL_CRYPTO_MSG_DELRNG) && HAVE_DECL_CRYPTO_MSG_DELRNG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CRYPTO_MSG_DELRNG) == (0x14), "CRYPTO_MSG_DELRNG != 0x14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CRYPTO_MSG_DELRNG 0x14
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nl_crypto_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nl_crypto_types in mpers mode
+
+# else
 
 static
 const struct xlat nl_crypto_types[] = {
@@ -31,4 +57,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nl_netfilter_msg_types.h b/xlat/nl_netfilter_msg_types.h
index 0614af4..a92f187 100644
--- a/xlat/nl_netfilter_msg_types.h
+++ b/xlat/nl_netfilter_msg_types.h
@@ -1,12 +1,26 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nl_netfilter_msg_types.in; do not edit. */
-#if !(defined(NFNL_MSG_BATCH_BEGIN) || (defined(HAVE_DECL_NFNL_MSG_BATCH_BEGIN) && HAVE_DECL_NFNL_MSG_BATCH_BEGIN))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFNL_MSG_BATCH_BEGIN) || (defined(HAVE_DECL_NFNL_MSG_BATCH_BEGIN) && HAVE_DECL_NFNL_MSG_BATCH_BEGIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_BATCH_BEGIN) == (0x10), "NFNL_MSG_BATCH_BEGIN != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_BATCH_BEGIN 0x10
 #endif
-#if !(defined(NFNL_MSG_BATCH_END) || (defined(HAVE_DECL_NFNL_MSG_BATCH_END) && HAVE_DECL_NFNL_MSG_BATCH_END))
+#if defined(NFNL_MSG_BATCH_END) || (defined(HAVE_DECL_NFNL_MSG_BATCH_END) && HAVE_DECL_NFNL_MSG_BATCH_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_MSG_BATCH_END) == (0x11), "NFNL_MSG_BATCH_END != 0x11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_MSG_BATCH_END 0x11
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat nl_netfilter_msg_types[] = {
  XLAT(NFNL_MSG_BATCH_BEGIN),
@@ -14,4 +28,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nl_netfilter_subsys_ids.h b/xlat/nl_netfilter_subsys_ids.h
index 3d3a7ba..f6af1f3 100644
--- a/xlat/nl_netfilter_subsys_ids.h
+++ b/xlat/nl_netfilter_subsys_ids.h
@@ -1,46 +1,100 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nl_netfilter_subsys_ids.in; do not edit. */
-#if !(defined(NFNL_SUBSYS_NONE) || (defined(HAVE_DECL_NFNL_SUBSYS_NONE) && HAVE_DECL_NFNL_SUBSYS_NONE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFNL_SUBSYS_NONE) || (defined(HAVE_DECL_NFNL_SUBSYS_NONE) && HAVE_DECL_NFNL_SUBSYS_NONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_NONE) == (0), "NFNL_SUBSYS_NONE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_NONE 0
 #endif
-#if !(defined(NFNL_SUBSYS_CTNETLINK) || (defined(HAVE_DECL_NFNL_SUBSYS_CTNETLINK) && HAVE_DECL_NFNL_SUBSYS_CTNETLINK))
+#if defined(NFNL_SUBSYS_CTNETLINK) || (defined(HAVE_DECL_NFNL_SUBSYS_CTNETLINK) && HAVE_DECL_NFNL_SUBSYS_CTNETLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_CTNETLINK) == (1), "NFNL_SUBSYS_CTNETLINK != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_CTNETLINK 1
 #endif
-#if !(defined(NFNL_SUBSYS_CTNETLINK_EXP) || (defined(HAVE_DECL_NFNL_SUBSYS_CTNETLINK_EXP) && HAVE_DECL_NFNL_SUBSYS_CTNETLINK_EXP))
+#if defined(NFNL_SUBSYS_CTNETLINK_EXP) || (defined(HAVE_DECL_NFNL_SUBSYS_CTNETLINK_EXP) && HAVE_DECL_NFNL_SUBSYS_CTNETLINK_EXP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_CTNETLINK_EXP) == (2), "NFNL_SUBSYS_CTNETLINK_EXP != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_CTNETLINK_EXP 2
 #endif
-#if !(defined(NFNL_SUBSYS_QUEUE) || (defined(HAVE_DECL_NFNL_SUBSYS_QUEUE) && HAVE_DECL_NFNL_SUBSYS_QUEUE))
+#if defined(NFNL_SUBSYS_QUEUE) || (defined(HAVE_DECL_NFNL_SUBSYS_QUEUE) && HAVE_DECL_NFNL_SUBSYS_QUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_QUEUE) == (3), "NFNL_SUBSYS_QUEUE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_QUEUE 3
 #endif
-#if !(defined(NFNL_SUBSYS_ULOG) || (defined(HAVE_DECL_NFNL_SUBSYS_ULOG) && HAVE_DECL_NFNL_SUBSYS_ULOG))
+#if defined(NFNL_SUBSYS_ULOG) || (defined(HAVE_DECL_NFNL_SUBSYS_ULOG) && HAVE_DECL_NFNL_SUBSYS_ULOG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_ULOG) == (4), "NFNL_SUBSYS_ULOG != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_ULOG 4
 #endif
-#if !(defined(NFNL_SUBSYS_OSF) || (defined(HAVE_DECL_NFNL_SUBSYS_OSF) && HAVE_DECL_NFNL_SUBSYS_OSF))
+#if defined(NFNL_SUBSYS_OSF) || (defined(HAVE_DECL_NFNL_SUBSYS_OSF) && HAVE_DECL_NFNL_SUBSYS_OSF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_OSF) == (5), "NFNL_SUBSYS_OSF != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_OSF 5
 #endif
-#if !(defined(NFNL_SUBSYS_IPSET) || (defined(HAVE_DECL_NFNL_SUBSYS_IPSET) && HAVE_DECL_NFNL_SUBSYS_IPSET))
+#if defined(NFNL_SUBSYS_IPSET) || (defined(HAVE_DECL_NFNL_SUBSYS_IPSET) && HAVE_DECL_NFNL_SUBSYS_IPSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_IPSET) == (6), "NFNL_SUBSYS_IPSET != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_IPSET 6
 #endif
-#if !(defined(NFNL_SUBSYS_ACCT) || (defined(HAVE_DECL_NFNL_SUBSYS_ACCT) && HAVE_DECL_NFNL_SUBSYS_ACCT))
+#if defined(NFNL_SUBSYS_ACCT) || (defined(HAVE_DECL_NFNL_SUBSYS_ACCT) && HAVE_DECL_NFNL_SUBSYS_ACCT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_ACCT) == (7), "NFNL_SUBSYS_ACCT != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_ACCT 7
 #endif
-#if !(defined(NFNL_SUBSYS_CTNETLINK_TIMEOUT) || (defined(HAVE_DECL_NFNL_SUBSYS_CTNETLINK_TIMEOUT) && HAVE_DECL_NFNL_SUBSYS_CTNETLINK_TIMEOUT))
+#if defined(NFNL_SUBSYS_CTNETLINK_TIMEOUT) || (defined(HAVE_DECL_NFNL_SUBSYS_CTNETLINK_TIMEOUT) && HAVE_DECL_NFNL_SUBSYS_CTNETLINK_TIMEOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_CTNETLINK_TIMEOUT) == (8), "NFNL_SUBSYS_CTNETLINK_TIMEOUT != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_CTNETLINK_TIMEOUT 8
 #endif
-#if !(defined(NFNL_SUBSYS_CTHELPER) || (defined(HAVE_DECL_NFNL_SUBSYS_CTHELPER) && HAVE_DECL_NFNL_SUBSYS_CTHELPER))
+#if defined(NFNL_SUBSYS_CTHELPER) || (defined(HAVE_DECL_NFNL_SUBSYS_CTHELPER) && HAVE_DECL_NFNL_SUBSYS_CTHELPER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_CTHELPER) == (9), "NFNL_SUBSYS_CTHELPER != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_CTHELPER 9
 #endif
-#if !(defined(NFNL_SUBSYS_NFTABLES) || (defined(HAVE_DECL_NFNL_SUBSYS_NFTABLES) && HAVE_DECL_NFNL_SUBSYS_NFTABLES))
+#if defined(NFNL_SUBSYS_NFTABLES) || (defined(HAVE_DECL_NFNL_SUBSYS_NFTABLES) && HAVE_DECL_NFNL_SUBSYS_NFTABLES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_NFTABLES) == (10), "NFNL_SUBSYS_NFTABLES != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_NFTABLES 10
 #endif
-#if !(defined(NFNL_SUBSYS_NFT_COMPAT) || (defined(HAVE_DECL_NFNL_SUBSYS_NFT_COMPAT) && HAVE_DECL_NFNL_SUBSYS_NFT_COMPAT))
+#if defined(NFNL_SUBSYS_NFT_COMPAT) || (defined(HAVE_DECL_NFNL_SUBSYS_NFT_COMPAT) && HAVE_DECL_NFNL_SUBSYS_NFT_COMPAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFNL_SUBSYS_NFT_COMPAT) == (11), "NFNL_SUBSYS_NFT_COMPAT != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NFNL_SUBSYS_NFT_COMPAT 11
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nl_netfilter_subsys_ids in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nl_netfilter_subsys_ids in mpers mode
+
+# else
 
 static
 const struct xlat nl_netfilter_subsys_ids[] = {
@@ -59,4 +113,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nl_route_types.h b/xlat/nl_route_types.h
index 5f8159f..80b06fe 100644
--- a/xlat/nl_route_types.h
+++ b/xlat/nl_route_types.h
@@ -1,162 +1,376 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nl_route_types.in; do not edit. */
-#if !(defined(RTM_NEWLINK) || (defined(HAVE_DECL_RTM_NEWLINK) && HAVE_DECL_RTM_NEWLINK))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RTM_NEWLINK) || (defined(HAVE_DECL_RTM_NEWLINK) && HAVE_DECL_RTM_NEWLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWLINK) == (16), "RTM_NEWLINK != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWLINK 16
 #endif
-#if !(defined(RTM_DELLINK) || (defined(HAVE_DECL_RTM_DELLINK) && HAVE_DECL_RTM_DELLINK))
+#if defined(RTM_DELLINK) || (defined(HAVE_DECL_RTM_DELLINK) && HAVE_DECL_RTM_DELLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELLINK) == (17), "RTM_DELLINK != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELLINK 17
 #endif
-#if !(defined(RTM_GETLINK) || (defined(HAVE_DECL_RTM_GETLINK) && HAVE_DECL_RTM_GETLINK))
+#if defined(RTM_GETLINK) || (defined(HAVE_DECL_RTM_GETLINK) && HAVE_DECL_RTM_GETLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETLINK) == (18), "RTM_GETLINK != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETLINK 18
 #endif
-#if !(defined(RTM_SETLINK) || (defined(HAVE_DECL_RTM_SETLINK) && HAVE_DECL_RTM_SETLINK))
+#if defined(RTM_SETLINK) || (defined(HAVE_DECL_RTM_SETLINK) && HAVE_DECL_RTM_SETLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_SETLINK) == (19), "RTM_SETLINK != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_SETLINK 19
 #endif
-#if !(defined(RTM_NEWADDR) || (defined(HAVE_DECL_RTM_NEWADDR) && HAVE_DECL_RTM_NEWADDR))
+#if defined(RTM_NEWADDR) || (defined(HAVE_DECL_RTM_NEWADDR) && HAVE_DECL_RTM_NEWADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWADDR) == (20), "RTM_NEWADDR != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWADDR 20
 #endif
-#if !(defined(RTM_DELADDR) || (defined(HAVE_DECL_RTM_DELADDR) && HAVE_DECL_RTM_DELADDR))
+#if defined(RTM_DELADDR) || (defined(HAVE_DECL_RTM_DELADDR) && HAVE_DECL_RTM_DELADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELADDR) == (21), "RTM_DELADDR != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELADDR 21
 #endif
-#if !(defined(RTM_GETADDR) || (defined(HAVE_DECL_RTM_GETADDR) && HAVE_DECL_RTM_GETADDR))
+#if defined(RTM_GETADDR) || (defined(HAVE_DECL_RTM_GETADDR) && HAVE_DECL_RTM_GETADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETADDR) == (22), "RTM_GETADDR != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETADDR 22
 #endif
-#if !(defined(RTM_NEWROUTE) || (defined(HAVE_DECL_RTM_NEWROUTE) && HAVE_DECL_RTM_NEWROUTE))
+#if defined(RTM_NEWROUTE) || (defined(HAVE_DECL_RTM_NEWROUTE) && HAVE_DECL_RTM_NEWROUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWROUTE) == (24), "RTM_NEWROUTE != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWROUTE 24
 #endif
-#if !(defined(RTM_DELROUTE) || (defined(HAVE_DECL_RTM_DELROUTE) && HAVE_DECL_RTM_DELROUTE))
+#if defined(RTM_DELROUTE) || (defined(HAVE_DECL_RTM_DELROUTE) && HAVE_DECL_RTM_DELROUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELROUTE) == (25), "RTM_DELROUTE != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELROUTE 25
 #endif
-#if !(defined(RTM_GETROUTE) || (defined(HAVE_DECL_RTM_GETROUTE) && HAVE_DECL_RTM_GETROUTE))
+#if defined(RTM_GETROUTE) || (defined(HAVE_DECL_RTM_GETROUTE) && HAVE_DECL_RTM_GETROUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETROUTE) == (26), "RTM_GETROUTE != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETROUTE 26
 #endif
-#if !(defined(RTM_NEWNEIGH) || (defined(HAVE_DECL_RTM_NEWNEIGH) && HAVE_DECL_RTM_NEWNEIGH))
+#if defined(RTM_NEWNEIGH) || (defined(HAVE_DECL_RTM_NEWNEIGH) && HAVE_DECL_RTM_NEWNEIGH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWNEIGH) == (28), "RTM_NEWNEIGH != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWNEIGH 28
 #endif
-#if !(defined(RTM_DELNEIGH) || (defined(HAVE_DECL_RTM_DELNEIGH) && HAVE_DECL_RTM_DELNEIGH))
+#if defined(RTM_DELNEIGH) || (defined(HAVE_DECL_RTM_DELNEIGH) && HAVE_DECL_RTM_DELNEIGH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELNEIGH) == (29), "RTM_DELNEIGH != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELNEIGH 29
 #endif
-#if !(defined(RTM_GETNEIGH) || (defined(HAVE_DECL_RTM_GETNEIGH) && HAVE_DECL_RTM_GETNEIGH))
+#if defined(RTM_GETNEIGH) || (defined(HAVE_DECL_RTM_GETNEIGH) && HAVE_DECL_RTM_GETNEIGH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETNEIGH) == (30), "RTM_GETNEIGH != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETNEIGH 30
 #endif
-#if !(defined(RTM_NEWRULE) || (defined(HAVE_DECL_RTM_NEWRULE) && HAVE_DECL_RTM_NEWRULE))
+#if defined(RTM_NEWRULE) || (defined(HAVE_DECL_RTM_NEWRULE) && HAVE_DECL_RTM_NEWRULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWRULE) == (32), "RTM_NEWRULE != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWRULE 32
 #endif
-#if !(defined(RTM_DELRULE) || (defined(HAVE_DECL_RTM_DELRULE) && HAVE_DECL_RTM_DELRULE))
+#if defined(RTM_DELRULE) || (defined(HAVE_DECL_RTM_DELRULE) && HAVE_DECL_RTM_DELRULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELRULE) == (33), "RTM_DELRULE != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELRULE 33
 #endif
-#if !(defined(RTM_GETRULE) || (defined(HAVE_DECL_RTM_GETRULE) && HAVE_DECL_RTM_GETRULE))
+#if defined(RTM_GETRULE) || (defined(HAVE_DECL_RTM_GETRULE) && HAVE_DECL_RTM_GETRULE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETRULE) == (34), "RTM_GETRULE != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETRULE 34
 #endif
-#if !(defined(RTM_NEWQDISC) || (defined(HAVE_DECL_RTM_NEWQDISC) && HAVE_DECL_RTM_NEWQDISC))
+#if defined(RTM_NEWQDISC) || (defined(HAVE_DECL_RTM_NEWQDISC) && HAVE_DECL_RTM_NEWQDISC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWQDISC) == (36), "RTM_NEWQDISC != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWQDISC 36
 #endif
-#if !(defined(RTM_DELQDISC) || (defined(HAVE_DECL_RTM_DELQDISC) && HAVE_DECL_RTM_DELQDISC))
+#if defined(RTM_DELQDISC) || (defined(HAVE_DECL_RTM_DELQDISC) && HAVE_DECL_RTM_DELQDISC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELQDISC) == (37), "RTM_DELQDISC != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELQDISC 37
 #endif
-#if !(defined(RTM_GETQDISC) || (defined(HAVE_DECL_RTM_GETQDISC) && HAVE_DECL_RTM_GETQDISC))
+#if defined(RTM_GETQDISC) || (defined(HAVE_DECL_RTM_GETQDISC) && HAVE_DECL_RTM_GETQDISC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETQDISC) == (38), "RTM_GETQDISC != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETQDISC 38
 #endif
-#if !(defined(RTM_NEWTCLASS) || (defined(HAVE_DECL_RTM_NEWTCLASS) && HAVE_DECL_RTM_NEWTCLASS))
+#if defined(RTM_NEWTCLASS) || (defined(HAVE_DECL_RTM_NEWTCLASS) && HAVE_DECL_RTM_NEWTCLASS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWTCLASS) == (40), "RTM_NEWTCLASS != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWTCLASS 40
 #endif
-#if !(defined(RTM_DELTCLASS) || (defined(HAVE_DECL_RTM_DELTCLASS) && HAVE_DECL_RTM_DELTCLASS))
+#if defined(RTM_DELTCLASS) || (defined(HAVE_DECL_RTM_DELTCLASS) && HAVE_DECL_RTM_DELTCLASS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELTCLASS) == (41), "RTM_DELTCLASS != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELTCLASS 41
 #endif
-#if !(defined(RTM_GETTCLASS) || (defined(HAVE_DECL_RTM_GETTCLASS) && HAVE_DECL_RTM_GETTCLASS))
+#if defined(RTM_GETTCLASS) || (defined(HAVE_DECL_RTM_GETTCLASS) && HAVE_DECL_RTM_GETTCLASS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETTCLASS) == (42), "RTM_GETTCLASS != 42");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETTCLASS 42
 #endif
-#if !(defined(RTM_NEWTFILTER) || (defined(HAVE_DECL_RTM_NEWTFILTER) && HAVE_DECL_RTM_NEWTFILTER))
+#if defined(RTM_NEWTFILTER) || (defined(HAVE_DECL_RTM_NEWTFILTER) && HAVE_DECL_RTM_NEWTFILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWTFILTER) == (44), "RTM_NEWTFILTER != 44");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWTFILTER 44
 #endif
-#if !(defined(RTM_DELTFILTER) || (defined(HAVE_DECL_RTM_DELTFILTER) && HAVE_DECL_RTM_DELTFILTER))
+#if defined(RTM_DELTFILTER) || (defined(HAVE_DECL_RTM_DELTFILTER) && HAVE_DECL_RTM_DELTFILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELTFILTER) == (45), "RTM_DELTFILTER != 45");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELTFILTER 45
 #endif
-#if !(defined(RTM_GETTFILTER) || (defined(HAVE_DECL_RTM_GETTFILTER) && HAVE_DECL_RTM_GETTFILTER))
+#if defined(RTM_GETTFILTER) || (defined(HAVE_DECL_RTM_GETTFILTER) && HAVE_DECL_RTM_GETTFILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETTFILTER) == (46), "RTM_GETTFILTER != 46");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETTFILTER 46
 #endif
-#if !(defined(RTM_NEWACTION) || (defined(HAVE_DECL_RTM_NEWACTION) && HAVE_DECL_RTM_NEWACTION))
+#if defined(RTM_NEWACTION) || (defined(HAVE_DECL_RTM_NEWACTION) && HAVE_DECL_RTM_NEWACTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWACTION) == (48), "RTM_NEWACTION != 48");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWACTION 48
 #endif
-#if !(defined(RTM_DELACTION) || (defined(HAVE_DECL_RTM_DELACTION) && HAVE_DECL_RTM_DELACTION))
+#if defined(RTM_DELACTION) || (defined(HAVE_DECL_RTM_DELACTION) && HAVE_DECL_RTM_DELACTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELACTION) == (49), "RTM_DELACTION != 49");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELACTION 49
 #endif
-#if !(defined(RTM_GETACTION) || (defined(HAVE_DECL_RTM_GETACTION) && HAVE_DECL_RTM_GETACTION))
+#if defined(RTM_GETACTION) || (defined(HAVE_DECL_RTM_GETACTION) && HAVE_DECL_RTM_GETACTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETACTION) == (50), "RTM_GETACTION != 50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETACTION 50
 #endif
-#if !(defined(RTM_NEWPREFIX) || (defined(HAVE_DECL_RTM_NEWPREFIX) && HAVE_DECL_RTM_NEWPREFIX))
+#if defined(RTM_NEWPREFIX) || (defined(HAVE_DECL_RTM_NEWPREFIX) && HAVE_DECL_RTM_NEWPREFIX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWPREFIX) == (52), "RTM_NEWPREFIX != 52");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWPREFIX 52
 #endif
-#if !(defined(RTM_GETPREFIX) || (defined(HAVE_DECL_RTM_GETPREFIX) && HAVE_DECL_RTM_GETPREFIX))
+#if defined(RTM_GETPREFIX) || (defined(HAVE_DECL_RTM_GETPREFIX) && HAVE_DECL_RTM_GETPREFIX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETPREFIX) == (54), "RTM_GETPREFIX != 54");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETPREFIX 54
 #endif
-#if !(defined(RTM_GETMULTICAST) || (defined(HAVE_DECL_RTM_GETMULTICAST) && HAVE_DECL_RTM_GETMULTICAST))
+#if defined(RTM_GETMULTICAST) || (defined(HAVE_DECL_RTM_GETMULTICAST) && HAVE_DECL_RTM_GETMULTICAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETMULTICAST) == (58), "RTM_GETMULTICAST != 58");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETMULTICAST 58
 #endif
-#if !(defined(RTM_GETANYCAST) || (defined(HAVE_DECL_RTM_GETANYCAST) && HAVE_DECL_RTM_GETANYCAST))
+#if defined(RTM_GETANYCAST) || (defined(HAVE_DECL_RTM_GETANYCAST) && HAVE_DECL_RTM_GETANYCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETANYCAST) == (62), "RTM_GETANYCAST != 62");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETANYCAST 62
 #endif
-#if !(defined(RTM_NEWNEIGHTBL) || (defined(HAVE_DECL_RTM_NEWNEIGHTBL) && HAVE_DECL_RTM_NEWNEIGHTBL))
+#if defined(RTM_NEWNEIGHTBL) || (defined(HAVE_DECL_RTM_NEWNEIGHTBL) && HAVE_DECL_RTM_NEWNEIGHTBL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWNEIGHTBL) == (64), "RTM_NEWNEIGHTBL != 64");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWNEIGHTBL 64
 #endif
-#if !(defined(RTM_GETNEIGHTBL) || (defined(HAVE_DECL_RTM_GETNEIGHTBL) && HAVE_DECL_RTM_GETNEIGHTBL))
+#if defined(RTM_GETNEIGHTBL) || (defined(HAVE_DECL_RTM_GETNEIGHTBL) && HAVE_DECL_RTM_GETNEIGHTBL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETNEIGHTBL) == (66), "RTM_GETNEIGHTBL != 66");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETNEIGHTBL 66
 #endif
-#if !(defined(RTM_SETNEIGHTBL) || (defined(HAVE_DECL_RTM_SETNEIGHTBL) && HAVE_DECL_RTM_SETNEIGHTBL))
+#if defined(RTM_SETNEIGHTBL) || (defined(HAVE_DECL_RTM_SETNEIGHTBL) && HAVE_DECL_RTM_SETNEIGHTBL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_SETNEIGHTBL) == (67), "RTM_SETNEIGHTBL != 67");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_SETNEIGHTBL 67
 #endif
-#if !(defined(RTM_NEWNDUSEROPT) || (defined(HAVE_DECL_RTM_NEWNDUSEROPT) && HAVE_DECL_RTM_NEWNDUSEROPT))
+#if defined(RTM_NEWNDUSEROPT) || (defined(HAVE_DECL_RTM_NEWNDUSEROPT) && HAVE_DECL_RTM_NEWNDUSEROPT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWNDUSEROPT) == (68), "RTM_NEWNDUSEROPT != 68");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWNDUSEROPT 68
 #endif
-#if !(defined(RTM_NEWADDRLABEL) || (defined(HAVE_DECL_RTM_NEWADDRLABEL) && HAVE_DECL_RTM_NEWADDRLABEL))
+#if defined(RTM_NEWADDRLABEL) || (defined(HAVE_DECL_RTM_NEWADDRLABEL) && HAVE_DECL_RTM_NEWADDRLABEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWADDRLABEL) == (72), "RTM_NEWADDRLABEL != 72");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWADDRLABEL 72
 #endif
-#if !(defined(RTM_DELADDRLABEL) || (defined(HAVE_DECL_RTM_DELADDRLABEL) && HAVE_DECL_RTM_DELADDRLABEL))
+#if defined(RTM_DELADDRLABEL) || (defined(HAVE_DECL_RTM_DELADDRLABEL) && HAVE_DECL_RTM_DELADDRLABEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELADDRLABEL) == (73), "RTM_DELADDRLABEL != 73");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELADDRLABEL 73
 #endif
-#if !(defined(RTM_GETADDRLABEL) || (defined(HAVE_DECL_RTM_GETADDRLABEL) && HAVE_DECL_RTM_GETADDRLABEL))
+#if defined(RTM_GETADDRLABEL) || (defined(HAVE_DECL_RTM_GETADDRLABEL) && HAVE_DECL_RTM_GETADDRLABEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETADDRLABEL) == (74), "RTM_GETADDRLABEL != 74");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETADDRLABEL 74
 #endif
-#if !(defined(RTM_GETDCB) || (defined(HAVE_DECL_RTM_GETDCB) && HAVE_DECL_RTM_GETDCB))
+#if defined(RTM_GETDCB) || (defined(HAVE_DECL_RTM_GETDCB) && HAVE_DECL_RTM_GETDCB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETDCB) == (78), "RTM_GETDCB != 78");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETDCB 78
 #endif
-#if !(defined(RTM_SETDCB) || (defined(HAVE_DECL_RTM_SETDCB) && HAVE_DECL_RTM_SETDCB))
+#if defined(RTM_SETDCB) || (defined(HAVE_DECL_RTM_SETDCB) && HAVE_DECL_RTM_SETDCB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_SETDCB) == (79), "RTM_SETDCB != 79");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_SETDCB 79
 #endif
-#if !(defined(RTM_NEWNETCONF) || (defined(HAVE_DECL_RTM_NEWNETCONF) && HAVE_DECL_RTM_NEWNETCONF))
+#if defined(RTM_NEWNETCONF) || (defined(HAVE_DECL_RTM_NEWNETCONF) && HAVE_DECL_RTM_NEWNETCONF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWNETCONF) == (80), "RTM_NEWNETCONF != 80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWNETCONF 80
 #endif
-#if !(defined(RTM_DELNETCONF) || (defined(HAVE_DECL_RTM_DELNETCONF) && HAVE_DECL_RTM_DELNETCONF))
+#if defined(RTM_DELNETCONF) || (defined(HAVE_DECL_RTM_DELNETCONF) && HAVE_DECL_RTM_DELNETCONF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELNETCONF) == (81), "RTM_DELNETCONF != 81");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELNETCONF 81
 #endif
-#if !(defined(RTM_GETNETCONF) || (defined(HAVE_DECL_RTM_GETNETCONF) && HAVE_DECL_RTM_GETNETCONF))
+#if defined(RTM_GETNETCONF) || (defined(HAVE_DECL_RTM_GETNETCONF) && HAVE_DECL_RTM_GETNETCONF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETNETCONF) == (82), "RTM_GETNETCONF != 82");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETNETCONF 82
 #endif
-#if !(defined(RTM_NEWMDB) || (defined(HAVE_DECL_RTM_NEWMDB) && HAVE_DECL_RTM_NEWMDB))
+#if defined(RTM_NEWMDB) || (defined(HAVE_DECL_RTM_NEWMDB) && HAVE_DECL_RTM_NEWMDB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWMDB) == (84), "RTM_NEWMDB != 84");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWMDB 84
 #endif
-#if !(defined(RTM_DELMDB) || (defined(HAVE_DECL_RTM_DELMDB) && HAVE_DECL_RTM_DELMDB))
+#if defined(RTM_DELMDB) || (defined(HAVE_DECL_RTM_DELMDB) && HAVE_DECL_RTM_DELMDB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELMDB) == (85), "RTM_DELMDB != 85");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELMDB 85
 #endif
-#if !(defined(RTM_GETMDB) || (defined(HAVE_DECL_RTM_GETMDB) && HAVE_DECL_RTM_GETMDB))
+#if defined(RTM_GETMDB) || (defined(HAVE_DECL_RTM_GETMDB) && HAVE_DECL_RTM_GETMDB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETMDB) == (86), "RTM_GETMDB != 86");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETMDB 86
 #endif
-#if !(defined(RTM_NEWNSID) || (defined(HAVE_DECL_RTM_NEWNSID) && HAVE_DECL_RTM_NEWNSID))
+#if defined(RTM_NEWNSID) || (defined(HAVE_DECL_RTM_NEWNSID) && HAVE_DECL_RTM_NEWNSID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWNSID) == (88), "RTM_NEWNSID != 88");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWNSID 88
 #endif
-#if !(defined(RTM_DELNSID) || (defined(HAVE_DECL_RTM_DELNSID) && HAVE_DECL_RTM_DELNSID))
+#if defined(RTM_DELNSID) || (defined(HAVE_DECL_RTM_DELNSID) && HAVE_DECL_RTM_DELNSID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_DELNSID) == (89), "RTM_DELNSID != 89");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_DELNSID 89
 #endif
-#if !(defined(RTM_GETNSID) || (defined(HAVE_DECL_RTM_GETNSID) && HAVE_DECL_RTM_GETNSID))
+#if defined(RTM_GETNSID) || (defined(HAVE_DECL_RTM_GETNSID) && HAVE_DECL_RTM_GETNSID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETNSID) == (90), "RTM_GETNSID != 90");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETNSID 90
 #endif
-#if !(defined(RTM_NEWSTATS) || (defined(HAVE_DECL_RTM_NEWSTATS) && HAVE_DECL_RTM_NEWSTATS))
+#if defined(RTM_NEWSTATS) || (defined(HAVE_DECL_RTM_NEWSTATS) && HAVE_DECL_RTM_NEWSTATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_NEWSTATS) == (92), "RTM_NEWSTATS != 92");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_NEWSTATS 92
 #endif
-#if !(defined(RTM_GETSTATS) || (defined(HAVE_DECL_RTM_GETSTATS) && HAVE_DECL_RTM_GETSTATS))
+#if defined(RTM_GETSTATS) || (defined(HAVE_DECL_RTM_GETSTATS) && HAVE_DECL_RTM_GETSTATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTM_GETSTATS) == (94), "RTM_GETSTATS != 94");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTM_GETSTATS 94
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat nl_route_types[] = {
  XLAT(RTM_NEWLINK),
@@ -233,4 +447,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nl_selinux_types.h b/xlat/nl_selinux_types.h
index 29903bc..95ae3df 100644
--- a/xlat/nl_selinux_types.h
+++ b/xlat/nl_selinux_types.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nl_selinux_types.in; do not edit. */
-#if !(defined(SELNL_MSG_SETENFORCE) || (defined(HAVE_DECL_SELNL_MSG_SETENFORCE) && HAVE_DECL_SELNL_MSG_SETENFORCE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SELNL_MSG_SETENFORCE) || (defined(HAVE_DECL_SELNL_MSG_SETENFORCE) && HAVE_DECL_SELNL_MSG_SETENFORCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SELNL_MSG_SETENFORCE) == (0x10), "SELNL_MSG_SETENFORCE != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SELNL_MSG_SETENFORCE 0x10
 #endif
-#if !(defined(SELNL_MSG_POLICYLOAD) || (defined(HAVE_DECL_SELNL_MSG_POLICYLOAD) && HAVE_DECL_SELNL_MSG_POLICYLOAD))
+#if defined(SELNL_MSG_POLICYLOAD) || (defined(HAVE_DECL_SELNL_MSG_POLICYLOAD) && HAVE_DECL_SELNL_MSG_POLICYLOAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SELNL_MSG_POLICYLOAD) == (0x11), "SELNL_MSG_POLICYLOAD != 0x11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SELNL_MSG_POLICYLOAD 0x11
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nl_selinux_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nl_selinux_types in mpers mode
+
+# else
 
 static
 const struct xlat nl_selinux_types[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nl_sock_diag_types.h b/xlat/nl_sock_diag_types.h
index 2469702..d0afe44 100644
--- a/xlat/nl_sock_diag_types.h
+++ b/xlat/nl_sock_diag_types.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nl_sock_diag_types.in; do not edit. */
-#if !(defined(TCPDIAG_GETSOCK) || (defined(HAVE_DECL_TCPDIAG_GETSOCK) && HAVE_DECL_TCPDIAG_GETSOCK))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TCPDIAG_GETSOCK) || (defined(HAVE_DECL_TCPDIAG_GETSOCK) && HAVE_DECL_TCPDIAG_GETSOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCPDIAG_GETSOCK) == (18), "TCPDIAG_GETSOCK != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCPDIAG_GETSOCK 18
 #endif
-#if !(defined(DCCPDIAG_GETSOCK) || (defined(HAVE_DECL_DCCPDIAG_GETSOCK) && HAVE_DECL_DCCPDIAG_GETSOCK))
+#if defined(DCCPDIAG_GETSOCK) || (defined(HAVE_DECL_DCCPDIAG_GETSOCK) && HAVE_DECL_DCCPDIAG_GETSOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCPDIAG_GETSOCK) == (19), "DCCPDIAG_GETSOCK != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCCPDIAG_GETSOCK 19
 #endif
-#if !(defined(SOCK_DIAG_BY_FAMILY) || (defined(HAVE_DECL_SOCK_DIAG_BY_FAMILY) && HAVE_DECL_SOCK_DIAG_BY_FAMILY))
+#if defined(SOCK_DIAG_BY_FAMILY) || (defined(HAVE_DECL_SOCK_DIAG_BY_FAMILY) && HAVE_DECL_SOCK_DIAG_BY_FAMILY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOCK_DIAG_BY_FAMILY) == (20), "SOCK_DIAG_BY_FAMILY != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOCK_DIAG_BY_FAMILY 20
 #endif
-#if !(defined(SOCK_DESTROY) || (defined(HAVE_DECL_SOCK_DESTROY) && HAVE_DECL_SOCK_DESTROY))
+#if defined(SOCK_DESTROY) || (defined(HAVE_DECL_SOCK_DESTROY) && HAVE_DECL_SOCK_DESTROY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOCK_DESTROY) == (21), "SOCK_DESTROY != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOCK_DESTROY 21
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nl_sock_diag_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nl_sock_diag_types in mpers mode
+
+# else
 
 static
 const struct xlat nl_sock_diag_types[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nl_xfrm_types.h b/xlat/nl_xfrm_types.h
index 28d6d8a..47240fd 100644
--- a/xlat/nl_xfrm_types.h
+++ b/xlat/nl_xfrm_types.h
@@ -1,79 +1,177 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nl_xfrm_types.in; do not edit. */
-#if !(defined(XFRM_MSG_NEWSA) || (defined(HAVE_DECL_XFRM_MSG_NEWSA) && HAVE_DECL_XFRM_MSG_NEWSA))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(XFRM_MSG_NEWSA) || (defined(HAVE_DECL_XFRM_MSG_NEWSA) && HAVE_DECL_XFRM_MSG_NEWSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_NEWSA) == (0x10), "XFRM_MSG_NEWSA != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_NEWSA 0x10
 #endif
-#if !(defined(XFRM_MSG_DELSA) || (defined(HAVE_DECL_XFRM_MSG_DELSA) && HAVE_DECL_XFRM_MSG_DELSA))
+#if defined(XFRM_MSG_DELSA) || (defined(HAVE_DECL_XFRM_MSG_DELSA) && HAVE_DECL_XFRM_MSG_DELSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_DELSA) == (0x11), "XFRM_MSG_DELSA != 0x11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_DELSA 0x11
 #endif
-#if !(defined(XFRM_MSG_GETSA) || (defined(HAVE_DECL_XFRM_MSG_GETSA) && HAVE_DECL_XFRM_MSG_GETSA))
+#if defined(XFRM_MSG_GETSA) || (defined(HAVE_DECL_XFRM_MSG_GETSA) && HAVE_DECL_XFRM_MSG_GETSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_GETSA) == (0x12), "XFRM_MSG_GETSA != 0x12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_GETSA 0x12
 #endif
-#if !(defined(XFRM_MSG_NEWPOLICY) || (defined(HAVE_DECL_XFRM_MSG_NEWPOLICY) && HAVE_DECL_XFRM_MSG_NEWPOLICY))
+#if defined(XFRM_MSG_NEWPOLICY) || (defined(HAVE_DECL_XFRM_MSG_NEWPOLICY) && HAVE_DECL_XFRM_MSG_NEWPOLICY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_NEWPOLICY) == (0x13), "XFRM_MSG_NEWPOLICY != 0x13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_NEWPOLICY 0x13
 #endif
-#if !(defined(XFRM_MSG_DELPOLICY) || (defined(HAVE_DECL_XFRM_MSG_DELPOLICY) && HAVE_DECL_XFRM_MSG_DELPOLICY))
+#if defined(XFRM_MSG_DELPOLICY) || (defined(HAVE_DECL_XFRM_MSG_DELPOLICY) && HAVE_DECL_XFRM_MSG_DELPOLICY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_DELPOLICY) == (0x14), "XFRM_MSG_DELPOLICY != 0x14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_DELPOLICY 0x14
 #endif
-#if !(defined(XFRM_MSG_GETPOLICY) || (defined(HAVE_DECL_XFRM_MSG_GETPOLICY) && HAVE_DECL_XFRM_MSG_GETPOLICY))
+#if defined(XFRM_MSG_GETPOLICY) || (defined(HAVE_DECL_XFRM_MSG_GETPOLICY) && HAVE_DECL_XFRM_MSG_GETPOLICY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_GETPOLICY) == (0x15), "XFRM_MSG_GETPOLICY != 0x15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_GETPOLICY 0x15
 #endif
-#if !(defined(XFRM_MSG_ALLOCSPI) || (defined(HAVE_DECL_XFRM_MSG_ALLOCSPI) && HAVE_DECL_XFRM_MSG_ALLOCSPI))
+#if defined(XFRM_MSG_ALLOCSPI) || (defined(HAVE_DECL_XFRM_MSG_ALLOCSPI) && HAVE_DECL_XFRM_MSG_ALLOCSPI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_ALLOCSPI) == (0x16), "XFRM_MSG_ALLOCSPI != 0x16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_ALLOCSPI 0x16
 #endif
-#if !(defined(XFRM_MSG_ACQUIRE) || (defined(HAVE_DECL_XFRM_MSG_ACQUIRE) && HAVE_DECL_XFRM_MSG_ACQUIRE))
+#if defined(XFRM_MSG_ACQUIRE) || (defined(HAVE_DECL_XFRM_MSG_ACQUIRE) && HAVE_DECL_XFRM_MSG_ACQUIRE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_ACQUIRE) == (0x17), "XFRM_MSG_ACQUIRE != 0x17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_ACQUIRE 0x17
 #endif
-#if !(defined(XFRM_MSG_EXPIRE) || (defined(HAVE_DECL_XFRM_MSG_EXPIRE) && HAVE_DECL_XFRM_MSG_EXPIRE))
+#if defined(XFRM_MSG_EXPIRE) || (defined(HAVE_DECL_XFRM_MSG_EXPIRE) && HAVE_DECL_XFRM_MSG_EXPIRE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_EXPIRE) == (0x18), "XFRM_MSG_EXPIRE != 0x18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_EXPIRE 0x18
 #endif
-#if !(defined(XFRM_MSG_UPDPOLICY) || (defined(HAVE_DECL_XFRM_MSG_UPDPOLICY) && HAVE_DECL_XFRM_MSG_UPDPOLICY))
+#if defined(XFRM_MSG_UPDPOLICY) || (defined(HAVE_DECL_XFRM_MSG_UPDPOLICY) && HAVE_DECL_XFRM_MSG_UPDPOLICY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_UPDPOLICY) == (0x19), "XFRM_MSG_UPDPOLICY != 0x19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_UPDPOLICY 0x19
 #endif
-#if !(defined(XFRM_MSG_UPDSA) || (defined(HAVE_DECL_XFRM_MSG_UPDSA) && HAVE_DECL_XFRM_MSG_UPDSA))
+#if defined(XFRM_MSG_UPDSA) || (defined(HAVE_DECL_XFRM_MSG_UPDSA) && HAVE_DECL_XFRM_MSG_UPDSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_UPDSA) == (0x1a), "XFRM_MSG_UPDSA != 0x1a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_UPDSA 0x1a
 #endif
-#if !(defined(XFRM_MSG_POLEXPIRE) || (defined(HAVE_DECL_XFRM_MSG_POLEXPIRE) && HAVE_DECL_XFRM_MSG_POLEXPIRE))
+#if defined(XFRM_MSG_POLEXPIRE) || (defined(HAVE_DECL_XFRM_MSG_POLEXPIRE) && HAVE_DECL_XFRM_MSG_POLEXPIRE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_POLEXPIRE) == (0x1b), "XFRM_MSG_POLEXPIRE != 0x1b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_POLEXPIRE 0x1b
 #endif
-#if !(defined(XFRM_MSG_FLUSHSA) || (defined(HAVE_DECL_XFRM_MSG_FLUSHSA) && HAVE_DECL_XFRM_MSG_FLUSHSA))
+#if defined(XFRM_MSG_FLUSHSA) || (defined(HAVE_DECL_XFRM_MSG_FLUSHSA) && HAVE_DECL_XFRM_MSG_FLUSHSA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_FLUSHSA) == (0x1c), "XFRM_MSG_FLUSHSA != 0x1c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_FLUSHSA 0x1c
 #endif
-#if !(defined(XFRM_MSG_FLUSHPOLICY) || (defined(HAVE_DECL_XFRM_MSG_FLUSHPOLICY) && HAVE_DECL_XFRM_MSG_FLUSHPOLICY))
+#if defined(XFRM_MSG_FLUSHPOLICY) || (defined(HAVE_DECL_XFRM_MSG_FLUSHPOLICY) && HAVE_DECL_XFRM_MSG_FLUSHPOLICY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_FLUSHPOLICY) == (0x1d), "XFRM_MSG_FLUSHPOLICY != 0x1d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_FLUSHPOLICY 0x1d
 #endif
-#if !(defined(XFRM_MSG_NEWAE) || (defined(HAVE_DECL_XFRM_MSG_NEWAE) && HAVE_DECL_XFRM_MSG_NEWAE))
+#if defined(XFRM_MSG_NEWAE) || (defined(HAVE_DECL_XFRM_MSG_NEWAE) && HAVE_DECL_XFRM_MSG_NEWAE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_NEWAE) == (0x1e), "XFRM_MSG_NEWAE != 0x1e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_NEWAE 0x1e
 #endif
-#if !(defined(XFRM_MSG_GETAE) || (defined(HAVE_DECL_XFRM_MSG_GETAE) && HAVE_DECL_XFRM_MSG_GETAE))
+#if defined(XFRM_MSG_GETAE) || (defined(HAVE_DECL_XFRM_MSG_GETAE) && HAVE_DECL_XFRM_MSG_GETAE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_GETAE) == (0x1f), "XFRM_MSG_GETAE != 0x1f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_GETAE 0x1f
 #endif
-#if !(defined(XFRM_MSG_REPORT) || (defined(HAVE_DECL_XFRM_MSG_REPORT) && HAVE_DECL_XFRM_MSG_REPORT))
+#if defined(XFRM_MSG_REPORT) || (defined(HAVE_DECL_XFRM_MSG_REPORT) && HAVE_DECL_XFRM_MSG_REPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_REPORT) == (0x20), "XFRM_MSG_REPORT != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_REPORT 0x20
 #endif
-#if !(defined(XFRM_MSG_MIGRATE) || (defined(HAVE_DECL_XFRM_MSG_MIGRATE) && HAVE_DECL_XFRM_MSG_MIGRATE))
+#if defined(XFRM_MSG_MIGRATE) || (defined(HAVE_DECL_XFRM_MSG_MIGRATE) && HAVE_DECL_XFRM_MSG_MIGRATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_MIGRATE) == (0x21), "XFRM_MSG_MIGRATE != 0x21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_MIGRATE 0x21
 #endif
-#if !(defined(XFRM_MSG_NEWSADINFO) || (defined(HAVE_DECL_XFRM_MSG_NEWSADINFO) && HAVE_DECL_XFRM_MSG_NEWSADINFO))
+#if defined(XFRM_MSG_NEWSADINFO) || (defined(HAVE_DECL_XFRM_MSG_NEWSADINFO) && HAVE_DECL_XFRM_MSG_NEWSADINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_NEWSADINFO) == (0x22), "XFRM_MSG_NEWSADINFO != 0x22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_NEWSADINFO 0x22
 #endif
-#if !(defined(XFRM_MSG_GETSADINFO) || (defined(HAVE_DECL_XFRM_MSG_GETSADINFO) && HAVE_DECL_XFRM_MSG_GETSADINFO))
+#if defined(XFRM_MSG_GETSADINFO) || (defined(HAVE_DECL_XFRM_MSG_GETSADINFO) && HAVE_DECL_XFRM_MSG_GETSADINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_GETSADINFO) == (0x23), "XFRM_MSG_GETSADINFO != 0x23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_GETSADINFO 0x23
 #endif
-#if !(defined(XFRM_MSG_NEWSPDINFO) || (defined(HAVE_DECL_XFRM_MSG_NEWSPDINFO) && HAVE_DECL_XFRM_MSG_NEWSPDINFO))
+#if defined(XFRM_MSG_NEWSPDINFO) || (defined(HAVE_DECL_XFRM_MSG_NEWSPDINFO) && HAVE_DECL_XFRM_MSG_NEWSPDINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_NEWSPDINFO) == (0x24), "XFRM_MSG_NEWSPDINFO != 0x24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_NEWSPDINFO 0x24
 #endif
-#if !(defined(XFRM_MSG_GETSPDINFO) || (defined(HAVE_DECL_XFRM_MSG_GETSPDINFO) && HAVE_DECL_XFRM_MSG_GETSPDINFO))
+#if defined(XFRM_MSG_GETSPDINFO) || (defined(HAVE_DECL_XFRM_MSG_GETSPDINFO) && HAVE_DECL_XFRM_MSG_GETSPDINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_GETSPDINFO) == (0x25), "XFRM_MSG_GETSPDINFO != 0x25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_GETSPDINFO 0x25
 #endif
-#if !(defined(XFRM_MSG_MAPPING) || (defined(HAVE_DECL_XFRM_MSG_MAPPING) && HAVE_DECL_XFRM_MSG_MAPPING))
+#if defined(XFRM_MSG_MAPPING) || (defined(HAVE_DECL_XFRM_MSG_MAPPING) && HAVE_DECL_XFRM_MSG_MAPPING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFRM_MSG_MAPPING) == (0x26), "XFRM_MSG_MAPPING != 0x26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFRM_MSG_MAPPING 0x26
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nl_xfrm_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nl_xfrm_types in mpers mode
+
+# else
 
 static
 const struct xlat nl_xfrm_types[] = {
@@ -114,4 +212,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nlmsgerr_attrs.h b/xlat/nlmsgerr_attrs.h
index 3772db9..2d0f46f 100644
--- a/xlat/nlmsgerr_attrs.h
+++ b/xlat/nlmsgerr_attrs.h
@@ -1,22 +1,44 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NLMSGERR_ATTR_UNUSED) || (defined(HAVE_DECL_NLMSGERR_ATTR_UNUSED) && HAVE_DECL_NLMSGERR_ATTR_UNUSED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLMSGERR_ATTR_UNUSED) == (0), "NLMSGERR_ATTR_UNUSED != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLMSGERR_ATTR_UNUSED 0
 #endif
-#if !(defined(NLMSGERR_ATTR_MSG) || (defined(HAVE_DECL_NLMSGERR_ATTR_MSG) && HAVE_DECL_NLMSGERR_ATTR_MSG))
+#if defined(NLMSGERR_ATTR_MSG) || (defined(HAVE_DECL_NLMSGERR_ATTR_MSG) && HAVE_DECL_NLMSGERR_ATTR_MSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLMSGERR_ATTR_MSG) == (1), "NLMSGERR_ATTR_MSG != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLMSGERR_ATTR_MSG 1
 #endif
-#if !(defined(NLMSGERR_ATTR_OFFS) || (defined(HAVE_DECL_NLMSGERR_ATTR_OFFS) && HAVE_DECL_NLMSGERR_ATTR_OFFS))
+#if defined(NLMSGERR_ATTR_OFFS) || (defined(HAVE_DECL_NLMSGERR_ATTR_OFFS) && HAVE_DECL_NLMSGERR_ATTR_OFFS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLMSGERR_ATTR_OFFS) == (2), "NLMSGERR_ATTR_OFFS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLMSGERR_ATTR_OFFS 2
 #endif
-#if !(defined(NLMSGERR_ATTR_COOKIE) || (defined(HAVE_DECL_NLMSGERR_ATTR_COOKIE) && HAVE_DECL_NLMSGERR_ATTR_COOKIE))
+#if defined(NLMSGERR_ATTR_COOKIE) || (defined(HAVE_DECL_NLMSGERR_ATTR_COOKIE) && HAVE_DECL_NLMSGERR_ATTR_COOKIE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NLMSGERR_ATTR_COOKIE) == (3), "NLMSGERR_ATTR_COOKIE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NLMSGERR_ATTR_COOKIE 3
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nlmsgerr_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nlmsgerr_attrs in mpers mode
+
+# else
 
 static
 const struct xlat nlmsgerr_attrs[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/notifyflags.h b/xlat/notifyflags.h
index e496e8c..cccc7d1 100644
--- a/xlat/notifyflags.h
+++ b/xlat/notifyflags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/notifyflags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat notifyflags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat notifyflags in mpers mode
+
+# else
 
 static
 const struct xlat notifyflags[] = {
@@ -32,4 +38,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/nt_descriptor_types.h b/xlat/nt_descriptor_types.h
index edab7af..7527d79 100644
--- a/xlat/nt_descriptor_types.h
+++ b/xlat/nt_descriptor_types.h
@@ -1,199 +1,457 @@
 /* Generated by ./xlat/gen.sh from ./xlat/nt_descriptor_types.in; do not edit. */
-#if !(defined(NT_PRSTATUS) || (defined(HAVE_DECL_NT_PRSTATUS) && HAVE_DECL_NT_PRSTATUS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NT_PRSTATUS) || (defined(HAVE_DECL_NT_PRSTATUS) && HAVE_DECL_NT_PRSTATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PRSTATUS) == (1), "NT_PRSTATUS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PRSTATUS 1
 #endif
-#if !(defined(NT_FPREGSET) || (defined(HAVE_DECL_NT_FPREGSET) && HAVE_DECL_NT_FPREGSET))
+#if defined(NT_FPREGSET) || (defined(HAVE_DECL_NT_FPREGSET) && HAVE_DECL_NT_FPREGSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_FPREGSET) == (2), "NT_FPREGSET != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_FPREGSET 2
 #endif
-#if !(defined(NT_PRPSINFO) || (defined(HAVE_DECL_NT_PRPSINFO) && HAVE_DECL_NT_PRPSINFO))
+#if defined(NT_PRPSINFO) || (defined(HAVE_DECL_NT_PRPSINFO) && HAVE_DECL_NT_PRPSINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PRPSINFO) == (3), "NT_PRPSINFO != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PRPSINFO 3
 #endif
-#if !(defined(NT_PRXREG) || (defined(HAVE_DECL_NT_PRXREG) && HAVE_DECL_NT_PRXREG))
+#if defined(NT_PRXREG) || (defined(HAVE_DECL_NT_PRXREG) && HAVE_DECL_NT_PRXREG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PRXREG) == (4), "NT_PRXREG != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PRXREG 4
 #endif
-#if !(defined(NT_TASKSTRUCT) || (defined(HAVE_DECL_NT_TASKSTRUCT) && HAVE_DECL_NT_TASKSTRUCT))
+#if defined(NT_TASKSTRUCT) || (defined(HAVE_DECL_NT_TASKSTRUCT) && HAVE_DECL_NT_TASKSTRUCT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_TASKSTRUCT) == (4), "NT_TASKSTRUCT != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_TASKSTRUCT 4
 #endif
-#if !(defined(NT_PLATFORM) || (defined(HAVE_DECL_NT_PLATFORM) && HAVE_DECL_NT_PLATFORM))
+#if defined(NT_PLATFORM) || (defined(HAVE_DECL_NT_PLATFORM) && HAVE_DECL_NT_PLATFORM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PLATFORM) == (5), "NT_PLATFORM != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PLATFORM 5
 #endif
-#if !(defined(NT_AUXV) || (defined(HAVE_DECL_NT_AUXV) && HAVE_DECL_NT_AUXV))
+#if defined(NT_AUXV) || (defined(HAVE_DECL_NT_AUXV) && HAVE_DECL_NT_AUXV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_AUXV) == (6), "NT_AUXV != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_AUXV 6
 #endif
-#if !(defined(NT_GWINDOWS) || (defined(HAVE_DECL_NT_GWINDOWS) && HAVE_DECL_NT_GWINDOWS))
+#if defined(NT_GWINDOWS) || (defined(HAVE_DECL_NT_GWINDOWS) && HAVE_DECL_NT_GWINDOWS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_GWINDOWS) == (7), "NT_GWINDOWS != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_GWINDOWS 7
 #endif
-#if !(defined(NT_ASRS) || (defined(HAVE_DECL_NT_ASRS) && HAVE_DECL_NT_ASRS))
+#if defined(NT_ASRS) || (defined(HAVE_DECL_NT_ASRS) && HAVE_DECL_NT_ASRS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_ASRS) == (8), "NT_ASRS != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_ASRS 8
 #endif
-#if !(defined(NT_PSTATUS) || (defined(HAVE_DECL_NT_PSTATUS) && HAVE_DECL_NT_PSTATUS))
+#if defined(NT_PSTATUS) || (defined(HAVE_DECL_NT_PSTATUS) && HAVE_DECL_NT_PSTATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PSTATUS) == (10), "NT_PSTATUS != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PSTATUS 10
 #endif
-#if !(defined(NT_PSINFO) || (defined(HAVE_DECL_NT_PSINFO) && HAVE_DECL_NT_PSINFO))
+#if defined(NT_PSINFO) || (defined(HAVE_DECL_NT_PSINFO) && HAVE_DECL_NT_PSINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PSINFO) == (13), "NT_PSINFO != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PSINFO 13
 #endif
-#if !(defined(NT_PRCRED) || (defined(HAVE_DECL_NT_PRCRED) && HAVE_DECL_NT_PRCRED))
+#if defined(NT_PRCRED) || (defined(HAVE_DECL_NT_PRCRED) && HAVE_DECL_NT_PRCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PRCRED) == (14), "NT_PRCRED != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PRCRED 14
 #endif
-#if !(defined(NT_UTSNAME) || (defined(HAVE_DECL_NT_UTSNAME) && HAVE_DECL_NT_UTSNAME))
+#if defined(NT_UTSNAME) || (defined(HAVE_DECL_NT_UTSNAME) && HAVE_DECL_NT_UTSNAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_UTSNAME) == (15), "NT_UTSNAME != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_UTSNAME 15
 #endif
-#if !(defined(NT_LWPSTATUS) || (defined(HAVE_DECL_NT_LWPSTATUS) && HAVE_DECL_NT_LWPSTATUS))
+#if defined(NT_LWPSTATUS) || (defined(HAVE_DECL_NT_LWPSTATUS) && HAVE_DECL_NT_LWPSTATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_LWPSTATUS) == (16), "NT_LWPSTATUS != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_LWPSTATUS 16
 #endif
-#if !(defined(NT_LWPSINFO) || (defined(HAVE_DECL_NT_LWPSINFO) && HAVE_DECL_NT_LWPSINFO))
+#if defined(NT_LWPSINFO) || (defined(HAVE_DECL_NT_LWPSINFO) && HAVE_DECL_NT_LWPSINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_LWPSINFO) == (17), "NT_LWPSINFO != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_LWPSINFO 17
 #endif
-#if !(defined(NT_PRFPXREG) || (defined(HAVE_DECL_NT_PRFPXREG) && HAVE_DECL_NT_PRFPXREG))
+#if defined(NT_PRFPXREG) || (defined(HAVE_DECL_NT_PRFPXREG) && HAVE_DECL_NT_PRFPXREG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PRFPXREG) == (20), "NT_PRFPXREG != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PRFPXREG 20
 #endif
-#if !(defined(NT_SIGINFO) || (defined(HAVE_DECL_NT_SIGINFO) && HAVE_DECL_NT_SIGINFO))
+#if defined(NT_SIGINFO) || (defined(HAVE_DECL_NT_SIGINFO) && HAVE_DECL_NT_SIGINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_SIGINFO) == (0x53494749), "NT_SIGINFO != 0x53494749");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_SIGINFO 0x53494749
 #endif
-#if !(defined(NT_FILE) || (defined(HAVE_DECL_NT_FILE) && HAVE_DECL_NT_FILE))
+#if defined(NT_FILE) || (defined(HAVE_DECL_NT_FILE) && HAVE_DECL_NT_FILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_FILE) == (0x46494c45), "NT_FILE != 0x46494c45");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_FILE 0x46494c45
 #endif
-#if !(defined(NT_PRXFPREG) || (defined(HAVE_DECL_NT_PRXFPREG) && HAVE_DECL_NT_PRXFPREG))
+#if defined(NT_PRXFPREG) || (defined(HAVE_DECL_NT_PRXFPREG) && HAVE_DECL_NT_PRXFPREG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PRXFPREG) == (0x46e62b7f), "NT_PRXFPREG != 0x46e62b7f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PRXFPREG 0x46e62b7f
 #endif
-#if !(defined(NT_PPC_VMX) || (defined(HAVE_DECL_NT_PPC_VMX) && HAVE_DECL_NT_PPC_VMX))
+#if defined(NT_PPC_VMX) || (defined(HAVE_DECL_NT_PPC_VMX) && HAVE_DECL_NT_PPC_VMX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_VMX) == (0x100), "NT_PPC_VMX != 0x100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_VMX 0x100
 #endif
-#if !(defined(NT_PPC_SPE) || (defined(HAVE_DECL_NT_PPC_SPE) && HAVE_DECL_NT_PPC_SPE))
+#if defined(NT_PPC_SPE) || (defined(HAVE_DECL_NT_PPC_SPE) && HAVE_DECL_NT_PPC_SPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_SPE) == (0x101), "NT_PPC_SPE != 0x101");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_SPE 0x101
 #endif
-#if !(defined(NT_PPC_VSX) || (defined(HAVE_DECL_NT_PPC_VSX) && HAVE_DECL_NT_PPC_VSX))
+#if defined(NT_PPC_VSX) || (defined(HAVE_DECL_NT_PPC_VSX) && HAVE_DECL_NT_PPC_VSX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_VSX) == (0x102), "NT_PPC_VSX != 0x102");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_VSX 0x102
 #endif
-#if !(defined(NT_PPC_TAR) || (defined(HAVE_DECL_NT_PPC_TAR) && HAVE_DECL_NT_PPC_TAR))
+#if defined(NT_PPC_TAR) || (defined(HAVE_DECL_NT_PPC_TAR) && HAVE_DECL_NT_PPC_TAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_TAR) == (0x103), "NT_PPC_TAR != 0x103");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_TAR 0x103
 #endif
-#if !(defined(NT_PPC_PPR) || (defined(HAVE_DECL_NT_PPC_PPR) && HAVE_DECL_NT_PPC_PPR))
+#if defined(NT_PPC_PPR) || (defined(HAVE_DECL_NT_PPC_PPR) && HAVE_DECL_NT_PPC_PPR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_PPR) == (0x104), "NT_PPC_PPR != 0x104");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_PPR 0x104
 #endif
-#if !(defined(NT_PPC_DSCR) || (defined(HAVE_DECL_NT_PPC_DSCR) && HAVE_DECL_NT_PPC_DSCR))
+#if defined(NT_PPC_DSCR) || (defined(HAVE_DECL_NT_PPC_DSCR) && HAVE_DECL_NT_PPC_DSCR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_DSCR) == (0x105), "NT_PPC_DSCR != 0x105");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_DSCR 0x105
 #endif
-#if !(defined(NT_PPC_EBB) || (defined(HAVE_DECL_NT_PPC_EBB) && HAVE_DECL_NT_PPC_EBB))
+#if defined(NT_PPC_EBB) || (defined(HAVE_DECL_NT_PPC_EBB) && HAVE_DECL_NT_PPC_EBB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_EBB) == (0x106), "NT_PPC_EBB != 0x106");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_EBB 0x106
 #endif
-#if !(defined(NT_PPC_PMU) || (defined(HAVE_DECL_NT_PPC_PMU) && HAVE_DECL_NT_PPC_PMU))
+#if defined(NT_PPC_PMU) || (defined(HAVE_DECL_NT_PPC_PMU) && HAVE_DECL_NT_PPC_PMU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_PMU) == (0x107), "NT_PPC_PMU != 0x107");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_PMU 0x107
 #endif
-#if !(defined(NT_PPC_TM_CGPR) || (defined(HAVE_DECL_NT_PPC_TM_CGPR) && HAVE_DECL_NT_PPC_TM_CGPR))
+#if defined(NT_PPC_TM_CGPR) || (defined(HAVE_DECL_NT_PPC_TM_CGPR) && HAVE_DECL_NT_PPC_TM_CGPR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_TM_CGPR) == (0x108), "NT_PPC_TM_CGPR != 0x108");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_TM_CGPR 0x108
 #endif
-#if !(defined(NT_PPC_TM_CFPR) || (defined(HAVE_DECL_NT_PPC_TM_CFPR) && HAVE_DECL_NT_PPC_TM_CFPR))
+#if defined(NT_PPC_TM_CFPR) || (defined(HAVE_DECL_NT_PPC_TM_CFPR) && HAVE_DECL_NT_PPC_TM_CFPR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_TM_CFPR) == (0x109), "NT_PPC_TM_CFPR != 0x109");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_TM_CFPR 0x109
 #endif
-#if !(defined(NT_PPC_TM_CVMX) || (defined(HAVE_DECL_NT_PPC_TM_CVMX) && HAVE_DECL_NT_PPC_TM_CVMX))
+#if defined(NT_PPC_TM_CVMX) || (defined(HAVE_DECL_NT_PPC_TM_CVMX) && HAVE_DECL_NT_PPC_TM_CVMX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_TM_CVMX) == (0x10a), "NT_PPC_TM_CVMX != 0x10a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_TM_CVMX 0x10a
 #endif
-#if !(defined(NT_PPC_TM_CVSX) || (defined(HAVE_DECL_NT_PPC_TM_CVSX) && HAVE_DECL_NT_PPC_TM_CVSX))
+#if defined(NT_PPC_TM_CVSX) || (defined(HAVE_DECL_NT_PPC_TM_CVSX) && HAVE_DECL_NT_PPC_TM_CVSX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_TM_CVSX) == (0x10b), "NT_PPC_TM_CVSX != 0x10b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_TM_CVSX 0x10b
 #endif
-#if !(defined(NT_PPC_TM_SPR) || (defined(HAVE_DECL_NT_PPC_TM_SPR) && HAVE_DECL_NT_PPC_TM_SPR))
+#if defined(NT_PPC_TM_SPR) || (defined(HAVE_DECL_NT_PPC_TM_SPR) && HAVE_DECL_NT_PPC_TM_SPR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_TM_SPR) == (0x10c), "NT_PPC_TM_SPR != 0x10c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_TM_SPR 0x10c
 #endif
-#if !(defined(NT_PPC_TM_CTAR) || (defined(HAVE_DECL_NT_PPC_TM_CTAR) && HAVE_DECL_NT_PPC_TM_CTAR))
+#if defined(NT_PPC_TM_CTAR) || (defined(HAVE_DECL_NT_PPC_TM_CTAR) && HAVE_DECL_NT_PPC_TM_CTAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_TM_CTAR) == (0x10d), "NT_PPC_TM_CTAR != 0x10d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_TM_CTAR 0x10d
 #endif
-#if !(defined(NT_PPC_TM_CPPR) || (defined(HAVE_DECL_NT_PPC_TM_CPPR) && HAVE_DECL_NT_PPC_TM_CPPR))
+#if defined(NT_PPC_TM_CPPR) || (defined(HAVE_DECL_NT_PPC_TM_CPPR) && HAVE_DECL_NT_PPC_TM_CPPR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_TM_CPPR) == (0x10e), "NT_PPC_TM_CPPR != 0x10e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_TM_CPPR 0x10e
 #endif
-#if !(defined(NT_PPC_TM_CDSCR) || (defined(HAVE_DECL_NT_PPC_TM_CDSCR) && HAVE_DECL_NT_PPC_TM_CDSCR))
+#if defined(NT_PPC_TM_CDSCR) || (defined(HAVE_DECL_NT_PPC_TM_CDSCR) && HAVE_DECL_NT_PPC_TM_CDSCR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_TM_CDSCR) == (0x10f), "NT_PPC_TM_CDSCR != 0x10f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_TM_CDSCR 0x10f
 #endif
-#if !(defined(NT_PPC_PKEY) || (defined(HAVE_DECL_NT_PPC_PKEY) && HAVE_DECL_NT_PPC_PKEY))
+#if defined(NT_PPC_PKEY) || (defined(HAVE_DECL_NT_PPC_PKEY) && HAVE_DECL_NT_PPC_PKEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_PPC_PKEY) == (0x110), "NT_PPC_PKEY != 0x110");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_PPC_PKEY 0x110
 #endif
-#if !(defined(NT_386_TLS) || (defined(HAVE_DECL_NT_386_TLS) && HAVE_DECL_NT_386_TLS))
+#if defined(NT_386_TLS) || (defined(HAVE_DECL_NT_386_TLS) && HAVE_DECL_NT_386_TLS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_386_TLS) == (0x200), "NT_386_TLS != 0x200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_386_TLS 0x200
 #endif
-#if !(defined(NT_386_IOPERM) || (defined(HAVE_DECL_NT_386_IOPERM) && HAVE_DECL_NT_386_IOPERM))
+#if defined(NT_386_IOPERM) || (defined(HAVE_DECL_NT_386_IOPERM) && HAVE_DECL_NT_386_IOPERM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_386_IOPERM) == (0x201), "NT_386_IOPERM != 0x201");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_386_IOPERM 0x201
 #endif
-#if !(defined(NT_X86_XSTATE) || (defined(HAVE_DECL_NT_X86_XSTATE) && HAVE_DECL_NT_X86_XSTATE))
+#if defined(NT_X86_XSTATE) || (defined(HAVE_DECL_NT_X86_XSTATE) && HAVE_DECL_NT_X86_XSTATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_X86_XSTATE) == (0x202), "NT_X86_XSTATE != 0x202");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_X86_XSTATE 0x202
 #endif
-#if !(defined(NT_S390_HIGH_GPRS) || (defined(HAVE_DECL_NT_S390_HIGH_GPRS) && HAVE_DECL_NT_S390_HIGH_GPRS))
+#if defined(NT_S390_HIGH_GPRS) || (defined(HAVE_DECL_NT_S390_HIGH_GPRS) && HAVE_DECL_NT_S390_HIGH_GPRS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_HIGH_GPRS) == (0x300), "NT_S390_HIGH_GPRS != 0x300");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_HIGH_GPRS 0x300
 #endif
-#if !(defined(NT_S390_TIMER) || (defined(HAVE_DECL_NT_S390_TIMER) && HAVE_DECL_NT_S390_TIMER))
+#if defined(NT_S390_TIMER) || (defined(HAVE_DECL_NT_S390_TIMER) && HAVE_DECL_NT_S390_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_TIMER) == (0x301), "NT_S390_TIMER != 0x301");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_TIMER 0x301
 #endif
-#if !(defined(NT_S390_TODCMP) || (defined(HAVE_DECL_NT_S390_TODCMP) && HAVE_DECL_NT_S390_TODCMP))
+#if defined(NT_S390_TODCMP) || (defined(HAVE_DECL_NT_S390_TODCMP) && HAVE_DECL_NT_S390_TODCMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_TODCMP) == (0x302), "NT_S390_TODCMP != 0x302");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_TODCMP 0x302
 #endif
-#if !(defined(NT_S390_TODPREG) || (defined(HAVE_DECL_NT_S390_TODPREG) && HAVE_DECL_NT_S390_TODPREG))
+#if defined(NT_S390_TODPREG) || (defined(HAVE_DECL_NT_S390_TODPREG) && HAVE_DECL_NT_S390_TODPREG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_TODPREG) == (0x303), "NT_S390_TODPREG != 0x303");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_TODPREG 0x303
 #endif
-#if !(defined(NT_S390_CTRS) || (defined(HAVE_DECL_NT_S390_CTRS) && HAVE_DECL_NT_S390_CTRS))
+#if defined(NT_S390_CTRS) || (defined(HAVE_DECL_NT_S390_CTRS) && HAVE_DECL_NT_S390_CTRS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_CTRS) == (0x304), "NT_S390_CTRS != 0x304");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_CTRS 0x304
 #endif
-#if !(defined(NT_S390_PREFIX) || (defined(HAVE_DECL_NT_S390_PREFIX) && HAVE_DECL_NT_S390_PREFIX))
+#if defined(NT_S390_PREFIX) || (defined(HAVE_DECL_NT_S390_PREFIX) && HAVE_DECL_NT_S390_PREFIX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_PREFIX) == (0x305), "NT_S390_PREFIX != 0x305");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_PREFIX 0x305
 #endif
-#if !(defined(NT_S390_LAST_BREAK) || (defined(HAVE_DECL_NT_S390_LAST_BREAK) && HAVE_DECL_NT_S390_LAST_BREAK))
+#if defined(NT_S390_LAST_BREAK) || (defined(HAVE_DECL_NT_S390_LAST_BREAK) && HAVE_DECL_NT_S390_LAST_BREAK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_LAST_BREAK) == (0x306), "NT_S390_LAST_BREAK != 0x306");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_LAST_BREAK 0x306
 #endif
-#if !(defined(NT_S390_SYSTEM_CALL) || (defined(HAVE_DECL_NT_S390_SYSTEM_CALL) && HAVE_DECL_NT_S390_SYSTEM_CALL))
+#if defined(NT_S390_SYSTEM_CALL) || (defined(HAVE_DECL_NT_S390_SYSTEM_CALL) && HAVE_DECL_NT_S390_SYSTEM_CALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_SYSTEM_CALL) == (0x307), "NT_S390_SYSTEM_CALL != 0x307");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_SYSTEM_CALL 0x307
 #endif
-#if !(defined(NT_S390_TDB) || (defined(HAVE_DECL_NT_S390_TDB) && HAVE_DECL_NT_S390_TDB))
+#if defined(NT_S390_TDB) || (defined(HAVE_DECL_NT_S390_TDB) && HAVE_DECL_NT_S390_TDB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_TDB) == (0x308), "NT_S390_TDB != 0x308");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_TDB 0x308
 #endif
-#if !(defined(NT_S390_VXRS_LOW) || (defined(HAVE_DECL_NT_S390_VXRS_LOW) && HAVE_DECL_NT_S390_VXRS_LOW))
+#if defined(NT_S390_VXRS_LOW) || (defined(HAVE_DECL_NT_S390_VXRS_LOW) && HAVE_DECL_NT_S390_VXRS_LOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_VXRS_LOW) == (0x309), "NT_S390_VXRS_LOW != 0x309");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_VXRS_LOW 0x309
 #endif
-#if !(defined(NT_S390_VXRS_HIGH) || (defined(HAVE_DECL_NT_S390_VXRS_HIGH) && HAVE_DECL_NT_S390_VXRS_HIGH))
+#if defined(NT_S390_VXRS_HIGH) || (defined(HAVE_DECL_NT_S390_VXRS_HIGH) && HAVE_DECL_NT_S390_VXRS_HIGH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_VXRS_HIGH) == (0x30a), "NT_S390_VXRS_HIGH != 0x30a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_VXRS_HIGH 0x30a
 #endif
-#if !(defined(NT_S390_GS_CB) || (defined(HAVE_DECL_NT_S390_GS_CB) && HAVE_DECL_NT_S390_GS_CB))
+#if defined(NT_S390_GS_CB) || (defined(HAVE_DECL_NT_S390_GS_CB) && HAVE_DECL_NT_S390_GS_CB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_GS_CB) == (0x30b), "NT_S390_GS_CB != 0x30b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_GS_CB 0x30b
 #endif
-#if !(defined(NT_S390_GS_BC) || (defined(HAVE_DECL_NT_S390_GS_BC) && HAVE_DECL_NT_S390_GS_BC))
+#if defined(NT_S390_GS_BC) || (defined(HAVE_DECL_NT_S390_GS_BC) && HAVE_DECL_NT_S390_GS_BC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_GS_BC) == (0x30c), "NT_S390_GS_BC != 0x30c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_GS_BC 0x30c
 #endif
-#if !(defined(NT_S390_RI_CB) || (defined(HAVE_DECL_NT_S390_RI_CB) && HAVE_DECL_NT_S390_RI_CB))
+#if defined(NT_S390_RI_CB) || (defined(HAVE_DECL_NT_S390_RI_CB) && HAVE_DECL_NT_S390_RI_CB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_S390_RI_CB) == (0x30d), "NT_S390_RI_CB != 0x30d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_S390_RI_CB 0x30d
 #endif
-#if !(defined(NT_ARM_VFP) || (defined(HAVE_DECL_NT_ARM_VFP) && HAVE_DECL_NT_ARM_VFP))
+#if defined(NT_ARM_VFP) || (defined(HAVE_DECL_NT_ARM_VFP) && HAVE_DECL_NT_ARM_VFP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_ARM_VFP) == (0x400), "NT_ARM_VFP != 0x400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_ARM_VFP 0x400
 #endif
-#if !(defined(NT_ARM_TLS) || (defined(HAVE_DECL_NT_ARM_TLS) && HAVE_DECL_NT_ARM_TLS))
+#if defined(NT_ARM_TLS) || (defined(HAVE_DECL_NT_ARM_TLS) && HAVE_DECL_NT_ARM_TLS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_ARM_TLS) == (0x401), "NT_ARM_TLS != 0x401");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_ARM_TLS 0x401
 #endif
-#if !(defined(NT_ARM_HW_BREAK) || (defined(HAVE_DECL_NT_ARM_HW_BREAK) && HAVE_DECL_NT_ARM_HW_BREAK))
+#if defined(NT_ARM_HW_BREAK) || (defined(HAVE_DECL_NT_ARM_HW_BREAK) && HAVE_DECL_NT_ARM_HW_BREAK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_ARM_HW_BREAK) == (0x402), "NT_ARM_HW_BREAK != 0x402");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_ARM_HW_BREAK 0x402
 #endif
-#if !(defined(NT_ARM_HW_WATCH) || (defined(HAVE_DECL_NT_ARM_HW_WATCH) && HAVE_DECL_NT_ARM_HW_WATCH))
+#if defined(NT_ARM_HW_WATCH) || (defined(HAVE_DECL_NT_ARM_HW_WATCH) && HAVE_DECL_NT_ARM_HW_WATCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_ARM_HW_WATCH) == (0x403), "NT_ARM_HW_WATCH != 0x403");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_ARM_HW_WATCH 0x403
 #endif
-#if !(defined(NT_ARM_SYSTEM_CALL) || (defined(HAVE_DECL_NT_ARM_SYSTEM_CALL) && HAVE_DECL_NT_ARM_SYSTEM_CALL))
+#if defined(NT_ARM_SYSTEM_CALL) || (defined(HAVE_DECL_NT_ARM_SYSTEM_CALL) && HAVE_DECL_NT_ARM_SYSTEM_CALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_ARM_SYSTEM_CALL) == (0x404), "NT_ARM_SYSTEM_CALL != 0x404");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_ARM_SYSTEM_CALL 0x404
 #endif
-#if !(defined(NT_ARM_SVE) || (defined(HAVE_DECL_NT_ARM_SVE) && HAVE_DECL_NT_ARM_SVE))
+#if defined(NT_ARM_SVE) || (defined(HAVE_DECL_NT_ARM_SVE) && HAVE_DECL_NT_ARM_SVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_ARM_SVE) == (0x405), "NT_ARM_SVE != 0x405");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_ARM_SVE 0x405
 #endif
-#if !(defined(NT_METAG_CBUF) || (defined(HAVE_DECL_NT_METAG_CBUF) && HAVE_DECL_NT_METAG_CBUF))
+#if defined(NT_METAG_CBUF) || (defined(HAVE_DECL_NT_METAG_CBUF) && HAVE_DECL_NT_METAG_CBUF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_METAG_CBUF) == (0x500), "NT_METAG_CBUF != 0x500");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_METAG_CBUF 0x500
 #endif
-#if !(defined(NT_METAG_RPIPE) || (defined(HAVE_DECL_NT_METAG_RPIPE) && HAVE_DECL_NT_METAG_RPIPE))
+#if defined(NT_METAG_RPIPE) || (defined(HAVE_DECL_NT_METAG_RPIPE) && HAVE_DECL_NT_METAG_RPIPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_METAG_RPIPE) == (0x501), "NT_METAG_RPIPE != 0x501");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_METAG_RPIPE 0x501
 #endif
-#if !(defined(NT_METAG_TLS) || (defined(HAVE_DECL_NT_METAG_TLS) && HAVE_DECL_NT_METAG_TLS))
+#if defined(NT_METAG_TLS) || (defined(HAVE_DECL_NT_METAG_TLS) && HAVE_DECL_NT_METAG_TLS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_METAG_TLS) == (0x502), "NT_METAG_TLS != 0x502");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_METAG_TLS 0x502
 #endif
-#if !(defined(NT_ARC_V2) || (defined(HAVE_DECL_NT_ARC_V2) && HAVE_DECL_NT_ARC_V2))
+#if defined(NT_ARC_V2) || (defined(HAVE_DECL_NT_ARC_V2) && HAVE_DECL_NT_ARC_V2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NT_ARC_V2) == (0x600), "NT_ARC_V2 != 0x600");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NT_ARC_V2 0x600
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat nt_descriptor_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat nt_descriptor_types in mpers mode
+
+# else
 
 static
 const struct xlat nt_descriptor_types[] = {
@@ -263,4 +521,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/numa_node.h b/xlat/numa_node.h
new file mode 100644
index 0000000..0d16745
--- /dev/null
+++ b/xlat/numa_node.h
@@ -0,0 +1,30 @@
+/* Generated by ./xlat/gen.sh from ./xlat/numa_node.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NUMA_NO_NODE) || (defined(HAVE_DECL_NUMA_NO_NODE) && HAVE_DECL_NUMA_NO_NODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NUMA_NO_NODE) == (-1U), "NUMA_NO_NODE != -1U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NUMA_NO_NODE -1U
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat numa_node in mpers mode
+
+# else
+
+static
+const struct xlat numa_node[] = {
+ XLAT(NUMA_NO_NODE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/numa_node.in b/xlat/numa_node.in
new file mode 100644
index 0000000..414b35a
--- /dev/null
+++ b/xlat/numa_node.in
@@ -0,0 +1 @@
+NUMA_NO_NODE -1U
diff --git a/xlat/open_access_modes.h b/xlat/open_access_modes.h
index 8b11517..7577851 100644
--- a/xlat/open_access_modes.h
+++ b/xlat/open_access_modes.h
@@ -1,6 +1,12 @@
 /* Generated by ./xlat/gen.sh from ./xlat/open_access_modes.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat open_access_modes[] = {
 #if defined(O_RDONLY) || (defined(HAVE_DECL_O_RDONLY) && HAVE_DECL_O_RDONLY)
@@ -18,4 +24,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/open_mode_flags.h b/xlat/open_mode_flags.h
index 1dfb186..126ddd7 100644
--- a/xlat/open_mode_flags.h
+++ b/xlat/open_mode_flags.h
@@ -1,8 +1,14 @@
 /* Generated by ./xlat/gen.sh from ./xlat/open_mode_flags.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
 #if defined(O_NDELAY) && (O_NDELAY != O_NONBLOCK)
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat open_mode_flags[] = {
 #if defined(O_CREAT) || (defined(HAVE_DECL_O_CREAT) && HAVE_DECL_O_CREAT)
@@ -123,4 +129,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/packet_diag_attrs.h b/xlat/packet_diag_attrs.h
index 83bf88a..90253b8 100644
--- a/xlat/packet_diag_attrs.h
+++ b/xlat/packet_diag_attrs.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/packet_diag_attrs.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat packet_diag_attrs in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat packet_diag_attrs in mpers mode
+
+# else
 
 static
 const struct xlat packet_diag_attrs[] = {
@@ -19,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/packet_diag_info_flags.h b/xlat/packet_diag_info_flags.h
index b7a1a7b..8a083da 100644
--- a/xlat/packet_diag_info_flags.h
+++ b/xlat/packet_diag_info_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/packet_diag_info_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat packet_diag_info_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat packet_diag_info_flags in mpers mode
+
+# else
 
 static
 const struct xlat packet_diag_info_flags[] = {
@@ -26,4 +32,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/packet_diag_show.h b/xlat/packet_diag_show.h
index 76d84fa..40df973 100644
--- a/xlat/packet_diag_show.h
+++ b/xlat/packet_diag_show.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/packet_diag_show.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat packet_diag_show in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat packet_diag_show in mpers mode
+
+# else
 
 static
 const struct xlat packet_diag_show[] = {
@@ -29,4 +35,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/packet_mreq_type.h b/xlat/packet_mreq_type.h
index 012d3e7..c1448d3 100644
--- a/xlat/packet_mreq_type.h
+++ b/xlat/packet_mreq_type.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/packet_mreq_type.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat packet_mreq_type in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat packet_mreq_type in mpers mode
+
+# else
 
 static
 const struct xlat packet_mreq_type[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_attr_size.h b/xlat/perf_attr_size.h
index ecebb4d..fa876d3 100644
--- a/xlat/perf_attr_size.h
+++ b/xlat/perf_attr_size.h
@@ -1,28 +1,58 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_attr_size.in; do not edit. */
-#if !(defined(PERF_ATTR_SIZE_VER0) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER0) && HAVE_DECL_PERF_ATTR_SIZE_VER0))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_ATTR_SIZE_VER0) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER0) && HAVE_DECL_PERF_ATTR_SIZE_VER0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_ATTR_SIZE_VER0) == (64), "PERF_ATTR_SIZE_VER0 != 64");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_ATTR_SIZE_VER0 64
 #endif
-#if !(defined(PERF_ATTR_SIZE_VER1) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER1) && HAVE_DECL_PERF_ATTR_SIZE_VER1))
+#if defined(PERF_ATTR_SIZE_VER1) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER1) && HAVE_DECL_PERF_ATTR_SIZE_VER1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_ATTR_SIZE_VER1) == (72), "PERF_ATTR_SIZE_VER1 != 72");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_ATTR_SIZE_VER1 72
 #endif
-#if !(defined(PERF_ATTR_SIZE_VER2) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER2) && HAVE_DECL_PERF_ATTR_SIZE_VER2))
+#if defined(PERF_ATTR_SIZE_VER2) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER2) && HAVE_DECL_PERF_ATTR_SIZE_VER2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_ATTR_SIZE_VER2) == (80), "PERF_ATTR_SIZE_VER2 != 80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_ATTR_SIZE_VER2 80
 #endif
-#if !(defined(PERF_ATTR_SIZE_VER3) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER3) && HAVE_DECL_PERF_ATTR_SIZE_VER3))
+#if defined(PERF_ATTR_SIZE_VER3) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER3) && HAVE_DECL_PERF_ATTR_SIZE_VER3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_ATTR_SIZE_VER3) == (96), "PERF_ATTR_SIZE_VER3 != 96");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_ATTR_SIZE_VER3 96
 #endif
-#if !(defined(PERF_ATTR_SIZE_VER4) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER4) && HAVE_DECL_PERF_ATTR_SIZE_VER4))
+#if defined(PERF_ATTR_SIZE_VER4) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER4) && HAVE_DECL_PERF_ATTR_SIZE_VER4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_ATTR_SIZE_VER4) == (104), "PERF_ATTR_SIZE_VER4 != 104");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_ATTR_SIZE_VER4 104
 #endif
-#if !(defined(PERF_ATTR_SIZE_VER5) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER5) && HAVE_DECL_PERF_ATTR_SIZE_VER5))
+#if defined(PERF_ATTR_SIZE_VER5) || (defined(HAVE_DECL_PERF_ATTR_SIZE_VER5) && HAVE_DECL_PERF_ATTR_SIZE_VER5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_ATTR_SIZE_VER5) == (112), "PERF_ATTR_SIZE_VER5 != 112");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_ATTR_SIZE_VER5 112
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_attr_size in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_attr_size in mpers mode
+
+# else
 
 static
 const struct xlat perf_attr_size[] = {
@@ -35,4 +65,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_branch_sample_type.h b/xlat/perf_branch_sample_type.h
index 7c6a5bf..3632fa8 100644
--- a/xlat/perf_branch_sample_type.h
+++ b/xlat/perf_branch_sample_type.h
@@ -1,61 +1,135 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_branch_sample_type.in; do not edit. */
-#if !(defined(PERF_SAMPLE_BRANCH_USER) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_USER) && HAVE_DECL_PERF_SAMPLE_BRANCH_USER))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_SAMPLE_BRANCH_USER) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_USER) && HAVE_DECL_PERF_SAMPLE_BRANCH_USER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_USER) == (1 << 0), "PERF_SAMPLE_BRANCH_USER != 1 << 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_USER 1 << 0
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_KERNEL) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_KERNEL) && HAVE_DECL_PERF_SAMPLE_BRANCH_KERNEL))
+#if defined(PERF_SAMPLE_BRANCH_KERNEL) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_KERNEL) && HAVE_DECL_PERF_SAMPLE_BRANCH_KERNEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_KERNEL) == (1 << 1), "PERF_SAMPLE_BRANCH_KERNEL != 1 << 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_KERNEL 1 << 1
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_HV) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_HV) && HAVE_DECL_PERF_SAMPLE_BRANCH_HV))
+#if defined(PERF_SAMPLE_BRANCH_HV) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_HV) && HAVE_DECL_PERF_SAMPLE_BRANCH_HV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_HV) == (1 << 2), "PERF_SAMPLE_BRANCH_HV != 1 << 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_HV 1 << 2
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_ANY) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_ANY) && HAVE_DECL_PERF_SAMPLE_BRANCH_ANY))
+#if defined(PERF_SAMPLE_BRANCH_ANY) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_ANY) && HAVE_DECL_PERF_SAMPLE_BRANCH_ANY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_ANY) == (1 << 3), "PERF_SAMPLE_BRANCH_ANY != 1 << 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_ANY 1 << 3
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_ANY_CALL) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_ANY_CALL) && HAVE_DECL_PERF_SAMPLE_BRANCH_ANY_CALL))
+#if defined(PERF_SAMPLE_BRANCH_ANY_CALL) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_ANY_CALL) && HAVE_DECL_PERF_SAMPLE_BRANCH_ANY_CALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_ANY_CALL) == (1 << 4), "PERF_SAMPLE_BRANCH_ANY_CALL != 1 << 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_ANY_CALL 1 << 4
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_ANY_RETURN) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_ANY_RETURN) && HAVE_DECL_PERF_SAMPLE_BRANCH_ANY_RETURN))
+#if defined(PERF_SAMPLE_BRANCH_ANY_RETURN) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_ANY_RETURN) && HAVE_DECL_PERF_SAMPLE_BRANCH_ANY_RETURN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_ANY_RETURN) == (1 << 5), "PERF_SAMPLE_BRANCH_ANY_RETURN != 1 << 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_ANY_RETURN 1 << 5
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_IND_CALL) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_IND_CALL) && HAVE_DECL_PERF_SAMPLE_BRANCH_IND_CALL))
+#if defined(PERF_SAMPLE_BRANCH_IND_CALL) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_IND_CALL) && HAVE_DECL_PERF_SAMPLE_BRANCH_IND_CALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_IND_CALL) == (1 << 6), "PERF_SAMPLE_BRANCH_IND_CALL != 1 << 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_IND_CALL 1 << 6
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_ABORT_TX) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_ABORT_TX) && HAVE_DECL_PERF_SAMPLE_BRANCH_ABORT_TX))
+#if defined(PERF_SAMPLE_BRANCH_ABORT_TX) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_ABORT_TX) && HAVE_DECL_PERF_SAMPLE_BRANCH_ABORT_TX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_ABORT_TX) == (1 << 7), "PERF_SAMPLE_BRANCH_ABORT_TX != 1 << 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_ABORT_TX 1 << 7
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_IN_TX) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_IN_TX) && HAVE_DECL_PERF_SAMPLE_BRANCH_IN_TX))
+#if defined(PERF_SAMPLE_BRANCH_IN_TX) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_IN_TX) && HAVE_DECL_PERF_SAMPLE_BRANCH_IN_TX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_IN_TX) == (1 << 8), "PERF_SAMPLE_BRANCH_IN_TX != 1 << 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_IN_TX 1 << 8
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_NO_TX) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_NO_TX) && HAVE_DECL_PERF_SAMPLE_BRANCH_NO_TX))
+#if defined(PERF_SAMPLE_BRANCH_NO_TX) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_NO_TX) && HAVE_DECL_PERF_SAMPLE_BRANCH_NO_TX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_NO_TX) == (1 << 9), "PERF_SAMPLE_BRANCH_NO_TX != 1 << 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_NO_TX 1 << 9
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_COND) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_COND) && HAVE_DECL_PERF_SAMPLE_BRANCH_COND))
+#if defined(PERF_SAMPLE_BRANCH_COND) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_COND) && HAVE_DECL_PERF_SAMPLE_BRANCH_COND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_COND) == (1 << 10), "PERF_SAMPLE_BRANCH_COND != 1 << 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_COND 1 << 10
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_CALL_STACK) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_CALL_STACK) && HAVE_DECL_PERF_SAMPLE_BRANCH_CALL_STACK))
+#if defined(PERF_SAMPLE_BRANCH_CALL_STACK) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_CALL_STACK) && HAVE_DECL_PERF_SAMPLE_BRANCH_CALL_STACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_CALL_STACK) == (1 << 11), "PERF_SAMPLE_BRANCH_CALL_STACK != 1 << 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_CALL_STACK 1 << 11
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_IND_JUMP) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_IND_JUMP) && HAVE_DECL_PERF_SAMPLE_BRANCH_IND_JUMP))
+#if defined(PERF_SAMPLE_BRANCH_IND_JUMP) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_IND_JUMP) && HAVE_DECL_PERF_SAMPLE_BRANCH_IND_JUMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_IND_JUMP) == (1 << 12), "PERF_SAMPLE_BRANCH_IND_JUMP != 1 << 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_IND_JUMP 1 << 12
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_CALL) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_CALL) && HAVE_DECL_PERF_SAMPLE_BRANCH_CALL))
+#if defined(PERF_SAMPLE_BRANCH_CALL) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_CALL) && HAVE_DECL_PERF_SAMPLE_BRANCH_CALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_CALL) == (1 << 13), "PERF_SAMPLE_BRANCH_CALL != 1 << 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_CALL 1 << 13
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_NO_FLAGS) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_NO_FLAGS) && HAVE_DECL_PERF_SAMPLE_BRANCH_NO_FLAGS))
+#if defined(PERF_SAMPLE_BRANCH_NO_FLAGS) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_NO_FLAGS) && HAVE_DECL_PERF_SAMPLE_BRANCH_NO_FLAGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_NO_FLAGS) == (1 << 14), "PERF_SAMPLE_BRANCH_NO_FLAGS != 1 << 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_NO_FLAGS 1 << 14
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_NO_CYCLES) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_NO_CYCLES) && HAVE_DECL_PERF_SAMPLE_BRANCH_NO_CYCLES))
+#if defined(PERF_SAMPLE_BRANCH_NO_CYCLES) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_NO_CYCLES) && HAVE_DECL_PERF_SAMPLE_BRANCH_NO_CYCLES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_NO_CYCLES) == (1 << 15), "PERF_SAMPLE_BRANCH_NO_CYCLES != 1 << 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_NO_CYCLES 1 << 15
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_TYPE_SAVE) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_TYPE_SAVE) && HAVE_DECL_PERF_SAMPLE_BRANCH_TYPE_SAVE))
+#if defined(PERF_SAMPLE_BRANCH_TYPE_SAVE) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_TYPE_SAVE) && HAVE_DECL_PERF_SAMPLE_BRANCH_TYPE_SAVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_TYPE_SAVE) == (1 << 16), "PERF_SAMPLE_BRANCH_TYPE_SAVE != 1 << 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_TYPE_SAVE 1 << 16
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_branch_sample_type in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_branch_sample_type in mpers mode
+
+# else
 
 static
 const struct xlat perf_branch_sample_type[] = {
@@ -79,4 +153,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_event_open_flags.h b/xlat/perf_event_open_flags.h
index 922f9c4..86475b9 100644
--- a/xlat/perf_event_open_flags.h
+++ b/xlat/perf_event_open_flags.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_event_open_flags.in; do not edit. */
-#if !(defined(PERF_FLAG_FD_NO_GROUP) || (defined(HAVE_DECL_PERF_FLAG_FD_NO_GROUP) && HAVE_DECL_PERF_FLAG_FD_NO_GROUP))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_FLAG_FD_NO_GROUP) || (defined(HAVE_DECL_PERF_FLAG_FD_NO_GROUP) && HAVE_DECL_PERF_FLAG_FD_NO_GROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_FLAG_FD_NO_GROUP) == (1), "PERF_FLAG_FD_NO_GROUP != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_FLAG_FD_NO_GROUP 1
 #endif
-#if !(defined(PERF_FLAG_FD_OUTPUT) || (defined(HAVE_DECL_PERF_FLAG_FD_OUTPUT) && HAVE_DECL_PERF_FLAG_FD_OUTPUT))
+#if defined(PERF_FLAG_FD_OUTPUT) || (defined(HAVE_DECL_PERF_FLAG_FD_OUTPUT) && HAVE_DECL_PERF_FLAG_FD_OUTPUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_FLAG_FD_OUTPUT) == (2), "PERF_FLAG_FD_OUTPUT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_FLAG_FD_OUTPUT 2
 #endif
-#if !(defined(PERF_FLAG_PID_CGROUP) || (defined(HAVE_DECL_PERF_FLAG_PID_CGROUP) && HAVE_DECL_PERF_FLAG_PID_CGROUP))
+#if defined(PERF_FLAG_PID_CGROUP) || (defined(HAVE_DECL_PERF_FLAG_PID_CGROUP) && HAVE_DECL_PERF_FLAG_PID_CGROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_FLAG_PID_CGROUP) == (4), "PERF_FLAG_PID_CGROUP != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_FLAG_PID_CGROUP 4
 #endif
-#if !(defined(PERF_FLAG_FD_CLOEXEC) || (defined(HAVE_DECL_PERF_FLAG_FD_CLOEXEC) && HAVE_DECL_PERF_FLAG_FD_CLOEXEC))
+#if defined(PERF_FLAG_FD_CLOEXEC) || (defined(HAVE_DECL_PERF_FLAG_FD_CLOEXEC) && HAVE_DECL_PERF_FLAG_FD_CLOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_FLAG_FD_CLOEXEC) == (8), "PERF_FLAG_FD_CLOEXEC != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_FLAG_FD_CLOEXEC 8
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_event_open_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_event_open_flags in mpers mode
+
+# else
 
 static
 const struct xlat perf_event_open_flags[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_event_read_format.h b/xlat/perf_event_read_format.h
index 7b4c71d..0c74308 100644
--- a/xlat/perf_event_read_format.h
+++ b/xlat/perf_event_read_format.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_event_read_format.in; do not edit. */
-#if !(defined(PERF_FORMAT_TOTAL_TIME_ENABLED) || (defined(HAVE_DECL_PERF_FORMAT_TOTAL_TIME_ENABLED) && HAVE_DECL_PERF_FORMAT_TOTAL_TIME_ENABLED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_FORMAT_TOTAL_TIME_ENABLED) || (defined(HAVE_DECL_PERF_FORMAT_TOTAL_TIME_ENABLED) && HAVE_DECL_PERF_FORMAT_TOTAL_TIME_ENABLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_FORMAT_TOTAL_TIME_ENABLED) == (1 << 0), "PERF_FORMAT_TOTAL_TIME_ENABLED != 1 << 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_FORMAT_TOTAL_TIME_ENABLED 1 << 0
 #endif
-#if !(defined(PERF_FORMAT_TOTAL_TIME_RUNNING) || (defined(HAVE_DECL_PERF_FORMAT_TOTAL_TIME_RUNNING) && HAVE_DECL_PERF_FORMAT_TOTAL_TIME_RUNNING))
+#if defined(PERF_FORMAT_TOTAL_TIME_RUNNING) || (defined(HAVE_DECL_PERF_FORMAT_TOTAL_TIME_RUNNING) && HAVE_DECL_PERF_FORMAT_TOTAL_TIME_RUNNING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_FORMAT_TOTAL_TIME_RUNNING) == (1 << 1), "PERF_FORMAT_TOTAL_TIME_RUNNING != 1 << 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_FORMAT_TOTAL_TIME_RUNNING 1 << 1
 #endif
-#if !(defined(PERF_FORMAT_ID) || (defined(HAVE_DECL_PERF_FORMAT_ID) && HAVE_DECL_PERF_FORMAT_ID))
+#if defined(PERF_FORMAT_ID) || (defined(HAVE_DECL_PERF_FORMAT_ID) && HAVE_DECL_PERF_FORMAT_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_FORMAT_ID) == (1 << 2), "PERF_FORMAT_ID != 1 << 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_FORMAT_ID 1 << 2
 #endif
-#if !(defined(PERF_FORMAT_GROUP) || (defined(HAVE_DECL_PERF_FORMAT_GROUP) && HAVE_DECL_PERF_FORMAT_GROUP))
+#if defined(PERF_FORMAT_GROUP) || (defined(HAVE_DECL_PERF_FORMAT_GROUP) && HAVE_DECL_PERF_FORMAT_GROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_FORMAT_GROUP) == (1 << 3), "PERF_FORMAT_GROUP != 1 << 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_FORMAT_GROUP 1 << 3
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_event_read_format in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_event_read_format in mpers mode
+
+# else
 
 static
 const struct xlat perf_event_read_format[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_event_sample_format.h b/xlat/perf_event_sample_format.h
index 42094ba..3adda9c 100644
--- a/xlat/perf_event_sample_format.h
+++ b/xlat/perf_event_sample_format.h
@@ -1,70 +1,156 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_event_sample_format.in; do not edit. */
-#if !(defined(PERF_SAMPLE_IP) || (defined(HAVE_DECL_PERF_SAMPLE_IP) && HAVE_DECL_PERF_SAMPLE_IP))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_SAMPLE_IP) || (defined(HAVE_DECL_PERF_SAMPLE_IP) && HAVE_DECL_PERF_SAMPLE_IP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_IP) == (1 << 0), "PERF_SAMPLE_IP != 1 << 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_IP 1 << 0
 #endif
-#if !(defined(PERF_SAMPLE_TID) || (defined(HAVE_DECL_PERF_SAMPLE_TID) && HAVE_DECL_PERF_SAMPLE_TID))
+#if defined(PERF_SAMPLE_TID) || (defined(HAVE_DECL_PERF_SAMPLE_TID) && HAVE_DECL_PERF_SAMPLE_TID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_TID) == (1 << 1), "PERF_SAMPLE_TID != 1 << 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_TID 1 << 1
 #endif
-#if !(defined(PERF_SAMPLE_TIME) || (defined(HAVE_DECL_PERF_SAMPLE_TIME) && HAVE_DECL_PERF_SAMPLE_TIME))
+#if defined(PERF_SAMPLE_TIME) || (defined(HAVE_DECL_PERF_SAMPLE_TIME) && HAVE_DECL_PERF_SAMPLE_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_TIME) == (1 << 2), "PERF_SAMPLE_TIME != 1 << 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_TIME 1 << 2
 #endif
-#if !(defined(PERF_SAMPLE_ADDR) || (defined(HAVE_DECL_PERF_SAMPLE_ADDR) && HAVE_DECL_PERF_SAMPLE_ADDR))
+#if defined(PERF_SAMPLE_ADDR) || (defined(HAVE_DECL_PERF_SAMPLE_ADDR) && HAVE_DECL_PERF_SAMPLE_ADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_ADDR) == (1 << 3), "PERF_SAMPLE_ADDR != 1 << 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_ADDR 1 << 3
 #endif
-#if !(defined(PERF_SAMPLE_READ) || (defined(HAVE_DECL_PERF_SAMPLE_READ) && HAVE_DECL_PERF_SAMPLE_READ))
+#if defined(PERF_SAMPLE_READ) || (defined(HAVE_DECL_PERF_SAMPLE_READ) && HAVE_DECL_PERF_SAMPLE_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_READ) == (1 << 4), "PERF_SAMPLE_READ != 1 << 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_READ 1 << 4
 #endif
-#if !(defined(PERF_SAMPLE_CALLCHAIN) || (defined(HAVE_DECL_PERF_SAMPLE_CALLCHAIN) && HAVE_DECL_PERF_SAMPLE_CALLCHAIN))
+#if defined(PERF_SAMPLE_CALLCHAIN) || (defined(HAVE_DECL_PERF_SAMPLE_CALLCHAIN) && HAVE_DECL_PERF_SAMPLE_CALLCHAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_CALLCHAIN) == (1 << 5), "PERF_SAMPLE_CALLCHAIN != 1 << 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_CALLCHAIN 1 << 5
 #endif
-#if !(defined(PERF_SAMPLE_ID) || (defined(HAVE_DECL_PERF_SAMPLE_ID) && HAVE_DECL_PERF_SAMPLE_ID))
+#if defined(PERF_SAMPLE_ID) || (defined(HAVE_DECL_PERF_SAMPLE_ID) && HAVE_DECL_PERF_SAMPLE_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_ID) == (1 << 6), "PERF_SAMPLE_ID != 1 << 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_ID 1 << 6
 #endif
-#if !(defined(PERF_SAMPLE_CPU) || (defined(HAVE_DECL_PERF_SAMPLE_CPU) && HAVE_DECL_PERF_SAMPLE_CPU))
+#if defined(PERF_SAMPLE_CPU) || (defined(HAVE_DECL_PERF_SAMPLE_CPU) && HAVE_DECL_PERF_SAMPLE_CPU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_CPU) == (1 << 7), "PERF_SAMPLE_CPU != 1 << 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_CPU 1 << 7
 #endif
-#if !(defined(PERF_SAMPLE_PERIOD) || (defined(HAVE_DECL_PERF_SAMPLE_PERIOD) && HAVE_DECL_PERF_SAMPLE_PERIOD))
+#if defined(PERF_SAMPLE_PERIOD) || (defined(HAVE_DECL_PERF_SAMPLE_PERIOD) && HAVE_DECL_PERF_SAMPLE_PERIOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_PERIOD) == (1 << 8), "PERF_SAMPLE_PERIOD != 1 << 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_PERIOD 1 << 8
 #endif
-#if !(defined(PERF_SAMPLE_STREAM_ID) || (defined(HAVE_DECL_PERF_SAMPLE_STREAM_ID) && HAVE_DECL_PERF_SAMPLE_STREAM_ID))
+#if defined(PERF_SAMPLE_STREAM_ID) || (defined(HAVE_DECL_PERF_SAMPLE_STREAM_ID) && HAVE_DECL_PERF_SAMPLE_STREAM_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_STREAM_ID) == (1 << 9), "PERF_SAMPLE_STREAM_ID != 1 << 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_STREAM_ID 1 << 9
 #endif
-#if !(defined(PERF_SAMPLE_RAW) || (defined(HAVE_DECL_PERF_SAMPLE_RAW) && HAVE_DECL_PERF_SAMPLE_RAW))
+#if defined(PERF_SAMPLE_RAW) || (defined(HAVE_DECL_PERF_SAMPLE_RAW) && HAVE_DECL_PERF_SAMPLE_RAW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_RAW) == (1 << 10), "PERF_SAMPLE_RAW != 1 << 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_RAW 1 << 10
 #endif
-#if !(defined(PERF_SAMPLE_BRANCH_STACK) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_STACK) && HAVE_DECL_PERF_SAMPLE_BRANCH_STACK))
+#if defined(PERF_SAMPLE_BRANCH_STACK) || (defined(HAVE_DECL_PERF_SAMPLE_BRANCH_STACK) && HAVE_DECL_PERF_SAMPLE_BRANCH_STACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_BRANCH_STACK) == (1 << 11), "PERF_SAMPLE_BRANCH_STACK != 1 << 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_BRANCH_STACK 1 << 11
 #endif
-#if !(defined(PERF_SAMPLE_REGS_USER) || (defined(HAVE_DECL_PERF_SAMPLE_REGS_USER) && HAVE_DECL_PERF_SAMPLE_REGS_USER))
+#if defined(PERF_SAMPLE_REGS_USER) || (defined(HAVE_DECL_PERF_SAMPLE_REGS_USER) && HAVE_DECL_PERF_SAMPLE_REGS_USER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_REGS_USER) == (1 << 12), "PERF_SAMPLE_REGS_USER != 1 << 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_REGS_USER 1 << 12
 #endif
-#if !(defined(PERF_SAMPLE_STACK_USER) || (defined(HAVE_DECL_PERF_SAMPLE_STACK_USER) && HAVE_DECL_PERF_SAMPLE_STACK_USER))
+#if defined(PERF_SAMPLE_STACK_USER) || (defined(HAVE_DECL_PERF_SAMPLE_STACK_USER) && HAVE_DECL_PERF_SAMPLE_STACK_USER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_STACK_USER) == (1 << 13), "PERF_SAMPLE_STACK_USER != 1 << 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_STACK_USER 1 << 13
 #endif
-#if !(defined(PERF_SAMPLE_WEIGHT) || (defined(HAVE_DECL_PERF_SAMPLE_WEIGHT) && HAVE_DECL_PERF_SAMPLE_WEIGHT))
+#if defined(PERF_SAMPLE_WEIGHT) || (defined(HAVE_DECL_PERF_SAMPLE_WEIGHT) && HAVE_DECL_PERF_SAMPLE_WEIGHT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_WEIGHT) == (1 << 14), "PERF_SAMPLE_WEIGHT != 1 << 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_WEIGHT 1 << 14
 #endif
-#if !(defined(PERF_SAMPLE_DATA_SRC) || (defined(HAVE_DECL_PERF_SAMPLE_DATA_SRC) && HAVE_DECL_PERF_SAMPLE_DATA_SRC))
+#if defined(PERF_SAMPLE_DATA_SRC) || (defined(HAVE_DECL_PERF_SAMPLE_DATA_SRC) && HAVE_DECL_PERF_SAMPLE_DATA_SRC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_DATA_SRC) == (1 << 15), "PERF_SAMPLE_DATA_SRC != 1 << 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_DATA_SRC 1 << 15
 #endif
-#if !(defined(PERF_SAMPLE_IDENTIFIER) || (defined(HAVE_DECL_PERF_SAMPLE_IDENTIFIER) && HAVE_DECL_PERF_SAMPLE_IDENTIFIER))
+#if defined(PERF_SAMPLE_IDENTIFIER) || (defined(HAVE_DECL_PERF_SAMPLE_IDENTIFIER) && HAVE_DECL_PERF_SAMPLE_IDENTIFIER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_IDENTIFIER) == (1 << 16), "PERF_SAMPLE_IDENTIFIER != 1 << 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_IDENTIFIER 1 << 16
 #endif
-#if !(defined(PERF_SAMPLE_TRANSACTION) || (defined(HAVE_DECL_PERF_SAMPLE_TRANSACTION) && HAVE_DECL_PERF_SAMPLE_TRANSACTION))
+#if defined(PERF_SAMPLE_TRANSACTION) || (defined(HAVE_DECL_PERF_SAMPLE_TRANSACTION) && HAVE_DECL_PERF_SAMPLE_TRANSACTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_TRANSACTION) == (1 << 17), "PERF_SAMPLE_TRANSACTION != 1 << 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_TRANSACTION 1 << 17
 #endif
-#if !(defined(PERF_SAMPLE_REGS_INTR) || (defined(HAVE_DECL_PERF_SAMPLE_REGS_INTR) && HAVE_DECL_PERF_SAMPLE_REGS_INTR))
+#if defined(PERF_SAMPLE_REGS_INTR) || (defined(HAVE_DECL_PERF_SAMPLE_REGS_INTR) && HAVE_DECL_PERF_SAMPLE_REGS_INTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_REGS_INTR) == (1 << 18), "PERF_SAMPLE_REGS_INTR != 1 << 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_REGS_INTR 1 << 18
 #endif
-#if !(defined(PERF_SAMPLE_PHYS_ADDR) || (defined(HAVE_DECL_PERF_SAMPLE_PHYS_ADDR) && HAVE_DECL_PERF_SAMPLE_PHYS_ADDR))
+#if defined(PERF_SAMPLE_PHYS_ADDR) || (defined(HAVE_DECL_PERF_SAMPLE_PHYS_ADDR) && HAVE_DECL_PERF_SAMPLE_PHYS_ADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_SAMPLE_PHYS_ADDR) == (1 << 19), "PERF_SAMPLE_PHYS_ADDR != 1 << 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_SAMPLE_PHYS_ADDR 1 << 19
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_event_sample_format in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_event_sample_format in mpers mode
+
+# else
 
 static
 const struct xlat perf_event_sample_format[] = {
@@ -91,4 +177,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_hw_cache_id.h b/xlat/perf_hw_cache_id.h
index 86b9cbc..04ef058 100644
--- a/xlat/perf_hw_cache_id.h
+++ b/xlat/perf_hw_cache_id.h
@@ -1,31 +1,65 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_hw_cache_id.in; do not edit. */
-#if !(defined(PERF_COUNT_HW_CACHE_L1D) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_L1D) && HAVE_DECL_PERF_COUNT_HW_CACHE_L1D))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_COUNT_HW_CACHE_L1D) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_L1D) && HAVE_DECL_PERF_COUNT_HW_CACHE_L1D)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_L1D) == (0), "PERF_COUNT_HW_CACHE_L1D != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_L1D 0
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_L1I) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_L1I) && HAVE_DECL_PERF_COUNT_HW_CACHE_L1I))
+#if defined(PERF_COUNT_HW_CACHE_L1I) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_L1I) && HAVE_DECL_PERF_COUNT_HW_CACHE_L1I)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_L1I) == (1), "PERF_COUNT_HW_CACHE_L1I != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_L1I 1
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_LL) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_LL) && HAVE_DECL_PERF_COUNT_HW_CACHE_LL))
+#if defined(PERF_COUNT_HW_CACHE_LL) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_LL) && HAVE_DECL_PERF_COUNT_HW_CACHE_LL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_LL) == (2), "PERF_COUNT_HW_CACHE_LL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_LL 2
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_DTLB) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_DTLB) && HAVE_DECL_PERF_COUNT_HW_CACHE_DTLB))
+#if defined(PERF_COUNT_HW_CACHE_DTLB) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_DTLB) && HAVE_DECL_PERF_COUNT_HW_CACHE_DTLB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_DTLB) == (3), "PERF_COUNT_HW_CACHE_DTLB != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_DTLB 3
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_ITLB) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_ITLB) && HAVE_DECL_PERF_COUNT_HW_CACHE_ITLB))
+#if defined(PERF_COUNT_HW_CACHE_ITLB) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_ITLB) && HAVE_DECL_PERF_COUNT_HW_CACHE_ITLB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_ITLB) == (4), "PERF_COUNT_HW_CACHE_ITLB != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_ITLB 4
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_BPU) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_BPU) && HAVE_DECL_PERF_COUNT_HW_CACHE_BPU))
+#if defined(PERF_COUNT_HW_CACHE_BPU) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_BPU) && HAVE_DECL_PERF_COUNT_HW_CACHE_BPU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_BPU) == (5), "PERF_COUNT_HW_CACHE_BPU != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_BPU 5
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_NODE) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_NODE) && HAVE_DECL_PERF_COUNT_HW_CACHE_NODE))
+#if defined(PERF_COUNT_HW_CACHE_NODE) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_NODE) && HAVE_DECL_PERF_COUNT_HW_CACHE_NODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_NODE) == (6), "PERF_COUNT_HW_CACHE_NODE != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_NODE 6
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_hw_cache_id in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_hw_cache_id in mpers mode
+
+# else
 
 static
 const struct xlat perf_hw_cache_id[] = {
@@ -40,4 +74,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_hw_cache_op_id.h b/xlat/perf_hw_cache_op_id.h
index 5705f91..b0cadd3 100644
--- a/xlat/perf_hw_cache_op_id.h
+++ b/xlat/perf_hw_cache_op_id.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_hw_cache_op_id.in; do not edit. */
-#if !(defined(PERF_COUNT_HW_CACHE_OP_READ) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_OP_READ) && HAVE_DECL_PERF_COUNT_HW_CACHE_OP_READ))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_COUNT_HW_CACHE_OP_READ) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_OP_READ) && HAVE_DECL_PERF_COUNT_HW_CACHE_OP_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_OP_READ) == (0), "PERF_COUNT_HW_CACHE_OP_READ != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_OP_READ 0
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_OP_WRITE) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_OP_WRITE) && HAVE_DECL_PERF_COUNT_HW_CACHE_OP_WRITE))
+#if defined(PERF_COUNT_HW_CACHE_OP_WRITE) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_OP_WRITE) && HAVE_DECL_PERF_COUNT_HW_CACHE_OP_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_OP_WRITE) == (1), "PERF_COUNT_HW_CACHE_OP_WRITE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_OP_WRITE 1
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_OP_PREFETCH) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_OP_PREFETCH) && HAVE_DECL_PERF_COUNT_HW_CACHE_OP_PREFETCH))
+#if defined(PERF_COUNT_HW_CACHE_OP_PREFETCH) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_OP_PREFETCH) && HAVE_DECL_PERF_COUNT_HW_CACHE_OP_PREFETCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_OP_PREFETCH) == (2), "PERF_COUNT_HW_CACHE_OP_PREFETCH != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_OP_PREFETCH 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_hw_cache_op_id in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_hw_cache_op_id in mpers mode
+
+# else
 
 static
 const struct xlat perf_hw_cache_op_id[] = {
@@ -24,4 +42,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_hw_cache_op_result_id.h b/xlat/perf_hw_cache_op_result_id.h
index 70a9e9a..c026ce8 100644
--- a/xlat/perf_hw_cache_op_result_id.h
+++ b/xlat/perf_hw_cache_op_result_id.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_hw_cache_op_result_id.in; do not edit. */
-#if !(defined(PERF_COUNT_HW_CACHE_RESULT_ACCESS) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_RESULT_ACCESS) && HAVE_DECL_PERF_COUNT_HW_CACHE_RESULT_ACCESS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_COUNT_HW_CACHE_RESULT_ACCESS) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_RESULT_ACCESS) && HAVE_DECL_PERF_COUNT_HW_CACHE_RESULT_ACCESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_RESULT_ACCESS) == (0), "PERF_COUNT_HW_CACHE_RESULT_ACCESS != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_RESULT_ACCESS 0
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_RESULT_MISS) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_RESULT_MISS) && HAVE_DECL_PERF_COUNT_HW_CACHE_RESULT_MISS))
+#if defined(PERF_COUNT_HW_CACHE_RESULT_MISS) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_RESULT_MISS) && HAVE_DECL_PERF_COUNT_HW_CACHE_RESULT_MISS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_RESULT_MISS) == (1), "PERF_COUNT_HW_CACHE_RESULT_MISS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_RESULT_MISS 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_hw_cache_op_result_id in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_hw_cache_op_result_id in mpers mode
+
+# else
 
 static
 const struct xlat perf_hw_cache_op_result_id[] = {
@@ -20,4 +34,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_hw_id.h b/xlat/perf_hw_id.h
index a076eca..8c71a54 100644
--- a/xlat/perf_hw_id.h
+++ b/xlat/perf_hw_id.h
@@ -1,40 +1,86 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_hw_id.in; do not edit. */
-#if !(defined(PERF_COUNT_HW_CPU_CYCLES) || (defined(HAVE_DECL_PERF_COUNT_HW_CPU_CYCLES) && HAVE_DECL_PERF_COUNT_HW_CPU_CYCLES))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_COUNT_HW_CPU_CYCLES) || (defined(HAVE_DECL_PERF_COUNT_HW_CPU_CYCLES) && HAVE_DECL_PERF_COUNT_HW_CPU_CYCLES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CPU_CYCLES) == (0), "PERF_COUNT_HW_CPU_CYCLES != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CPU_CYCLES 0
 #endif
-#if !(defined(PERF_COUNT_HW_INSTRUCTIONS) || (defined(HAVE_DECL_PERF_COUNT_HW_INSTRUCTIONS) && HAVE_DECL_PERF_COUNT_HW_INSTRUCTIONS))
+#if defined(PERF_COUNT_HW_INSTRUCTIONS) || (defined(HAVE_DECL_PERF_COUNT_HW_INSTRUCTIONS) && HAVE_DECL_PERF_COUNT_HW_INSTRUCTIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_INSTRUCTIONS) == (1), "PERF_COUNT_HW_INSTRUCTIONS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_INSTRUCTIONS 1
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_REFERENCES) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_REFERENCES) && HAVE_DECL_PERF_COUNT_HW_CACHE_REFERENCES))
+#if defined(PERF_COUNT_HW_CACHE_REFERENCES) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_REFERENCES) && HAVE_DECL_PERF_COUNT_HW_CACHE_REFERENCES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_REFERENCES) == (2), "PERF_COUNT_HW_CACHE_REFERENCES != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_REFERENCES 2
 #endif
-#if !(defined(PERF_COUNT_HW_CACHE_MISSES) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_MISSES) && HAVE_DECL_PERF_COUNT_HW_CACHE_MISSES))
+#if defined(PERF_COUNT_HW_CACHE_MISSES) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_MISSES) && HAVE_DECL_PERF_COUNT_HW_CACHE_MISSES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_CACHE_MISSES) == (3), "PERF_COUNT_HW_CACHE_MISSES != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_CACHE_MISSES 3
 #endif
-#if !(defined(PERF_COUNT_HW_BRANCH_INSTRUCTIONS) || (defined(HAVE_DECL_PERF_COUNT_HW_BRANCH_INSTRUCTIONS) && HAVE_DECL_PERF_COUNT_HW_BRANCH_INSTRUCTIONS))
+#if defined(PERF_COUNT_HW_BRANCH_INSTRUCTIONS) || (defined(HAVE_DECL_PERF_COUNT_HW_BRANCH_INSTRUCTIONS) && HAVE_DECL_PERF_COUNT_HW_BRANCH_INSTRUCTIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_BRANCH_INSTRUCTIONS) == (4), "PERF_COUNT_HW_BRANCH_INSTRUCTIONS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_BRANCH_INSTRUCTIONS 4
 #endif
-#if !(defined(PERF_COUNT_HW_BRANCH_MISSES) || (defined(HAVE_DECL_PERF_COUNT_HW_BRANCH_MISSES) && HAVE_DECL_PERF_COUNT_HW_BRANCH_MISSES))
+#if defined(PERF_COUNT_HW_BRANCH_MISSES) || (defined(HAVE_DECL_PERF_COUNT_HW_BRANCH_MISSES) && HAVE_DECL_PERF_COUNT_HW_BRANCH_MISSES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_BRANCH_MISSES) == (5), "PERF_COUNT_HW_BRANCH_MISSES != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_BRANCH_MISSES 5
 #endif
-#if !(defined(PERF_COUNT_HW_BUS_CYCLES) || (defined(HAVE_DECL_PERF_COUNT_HW_BUS_CYCLES) && HAVE_DECL_PERF_COUNT_HW_BUS_CYCLES))
+#if defined(PERF_COUNT_HW_BUS_CYCLES) || (defined(HAVE_DECL_PERF_COUNT_HW_BUS_CYCLES) && HAVE_DECL_PERF_COUNT_HW_BUS_CYCLES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_BUS_CYCLES) == (6), "PERF_COUNT_HW_BUS_CYCLES != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_BUS_CYCLES 6
 #endif
-#if !(defined(PERF_COUNT_HW_STALLED_CYCLES_FRONTEND) || (defined(HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_FRONTEND) && HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_FRONTEND))
+#if defined(PERF_COUNT_HW_STALLED_CYCLES_FRONTEND) || (defined(HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_FRONTEND) && HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_FRONTEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_STALLED_CYCLES_FRONTEND) == (7), "PERF_COUNT_HW_STALLED_CYCLES_FRONTEND != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_STALLED_CYCLES_FRONTEND 7
 #endif
-#if !(defined(PERF_COUNT_HW_STALLED_CYCLES_BACKEND) || (defined(HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_BACKEND) && HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_BACKEND))
+#if defined(PERF_COUNT_HW_STALLED_CYCLES_BACKEND) || (defined(HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_BACKEND) && HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_BACKEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_STALLED_CYCLES_BACKEND) == (8), "PERF_COUNT_HW_STALLED_CYCLES_BACKEND != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_STALLED_CYCLES_BACKEND 8
 #endif
-#if !(defined(PERF_COUNT_HW_REF_CPU_CYCLES) || (defined(HAVE_DECL_PERF_COUNT_HW_REF_CPU_CYCLES) && HAVE_DECL_PERF_COUNT_HW_REF_CPU_CYCLES))
+#if defined(PERF_COUNT_HW_REF_CPU_CYCLES) || (defined(HAVE_DECL_PERF_COUNT_HW_REF_CPU_CYCLES) && HAVE_DECL_PERF_COUNT_HW_REF_CPU_CYCLES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_HW_REF_CPU_CYCLES) == (9), "PERF_COUNT_HW_REF_CPU_CYCLES != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_HW_REF_CPU_CYCLES 9
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_hw_id in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_hw_id in mpers mode
+
+# else
 
 static
 const struct xlat perf_hw_id[] = {
@@ -52,4 +98,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_ioctl_cmds.h b/xlat/perf_ioctl_cmds.h
new file mode 100644
index 0000000..d3f2a09
--- /dev/null
+++ b/xlat/perf_ioctl_cmds.h
@@ -0,0 +1,120 @@
+/* Generated by ./xlat/gen.sh from ./xlat/perf_ioctl_cmds.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_EVENT_IOC_ENABLE) || (defined(HAVE_DECL_PERF_EVENT_IOC_ENABLE) && HAVE_DECL_PERF_EVENT_IOC_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_ENABLE) == (_IO ('$', 0)), "PERF_EVENT_IOC_ENABLE != _IO ('$', 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_ENABLE _IO ('$', 0)
+#endif
+#if defined(PERF_EVENT_IOC_DISABLE) || (defined(HAVE_DECL_PERF_EVENT_IOC_DISABLE) && HAVE_DECL_PERF_EVENT_IOC_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_DISABLE) == (_IO ('$', 1)), "PERF_EVENT_IOC_DISABLE != _IO ('$', 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_DISABLE _IO ('$', 1)
+#endif
+#if defined(PERF_EVENT_IOC_REFRESH) || (defined(HAVE_DECL_PERF_EVENT_IOC_REFRESH) && HAVE_DECL_PERF_EVENT_IOC_REFRESH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_REFRESH) == (_IO ('$', 2)), "PERF_EVENT_IOC_REFRESH != _IO ('$', 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_REFRESH _IO ('$', 2)
+#endif
+#if defined(PERF_EVENT_IOC_RESET) || (defined(HAVE_DECL_PERF_EVENT_IOC_RESET) && HAVE_DECL_PERF_EVENT_IOC_RESET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_RESET) == (_IO ('$', 3)), "PERF_EVENT_IOC_RESET != _IO ('$', 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_RESET _IO ('$', 3)
+#endif
+#if defined(PERF_EVENT_IOC_PERIOD) || (defined(HAVE_DECL_PERF_EVENT_IOC_PERIOD) && HAVE_DECL_PERF_EVENT_IOC_PERIOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_PERIOD) == (_IOW('$', 4, uint64_t)), "PERF_EVENT_IOC_PERIOD != _IOW('$', 4, uint64_t)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_PERIOD _IOW('$', 4, uint64_t)
+#endif
+#if defined(PERF_EVENT_IOC_SET_OUTPUT) || (defined(HAVE_DECL_PERF_EVENT_IOC_SET_OUTPUT) && HAVE_DECL_PERF_EVENT_IOC_SET_OUTPUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_SET_OUTPUT) == (_IO ('$', 5)), "PERF_EVENT_IOC_SET_OUTPUT != _IO ('$', 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5)
+#endif
+#if defined(PERF_EVENT_IOC_SET_FILTER) || (defined(HAVE_DECL_PERF_EVENT_IOC_SET_FILTER) && HAVE_DECL_PERF_EVENT_IOC_SET_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_SET_FILTER) == (_IOW('$', 6, char *)), "PERF_EVENT_IOC_SET_FILTER != _IOW('$', 6, char *)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_SET_FILTER _IOW('$', 6, char *)
+#endif
+#if defined(PERF_EVENT_IOC_ID) || (defined(HAVE_DECL_PERF_EVENT_IOC_ID) && HAVE_DECL_PERF_EVENT_IOC_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_ID) == (_IOR('$', 7, uint64_t *)), "PERF_EVENT_IOC_ID != _IOR('$', 7, uint64_t *)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_ID _IOR('$', 7, uint64_t *)
+#endif
+#if defined(PERF_EVENT_IOC_SET_BPF) || (defined(HAVE_DECL_PERF_EVENT_IOC_SET_BPF) && HAVE_DECL_PERF_EVENT_IOC_SET_BPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_SET_BPF) == (_IOW('$', 8, uint32_t)), "PERF_EVENT_IOC_SET_BPF != _IOW('$', 8, uint32_t)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_SET_BPF _IOW('$', 8, uint32_t)
+#endif
+#if defined(PERF_EVENT_IOC_PAUSE_OUTPUT) || (defined(HAVE_DECL_PERF_EVENT_IOC_PAUSE_OUTPUT) && HAVE_DECL_PERF_EVENT_IOC_PAUSE_OUTPUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_PAUSE_OUTPUT) == (_IOW('$', 9, uint32_t)), "PERF_EVENT_IOC_PAUSE_OUTPUT != _IOW('$', 9, uint32_t)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_PAUSE_OUTPUT _IOW('$', 9, uint32_t)
+#endif
+#if defined(PERF_EVENT_IOC_QUERY_BPF) || (defined(HAVE_DECL_PERF_EVENT_IOC_QUERY_BPF) && HAVE_DECL_PERF_EVENT_IOC_QUERY_BPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_QUERY_BPF) == (_IOWR('$', 10, struct perf_event_query_bpf *)), "PERF_EVENT_IOC_QUERY_BPF != _IOWR('$', 10, struct perf_event_query_bpf *)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_QUERY_BPF _IOWR('$', 10, struct perf_event_query_bpf *)
+#endif
+#if defined(PERF_EVENT_IOC_MODIFY_ATTRIBUTES) || (defined(HAVE_DECL_PERF_EVENT_IOC_MODIFY_ATTRIBUTES) && HAVE_DECL_PERF_EVENT_IOC_MODIFY_ATTRIBUTES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_EVENT_IOC_MODIFY_ATTRIBUTES) == (_IOW('$', 11, struct perf_event_attr *)), "PERF_EVENT_IOC_MODIFY_ATTRIBUTES != _IOW('$', 11, struct perf_event_attr *)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_EVENT_IOC_MODIFY_ATTRIBUTES _IOW('$', 11, struct perf_event_attr *)
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+extern const struct xlat perf_ioctl_cmds[];
+
+# else
+
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+static
+#  endif
+const struct xlat perf_ioctl_cmds[] = {
+ XLAT(PERF_EVENT_IOC_ENABLE),
+ XLAT(PERF_EVENT_IOC_DISABLE),
+ XLAT(PERF_EVENT_IOC_REFRESH),
+ XLAT(PERF_EVENT_IOC_RESET),
+ XLAT(PERF_EVENT_IOC_PERIOD),
+ XLAT(PERF_EVENT_IOC_SET_OUTPUT),
+ XLAT(PERF_EVENT_IOC_SET_FILTER),
+ XLAT(PERF_EVENT_IOC_ID),
+ XLAT(PERF_EVENT_IOC_SET_BPF),
+ XLAT(PERF_EVENT_IOC_PAUSE_OUTPUT),
+ XLAT(PERF_EVENT_IOC_QUERY_BPF),
+ XLAT(PERF_EVENT_IOC_MODIFY_ATTRIBUTES),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_ioctl_cmds.in b/xlat/perf_ioctl_cmds.in
new file mode 100644
index 0000000..bf7ad78
--- /dev/null
+++ b/xlat/perf_ioctl_cmds.in
@@ -0,0 +1,12 @@
+PERF_EVENT_IOC_ENABLE			_IO ('$', 0)
+PERF_EVENT_IOC_DISABLE			_IO ('$', 1)
+PERF_EVENT_IOC_REFRESH			_IO ('$', 2)
+PERF_EVENT_IOC_RESET			_IO ('$', 3)
+PERF_EVENT_IOC_PERIOD			_IOW('$', 4, uint64_t)
+PERF_EVENT_IOC_SET_OUTPUT		_IO ('$', 5)
+PERF_EVENT_IOC_SET_FILTER		_IOW('$', 6, char *)
+PERF_EVENT_IOC_ID			_IOR('$', 7, uint64_t *)
+PERF_EVENT_IOC_SET_BPF			_IOW('$', 8, uint32_t)
+PERF_EVENT_IOC_PAUSE_OUTPUT		_IOW('$', 9, uint32_t)
+PERF_EVENT_IOC_QUERY_BPF		_IOWR('$', 10, struct perf_event_query_bpf *)
+PERF_EVENT_IOC_MODIFY_ATTRIBUTES	_IOW('$', 11, struct perf_event_attr *)
diff --git a/xlat/perf_ioctl_flags.h b/xlat/perf_ioctl_flags.h
new file mode 100644
index 0000000..de3883a
--- /dev/null
+++ b/xlat/perf_ioctl_flags.h
@@ -0,0 +1,32 @@
+/* Generated by ./xlat/gen.sh from ./xlat/perf_ioctl_flags.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_IOC_FLAG_GROUP) || (defined(HAVE_DECL_PERF_IOC_FLAG_GROUP) && HAVE_DECL_PERF_IOC_FLAG_GROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_IOC_FLAG_GROUP) == ((1U << 0)), "PERF_IOC_FLAG_GROUP != (1U << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PERF_IOC_FLAG_GROUP (1U << 0)
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+extern const struct xlat perf_ioctl_flags[];
+
+# else
+
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+static
+#  endif
+const struct xlat perf_ioctl_flags[] = {
+ XLAT(PERF_IOC_FLAG_GROUP),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_ioctl_flags.in b/xlat/perf_ioctl_flags.in
new file mode 100644
index 0000000..502f69a
--- /dev/null
+++ b/xlat/perf_ioctl_flags.in
@@ -0,0 +1 @@
+PERF_IOC_FLAG_GROUP	(1U << 0)
diff --git a/xlat/perf_sw_ids.h b/xlat/perf_sw_ids.h
index 96c628d..ecf0f83 100644
--- a/xlat/perf_sw_ids.h
+++ b/xlat/perf_sw_ids.h
@@ -1,43 +1,93 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_sw_ids.in; do not edit. */
-#if !(defined(PERF_COUNT_SW_CPU_CLOCK) || (defined(HAVE_DECL_PERF_COUNT_SW_CPU_CLOCK) && HAVE_DECL_PERF_COUNT_SW_CPU_CLOCK))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_COUNT_SW_CPU_CLOCK) || (defined(HAVE_DECL_PERF_COUNT_SW_CPU_CLOCK) && HAVE_DECL_PERF_COUNT_SW_CPU_CLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_CPU_CLOCK) == (0), "PERF_COUNT_SW_CPU_CLOCK != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_CPU_CLOCK 0
 #endif
-#if !(defined(PERF_COUNT_SW_TASK_CLOCK) || (defined(HAVE_DECL_PERF_COUNT_SW_TASK_CLOCK) && HAVE_DECL_PERF_COUNT_SW_TASK_CLOCK))
+#if defined(PERF_COUNT_SW_TASK_CLOCK) || (defined(HAVE_DECL_PERF_COUNT_SW_TASK_CLOCK) && HAVE_DECL_PERF_COUNT_SW_TASK_CLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_TASK_CLOCK) == (1), "PERF_COUNT_SW_TASK_CLOCK != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_TASK_CLOCK 1
 #endif
-#if !(defined(PERF_COUNT_SW_PAGE_FAULTS) || (defined(HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS) && HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS))
+#if defined(PERF_COUNT_SW_PAGE_FAULTS) || (defined(HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS) && HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_PAGE_FAULTS) == (2), "PERF_COUNT_SW_PAGE_FAULTS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_PAGE_FAULTS 2
 #endif
-#if !(defined(PERF_COUNT_SW_CONTEXT_SWITCHES) || (defined(HAVE_DECL_PERF_COUNT_SW_CONTEXT_SWITCHES) && HAVE_DECL_PERF_COUNT_SW_CONTEXT_SWITCHES))
+#if defined(PERF_COUNT_SW_CONTEXT_SWITCHES) || (defined(HAVE_DECL_PERF_COUNT_SW_CONTEXT_SWITCHES) && HAVE_DECL_PERF_COUNT_SW_CONTEXT_SWITCHES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_CONTEXT_SWITCHES) == (3), "PERF_COUNT_SW_CONTEXT_SWITCHES != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_CONTEXT_SWITCHES 3
 #endif
-#if !(defined(PERF_COUNT_SW_CPU_MIGRATIONS) || (defined(HAVE_DECL_PERF_COUNT_SW_CPU_MIGRATIONS) && HAVE_DECL_PERF_COUNT_SW_CPU_MIGRATIONS))
+#if defined(PERF_COUNT_SW_CPU_MIGRATIONS) || (defined(HAVE_DECL_PERF_COUNT_SW_CPU_MIGRATIONS) && HAVE_DECL_PERF_COUNT_SW_CPU_MIGRATIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_CPU_MIGRATIONS) == (4), "PERF_COUNT_SW_CPU_MIGRATIONS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_CPU_MIGRATIONS 4
 #endif
-#if !(defined(PERF_COUNT_SW_PAGE_FAULTS_MIN) || (defined(HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS_MIN) && HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS_MIN))
+#if defined(PERF_COUNT_SW_PAGE_FAULTS_MIN) || (defined(HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS_MIN) && HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS_MIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_PAGE_FAULTS_MIN) == (5), "PERF_COUNT_SW_PAGE_FAULTS_MIN != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_PAGE_FAULTS_MIN 5
 #endif
-#if !(defined(PERF_COUNT_SW_PAGE_FAULTS_MAJ) || (defined(HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS_MAJ) && HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS_MAJ))
+#if defined(PERF_COUNT_SW_PAGE_FAULTS_MAJ) || (defined(HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS_MAJ) && HAVE_DECL_PERF_COUNT_SW_PAGE_FAULTS_MAJ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_PAGE_FAULTS_MAJ) == (6), "PERF_COUNT_SW_PAGE_FAULTS_MAJ != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_PAGE_FAULTS_MAJ 6
 #endif
-#if !(defined(PERF_COUNT_SW_ALIGNMENT_FAULTS) || (defined(HAVE_DECL_PERF_COUNT_SW_ALIGNMENT_FAULTS) && HAVE_DECL_PERF_COUNT_SW_ALIGNMENT_FAULTS))
+#if defined(PERF_COUNT_SW_ALIGNMENT_FAULTS) || (defined(HAVE_DECL_PERF_COUNT_SW_ALIGNMENT_FAULTS) && HAVE_DECL_PERF_COUNT_SW_ALIGNMENT_FAULTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_ALIGNMENT_FAULTS) == (7), "PERF_COUNT_SW_ALIGNMENT_FAULTS != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_ALIGNMENT_FAULTS 7
 #endif
-#if !(defined(PERF_COUNT_SW_EMULATION_FAULTS) || (defined(HAVE_DECL_PERF_COUNT_SW_EMULATION_FAULTS) && HAVE_DECL_PERF_COUNT_SW_EMULATION_FAULTS))
+#if defined(PERF_COUNT_SW_EMULATION_FAULTS) || (defined(HAVE_DECL_PERF_COUNT_SW_EMULATION_FAULTS) && HAVE_DECL_PERF_COUNT_SW_EMULATION_FAULTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_EMULATION_FAULTS) == (8), "PERF_COUNT_SW_EMULATION_FAULTS != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_EMULATION_FAULTS 8
 #endif
-#if !(defined(PERF_COUNT_SW_DUMMY) || (defined(HAVE_DECL_PERF_COUNT_SW_DUMMY) && HAVE_DECL_PERF_COUNT_SW_DUMMY))
+#if defined(PERF_COUNT_SW_DUMMY) || (defined(HAVE_DECL_PERF_COUNT_SW_DUMMY) && HAVE_DECL_PERF_COUNT_SW_DUMMY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_DUMMY) == (9), "PERF_COUNT_SW_DUMMY != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_DUMMY 9
 #endif
-#if !(defined(PERF_COUNT_SW_BPF_OUTPUT) || (defined(HAVE_DECL_PERF_COUNT_SW_BPF_OUTPUT) && HAVE_DECL_PERF_COUNT_SW_BPF_OUTPUT))
+#if defined(PERF_COUNT_SW_BPF_OUTPUT) || (defined(HAVE_DECL_PERF_COUNT_SW_BPF_OUTPUT) && HAVE_DECL_PERF_COUNT_SW_BPF_OUTPUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_COUNT_SW_BPF_OUTPUT) == (10), "PERF_COUNT_SW_BPF_OUTPUT != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_COUNT_SW_BPF_OUTPUT 10
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_sw_ids in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_sw_ids in mpers mode
+
+# else
 
 static
 const struct xlat perf_sw_ids[] = {
@@ -56,4 +106,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/perf_type_id.h b/xlat/perf_type_id.h
index f83fc59..bbe5c58 100644
--- a/xlat/perf_type_id.h
+++ b/xlat/perf_type_id.h
@@ -1,28 +1,58 @@
 /* Generated by ./xlat/gen.sh from ./xlat/perf_type_id.in; do not edit. */
-#if !(defined(PERF_TYPE_HARDWARE) || (defined(HAVE_DECL_PERF_TYPE_HARDWARE) && HAVE_DECL_PERF_TYPE_HARDWARE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PERF_TYPE_HARDWARE) || (defined(HAVE_DECL_PERF_TYPE_HARDWARE) && HAVE_DECL_PERF_TYPE_HARDWARE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_TYPE_HARDWARE) == (0), "PERF_TYPE_HARDWARE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_TYPE_HARDWARE 0
 #endif
-#if !(defined(PERF_TYPE_SOFTWARE) || (defined(HAVE_DECL_PERF_TYPE_SOFTWARE) && HAVE_DECL_PERF_TYPE_SOFTWARE))
+#if defined(PERF_TYPE_SOFTWARE) || (defined(HAVE_DECL_PERF_TYPE_SOFTWARE) && HAVE_DECL_PERF_TYPE_SOFTWARE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_TYPE_SOFTWARE) == (1), "PERF_TYPE_SOFTWARE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_TYPE_SOFTWARE 1
 #endif
-#if !(defined(PERF_TYPE_TRACEPOINT) || (defined(HAVE_DECL_PERF_TYPE_TRACEPOINT) && HAVE_DECL_PERF_TYPE_TRACEPOINT))
+#if defined(PERF_TYPE_TRACEPOINT) || (defined(HAVE_DECL_PERF_TYPE_TRACEPOINT) && HAVE_DECL_PERF_TYPE_TRACEPOINT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_TYPE_TRACEPOINT) == (2), "PERF_TYPE_TRACEPOINT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_TYPE_TRACEPOINT 2
 #endif
-#if !(defined(PERF_TYPE_HW_CACHE) || (defined(HAVE_DECL_PERF_TYPE_HW_CACHE) && HAVE_DECL_PERF_TYPE_HW_CACHE))
+#if defined(PERF_TYPE_HW_CACHE) || (defined(HAVE_DECL_PERF_TYPE_HW_CACHE) && HAVE_DECL_PERF_TYPE_HW_CACHE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_TYPE_HW_CACHE) == (3), "PERF_TYPE_HW_CACHE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_TYPE_HW_CACHE 3
 #endif
-#if !(defined(PERF_TYPE_RAW) || (defined(HAVE_DECL_PERF_TYPE_RAW) && HAVE_DECL_PERF_TYPE_RAW))
+#if defined(PERF_TYPE_RAW) || (defined(HAVE_DECL_PERF_TYPE_RAW) && HAVE_DECL_PERF_TYPE_RAW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_TYPE_RAW) == (4), "PERF_TYPE_RAW != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_TYPE_RAW 4
 #endif
-#if !(defined(PERF_TYPE_BREAKPOINT) || (defined(HAVE_DECL_PERF_TYPE_BREAKPOINT) && HAVE_DECL_PERF_TYPE_BREAKPOINT))
+#if defined(PERF_TYPE_BREAKPOINT) || (defined(HAVE_DECL_PERF_TYPE_BREAKPOINT) && HAVE_DECL_PERF_TYPE_BREAKPOINT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PERF_TYPE_BREAKPOINT) == (5), "PERF_TYPE_BREAKPOINT != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PERF_TYPE_BREAKPOINT 5
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat perf_type_id in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat perf_type_id in mpers mode
+
+# else
 
 static
 const struct xlat perf_type_id[] = {
@@ -36,4 +66,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/personality_flags.h b/xlat/personality_flags.h
index 6c32b73..4b2a369 100644
--- a/xlat/personality_flags.h
+++ b/xlat/personality_flags.h
@@ -1,43 +1,93 @@
 /* Generated by ./xlat/gen.sh from ./xlat/personality_flags.in; do not edit. */
-#if !(defined(UNAME26) || (defined(HAVE_DECL_UNAME26) && HAVE_DECL_UNAME26))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(UNAME26) || (defined(HAVE_DECL_UNAME26) && HAVE_DECL_UNAME26)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((UNAME26) == (0x0020000), "UNAME26 != 0x0020000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define UNAME26 0x0020000
 #endif
-#if !(defined(ADDR_NO_RANDOMIZE) || (defined(HAVE_DECL_ADDR_NO_RANDOMIZE) && HAVE_DECL_ADDR_NO_RANDOMIZE))
+#if defined(ADDR_NO_RANDOMIZE) || (defined(HAVE_DECL_ADDR_NO_RANDOMIZE) && HAVE_DECL_ADDR_NO_RANDOMIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADDR_NO_RANDOMIZE) == (0x0040000), "ADDR_NO_RANDOMIZE != 0x0040000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ADDR_NO_RANDOMIZE 0x0040000
 #endif
-#if !(defined(FDPIC_FUNCPTRS) || (defined(HAVE_DECL_FDPIC_FUNCPTRS) && HAVE_DECL_FDPIC_FUNCPTRS))
+#if defined(FDPIC_FUNCPTRS) || (defined(HAVE_DECL_FDPIC_FUNCPTRS) && HAVE_DECL_FDPIC_FUNCPTRS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FDPIC_FUNCPTRS) == (0x0080000), "FDPIC_FUNCPTRS != 0x0080000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FDPIC_FUNCPTRS 0x0080000
 #endif
-#if !(defined(MMAP_PAGE_ZERO) || (defined(HAVE_DECL_MMAP_PAGE_ZERO) && HAVE_DECL_MMAP_PAGE_ZERO))
+#if defined(MMAP_PAGE_ZERO) || (defined(HAVE_DECL_MMAP_PAGE_ZERO) && HAVE_DECL_MMAP_PAGE_ZERO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MMAP_PAGE_ZERO) == (0x0100000), "MMAP_PAGE_ZERO != 0x0100000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MMAP_PAGE_ZERO 0x0100000
 #endif
-#if !(defined(ADDR_COMPAT_LAYOUT) || (defined(HAVE_DECL_ADDR_COMPAT_LAYOUT) && HAVE_DECL_ADDR_COMPAT_LAYOUT))
+#if defined(ADDR_COMPAT_LAYOUT) || (defined(HAVE_DECL_ADDR_COMPAT_LAYOUT) && HAVE_DECL_ADDR_COMPAT_LAYOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADDR_COMPAT_LAYOUT) == (0x0200000), "ADDR_COMPAT_LAYOUT != 0x0200000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ADDR_COMPAT_LAYOUT 0x0200000
 #endif
-#if !(defined(READ_IMPLIES_EXEC) || (defined(HAVE_DECL_READ_IMPLIES_EXEC) && HAVE_DECL_READ_IMPLIES_EXEC))
+#if defined(READ_IMPLIES_EXEC) || (defined(HAVE_DECL_READ_IMPLIES_EXEC) && HAVE_DECL_READ_IMPLIES_EXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((READ_IMPLIES_EXEC) == (0x0400000), "READ_IMPLIES_EXEC != 0x0400000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define READ_IMPLIES_EXEC 0x0400000
 #endif
-#if !(defined(ADDR_LIMIT_32BIT) || (defined(HAVE_DECL_ADDR_LIMIT_32BIT) && HAVE_DECL_ADDR_LIMIT_32BIT))
+#if defined(ADDR_LIMIT_32BIT) || (defined(HAVE_DECL_ADDR_LIMIT_32BIT) && HAVE_DECL_ADDR_LIMIT_32BIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADDR_LIMIT_32BIT) == (0x0800000), "ADDR_LIMIT_32BIT != 0x0800000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ADDR_LIMIT_32BIT 0x0800000
 #endif
-#if !(defined(SHORT_INODE) || (defined(HAVE_DECL_SHORT_INODE) && HAVE_DECL_SHORT_INODE))
+#if defined(SHORT_INODE) || (defined(HAVE_DECL_SHORT_INODE) && HAVE_DECL_SHORT_INODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHORT_INODE) == (0x1000000), "SHORT_INODE != 0x1000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SHORT_INODE 0x1000000
 #endif
-#if !(defined(WHOLE_SECONDS) || (defined(HAVE_DECL_WHOLE_SECONDS) && HAVE_DECL_WHOLE_SECONDS))
+#if defined(WHOLE_SECONDS) || (defined(HAVE_DECL_WHOLE_SECONDS) && HAVE_DECL_WHOLE_SECONDS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((WHOLE_SECONDS) == (0x2000000), "WHOLE_SECONDS != 0x2000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define WHOLE_SECONDS 0x2000000
 #endif
-#if !(defined(STICKY_TIMEOUTS) || (defined(HAVE_DECL_STICKY_TIMEOUTS) && HAVE_DECL_STICKY_TIMEOUTS))
+#if defined(STICKY_TIMEOUTS) || (defined(HAVE_DECL_STICKY_TIMEOUTS) && HAVE_DECL_STICKY_TIMEOUTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STICKY_TIMEOUTS) == (0x4000000), "STICKY_TIMEOUTS != 0x4000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STICKY_TIMEOUTS 0x4000000
 #endif
-#if !(defined(ADDR_LIMIT_3GB) || (defined(HAVE_DECL_ADDR_LIMIT_3GB) && HAVE_DECL_ADDR_LIMIT_3GB))
+#if defined(ADDR_LIMIT_3GB) || (defined(HAVE_DECL_ADDR_LIMIT_3GB) && HAVE_DECL_ADDR_LIMIT_3GB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ADDR_LIMIT_3GB) == (0x8000000), "ADDR_LIMIT_3GB != 0x8000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ADDR_LIMIT_3GB 0x8000000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat personality_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat personality_flags in mpers mode
+
+# else
 
 static
 const struct xlat personality_flags[] = {
@@ -55,4 +105,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/personality_types.h b/xlat/personality_types.h
index 8e1e1e2..7560b88 100644
--- a/xlat/personality_types.h
+++ b/xlat/personality_types.h
@@ -1,79 +1,177 @@
 /* Generated by ./xlat/gen.sh from ./xlat/personality_types.in; do not edit. */
-#if !(defined(PER_LINUX) || (defined(HAVE_DECL_PER_LINUX) && HAVE_DECL_PER_LINUX))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PER_LINUX) || (defined(HAVE_DECL_PER_LINUX) && HAVE_DECL_PER_LINUX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_LINUX) == (0), "PER_LINUX != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_LINUX 0
 #endif
-#if !(defined(PER_LINUX_32BIT) || (defined(HAVE_DECL_PER_LINUX_32BIT) && HAVE_DECL_PER_LINUX_32BIT))
+#if defined(PER_LINUX_32BIT) || (defined(HAVE_DECL_PER_LINUX_32BIT) && HAVE_DECL_PER_LINUX_32BIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_LINUX_32BIT) == (ADDR_LIMIT_32BIT), "PER_LINUX_32BIT != ADDR_LIMIT_32BIT");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_LINUX_32BIT ADDR_LIMIT_32BIT
 #endif
-#if !(defined(PER_LINUX_FDPIC) || (defined(HAVE_DECL_PER_LINUX_FDPIC) && HAVE_DECL_PER_LINUX_FDPIC))
+#if defined(PER_LINUX_FDPIC) || (defined(HAVE_DECL_PER_LINUX_FDPIC) && HAVE_DECL_PER_LINUX_FDPIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_LINUX_FDPIC) == (FDPIC_FUNCPTRS), "PER_LINUX_FDPIC != FDPIC_FUNCPTRS");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_LINUX_FDPIC FDPIC_FUNCPTRS
 #endif
-#if !(defined(PER_SVR4) || (defined(HAVE_DECL_PER_SVR4) && HAVE_DECL_PER_SVR4))
+#if defined(PER_SVR4) || (defined(HAVE_DECL_PER_SVR4) && HAVE_DECL_PER_SVR4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_SVR4) == ((0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO)), "PER_SVR4 != (0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_SVR4 (0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO)
 #endif
-#if !(defined(PER_SVR3) || (defined(HAVE_DECL_PER_SVR3) && HAVE_DECL_PER_SVR3))
+#if defined(PER_SVR3) || (defined(HAVE_DECL_PER_SVR3) && HAVE_DECL_PER_SVR3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_SVR3) == ((0x0002 | STICKY_TIMEOUTS | SHORT_INODE)), "PER_SVR3 != (0x0002 | STICKY_TIMEOUTS | SHORT_INODE)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_SVR3 (0x0002 | STICKY_TIMEOUTS | SHORT_INODE)
 #endif
-#if !(defined(PER_SCOSVR3) || (defined(HAVE_DECL_PER_SCOSVR3) && HAVE_DECL_PER_SCOSVR3))
+#if defined(PER_SCOSVR3) || (defined(HAVE_DECL_PER_SCOSVR3) && HAVE_DECL_PER_SCOSVR3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_SCOSVR3) == ((0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE)), "PER_SCOSVR3 != (0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_SCOSVR3 (0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE)
 #endif
-#if !(defined(PER_OSR5) || (defined(HAVE_DECL_PER_OSR5) && HAVE_DECL_PER_OSR5))
+#if defined(PER_OSR5) || (defined(HAVE_DECL_PER_OSR5) && HAVE_DECL_PER_OSR5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_OSR5) == ((0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS)), "PER_OSR5 != (0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_OSR5 (0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS)
 #endif
-#if !(defined(PER_WYSEV386) || (defined(HAVE_DECL_PER_WYSEV386) && HAVE_DECL_PER_WYSEV386))
+#if defined(PER_WYSEV386) || (defined(HAVE_DECL_PER_WYSEV386) && HAVE_DECL_PER_WYSEV386)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_WYSEV386) == ((0x0004 | STICKY_TIMEOUTS | SHORT_INODE)), "PER_WYSEV386 != (0x0004 | STICKY_TIMEOUTS | SHORT_INODE)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_WYSEV386 (0x0004 | STICKY_TIMEOUTS | SHORT_INODE)
 #endif
-#if !(defined(PER_ISCR4) || (defined(HAVE_DECL_PER_ISCR4) && HAVE_DECL_PER_ISCR4))
+#if defined(PER_ISCR4) || (defined(HAVE_DECL_PER_ISCR4) && HAVE_DECL_PER_ISCR4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_ISCR4) == ((0x0005 | STICKY_TIMEOUTS)), "PER_ISCR4 != (0x0005 | STICKY_TIMEOUTS)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_ISCR4 (0x0005 | STICKY_TIMEOUTS)
 #endif
-#if !(defined(PER_BSD) || (defined(HAVE_DECL_PER_BSD) && HAVE_DECL_PER_BSD))
+#if defined(PER_BSD) || (defined(HAVE_DECL_PER_BSD) && HAVE_DECL_PER_BSD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_BSD) == (0x0006), "PER_BSD != 0x0006");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_BSD 0x0006
 #endif
-#if !(defined(PER_SUNOS) || (defined(HAVE_DECL_PER_SUNOS) && HAVE_DECL_PER_SUNOS))
+#if defined(PER_SUNOS) || (defined(HAVE_DECL_PER_SUNOS) && HAVE_DECL_PER_SUNOS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_SUNOS) == ((0x0006 | STICKY_TIMEOUTS)), "PER_SUNOS != (0x0006 | STICKY_TIMEOUTS)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_SUNOS (0x0006 | STICKY_TIMEOUTS)
 #endif
-#if !(defined(PER_XENIX) || (defined(HAVE_DECL_PER_XENIX) && HAVE_DECL_PER_XENIX))
+#if defined(PER_XENIX) || (defined(HAVE_DECL_PER_XENIX) && HAVE_DECL_PER_XENIX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_XENIX) == ((0x0007 | STICKY_TIMEOUTS | SHORT_INODE)), "PER_XENIX != (0x0007 | STICKY_TIMEOUTS | SHORT_INODE)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_XENIX (0x0007 | STICKY_TIMEOUTS | SHORT_INODE)
 #endif
-#if !(defined(PER_LINUX32) || (defined(HAVE_DECL_PER_LINUX32) && HAVE_DECL_PER_LINUX32))
+#if defined(PER_LINUX32) || (defined(HAVE_DECL_PER_LINUX32) && HAVE_DECL_PER_LINUX32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_LINUX32) == (0x0008), "PER_LINUX32 != 0x0008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_LINUX32 0x0008
 #endif
-#if !(defined(PER_LINUX32_3GB) || (defined(HAVE_DECL_PER_LINUX32_3GB) && HAVE_DECL_PER_LINUX32_3GB))
+#if defined(PER_LINUX32_3GB) || (defined(HAVE_DECL_PER_LINUX32_3GB) && HAVE_DECL_PER_LINUX32_3GB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_LINUX32_3GB) == ((0x0008 | ADDR_LIMIT_3GB)), "PER_LINUX32_3GB != (0x0008 | ADDR_LIMIT_3GB)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_LINUX32_3GB (0x0008 | ADDR_LIMIT_3GB)
 #endif
-#if !(defined(PER_IRIX32) || (defined(HAVE_DECL_PER_IRIX32) && HAVE_DECL_PER_IRIX32))
+#if defined(PER_IRIX32) || (defined(HAVE_DECL_PER_IRIX32) && HAVE_DECL_PER_IRIX32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_IRIX32) == ((0x0009 | STICKY_TIMEOUTS)), "PER_IRIX32 != (0x0009 | STICKY_TIMEOUTS)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_IRIX32 (0x0009 | STICKY_TIMEOUTS)
 #endif
-#if !(defined(PER_IRIXN32) || (defined(HAVE_DECL_PER_IRIXN32) && HAVE_DECL_PER_IRIXN32))
+#if defined(PER_IRIXN32) || (defined(HAVE_DECL_PER_IRIXN32) && HAVE_DECL_PER_IRIXN32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_IRIXN32) == ((0x000a | STICKY_TIMEOUTS)), "PER_IRIXN32 != (0x000a | STICKY_TIMEOUTS)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_IRIXN32 (0x000a | STICKY_TIMEOUTS)
 #endif
-#if !(defined(PER_IRIX64) || (defined(HAVE_DECL_PER_IRIX64) && HAVE_DECL_PER_IRIX64))
+#if defined(PER_IRIX64) || (defined(HAVE_DECL_PER_IRIX64) && HAVE_DECL_PER_IRIX64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_IRIX64) == ((0x000b | STICKY_TIMEOUTS)), "PER_IRIX64 != (0x000b | STICKY_TIMEOUTS)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_IRIX64 (0x000b | STICKY_TIMEOUTS)
 #endif
-#if !(defined(PER_RISCOS) || (defined(HAVE_DECL_PER_RISCOS) && HAVE_DECL_PER_RISCOS))
+#if defined(PER_RISCOS) || (defined(HAVE_DECL_PER_RISCOS) && HAVE_DECL_PER_RISCOS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_RISCOS) == (0x000c), "PER_RISCOS != 0x000c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_RISCOS 0x000c
 #endif
-#if !(defined(PER_SOLARIS) || (defined(HAVE_DECL_PER_SOLARIS) && HAVE_DECL_PER_SOLARIS))
+#if defined(PER_SOLARIS) || (defined(HAVE_DECL_PER_SOLARIS) && HAVE_DECL_PER_SOLARIS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_SOLARIS) == ((0x000d | STICKY_TIMEOUTS)), "PER_SOLARIS != (0x000d | STICKY_TIMEOUTS)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_SOLARIS (0x000d | STICKY_TIMEOUTS)
 #endif
-#if !(defined(PER_UW7) || (defined(HAVE_DECL_PER_UW7) && HAVE_DECL_PER_UW7))
+#if defined(PER_UW7) || (defined(HAVE_DECL_PER_UW7) && HAVE_DECL_PER_UW7)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_UW7) == ((0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO)), "PER_UW7 != (0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_UW7 (0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO)
 #endif
-#if !(defined(PER_OSF4) || (defined(HAVE_DECL_PER_OSF4) && HAVE_DECL_PER_OSF4))
+#if defined(PER_OSF4) || (defined(HAVE_DECL_PER_OSF4) && HAVE_DECL_PER_OSF4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_OSF4) == (0x000f), "PER_OSF4 != 0x000f");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_OSF4 0x000f
 #endif
-#if !(defined(PER_HPUX) || (defined(HAVE_DECL_PER_HPUX) && HAVE_DECL_PER_HPUX))
+#if defined(PER_HPUX) || (defined(HAVE_DECL_PER_HPUX) && HAVE_DECL_PER_HPUX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_HPUX) == (0x0010), "PER_HPUX != 0x0010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_HPUX 0x0010
 #endif
-#if !(defined(PER_MASK) || (defined(HAVE_DECL_PER_MASK) && HAVE_DECL_PER_MASK))
+#if defined(PER_MASK) || (defined(HAVE_DECL_PER_MASK) && HAVE_DECL_PER_MASK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PER_MASK) == (0x00ff), "PER_MASK != 0x00ff");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PER_MASK 0x00ff
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat personality_types in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat personality_types in mpers mode
+
+# else
 
 static
 const struct xlat personality_types[] = {
@@ -103,4 +201,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/phonet_protocols.h b/xlat/phonet_protocols.h
new file mode 100644
index 0000000..811672c
--- /dev/null
+++ b/xlat/phonet_protocols.h
@@ -0,0 +1,46 @@
+/* Generated by ./xlat/gen.sh from ./xlat/phonet_protocols.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PN_PROTO_TRANSPORT) || (defined(HAVE_DECL_PN_PROTO_TRANSPORT) && HAVE_DECL_PN_PROTO_TRANSPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PN_PROTO_TRANSPORT) == (0), "PN_PROTO_TRANSPORT != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PN_PROTO_TRANSPORT 0
+#endif
+#if defined(PN_PROTO_PHONET) || (defined(HAVE_DECL_PN_PROTO_PHONET) && HAVE_DECL_PN_PROTO_PHONET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PN_PROTO_PHONET) == (1), "PN_PROTO_PHONET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PN_PROTO_PHONET 1
+#endif
+#if defined(PN_PROTO_PIPE) || (defined(HAVE_DECL_PN_PROTO_PIPE) && HAVE_DECL_PN_PROTO_PIPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PN_PROTO_PIPE) == (2), "PN_PROTO_PIPE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PN_PROTO_PIPE 2
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat phonet_protocols in mpers mode
+
+# else
+
+static
+const struct xlat phonet_protocols[] = {
+ [PN_PROTO_TRANSPORT] = XLAT(PN_PROTO_TRANSPORT),
+ [PN_PROTO_PHONET] = XLAT(PN_PROTO_PHONET),
+ [PN_PROTO_PIPE] = XLAT(PN_PROTO_PIPE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/phonet_protocols.in b/xlat/phonet_protocols.in
new file mode 100644
index 0000000..5245ed7
--- /dev/null
+++ b/xlat/phonet_protocols.in
@@ -0,0 +1,4 @@
+#value_indexed
+PN_PROTO_TRANSPORT	0
+PN_PROTO_PHONET		1
+PN_PROTO_PIPE		2
diff --git a/xlat/pkey_access.h b/xlat/pkey_access.h
index f9f31e0..cc32932 100644
--- a/xlat/pkey_access.h
+++ b/xlat/pkey_access.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pkey_access.in; do not edit. */
-#if !(defined(PKEY_DISABLE_ACCESS) || (defined(HAVE_DECL_PKEY_DISABLE_ACCESS) && HAVE_DECL_PKEY_DISABLE_ACCESS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PKEY_DISABLE_ACCESS) || (defined(HAVE_DECL_PKEY_DISABLE_ACCESS) && HAVE_DECL_PKEY_DISABLE_ACCESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PKEY_DISABLE_ACCESS) == (0x1), "PKEY_DISABLE_ACCESS != 0x1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PKEY_DISABLE_ACCESS 0x1
 #endif
-#if !(defined(PKEY_DISABLE_WRITE) || (defined(HAVE_DECL_PKEY_DISABLE_WRITE) && HAVE_DECL_PKEY_DISABLE_WRITE))
+#if defined(PKEY_DISABLE_WRITE) || (defined(HAVE_DECL_PKEY_DISABLE_WRITE) && HAVE_DECL_PKEY_DISABLE_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PKEY_DISABLE_WRITE) == (0x2), "PKEY_DISABLE_WRITE != 0x2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PKEY_DISABLE_WRITE 0x2
 #endif
-#if !(defined(PKEY_DISABLE_EXECUTE) || (defined(HAVE_DECL_PKEY_DISABLE_EXECUTE) && HAVE_DECL_PKEY_DISABLE_EXECUTE))
+#if defined(PKEY_DISABLE_EXECUTE) || (defined(HAVE_DECL_PKEY_DISABLE_EXECUTE) && HAVE_DECL_PKEY_DISABLE_EXECUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PKEY_DISABLE_EXECUTE) == (0x4), "PKEY_DISABLE_EXECUTE != 0x4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PKEY_DISABLE_EXECUTE 0x4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pkey_access in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pkey_access in mpers mode
+
+# else
 
 static
 const struct xlat pkey_access[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/policies.h b/xlat/policies.h
index 8b44db6..9e4f4cf 100644
--- a/xlat/policies.h
+++ b/xlat/policies.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/policies.in; do not edit. */
-#if !(defined(MPOL_DEFAULT) || (defined(HAVE_DECL_MPOL_DEFAULT) && HAVE_DECL_MPOL_DEFAULT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MPOL_DEFAULT) || (defined(HAVE_DECL_MPOL_DEFAULT) && HAVE_DECL_MPOL_DEFAULT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MPOL_DEFAULT) == (0), "MPOL_DEFAULT != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MPOL_DEFAULT 0
 #endif
-#if !(defined(MPOL_PREFERRED) || (defined(HAVE_DECL_MPOL_PREFERRED) && HAVE_DECL_MPOL_PREFERRED))
+#if defined(MPOL_PREFERRED) || (defined(HAVE_DECL_MPOL_PREFERRED) && HAVE_DECL_MPOL_PREFERRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MPOL_PREFERRED) == (1), "MPOL_PREFERRED != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MPOL_PREFERRED 1
 #endif
-#if !(defined(MPOL_BIND) || (defined(HAVE_DECL_MPOL_BIND) && HAVE_DECL_MPOL_BIND))
+#if defined(MPOL_BIND) || (defined(HAVE_DECL_MPOL_BIND) && HAVE_DECL_MPOL_BIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MPOL_BIND) == (2), "MPOL_BIND != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MPOL_BIND 2
 #endif
-#if !(defined(MPOL_INTERLEAVE) || (defined(HAVE_DECL_MPOL_INTERLEAVE) && HAVE_DECL_MPOL_INTERLEAVE))
+#if defined(MPOL_INTERLEAVE) || (defined(HAVE_DECL_MPOL_INTERLEAVE) && HAVE_DECL_MPOL_INTERLEAVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MPOL_INTERLEAVE) == (3), "MPOL_INTERLEAVE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MPOL_INTERLEAVE 3
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat policies in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat policies in mpers mode
+
+# else
 
 static
 const struct xlat policies[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pollflags.h b/xlat/pollflags.h
index 6fd03a9..00645f6 100644
--- a/xlat/pollflags.h
+++ b/xlat/pollflags.h
@@ -1,37 +1,79 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pollflags.in; do not edit. */
-#if !(defined(POLLIN) || (defined(HAVE_DECL_POLLIN) && HAVE_DECL_POLLIN))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(POLLIN) || (defined(HAVE_DECL_POLLIN) && HAVE_DECL_POLLIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLLIN) == (0x0001), "POLLIN != 0x0001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLLIN 0x0001
 #endif
-#if !(defined(POLLPRI) || (defined(HAVE_DECL_POLLPRI) && HAVE_DECL_POLLPRI))
+#if defined(POLLPRI) || (defined(HAVE_DECL_POLLPRI) && HAVE_DECL_POLLPRI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLLPRI) == (0x0002), "POLLPRI != 0x0002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLLPRI 0x0002
 #endif
-#if !(defined(POLLOUT) || (defined(HAVE_DECL_POLLOUT) && HAVE_DECL_POLLOUT))
+#if defined(POLLOUT) || (defined(HAVE_DECL_POLLOUT) && HAVE_DECL_POLLOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLLOUT) == (0x0004), "POLLOUT != 0x0004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLLOUT 0x0004
 #endif
-#if !(defined(POLLRDNORM) || (defined(HAVE_DECL_POLLRDNORM) && HAVE_DECL_POLLRDNORM))
+#if defined(POLLRDNORM) || (defined(HAVE_DECL_POLLRDNORM) && HAVE_DECL_POLLRDNORM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLLRDNORM) == (0x0040), "POLLRDNORM != 0x0040");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLLRDNORM 0x0040
 #endif
-#if !(defined(POLLRDBAND) || (defined(HAVE_DECL_POLLRDBAND) && HAVE_DECL_POLLRDBAND))
+#if defined(POLLRDBAND) || (defined(HAVE_DECL_POLLRDBAND) && HAVE_DECL_POLLRDBAND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLLRDBAND) == (0x0080), "POLLRDBAND != 0x0080");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLLRDBAND 0x0080
 #endif
-#if !(defined(POLLERR) || (defined(HAVE_DECL_POLLERR) && HAVE_DECL_POLLERR))
+#if defined(POLLERR) || (defined(HAVE_DECL_POLLERR) && HAVE_DECL_POLLERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLLERR) == (0x0008), "POLLERR != 0x0008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLLERR 0x0008
 #endif
-#if !(defined(POLLHUP) || (defined(HAVE_DECL_POLLHUP) && HAVE_DECL_POLLHUP))
+#if defined(POLLHUP) || (defined(HAVE_DECL_POLLHUP) && HAVE_DECL_POLLHUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLLHUP) == (0x0010), "POLLHUP != 0x0010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLLHUP 0x0010
 #endif
-#if !(defined(POLLNVAL) || (defined(HAVE_DECL_POLLNVAL) && HAVE_DECL_POLLNVAL))
+#if defined(POLLNVAL) || (defined(HAVE_DECL_POLLNVAL) && HAVE_DECL_POLLNVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLLNVAL) == (0x0020), "POLLNVAL != 0x0020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLLNVAL 0x0020
 #endif
-#if !(defined(POLL_BUSY_LOOP) || (defined(HAVE_DECL_POLL_BUSY_LOOP) && HAVE_DECL_POLL_BUSY_LOOP))
+#if defined(POLL_BUSY_LOOP) || (defined(HAVE_DECL_POLL_BUSY_LOOP) && HAVE_DECL_POLL_BUSY_LOOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLL_BUSY_LOOP) == (0x8000), "POLL_BUSY_LOOP != 0x8000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLL_BUSY_LOOP 0x8000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pollflags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pollflags in mpers mode
+
+# else
 
 static
 const struct xlat pollflags[] = {
@@ -62,4 +104,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_cap_ambient.h b/xlat/pr_cap_ambient.h
index 83fa882..2a89eba 100644
--- a/xlat/pr_cap_ambient.h
+++ b/xlat/pr_cap_ambient.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pr_cap_ambient.in; do not edit. */
-#if !(defined(PR_CAP_AMBIENT_IS_SET) || (defined(HAVE_DECL_PR_CAP_AMBIENT_IS_SET) && HAVE_DECL_PR_CAP_AMBIENT_IS_SET))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_CAP_AMBIENT_IS_SET) || (defined(HAVE_DECL_PR_CAP_AMBIENT_IS_SET) && HAVE_DECL_PR_CAP_AMBIENT_IS_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_CAP_AMBIENT_IS_SET) == (1), "PR_CAP_AMBIENT_IS_SET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_CAP_AMBIENT_IS_SET 1
 #endif
-#if !(defined(PR_CAP_AMBIENT_RAISE) || (defined(HAVE_DECL_PR_CAP_AMBIENT_RAISE) && HAVE_DECL_PR_CAP_AMBIENT_RAISE))
+#if defined(PR_CAP_AMBIENT_RAISE) || (defined(HAVE_DECL_PR_CAP_AMBIENT_RAISE) && HAVE_DECL_PR_CAP_AMBIENT_RAISE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_CAP_AMBIENT_RAISE) == (2), "PR_CAP_AMBIENT_RAISE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_CAP_AMBIENT_RAISE 2
 #endif
-#if !(defined(PR_CAP_AMBIENT_LOWER) || (defined(HAVE_DECL_PR_CAP_AMBIENT_LOWER) && HAVE_DECL_PR_CAP_AMBIENT_LOWER))
+#if defined(PR_CAP_AMBIENT_LOWER) || (defined(HAVE_DECL_PR_CAP_AMBIENT_LOWER) && HAVE_DECL_PR_CAP_AMBIENT_LOWER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_CAP_AMBIENT_LOWER) == (3), "PR_CAP_AMBIENT_LOWER != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_CAP_AMBIENT_LOWER 3
 #endif
-#if !(defined(PR_CAP_AMBIENT_CLEAR_ALL) || (defined(HAVE_DECL_PR_CAP_AMBIENT_CLEAR_ALL) && HAVE_DECL_PR_CAP_AMBIENT_CLEAR_ALL))
+#if defined(PR_CAP_AMBIENT_CLEAR_ALL) || (defined(HAVE_DECL_PR_CAP_AMBIENT_CLEAR_ALL) && HAVE_DECL_PR_CAP_AMBIENT_CLEAR_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_CAP_AMBIENT_CLEAR_ALL) == (4), "PR_CAP_AMBIENT_CLEAR_ALL != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_CAP_AMBIENT_CLEAR_ALL 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pr_cap_ambient in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pr_cap_ambient in mpers mode
+
+# else
 
 static
 const struct xlat pr_cap_ambient[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_dumpable.h b/xlat/pr_dumpable.h
index 4e625bc..0a9404a 100644
--- a/xlat/pr_dumpable.h
+++ b/xlat/pr_dumpable.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pr_dumpable.in; do not edit. */
-#if !(defined(SUID_DUMP_DISABLE) || (defined(HAVE_DECL_SUID_DUMP_DISABLE) && HAVE_DECL_SUID_DUMP_DISABLE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SUID_DUMP_DISABLE) || (defined(HAVE_DECL_SUID_DUMP_DISABLE) && HAVE_DECL_SUID_DUMP_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SUID_DUMP_DISABLE) == (0), "SUID_DUMP_DISABLE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SUID_DUMP_DISABLE 0
 #endif
-#if !(defined(SUID_DUMP_USER) || (defined(HAVE_DECL_SUID_DUMP_USER) && HAVE_DECL_SUID_DUMP_USER))
+#if defined(SUID_DUMP_USER) || (defined(HAVE_DECL_SUID_DUMP_USER) && HAVE_DECL_SUID_DUMP_USER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SUID_DUMP_USER) == (1), "SUID_DUMP_USER != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SUID_DUMP_USER 1
 #endif
-#if !(defined(SUID_DUMP_ROOT) || (defined(HAVE_DECL_SUID_DUMP_ROOT) && HAVE_DECL_SUID_DUMP_ROOT))
+#if defined(SUID_DUMP_ROOT) || (defined(HAVE_DECL_SUID_DUMP_ROOT) && HAVE_DECL_SUID_DUMP_ROOT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SUID_DUMP_ROOT) == (2), "SUID_DUMP_ROOT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SUID_DUMP_ROOT 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pr_dumpable in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pr_dumpable in mpers mode
+
+# else
 
 static
 const struct xlat pr_dumpable[] = {
@@ -24,4 +42,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_fp_mode.h b/xlat/pr_fp_mode.h
index 4620c48..40a59db 100644
--- a/xlat/pr_fp_mode.h
+++ b/xlat/pr_fp_mode.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pr_fp_mode.in; do not edit. */
-#if !(defined(PR_FP_MODE_FR) || (defined(HAVE_DECL_PR_FP_MODE_FR) && HAVE_DECL_PR_FP_MODE_FR))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_FP_MODE_FR) || (defined(HAVE_DECL_PR_FP_MODE_FR) && HAVE_DECL_PR_FP_MODE_FR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_FP_MODE_FR) == ((1 << 0)), "PR_FP_MODE_FR != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_FP_MODE_FR (1 << 0)
 #endif
-#if !(defined(PR_FP_MODE_FRE) || (defined(HAVE_DECL_PR_FP_MODE_FRE) && HAVE_DECL_PR_FP_MODE_FRE))
+#if defined(PR_FP_MODE_FRE) || (defined(HAVE_DECL_PR_FP_MODE_FRE) && HAVE_DECL_PR_FP_MODE_FRE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_FP_MODE_FRE) == ((1 << 1)), "PR_FP_MODE_FRE != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_FP_MODE_FRE (1 << 1)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pr_fp_mode in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pr_fp_mode in mpers mode
+
+# else
 
 static
 const struct xlat pr_fp_mode[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_mce_kill.h b/xlat/pr_mce_kill.h
index d2839db..1c490fe 100644
--- a/xlat/pr_mce_kill.h
+++ b/xlat/pr_mce_kill.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pr_mce_kill.in; do not edit. */
-#if !(defined(PR_MCE_KILL_CLEAR) || (defined(HAVE_DECL_PR_MCE_KILL_CLEAR) && HAVE_DECL_PR_MCE_KILL_CLEAR))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_MCE_KILL_CLEAR) || (defined(HAVE_DECL_PR_MCE_KILL_CLEAR) && HAVE_DECL_PR_MCE_KILL_CLEAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_MCE_KILL_CLEAR) == (0), "PR_MCE_KILL_CLEAR != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_MCE_KILL_CLEAR 0
 #endif
-#if !(defined(PR_MCE_KILL_SET) || (defined(HAVE_DECL_PR_MCE_KILL_SET) && HAVE_DECL_PR_MCE_KILL_SET))
+#if defined(PR_MCE_KILL_SET) || (defined(HAVE_DECL_PR_MCE_KILL_SET) && HAVE_DECL_PR_MCE_KILL_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_MCE_KILL_SET) == (1), "PR_MCE_KILL_SET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_MCE_KILL_SET 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pr_mce_kill in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pr_mce_kill in mpers mode
+
+# else
 
 static
 const struct xlat pr_mce_kill[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_mce_kill_policy.h b/xlat/pr_mce_kill_policy.h
index aee9568..d60e2ca 100644
--- a/xlat/pr_mce_kill_policy.h
+++ b/xlat/pr_mce_kill_policy.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pr_mce_kill_policy.in; do not edit. */
-#if !(defined(PR_MCE_KILL_LATE) || (defined(HAVE_DECL_PR_MCE_KILL_LATE) && HAVE_DECL_PR_MCE_KILL_LATE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_MCE_KILL_LATE) || (defined(HAVE_DECL_PR_MCE_KILL_LATE) && HAVE_DECL_PR_MCE_KILL_LATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_MCE_KILL_LATE) == (0), "PR_MCE_KILL_LATE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_MCE_KILL_LATE 0
 #endif
-#if !(defined(PR_MCE_KILL_EARLY) || (defined(HAVE_DECL_PR_MCE_KILL_EARLY) && HAVE_DECL_PR_MCE_KILL_EARLY))
+#if defined(PR_MCE_KILL_EARLY) || (defined(HAVE_DECL_PR_MCE_KILL_EARLY) && HAVE_DECL_PR_MCE_KILL_EARLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_MCE_KILL_EARLY) == (1), "PR_MCE_KILL_EARLY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_MCE_KILL_EARLY 1
 #endif
-#if !(defined(PR_MCE_KILL_DEFAULT) || (defined(HAVE_DECL_PR_MCE_KILL_DEFAULT) && HAVE_DECL_PR_MCE_KILL_DEFAULT))
+#if defined(PR_MCE_KILL_DEFAULT) || (defined(HAVE_DECL_PR_MCE_KILL_DEFAULT) && HAVE_DECL_PR_MCE_KILL_DEFAULT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_MCE_KILL_DEFAULT) == (2), "PR_MCE_KILL_DEFAULT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_MCE_KILL_DEFAULT 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pr_mce_kill_policy in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pr_mce_kill_policy in mpers mode
+
+# else
 
 static
 const struct xlat pr_mce_kill_policy[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_set_mm.h b/xlat/pr_set_mm.h
index bc07483..e70ffc2 100644
--- a/xlat/pr_set_mm.h
+++ b/xlat/pr_set_mm.h
@@ -1,55 +1,121 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pr_set_mm.in; do not edit. */
-#if !(defined(PR_SET_MM_START_CODE) || (defined(HAVE_DECL_PR_SET_MM_START_CODE) && HAVE_DECL_PR_SET_MM_START_CODE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_SET_MM_START_CODE) || (defined(HAVE_DECL_PR_SET_MM_START_CODE) && HAVE_DECL_PR_SET_MM_START_CODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_START_CODE) == (1), "PR_SET_MM_START_CODE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_START_CODE 1
 #endif
-#if !(defined(PR_SET_MM_END_CODE) || (defined(HAVE_DECL_PR_SET_MM_END_CODE) && HAVE_DECL_PR_SET_MM_END_CODE))
+#if defined(PR_SET_MM_END_CODE) || (defined(HAVE_DECL_PR_SET_MM_END_CODE) && HAVE_DECL_PR_SET_MM_END_CODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_END_CODE) == (2), "PR_SET_MM_END_CODE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_END_CODE 2
 #endif
-#if !(defined(PR_SET_MM_START_DATA) || (defined(HAVE_DECL_PR_SET_MM_START_DATA) && HAVE_DECL_PR_SET_MM_START_DATA))
+#if defined(PR_SET_MM_START_DATA) || (defined(HAVE_DECL_PR_SET_MM_START_DATA) && HAVE_DECL_PR_SET_MM_START_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_START_DATA) == (3), "PR_SET_MM_START_DATA != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_START_DATA 3
 #endif
-#if !(defined(PR_SET_MM_END_DATA) || (defined(HAVE_DECL_PR_SET_MM_END_DATA) && HAVE_DECL_PR_SET_MM_END_DATA))
+#if defined(PR_SET_MM_END_DATA) || (defined(HAVE_DECL_PR_SET_MM_END_DATA) && HAVE_DECL_PR_SET_MM_END_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_END_DATA) == (4), "PR_SET_MM_END_DATA != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_END_DATA 4
 #endif
-#if !(defined(PR_SET_MM_START_STACK) || (defined(HAVE_DECL_PR_SET_MM_START_STACK) && HAVE_DECL_PR_SET_MM_START_STACK))
+#if defined(PR_SET_MM_START_STACK) || (defined(HAVE_DECL_PR_SET_MM_START_STACK) && HAVE_DECL_PR_SET_MM_START_STACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_START_STACK) == (5), "PR_SET_MM_START_STACK != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_START_STACK 5
 #endif
-#if !(defined(PR_SET_MM_START_BRK) || (defined(HAVE_DECL_PR_SET_MM_START_BRK) && HAVE_DECL_PR_SET_MM_START_BRK))
+#if defined(PR_SET_MM_START_BRK) || (defined(HAVE_DECL_PR_SET_MM_START_BRK) && HAVE_DECL_PR_SET_MM_START_BRK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_START_BRK) == (6), "PR_SET_MM_START_BRK != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_START_BRK 6
 #endif
-#if !(defined(PR_SET_MM_BRK) || (defined(HAVE_DECL_PR_SET_MM_BRK) && HAVE_DECL_PR_SET_MM_BRK))
+#if defined(PR_SET_MM_BRK) || (defined(HAVE_DECL_PR_SET_MM_BRK) && HAVE_DECL_PR_SET_MM_BRK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_BRK) == (7), "PR_SET_MM_BRK != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_BRK 7
 #endif
-#if !(defined(PR_SET_MM_ARG_START) || (defined(HAVE_DECL_PR_SET_MM_ARG_START) && HAVE_DECL_PR_SET_MM_ARG_START))
+#if defined(PR_SET_MM_ARG_START) || (defined(HAVE_DECL_PR_SET_MM_ARG_START) && HAVE_DECL_PR_SET_MM_ARG_START)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_ARG_START) == (8), "PR_SET_MM_ARG_START != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_ARG_START 8
 #endif
-#if !(defined(PR_SET_MM_ARG_END) || (defined(HAVE_DECL_PR_SET_MM_ARG_END) && HAVE_DECL_PR_SET_MM_ARG_END))
+#if defined(PR_SET_MM_ARG_END) || (defined(HAVE_DECL_PR_SET_MM_ARG_END) && HAVE_DECL_PR_SET_MM_ARG_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_ARG_END) == (9), "PR_SET_MM_ARG_END != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_ARG_END 9
 #endif
-#if !(defined(PR_SET_MM_ENV_START) || (defined(HAVE_DECL_PR_SET_MM_ENV_START) && HAVE_DECL_PR_SET_MM_ENV_START))
+#if defined(PR_SET_MM_ENV_START) || (defined(HAVE_DECL_PR_SET_MM_ENV_START) && HAVE_DECL_PR_SET_MM_ENV_START)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_ENV_START) == (10), "PR_SET_MM_ENV_START != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_ENV_START 10
 #endif
-#if !(defined(PR_SET_MM_ENV_END) || (defined(HAVE_DECL_PR_SET_MM_ENV_END) && HAVE_DECL_PR_SET_MM_ENV_END))
+#if defined(PR_SET_MM_ENV_END) || (defined(HAVE_DECL_PR_SET_MM_ENV_END) && HAVE_DECL_PR_SET_MM_ENV_END)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_ENV_END) == (11), "PR_SET_MM_ENV_END != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_ENV_END 11
 #endif
-#if !(defined(PR_SET_MM_AUXV) || (defined(HAVE_DECL_PR_SET_MM_AUXV) && HAVE_DECL_PR_SET_MM_AUXV))
+#if defined(PR_SET_MM_AUXV) || (defined(HAVE_DECL_PR_SET_MM_AUXV) && HAVE_DECL_PR_SET_MM_AUXV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_AUXV) == (12), "PR_SET_MM_AUXV != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_AUXV 12
 #endif
-#if !(defined(PR_SET_MM_EXE_FILE) || (defined(HAVE_DECL_PR_SET_MM_EXE_FILE) && HAVE_DECL_PR_SET_MM_EXE_FILE))
+#if defined(PR_SET_MM_EXE_FILE) || (defined(HAVE_DECL_PR_SET_MM_EXE_FILE) && HAVE_DECL_PR_SET_MM_EXE_FILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_EXE_FILE) == (13), "PR_SET_MM_EXE_FILE != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_EXE_FILE 13
 #endif
-#if !(defined(PR_SET_MM_MAP) || (defined(HAVE_DECL_PR_SET_MM_MAP) && HAVE_DECL_PR_SET_MM_MAP))
+#if defined(PR_SET_MM_MAP) || (defined(HAVE_DECL_PR_SET_MM_MAP) && HAVE_DECL_PR_SET_MM_MAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_MAP) == (14), "PR_SET_MM_MAP != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_MAP 14
 #endif
-#if !(defined(PR_SET_MM_MAP_SIZE) || (defined(HAVE_DECL_PR_SET_MM_MAP_SIZE) && HAVE_DECL_PR_SET_MM_MAP_SIZE))
+#if defined(PR_SET_MM_MAP_SIZE) || (defined(HAVE_DECL_PR_SET_MM_MAP_SIZE) && HAVE_DECL_PR_SET_MM_MAP_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM_MAP_SIZE) == (15), "PR_SET_MM_MAP_SIZE != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM_MAP_SIZE 15
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pr_set_mm in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pr_set_mm in mpers mode
+
+# else
 
 static
 const struct xlat pr_set_mm[] = {
@@ -71,4 +137,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_spec_cmds.h b/xlat/pr_spec_cmds.h
new file mode 100644
index 0000000..7724d24
--- /dev/null
+++ b/xlat/pr_spec_cmds.h
@@ -0,0 +1,30 @@
+/* Generated by ./xlat/gen.sh from ./xlat/pr_spec_cmds.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_SPEC_STORE_BYPASS) || (defined(HAVE_DECL_PR_SPEC_STORE_BYPASS) && HAVE_DECL_PR_SPEC_STORE_BYPASS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SPEC_STORE_BYPASS) == (0), "PR_SPEC_STORE_BYPASS != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SPEC_STORE_BYPASS 0
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat pr_spec_cmds in mpers mode
+
+# else
+
+static
+const struct xlat pr_spec_cmds[] = {
+ XLAT(PR_SPEC_STORE_BYPASS),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_spec_cmds.in b/xlat/pr_spec_cmds.in
new file mode 100644
index 0000000..e006923
--- /dev/null
+++ b/xlat/pr_spec_cmds.in
@@ -0,0 +1 @@
+PR_SPEC_STORE_BYPASS	0
diff --git a/xlat/pr_spec_get_store_bypass_flags.h b/xlat/pr_spec_get_store_bypass_flags.h
new file mode 100644
index 0000000..6985caa
--- /dev/null
+++ b/xlat/pr_spec_get_store_bypass_flags.h
@@ -0,0 +1,62 @@
+/* Generated by ./xlat/gen.sh from ./xlat/pr_spec_get_store_bypass_flags.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_SPEC_NOT_AFFECTED) || (defined(HAVE_DECL_PR_SPEC_NOT_AFFECTED) && HAVE_DECL_PR_SPEC_NOT_AFFECTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SPEC_NOT_AFFECTED) == (0), "PR_SPEC_NOT_AFFECTED != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SPEC_NOT_AFFECTED 0
+#endif
+#if defined(PR_SPEC_PRCTL) || (defined(HAVE_DECL_PR_SPEC_PRCTL) && HAVE_DECL_PR_SPEC_PRCTL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SPEC_PRCTL) == ((1 << 0)), "PR_SPEC_PRCTL != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SPEC_PRCTL (1 << 0)
+#endif
+#if defined(PR_SPEC_ENABLE) || (defined(HAVE_DECL_PR_SPEC_ENABLE) && HAVE_DECL_PR_SPEC_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SPEC_ENABLE) == ((1 << 1)), "PR_SPEC_ENABLE != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SPEC_ENABLE (1 << 1)
+#endif
+#if defined(PR_SPEC_DISABLE) || (defined(HAVE_DECL_PR_SPEC_DISABLE) && HAVE_DECL_PR_SPEC_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SPEC_DISABLE) == ((1 << 2)), "PR_SPEC_DISABLE != (1 << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SPEC_DISABLE (1 << 2)
+#endif
+#if defined(PR_SPEC_FORCE_DISABLE) || (defined(HAVE_DECL_PR_SPEC_FORCE_DISABLE) && HAVE_DECL_PR_SPEC_FORCE_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SPEC_FORCE_DISABLE) == ((1 << 3)), "PR_SPEC_FORCE_DISABLE != (1 << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SPEC_FORCE_DISABLE (1 << 3)
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat pr_spec_get_store_bypass_flags in mpers mode
+
+# else
+
+static
+const struct xlat pr_spec_get_store_bypass_flags[] = {
+ XLAT(PR_SPEC_NOT_AFFECTED),
+ XLAT(PR_SPEC_PRCTL),
+ XLAT(PR_SPEC_ENABLE),
+ XLAT(PR_SPEC_DISABLE),
+ XLAT(PR_SPEC_FORCE_DISABLE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_spec_get_store_bypass_flags.in b/xlat/pr_spec_get_store_bypass_flags.in
new file mode 100644
index 0000000..81f3674
--- /dev/null
+++ b/xlat/pr_spec_get_store_bypass_flags.in
@@ -0,0 +1,5 @@
+PR_SPEC_NOT_AFFECTED	0
+PR_SPEC_PRCTL		(1 << 0)
+PR_SPEC_ENABLE		(1 << 1)
+PR_SPEC_DISABLE		(1 << 2)
+PR_SPEC_FORCE_DISABLE	(1 << 3)
diff --git a/xlat/pr_spec_set_store_bypass_flags.h b/xlat/pr_spec_set_store_bypass_flags.h
new file mode 100644
index 0000000..1ff205b
--- /dev/null
+++ b/xlat/pr_spec_set_store_bypass_flags.h
@@ -0,0 +1,46 @@
+/* Generated by ./xlat/gen.sh from ./xlat/pr_spec_set_store_bypass_flags.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_SPEC_ENABLE) || (defined(HAVE_DECL_PR_SPEC_ENABLE) && HAVE_DECL_PR_SPEC_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SPEC_ENABLE) == ((1 << 1)), "PR_SPEC_ENABLE != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SPEC_ENABLE (1 << 1)
+#endif
+#if defined(PR_SPEC_DISABLE) || (defined(HAVE_DECL_PR_SPEC_DISABLE) && HAVE_DECL_PR_SPEC_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SPEC_DISABLE) == ((1 << 2)), "PR_SPEC_DISABLE != (1 << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SPEC_DISABLE (1 << 2)
+#endif
+#if defined(PR_SPEC_FORCE_DISABLE) || (defined(HAVE_DECL_PR_SPEC_FORCE_DISABLE) && HAVE_DECL_PR_SPEC_FORCE_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SPEC_FORCE_DISABLE) == ((1 << 3)), "PR_SPEC_FORCE_DISABLE != (1 << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SPEC_FORCE_DISABLE (1 << 3)
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat pr_spec_set_store_bypass_flags in mpers mode
+
+# else
+
+static
+const struct xlat pr_spec_set_store_bypass_flags[] = {
+ XLAT(PR_SPEC_ENABLE),
+ XLAT(PR_SPEC_DISABLE),
+ XLAT(PR_SPEC_FORCE_DISABLE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_spec_set_store_bypass_flags.in b/xlat/pr_spec_set_store_bypass_flags.in
new file mode 100644
index 0000000..04f3a03
--- /dev/null
+++ b/xlat/pr_spec_set_store_bypass_flags.in
@@ -0,0 +1,3 @@
+PR_SPEC_ENABLE		(1 << 1)
+PR_SPEC_DISABLE		(1 << 2)
+PR_SPEC_FORCE_DISABLE	(1 << 3)
diff --git a/xlat/pr_sve_vl_flags.h b/xlat/pr_sve_vl_flags.h
index 3dcbb06..9a524b0 100644
--- a/xlat/pr_sve_vl_flags.h
+++ b/xlat/pr_sve_vl_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pr_sve_vl_flags.in; do not edit. */
-#if !(defined(PR_SVE_SET_VL_ONEXEC) || (defined(HAVE_DECL_PR_SVE_SET_VL_ONEXEC) && HAVE_DECL_PR_SVE_SET_VL_ONEXEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_SVE_SET_VL_ONEXEC) || (defined(HAVE_DECL_PR_SVE_SET_VL_ONEXEC) && HAVE_DECL_PR_SVE_SET_VL_ONEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SVE_SET_VL_ONEXEC) == ((1 << 18)), "PR_SVE_SET_VL_ONEXEC != (1 << 18)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SVE_SET_VL_ONEXEC (1 << 18)
 #endif
-#if !(defined(PR_SVE_VL_INHERIT) || (defined(HAVE_DECL_PR_SVE_VL_INHERIT) && HAVE_DECL_PR_SVE_VL_INHERIT))
+#if defined(PR_SVE_VL_INHERIT) || (defined(HAVE_DECL_PR_SVE_VL_INHERIT) && HAVE_DECL_PR_SVE_VL_INHERIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SVE_VL_INHERIT) == ((1 << 17)), "PR_SVE_VL_INHERIT != (1 << 17)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SVE_VL_INHERIT (1 << 17)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pr_sve_vl_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pr_sve_vl_flags in mpers mode
+
+# else
 
 static
 const struct xlat pr_sve_vl_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_tsc.h b/xlat/pr_tsc.h
index daec871..52b8caf 100644
--- a/xlat/pr_tsc.h
+++ b/xlat/pr_tsc.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pr_tsc.in; do not edit. */
-#if !(defined(PR_TSC_ENABLE) || (defined(HAVE_DECL_PR_TSC_ENABLE) && HAVE_DECL_PR_TSC_ENABLE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_TSC_ENABLE) || (defined(HAVE_DECL_PR_TSC_ENABLE) && HAVE_DECL_PR_TSC_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_TSC_ENABLE) == (1), "PR_TSC_ENABLE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_TSC_ENABLE 1
 #endif
-#if !(defined(PR_TSC_SIGSEGV) || (defined(HAVE_DECL_PR_TSC_SIGSEGV) && HAVE_DECL_PR_TSC_SIGSEGV))
+#if defined(PR_TSC_SIGSEGV) || (defined(HAVE_DECL_PR_TSC_SIGSEGV) && HAVE_DECL_PR_TSC_SIGSEGV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_TSC_SIGSEGV) == (2), "PR_TSC_SIGSEGV != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_TSC_SIGSEGV 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pr_tsc in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pr_tsc in mpers mode
+
+# else
 
 static
 const struct xlat pr_tsc[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/pr_unalign_flags.h b/xlat/pr_unalign_flags.h
index 5a92686..e80c130 100644
--- a/xlat/pr_unalign_flags.h
+++ b/xlat/pr_unalign_flags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/pr_unalign_flags.in; do not edit. */
-#if !(defined(PR_UNALIGN_NOPRINT) || (defined(HAVE_DECL_PR_UNALIGN_NOPRINT) && HAVE_DECL_PR_UNALIGN_NOPRINT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_UNALIGN_NOPRINT) || (defined(HAVE_DECL_PR_UNALIGN_NOPRINT) && HAVE_DECL_PR_UNALIGN_NOPRINT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_UNALIGN_NOPRINT) == (1), "PR_UNALIGN_NOPRINT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_UNALIGN_NOPRINT 1
 #endif
-#if !(defined(PR_UNALIGN_SIGBUS) || (defined(HAVE_DECL_PR_UNALIGN_SIGBUS) && HAVE_DECL_PR_UNALIGN_SIGBUS))
+#if defined(PR_UNALIGN_SIGBUS) || (defined(HAVE_DECL_PR_UNALIGN_SIGBUS) && HAVE_DECL_PR_UNALIGN_SIGBUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_UNALIGN_SIGBUS) == (2), "PR_UNALIGN_SIGBUS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_UNALIGN_SIGBUS 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat pr_unalign_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat pr_unalign_flags in mpers mode
+
+# else
 
 static
 const struct xlat pr_unalign_flags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/prctl_options.h b/xlat/prctl_options.h
index e1a470f..b018dfc 100644
--- a/xlat/prctl_options.h
+++ b/xlat/prctl_options.h
@@ -1,157 +1,373 @@
 /* Generated by ./xlat/gen.sh from ./xlat/prctl_options.in; do not edit. */
-#if !(defined(PR_SET_PDEATHSIG) || (defined(HAVE_DECL_PR_SET_PDEATHSIG) && HAVE_DECL_PR_SET_PDEATHSIG))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PR_SET_PDEATHSIG) || (defined(HAVE_DECL_PR_SET_PDEATHSIG) && HAVE_DECL_PR_SET_PDEATHSIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_PDEATHSIG) == (1), "PR_SET_PDEATHSIG != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_PDEATHSIG 1
 #endif
-#if !(defined(PR_GET_PDEATHSIG) || (defined(HAVE_DECL_PR_GET_PDEATHSIG) && HAVE_DECL_PR_GET_PDEATHSIG))
+#if defined(PR_GET_PDEATHSIG) || (defined(HAVE_DECL_PR_GET_PDEATHSIG) && HAVE_DECL_PR_GET_PDEATHSIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_PDEATHSIG) == (2), "PR_GET_PDEATHSIG != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_PDEATHSIG 2
 #endif
-#if !(defined(PR_GET_DUMPABLE) || (defined(HAVE_DECL_PR_GET_DUMPABLE) && HAVE_DECL_PR_GET_DUMPABLE))
+#if defined(PR_GET_DUMPABLE) || (defined(HAVE_DECL_PR_GET_DUMPABLE) && HAVE_DECL_PR_GET_DUMPABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_DUMPABLE) == (3), "PR_GET_DUMPABLE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_DUMPABLE 3
 #endif
-#if !(defined(PR_SET_DUMPABLE) || (defined(HAVE_DECL_PR_SET_DUMPABLE) && HAVE_DECL_PR_SET_DUMPABLE))
+#if defined(PR_SET_DUMPABLE) || (defined(HAVE_DECL_PR_SET_DUMPABLE) && HAVE_DECL_PR_SET_DUMPABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_DUMPABLE) == (4), "PR_SET_DUMPABLE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_DUMPABLE 4
 #endif
-#if !(defined(PR_GET_UNALIGN) || (defined(HAVE_DECL_PR_GET_UNALIGN) && HAVE_DECL_PR_GET_UNALIGN))
+#if defined(PR_GET_UNALIGN) || (defined(HAVE_DECL_PR_GET_UNALIGN) && HAVE_DECL_PR_GET_UNALIGN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_UNALIGN) == (5), "PR_GET_UNALIGN != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_UNALIGN 5
 #endif
-#if !(defined(PR_SET_UNALIGN) || (defined(HAVE_DECL_PR_SET_UNALIGN) && HAVE_DECL_PR_SET_UNALIGN))
+#if defined(PR_SET_UNALIGN) || (defined(HAVE_DECL_PR_SET_UNALIGN) && HAVE_DECL_PR_SET_UNALIGN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_UNALIGN) == (6), "PR_SET_UNALIGN != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_UNALIGN 6
 #endif
-#if !(defined(PR_GET_KEEPCAPS) || (defined(HAVE_DECL_PR_GET_KEEPCAPS) && HAVE_DECL_PR_GET_KEEPCAPS))
+#if defined(PR_GET_KEEPCAPS) || (defined(HAVE_DECL_PR_GET_KEEPCAPS) && HAVE_DECL_PR_GET_KEEPCAPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_KEEPCAPS) == (7), "PR_GET_KEEPCAPS != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_KEEPCAPS 7
 #endif
-#if !(defined(PR_SET_KEEPCAPS) || (defined(HAVE_DECL_PR_SET_KEEPCAPS) && HAVE_DECL_PR_SET_KEEPCAPS))
+#if defined(PR_SET_KEEPCAPS) || (defined(HAVE_DECL_PR_SET_KEEPCAPS) && HAVE_DECL_PR_SET_KEEPCAPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_KEEPCAPS) == (8), "PR_SET_KEEPCAPS != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_KEEPCAPS 8
 #endif
-#if !(defined(PR_GET_FPEMU) || (defined(HAVE_DECL_PR_GET_FPEMU) && HAVE_DECL_PR_GET_FPEMU))
+#if defined(PR_GET_FPEMU) || (defined(HAVE_DECL_PR_GET_FPEMU) && HAVE_DECL_PR_GET_FPEMU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_FPEMU) == (9), "PR_GET_FPEMU != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_FPEMU 9
 #endif
-#if !(defined(PR_SET_FPEMU) || (defined(HAVE_DECL_PR_SET_FPEMU) && HAVE_DECL_PR_SET_FPEMU))
+#if defined(PR_SET_FPEMU) || (defined(HAVE_DECL_PR_SET_FPEMU) && HAVE_DECL_PR_SET_FPEMU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_FPEMU) == (10), "PR_SET_FPEMU != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_FPEMU 10
 #endif
-#if !(defined(PR_GET_FPEXC) || (defined(HAVE_DECL_PR_GET_FPEXC) && HAVE_DECL_PR_GET_FPEXC))
+#if defined(PR_GET_FPEXC) || (defined(HAVE_DECL_PR_GET_FPEXC) && HAVE_DECL_PR_GET_FPEXC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_FPEXC) == (11), "PR_GET_FPEXC != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_FPEXC 11
 #endif
-#if !(defined(PR_SET_FPEXC) || (defined(HAVE_DECL_PR_SET_FPEXC) && HAVE_DECL_PR_SET_FPEXC))
+#if defined(PR_SET_FPEXC) || (defined(HAVE_DECL_PR_SET_FPEXC) && HAVE_DECL_PR_SET_FPEXC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_FPEXC) == (12), "PR_SET_FPEXC != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_FPEXC 12
 #endif
-#if !(defined(PR_GET_TIMING) || (defined(HAVE_DECL_PR_GET_TIMING) && HAVE_DECL_PR_GET_TIMING))
+#if defined(PR_GET_TIMING) || (defined(HAVE_DECL_PR_GET_TIMING) && HAVE_DECL_PR_GET_TIMING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_TIMING) == (13), "PR_GET_TIMING != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_TIMING 13
 #endif
-#if !(defined(PR_SET_TIMING) || (defined(HAVE_DECL_PR_SET_TIMING) && HAVE_DECL_PR_SET_TIMING))
+#if defined(PR_SET_TIMING) || (defined(HAVE_DECL_PR_SET_TIMING) && HAVE_DECL_PR_SET_TIMING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_TIMING) == (14), "PR_SET_TIMING != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_TIMING 14
 #endif
-#if !(defined(PR_SET_NAME) || (defined(HAVE_DECL_PR_SET_NAME) && HAVE_DECL_PR_SET_NAME))
+#if defined(PR_SET_NAME) || (defined(HAVE_DECL_PR_SET_NAME) && HAVE_DECL_PR_SET_NAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_NAME) == (15), "PR_SET_NAME != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_NAME 15
 #endif
-#if !(defined(PR_GET_NAME) || (defined(HAVE_DECL_PR_GET_NAME) && HAVE_DECL_PR_GET_NAME))
+#if defined(PR_GET_NAME) || (defined(HAVE_DECL_PR_GET_NAME) && HAVE_DECL_PR_GET_NAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_NAME) == (16), "PR_GET_NAME != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_NAME 16
 #endif
-#if !(defined(PR_GET_ENDIAN) || (defined(HAVE_DECL_PR_GET_ENDIAN) && HAVE_DECL_PR_GET_ENDIAN))
+#if defined(PR_GET_ENDIAN) || (defined(HAVE_DECL_PR_GET_ENDIAN) && HAVE_DECL_PR_GET_ENDIAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_ENDIAN) == (19), "PR_GET_ENDIAN != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_ENDIAN 19
 #endif
-#if !(defined(PR_SET_ENDIAN) || (defined(HAVE_DECL_PR_SET_ENDIAN) && HAVE_DECL_PR_SET_ENDIAN))
+#if defined(PR_SET_ENDIAN) || (defined(HAVE_DECL_PR_SET_ENDIAN) && HAVE_DECL_PR_SET_ENDIAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_ENDIAN) == (20), "PR_SET_ENDIAN != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_ENDIAN 20
 #endif
-#if !(defined(PR_GET_SECCOMP) || (defined(HAVE_DECL_PR_GET_SECCOMP) && HAVE_DECL_PR_GET_SECCOMP))
+#if defined(PR_GET_SECCOMP) || (defined(HAVE_DECL_PR_GET_SECCOMP) && HAVE_DECL_PR_GET_SECCOMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_SECCOMP) == (21), "PR_GET_SECCOMP != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_SECCOMP 21
 #endif
-#if !(defined(PR_SET_SECCOMP) || (defined(HAVE_DECL_PR_SET_SECCOMP) && HAVE_DECL_PR_SET_SECCOMP))
+#if defined(PR_SET_SECCOMP) || (defined(HAVE_DECL_PR_SET_SECCOMP) && HAVE_DECL_PR_SET_SECCOMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_SECCOMP) == (22), "PR_SET_SECCOMP != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_SECCOMP 22
 #endif
-#if !(defined(PR_CAPBSET_READ) || (defined(HAVE_DECL_PR_CAPBSET_READ) && HAVE_DECL_PR_CAPBSET_READ))
+#if defined(PR_CAPBSET_READ) || (defined(HAVE_DECL_PR_CAPBSET_READ) && HAVE_DECL_PR_CAPBSET_READ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_CAPBSET_READ) == (23), "PR_CAPBSET_READ != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_CAPBSET_READ 23
 #endif
-#if !(defined(PR_CAPBSET_DROP) || (defined(HAVE_DECL_PR_CAPBSET_DROP) && HAVE_DECL_PR_CAPBSET_DROP))
+#if defined(PR_CAPBSET_DROP) || (defined(HAVE_DECL_PR_CAPBSET_DROP) && HAVE_DECL_PR_CAPBSET_DROP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_CAPBSET_DROP) == (24), "PR_CAPBSET_DROP != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_CAPBSET_DROP 24
 #endif
-#if !(defined(PR_GET_TSC) || (defined(HAVE_DECL_PR_GET_TSC) && HAVE_DECL_PR_GET_TSC))
+#if defined(PR_GET_TSC) || (defined(HAVE_DECL_PR_GET_TSC) && HAVE_DECL_PR_GET_TSC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_TSC) == (25), "PR_GET_TSC != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_TSC 25
 #endif
-#if !(defined(PR_SET_TSC) || (defined(HAVE_DECL_PR_SET_TSC) && HAVE_DECL_PR_SET_TSC))
+#if defined(PR_SET_TSC) || (defined(HAVE_DECL_PR_SET_TSC) && HAVE_DECL_PR_SET_TSC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_TSC) == (26), "PR_SET_TSC != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_TSC 26
 #endif
-#if !(defined(PR_GET_SECUREBITS) || (defined(HAVE_DECL_PR_GET_SECUREBITS) && HAVE_DECL_PR_GET_SECUREBITS))
+#if defined(PR_GET_SECUREBITS) || (defined(HAVE_DECL_PR_GET_SECUREBITS) && HAVE_DECL_PR_GET_SECUREBITS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_SECUREBITS) == (27), "PR_GET_SECUREBITS != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_SECUREBITS 27
 #endif
-#if !(defined(PR_SET_SECUREBITS) || (defined(HAVE_DECL_PR_SET_SECUREBITS) && HAVE_DECL_PR_SET_SECUREBITS))
+#if defined(PR_SET_SECUREBITS) || (defined(HAVE_DECL_PR_SET_SECUREBITS) && HAVE_DECL_PR_SET_SECUREBITS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_SECUREBITS) == (28), "PR_SET_SECUREBITS != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_SECUREBITS 28
 #endif
-#if !(defined(PR_SET_TIMERSLACK) || (defined(HAVE_DECL_PR_SET_TIMERSLACK) && HAVE_DECL_PR_SET_TIMERSLACK))
+#if defined(PR_SET_TIMERSLACK) || (defined(HAVE_DECL_PR_SET_TIMERSLACK) && HAVE_DECL_PR_SET_TIMERSLACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_TIMERSLACK) == (29), "PR_SET_TIMERSLACK != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_TIMERSLACK 29
 #endif
-#if !(defined(PR_GET_TIMERSLACK) || (defined(HAVE_DECL_PR_GET_TIMERSLACK) && HAVE_DECL_PR_GET_TIMERSLACK))
+#if defined(PR_GET_TIMERSLACK) || (defined(HAVE_DECL_PR_GET_TIMERSLACK) && HAVE_DECL_PR_GET_TIMERSLACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_TIMERSLACK) == (30), "PR_GET_TIMERSLACK != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_TIMERSLACK 30
 #endif
-#if !(defined(PR_TASK_PERF_EVENTS_DISABLE) || (defined(HAVE_DECL_PR_TASK_PERF_EVENTS_DISABLE) && HAVE_DECL_PR_TASK_PERF_EVENTS_DISABLE))
+#if defined(PR_TASK_PERF_EVENTS_DISABLE) || (defined(HAVE_DECL_PR_TASK_PERF_EVENTS_DISABLE) && HAVE_DECL_PR_TASK_PERF_EVENTS_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_TASK_PERF_EVENTS_DISABLE) == (31), "PR_TASK_PERF_EVENTS_DISABLE != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_TASK_PERF_EVENTS_DISABLE 31
 #endif
-#if !(defined(PR_TASK_PERF_EVENTS_ENABLE) || (defined(HAVE_DECL_PR_TASK_PERF_EVENTS_ENABLE) && HAVE_DECL_PR_TASK_PERF_EVENTS_ENABLE))
+#if defined(PR_TASK_PERF_EVENTS_ENABLE) || (defined(HAVE_DECL_PR_TASK_PERF_EVENTS_ENABLE) && HAVE_DECL_PR_TASK_PERF_EVENTS_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_TASK_PERF_EVENTS_ENABLE) == (32), "PR_TASK_PERF_EVENTS_ENABLE != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_TASK_PERF_EVENTS_ENABLE 32
 #endif
-#if !(defined(PR_MCE_KILL) || (defined(HAVE_DECL_PR_MCE_KILL) && HAVE_DECL_PR_MCE_KILL))
+#if defined(PR_MCE_KILL) || (defined(HAVE_DECL_PR_MCE_KILL) && HAVE_DECL_PR_MCE_KILL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_MCE_KILL) == (33), "PR_MCE_KILL != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_MCE_KILL 33
 #endif
-#if !(defined(PR_MCE_KILL_GET) || (defined(HAVE_DECL_PR_MCE_KILL_GET) && HAVE_DECL_PR_MCE_KILL_GET))
+#if defined(PR_MCE_KILL_GET) || (defined(HAVE_DECL_PR_MCE_KILL_GET) && HAVE_DECL_PR_MCE_KILL_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_MCE_KILL_GET) == (34), "PR_MCE_KILL_GET != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_MCE_KILL_GET 34
 #endif
-#if !(defined(PR_SET_MM) || (defined(HAVE_DECL_PR_SET_MM) && HAVE_DECL_PR_SET_MM))
+#if defined(PR_SET_MM) || (defined(HAVE_DECL_PR_SET_MM) && HAVE_DECL_PR_SET_MM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_MM) == (35), "PR_SET_MM != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_MM 35
 #endif
-#if !(defined(PR_SET_PTRACER) || (defined(HAVE_DECL_PR_SET_PTRACER) && HAVE_DECL_PR_SET_PTRACER))
+#if defined(PR_SET_PTRACER) || (defined(HAVE_DECL_PR_SET_PTRACER) && HAVE_DECL_PR_SET_PTRACER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_PTRACER) == (0x59616d61), "PR_SET_PTRACER != 0x59616d61");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_PTRACER 0x59616d61
 #endif
-#if !(defined(PR_SET_CHILD_SUBREAPER) || (defined(HAVE_DECL_PR_SET_CHILD_SUBREAPER) && HAVE_DECL_PR_SET_CHILD_SUBREAPER))
+#if defined(PR_SET_CHILD_SUBREAPER) || (defined(HAVE_DECL_PR_SET_CHILD_SUBREAPER) && HAVE_DECL_PR_SET_CHILD_SUBREAPER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_CHILD_SUBREAPER) == (36), "PR_SET_CHILD_SUBREAPER != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_CHILD_SUBREAPER 36
 #endif
-#if !(defined(PR_GET_CHILD_SUBREAPER) || (defined(HAVE_DECL_PR_GET_CHILD_SUBREAPER) && HAVE_DECL_PR_GET_CHILD_SUBREAPER))
+#if defined(PR_GET_CHILD_SUBREAPER) || (defined(HAVE_DECL_PR_GET_CHILD_SUBREAPER) && HAVE_DECL_PR_GET_CHILD_SUBREAPER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_CHILD_SUBREAPER) == (37), "PR_GET_CHILD_SUBREAPER != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_CHILD_SUBREAPER 37
 #endif
-#if !(defined(PR_SET_NO_NEW_PRIVS) || (defined(HAVE_DECL_PR_SET_NO_NEW_PRIVS) && HAVE_DECL_PR_SET_NO_NEW_PRIVS))
+#if defined(PR_SET_NO_NEW_PRIVS) || (defined(HAVE_DECL_PR_SET_NO_NEW_PRIVS) && HAVE_DECL_PR_SET_NO_NEW_PRIVS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_NO_NEW_PRIVS) == (38), "PR_SET_NO_NEW_PRIVS != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_NO_NEW_PRIVS 38
 #endif
-#if !(defined(PR_GET_NO_NEW_PRIVS) || (defined(HAVE_DECL_PR_GET_NO_NEW_PRIVS) && HAVE_DECL_PR_GET_NO_NEW_PRIVS))
+#if defined(PR_GET_NO_NEW_PRIVS) || (defined(HAVE_DECL_PR_GET_NO_NEW_PRIVS) && HAVE_DECL_PR_GET_NO_NEW_PRIVS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_NO_NEW_PRIVS) == (39), "PR_GET_NO_NEW_PRIVS != 39");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_NO_NEW_PRIVS 39
 #endif
-#if !(defined(PR_GET_TID_ADDRESS) || (defined(HAVE_DECL_PR_GET_TID_ADDRESS) && HAVE_DECL_PR_GET_TID_ADDRESS))
+#if defined(PR_GET_TID_ADDRESS) || (defined(HAVE_DECL_PR_GET_TID_ADDRESS) && HAVE_DECL_PR_GET_TID_ADDRESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_TID_ADDRESS) == (40), "PR_GET_TID_ADDRESS != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_TID_ADDRESS 40
 #endif
-#if !(defined(PR_SET_THP_DISABLE) || (defined(HAVE_DECL_PR_SET_THP_DISABLE) && HAVE_DECL_PR_SET_THP_DISABLE))
+#if defined(PR_SET_THP_DISABLE) || (defined(HAVE_DECL_PR_SET_THP_DISABLE) && HAVE_DECL_PR_SET_THP_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_THP_DISABLE) == (41), "PR_SET_THP_DISABLE != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_THP_DISABLE 41
 #endif
-#if !(defined(PR_GET_THP_DISABLE) || (defined(HAVE_DECL_PR_GET_THP_DISABLE) && HAVE_DECL_PR_GET_THP_DISABLE))
+#if defined(PR_GET_THP_DISABLE) || (defined(HAVE_DECL_PR_GET_THP_DISABLE) && HAVE_DECL_PR_GET_THP_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_THP_DISABLE) == (42), "PR_GET_THP_DISABLE != 42");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_THP_DISABLE 42
 #endif
-#if !(defined(PR_MPX_ENABLE_MANAGEMENT) || (defined(HAVE_DECL_PR_MPX_ENABLE_MANAGEMENT) && HAVE_DECL_PR_MPX_ENABLE_MANAGEMENT))
+#if defined(PR_MPX_ENABLE_MANAGEMENT) || (defined(HAVE_DECL_PR_MPX_ENABLE_MANAGEMENT) && HAVE_DECL_PR_MPX_ENABLE_MANAGEMENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_MPX_ENABLE_MANAGEMENT) == (43), "PR_MPX_ENABLE_MANAGEMENT != 43");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_MPX_ENABLE_MANAGEMENT 43
 #endif
-#if !(defined(PR_MPX_DISABLE_MANAGEMENT) || (defined(HAVE_DECL_PR_MPX_DISABLE_MANAGEMENT) && HAVE_DECL_PR_MPX_DISABLE_MANAGEMENT))
+#if defined(PR_MPX_DISABLE_MANAGEMENT) || (defined(HAVE_DECL_PR_MPX_DISABLE_MANAGEMENT) && HAVE_DECL_PR_MPX_DISABLE_MANAGEMENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_MPX_DISABLE_MANAGEMENT) == (44), "PR_MPX_DISABLE_MANAGEMENT != 44");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_MPX_DISABLE_MANAGEMENT 44
 #endif
-#if !(defined(PR_SET_FP_MODE) || (defined(HAVE_DECL_PR_SET_FP_MODE) && HAVE_DECL_PR_SET_FP_MODE))
+#if defined(PR_SET_FP_MODE) || (defined(HAVE_DECL_PR_SET_FP_MODE) && HAVE_DECL_PR_SET_FP_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_FP_MODE) == (45), "PR_SET_FP_MODE != 45");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_FP_MODE 45
 #endif
-#if !(defined(PR_GET_FP_MODE) || (defined(HAVE_DECL_PR_GET_FP_MODE) && HAVE_DECL_PR_GET_FP_MODE))
+#if defined(PR_GET_FP_MODE) || (defined(HAVE_DECL_PR_GET_FP_MODE) && HAVE_DECL_PR_GET_FP_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_FP_MODE) == (46), "PR_GET_FP_MODE != 46");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_GET_FP_MODE 46
 #endif
-#if !(defined(PR_CAP_AMBIENT) || (defined(HAVE_DECL_PR_CAP_AMBIENT) && HAVE_DECL_PR_CAP_AMBIENT))
+#if defined(PR_CAP_AMBIENT) || (defined(HAVE_DECL_PR_CAP_AMBIENT) && HAVE_DECL_PR_CAP_AMBIENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_CAP_AMBIENT) == (47), "PR_CAP_AMBIENT != 47");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_CAP_AMBIENT 47
 #endif
-#if !(defined(PR_SVE_SET_VL) || (defined(HAVE_DECL_PR_SVE_SET_VL) && HAVE_DECL_PR_SVE_SET_VL))
+#if defined(PR_SVE_SET_VL) || (defined(HAVE_DECL_PR_SVE_SET_VL) && HAVE_DECL_PR_SVE_SET_VL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SVE_SET_VL) == (50), "PR_SVE_SET_VL != 50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SVE_SET_VL 50
 #endif
-#if !(defined(PR_SVE_GET_VL) || (defined(HAVE_DECL_PR_SVE_GET_VL) && HAVE_DECL_PR_SVE_GET_VL))
+#if defined(PR_SVE_GET_VL) || (defined(HAVE_DECL_PR_SVE_GET_VL) && HAVE_DECL_PR_SVE_GET_VL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SVE_GET_VL) == (51), "PR_SVE_GET_VL != 51");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SVE_GET_VL 51
 #endif
-#if !(defined(PR_SET_VMA) || (defined(HAVE_DECL_PR_SET_VMA) && HAVE_DECL_PR_SET_VMA))
+#if defined(PR_GET_SPECULATION_CTRL) || (defined(HAVE_DECL_PR_GET_SPECULATION_CTRL) && HAVE_DECL_PR_GET_SPECULATION_CTRL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_GET_SPECULATION_CTRL) == (52), "PR_GET_SPECULATION_CTRL != 52");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_GET_SPECULATION_CTRL 52
+#endif
+#if defined(PR_SET_SPECULATION_CTRL) || (defined(HAVE_DECL_PR_SET_SPECULATION_CTRL) && HAVE_DECL_PR_SET_SPECULATION_CTRL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_SPECULATION_CTRL) == (53), "PR_SET_SPECULATION_CTRL != 53");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PR_SET_SPECULATION_CTRL 53
+#endif
+#if defined(PR_SET_VMA) || (defined(HAVE_DECL_PR_SET_VMA) && HAVE_DECL_PR_SET_VMA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PR_SET_VMA) == (0x53564d41), "PR_SET_VMA != 0x53564d41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PR_SET_VMA 0x53564d41
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat prctl_options in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat prctl_options in mpers mode
+
+# else
 
 static
 const struct xlat prctl_options[] = {
@@ -203,8 +419,12 @@
  XLAT(PR_CAP_AMBIENT),
  XLAT(PR_SVE_SET_VL),
  XLAT(PR_SVE_GET_VL),
+ XLAT(PR_GET_SPECULATION_CTRL),
+ XLAT(PR_SET_SPECULATION_CTRL),
  XLAT(PR_SET_VMA),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/prctl_options.in b/xlat/prctl_options.in
index 86fcd2c..82787e3 100644
--- a/xlat/prctl_options.in
+++ b/xlat/prctl_options.in
@@ -46,4 +46,6 @@
 PR_CAP_AMBIENT 47
 PR_SVE_SET_VL 50
 PR_SVE_GET_VL 51
+PR_GET_SPECULATION_CTRL 52
+PR_SET_SPECULATION_CTRL 53
 PR_SET_VMA 0x53564d41
diff --git a/xlat/priorities.h b/xlat/priorities.h
index 72c1a44..0163ee7 100644
--- a/xlat/priorities.h
+++ b/xlat/priorities.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/priorities.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat priorities in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat priorities in mpers mode
+
+# else
 
 static
 const struct xlat priorities[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ptp_flags_options.h b/xlat/ptp_flags_options.h
index 4ceffa6..df4e2d3 100644
--- a/xlat/ptp_flags_options.h
+++ b/xlat/ptp_flags_options.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ptp_flags_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ptp_flags_options in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ptp_flags_options in mpers mode
+
+# else
 
 static
 const struct xlat ptp_flags_options[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ptrace_cmds.h b/xlat/ptrace_cmds.h
index 4125bfa..36b4eae 100644
--- a/xlat/ptrace_cmds.h
+++ b/xlat/ptrace_cmds.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ptrace_cmds.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ptrace_cmds in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ptrace_cmds in mpers mode
+
+# else
 
 static
 const struct xlat ptrace_cmds[] = {
@@ -312,4 +318,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ptrace_events.h b/xlat/ptrace_events.h
index a94c100..d0085bc 100644
--- a/xlat/ptrace_events.h
+++ b/xlat/ptrace_events.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ptrace_events.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ptrace_events in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ptrace_events in mpers mode
+
+# else
 
 static
 const struct xlat ptrace_events[] = {
@@ -39,4 +45,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ptrace_peeksiginfo_flags.h b/xlat/ptrace_peeksiginfo_flags.h
index c6152b7..c2a946c 100644
--- a/xlat/ptrace_peeksiginfo_flags.h
+++ b/xlat/ptrace_peeksiginfo_flags.h
@@ -1,13 +1,23 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ptrace_peeksiginfo_flags.in; do not edit. */
-#if !(defined(PTRACE_PEEKSIGINFO_SHARED) || (defined(HAVE_DECL_PTRACE_PEEKSIGINFO_SHARED) && HAVE_DECL_PTRACE_PEEKSIGINFO_SHARED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PTRACE_PEEKSIGINFO_SHARED) || (defined(HAVE_DECL_PTRACE_PEEKSIGINFO_SHARED) && HAVE_DECL_PTRACE_PEEKSIGINFO_SHARED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PTRACE_PEEKSIGINFO_SHARED) == (1), "PTRACE_PEEKSIGINFO_SHARED != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PTRACE_PEEKSIGINFO_SHARED 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat ptrace_peeksiginfo_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat ptrace_peeksiginfo_flags in mpers mode
+
+# else
 
 static
 const struct xlat ptrace_peeksiginfo_flags[] = {
@@ -15,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ptrace_setoptions_flags.h b/xlat/ptrace_setoptions_flags.h
index d9d14cb..622354c 100644
--- a/xlat/ptrace_setoptions_flags.h
+++ b/xlat/ptrace_setoptions_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ptrace_setoptions_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ptrace_setoptions_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ptrace_setoptions_flags in mpers mode
+
+# else
 
 static
 const struct xlat ptrace_setoptions_flags[] = {
@@ -45,4 +51,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/quota_formats.h b/xlat/quota_formats.h
index 37f4027..9a24084 100644
--- a/xlat/quota_formats.h
+++ b/xlat/quota_formats.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/quota_formats.in; do not edit. */
-#if !(defined(QFMT_VFS_OLD) || (defined(HAVE_DECL_QFMT_VFS_OLD) && HAVE_DECL_QFMT_VFS_OLD))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(QFMT_VFS_OLD) || (defined(HAVE_DECL_QFMT_VFS_OLD) && HAVE_DECL_QFMT_VFS_OLD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QFMT_VFS_OLD) == (1), "QFMT_VFS_OLD != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QFMT_VFS_OLD 1
 #endif
-#if !(defined(QFMT_VFS_V0) || (defined(HAVE_DECL_QFMT_VFS_V0) && HAVE_DECL_QFMT_VFS_V0))
+#if defined(QFMT_VFS_V0) || (defined(HAVE_DECL_QFMT_VFS_V0) && HAVE_DECL_QFMT_VFS_V0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QFMT_VFS_V0) == (2), "QFMT_VFS_V0 != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QFMT_VFS_V0 2
 #endif
-#if !(defined(QFMT_OCFS2) || (defined(HAVE_DECL_QFMT_OCFS2) && HAVE_DECL_QFMT_OCFS2))
+#if defined(QFMT_OCFS2) || (defined(HAVE_DECL_QFMT_OCFS2) && HAVE_DECL_QFMT_OCFS2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QFMT_OCFS2) == (3), "QFMT_OCFS2 != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QFMT_OCFS2 3
 #endif
-#if !(defined(QFMT_VFS_V1) || (defined(HAVE_DECL_QFMT_VFS_V1) && HAVE_DECL_QFMT_VFS_V1))
+#if defined(QFMT_VFS_V1) || (defined(HAVE_DECL_QFMT_VFS_V1) && HAVE_DECL_QFMT_VFS_V1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((QFMT_VFS_V1) == (4), "QFMT_VFS_V1 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define QFMT_VFS_V1 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat quota_formats in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat quota_formats in mpers mode
+
+# else
 
 static
 const struct xlat quota_formats[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/quotacmds.h b/xlat/quotacmds.h
index 675cde9..54dfbad 100644
--- a/xlat/quotacmds.h
+++ b/xlat/quotacmds.h
@@ -1,115 +1,261 @@
 /* Generated by ./xlat/gen.sh from ./xlat/quotacmds.in; do not edit. */
-#if !(defined(Q_V1_QUOTAON) || (defined(HAVE_DECL_Q_V1_QUOTAON) && HAVE_DECL_Q_V1_QUOTAON))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(Q_V1_QUOTAON) || (defined(HAVE_DECL_Q_V1_QUOTAON) && HAVE_DECL_Q_V1_QUOTAON)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V1_QUOTAON) == (OLD_CMD(0x1)), "Q_V1_QUOTAON != OLD_CMD(0x1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V1_QUOTAON OLD_CMD(0x1)
 #endif
-#if !(defined(Q_V1_QUOTAOFF) || (defined(HAVE_DECL_Q_V1_QUOTAOFF) && HAVE_DECL_Q_V1_QUOTAOFF))
+#if defined(Q_V1_QUOTAOFF) || (defined(HAVE_DECL_Q_V1_QUOTAOFF) && HAVE_DECL_Q_V1_QUOTAOFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V1_QUOTAOFF) == (OLD_CMD(0x2)), "Q_V1_QUOTAOFF != OLD_CMD(0x2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V1_QUOTAOFF OLD_CMD(0x2)
 #endif
-#if !(defined(Q_V1_GETQUOTA) || (defined(HAVE_DECL_Q_V1_GETQUOTA) && HAVE_DECL_Q_V1_GETQUOTA))
+#if defined(Q_V1_GETQUOTA) || (defined(HAVE_DECL_Q_V1_GETQUOTA) && HAVE_DECL_Q_V1_GETQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V1_GETQUOTA) == (OLD_CMD(0x3)), "Q_V1_GETQUOTA != OLD_CMD(0x3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V1_GETQUOTA OLD_CMD(0x3)
 #endif
-#if !(defined(Q_V1_SETQUOTA) || (defined(HAVE_DECL_Q_V1_SETQUOTA) && HAVE_DECL_Q_V1_SETQUOTA))
+#if defined(Q_V1_SETQUOTA) || (defined(HAVE_DECL_Q_V1_SETQUOTA) && HAVE_DECL_Q_V1_SETQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V1_SETQUOTA) == (OLD_CMD(0x4)), "Q_V1_SETQUOTA != OLD_CMD(0x4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V1_SETQUOTA OLD_CMD(0x4)
 #endif
-#if !(defined(Q_V1_SETUSE) || (defined(HAVE_DECL_Q_V1_SETUSE) && HAVE_DECL_Q_V1_SETUSE))
+#if defined(Q_V1_SETUSE) || (defined(HAVE_DECL_Q_V1_SETUSE) && HAVE_DECL_Q_V1_SETUSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V1_SETUSE) == (OLD_CMD(0x5)), "Q_V1_SETUSE != OLD_CMD(0x5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V1_SETUSE OLD_CMD(0x5)
 #endif
-#if !(defined(Q_V1_SYNC) || (defined(HAVE_DECL_Q_V1_SYNC) && HAVE_DECL_Q_V1_SYNC))
+#if defined(Q_V1_SYNC) || (defined(HAVE_DECL_Q_V1_SYNC) && HAVE_DECL_Q_V1_SYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V1_SYNC) == (OLD_CMD(0x6)), "Q_V1_SYNC != OLD_CMD(0x6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V1_SYNC OLD_CMD(0x6)
 #endif
-#if !(defined(Q_SETQLIM) || (defined(HAVE_DECL_Q_SETQLIM) && HAVE_DECL_Q_SETQLIM))
+#if defined(Q_SETQLIM) || (defined(HAVE_DECL_Q_SETQLIM) && HAVE_DECL_Q_SETQLIM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_SETQLIM) == (OLD_CMD(0x7)), "Q_SETQLIM != OLD_CMD(0x7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_SETQLIM OLD_CMD(0x7)
 #endif
-#if !(defined(Q_V1_GETSTATS) || (defined(HAVE_DECL_Q_V1_GETSTATS) && HAVE_DECL_Q_V1_GETSTATS))
+#if defined(Q_V1_GETSTATS) || (defined(HAVE_DECL_Q_V1_GETSTATS) && HAVE_DECL_Q_V1_GETSTATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V1_GETSTATS) == (OLD_CMD(0x8)), "Q_V1_GETSTATS != OLD_CMD(0x8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V1_GETSTATS OLD_CMD(0x8)
 #endif
-#if !(defined(Q_V1_RSQUASH) || (defined(HAVE_DECL_Q_V1_RSQUASH) && HAVE_DECL_Q_V1_RSQUASH))
+#if defined(Q_V1_RSQUASH) || (defined(HAVE_DECL_Q_V1_RSQUASH) && HAVE_DECL_Q_V1_RSQUASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V1_RSQUASH) == (OLD_CMD(0x10)), "Q_V1_RSQUASH != OLD_CMD(0x10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V1_RSQUASH OLD_CMD(0x10)
 #endif
-#if !(defined(Q_V2_GETQUOTA) || (defined(HAVE_DECL_Q_V2_GETQUOTA) && HAVE_DECL_Q_V2_GETQUOTA))
+#if defined(Q_V2_GETQUOTA) || (defined(HAVE_DECL_Q_V2_GETQUOTA) && HAVE_DECL_Q_V2_GETQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V2_GETQUOTA) == (OLD_CMD(0xD)), "Q_V2_GETQUOTA != OLD_CMD(0xD)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V2_GETQUOTA OLD_CMD(0xD)
 #endif
-#if !(defined(Q_V2_SETQUOTA) || (defined(HAVE_DECL_Q_V2_SETQUOTA) && HAVE_DECL_Q_V2_SETQUOTA))
+#if defined(Q_V2_SETQUOTA) || (defined(HAVE_DECL_Q_V2_SETQUOTA) && HAVE_DECL_Q_V2_SETQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V2_SETQUOTA) == (OLD_CMD(0xE)), "Q_V2_SETQUOTA != OLD_CMD(0xE)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V2_SETQUOTA OLD_CMD(0xE)
 #endif
-#if !(defined(Q_V2_SETUSE) || (defined(HAVE_DECL_Q_V2_SETUSE) && HAVE_DECL_Q_V2_SETUSE))
+#if defined(Q_V2_SETUSE) || (defined(HAVE_DECL_Q_V2_SETUSE) && HAVE_DECL_Q_V2_SETUSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V2_SETUSE) == (OLD_CMD(0xF)), "Q_V2_SETUSE != OLD_CMD(0xF)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V2_SETUSE OLD_CMD(0xF)
 #endif
-#if !(defined(Q_V2_GETINFO) || (defined(HAVE_DECL_Q_V2_GETINFO) && HAVE_DECL_Q_V2_GETINFO))
+#if defined(Q_V2_GETINFO) || (defined(HAVE_DECL_Q_V2_GETINFO) && HAVE_DECL_Q_V2_GETINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V2_GETINFO) == (OLD_CMD(0x9)), "Q_V2_GETINFO != OLD_CMD(0x9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V2_GETINFO OLD_CMD(0x9)
 #endif
-#if !(defined(Q_V2_SETINFO) || (defined(HAVE_DECL_Q_V2_SETINFO) && HAVE_DECL_Q_V2_SETINFO))
+#if defined(Q_V2_SETINFO) || (defined(HAVE_DECL_Q_V2_SETINFO) && HAVE_DECL_Q_V2_SETINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V2_SETINFO) == (OLD_CMD(0xA)), "Q_V2_SETINFO != OLD_CMD(0xA)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V2_SETINFO OLD_CMD(0xA)
 #endif
-#if !(defined(Q_V2_SETGRACE) || (defined(HAVE_DECL_Q_V2_SETGRACE) && HAVE_DECL_Q_V2_SETGRACE))
+#if defined(Q_V2_SETGRACE) || (defined(HAVE_DECL_Q_V2_SETGRACE) && HAVE_DECL_Q_V2_SETGRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V2_SETGRACE) == (OLD_CMD(0xB)), "Q_V2_SETGRACE != OLD_CMD(0xB)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V2_SETGRACE OLD_CMD(0xB)
 #endif
-#if !(defined(Q_V2_SETFLAGS) || (defined(HAVE_DECL_Q_V2_SETFLAGS) && HAVE_DECL_Q_V2_SETFLAGS))
+#if defined(Q_V2_SETFLAGS) || (defined(HAVE_DECL_Q_V2_SETFLAGS) && HAVE_DECL_Q_V2_SETFLAGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V2_SETFLAGS) == (OLD_CMD(0xC)), "Q_V2_SETFLAGS != OLD_CMD(0xC)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V2_SETFLAGS OLD_CMD(0xC)
 #endif
-#if !(defined(Q_V2_GETSTATS) || (defined(HAVE_DECL_Q_V2_GETSTATS) && HAVE_DECL_Q_V2_GETSTATS))
+#if defined(Q_V2_GETSTATS) || (defined(HAVE_DECL_Q_V2_GETSTATS) && HAVE_DECL_Q_V2_GETSTATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_V2_GETSTATS) == (OLD_CMD(0x11)), "Q_V2_GETSTATS != OLD_CMD(0x11)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_V2_GETSTATS OLD_CMD(0x11)
 #endif
-#if !(defined(Q_SYNC) || (defined(HAVE_DECL_Q_SYNC) && HAVE_DECL_Q_SYNC))
+#if defined(Q_SYNC) || (defined(HAVE_DECL_Q_SYNC) && HAVE_DECL_Q_SYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_SYNC) == (NEW_CMD(0x1)), "Q_SYNC != NEW_CMD(0x1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_SYNC NEW_CMD(0x1)
 #endif
-#if !(defined(Q_QUOTAON) || (defined(HAVE_DECL_Q_QUOTAON) && HAVE_DECL_Q_QUOTAON))
+#if defined(Q_QUOTAON) || (defined(HAVE_DECL_Q_QUOTAON) && HAVE_DECL_Q_QUOTAON)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_QUOTAON) == (NEW_CMD(0x2)), "Q_QUOTAON != NEW_CMD(0x2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_QUOTAON NEW_CMD(0x2)
 #endif
-#if !(defined(Q_QUOTAOFF) || (defined(HAVE_DECL_Q_QUOTAOFF) && HAVE_DECL_Q_QUOTAOFF))
+#if defined(Q_QUOTAOFF) || (defined(HAVE_DECL_Q_QUOTAOFF) && HAVE_DECL_Q_QUOTAOFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_QUOTAOFF) == (NEW_CMD(0x3)), "Q_QUOTAOFF != NEW_CMD(0x3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_QUOTAOFF NEW_CMD(0x3)
 #endif
-#if !(defined(Q_GETFMT) || (defined(HAVE_DECL_Q_GETFMT) && HAVE_DECL_Q_GETFMT))
+#if defined(Q_GETFMT) || (defined(HAVE_DECL_Q_GETFMT) && HAVE_DECL_Q_GETFMT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_GETFMT) == (NEW_CMD(0x4)), "Q_GETFMT != NEW_CMD(0x4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_GETFMT NEW_CMD(0x4)
 #endif
-#if !(defined(Q_GETINFO) || (defined(HAVE_DECL_Q_GETINFO) && HAVE_DECL_Q_GETINFO))
+#if defined(Q_GETINFO) || (defined(HAVE_DECL_Q_GETINFO) && HAVE_DECL_Q_GETINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_GETINFO) == (NEW_CMD(0x5)), "Q_GETINFO != NEW_CMD(0x5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_GETINFO NEW_CMD(0x5)
 #endif
-#if !(defined(Q_SETINFO) || (defined(HAVE_DECL_Q_SETINFO) && HAVE_DECL_Q_SETINFO))
+#if defined(Q_SETINFO) || (defined(HAVE_DECL_Q_SETINFO) && HAVE_DECL_Q_SETINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_SETINFO) == (NEW_CMD(0x6)), "Q_SETINFO != NEW_CMD(0x6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_SETINFO NEW_CMD(0x6)
 #endif
-#if !(defined(Q_GETQUOTA) || (defined(HAVE_DECL_Q_GETQUOTA) && HAVE_DECL_Q_GETQUOTA))
+#if defined(Q_GETQUOTA) || (defined(HAVE_DECL_Q_GETQUOTA) && HAVE_DECL_Q_GETQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_GETQUOTA) == (NEW_CMD(0x7)), "Q_GETQUOTA != NEW_CMD(0x7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_GETQUOTA NEW_CMD(0x7)
 #endif
-#if !(defined(Q_SETQUOTA) || (defined(HAVE_DECL_Q_SETQUOTA) && HAVE_DECL_Q_SETQUOTA))
+#if defined(Q_SETQUOTA) || (defined(HAVE_DECL_Q_SETQUOTA) && HAVE_DECL_Q_SETQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_SETQUOTA) == (NEW_CMD(0x8)), "Q_SETQUOTA != NEW_CMD(0x8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_SETQUOTA NEW_CMD(0x8)
 #endif
-#if !(defined(Q_GETNEXTQUOTA) || (defined(HAVE_DECL_Q_GETNEXTQUOTA) && HAVE_DECL_Q_GETNEXTQUOTA))
+#if defined(Q_GETNEXTQUOTA) || (defined(HAVE_DECL_Q_GETNEXTQUOTA) && HAVE_DECL_Q_GETNEXTQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_GETNEXTQUOTA) == (NEW_CMD(0x9)), "Q_GETNEXTQUOTA != NEW_CMD(0x9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_GETNEXTQUOTA NEW_CMD(0x9)
 #endif
-#if !(defined(Q_XQUOTAON) || (defined(HAVE_DECL_Q_XQUOTAON) && HAVE_DECL_Q_XQUOTAON))
+#if defined(Q_XQUOTAON) || (defined(HAVE_DECL_Q_XQUOTAON) && HAVE_DECL_Q_XQUOTAON)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_XQUOTAON) == (XQM_CMD(0x1)), "Q_XQUOTAON != XQM_CMD(0x1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_XQUOTAON XQM_CMD(0x1)
 #endif
-#if !(defined(Q_XQUOTAOFF) || (defined(HAVE_DECL_Q_XQUOTAOFF) && HAVE_DECL_Q_XQUOTAOFF))
+#if defined(Q_XQUOTAOFF) || (defined(HAVE_DECL_Q_XQUOTAOFF) && HAVE_DECL_Q_XQUOTAOFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_XQUOTAOFF) == (XQM_CMD(0x2)), "Q_XQUOTAOFF != XQM_CMD(0x2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_XQUOTAOFF XQM_CMD(0x2)
 #endif
-#if !(defined(Q_XGETQUOTA) || (defined(HAVE_DECL_Q_XGETQUOTA) && HAVE_DECL_Q_XGETQUOTA))
+#if defined(Q_XGETQUOTA) || (defined(HAVE_DECL_Q_XGETQUOTA) && HAVE_DECL_Q_XGETQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_XGETQUOTA) == (XQM_CMD(0x3)), "Q_XGETQUOTA != XQM_CMD(0x3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_XGETQUOTA XQM_CMD(0x3)
 #endif
-#if !(defined(Q_XSETQLIM) || (defined(HAVE_DECL_Q_XSETQLIM) && HAVE_DECL_Q_XSETQLIM))
+#if defined(Q_XSETQLIM) || (defined(HAVE_DECL_Q_XSETQLIM) && HAVE_DECL_Q_XSETQLIM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_XSETQLIM) == (XQM_CMD(0x4)), "Q_XSETQLIM != XQM_CMD(0x4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_XSETQLIM XQM_CMD(0x4)
 #endif
-#if !(defined(Q_XGETQSTAT) || (defined(HAVE_DECL_Q_XGETQSTAT) && HAVE_DECL_Q_XGETQSTAT))
+#if defined(Q_XGETQSTAT) || (defined(HAVE_DECL_Q_XGETQSTAT) && HAVE_DECL_Q_XGETQSTAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_XGETQSTAT) == (XQM_CMD(0x5)), "Q_XGETQSTAT != XQM_CMD(0x5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_XGETQSTAT XQM_CMD(0x5)
 #endif
-#if !(defined(Q_XQUOTARM) || (defined(HAVE_DECL_Q_XQUOTARM) && HAVE_DECL_Q_XQUOTARM))
+#if defined(Q_XQUOTARM) || (defined(HAVE_DECL_Q_XQUOTARM) && HAVE_DECL_Q_XQUOTARM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_XQUOTARM) == (XQM_CMD(0x6)), "Q_XQUOTARM != XQM_CMD(0x6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_XQUOTARM XQM_CMD(0x6)
 #endif
-#if !(defined(Q_XQUOTASYNC) || (defined(HAVE_DECL_Q_XQUOTASYNC) && HAVE_DECL_Q_XQUOTASYNC))
+#if defined(Q_XQUOTASYNC) || (defined(HAVE_DECL_Q_XQUOTASYNC) && HAVE_DECL_Q_XQUOTASYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_XQUOTASYNC) == (XQM_CMD(0x7)), "Q_XQUOTASYNC != XQM_CMD(0x7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_XQUOTASYNC XQM_CMD(0x7)
 #endif
-#if !(defined(Q_XGETQSTATV) || (defined(HAVE_DECL_Q_XGETQSTATV) && HAVE_DECL_Q_XGETQSTATV))
+#if defined(Q_XGETQSTATV) || (defined(HAVE_DECL_Q_XGETQSTATV) && HAVE_DECL_Q_XGETQSTATV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_XGETQSTATV) == (XQM_CMD(0x8)), "Q_XGETQSTATV != XQM_CMD(0x8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_XGETQSTATV XQM_CMD(0x8)
 #endif
-#if !(defined(Q_XGETNEXTQUOTA) || (defined(HAVE_DECL_Q_XGETNEXTQUOTA) && HAVE_DECL_Q_XGETNEXTQUOTA))
+#if defined(Q_XGETNEXTQUOTA) || (defined(HAVE_DECL_Q_XGETNEXTQUOTA) && HAVE_DECL_Q_XGETNEXTQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((Q_XGETNEXTQUOTA) == (XQM_CMD(0x9)), "Q_XGETNEXTQUOTA != XQM_CMD(0x9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define Q_XGETNEXTQUOTA XQM_CMD(0x9)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat quotacmds in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat quotacmds in mpers mode
+
+# else
 
 static
 const struct xlat quotacmds[] = {
@@ -154,4 +300,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/quotatypes.h b/xlat/quotatypes.h
index d223144..bbc9567 100644
--- a/xlat/quotatypes.h
+++ b/xlat/quotatypes.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/quotatypes.in; do not edit. */
-#if !(defined(USRQUOTA) || (defined(HAVE_DECL_USRQUOTA) && HAVE_DECL_USRQUOTA))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(USRQUOTA) || (defined(HAVE_DECL_USRQUOTA) && HAVE_DECL_USRQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((USRQUOTA) == (0), "USRQUOTA != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define USRQUOTA 0
 #endif
-#if !(defined(GRPQUOTA) || (defined(HAVE_DECL_GRPQUOTA) && HAVE_DECL_GRPQUOTA))
+#if defined(GRPQUOTA) || (defined(HAVE_DECL_GRPQUOTA) && HAVE_DECL_GRPQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GRPQUOTA) == (1), "GRPQUOTA != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define GRPQUOTA 1
 #endif
-#if !(defined(PRJQUOTA) || (defined(HAVE_DECL_PRJQUOTA) && HAVE_DECL_PRJQUOTA))
+#if defined(PRJQUOTA) || (defined(HAVE_DECL_PRJQUOTA) && HAVE_DECL_PRJQUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PRJQUOTA) == (2), "PRJQUOTA != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define PRJQUOTA 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat quotatypes in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat quotatypes in mpers mode
+
+# else
 
 static
 const struct xlat quotatypes[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rename_flags.h b/xlat/rename_flags.h
index 2fc0a76..5eb07aa 100644
--- a/xlat/rename_flags.h
+++ b/xlat/rename_flags.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rename_flags.in; do not edit. */
-#if !(defined(RENAME_NOREPLACE) || (defined(HAVE_DECL_RENAME_NOREPLACE) && HAVE_DECL_RENAME_NOREPLACE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RENAME_NOREPLACE) || (defined(HAVE_DECL_RENAME_NOREPLACE) && HAVE_DECL_RENAME_NOREPLACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RENAME_NOREPLACE) == (1), "RENAME_NOREPLACE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RENAME_NOREPLACE 1
 #endif
-#if !(defined(RENAME_EXCHANGE) || (defined(HAVE_DECL_RENAME_EXCHANGE) && HAVE_DECL_RENAME_EXCHANGE))
+#if defined(RENAME_EXCHANGE) || (defined(HAVE_DECL_RENAME_EXCHANGE) && HAVE_DECL_RENAME_EXCHANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RENAME_EXCHANGE) == (2), "RENAME_EXCHANGE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RENAME_EXCHANGE 2
 #endif
-#if !(defined(RENAME_WHITEOUT) || (defined(HAVE_DECL_RENAME_WHITEOUT) && HAVE_DECL_RENAME_WHITEOUT))
+#if defined(RENAME_WHITEOUT) || (defined(HAVE_DECL_RENAME_WHITEOUT) && HAVE_DECL_RENAME_WHITEOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RENAME_WHITEOUT) == (4), "RENAME_WHITEOUT != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RENAME_WHITEOUT 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rename_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rename_flags in mpers mode
+
+# else
 
 static
 const struct xlat rename_flags[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/resource_flags.h b/xlat/resource_flags.h
index 7761ca2..67bed2d 100644
--- a/xlat/resource_flags.h
+++ b/xlat/resource_flags.h
@@ -1,6 +1,12 @@
 /* Generated by ./xlat/gen.sh from ./xlat/resource_flags.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat resource_flags[] = {
 #if defined(IPC_CREAT) || (defined(HAVE_DECL_IPC_CREAT) && HAVE_DECL_IPC_CREAT)
@@ -15,4 +21,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/resources.h b/xlat/resources.h
index 4493b08..e4c11d1 100644
--- a/xlat/resources.h
+++ b/xlat/resources.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/resources.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat resources in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat resources in mpers mode
+
+# else
 
 static
 const struct xlat resources[] = {
@@ -62,4 +68,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/riscv_flush_icache_flags.h b/xlat/riscv_flush_icache_flags.h
index b9a031c..4b9a812 100644
--- a/xlat/riscv_flush_icache_flags.h
+++ b/xlat/riscv_flush_icache_flags.h
@@ -1,13 +1,23 @@
 /* Generated by ./xlat/gen.sh from ./xlat/riscv_flush_icache_flags.in; do not edit. */
-#if !(defined(SYS_RISCV_FLUSH_ICACHE_LOCAL) || (defined(HAVE_DECL_SYS_RISCV_FLUSH_ICACHE_LOCAL) && HAVE_DECL_SYS_RISCV_FLUSH_ICACHE_LOCAL))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SYS_RISCV_FLUSH_ICACHE_LOCAL) || (defined(HAVE_DECL_SYS_RISCV_FLUSH_ICACHE_LOCAL) && HAVE_DECL_SYS_RISCV_FLUSH_ICACHE_LOCAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_RISCV_FLUSH_ICACHE_LOCAL) == (1), "SYS_RISCV_FLUSH_ICACHE_LOCAL != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_RISCV_FLUSH_ICACHE_LOCAL 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat riscv_flush_icache_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat riscv_flush_icache_flags in mpers mode
+
+# else
 
 static
 const struct xlat riscv_flush_icache_flags[] = {
@@ -15,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/route_nexthop_flags.h b/xlat/route_nexthop_flags.h
index 8939416..2463b33 100644
--- a/xlat/route_nexthop_flags.h
+++ b/xlat/route_nexthop_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/route_nexthop_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat route_nexthop_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat route_nexthop_flags in mpers mode
+
+# else
 
 static
 const struct xlat route_nexthop_flags[] = {
@@ -29,4 +35,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/routing_flags.h b/xlat/routing_flags.h
index 51cc689..fa6a212 100644
--- a/xlat/routing_flags.h
+++ b/xlat/routing_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/routing_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat routing_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat routing_flags in mpers mode
+
+# else
 
 static
 const struct xlat routing_flags[] = {
@@ -26,4 +32,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/routing_protocols.h b/xlat/routing_protocols.h
index 97f1b2b..46d76b8 100644
--- a/xlat/routing_protocols.h
+++ b/xlat/routing_protocols.h
@@ -1,62 +1,151 @@
 /* Generated by ./xlat/gen.sh from ./xlat/routing_protocols.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat routing_protocols in mpers mode
-
+#if defined(RTPROT_UNSPEC) || (defined(HAVE_DECL_RTPROT_UNSPEC) && HAVE_DECL_RTPROT_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_UNSPEC) == (0), "RTPROT_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define RTPROT_UNSPEC 0
+#endif
+#if defined(RTPROT_REDIRECT) || (defined(HAVE_DECL_RTPROT_REDIRECT) && HAVE_DECL_RTPROT_REDIRECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_REDIRECT) == (1), "RTPROT_REDIRECT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_REDIRECT 1
+#endif
+#if defined(RTPROT_KERNEL) || (defined(HAVE_DECL_RTPROT_KERNEL) && HAVE_DECL_RTPROT_KERNEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_KERNEL) == (2), "RTPROT_KERNEL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_KERNEL 2
+#endif
+#if defined(RTPROT_BOOT) || (defined(HAVE_DECL_RTPROT_BOOT) && HAVE_DECL_RTPROT_BOOT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_BOOT) == (3), "RTPROT_BOOT != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_BOOT 3
+#endif
+#if defined(RTPROT_STATIC) || (defined(HAVE_DECL_RTPROT_STATIC) && HAVE_DECL_RTPROT_STATIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_STATIC) == (4), "RTPROT_STATIC != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_STATIC 4
+#endif
+#if defined(RTPROT_GATED) || (defined(HAVE_DECL_RTPROT_GATED) && HAVE_DECL_RTPROT_GATED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_GATED) == (8), "RTPROT_GATED != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_GATED 8
+#endif
+#if defined(RTPROT_RA) || (defined(HAVE_DECL_RTPROT_RA) && HAVE_DECL_RTPROT_RA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_RA) == (9), "RTPROT_RA != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_RA 9
+#endif
+#if defined(RTPROT_MRT) || (defined(HAVE_DECL_RTPROT_MRT) && HAVE_DECL_RTPROT_MRT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_MRT) == (10), "RTPROT_MRT != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_MRT 10
+#endif
+#if defined(RTPROT_ZEBRA) || (defined(HAVE_DECL_RTPROT_ZEBRA) && HAVE_DECL_RTPROT_ZEBRA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_ZEBRA) == (11), "RTPROT_ZEBRA != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_ZEBRA 11
+#endif
+#if defined(RTPROT_BIRD) || (defined(HAVE_DECL_RTPROT_BIRD) && HAVE_DECL_RTPROT_BIRD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_BIRD) == (12), "RTPROT_BIRD != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_BIRD 12
+#endif
+#if defined(RTPROT_DNROUTED) || (defined(HAVE_DECL_RTPROT_DNROUTED) && HAVE_DECL_RTPROT_DNROUTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_DNROUTED) == (13), "RTPROT_DNROUTED != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_DNROUTED 13
+#endif
+#if defined(RTPROT_XORP) || (defined(HAVE_DECL_RTPROT_XORP) && HAVE_DECL_RTPROT_XORP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_XORP) == (14), "RTPROT_XORP != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_XORP 14
+#endif
+#if defined(RTPROT_NTK) || (defined(HAVE_DECL_RTPROT_NTK) && HAVE_DECL_RTPROT_NTK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_NTK) == (15), "RTPROT_NTK != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_NTK 15
+#endif
+#if defined(RTPROT_DHCP) || (defined(HAVE_DECL_RTPROT_DHCP) && HAVE_DECL_RTPROT_DHCP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_DHCP) == (16), "RTPROT_DHCP != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_DHCP 16
+#endif
+#if defined(RTPROT_MROUTED) || (defined(HAVE_DECL_RTPROT_MROUTED) && HAVE_DECL_RTPROT_MROUTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_MROUTED) == (17), "RTPROT_MROUTED != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_MROUTED 17
+#endif
+#if defined(RTPROT_BABEL) || (defined(HAVE_DECL_RTPROT_BABEL) && HAVE_DECL_RTPROT_BABEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTPROT_BABEL) == (42), "RTPROT_BABEL != 42");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RTPROT_BABEL 42
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# 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(RTPROT_UNSPEC),
+ XLAT(RTPROT_REDIRECT),
+ XLAT(RTPROT_KERNEL),
+ XLAT(RTPROT_BOOT),
+ XLAT(RTPROT_STATIC),
+ XLAT(RTPROT_GATED),
+ XLAT(RTPROT_RA),
+ XLAT(RTPROT_MRT),
+ XLAT(RTPROT_ZEBRA),
+ XLAT(RTPROT_BIRD),
+ XLAT(RTPROT_DNROUTED),
+ XLAT(RTPROT_XORP),
+ XLAT(RTPROT_NTK),
+ XLAT(RTPROT_DHCP),
+ XLAT(RTPROT_MROUTED),
+ XLAT(RTPROT_BABEL),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/routing_protocols.in b/xlat/routing_protocols.in
index d366b67..004b099 100644
--- a/xlat/routing_protocols.in
+++ b/xlat/routing_protocols.in
@@ -1,16 +1,17 @@
-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
+/* sort -k2,2n */
+RTPROT_UNSPEC	0
+RTPROT_REDIRECT	1
+RTPROT_KERNEL	2
+RTPROT_BOOT	3
+RTPROT_STATIC	4
+RTPROT_GATED	8
+RTPROT_RA	9
+RTPROT_MRT	10
+RTPROT_ZEBRA	11
+RTPROT_BIRD	12
+RTPROT_DNROUTED	13
+RTPROT_XORP	14
+RTPROT_NTK	15
+RTPROT_DHCP	16
+RTPROT_MROUTED	17
+RTPROT_BABEL	42
diff --git a/xlat/routing_scopes.h b/xlat/routing_scopes.h
index 51fb1a2..f718f3b 100644
--- a/xlat/routing_scopes.h
+++ b/xlat/routing_scopes.h
@@ -1,21 +1,47 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RT_SCOPE_UNIVERSE) || (defined(HAVE_DECL_RT_SCOPE_UNIVERSE) && HAVE_DECL_RT_SCOPE_UNIVERSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_SCOPE_UNIVERSE) == (0), "RT_SCOPE_UNIVERSE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_SCOPE_UNIVERSE 0
 #endif
-#if !(defined(RT_SCOPE_SITE) || (defined(HAVE_DECL_RT_SCOPE_SITE) && HAVE_DECL_RT_SCOPE_SITE))
+#if defined(RT_SCOPE_SITE) || (defined(HAVE_DECL_RT_SCOPE_SITE) && HAVE_DECL_RT_SCOPE_SITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_SCOPE_SITE) == (200), "RT_SCOPE_SITE != 200");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_SCOPE_SITE 200
 #endif
-#if !(defined(RT_SCOPE_LINK) || (defined(HAVE_DECL_RT_SCOPE_LINK) && HAVE_DECL_RT_SCOPE_LINK))
+#if defined(RT_SCOPE_LINK) || (defined(HAVE_DECL_RT_SCOPE_LINK) && HAVE_DECL_RT_SCOPE_LINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_SCOPE_LINK) == (253), "RT_SCOPE_LINK != 253");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_SCOPE_LINK 253
 #endif
-#if !(defined(RT_SCOPE_HOST) || (defined(HAVE_DECL_RT_SCOPE_HOST) && HAVE_DECL_RT_SCOPE_HOST))
+#if defined(RT_SCOPE_HOST) || (defined(HAVE_DECL_RT_SCOPE_HOST) && HAVE_DECL_RT_SCOPE_HOST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_SCOPE_HOST) == (254), "RT_SCOPE_HOST != 254");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_SCOPE_HOST 254
 #endif
-#if !(defined(RT_SCOPE_NOWHERE) || (defined(HAVE_DECL_RT_SCOPE_NOWHERE) && HAVE_DECL_RT_SCOPE_NOWHERE))
+#if defined(RT_SCOPE_NOWHERE) || (defined(HAVE_DECL_RT_SCOPE_NOWHERE) && HAVE_DECL_RT_SCOPE_NOWHERE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_SCOPE_NOWHERE) == (255), "RT_SCOPE_NOWHERE != 255");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_SCOPE_NOWHERE 255
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat routing_scopes[] = {
  XLAT(RT_SCOPE_UNIVERSE),
@@ -26,4 +52,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/routing_table_ids.h b/xlat/routing_table_ids.h
index a3b6164..9bab802 100644
--- a/xlat/routing_table_ids.h
+++ b/xlat/routing_table_ids.h
@@ -1,21 +1,47 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RT_TABLE_UNSPEC) || (defined(HAVE_DECL_RT_TABLE_UNSPEC) && HAVE_DECL_RT_TABLE_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_TABLE_UNSPEC) == (0), "RT_TABLE_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_TABLE_UNSPEC 0
 #endif
-#if !(defined(RT_TABLE_COMPAT) || (defined(HAVE_DECL_RT_TABLE_COMPAT) && HAVE_DECL_RT_TABLE_COMPAT))
+#if defined(RT_TABLE_COMPAT) || (defined(HAVE_DECL_RT_TABLE_COMPAT) && HAVE_DECL_RT_TABLE_COMPAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_TABLE_COMPAT) == (252), "RT_TABLE_COMPAT != 252");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_TABLE_COMPAT 252
 #endif
-#if !(defined(RT_TABLE_DEFAULT) || (defined(HAVE_DECL_RT_TABLE_DEFAULT) && HAVE_DECL_RT_TABLE_DEFAULT))
+#if defined(RT_TABLE_DEFAULT) || (defined(HAVE_DECL_RT_TABLE_DEFAULT) && HAVE_DECL_RT_TABLE_DEFAULT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_TABLE_DEFAULT) == (253), "RT_TABLE_DEFAULT != 253");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_TABLE_DEFAULT 253
 #endif
-#if !(defined(RT_TABLE_MAIN) || (defined(HAVE_DECL_RT_TABLE_MAIN) && HAVE_DECL_RT_TABLE_MAIN))
+#if defined(RT_TABLE_MAIN) || (defined(HAVE_DECL_RT_TABLE_MAIN) && HAVE_DECL_RT_TABLE_MAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_TABLE_MAIN) == (254), "RT_TABLE_MAIN != 254");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_TABLE_MAIN 254
 #endif
-#if !(defined(RT_TABLE_LOCAL) || (defined(HAVE_DECL_RT_TABLE_LOCAL) && HAVE_DECL_RT_TABLE_LOCAL))
+#if defined(RT_TABLE_LOCAL) || (defined(HAVE_DECL_RT_TABLE_LOCAL) && HAVE_DECL_RT_TABLE_LOCAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RT_TABLE_LOCAL) == (255), "RT_TABLE_LOCAL != 255");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RT_TABLE_LOCAL 255
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat routing_table_ids[] = {
  XLAT(RT_TABLE_UNSPEC),
@@ -26,4 +52,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/routing_types.h b/xlat/routing_types.h
index 5e96373..e5b76fc 100644
--- a/xlat/routing_types.h
+++ b/xlat/routing_types.h
@@ -1,42 +1,96 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RTN_UNSPEC) || (defined(HAVE_DECL_RTN_UNSPEC) && HAVE_DECL_RTN_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_UNSPEC) == (0), "RTN_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_UNSPEC 0
 #endif
-#if !(defined(RTN_UNICAST) || (defined(HAVE_DECL_RTN_UNICAST) && HAVE_DECL_RTN_UNICAST))
+#if defined(RTN_UNICAST) || (defined(HAVE_DECL_RTN_UNICAST) && HAVE_DECL_RTN_UNICAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_UNICAST) == (1), "RTN_UNICAST != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_UNICAST 1
 #endif
-#if !(defined(RTN_LOCAL) || (defined(HAVE_DECL_RTN_LOCAL) && HAVE_DECL_RTN_LOCAL))
+#if defined(RTN_LOCAL) || (defined(HAVE_DECL_RTN_LOCAL) && HAVE_DECL_RTN_LOCAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_LOCAL) == (2), "RTN_LOCAL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_LOCAL 2
 #endif
-#if !(defined(RTN_BROADCAST) || (defined(HAVE_DECL_RTN_BROADCAST) && HAVE_DECL_RTN_BROADCAST))
+#if defined(RTN_BROADCAST) || (defined(HAVE_DECL_RTN_BROADCAST) && HAVE_DECL_RTN_BROADCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_BROADCAST) == (3), "RTN_BROADCAST != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_BROADCAST 3
 #endif
-#if !(defined(RTN_ANYCAST) || (defined(HAVE_DECL_RTN_ANYCAST) && HAVE_DECL_RTN_ANYCAST))
+#if defined(RTN_ANYCAST) || (defined(HAVE_DECL_RTN_ANYCAST) && HAVE_DECL_RTN_ANYCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_ANYCAST) == (4), "RTN_ANYCAST != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_ANYCAST 4
 #endif
-#if !(defined(RTN_MULTICAST) || (defined(HAVE_DECL_RTN_MULTICAST) && HAVE_DECL_RTN_MULTICAST))
+#if defined(RTN_MULTICAST) || (defined(HAVE_DECL_RTN_MULTICAST) && HAVE_DECL_RTN_MULTICAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_MULTICAST) == (5), "RTN_MULTICAST != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_MULTICAST 5
 #endif
-#if !(defined(RTN_BLACKHOLE) || (defined(HAVE_DECL_RTN_BLACKHOLE) && HAVE_DECL_RTN_BLACKHOLE))
+#if defined(RTN_BLACKHOLE) || (defined(HAVE_DECL_RTN_BLACKHOLE) && HAVE_DECL_RTN_BLACKHOLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_BLACKHOLE) == (6), "RTN_BLACKHOLE != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_BLACKHOLE 6
 #endif
-#if !(defined(RTN_UNREACHABLE) || (defined(HAVE_DECL_RTN_UNREACHABLE) && HAVE_DECL_RTN_UNREACHABLE))
+#if defined(RTN_UNREACHABLE) || (defined(HAVE_DECL_RTN_UNREACHABLE) && HAVE_DECL_RTN_UNREACHABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_UNREACHABLE) == (7), "RTN_UNREACHABLE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_UNREACHABLE 7
 #endif
-#if !(defined(RTN_PROHIBIT) || (defined(HAVE_DECL_RTN_PROHIBIT) && HAVE_DECL_RTN_PROHIBIT))
+#if defined(RTN_PROHIBIT) || (defined(HAVE_DECL_RTN_PROHIBIT) && HAVE_DECL_RTN_PROHIBIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_PROHIBIT) == (8), "RTN_PROHIBIT != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_PROHIBIT 8
 #endif
-#if !(defined(RTN_THROW) || (defined(HAVE_DECL_RTN_THROW) && HAVE_DECL_RTN_THROW))
+#if defined(RTN_THROW) || (defined(HAVE_DECL_RTN_THROW) && HAVE_DECL_RTN_THROW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_THROW) == (9), "RTN_THROW != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_THROW 9
 #endif
-#if !(defined(RTN_NAT) || (defined(HAVE_DECL_RTN_NAT) && HAVE_DECL_RTN_NAT))
+#if defined(RTN_NAT) || (defined(HAVE_DECL_RTN_NAT) && HAVE_DECL_RTN_NAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_NAT) == (10), "RTN_NAT != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_NAT 10
 #endif
-#if !(defined(RTN_XRESOLVE) || (defined(HAVE_DECL_RTN_XRESOLVE) && HAVE_DECL_RTN_XRESOLVE))
+#if defined(RTN_XRESOLVE) || (defined(HAVE_DECL_RTN_XRESOLVE) && HAVE_DECL_RTN_XRESOLVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTN_XRESOLVE) == (11), "RTN_XRESOLVE != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTN_XRESOLVE 11
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat routing_types[] = {
  XLAT(RTN_UNSPEC),
@@ -54,4 +108,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_addr_attrs.h b/xlat/rtnl_addr_attrs.h
index b9579b0..ac9d9c6 100644
--- a/xlat/rtnl_addr_attrs.h
+++ b/xlat/rtnl_addr_attrs.h
@@ -1,37 +1,79 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFA_UNSPEC) || (defined(HAVE_DECL_IFA_UNSPEC) && HAVE_DECL_IFA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFA_UNSPEC) == (0), "IFA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFA_UNSPEC 0
 #endif
-#if !(defined(IFA_ADDRESS) || (defined(HAVE_DECL_IFA_ADDRESS) && HAVE_DECL_IFA_ADDRESS))
+#if defined(IFA_ADDRESS) || (defined(HAVE_DECL_IFA_ADDRESS) && HAVE_DECL_IFA_ADDRESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFA_ADDRESS) == (1), "IFA_ADDRESS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFA_ADDRESS 1
 #endif
-#if !(defined(IFA_LOCAL) || (defined(HAVE_DECL_IFA_LOCAL) && HAVE_DECL_IFA_LOCAL))
+#if defined(IFA_LOCAL) || (defined(HAVE_DECL_IFA_LOCAL) && HAVE_DECL_IFA_LOCAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFA_LOCAL) == (2), "IFA_LOCAL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFA_LOCAL 2
 #endif
-#if !(defined(IFA_LABEL) || (defined(HAVE_DECL_IFA_LABEL) && HAVE_DECL_IFA_LABEL))
+#if defined(IFA_LABEL) || (defined(HAVE_DECL_IFA_LABEL) && HAVE_DECL_IFA_LABEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFA_LABEL) == (3), "IFA_LABEL != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFA_LABEL 3
 #endif
-#if !(defined(IFA_BROADCAST) || (defined(HAVE_DECL_IFA_BROADCAST) && HAVE_DECL_IFA_BROADCAST))
+#if defined(IFA_BROADCAST) || (defined(HAVE_DECL_IFA_BROADCAST) && HAVE_DECL_IFA_BROADCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFA_BROADCAST) == (4), "IFA_BROADCAST != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFA_BROADCAST 4
 #endif
-#if !(defined(IFA_ANYCAST) || (defined(HAVE_DECL_IFA_ANYCAST) && HAVE_DECL_IFA_ANYCAST))
+#if defined(IFA_ANYCAST) || (defined(HAVE_DECL_IFA_ANYCAST) && HAVE_DECL_IFA_ANYCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFA_ANYCAST) == (5), "IFA_ANYCAST != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFA_ANYCAST 5
 #endif
-#if !(defined(IFA_CACHEINFO) || (defined(HAVE_DECL_IFA_CACHEINFO) && HAVE_DECL_IFA_CACHEINFO))
+#if defined(IFA_CACHEINFO) || (defined(HAVE_DECL_IFA_CACHEINFO) && HAVE_DECL_IFA_CACHEINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFA_CACHEINFO) == (6), "IFA_CACHEINFO != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFA_CACHEINFO 6
 #endif
-#if !(defined(IFA_MULTICAST) || (defined(HAVE_DECL_IFA_MULTICAST) && HAVE_DECL_IFA_MULTICAST))
+#if defined(IFA_MULTICAST) || (defined(HAVE_DECL_IFA_MULTICAST) && HAVE_DECL_IFA_MULTICAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFA_MULTICAST) == (7), "IFA_MULTICAST != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFA_MULTICAST 7
 #endif
-#if !(defined(IFA_FLAGS) || (defined(HAVE_DECL_IFA_FLAGS) && HAVE_DECL_IFA_FLAGS))
+#if defined(IFA_FLAGS) || (defined(HAVE_DECL_IFA_FLAGS) && HAVE_DECL_IFA_FLAGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFA_FLAGS) == (8), "IFA_FLAGS != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFA_FLAGS 8
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_addr_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_addr_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_addr_attrs[] = {
@@ -47,4 +89,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_addrlabel_attrs.h b/xlat/rtnl_addrlabel_attrs.h
index eab9b6c..f4b7e7f 100644
--- a/xlat/rtnl_addrlabel_attrs.h
+++ b/xlat/rtnl_addrlabel_attrs.h
@@ -1,16 +1,30 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFAL_ADDRESS) || (defined(HAVE_DECL_IFAL_ADDRESS) && HAVE_DECL_IFAL_ADDRESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFAL_ADDRESS) == (1), "IFAL_ADDRESS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFAL_ADDRESS 1
 #endif
-#if !(defined(IFAL_LABEL) || (defined(HAVE_DECL_IFAL_LABEL) && HAVE_DECL_IFAL_LABEL))
+#if defined(IFAL_LABEL) || (defined(HAVE_DECL_IFAL_LABEL) && HAVE_DECL_IFAL_LABEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFAL_LABEL) == (2), "IFAL_LABEL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFAL_LABEL 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_addrlabel_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_addrlabel_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_addrlabel_attrs[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_dcb_attrs.h b/xlat/rtnl_dcb_attrs.h
index e91bdf4..9f2b675 100644
--- a/xlat/rtnl_dcb_attrs.h
+++ b/xlat/rtnl_dcb_attrs.h
@@ -1,61 +1,135 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(DCB_ATTR_UNDEFINED) || (defined(HAVE_DECL_DCB_ATTR_UNDEFINED) && HAVE_DECL_DCB_ATTR_UNDEFINED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_UNDEFINED) == (0), "DCB_ATTR_UNDEFINED != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_UNDEFINED 0
 #endif
-#if !(defined(DCB_ATTR_IFNAME) || (defined(HAVE_DECL_DCB_ATTR_IFNAME) && HAVE_DECL_DCB_ATTR_IFNAME))
+#if defined(DCB_ATTR_IFNAME) || (defined(HAVE_DECL_DCB_ATTR_IFNAME) && HAVE_DECL_DCB_ATTR_IFNAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_IFNAME) == (1), "DCB_ATTR_IFNAME != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_IFNAME 1
 #endif
-#if !(defined(DCB_ATTR_STATE) || (defined(HAVE_DECL_DCB_ATTR_STATE) && HAVE_DECL_DCB_ATTR_STATE))
+#if defined(DCB_ATTR_STATE) || (defined(HAVE_DECL_DCB_ATTR_STATE) && HAVE_DECL_DCB_ATTR_STATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_STATE) == (2), "DCB_ATTR_STATE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_ATTR_PFC_STATE) || (defined(HAVE_DECL_DCB_ATTR_PFC_STATE) && HAVE_DECL_DCB_ATTR_PFC_STATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_PFC_STATE) == (3), "DCB_ATTR_PFC_STATE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_ATTR_PFC_CFG) || (defined(HAVE_DECL_DCB_ATTR_PFC_CFG) && HAVE_DECL_DCB_ATTR_PFC_CFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_PFC_CFG) == (4), "DCB_ATTR_PFC_CFG != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_ATTR_NUM_TC) || (defined(HAVE_DECL_DCB_ATTR_NUM_TC) && HAVE_DECL_DCB_ATTR_NUM_TC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_NUM_TC) == (5), "DCB_ATTR_NUM_TC != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_ATTR_PG_CFG) || (defined(HAVE_DECL_DCB_ATTR_PG_CFG) && HAVE_DECL_DCB_ATTR_PG_CFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_PG_CFG) == (6), "DCB_ATTR_PG_CFG != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_ATTR_SET_ALL) || (defined(HAVE_DECL_DCB_ATTR_SET_ALL) && HAVE_DECL_DCB_ATTR_SET_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_SET_ALL) == (7), "DCB_ATTR_SET_ALL != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(DCB_ATTR_PERM_HWADDR) || (defined(HAVE_DECL_DCB_ATTR_PERM_HWADDR) && HAVE_DECL_DCB_ATTR_PERM_HWADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_PERM_HWADDR) == (8), "DCB_ATTR_PERM_HWADDR != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_PERM_HWADDR 8
 #endif
-#if !(defined(DCB_ATTR_CAP) || (defined(HAVE_DECL_DCB_ATTR_CAP) && HAVE_DECL_DCB_ATTR_CAP))
+#if defined(DCB_ATTR_CAP) || (defined(HAVE_DECL_DCB_ATTR_CAP) && HAVE_DECL_DCB_ATTR_CAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_CAP) == (9), "DCB_ATTR_CAP != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_CAP 9
 #endif
-#if !(defined(DCB_ATTR_NUMTCS) || (defined(HAVE_DECL_DCB_ATTR_NUMTCS) && HAVE_DECL_DCB_ATTR_NUMTCS))
+#if defined(DCB_ATTR_NUMTCS) || (defined(HAVE_DECL_DCB_ATTR_NUMTCS) && HAVE_DECL_DCB_ATTR_NUMTCS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_NUMTCS) == (10), "DCB_ATTR_NUMTCS != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_NUMTCS 10
 #endif
-#if !(defined(DCB_ATTR_BCN) || (defined(HAVE_DECL_DCB_ATTR_BCN) && HAVE_DECL_DCB_ATTR_BCN))
+#if defined(DCB_ATTR_BCN) || (defined(HAVE_DECL_DCB_ATTR_BCN) && HAVE_DECL_DCB_ATTR_BCN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_BCN) == (11), "DCB_ATTR_BCN != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_BCN 11
 #endif
-#if !(defined(DCB_ATTR_APP) || (defined(HAVE_DECL_DCB_ATTR_APP) && HAVE_DECL_DCB_ATTR_APP))
+#if defined(DCB_ATTR_APP) || (defined(HAVE_DECL_DCB_ATTR_APP) && HAVE_DECL_DCB_ATTR_APP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_APP) == (12), "DCB_ATTR_APP != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_APP 12
 #endif
-#if !(defined(DCB_ATTR_IEEE) || (defined(HAVE_DECL_DCB_ATTR_IEEE) && HAVE_DECL_DCB_ATTR_IEEE))
+#if defined(DCB_ATTR_IEEE) || (defined(HAVE_DECL_DCB_ATTR_IEEE) && HAVE_DECL_DCB_ATTR_IEEE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_IEEE) == (13), "DCB_ATTR_IEEE != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_IEEE 13
 #endif
-#if !(defined(DCB_ATTR_DCBX) || (defined(HAVE_DECL_DCB_ATTR_DCBX) && HAVE_DECL_DCB_ATTR_DCBX))
+#if defined(DCB_ATTR_DCBX) || (defined(HAVE_DECL_DCB_ATTR_DCBX) && HAVE_DECL_DCB_ATTR_DCBX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_DCBX) == (14), "DCB_ATTR_DCBX != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_DCBX 14
 #endif
-#if !(defined(DCB_ATTR_FEATCFG) || (defined(HAVE_DECL_DCB_ATTR_FEATCFG) && HAVE_DECL_DCB_ATTR_FEATCFG))
+#if defined(DCB_ATTR_FEATCFG) || (defined(HAVE_DECL_DCB_ATTR_FEATCFG) && HAVE_DECL_DCB_ATTR_FEATCFG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_FEATCFG) == (15), "DCB_ATTR_FEATCFG != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_FEATCFG 15
 #endif
-#if !(defined(DCB_ATTR_CEE) || (defined(HAVE_DECL_DCB_ATTR_CEE) && HAVE_DECL_DCB_ATTR_CEE))
+#if defined(DCB_ATTR_CEE) || (defined(HAVE_DECL_DCB_ATTR_CEE) && HAVE_DECL_DCB_ATTR_CEE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCB_ATTR_CEE) == (16), "DCB_ATTR_CEE != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define DCB_ATTR_CEE 16
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_dcb_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_dcb_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_dcb_attrs[] = {
@@ -79,4 +153,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_af_spec_inet6_attrs.h b/xlat/rtnl_ifla_af_spec_inet6_attrs.h
new file mode 100644
index 0000000..7a2e18b
--- /dev/null
+++ b/xlat/rtnl_ifla_af_spec_inet6_attrs.h
@@ -0,0 +1,94 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_af_spec_inet6_attrs.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_INET6_UNSPEC) || (defined(HAVE_DECL_IFLA_INET6_UNSPEC) && HAVE_DECL_IFLA_INET6_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET6_UNSPEC) == (0), "IFLA_INET6_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET6_UNSPEC 0
+#endif
+#if defined(IFLA_INET6_FLAGS) || (defined(HAVE_DECL_IFLA_INET6_FLAGS) && HAVE_DECL_IFLA_INET6_FLAGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET6_FLAGS) == (1), "IFLA_INET6_FLAGS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET6_FLAGS 1
+#endif
+#if defined(IFLA_INET6_CONF) || (defined(HAVE_DECL_IFLA_INET6_CONF) && HAVE_DECL_IFLA_INET6_CONF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET6_CONF) == (2), "IFLA_INET6_CONF != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET6_CONF 2
+#endif
+#if defined(IFLA_INET6_STATS) || (defined(HAVE_DECL_IFLA_INET6_STATS) && HAVE_DECL_IFLA_INET6_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET6_STATS) == (3), "IFLA_INET6_STATS != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET6_STATS 3
+#endif
+#if defined(IFLA_INET6_MCAST) || (defined(HAVE_DECL_IFLA_INET6_MCAST) && HAVE_DECL_IFLA_INET6_MCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET6_MCAST) == (4), "IFLA_INET6_MCAST != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET6_MCAST 4
+#endif
+#if defined(IFLA_INET6_CACHEINFO) || (defined(HAVE_DECL_IFLA_INET6_CACHEINFO) && HAVE_DECL_IFLA_INET6_CACHEINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET6_CACHEINFO) == (5), "IFLA_INET6_CACHEINFO != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET6_CACHEINFO 5
+#endif
+#if defined(IFLA_INET6_ICMP6STATS) || (defined(HAVE_DECL_IFLA_INET6_ICMP6STATS) && HAVE_DECL_IFLA_INET6_ICMP6STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET6_ICMP6STATS) == (6), "IFLA_INET6_ICMP6STATS != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET6_ICMP6STATS 6
+#endif
+#if defined(IFLA_INET6_TOKEN) || (defined(HAVE_DECL_IFLA_INET6_TOKEN) && HAVE_DECL_IFLA_INET6_TOKEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET6_TOKEN) == (7), "IFLA_INET6_TOKEN != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET6_TOKEN 7
+#endif
+#if defined(IFLA_INET6_ADDR_GEN_MODE) || (defined(HAVE_DECL_IFLA_INET6_ADDR_GEN_MODE) && HAVE_DECL_IFLA_INET6_ADDR_GEN_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET6_ADDR_GEN_MODE) == (8), "IFLA_INET6_ADDR_GEN_MODE != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET6_ADDR_GEN_MODE 8
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat rtnl_ifla_af_spec_inet6_attrs in mpers mode
+
+# else
+
+static
+const struct xlat rtnl_ifla_af_spec_inet6_attrs[] = {
+ [IFLA_INET6_UNSPEC] = XLAT(IFLA_INET6_UNSPEC),
+ [IFLA_INET6_FLAGS] = XLAT(IFLA_INET6_FLAGS),
+ [IFLA_INET6_CONF] = XLAT(IFLA_INET6_CONF),
+ [IFLA_INET6_STATS] = XLAT(IFLA_INET6_STATS),
+ [IFLA_INET6_MCAST] = XLAT(IFLA_INET6_MCAST),
+ [IFLA_INET6_CACHEINFO] = XLAT(IFLA_INET6_CACHEINFO),
+ [IFLA_INET6_ICMP6STATS] = XLAT(IFLA_INET6_ICMP6STATS),
+ [IFLA_INET6_TOKEN] = XLAT(IFLA_INET6_TOKEN),
+ [IFLA_INET6_ADDR_GEN_MODE] = XLAT(IFLA_INET6_ADDR_GEN_MODE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_af_spec_inet6_attrs.in b/xlat/rtnl_ifla_af_spec_inet6_attrs.in
new file mode 100644
index 0000000..9717d5a
--- /dev/null
+++ b/xlat/rtnl_ifla_af_spec_inet6_attrs.in
@@ -0,0 +1,10 @@
+#value_indexed
+IFLA_INET6_UNSPEC		0
+IFLA_INET6_FLAGS		1
+IFLA_INET6_CONF			2
+IFLA_INET6_STATS		3
+IFLA_INET6_MCAST		4
+IFLA_INET6_CACHEINFO		5
+IFLA_INET6_ICMP6STATS		6
+IFLA_INET6_TOKEN		7
+IFLA_INET6_ADDR_GEN_MODE	8
diff --git a/xlat/rtnl_ifla_af_spec_inet_attrs.h b/xlat/rtnl_ifla_af_spec_inet_attrs.h
new file mode 100644
index 0000000..8dd1220
--- /dev/null
+++ b/xlat/rtnl_ifla_af_spec_inet_attrs.h
@@ -0,0 +1,38 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_af_spec_inet_attrs.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_INET_UNSPEC) || (defined(HAVE_DECL_IFLA_INET_UNSPEC) && HAVE_DECL_IFLA_INET_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET_UNSPEC) == (0), "IFLA_INET_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET_UNSPEC 0
+#endif
+#if defined(IFLA_INET_CONF) || (defined(HAVE_DECL_IFLA_INET_CONF) && HAVE_DECL_IFLA_INET_CONF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INET_CONF) == (1), "IFLA_INET_CONF != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_INET_CONF 1
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat rtnl_ifla_af_spec_inet_attrs in mpers mode
+
+# else
+
+static
+const struct xlat rtnl_ifla_af_spec_inet_attrs[] = {
+ [IFLA_INET_UNSPEC] = XLAT(IFLA_INET_UNSPEC),
+ [IFLA_INET_CONF] = XLAT(IFLA_INET_CONF),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_af_spec_inet_attrs.in b/xlat/rtnl_ifla_af_spec_inet_attrs.in
new file mode 100644
index 0000000..7979975
--- /dev/null
+++ b/xlat/rtnl_ifla_af_spec_inet_attrs.in
@@ -0,0 +1,3 @@
+#value_indexed
+IFLA_INET_UNSPEC	0
+IFLA_INET_CONF		1
diff --git a/xlat/rtnl_ifla_brport_attrs.h b/xlat/rtnl_ifla_brport_attrs.h
index 8b4bd1d..0fb749c 100644
--- a/xlat/rtnl_ifla_brport_attrs.h
+++ b/xlat/rtnl_ifla_brport_attrs.h
@@ -1,103 +1,233 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_BRPORT_UNSPEC) || (defined(HAVE_DECL_IFLA_BRPORT_UNSPEC) && HAVE_DECL_IFLA_BRPORT_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_UNSPEC) == (0), "IFLA_BRPORT_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_UNSPEC 0
 #endif
-#if !(defined(IFLA_BRPORT_STATE) || (defined(HAVE_DECL_IFLA_BRPORT_STATE) && HAVE_DECL_IFLA_BRPORT_STATE))
+#if defined(IFLA_BRPORT_STATE) || (defined(HAVE_DECL_IFLA_BRPORT_STATE) && HAVE_DECL_IFLA_BRPORT_STATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_STATE) == (1), "IFLA_BRPORT_STATE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_STATE 1
 #endif
-#if !(defined(IFLA_BRPORT_PRIORITY) || (defined(HAVE_DECL_IFLA_BRPORT_PRIORITY) && HAVE_DECL_IFLA_BRPORT_PRIORITY))
+#if defined(IFLA_BRPORT_PRIORITY) || (defined(HAVE_DECL_IFLA_BRPORT_PRIORITY) && HAVE_DECL_IFLA_BRPORT_PRIORITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_PRIORITY) == (2), "IFLA_BRPORT_PRIORITY != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_PRIORITY 2
 #endif
-#if !(defined(IFLA_BRPORT_COST) || (defined(HAVE_DECL_IFLA_BRPORT_COST) && HAVE_DECL_IFLA_BRPORT_COST))
+#if defined(IFLA_BRPORT_COST) || (defined(HAVE_DECL_IFLA_BRPORT_COST) && HAVE_DECL_IFLA_BRPORT_COST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_COST) == (3), "IFLA_BRPORT_COST != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_COST 3
 #endif
-#if !(defined(IFLA_BRPORT_MODE) || (defined(HAVE_DECL_IFLA_BRPORT_MODE) && HAVE_DECL_IFLA_BRPORT_MODE))
+#if defined(IFLA_BRPORT_MODE) || (defined(HAVE_DECL_IFLA_BRPORT_MODE) && HAVE_DECL_IFLA_BRPORT_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_MODE) == (4), "IFLA_BRPORT_MODE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_MODE 4
 #endif
-#if !(defined(IFLA_BRPORT_GUARD) || (defined(HAVE_DECL_IFLA_BRPORT_GUARD) && HAVE_DECL_IFLA_BRPORT_GUARD))
+#if defined(IFLA_BRPORT_GUARD) || (defined(HAVE_DECL_IFLA_BRPORT_GUARD) && HAVE_DECL_IFLA_BRPORT_GUARD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_GUARD) == (5), "IFLA_BRPORT_GUARD != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_GUARD 5
 #endif
-#if !(defined(IFLA_BRPORT_PROTECT) || (defined(HAVE_DECL_IFLA_BRPORT_PROTECT) && HAVE_DECL_IFLA_BRPORT_PROTECT))
+#if defined(IFLA_BRPORT_PROTECT) || (defined(HAVE_DECL_IFLA_BRPORT_PROTECT) && HAVE_DECL_IFLA_BRPORT_PROTECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_PROTECT) == (6), "IFLA_BRPORT_PROTECT != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_FAST_LEAVE) || (defined(HAVE_DECL_IFLA_BRPORT_FAST_LEAVE) && HAVE_DECL_IFLA_BRPORT_FAST_LEAVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_FAST_LEAVE) == (7), "IFLA_BRPORT_FAST_LEAVE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_FAST_LEAVE 7
 #endif
-#if !(defined(IFLA_BRPORT_LEARNING) || (defined(HAVE_DECL_IFLA_BRPORT_LEARNING) && HAVE_DECL_IFLA_BRPORT_LEARNING))
+#if defined(IFLA_BRPORT_LEARNING) || (defined(HAVE_DECL_IFLA_BRPORT_LEARNING) && HAVE_DECL_IFLA_BRPORT_LEARNING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_LEARNING) == (8), "IFLA_BRPORT_LEARNING != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_UNICAST_FLOOD) || (defined(HAVE_DECL_IFLA_BRPORT_UNICAST_FLOOD) && HAVE_DECL_IFLA_BRPORT_UNICAST_FLOOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_UNICAST_FLOOD) == (9), "IFLA_BRPORT_UNICAST_FLOOD != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_UNICAST_FLOOD 9
 #endif
-#if !(defined(IFLA_BRPORT_PROXYARP) || (defined(HAVE_DECL_IFLA_BRPORT_PROXYARP) && HAVE_DECL_IFLA_BRPORT_PROXYARP))
+#if defined(IFLA_BRPORT_PROXYARP) || (defined(HAVE_DECL_IFLA_BRPORT_PROXYARP) && HAVE_DECL_IFLA_BRPORT_PROXYARP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_PROXYARP) == (10), "IFLA_BRPORT_PROXYARP != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_LEARNING_SYNC) || (defined(HAVE_DECL_IFLA_BRPORT_LEARNING_SYNC) && HAVE_DECL_IFLA_BRPORT_LEARNING_SYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_LEARNING_SYNC) == (11), "IFLA_BRPORT_LEARNING_SYNC != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_PROXYARP_WIFI) || (defined(HAVE_DECL_IFLA_BRPORT_PROXYARP_WIFI) && HAVE_DECL_IFLA_BRPORT_PROXYARP_WIFI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_PROXYARP_WIFI) == (12), "IFLA_BRPORT_PROXYARP_WIFI != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_ROOT_ID) || (defined(HAVE_DECL_IFLA_BRPORT_ROOT_ID) && HAVE_DECL_IFLA_BRPORT_ROOT_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_ROOT_ID) == (13), "IFLA_BRPORT_ROOT_ID != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_BRIDGE_ID) || (defined(HAVE_DECL_IFLA_BRPORT_BRIDGE_ID) && HAVE_DECL_IFLA_BRPORT_BRIDGE_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_BRIDGE_ID) == (14), "IFLA_BRPORT_BRIDGE_ID != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_DESIGNATED_PORT) || (defined(HAVE_DECL_IFLA_BRPORT_DESIGNATED_PORT) && HAVE_DECL_IFLA_BRPORT_DESIGNATED_PORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_DESIGNATED_PORT) == (15), "IFLA_BRPORT_DESIGNATED_PORT != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_DESIGNATED_COST) || (defined(HAVE_DECL_IFLA_BRPORT_DESIGNATED_COST) && HAVE_DECL_IFLA_BRPORT_DESIGNATED_COST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_DESIGNATED_COST) == (16), "IFLA_BRPORT_DESIGNATED_COST != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_DESIGNATED_COST 16
 #endif
-#if !(defined(IFLA_BRPORT_ID) || (defined(HAVE_DECL_IFLA_BRPORT_ID) && HAVE_DECL_IFLA_BRPORT_ID))
+#if defined(IFLA_BRPORT_ID) || (defined(HAVE_DECL_IFLA_BRPORT_ID) && HAVE_DECL_IFLA_BRPORT_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_ID) == (17), "IFLA_BRPORT_ID != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_ID 17
 #endif
-#if !(defined(IFLA_BRPORT_NO) || (defined(HAVE_DECL_IFLA_BRPORT_NO) && HAVE_DECL_IFLA_BRPORT_NO))
+#if defined(IFLA_BRPORT_NO) || (defined(HAVE_DECL_IFLA_BRPORT_NO) && HAVE_DECL_IFLA_BRPORT_NO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_NO) == (18), "IFLA_BRPORT_NO != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_TOPOLOGY_CHANGE_ACK) || (defined(HAVE_DECL_IFLA_BRPORT_TOPOLOGY_CHANGE_ACK) && HAVE_DECL_IFLA_BRPORT_TOPOLOGY_CHANGE_ACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_TOPOLOGY_CHANGE_ACK) == (19), "IFLA_BRPORT_TOPOLOGY_CHANGE_ACK != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_CONFIG_PENDING) || (defined(HAVE_DECL_IFLA_BRPORT_CONFIG_PENDING) && HAVE_DECL_IFLA_BRPORT_CONFIG_PENDING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_CONFIG_PENDING) == (20), "IFLA_BRPORT_CONFIG_PENDING != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_MESSAGE_AGE_TIMER) || (defined(HAVE_DECL_IFLA_BRPORT_MESSAGE_AGE_TIMER) && HAVE_DECL_IFLA_BRPORT_MESSAGE_AGE_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_MESSAGE_AGE_TIMER) == (21), "IFLA_BRPORT_MESSAGE_AGE_TIMER != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_FORWARD_DELAY_TIMER) || (defined(HAVE_DECL_IFLA_BRPORT_FORWARD_DELAY_TIMER) && HAVE_DECL_IFLA_BRPORT_FORWARD_DELAY_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_FORWARD_DELAY_TIMER) == (22), "IFLA_BRPORT_FORWARD_DELAY_TIMER != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_HOLD_TIMER) || (defined(HAVE_DECL_IFLA_BRPORT_HOLD_TIMER) && HAVE_DECL_IFLA_BRPORT_HOLD_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_HOLD_TIMER) == (23), "IFLA_BRPORT_HOLD_TIMER != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_HOLD_TIMER 23
 #endif
-#if !(defined(IFLA_BRPORT_FLUSH) || (defined(HAVE_DECL_IFLA_BRPORT_FLUSH) && HAVE_DECL_IFLA_BRPORT_FLUSH))
+#if defined(IFLA_BRPORT_FLUSH) || (defined(HAVE_DECL_IFLA_BRPORT_FLUSH) && HAVE_DECL_IFLA_BRPORT_FLUSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_FLUSH) == (24), "IFLA_BRPORT_FLUSH != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_MULTICAST_ROUTER) || (defined(HAVE_DECL_IFLA_BRPORT_MULTICAST_ROUTER) && HAVE_DECL_IFLA_BRPORT_MULTICAST_ROUTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_MULTICAST_ROUTER) == (25), "IFLA_BRPORT_MULTICAST_ROUTER != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_MULTICAST_ROUTER 25
 #endif
-#if !(defined(IFLA_BRPORT_PAD) || (defined(HAVE_DECL_IFLA_BRPORT_PAD) && HAVE_DECL_IFLA_BRPORT_PAD))
+#if defined(IFLA_BRPORT_PAD) || (defined(HAVE_DECL_IFLA_BRPORT_PAD) && HAVE_DECL_IFLA_BRPORT_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_PAD) == (26), "IFLA_BRPORT_PAD != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_MCAST_FLOOD) || (defined(HAVE_DECL_IFLA_BRPORT_MCAST_FLOOD) && HAVE_DECL_IFLA_BRPORT_MCAST_FLOOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_MCAST_FLOOD) == (27), "IFLA_BRPORT_MCAST_FLOOD != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_MCAST_TO_UCAST) || (defined(HAVE_DECL_IFLA_BRPORT_MCAST_TO_UCAST) && HAVE_DECL_IFLA_BRPORT_MCAST_TO_UCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_MCAST_TO_UCAST) == (28), "IFLA_BRPORT_MCAST_TO_UCAST != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_VLAN_TUNNEL) || (defined(HAVE_DECL_IFLA_BRPORT_VLAN_TUNNEL) && HAVE_DECL_IFLA_BRPORT_VLAN_TUNNEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_VLAN_TUNNEL) == (29), "IFLA_BRPORT_VLAN_TUNNEL != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_BRPORT_BCAST_FLOOD) || (defined(HAVE_DECL_IFLA_BRPORT_BCAST_FLOOD) && HAVE_DECL_IFLA_BRPORT_BCAST_FLOOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BRPORT_BCAST_FLOOD) == (30), "IFLA_BRPORT_BCAST_FLOOD != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BRPORT_BCAST_FLOOD 30
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_ifla_brport_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_ifla_brport_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_ifla_brport_attrs[] = {
@@ -135,4 +265,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_events.h b/xlat/rtnl_ifla_events.h
index 50aee84..0f214d6 100644
--- a/xlat/rtnl_ifla_events.h
+++ b/xlat/rtnl_ifla_events.h
@@ -1,31 +1,65 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_events.in; do not edit. */
-#if !(defined(IFLA_EVENT_NONE) || (defined(HAVE_DECL_IFLA_EVENT_NONE) && HAVE_DECL_IFLA_EVENT_NONE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_EVENT_NONE) || (defined(HAVE_DECL_IFLA_EVENT_NONE) && HAVE_DECL_IFLA_EVENT_NONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_EVENT_NONE) == (0), "IFLA_EVENT_NONE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_EVENT_NONE 0
 #endif
-#if !(defined(IFLA_EVENT_REBOOT) || (defined(HAVE_DECL_IFLA_EVENT_REBOOT) && HAVE_DECL_IFLA_EVENT_REBOOT))
+#if defined(IFLA_EVENT_REBOOT) || (defined(HAVE_DECL_IFLA_EVENT_REBOOT) && HAVE_DECL_IFLA_EVENT_REBOOT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_EVENT_REBOOT) == (1), "IFLA_EVENT_REBOOT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_EVENT_REBOOT 1
 #endif
-#if !(defined(IFLA_EVENT_FEATURES) || (defined(HAVE_DECL_IFLA_EVENT_FEATURES) && HAVE_DECL_IFLA_EVENT_FEATURES))
+#if defined(IFLA_EVENT_FEATURES) || (defined(HAVE_DECL_IFLA_EVENT_FEATURES) && HAVE_DECL_IFLA_EVENT_FEATURES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_EVENT_FEATURES) == (2), "IFLA_EVENT_FEATURES != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_EVENT_FEATURES 2
 #endif
-#if !(defined(IFLA_EVENT_BONDING_FAILOVER) || (defined(HAVE_DECL_IFLA_EVENT_BONDING_FAILOVER) && HAVE_DECL_IFLA_EVENT_BONDING_FAILOVER))
+#if defined(IFLA_EVENT_BONDING_FAILOVER) || (defined(HAVE_DECL_IFLA_EVENT_BONDING_FAILOVER) && HAVE_DECL_IFLA_EVENT_BONDING_FAILOVER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_EVENT_BONDING_FAILOVER) == (3), "IFLA_EVENT_BONDING_FAILOVER != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_EVENT_BONDING_FAILOVER 3
 #endif
-#if !(defined(IFLA_EVENT_NOTIFY_PEERS) || (defined(HAVE_DECL_IFLA_EVENT_NOTIFY_PEERS) && HAVE_DECL_IFLA_EVENT_NOTIFY_PEERS))
+#if defined(IFLA_EVENT_NOTIFY_PEERS) || (defined(HAVE_DECL_IFLA_EVENT_NOTIFY_PEERS) && HAVE_DECL_IFLA_EVENT_NOTIFY_PEERS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_EVENT_NOTIFY_PEERS) == (4), "IFLA_EVENT_NOTIFY_PEERS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_EVENT_NOTIFY_PEERS 4
 #endif
-#if !(defined(IFLA_EVENT_IGMP_RESEND) || (defined(HAVE_DECL_IFLA_EVENT_IGMP_RESEND) && HAVE_DECL_IFLA_EVENT_IGMP_RESEND))
+#if defined(IFLA_EVENT_IGMP_RESEND) || (defined(HAVE_DECL_IFLA_EVENT_IGMP_RESEND) && HAVE_DECL_IFLA_EVENT_IGMP_RESEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_EVENT_IGMP_RESEND) == (5), "IFLA_EVENT_IGMP_RESEND != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_EVENT_IGMP_RESEND 5
 #endif
-#if !(defined(IFLA_EVENT_BONDING_OPTIONS) || (defined(HAVE_DECL_IFLA_EVENT_BONDING_OPTIONS) && HAVE_DECL_IFLA_EVENT_BONDING_OPTIONS))
+#if defined(IFLA_EVENT_BONDING_OPTIONS) || (defined(HAVE_DECL_IFLA_EVENT_BONDING_OPTIONS) && HAVE_DECL_IFLA_EVENT_BONDING_OPTIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_EVENT_BONDING_OPTIONS) == (6), "IFLA_EVENT_BONDING_OPTIONS != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_EVENT_BONDING_OPTIONS 6
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_ifla_events in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_ifla_events in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_ifla_events[] = {
@@ -39,4 +73,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_info_attrs.h b/xlat/rtnl_ifla_info_attrs.h
index 66ed9c4..dd3124b 100644
--- a/xlat/rtnl_ifla_info_attrs.h
+++ b/xlat/rtnl_ifla_info_attrs.h
@@ -1,28 +1,58 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_INFO_UNSPEC) || (defined(HAVE_DECL_IFLA_INFO_UNSPEC) && HAVE_DECL_IFLA_INFO_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INFO_UNSPEC) == (0), "IFLA_INFO_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_INFO_UNSPEC 0
 #endif
-#if !(defined(IFLA_INFO_KIND) || (defined(HAVE_DECL_IFLA_INFO_KIND) && HAVE_DECL_IFLA_INFO_KIND))
+#if defined(IFLA_INFO_KIND) || (defined(HAVE_DECL_IFLA_INFO_KIND) && HAVE_DECL_IFLA_INFO_KIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INFO_KIND) == (1), "IFLA_INFO_KIND != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_INFO_KIND 1
 #endif
-#if !(defined(IFLA_INFO_DATA) || (defined(HAVE_DECL_IFLA_INFO_DATA) && HAVE_DECL_IFLA_INFO_DATA))
+#if defined(IFLA_INFO_DATA) || (defined(HAVE_DECL_IFLA_INFO_DATA) && HAVE_DECL_IFLA_INFO_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INFO_DATA) == (2), "IFLA_INFO_DATA != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_INFO_DATA 2
 #endif
-#if !(defined(IFLA_INFO_XSTATS) || (defined(HAVE_DECL_IFLA_INFO_XSTATS) && HAVE_DECL_IFLA_INFO_XSTATS))
+#if defined(IFLA_INFO_XSTATS) || (defined(HAVE_DECL_IFLA_INFO_XSTATS) && HAVE_DECL_IFLA_INFO_XSTATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INFO_XSTATS) == (3), "IFLA_INFO_XSTATS != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_INFO_SLAVE_KIND) || (defined(HAVE_DECL_IFLA_INFO_SLAVE_KIND) && HAVE_DECL_IFLA_INFO_SLAVE_KIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INFO_SLAVE_KIND) == (4), "IFLA_INFO_SLAVE_KIND != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_INFO_SLAVE_DATA) || (defined(HAVE_DECL_IFLA_INFO_SLAVE_DATA) && HAVE_DECL_IFLA_INFO_SLAVE_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_INFO_SLAVE_DATA) == (5), "IFLA_INFO_SLAVE_DATA != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_INFO_SLAVE_DATA 5
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_ifla_info_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_ifla_info_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_ifla_info_attrs[] = {
@@ -35,4 +65,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_info_data_bridge_attrs.h b/xlat/rtnl_ifla_info_data_bridge_attrs.h
new file mode 100644
index 0000000..7436ddf
--- /dev/null
+++ b/xlat/rtnl_ifla_info_data_bridge_attrs.h
@@ -0,0 +1,382 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_info_data_bridge_attrs.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_BR_UNSPEC) || (defined(HAVE_DECL_IFLA_BR_UNSPEC) && HAVE_DECL_IFLA_BR_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_UNSPEC) == (0), "IFLA_BR_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_UNSPEC 0
+#endif
+#if defined(IFLA_BR_FORWARD_DELAY) || (defined(HAVE_DECL_IFLA_BR_FORWARD_DELAY) && HAVE_DECL_IFLA_BR_FORWARD_DELAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_FORWARD_DELAY) == (1), "IFLA_BR_FORWARD_DELAY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_FORWARD_DELAY 1
+#endif
+#if defined(IFLA_BR_HELLO_TIME) || (defined(HAVE_DECL_IFLA_BR_HELLO_TIME) && HAVE_DECL_IFLA_BR_HELLO_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_HELLO_TIME) == (2), "IFLA_BR_HELLO_TIME != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_HELLO_TIME 2
+#endif
+#if defined(IFLA_BR_MAX_AGE) || (defined(HAVE_DECL_IFLA_BR_MAX_AGE) && HAVE_DECL_IFLA_BR_MAX_AGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MAX_AGE) == (3), "IFLA_BR_MAX_AGE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MAX_AGE 3
+#endif
+#if defined(IFLA_BR_AGEING_TIME) || (defined(HAVE_DECL_IFLA_BR_AGEING_TIME) && HAVE_DECL_IFLA_BR_AGEING_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_AGEING_TIME) == (4), "IFLA_BR_AGEING_TIME != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_AGEING_TIME 4
+#endif
+#if defined(IFLA_BR_STP_STATE) || (defined(HAVE_DECL_IFLA_BR_STP_STATE) && HAVE_DECL_IFLA_BR_STP_STATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_STP_STATE) == (5), "IFLA_BR_STP_STATE != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_STP_STATE 5
+#endif
+#if defined(IFLA_BR_PRIORITY) || (defined(HAVE_DECL_IFLA_BR_PRIORITY) && HAVE_DECL_IFLA_BR_PRIORITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_PRIORITY) == (6), "IFLA_BR_PRIORITY != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_PRIORITY 6
+#endif
+#if defined(IFLA_BR_VLAN_FILTERING) || (defined(HAVE_DECL_IFLA_BR_VLAN_FILTERING) && HAVE_DECL_IFLA_BR_VLAN_FILTERING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_VLAN_FILTERING) == (7), "IFLA_BR_VLAN_FILTERING != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_VLAN_FILTERING 7
+#endif
+#if defined(IFLA_BR_VLAN_PROTOCOL) || (defined(HAVE_DECL_IFLA_BR_VLAN_PROTOCOL) && HAVE_DECL_IFLA_BR_VLAN_PROTOCOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_VLAN_PROTOCOL) == (8), "IFLA_BR_VLAN_PROTOCOL != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_VLAN_PROTOCOL 8
+#endif
+#if defined(IFLA_BR_GROUP_FWD_MASK) || (defined(HAVE_DECL_IFLA_BR_GROUP_FWD_MASK) && HAVE_DECL_IFLA_BR_GROUP_FWD_MASK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_GROUP_FWD_MASK) == (9), "IFLA_BR_GROUP_FWD_MASK != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_GROUP_FWD_MASK 9
+#endif
+#if defined(IFLA_BR_ROOT_ID) || (defined(HAVE_DECL_IFLA_BR_ROOT_ID) && HAVE_DECL_IFLA_BR_ROOT_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_ROOT_ID) == (10), "IFLA_BR_ROOT_ID != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_ROOT_ID 10
+#endif
+#if defined(IFLA_BR_BRIDGE_ID) || (defined(HAVE_DECL_IFLA_BR_BRIDGE_ID) && HAVE_DECL_IFLA_BR_BRIDGE_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_BRIDGE_ID) == (11), "IFLA_BR_BRIDGE_ID != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_BRIDGE_ID 11
+#endif
+#if defined(IFLA_BR_ROOT_PORT) || (defined(HAVE_DECL_IFLA_BR_ROOT_PORT) && HAVE_DECL_IFLA_BR_ROOT_PORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_ROOT_PORT) == (12), "IFLA_BR_ROOT_PORT != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_ROOT_PORT 12
+#endif
+#if defined(IFLA_BR_ROOT_PATH_COST) || (defined(HAVE_DECL_IFLA_BR_ROOT_PATH_COST) && HAVE_DECL_IFLA_BR_ROOT_PATH_COST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_ROOT_PATH_COST) == (13), "IFLA_BR_ROOT_PATH_COST != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_ROOT_PATH_COST 13
+#endif
+#if defined(IFLA_BR_TOPOLOGY_CHANGE) || (defined(HAVE_DECL_IFLA_BR_TOPOLOGY_CHANGE) && HAVE_DECL_IFLA_BR_TOPOLOGY_CHANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_TOPOLOGY_CHANGE) == (14), "IFLA_BR_TOPOLOGY_CHANGE != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_TOPOLOGY_CHANGE 14
+#endif
+#if defined(IFLA_BR_TOPOLOGY_CHANGE_DETECTED) || (defined(HAVE_DECL_IFLA_BR_TOPOLOGY_CHANGE_DETECTED) && HAVE_DECL_IFLA_BR_TOPOLOGY_CHANGE_DETECTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_TOPOLOGY_CHANGE_DETECTED) == (15), "IFLA_BR_TOPOLOGY_CHANGE_DETECTED != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_TOPOLOGY_CHANGE_DETECTED 15
+#endif
+#if defined(IFLA_BR_HELLO_TIMER) || (defined(HAVE_DECL_IFLA_BR_HELLO_TIMER) && HAVE_DECL_IFLA_BR_HELLO_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_HELLO_TIMER) == (16), "IFLA_BR_HELLO_TIMER != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_HELLO_TIMER 16
+#endif
+#if defined(IFLA_BR_TCN_TIMER) || (defined(HAVE_DECL_IFLA_BR_TCN_TIMER) && HAVE_DECL_IFLA_BR_TCN_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_TCN_TIMER) == (17), "IFLA_BR_TCN_TIMER != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_TCN_TIMER 17
+#endif
+#if defined(IFLA_BR_TOPOLOGY_CHANGE_TIMER) || (defined(HAVE_DECL_IFLA_BR_TOPOLOGY_CHANGE_TIMER) && HAVE_DECL_IFLA_BR_TOPOLOGY_CHANGE_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_TOPOLOGY_CHANGE_TIMER) == (18), "IFLA_BR_TOPOLOGY_CHANGE_TIMER != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_TOPOLOGY_CHANGE_TIMER 18
+#endif
+#if defined(IFLA_BR_GC_TIMER) || (defined(HAVE_DECL_IFLA_BR_GC_TIMER) && HAVE_DECL_IFLA_BR_GC_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_GC_TIMER) == (19), "IFLA_BR_GC_TIMER != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_GC_TIMER 19
+#endif
+#if defined(IFLA_BR_GROUP_ADDR) || (defined(HAVE_DECL_IFLA_BR_GROUP_ADDR) && HAVE_DECL_IFLA_BR_GROUP_ADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_GROUP_ADDR) == (20), "IFLA_BR_GROUP_ADDR != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_GROUP_ADDR 20
+#endif
+#if defined(IFLA_BR_FDB_FLUSH) || (defined(HAVE_DECL_IFLA_BR_FDB_FLUSH) && HAVE_DECL_IFLA_BR_FDB_FLUSH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_FDB_FLUSH) == (21), "IFLA_BR_FDB_FLUSH != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_FDB_FLUSH 21
+#endif
+#if defined(IFLA_BR_MCAST_ROUTER) || (defined(HAVE_DECL_IFLA_BR_MCAST_ROUTER) && HAVE_DECL_IFLA_BR_MCAST_ROUTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_ROUTER) == (22), "IFLA_BR_MCAST_ROUTER != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_ROUTER 22
+#endif
+#if defined(IFLA_BR_MCAST_SNOOPING) || (defined(HAVE_DECL_IFLA_BR_MCAST_SNOOPING) && HAVE_DECL_IFLA_BR_MCAST_SNOOPING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_SNOOPING) == (23), "IFLA_BR_MCAST_SNOOPING != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_SNOOPING 23
+#endif
+#if defined(IFLA_BR_MCAST_QUERY_USE_IFADDR) || (defined(HAVE_DECL_IFLA_BR_MCAST_QUERY_USE_IFADDR) && HAVE_DECL_IFLA_BR_MCAST_QUERY_USE_IFADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_QUERY_USE_IFADDR) == (24), "IFLA_BR_MCAST_QUERY_USE_IFADDR != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_QUERY_USE_IFADDR 24
+#endif
+#if defined(IFLA_BR_MCAST_QUERIER) || (defined(HAVE_DECL_IFLA_BR_MCAST_QUERIER) && HAVE_DECL_IFLA_BR_MCAST_QUERIER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_QUERIER) == (25), "IFLA_BR_MCAST_QUERIER != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_QUERIER 25
+#endif
+#if defined(IFLA_BR_MCAST_HASH_ELASTICITY) || (defined(HAVE_DECL_IFLA_BR_MCAST_HASH_ELASTICITY) && HAVE_DECL_IFLA_BR_MCAST_HASH_ELASTICITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_HASH_ELASTICITY) == (26), "IFLA_BR_MCAST_HASH_ELASTICITY != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_HASH_ELASTICITY 26
+#endif
+#if defined(IFLA_BR_MCAST_HASH_MAX) || (defined(HAVE_DECL_IFLA_BR_MCAST_HASH_MAX) && HAVE_DECL_IFLA_BR_MCAST_HASH_MAX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_HASH_MAX) == (27), "IFLA_BR_MCAST_HASH_MAX != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_HASH_MAX 27
+#endif
+#if defined(IFLA_BR_MCAST_LAST_MEMBER_CNT) || (defined(HAVE_DECL_IFLA_BR_MCAST_LAST_MEMBER_CNT) && HAVE_DECL_IFLA_BR_MCAST_LAST_MEMBER_CNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_LAST_MEMBER_CNT) == (28), "IFLA_BR_MCAST_LAST_MEMBER_CNT != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_LAST_MEMBER_CNT 28
+#endif
+#if defined(IFLA_BR_MCAST_STARTUP_QUERY_CNT) || (defined(HAVE_DECL_IFLA_BR_MCAST_STARTUP_QUERY_CNT) && HAVE_DECL_IFLA_BR_MCAST_STARTUP_QUERY_CNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_STARTUP_QUERY_CNT) == (29), "IFLA_BR_MCAST_STARTUP_QUERY_CNT != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_STARTUP_QUERY_CNT 29
+#endif
+#if defined(IFLA_BR_MCAST_LAST_MEMBER_INTVL) || (defined(HAVE_DECL_IFLA_BR_MCAST_LAST_MEMBER_INTVL) && HAVE_DECL_IFLA_BR_MCAST_LAST_MEMBER_INTVL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_LAST_MEMBER_INTVL) == (30), "IFLA_BR_MCAST_LAST_MEMBER_INTVL != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_LAST_MEMBER_INTVL 30
+#endif
+#if defined(IFLA_BR_MCAST_MEMBERSHIP_INTVL) || (defined(HAVE_DECL_IFLA_BR_MCAST_MEMBERSHIP_INTVL) && HAVE_DECL_IFLA_BR_MCAST_MEMBERSHIP_INTVL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_MEMBERSHIP_INTVL) == (31), "IFLA_BR_MCAST_MEMBERSHIP_INTVL != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_MEMBERSHIP_INTVL 31
+#endif
+#if defined(IFLA_BR_MCAST_QUERIER_INTVL) || (defined(HAVE_DECL_IFLA_BR_MCAST_QUERIER_INTVL) && HAVE_DECL_IFLA_BR_MCAST_QUERIER_INTVL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_QUERIER_INTVL) == (32), "IFLA_BR_MCAST_QUERIER_INTVL != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_QUERIER_INTVL 32
+#endif
+#if defined(IFLA_BR_MCAST_QUERY_INTVL) || (defined(HAVE_DECL_IFLA_BR_MCAST_QUERY_INTVL) && HAVE_DECL_IFLA_BR_MCAST_QUERY_INTVL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_QUERY_INTVL) == (33), "IFLA_BR_MCAST_QUERY_INTVL != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_QUERY_INTVL 33
+#endif
+#if defined(IFLA_BR_MCAST_QUERY_RESPONSE_INTVL) || (defined(HAVE_DECL_IFLA_BR_MCAST_QUERY_RESPONSE_INTVL) && HAVE_DECL_IFLA_BR_MCAST_QUERY_RESPONSE_INTVL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_QUERY_RESPONSE_INTVL) == (34), "IFLA_BR_MCAST_QUERY_RESPONSE_INTVL != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_QUERY_RESPONSE_INTVL 34
+#endif
+#if defined(IFLA_BR_MCAST_STARTUP_QUERY_INTVL) || (defined(HAVE_DECL_IFLA_BR_MCAST_STARTUP_QUERY_INTVL) && HAVE_DECL_IFLA_BR_MCAST_STARTUP_QUERY_INTVL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_STARTUP_QUERY_INTVL) == (35), "IFLA_BR_MCAST_STARTUP_QUERY_INTVL != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_STARTUP_QUERY_INTVL 35
+#endif
+#if defined(IFLA_BR_NF_CALL_IPTABLES) || (defined(HAVE_DECL_IFLA_BR_NF_CALL_IPTABLES) && HAVE_DECL_IFLA_BR_NF_CALL_IPTABLES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_NF_CALL_IPTABLES) == (36), "IFLA_BR_NF_CALL_IPTABLES != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_NF_CALL_IPTABLES 36
+#endif
+#if defined(IFLA_BR_NF_CALL_IP6TABLES) || (defined(HAVE_DECL_IFLA_BR_NF_CALL_IP6TABLES) && HAVE_DECL_IFLA_BR_NF_CALL_IP6TABLES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_NF_CALL_IP6TABLES) == (37), "IFLA_BR_NF_CALL_IP6TABLES != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_NF_CALL_IP6TABLES 37
+#endif
+#if defined(IFLA_BR_NF_CALL_ARPTABLES) || (defined(HAVE_DECL_IFLA_BR_NF_CALL_ARPTABLES) && HAVE_DECL_IFLA_BR_NF_CALL_ARPTABLES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_NF_CALL_ARPTABLES) == (38), "IFLA_BR_NF_CALL_ARPTABLES != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_NF_CALL_ARPTABLES 38
+#endif
+#if defined(IFLA_BR_VLAN_DEFAULT_PVID) || (defined(HAVE_DECL_IFLA_BR_VLAN_DEFAULT_PVID) && HAVE_DECL_IFLA_BR_VLAN_DEFAULT_PVID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_VLAN_DEFAULT_PVID) == (39), "IFLA_BR_VLAN_DEFAULT_PVID != 39");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_VLAN_DEFAULT_PVID 39
+#endif
+#if defined(IFLA_BR_PAD) || (defined(HAVE_DECL_IFLA_BR_PAD) && HAVE_DECL_IFLA_BR_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_PAD) == (40), "IFLA_BR_PAD != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_PAD 40
+#endif
+#if defined(IFLA_BR_VLAN_STATS_ENABLED) || (defined(HAVE_DECL_IFLA_BR_VLAN_STATS_ENABLED) && HAVE_DECL_IFLA_BR_VLAN_STATS_ENABLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_VLAN_STATS_ENABLED) == (41), "IFLA_BR_VLAN_STATS_ENABLED != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_VLAN_STATS_ENABLED 41
+#endif
+#if defined(IFLA_BR_MCAST_STATS_ENABLED) || (defined(HAVE_DECL_IFLA_BR_MCAST_STATS_ENABLED) && HAVE_DECL_IFLA_BR_MCAST_STATS_ENABLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_STATS_ENABLED) == (42), "IFLA_BR_MCAST_STATS_ENABLED != 42");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_STATS_ENABLED 42
+#endif
+#if defined(IFLA_BR_MCAST_IGMP_VERSION) || (defined(HAVE_DECL_IFLA_BR_MCAST_IGMP_VERSION) && HAVE_DECL_IFLA_BR_MCAST_IGMP_VERSION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_IGMP_VERSION) == (43), "IFLA_BR_MCAST_IGMP_VERSION != 43");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_IGMP_VERSION 43
+#endif
+#if defined(IFLA_BR_MCAST_MLD_VERSION) || (defined(HAVE_DECL_IFLA_BR_MCAST_MLD_VERSION) && HAVE_DECL_IFLA_BR_MCAST_MLD_VERSION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BR_MCAST_MLD_VERSION) == (44), "IFLA_BR_MCAST_MLD_VERSION != 44");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_BR_MCAST_MLD_VERSION 44
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat rtnl_ifla_info_data_bridge_attrs in mpers mode
+
+# else
+
+static
+const struct xlat rtnl_ifla_info_data_bridge_attrs[] = {
+ [IFLA_BR_UNSPEC] = XLAT(IFLA_BR_UNSPEC),
+ [IFLA_BR_FORWARD_DELAY] = XLAT(IFLA_BR_FORWARD_DELAY),
+ [IFLA_BR_HELLO_TIME] = XLAT(IFLA_BR_HELLO_TIME),
+ [IFLA_BR_MAX_AGE] = XLAT(IFLA_BR_MAX_AGE),
+ [IFLA_BR_AGEING_TIME] = XLAT(IFLA_BR_AGEING_TIME),
+ [IFLA_BR_STP_STATE] = XLAT(IFLA_BR_STP_STATE),
+ [IFLA_BR_PRIORITY] = XLAT(IFLA_BR_PRIORITY),
+ [IFLA_BR_VLAN_FILTERING] = XLAT(IFLA_BR_VLAN_FILTERING),
+ [IFLA_BR_VLAN_PROTOCOL] = XLAT(IFLA_BR_VLAN_PROTOCOL),
+ [IFLA_BR_GROUP_FWD_MASK] = XLAT(IFLA_BR_GROUP_FWD_MASK),
+ [IFLA_BR_ROOT_ID] = XLAT(IFLA_BR_ROOT_ID),
+ [IFLA_BR_BRIDGE_ID] = XLAT(IFLA_BR_BRIDGE_ID),
+ [IFLA_BR_ROOT_PORT] = XLAT(IFLA_BR_ROOT_PORT),
+ [IFLA_BR_ROOT_PATH_COST] = XLAT(IFLA_BR_ROOT_PATH_COST),
+ [IFLA_BR_TOPOLOGY_CHANGE] = XLAT(IFLA_BR_TOPOLOGY_CHANGE),
+ [IFLA_BR_TOPOLOGY_CHANGE_DETECTED] = XLAT(IFLA_BR_TOPOLOGY_CHANGE_DETECTED),
+ [IFLA_BR_HELLO_TIMER] = XLAT(IFLA_BR_HELLO_TIMER),
+ [IFLA_BR_TCN_TIMER] = XLAT(IFLA_BR_TCN_TIMER),
+ [IFLA_BR_TOPOLOGY_CHANGE_TIMER] = XLAT(IFLA_BR_TOPOLOGY_CHANGE_TIMER),
+ [IFLA_BR_GC_TIMER] = XLAT(IFLA_BR_GC_TIMER),
+ [IFLA_BR_GROUP_ADDR] = XLAT(IFLA_BR_GROUP_ADDR),
+ [IFLA_BR_FDB_FLUSH] = XLAT(IFLA_BR_FDB_FLUSH),
+ [IFLA_BR_MCAST_ROUTER] = XLAT(IFLA_BR_MCAST_ROUTER),
+ [IFLA_BR_MCAST_SNOOPING] = XLAT(IFLA_BR_MCAST_SNOOPING),
+ [IFLA_BR_MCAST_QUERY_USE_IFADDR] = XLAT(IFLA_BR_MCAST_QUERY_USE_IFADDR),
+ [IFLA_BR_MCAST_QUERIER] = XLAT(IFLA_BR_MCAST_QUERIER),
+ [IFLA_BR_MCAST_HASH_ELASTICITY] = XLAT(IFLA_BR_MCAST_HASH_ELASTICITY),
+ [IFLA_BR_MCAST_HASH_MAX] = XLAT(IFLA_BR_MCAST_HASH_MAX),
+ [IFLA_BR_MCAST_LAST_MEMBER_CNT] = XLAT(IFLA_BR_MCAST_LAST_MEMBER_CNT),
+ [IFLA_BR_MCAST_STARTUP_QUERY_CNT] = XLAT(IFLA_BR_MCAST_STARTUP_QUERY_CNT),
+ [IFLA_BR_MCAST_LAST_MEMBER_INTVL] = XLAT(IFLA_BR_MCAST_LAST_MEMBER_INTVL),
+ [IFLA_BR_MCAST_MEMBERSHIP_INTVL] = XLAT(IFLA_BR_MCAST_MEMBERSHIP_INTVL),
+ [IFLA_BR_MCAST_QUERIER_INTVL] = XLAT(IFLA_BR_MCAST_QUERIER_INTVL),
+ [IFLA_BR_MCAST_QUERY_INTVL] = XLAT(IFLA_BR_MCAST_QUERY_INTVL),
+ [IFLA_BR_MCAST_QUERY_RESPONSE_INTVL] = XLAT(IFLA_BR_MCAST_QUERY_RESPONSE_INTVL),
+ [IFLA_BR_MCAST_STARTUP_QUERY_INTVL] = XLAT(IFLA_BR_MCAST_STARTUP_QUERY_INTVL),
+ [IFLA_BR_NF_CALL_IPTABLES] = XLAT(IFLA_BR_NF_CALL_IPTABLES),
+ [IFLA_BR_NF_CALL_IP6TABLES] = XLAT(IFLA_BR_NF_CALL_IP6TABLES),
+ [IFLA_BR_NF_CALL_ARPTABLES] = XLAT(IFLA_BR_NF_CALL_ARPTABLES),
+ [IFLA_BR_VLAN_DEFAULT_PVID] = XLAT(IFLA_BR_VLAN_DEFAULT_PVID),
+ [IFLA_BR_PAD] = XLAT(IFLA_BR_PAD),
+ [IFLA_BR_VLAN_STATS_ENABLED] = XLAT(IFLA_BR_VLAN_STATS_ENABLED),
+ [IFLA_BR_MCAST_STATS_ENABLED] = XLAT(IFLA_BR_MCAST_STATS_ENABLED),
+ [IFLA_BR_MCAST_IGMP_VERSION] = XLAT(IFLA_BR_MCAST_IGMP_VERSION),
+ [IFLA_BR_MCAST_MLD_VERSION] = XLAT(IFLA_BR_MCAST_MLD_VERSION),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_info_data_bridge_attrs.in b/xlat/rtnl_ifla_info_data_bridge_attrs.in
new file mode 100644
index 0000000..524dc8b
--- /dev/null
+++ b/xlat/rtnl_ifla_info_data_bridge_attrs.in
@@ -0,0 +1,46 @@
+#value_indexed
+IFLA_BR_UNSPEC				0
+IFLA_BR_FORWARD_DELAY			1
+IFLA_BR_HELLO_TIME			2
+IFLA_BR_MAX_AGE				3
+IFLA_BR_AGEING_TIME			4
+IFLA_BR_STP_STATE			5
+IFLA_BR_PRIORITY			6
+IFLA_BR_VLAN_FILTERING			7
+IFLA_BR_VLAN_PROTOCOL			8
+IFLA_BR_GROUP_FWD_MASK			9
+IFLA_BR_ROOT_ID				10
+IFLA_BR_BRIDGE_ID			11
+IFLA_BR_ROOT_PORT			12
+IFLA_BR_ROOT_PATH_COST			13
+IFLA_BR_TOPOLOGY_CHANGE			14
+IFLA_BR_TOPOLOGY_CHANGE_DETECTED	15
+IFLA_BR_HELLO_TIMER			16
+IFLA_BR_TCN_TIMER			17
+IFLA_BR_TOPOLOGY_CHANGE_TIMER		18
+IFLA_BR_GC_TIMER			19
+IFLA_BR_GROUP_ADDR			20
+IFLA_BR_FDB_FLUSH			21
+IFLA_BR_MCAST_ROUTER			22
+IFLA_BR_MCAST_SNOOPING			23
+IFLA_BR_MCAST_QUERY_USE_IFADDR		24
+IFLA_BR_MCAST_QUERIER			25
+IFLA_BR_MCAST_HASH_ELASTICITY		26
+IFLA_BR_MCAST_HASH_MAX			27
+IFLA_BR_MCAST_LAST_MEMBER_CNT		28
+IFLA_BR_MCAST_STARTUP_QUERY_CNT		29
+IFLA_BR_MCAST_LAST_MEMBER_INTVL		30
+IFLA_BR_MCAST_MEMBERSHIP_INTVL		31
+IFLA_BR_MCAST_QUERIER_INTVL		32
+IFLA_BR_MCAST_QUERY_INTVL		33
+IFLA_BR_MCAST_QUERY_RESPONSE_INTVL	34
+IFLA_BR_MCAST_STARTUP_QUERY_INTVL	35
+IFLA_BR_NF_CALL_IPTABLES		36
+IFLA_BR_NF_CALL_IP6TABLES		37
+IFLA_BR_NF_CALL_ARPTABLES		38
+IFLA_BR_VLAN_DEFAULT_PVID		39
+IFLA_BR_PAD				40
+IFLA_BR_VLAN_STATS_ENABLED		41
+IFLA_BR_MCAST_STATS_ENABLED		42
+IFLA_BR_MCAST_IGMP_VERSION		43
+IFLA_BR_MCAST_MLD_VERSION		44
diff --git a/xlat/rtnl_ifla_info_data_tun_attrs.h b/xlat/rtnl_ifla_info_data_tun_attrs.h
new file mode 100644
index 0000000..ee9ad58
--- /dev/null
+++ b/xlat/rtnl_ifla_info_data_tun_attrs.h
@@ -0,0 +1,102 @@
+/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_info_data_tun_attrs.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_TUN_UNSPEC) || (defined(HAVE_DECL_IFLA_TUN_UNSPEC) && HAVE_DECL_IFLA_TUN_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_UNSPEC) == (0), "IFLA_TUN_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_UNSPEC 0
+#endif
+#if defined(IFLA_TUN_OWNER) || (defined(HAVE_DECL_IFLA_TUN_OWNER) && HAVE_DECL_IFLA_TUN_OWNER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_OWNER) == (1), "IFLA_TUN_OWNER != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_OWNER 1
+#endif
+#if defined(IFLA_TUN_GROUP) || (defined(HAVE_DECL_IFLA_TUN_GROUP) && HAVE_DECL_IFLA_TUN_GROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_GROUP) == (2), "IFLA_TUN_GROUP != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_GROUP 2
+#endif
+#if defined(IFLA_TUN_TYPE) || (defined(HAVE_DECL_IFLA_TUN_TYPE) && HAVE_DECL_IFLA_TUN_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_TYPE) == (3), "IFLA_TUN_TYPE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_TYPE 3
+#endif
+#if defined(IFLA_TUN_PI) || (defined(HAVE_DECL_IFLA_TUN_PI) && HAVE_DECL_IFLA_TUN_PI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_PI) == (4), "IFLA_TUN_PI != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_PI 4
+#endif
+#if defined(IFLA_TUN_VNET_HDR) || (defined(HAVE_DECL_IFLA_TUN_VNET_HDR) && HAVE_DECL_IFLA_TUN_VNET_HDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_VNET_HDR) == (5), "IFLA_TUN_VNET_HDR != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_VNET_HDR 5
+#endif
+#if defined(IFLA_TUN_PERSIST) || (defined(HAVE_DECL_IFLA_TUN_PERSIST) && HAVE_DECL_IFLA_TUN_PERSIST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_PERSIST) == (6), "IFLA_TUN_PERSIST != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_PERSIST 6
+#endif
+#if defined(IFLA_TUN_MULTI_QUEUE) || (defined(HAVE_DECL_IFLA_TUN_MULTI_QUEUE) && HAVE_DECL_IFLA_TUN_MULTI_QUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_MULTI_QUEUE) == (7), "IFLA_TUN_MULTI_QUEUE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_MULTI_QUEUE 7
+#endif
+#if defined(IFLA_TUN_NUM_QUEUES) || (defined(HAVE_DECL_IFLA_TUN_NUM_QUEUES) && HAVE_DECL_IFLA_TUN_NUM_QUEUES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_NUM_QUEUES) == (8), "IFLA_TUN_NUM_QUEUES != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_NUM_QUEUES 8
+#endif
+#if defined(IFLA_TUN_NUM_DISABLED_QUEUES) || (defined(HAVE_DECL_IFLA_TUN_NUM_DISABLED_QUEUES) && HAVE_DECL_IFLA_TUN_NUM_DISABLED_QUEUES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TUN_NUM_DISABLED_QUEUES) == (9), "IFLA_TUN_NUM_DISABLED_QUEUES != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFLA_TUN_NUM_DISABLED_QUEUES 9
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat rtnl_ifla_info_data_tun_attrs in mpers mode
+
+# else
+
+static
+const struct xlat rtnl_ifla_info_data_tun_attrs[] = {
+ [IFLA_TUN_UNSPEC] = XLAT(IFLA_TUN_UNSPEC),
+ [IFLA_TUN_OWNER] = XLAT(IFLA_TUN_OWNER),
+ [IFLA_TUN_GROUP] = XLAT(IFLA_TUN_GROUP),
+ [IFLA_TUN_TYPE] = XLAT(IFLA_TUN_TYPE),
+ [IFLA_TUN_PI] = XLAT(IFLA_TUN_PI),
+ [IFLA_TUN_VNET_HDR] = XLAT(IFLA_TUN_VNET_HDR),
+ [IFLA_TUN_PERSIST] = XLAT(IFLA_TUN_PERSIST),
+ [IFLA_TUN_MULTI_QUEUE] = XLAT(IFLA_TUN_MULTI_QUEUE),
+ [IFLA_TUN_NUM_QUEUES] = XLAT(IFLA_TUN_NUM_QUEUES),
+ [IFLA_TUN_NUM_DISABLED_QUEUES] = XLAT(IFLA_TUN_NUM_DISABLED_QUEUES),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_info_data_tun_attrs.in b/xlat/rtnl_ifla_info_data_tun_attrs.in
new file mode 100644
index 0000000..2ac187e
--- /dev/null
+++ b/xlat/rtnl_ifla_info_data_tun_attrs.in
@@ -0,0 +1,11 @@
+#value_indexed
+IFLA_TUN_UNSPEC			0
+IFLA_TUN_OWNER			1
+IFLA_TUN_GROUP			2
+IFLA_TUN_TYPE			3
+IFLA_TUN_PI			4
+IFLA_TUN_VNET_HDR		5
+IFLA_TUN_PERSIST		6
+IFLA_TUN_MULTI_QUEUE		7
+IFLA_TUN_NUM_QUEUES		8
+IFLA_TUN_NUM_DISABLED_QUEUES	9
diff --git a/xlat/rtnl_ifla_port_attrs.h b/xlat/rtnl_ifla_port_attrs.h
index 88cf635..ce6af73 100644
--- a/xlat/rtnl_ifla_port_attrs.h
+++ b/xlat/rtnl_ifla_port_attrs.h
@@ -1,34 +1,72 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_PORT_UNSPEC) || (defined(HAVE_DECL_IFLA_PORT_UNSPEC) && HAVE_DECL_IFLA_PORT_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PORT_UNSPEC) == (0), "IFLA_PORT_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PORT_UNSPEC 0
 #endif
-#if !(defined(IFLA_PORT_VF) || (defined(HAVE_DECL_IFLA_PORT_VF) && HAVE_DECL_IFLA_PORT_VF))
+#if defined(IFLA_PORT_VF) || (defined(HAVE_DECL_IFLA_PORT_VF) && HAVE_DECL_IFLA_PORT_VF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PORT_VF) == (1), "IFLA_PORT_VF != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PORT_VF 1
 #endif
-#if !(defined(IFLA_PORT_PROFILE) || (defined(HAVE_DECL_IFLA_PORT_PROFILE) && HAVE_DECL_IFLA_PORT_PROFILE))
+#if defined(IFLA_PORT_PROFILE) || (defined(HAVE_DECL_IFLA_PORT_PROFILE) && HAVE_DECL_IFLA_PORT_PROFILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PORT_PROFILE) == (2), "IFLA_PORT_PROFILE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_PORT_VSI_TYPE) || (defined(HAVE_DECL_IFLA_PORT_VSI_TYPE) && HAVE_DECL_IFLA_PORT_VSI_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PORT_VSI_TYPE) == (3), "IFLA_PORT_VSI_TYPE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_PORT_INSTANCE_UUID) || (defined(HAVE_DECL_IFLA_PORT_INSTANCE_UUID) && HAVE_DECL_IFLA_PORT_INSTANCE_UUID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PORT_INSTANCE_UUID) == (4), "IFLA_PORT_INSTANCE_UUID != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_PORT_HOST_UUID) || (defined(HAVE_DECL_IFLA_PORT_HOST_UUID) && HAVE_DECL_IFLA_PORT_HOST_UUID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PORT_HOST_UUID) == (5), "IFLA_PORT_HOST_UUID != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PORT_HOST_UUID 5
 #endif
-#if !(defined(IFLA_PORT_REQUEST) || (defined(HAVE_DECL_IFLA_PORT_REQUEST) && HAVE_DECL_IFLA_PORT_REQUEST))
+#if defined(IFLA_PORT_REQUEST) || (defined(HAVE_DECL_IFLA_PORT_REQUEST) && HAVE_DECL_IFLA_PORT_REQUEST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PORT_REQUEST) == (6), "IFLA_PORT_REQUEST != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PORT_REQUEST 6
 #endif
-#if !(defined(IFLA_PORT_RESPONSE) || (defined(HAVE_DECL_IFLA_PORT_RESPONSE) && HAVE_DECL_IFLA_PORT_RESPONSE))
+#if defined(IFLA_PORT_RESPONSE) || (defined(HAVE_DECL_IFLA_PORT_RESPONSE) && HAVE_DECL_IFLA_PORT_RESPONSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PORT_RESPONSE) == (7), "IFLA_PORT_RESPONSE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PORT_RESPONSE 7
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_ifla_port_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_ifla_port_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_ifla_port_attrs[] = {
@@ -43,4 +81,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_vf_port_attrs.h b/xlat/rtnl_ifla_vf_port_attrs.h
index c4b9b42..6227bc3 100644
--- a/xlat/rtnl_ifla_vf_port_attrs.h
+++ b/xlat/rtnl_ifla_vf_port_attrs.h
@@ -1,16 +1,30 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_VF_PORT_UNSPEC) || (defined(HAVE_DECL_IFLA_VF_PORT_UNSPEC) && HAVE_DECL_IFLA_VF_PORT_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_VF_PORT_UNSPEC) == (0), "IFLA_VF_PORT_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_VF_PORT_UNSPEC 0
 #endif
-#if !(defined(IFLA_VF_PORT) || (defined(HAVE_DECL_IFLA_VF_PORT) && HAVE_DECL_IFLA_VF_PORT))
+#if defined(IFLA_VF_PORT) || (defined(HAVE_DECL_IFLA_VF_PORT) && HAVE_DECL_IFLA_VF_PORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_VF_PORT) == (1), "IFLA_VF_PORT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_VF_PORT 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_ifla_vf_port_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_ifla_vf_port_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_ifla_vf_port_attrs[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_ifla_xdp_attrs.h b/xlat/rtnl_ifla_xdp_attrs.h
index 708f8ea..3972d8e 100644
--- a/xlat/rtnl_ifla_xdp_attrs.h
+++ b/xlat/rtnl_ifla_xdp_attrs.h
@@ -1,25 +1,51 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_XDP_UNSPEC) || (defined(HAVE_DECL_IFLA_XDP_UNSPEC) && HAVE_DECL_IFLA_XDP_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_XDP_UNSPEC) == (0), "IFLA_XDP_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_XDP_UNSPEC 0
 #endif
-#if !(defined(IFLA_XDP_FD) || (defined(HAVE_DECL_IFLA_XDP_FD) && HAVE_DECL_IFLA_XDP_FD))
+#if defined(IFLA_XDP_FD) || (defined(HAVE_DECL_IFLA_XDP_FD) && HAVE_DECL_IFLA_XDP_FD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_XDP_FD) == (1), "IFLA_XDP_FD != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_XDP_FD 1
 #endif
-#if !(defined(IFLA_XDP_ATTACHED) || (defined(HAVE_DECL_IFLA_XDP_ATTACHED) && HAVE_DECL_IFLA_XDP_ATTACHED))
+#if defined(IFLA_XDP_ATTACHED) || (defined(HAVE_DECL_IFLA_XDP_ATTACHED) && HAVE_DECL_IFLA_XDP_ATTACHED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_XDP_ATTACHED) == (2), "IFLA_XDP_ATTACHED != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_XDP_ATTACHED 2
 #endif
-#if !(defined(IFLA_XDP_FLAGS) || (defined(HAVE_DECL_IFLA_XDP_FLAGS) && HAVE_DECL_IFLA_XDP_FLAGS))
+#if defined(IFLA_XDP_FLAGS) || (defined(HAVE_DECL_IFLA_XDP_FLAGS) && HAVE_DECL_IFLA_XDP_FLAGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_XDP_FLAGS) == (3), "IFLA_XDP_FLAGS != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_XDP_PROG_ID) || (defined(HAVE_DECL_IFLA_XDP_PROG_ID) && HAVE_DECL_IFLA_XDP_PROG_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_XDP_PROG_ID) == (4), "IFLA_XDP_PROG_ID != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_XDP_PROG_ID 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_ifla_xdp_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_ifla_xdp_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_ifla_xdp_attrs[] = {
@@ -31,4 +57,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_link_attrs.h b/xlat/rtnl_link_attrs.h
index e212eaf..2ce3ee4 100644
--- a/xlat/rtnl_link_attrs.h
+++ b/xlat/rtnl_link_attrs.h
@@ -1,160 +1,366 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFLA_UNSPEC) || (defined(HAVE_DECL_IFLA_UNSPEC) && HAVE_DECL_IFLA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_UNSPEC) == (0), "IFLA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_UNSPEC 0
 #endif
-#if !(defined(IFLA_ADDRESS) || (defined(HAVE_DECL_IFLA_ADDRESS) && HAVE_DECL_IFLA_ADDRESS))
+#if defined(IFLA_ADDRESS) || (defined(HAVE_DECL_IFLA_ADDRESS) && HAVE_DECL_IFLA_ADDRESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_ADDRESS) == (1), "IFLA_ADDRESS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_ADDRESS 1
 #endif
-#if !(defined(IFLA_BROADCAST) || (defined(HAVE_DECL_IFLA_BROADCAST) && HAVE_DECL_IFLA_BROADCAST))
+#if defined(IFLA_BROADCAST) || (defined(HAVE_DECL_IFLA_BROADCAST) && HAVE_DECL_IFLA_BROADCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_BROADCAST) == (2), "IFLA_BROADCAST != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_BROADCAST 2
 #endif
-#if !(defined(IFLA_IFNAME) || (defined(HAVE_DECL_IFLA_IFNAME) && HAVE_DECL_IFLA_IFNAME))
+#if defined(IFLA_IFNAME) || (defined(HAVE_DECL_IFLA_IFNAME) && HAVE_DECL_IFLA_IFNAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_IFNAME) == (3), "IFLA_IFNAME != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_IFNAME 3
 #endif
-#if !(defined(IFLA_MTU) || (defined(HAVE_DECL_IFLA_MTU) && HAVE_DECL_IFLA_MTU))
+#if defined(IFLA_MTU) || (defined(HAVE_DECL_IFLA_MTU) && HAVE_DECL_IFLA_MTU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_MTU) == (4), "IFLA_MTU != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_MTU 4
 #endif
-#if !(defined(IFLA_LINK) || (defined(HAVE_DECL_IFLA_LINK) && HAVE_DECL_IFLA_LINK))
+#if defined(IFLA_LINK) || (defined(HAVE_DECL_IFLA_LINK) && HAVE_DECL_IFLA_LINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_LINK) == (5), "IFLA_LINK != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_LINK 5
 #endif
-#if !(defined(IFLA_QDISC) || (defined(HAVE_DECL_IFLA_QDISC) && HAVE_DECL_IFLA_QDISC))
+#if defined(IFLA_QDISC) || (defined(HAVE_DECL_IFLA_QDISC) && HAVE_DECL_IFLA_QDISC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_QDISC) == (6), "IFLA_QDISC != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_QDISC 6
 #endif
-#if !(defined(IFLA_STATS) || (defined(HAVE_DECL_IFLA_STATS) && HAVE_DECL_IFLA_STATS))
+#if defined(IFLA_STATS) || (defined(HAVE_DECL_IFLA_STATS) && HAVE_DECL_IFLA_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_STATS) == (7), "IFLA_STATS != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_STATS 7
 #endif
-#if !(defined(IFLA_COST) || (defined(HAVE_DECL_IFLA_COST) && HAVE_DECL_IFLA_COST))
+#if defined(IFLA_COST) || (defined(HAVE_DECL_IFLA_COST) && HAVE_DECL_IFLA_COST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_COST) == (8), "IFLA_COST != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_COST 8
 #endif
-#if !(defined(IFLA_PRIORITY) || (defined(HAVE_DECL_IFLA_PRIORITY) && HAVE_DECL_IFLA_PRIORITY))
+#if defined(IFLA_PRIORITY) || (defined(HAVE_DECL_IFLA_PRIORITY) && HAVE_DECL_IFLA_PRIORITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PRIORITY) == (9), "IFLA_PRIORITY != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PRIORITY 9
 #endif
-#if !(defined(IFLA_MASTER) || (defined(HAVE_DECL_IFLA_MASTER) && HAVE_DECL_IFLA_MASTER))
+#if defined(IFLA_MASTER) || (defined(HAVE_DECL_IFLA_MASTER) && HAVE_DECL_IFLA_MASTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_MASTER) == (10), "IFLA_MASTER != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_MASTER 10
 #endif
-#if !(defined(IFLA_WIRELESS) || (defined(HAVE_DECL_IFLA_WIRELESS) && HAVE_DECL_IFLA_WIRELESS))
+#if defined(IFLA_WIRELESS) || (defined(HAVE_DECL_IFLA_WIRELESS) && HAVE_DECL_IFLA_WIRELESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_WIRELESS) == (11), "IFLA_WIRELESS != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_WIRELESS 11
 #endif
-#if !(defined(IFLA_PROTINFO) || (defined(HAVE_DECL_IFLA_PROTINFO) && HAVE_DECL_IFLA_PROTINFO))
+#if defined(IFLA_PROTINFO) || (defined(HAVE_DECL_IFLA_PROTINFO) && HAVE_DECL_IFLA_PROTINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PROTINFO) == (12), "IFLA_PROTINFO != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PROTINFO 12
 #endif
-#if !(defined(IFLA_TXQLEN) || (defined(HAVE_DECL_IFLA_TXQLEN) && HAVE_DECL_IFLA_TXQLEN))
+#if defined(IFLA_TXQLEN) || (defined(HAVE_DECL_IFLA_TXQLEN) && HAVE_DECL_IFLA_TXQLEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_TXQLEN) == (13), "IFLA_TXQLEN != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_TXQLEN 13
 #endif
-#if !(defined(IFLA_MAP) || (defined(HAVE_DECL_IFLA_MAP) && HAVE_DECL_IFLA_MAP))
+#if defined(IFLA_MAP) || (defined(HAVE_DECL_IFLA_MAP) && HAVE_DECL_IFLA_MAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_MAP) == (14), "IFLA_MAP != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_MAP 14
 #endif
-#if !(defined(IFLA_WEIGHT) || (defined(HAVE_DECL_IFLA_WEIGHT) && HAVE_DECL_IFLA_WEIGHT))
+#if defined(IFLA_WEIGHT) || (defined(HAVE_DECL_IFLA_WEIGHT) && HAVE_DECL_IFLA_WEIGHT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_WEIGHT) == (15), "IFLA_WEIGHT != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_WEIGHT 15
 #endif
-#if !(defined(IFLA_OPERSTATE) || (defined(HAVE_DECL_IFLA_OPERSTATE) && HAVE_DECL_IFLA_OPERSTATE))
+#if defined(IFLA_OPERSTATE) || (defined(HAVE_DECL_IFLA_OPERSTATE) && HAVE_DECL_IFLA_OPERSTATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_OPERSTATE) == (16), "IFLA_OPERSTATE != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_OPERSTATE 16
 #endif
-#if !(defined(IFLA_LINKMODE) || (defined(HAVE_DECL_IFLA_LINKMODE) && HAVE_DECL_IFLA_LINKMODE))
+#if defined(IFLA_LINKMODE) || (defined(HAVE_DECL_IFLA_LINKMODE) && HAVE_DECL_IFLA_LINKMODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_LINKMODE) == (17), "IFLA_LINKMODE != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_LINKMODE 17
 #endif
-#if !(defined(IFLA_LINKINFO) || (defined(HAVE_DECL_IFLA_LINKINFO) && HAVE_DECL_IFLA_LINKINFO))
+#if defined(IFLA_LINKINFO) || (defined(HAVE_DECL_IFLA_LINKINFO) && HAVE_DECL_IFLA_LINKINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_LINKINFO) == (18), "IFLA_LINKINFO != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_LINKINFO 18
 #endif
-#if !(defined(IFLA_NET_NS_PID) || (defined(HAVE_DECL_IFLA_NET_NS_PID) && HAVE_DECL_IFLA_NET_NS_PID))
+#if defined(IFLA_NET_NS_PID) || (defined(HAVE_DECL_IFLA_NET_NS_PID) && HAVE_DECL_IFLA_NET_NS_PID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_NET_NS_PID) == (19), "IFLA_NET_NS_PID != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_NET_NS_PID 19
 #endif
-#if !(defined(IFLA_IFALIAS) || (defined(HAVE_DECL_IFLA_IFALIAS) && HAVE_DECL_IFLA_IFALIAS))
+#if defined(IFLA_IFALIAS) || (defined(HAVE_DECL_IFLA_IFALIAS) && HAVE_DECL_IFLA_IFALIAS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_IFALIAS) == (20), "IFLA_IFALIAS != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_IFALIAS 20
 #endif
-#if !(defined(IFLA_NUM_VF) || (defined(HAVE_DECL_IFLA_NUM_VF) && HAVE_DECL_IFLA_NUM_VF))
+#if defined(IFLA_NUM_VF) || (defined(HAVE_DECL_IFLA_NUM_VF) && HAVE_DECL_IFLA_NUM_VF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_NUM_VF) == (21), "IFLA_NUM_VF != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_NUM_VF 21
 #endif
-#if !(defined(IFLA_VFINFO_LIST) || (defined(HAVE_DECL_IFLA_VFINFO_LIST) && HAVE_DECL_IFLA_VFINFO_LIST))
+#if defined(IFLA_VFINFO_LIST) || (defined(HAVE_DECL_IFLA_VFINFO_LIST) && HAVE_DECL_IFLA_VFINFO_LIST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_VFINFO_LIST) == (22), "IFLA_VFINFO_LIST != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_VFINFO_LIST 22
 #endif
-#if !(defined(IFLA_STATS64) || (defined(HAVE_DECL_IFLA_STATS64) && HAVE_DECL_IFLA_STATS64))
+#if defined(IFLA_STATS64) || (defined(HAVE_DECL_IFLA_STATS64) && HAVE_DECL_IFLA_STATS64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_STATS64) == (23), "IFLA_STATS64 != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_STATS64 23
 #endif
-#if !(defined(IFLA_VF_PORTS) || (defined(HAVE_DECL_IFLA_VF_PORTS) && HAVE_DECL_IFLA_VF_PORTS))
+#if defined(IFLA_VF_PORTS) || (defined(HAVE_DECL_IFLA_VF_PORTS) && HAVE_DECL_IFLA_VF_PORTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_VF_PORTS) == (24), "IFLA_VF_PORTS != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_VF_PORTS 24
 #endif
-#if !(defined(IFLA_PORT_SELF) || (defined(HAVE_DECL_IFLA_PORT_SELF) && HAVE_DECL_IFLA_PORT_SELF))
+#if defined(IFLA_PORT_SELF) || (defined(HAVE_DECL_IFLA_PORT_SELF) && HAVE_DECL_IFLA_PORT_SELF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PORT_SELF) == (25), "IFLA_PORT_SELF != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PORT_SELF 25
 #endif
-#if !(defined(IFLA_AF_SPEC) || (defined(HAVE_DECL_IFLA_AF_SPEC) && HAVE_DECL_IFLA_AF_SPEC))
+#if defined(IFLA_AF_SPEC) || (defined(HAVE_DECL_IFLA_AF_SPEC) && HAVE_DECL_IFLA_AF_SPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_AF_SPEC) == (26), "IFLA_AF_SPEC != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_AF_SPEC 26
 #endif
-#if !(defined(IFLA_GROUP) || (defined(HAVE_DECL_IFLA_GROUP) && HAVE_DECL_IFLA_GROUP))
+#if defined(IFLA_GROUP) || (defined(HAVE_DECL_IFLA_GROUP) && HAVE_DECL_IFLA_GROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_GROUP) == (27), "IFLA_GROUP != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_GROUP 27
 #endif
-#if !(defined(IFLA_NET_NS_FD) || (defined(HAVE_DECL_IFLA_NET_NS_FD) && HAVE_DECL_IFLA_NET_NS_FD))
+#if defined(IFLA_NET_NS_FD) || (defined(HAVE_DECL_IFLA_NET_NS_FD) && HAVE_DECL_IFLA_NET_NS_FD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_NET_NS_FD) == (28), "IFLA_NET_NS_FD != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_NET_NS_FD 28
 #endif
-#if !(defined(IFLA_EXT_MASK) || (defined(HAVE_DECL_IFLA_EXT_MASK) && HAVE_DECL_IFLA_EXT_MASK))
+#if defined(IFLA_EXT_MASK) || (defined(HAVE_DECL_IFLA_EXT_MASK) && HAVE_DECL_IFLA_EXT_MASK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_EXT_MASK) == (29), "IFLA_EXT_MASK != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_EXT_MASK 29
 #endif
-#if !(defined(IFLA_PROMISCUITY) || (defined(HAVE_DECL_IFLA_PROMISCUITY) && HAVE_DECL_IFLA_PROMISCUITY))
+#if defined(IFLA_PROMISCUITY) || (defined(HAVE_DECL_IFLA_PROMISCUITY) && HAVE_DECL_IFLA_PROMISCUITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PROMISCUITY) == (30), "IFLA_PROMISCUITY != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PROMISCUITY 30
 #endif
-#if !(defined(IFLA_NUM_TX_QUEUES) || (defined(HAVE_DECL_IFLA_NUM_TX_QUEUES) && HAVE_DECL_IFLA_NUM_TX_QUEUES))
+#if defined(IFLA_NUM_TX_QUEUES) || (defined(HAVE_DECL_IFLA_NUM_TX_QUEUES) && HAVE_DECL_IFLA_NUM_TX_QUEUES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_NUM_TX_QUEUES) == (31), "IFLA_NUM_TX_QUEUES != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_NUM_RX_QUEUES) || (defined(HAVE_DECL_IFLA_NUM_RX_QUEUES) && HAVE_DECL_IFLA_NUM_RX_QUEUES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_NUM_RX_QUEUES) == (32), "IFLA_NUM_RX_QUEUES != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_NUM_RX_QUEUES 32
 #endif
-#if !(defined(IFLA_CARRIER) || (defined(HAVE_DECL_IFLA_CARRIER) && HAVE_DECL_IFLA_CARRIER))
+#if defined(IFLA_CARRIER) || (defined(HAVE_DECL_IFLA_CARRIER) && HAVE_DECL_IFLA_CARRIER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_CARRIER) == (33), "IFLA_CARRIER != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_CARRIER 33
 #endif
-#if !(defined(IFLA_PHYS_PORT_ID) || (defined(HAVE_DECL_IFLA_PHYS_PORT_ID) && HAVE_DECL_IFLA_PHYS_PORT_ID))
+#if defined(IFLA_PHYS_PORT_ID) || (defined(HAVE_DECL_IFLA_PHYS_PORT_ID) && HAVE_DECL_IFLA_PHYS_PORT_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PHYS_PORT_ID) == (34), "IFLA_PHYS_PORT_ID != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PHYS_PORT_ID 34
 #endif
-#if !(defined(IFLA_CARRIER_CHANGES) || (defined(HAVE_DECL_IFLA_CARRIER_CHANGES) && HAVE_DECL_IFLA_CARRIER_CHANGES))
+#if defined(IFLA_CARRIER_CHANGES) || (defined(HAVE_DECL_IFLA_CARRIER_CHANGES) && HAVE_DECL_IFLA_CARRIER_CHANGES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_CARRIER_CHANGES) == (35), "IFLA_CARRIER_CHANGES != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_PHYS_SWITCH_ID) || (defined(HAVE_DECL_IFLA_PHYS_SWITCH_ID) && HAVE_DECL_IFLA_PHYS_SWITCH_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PHYS_SWITCH_ID) == (36), "IFLA_PHYS_SWITCH_ID != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PHYS_SWITCH_ID 36
 #endif
-#if !(defined(IFLA_LINK_NETNSID) || (defined(HAVE_DECL_IFLA_LINK_NETNSID) && HAVE_DECL_IFLA_LINK_NETNSID))
+#if defined(IFLA_LINK_NETNSID) || (defined(HAVE_DECL_IFLA_LINK_NETNSID) && HAVE_DECL_IFLA_LINK_NETNSID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_LINK_NETNSID) == (37), "IFLA_LINK_NETNSID != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_PHYS_PORT_NAME) || (defined(HAVE_DECL_IFLA_PHYS_PORT_NAME) && HAVE_DECL_IFLA_PHYS_PORT_NAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PHYS_PORT_NAME) == (38), "IFLA_PHYS_PORT_NAME != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PHYS_PORT_NAME 38
 #endif
-#if !(defined(IFLA_PROTO_DOWN) || (defined(HAVE_DECL_IFLA_PROTO_DOWN) && HAVE_DECL_IFLA_PROTO_DOWN))
+#if defined(IFLA_PROTO_DOWN) || (defined(HAVE_DECL_IFLA_PROTO_DOWN) && HAVE_DECL_IFLA_PROTO_DOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PROTO_DOWN) == (39), "IFLA_PROTO_DOWN != 39");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_GSO_MAX_SEGS) || (defined(HAVE_DECL_IFLA_GSO_MAX_SEGS) && HAVE_DECL_IFLA_GSO_MAX_SEGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_GSO_MAX_SEGS) == (40), "IFLA_GSO_MAX_SEGS != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(IFLA_GSO_MAX_SIZE) || (defined(HAVE_DECL_IFLA_GSO_MAX_SIZE) && HAVE_DECL_IFLA_GSO_MAX_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_GSO_MAX_SIZE) == (41), "IFLA_GSO_MAX_SIZE != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_GSO_MAX_SIZE 41
 #endif
-#if !(defined(IFLA_PAD) || (defined(HAVE_DECL_IFLA_PAD) && HAVE_DECL_IFLA_PAD))
+#if defined(IFLA_PAD) || (defined(HAVE_DECL_IFLA_PAD) && HAVE_DECL_IFLA_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_PAD) == (42), "IFLA_PAD != 42");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_PAD 42
 #endif
-#if !(defined(IFLA_XDP) || (defined(HAVE_DECL_IFLA_XDP) && HAVE_DECL_IFLA_XDP))
+#if defined(IFLA_XDP) || (defined(HAVE_DECL_IFLA_XDP) && HAVE_DECL_IFLA_XDP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_XDP) == (43), "IFLA_XDP != 43");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_XDP 43
 #endif
-#if !(defined(IFLA_EVENT) || (defined(HAVE_DECL_IFLA_EVENT) && HAVE_DECL_IFLA_EVENT))
+#if defined(IFLA_EVENT) || (defined(HAVE_DECL_IFLA_EVENT) && HAVE_DECL_IFLA_EVENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_EVENT) == (44), "IFLA_EVENT != 44");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_EVENT 44
 #endif
-#if !(defined(IFLA_NEW_NETNSID) || (defined(HAVE_DECL_IFLA_NEW_NETNSID) && HAVE_DECL_IFLA_NEW_NETNSID))
+#if defined(IFLA_NEW_NETNSID) || (defined(HAVE_DECL_IFLA_NEW_NETNSID) && HAVE_DECL_IFLA_NEW_NETNSID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_NEW_NETNSID) == (45), "IFLA_NEW_NETNSID != 45");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_NEW_NETNSID 45
 #endif
-#if !(defined(IFLA_IF_NETNSID) || (defined(HAVE_DECL_IFLA_IF_NETNSID) && HAVE_DECL_IFLA_IF_NETNSID))
+#if defined(IFLA_IF_NETNSID) || (defined(HAVE_DECL_IFLA_IF_NETNSID) && HAVE_DECL_IFLA_IF_NETNSID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_IF_NETNSID) == (46), "IFLA_IF_NETNSID != 46");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_IF_NETNSID 46
 #endif
-#if !(defined(IFLA_CARRIER_UP_COUNT) || (defined(HAVE_DECL_IFLA_CARRIER_UP_COUNT) && HAVE_DECL_IFLA_CARRIER_UP_COUNT))
+#if defined(IFLA_CARRIER_UP_COUNT) || (defined(HAVE_DECL_IFLA_CARRIER_UP_COUNT) && HAVE_DECL_IFLA_CARRIER_UP_COUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_CARRIER_UP_COUNT) == (47), "IFLA_CARRIER_UP_COUNT != 47");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_CARRIER_UP_COUNT 47
 #endif
-#if !(defined(IFLA_CARRIER_DOWN_COUNT) || (defined(HAVE_DECL_IFLA_CARRIER_DOWN_COUNT) && HAVE_DECL_IFLA_CARRIER_DOWN_COUNT))
+#if defined(IFLA_CARRIER_DOWN_COUNT) || (defined(HAVE_DECL_IFLA_CARRIER_DOWN_COUNT) && HAVE_DECL_IFLA_CARRIER_DOWN_COUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_CARRIER_DOWN_COUNT) == (48), "IFLA_CARRIER_DOWN_COUNT != 48");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_CARRIER_DOWN_COUNT 48
 #endif
-#if !(defined(IFLA_NEW_IFINDEX) || (defined(HAVE_DECL_IFLA_NEW_IFINDEX) && HAVE_DECL_IFLA_NEW_IFINDEX))
+#if defined(IFLA_NEW_IFINDEX) || (defined(HAVE_DECL_IFLA_NEW_IFINDEX) && HAVE_DECL_IFLA_NEW_IFINDEX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFLA_NEW_IFINDEX) == (49), "IFLA_NEW_IFINDEX != 49");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define IFLA_NEW_IFINDEX 49
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_link_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_link_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_link_attrs[] = {
@@ -211,4 +417,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_mdb_attrs.h b/xlat/rtnl_mdb_attrs.h
index 6b56dee..8dc0308 100644
--- a/xlat/rtnl_mdb_attrs.h
+++ b/xlat/rtnl_mdb_attrs.h
@@ -1,19 +1,37 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MDBA_UNSPEC) || (defined(HAVE_DECL_MDBA_UNSPEC) && HAVE_DECL_MDBA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_UNSPEC) == (0), "MDBA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_UNSPEC 0
 #endif
-#if !(defined(MDBA_MDB) || (defined(HAVE_DECL_MDBA_MDB) && HAVE_DECL_MDBA_MDB))
+#if defined(MDBA_MDB) || (defined(HAVE_DECL_MDBA_MDB) && HAVE_DECL_MDBA_MDB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_MDB) == (1), "MDBA_MDB != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_MDB 1
 #endif
-#if !(defined(MDBA_ROUTER) || (defined(HAVE_DECL_MDBA_ROUTER) && HAVE_DECL_MDBA_ROUTER))
+#if defined(MDBA_ROUTER) || (defined(HAVE_DECL_MDBA_ROUTER) && HAVE_DECL_MDBA_ROUTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_ROUTER) == (2), "MDBA_ROUTER != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_ROUTER 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_mdb_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_mdb_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_mdb_attrs[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_mdba_mdb_attrs.h b/xlat/rtnl_mdba_mdb_attrs.h
index f714dbd..ff9c4ab 100644
--- a/xlat/rtnl_mdba_mdb_attrs.h
+++ b/xlat/rtnl_mdba_mdb_attrs.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rtnl_mdba_mdb_attrs.in; do not edit. */
-#if !(defined(MDBA_MDB_UNSPEC) || (defined(HAVE_DECL_MDBA_MDB_UNSPEC) && HAVE_DECL_MDBA_MDB_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MDBA_MDB_UNSPEC) || (defined(HAVE_DECL_MDBA_MDB_UNSPEC) && HAVE_DECL_MDBA_MDB_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_MDB_UNSPEC) == (0), "MDBA_MDB_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_MDB_UNSPEC 0
 #endif
-#if !(defined(MDBA_MDB_ENTRY) || (defined(HAVE_DECL_MDBA_MDB_ENTRY) && HAVE_DECL_MDBA_MDB_ENTRY))
+#if defined(MDBA_MDB_ENTRY) || (defined(HAVE_DECL_MDBA_MDB_ENTRY) && HAVE_DECL_MDBA_MDB_ENTRY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_MDB_ENTRY) == (1), "MDBA_MDB_ENTRY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_MDB_ENTRY 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_mdba_mdb_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_mdba_mdb_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_mdba_mdb_attrs[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_mdba_mdb_eattr_attrs.h b/xlat/rtnl_mdba_mdb_eattr_attrs.h
index ce3b3bc..47aa3bd 100644
--- a/xlat/rtnl_mdba_mdb_eattr_attrs.h
+++ b/xlat/rtnl_mdba_mdb_eattr_attrs.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rtnl_mdba_mdb_eattr_attrs.in; do not edit. */
-#if !(defined(MDBA_MDB_EATTR_UNSPEC) || (defined(HAVE_DECL_MDBA_MDB_EATTR_UNSPEC) && HAVE_DECL_MDBA_MDB_EATTR_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MDBA_MDB_EATTR_UNSPEC) || (defined(HAVE_DECL_MDBA_MDB_EATTR_UNSPEC) && HAVE_DECL_MDBA_MDB_EATTR_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_MDB_EATTR_UNSPEC) == (0), "MDBA_MDB_EATTR_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_MDB_EATTR_UNSPEC 0
 #endif
-#if !(defined(MDBA_MDB_EATTR_TIMER) || (defined(HAVE_DECL_MDBA_MDB_EATTR_TIMER) && HAVE_DECL_MDBA_MDB_EATTR_TIMER))
+#if defined(MDBA_MDB_EATTR_TIMER) || (defined(HAVE_DECL_MDBA_MDB_EATTR_TIMER) && HAVE_DECL_MDBA_MDB_EATTR_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_MDB_EATTR_TIMER) == (1), "MDBA_MDB_EATTR_TIMER != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_MDB_EATTR_TIMER 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_mdba_mdb_eattr_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_mdba_mdb_eattr_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_mdba_mdb_eattr_attrs[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_mdba_mdb_entry_attrs.h b/xlat/rtnl_mdba_mdb_entry_attrs.h
index 198374a..8c38518 100644
--- a/xlat/rtnl_mdba_mdb_entry_attrs.h
+++ b/xlat/rtnl_mdba_mdb_entry_attrs.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rtnl_mdba_mdb_entry_attrs.in; do not edit. */
-#if !(defined(MDBA_MDB_ENTRY_UNSPEC) || (defined(HAVE_DECL_MDBA_MDB_ENTRY_UNSPEC) && HAVE_DECL_MDBA_MDB_ENTRY_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MDBA_MDB_ENTRY_UNSPEC) || (defined(HAVE_DECL_MDBA_MDB_ENTRY_UNSPEC) && HAVE_DECL_MDBA_MDB_ENTRY_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_MDB_ENTRY_UNSPEC) == (0), "MDBA_MDB_ENTRY_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_MDB_ENTRY_UNSPEC 0
 #endif
-#if !(defined(MDBA_MDB_ENTRY_INFO) || (defined(HAVE_DECL_MDBA_MDB_ENTRY_INFO) && HAVE_DECL_MDBA_MDB_ENTRY_INFO))
+#if defined(MDBA_MDB_ENTRY_INFO) || (defined(HAVE_DECL_MDBA_MDB_ENTRY_INFO) && HAVE_DECL_MDBA_MDB_ENTRY_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_MDB_ENTRY_INFO) == (1), "MDBA_MDB_ENTRY_INFO != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_MDB_ENTRY_INFO 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_mdba_mdb_entry_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_mdba_mdb_entry_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_mdba_mdb_entry_attrs[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_mdba_router_attrs.h b/xlat/rtnl_mdba_router_attrs.h
index 2efe5e3..cd50e54 100644
--- a/xlat/rtnl_mdba_router_attrs.h
+++ b/xlat/rtnl_mdba_router_attrs.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rtnl_mdba_router_attrs.in; do not edit. */
-#if !(defined(MDBA_ROUTER_UNSPEC) || (defined(HAVE_DECL_MDBA_ROUTER_UNSPEC) && HAVE_DECL_MDBA_ROUTER_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MDBA_ROUTER_UNSPEC) || (defined(HAVE_DECL_MDBA_ROUTER_UNSPEC) && HAVE_DECL_MDBA_ROUTER_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_ROUTER_UNSPEC) == (0), "MDBA_ROUTER_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_ROUTER_UNSPEC 0
 #endif
-#if !(defined(MDBA_ROUTER_PORT) || (defined(HAVE_DECL_MDBA_ROUTER_PORT) && HAVE_DECL_MDBA_ROUTER_PORT))
+#if defined(MDBA_ROUTER_PORT) || (defined(HAVE_DECL_MDBA_ROUTER_PORT) && HAVE_DECL_MDBA_ROUTER_PORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_ROUTER_PORT) == (1), "MDBA_ROUTER_PORT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_ROUTER_PORT 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_mdba_router_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_mdba_router_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_mdba_router_attrs[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_mdba_router_pattr_attrs.h b/xlat/rtnl_mdba_router_pattr_attrs.h
index b364d31..7081d57 100644
--- a/xlat/rtnl_mdba_router_pattr_attrs.h
+++ b/xlat/rtnl_mdba_router_pattr_attrs.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rtnl_mdba_router_pattr_attrs.in; do not edit. */
-#if !(defined(MDBA_ROUTER_PATTR_UNSPEC) || (defined(HAVE_DECL_MDBA_ROUTER_PATTR_UNSPEC) && HAVE_DECL_MDBA_ROUTER_PATTR_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MDBA_ROUTER_PATTR_UNSPEC) || (defined(HAVE_DECL_MDBA_ROUTER_PATTR_UNSPEC) && HAVE_DECL_MDBA_ROUTER_PATTR_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_ROUTER_PATTR_UNSPEC) == (0), "MDBA_ROUTER_PATTR_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_ROUTER_PATTR_UNSPEC 0
 #endif
-#if !(defined(MDBA_ROUTER_PATTR_TIMER) || (defined(HAVE_DECL_MDBA_ROUTER_PATTR_TIMER) && HAVE_DECL_MDBA_ROUTER_PATTR_TIMER))
+#if defined(MDBA_ROUTER_PATTR_TIMER) || (defined(HAVE_DECL_MDBA_ROUTER_PATTR_TIMER) && HAVE_DECL_MDBA_ROUTER_PATTR_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_ROUTER_PATTR_TIMER) == (1), "MDBA_ROUTER_PATTR_TIMER != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_ROUTER_PATTR_TIMER 1
 #endif
-#if !(defined(MDBA_ROUTER_PATTR_TYPE) || (defined(HAVE_DECL_MDBA_ROUTER_PATTR_TYPE) && HAVE_DECL_MDBA_ROUTER_PATTR_TYPE))
+#if defined(MDBA_ROUTER_PATTR_TYPE) || (defined(HAVE_DECL_MDBA_ROUTER_PATTR_TYPE) && HAVE_DECL_MDBA_ROUTER_PATTR_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MDBA_ROUTER_PATTR_TYPE) == (2), "MDBA_ROUTER_PATTR_TYPE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MDBA_ROUTER_PATTR_TYPE 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_mdba_router_pattr_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_mdba_router_pattr_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_mdba_router_pattr_attrs[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_neigh_attrs.h b/xlat/rtnl_neigh_attrs.h
index 492ea42..e1287fe 100644
--- a/xlat/rtnl_neigh_attrs.h
+++ b/xlat/rtnl_neigh_attrs.h
@@ -1,46 +1,100 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NDA_UNSPEC) || (defined(HAVE_DECL_NDA_UNSPEC) && HAVE_DECL_NDA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_UNSPEC) == (0), "NDA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_UNSPEC 0
 #endif
-#if !(defined(NDA_DST) || (defined(HAVE_DECL_NDA_DST) && HAVE_DECL_NDA_DST))
+#if defined(NDA_DST) || (defined(HAVE_DECL_NDA_DST) && HAVE_DECL_NDA_DST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_DST) == (1), "NDA_DST != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_DST 1
 #endif
-#if !(defined(NDA_LLADDR) || (defined(HAVE_DECL_NDA_LLADDR) && HAVE_DECL_NDA_LLADDR))
+#if defined(NDA_LLADDR) || (defined(HAVE_DECL_NDA_LLADDR) && HAVE_DECL_NDA_LLADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_LLADDR) == (2), "NDA_LLADDR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_LLADDR 2
 #endif
-#if !(defined(NDA_CACHEINFO) || (defined(HAVE_DECL_NDA_CACHEINFO) && HAVE_DECL_NDA_CACHEINFO))
+#if defined(NDA_CACHEINFO) || (defined(HAVE_DECL_NDA_CACHEINFO) && HAVE_DECL_NDA_CACHEINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_CACHEINFO) == (3), "NDA_CACHEINFO != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_CACHEINFO 3
 #endif
-#if !(defined(NDA_PROBES) || (defined(HAVE_DECL_NDA_PROBES) && HAVE_DECL_NDA_PROBES))
+#if defined(NDA_PROBES) || (defined(HAVE_DECL_NDA_PROBES) && HAVE_DECL_NDA_PROBES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_PROBES) == (4), "NDA_PROBES != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_PROBES 4
 #endif
-#if !(defined(NDA_VLAN) || (defined(HAVE_DECL_NDA_VLAN) && HAVE_DECL_NDA_VLAN))
+#if defined(NDA_VLAN) || (defined(HAVE_DECL_NDA_VLAN) && HAVE_DECL_NDA_VLAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_VLAN) == (5), "NDA_VLAN != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_VLAN 5
 #endif
-#if !(defined(NDA_PORT) || (defined(HAVE_DECL_NDA_PORT) && HAVE_DECL_NDA_PORT))
+#if defined(NDA_PORT) || (defined(HAVE_DECL_NDA_PORT) && HAVE_DECL_NDA_PORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_PORT) == (6), "NDA_PORT != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_PORT 6
 #endif
-#if !(defined(NDA_VNI) || (defined(HAVE_DECL_NDA_VNI) && HAVE_DECL_NDA_VNI))
+#if defined(NDA_VNI) || (defined(HAVE_DECL_NDA_VNI) && HAVE_DECL_NDA_VNI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_VNI) == (7), "NDA_VNI != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_VNI 7
 #endif
-#if !(defined(NDA_IFINDEX) || (defined(HAVE_DECL_NDA_IFINDEX) && HAVE_DECL_NDA_IFINDEX))
+#if defined(NDA_IFINDEX) || (defined(HAVE_DECL_NDA_IFINDEX) && HAVE_DECL_NDA_IFINDEX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_IFINDEX) == (8), "NDA_IFINDEX != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_IFINDEX 8
 #endif
-#if !(defined(NDA_MASTER) || (defined(HAVE_DECL_NDA_MASTER) && HAVE_DECL_NDA_MASTER))
+#if defined(NDA_MASTER) || (defined(HAVE_DECL_NDA_MASTER) && HAVE_DECL_NDA_MASTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_MASTER) == (9), "NDA_MASTER != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_MASTER 9
 #endif
-#if !(defined(NDA_LINK_NETNSID) || (defined(HAVE_DECL_NDA_LINK_NETNSID) && HAVE_DECL_NDA_LINK_NETNSID))
+#if defined(NDA_LINK_NETNSID) || (defined(HAVE_DECL_NDA_LINK_NETNSID) && HAVE_DECL_NDA_LINK_NETNSID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_LINK_NETNSID) == (10), "NDA_LINK_NETNSID != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_LINK_NETNSID 10
 #endif
-#if !(defined(NDA_SRC_VNI) || (defined(HAVE_DECL_NDA_SRC_VNI) && HAVE_DECL_NDA_SRC_VNI))
+#if defined(NDA_SRC_VNI) || (defined(HAVE_DECL_NDA_SRC_VNI) && HAVE_DECL_NDA_SRC_VNI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDA_SRC_VNI) == (11), "NDA_SRC_VNI != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDA_SRC_VNI 11
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_neigh_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_neigh_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_neigh_attrs[] = {
@@ -59,4 +113,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_neightbl_attrs.h b/xlat/rtnl_neightbl_attrs.h
index 748d8b7..8768bab 100644
--- a/xlat/rtnl_neightbl_attrs.h
+++ b/xlat/rtnl_neightbl_attrs.h
@@ -1,40 +1,86 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NDTA_UNSPEC) || (defined(HAVE_DECL_NDTA_UNSPEC) && HAVE_DECL_NDTA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_UNSPEC) == (0), "NDTA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_UNSPEC 0
 #endif
-#if !(defined(NDTA_NAME) || (defined(HAVE_DECL_NDTA_NAME) && HAVE_DECL_NDTA_NAME))
+#if defined(NDTA_NAME) || (defined(HAVE_DECL_NDTA_NAME) && HAVE_DECL_NDTA_NAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_NAME) == (1), "NDTA_NAME != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_NAME 1
 #endif
-#if !(defined(NDTA_THRESH1) || (defined(HAVE_DECL_NDTA_THRESH1) && HAVE_DECL_NDTA_THRESH1))
+#if defined(NDTA_THRESH1) || (defined(HAVE_DECL_NDTA_THRESH1) && HAVE_DECL_NDTA_THRESH1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_THRESH1) == (2), "NDTA_THRESH1 != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_THRESH1 2
 #endif
-#if !(defined(NDTA_THRESH2) || (defined(HAVE_DECL_NDTA_THRESH2) && HAVE_DECL_NDTA_THRESH2))
+#if defined(NDTA_THRESH2) || (defined(HAVE_DECL_NDTA_THRESH2) && HAVE_DECL_NDTA_THRESH2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_THRESH2) == (3), "NDTA_THRESH2 != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_THRESH2 3
 #endif
-#if !(defined(NDTA_THRESH3) || (defined(HAVE_DECL_NDTA_THRESH3) && HAVE_DECL_NDTA_THRESH3))
+#if defined(NDTA_THRESH3) || (defined(HAVE_DECL_NDTA_THRESH3) && HAVE_DECL_NDTA_THRESH3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_THRESH3) == (4), "NDTA_THRESH3 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_THRESH3 4
 #endif
-#if !(defined(NDTA_CONFIG) || (defined(HAVE_DECL_NDTA_CONFIG) && HAVE_DECL_NDTA_CONFIG))
+#if defined(NDTA_CONFIG) || (defined(HAVE_DECL_NDTA_CONFIG) && HAVE_DECL_NDTA_CONFIG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_CONFIG) == (5), "NDTA_CONFIG != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_CONFIG 5
 #endif
-#if !(defined(NDTA_PARMS) || (defined(HAVE_DECL_NDTA_PARMS) && HAVE_DECL_NDTA_PARMS))
+#if defined(NDTA_PARMS) || (defined(HAVE_DECL_NDTA_PARMS) && HAVE_DECL_NDTA_PARMS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_PARMS) == (6), "NDTA_PARMS != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_PARMS 6
 #endif
-#if !(defined(NDTA_STATS) || (defined(HAVE_DECL_NDTA_STATS) && HAVE_DECL_NDTA_STATS))
+#if defined(NDTA_STATS) || (defined(HAVE_DECL_NDTA_STATS) && HAVE_DECL_NDTA_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_STATS) == (7), "NDTA_STATS != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_STATS 7
 #endif
-#if !(defined(NDTA_GC_INTERVAL) || (defined(HAVE_DECL_NDTA_GC_INTERVAL) && HAVE_DECL_NDTA_GC_INTERVAL))
+#if defined(NDTA_GC_INTERVAL) || (defined(HAVE_DECL_NDTA_GC_INTERVAL) && HAVE_DECL_NDTA_GC_INTERVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_GC_INTERVAL) == (8), "NDTA_GC_INTERVAL != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_GC_INTERVAL 8
 #endif
-#if !(defined(NDTA_PAD) || (defined(HAVE_DECL_NDTA_PAD) && HAVE_DECL_NDTA_PAD))
+#if defined(NDTA_PAD) || (defined(HAVE_DECL_NDTA_PAD) && HAVE_DECL_NDTA_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTA_PAD) == (9), "NDTA_PAD != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTA_PAD 9
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_neightbl_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_neightbl_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_neightbl_attrs[] = {
@@ -51,4 +97,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_neightbl_parms_attrs.h b/xlat/rtnl_neightbl_parms_attrs.h
index f86166e..75bbdec 100644
--- a/xlat/rtnl_neightbl_parms_attrs.h
+++ b/xlat/rtnl_neightbl_parms_attrs.h
@@ -1,67 +1,149 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NDTPA_UNSPEC) || (defined(HAVE_DECL_NDTPA_UNSPEC) && HAVE_DECL_NDTPA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_UNSPEC) == (0), "NDTPA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_UNSPEC 0
 #endif
-#if !(defined(NDTPA_IFINDEX) || (defined(HAVE_DECL_NDTPA_IFINDEX) && HAVE_DECL_NDTPA_IFINDEX))
+#if defined(NDTPA_IFINDEX) || (defined(HAVE_DECL_NDTPA_IFINDEX) && HAVE_DECL_NDTPA_IFINDEX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_IFINDEX) == (1), "NDTPA_IFINDEX != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_IFINDEX 1
 #endif
-#if !(defined(NDTPA_REFCNT) || (defined(HAVE_DECL_NDTPA_REFCNT) && HAVE_DECL_NDTPA_REFCNT))
+#if defined(NDTPA_REFCNT) || (defined(HAVE_DECL_NDTPA_REFCNT) && HAVE_DECL_NDTPA_REFCNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_REFCNT) == (2), "NDTPA_REFCNT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_REFCNT 2
 #endif
-#if !(defined(NDTPA_REACHABLE_TIME) || (defined(HAVE_DECL_NDTPA_REACHABLE_TIME) && HAVE_DECL_NDTPA_REACHABLE_TIME))
+#if defined(NDTPA_REACHABLE_TIME) || (defined(HAVE_DECL_NDTPA_REACHABLE_TIME) && HAVE_DECL_NDTPA_REACHABLE_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_REACHABLE_TIME) == (3), "NDTPA_REACHABLE_TIME != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(NDTPA_BASE_REACHABLE_TIME) || (defined(HAVE_DECL_NDTPA_BASE_REACHABLE_TIME) && HAVE_DECL_NDTPA_BASE_REACHABLE_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_BASE_REACHABLE_TIME) == (4), "NDTPA_BASE_REACHABLE_TIME != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_BASE_REACHABLE_TIME 4
 #endif
-#if !(defined(NDTPA_RETRANS_TIME) || (defined(HAVE_DECL_NDTPA_RETRANS_TIME) && HAVE_DECL_NDTPA_RETRANS_TIME))
+#if defined(NDTPA_RETRANS_TIME) || (defined(HAVE_DECL_NDTPA_RETRANS_TIME) && HAVE_DECL_NDTPA_RETRANS_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_RETRANS_TIME) == (5), "NDTPA_RETRANS_TIME != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_RETRANS_TIME 5
 #endif
-#if !(defined(NDTPA_GC_STALETIME) || (defined(HAVE_DECL_NDTPA_GC_STALETIME) && HAVE_DECL_NDTPA_GC_STALETIME))
+#if defined(NDTPA_GC_STALETIME) || (defined(HAVE_DECL_NDTPA_GC_STALETIME) && HAVE_DECL_NDTPA_GC_STALETIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_GC_STALETIME) == (6), "NDTPA_GC_STALETIME != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(NDTPA_DELAY_PROBE_TIME) || (defined(HAVE_DECL_NDTPA_DELAY_PROBE_TIME) && HAVE_DECL_NDTPA_DELAY_PROBE_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_DELAY_PROBE_TIME) == (7), "NDTPA_DELAY_PROBE_TIME != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_DELAY_PROBE_TIME 7
 #endif
-#if !(defined(NDTPA_QUEUE_LEN) || (defined(HAVE_DECL_NDTPA_QUEUE_LEN) && HAVE_DECL_NDTPA_QUEUE_LEN))
+#if defined(NDTPA_QUEUE_LEN) || (defined(HAVE_DECL_NDTPA_QUEUE_LEN) && HAVE_DECL_NDTPA_QUEUE_LEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_QUEUE_LEN) == (8), "NDTPA_QUEUE_LEN != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_QUEUE_LEN 8
 #endif
-#if !(defined(NDTPA_APP_PROBES) || (defined(HAVE_DECL_NDTPA_APP_PROBES) && HAVE_DECL_NDTPA_APP_PROBES))
+#if defined(NDTPA_APP_PROBES) || (defined(HAVE_DECL_NDTPA_APP_PROBES) && HAVE_DECL_NDTPA_APP_PROBES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_APP_PROBES) == (9), "NDTPA_APP_PROBES != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_APP_PROBES 9
 #endif
-#if !(defined(NDTPA_UCAST_PROBES) || (defined(HAVE_DECL_NDTPA_UCAST_PROBES) && HAVE_DECL_NDTPA_UCAST_PROBES))
+#if defined(NDTPA_UCAST_PROBES) || (defined(HAVE_DECL_NDTPA_UCAST_PROBES) && HAVE_DECL_NDTPA_UCAST_PROBES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_UCAST_PROBES) == (10), "NDTPA_UCAST_PROBES != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_UCAST_PROBES 10
 #endif
-#if !(defined(NDTPA_MCAST_PROBES) || (defined(HAVE_DECL_NDTPA_MCAST_PROBES) && HAVE_DECL_NDTPA_MCAST_PROBES))
+#if defined(NDTPA_MCAST_PROBES) || (defined(HAVE_DECL_NDTPA_MCAST_PROBES) && HAVE_DECL_NDTPA_MCAST_PROBES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_MCAST_PROBES) == (11), "NDTPA_MCAST_PROBES != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_MCAST_PROBES 11
 #endif
-#if !(defined(NDTPA_ANYCAST_DELAY) || (defined(HAVE_DECL_NDTPA_ANYCAST_DELAY) && HAVE_DECL_NDTPA_ANYCAST_DELAY))
+#if defined(NDTPA_ANYCAST_DELAY) || (defined(HAVE_DECL_NDTPA_ANYCAST_DELAY) && HAVE_DECL_NDTPA_ANYCAST_DELAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_ANYCAST_DELAY) == (12), "NDTPA_ANYCAST_DELAY != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_ANYCAST_DELAY 12
 #endif
-#if !(defined(NDTPA_PROXY_DELAY) || (defined(HAVE_DECL_NDTPA_PROXY_DELAY) && HAVE_DECL_NDTPA_PROXY_DELAY))
+#if defined(NDTPA_PROXY_DELAY) || (defined(HAVE_DECL_NDTPA_PROXY_DELAY) && HAVE_DECL_NDTPA_PROXY_DELAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_PROXY_DELAY) == (13), "NDTPA_PROXY_DELAY != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_PROXY_DELAY 13
 #endif
-#if !(defined(NDTPA_PROXY_QLEN) || (defined(HAVE_DECL_NDTPA_PROXY_QLEN) && HAVE_DECL_NDTPA_PROXY_QLEN))
+#if defined(NDTPA_PROXY_QLEN) || (defined(HAVE_DECL_NDTPA_PROXY_QLEN) && HAVE_DECL_NDTPA_PROXY_QLEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_PROXY_QLEN) == (14), "NDTPA_PROXY_QLEN != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_PROXY_QLEN 14
 #endif
-#if !(defined(NDTPA_LOCKTIME) || (defined(HAVE_DECL_NDTPA_LOCKTIME) && HAVE_DECL_NDTPA_LOCKTIME))
+#if defined(NDTPA_LOCKTIME) || (defined(HAVE_DECL_NDTPA_LOCKTIME) && HAVE_DECL_NDTPA_LOCKTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_LOCKTIME) == (15), "NDTPA_LOCKTIME != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_LOCKTIME 15
 #endif
-#if !(defined(NDTPA_QUEUE_LENBYTES) || (defined(HAVE_DECL_NDTPA_QUEUE_LENBYTES) && HAVE_DECL_NDTPA_QUEUE_LENBYTES))
+#if defined(NDTPA_QUEUE_LENBYTES) || (defined(HAVE_DECL_NDTPA_QUEUE_LENBYTES) && HAVE_DECL_NDTPA_QUEUE_LENBYTES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_QUEUE_LENBYTES) == (16), "NDTPA_QUEUE_LENBYTES != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_QUEUE_LENBYTES 16
 #endif
-#if !(defined(NDTPA_MCAST_REPROBES) || (defined(HAVE_DECL_NDTPA_MCAST_REPROBES) && HAVE_DECL_NDTPA_MCAST_REPROBES))
+#if defined(NDTPA_MCAST_REPROBES) || (defined(HAVE_DECL_NDTPA_MCAST_REPROBES) && HAVE_DECL_NDTPA_MCAST_REPROBES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_MCAST_REPROBES) == (17), "NDTPA_MCAST_REPROBES != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_MCAST_REPROBES 17
 #endif
-#if !(defined(NDTPA_PAD) || (defined(HAVE_DECL_NDTPA_PAD) && HAVE_DECL_NDTPA_PAD))
+#if defined(NDTPA_PAD) || (defined(HAVE_DECL_NDTPA_PAD) && HAVE_DECL_NDTPA_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NDTPA_PAD) == (18), "NDTPA_PAD != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NDTPA_PAD 18
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_neightbl_parms_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_neightbl_parms_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_neightbl_parms_attrs[] = {
@@ -87,4 +169,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_netconf_attrs.h b/xlat/rtnl_netconf_attrs.h
index 3115d7a..194aa58 100644
--- a/xlat/rtnl_netconf_attrs.h
+++ b/xlat/rtnl_netconf_attrs.h
@@ -1,34 +1,72 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NETCONFA_UNSPEC) || (defined(HAVE_DECL_NETCONFA_UNSPEC) && HAVE_DECL_NETCONFA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETCONFA_UNSPEC) == (0), "NETCONFA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETCONFA_UNSPEC 0
 #endif
-#if !(defined(NETCONFA_IFINDEX) || (defined(HAVE_DECL_NETCONFA_IFINDEX) && HAVE_DECL_NETCONFA_IFINDEX))
+#if defined(NETCONFA_IFINDEX) || (defined(HAVE_DECL_NETCONFA_IFINDEX) && HAVE_DECL_NETCONFA_IFINDEX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETCONFA_IFINDEX) == (1), "NETCONFA_IFINDEX != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETCONFA_IFINDEX 1
 #endif
-#if !(defined(NETCONFA_FORWARDING) || (defined(HAVE_DECL_NETCONFA_FORWARDING) && HAVE_DECL_NETCONFA_FORWARDING))
+#if defined(NETCONFA_FORWARDING) || (defined(HAVE_DECL_NETCONFA_FORWARDING) && HAVE_DECL_NETCONFA_FORWARDING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETCONFA_FORWARDING) == (2), "NETCONFA_FORWARDING != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETCONFA_FORWARDING 2
 #endif
-#if !(defined(NETCONFA_RP_FILTER) || (defined(HAVE_DECL_NETCONFA_RP_FILTER) && HAVE_DECL_NETCONFA_RP_FILTER))
+#if defined(NETCONFA_RP_FILTER) || (defined(HAVE_DECL_NETCONFA_RP_FILTER) && HAVE_DECL_NETCONFA_RP_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETCONFA_RP_FILTER) == (3), "NETCONFA_RP_FILTER != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETCONFA_RP_FILTER 3
 #endif
-#if !(defined(NETCONFA_MC_FORWARDING) || (defined(HAVE_DECL_NETCONFA_MC_FORWARDING) && HAVE_DECL_NETCONFA_MC_FORWARDING))
+#if defined(NETCONFA_MC_FORWARDING) || (defined(HAVE_DECL_NETCONFA_MC_FORWARDING) && HAVE_DECL_NETCONFA_MC_FORWARDING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETCONFA_MC_FORWARDING) == (4), "NETCONFA_MC_FORWARDING != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETCONFA_MC_FORWARDING 4
 #endif
-#if !(defined(NETCONFA_PROXY_NEIGH) || (defined(HAVE_DECL_NETCONFA_PROXY_NEIGH) && HAVE_DECL_NETCONFA_PROXY_NEIGH))
+#if defined(NETCONFA_PROXY_NEIGH) || (defined(HAVE_DECL_NETCONFA_PROXY_NEIGH) && HAVE_DECL_NETCONFA_PROXY_NEIGH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETCONFA_PROXY_NEIGH) == (5), "NETCONFA_PROXY_NEIGH != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) || (defined(HAVE_DECL_NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) && HAVE_DECL_NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) == (6), "NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN 6
 #endif
-#if !(defined(NETCONFA_INPUT) || (defined(HAVE_DECL_NETCONFA_INPUT) && HAVE_DECL_NETCONFA_INPUT))
+#if defined(NETCONFA_INPUT) || (defined(HAVE_DECL_NETCONFA_INPUT) && HAVE_DECL_NETCONFA_INPUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETCONFA_INPUT) == (7), "NETCONFA_INPUT != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETCONFA_INPUT 7
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_netconf_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_netconf_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_netconf_attrs[] = {
@@ -43,4 +81,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_nsid_attrs.h b/xlat/rtnl_nsid_attrs.h
index 8b1486a..7d6afd2 100644
--- a/xlat/rtnl_nsid_attrs.h
+++ b/xlat/rtnl_nsid_attrs.h
@@ -1,25 +1,51 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NETNSA_NSID_NOT_ASSIGNED) || (defined(HAVE_DECL_NETNSA_NSID_NOT_ASSIGNED) && HAVE_DECL_NETNSA_NSID_NOT_ASSIGNED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETNSA_NSID_NOT_ASSIGNED) == (-1), "NETNSA_NSID_NOT_ASSIGNED != -1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETNSA_NSID_NOT_ASSIGNED -1
 #endif
-#if !(defined(NETNSA_NONE) || (defined(HAVE_DECL_NETNSA_NONE) && HAVE_DECL_NETNSA_NONE))
+#if defined(NETNSA_NONE) || (defined(HAVE_DECL_NETNSA_NONE) && HAVE_DECL_NETNSA_NONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETNSA_NONE) == (0), "NETNSA_NONE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETNSA_NONE 0
 #endif
-#if !(defined(NETNSA_NSID) || (defined(HAVE_DECL_NETNSA_NSID) && HAVE_DECL_NETNSA_NSID))
+#if defined(NETNSA_NSID) || (defined(HAVE_DECL_NETNSA_NSID) && HAVE_DECL_NETNSA_NSID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETNSA_NSID) == (1), "NETNSA_NSID != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETNSA_NSID 1
 #endif
-#if !(defined(NETNSA_PID) || (defined(HAVE_DECL_NETNSA_PID) && HAVE_DECL_NETNSA_PID))
+#if defined(NETNSA_PID) || (defined(HAVE_DECL_NETNSA_PID) && HAVE_DECL_NETNSA_PID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETNSA_PID) == (2), "NETNSA_PID != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETNSA_PID 2
 #endif
-#if !(defined(NETNSA_FD) || (defined(HAVE_DECL_NETNSA_FD) && HAVE_DECL_NETNSA_FD))
+#if defined(NETNSA_FD) || (defined(HAVE_DECL_NETNSA_FD) && HAVE_DECL_NETNSA_FD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETNSA_FD) == (3), "NETNSA_FD != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define NETNSA_FD 3
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_nsid_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_nsid_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_nsid_attrs[] = {
@@ -31,4 +57,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_route_attrs.h b/xlat/rtnl_route_attrs.h
index 82b5e1f..7cb51fc 100644
--- a/xlat/rtnl_route_attrs.h
+++ b/xlat/rtnl_route_attrs.h
@@ -1,91 +1,205 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RTA_UNSPEC) || (defined(HAVE_DECL_RTA_UNSPEC) && HAVE_DECL_RTA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_UNSPEC) == (0), "RTA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_UNSPEC 0
 #endif
-#if !(defined(RTA_DST) || (defined(HAVE_DECL_RTA_DST) && HAVE_DECL_RTA_DST))
+#if defined(RTA_DST) || (defined(HAVE_DECL_RTA_DST) && HAVE_DECL_RTA_DST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_DST) == (1), "RTA_DST != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_DST 1
 #endif
-#if !(defined(RTA_SRC) || (defined(HAVE_DECL_RTA_SRC) && HAVE_DECL_RTA_SRC))
+#if defined(RTA_SRC) || (defined(HAVE_DECL_RTA_SRC) && HAVE_DECL_RTA_SRC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_SRC) == (2), "RTA_SRC != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_SRC 2
 #endif
-#if !(defined(RTA_IIF) || (defined(HAVE_DECL_RTA_IIF) && HAVE_DECL_RTA_IIF))
+#if defined(RTA_IIF) || (defined(HAVE_DECL_RTA_IIF) && HAVE_DECL_RTA_IIF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_IIF) == (3), "RTA_IIF != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_IIF 3
 #endif
-#if !(defined(RTA_OIF) || (defined(HAVE_DECL_RTA_OIF) && HAVE_DECL_RTA_OIF))
+#if defined(RTA_OIF) || (defined(HAVE_DECL_RTA_OIF) && HAVE_DECL_RTA_OIF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_OIF) == (4), "RTA_OIF != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_OIF 4
 #endif
-#if !(defined(RTA_GATEWAY) || (defined(HAVE_DECL_RTA_GATEWAY) && HAVE_DECL_RTA_GATEWAY))
+#if defined(RTA_GATEWAY) || (defined(HAVE_DECL_RTA_GATEWAY) && HAVE_DECL_RTA_GATEWAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_GATEWAY) == (5), "RTA_GATEWAY != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_GATEWAY 5
 #endif
-#if !(defined(RTA_PRIORITY) || (defined(HAVE_DECL_RTA_PRIORITY) && HAVE_DECL_RTA_PRIORITY))
+#if defined(RTA_PRIORITY) || (defined(HAVE_DECL_RTA_PRIORITY) && HAVE_DECL_RTA_PRIORITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_PRIORITY) == (6), "RTA_PRIORITY != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_PRIORITY 6
 #endif
-#if !(defined(RTA_PREFSRC) || (defined(HAVE_DECL_RTA_PREFSRC) && HAVE_DECL_RTA_PREFSRC))
+#if defined(RTA_PREFSRC) || (defined(HAVE_DECL_RTA_PREFSRC) && HAVE_DECL_RTA_PREFSRC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_PREFSRC) == (7), "RTA_PREFSRC != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_PREFSRC 7
 #endif
-#if !(defined(RTA_METRICS) || (defined(HAVE_DECL_RTA_METRICS) && HAVE_DECL_RTA_METRICS))
+#if defined(RTA_METRICS) || (defined(HAVE_DECL_RTA_METRICS) && HAVE_DECL_RTA_METRICS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_METRICS) == (8), "RTA_METRICS != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_METRICS 8
 #endif
-#if !(defined(RTA_MULTIPATH) || (defined(HAVE_DECL_RTA_MULTIPATH) && HAVE_DECL_RTA_MULTIPATH))
+#if defined(RTA_MULTIPATH) || (defined(HAVE_DECL_RTA_MULTIPATH) && HAVE_DECL_RTA_MULTIPATH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_MULTIPATH) == (9), "RTA_MULTIPATH != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_MULTIPATH 9
 #endif
-#if !(defined(RTA_PROTOINFO) || (defined(HAVE_DECL_RTA_PROTOINFO) && HAVE_DECL_RTA_PROTOINFO))
+#if defined(RTA_PROTOINFO) || (defined(HAVE_DECL_RTA_PROTOINFO) && HAVE_DECL_RTA_PROTOINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_PROTOINFO) == (10), "RTA_PROTOINFO != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_PROTOINFO 10
 #endif
-#if !(defined(RTA_FLOW) || (defined(HAVE_DECL_RTA_FLOW) && HAVE_DECL_RTA_FLOW))
+#if defined(RTA_FLOW) || (defined(HAVE_DECL_RTA_FLOW) && HAVE_DECL_RTA_FLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_FLOW) == (11), "RTA_FLOW != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_FLOW 11
 #endif
-#if !(defined(RTA_CACHEINFO) || (defined(HAVE_DECL_RTA_CACHEINFO) && HAVE_DECL_RTA_CACHEINFO))
+#if defined(RTA_CACHEINFO) || (defined(HAVE_DECL_RTA_CACHEINFO) && HAVE_DECL_RTA_CACHEINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_CACHEINFO) == (12), "RTA_CACHEINFO != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_CACHEINFO 12
 #endif
-#if !(defined(RTA_SESSION) || (defined(HAVE_DECL_RTA_SESSION) && HAVE_DECL_RTA_SESSION))
+#if defined(RTA_SESSION) || (defined(HAVE_DECL_RTA_SESSION) && HAVE_DECL_RTA_SESSION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_SESSION) == (13), "RTA_SESSION != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_SESSION 13
 #endif
-#if !(defined(RTA_MP_ALGO) || (defined(HAVE_DECL_RTA_MP_ALGO) && HAVE_DECL_RTA_MP_ALGO))
+#if defined(RTA_MP_ALGO) || (defined(HAVE_DECL_RTA_MP_ALGO) && HAVE_DECL_RTA_MP_ALGO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_MP_ALGO) == (14), "RTA_MP_ALGO != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_MP_ALGO 14
 #endif
-#if !(defined(RTA_TABLE) || (defined(HAVE_DECL_RTA_TABLE) && HAVE_DECL_RTA_TABLE))
+#if defined(RTA_TABLE) || (defined(HAVE_DECL_RTA_TABLE) && HAVE_DECL_RTA_TABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_TABLE) == (15), "RTA_TABLE != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_TABLE 15
 #endif
-#if !(defined(RTA_MARK) || (defined(HAVE_DECL_RTA_MARK) && HAVE_DECL_RTA_MARK))
+#if defined(RTA_MARK) || (defined(HAVE_DECL_RTA_MARK) && HAVE_DECL_RTA_MARK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_MARK) == (16), "RTA_MARK != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_MARK 16
 #endif
-#if !(defined(RTA_MFC_STATS) || (defined(HAVE_DECL_RTA_MFC_STATS) && HAVE_DECL_RTA_MFC_STATS))
+#if defined(RTA_MFC_STATS) || (defined(HAVE_DECL_RTA_MFC_STATS) && HAVE_DECL_RTA_MFC_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_MFC_STATS) == (17), "RTA_MFC_STATS != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_MFC_STATS 17
 #endif
-#if !(defined(RTA_VIA) || (defined(HAVE_DECL_RTA_VIA) && HAVE_DECL_RTA_VIA))
+#if defined(RTA_VIA) || (defined(HAVE_DECL_RTA_VIA) && HAVE_DECL_RTA_VIA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_VIA) == (18), "RTA_VIA != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_VIA 18
 #endif
-#if !(defined(RTA_NEWDST) || (defined(HAVE_DECL_RTA_NEWDST) && HAVE_DECL_RTA_NEWDST))
+#if defined(RTA_NEWDST) || (defined(HAVE_DECL_RTA_NEWDST) && HAVE_DECL_RTA_NEWDST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_NEWDST) == (19), "RTA_NEWDST != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_NEWDST 19
 #endif
-#if !(defined(RTA_PREF) || (defined(HAVE_DECL_RTA_PREF) && HAVE_DECL_RTA_PREF))
+#if defined(RTA_PREF) || (defined(HAVE_DECL_RTA_PREF) && HAVE_DECL_RTA_PREF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_PREF) == (20), "RTA_PREF != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_PREF 20
 #endif
-#if !(defined(RTA_ENCAP_TYPE) || (defined(HAVE_DECL_RTA_ENCAP_TYPE) && HAVE_DECL_RTA_ENCAP_TYPE))
+#if defined(RTA_ENCAP_TYPE) || (defined(HAVE_DECL_RTA_ENCAP_TYPE) && HAVE_DECL_RTA_ENCAP_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_ENCAP_TYPE) == (21), "RTA_ENCAP_TYPE != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_ENCAP_TYPE 21
 #endif
-#if !(defined(RTA_ENCAP) || (defined(HAVE_DECL_RTA_ENCAP) && HAVE_DECL_RTA_ENCAP))
+#if defined(RTA_ENCAP) || (defined(HAVE_DECL_RTA_ENCAP) && HAVE_DECL_RTA_ENCAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_ENCAP) == (22), "RTA_ENCAP != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_ENCAP 22
 #endif
-#if !(defined(RTA_EXPIRES) || (defined(HAVE_DECL_RTA_EXPIRES) && HAVE_DECL_RTA_EXPIRES))
+#if defined(RTA_EXPIRES) || (defined(HAVE_DECL_RTA_EXPIRES) && HAVE_DECL_RTA_EXPIRES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_EXPIRES) == (23), "RTA_EXPIRES != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_EXPIRES 23
 #endif
-#if !(defined(RTA_PAD) || (defined(HAVE_DECL_RTA_PAD) && HAVE_DECL_RTA_PAD))
+#if defined(RTA_PAD) || (defined(HAVE_DECL_RTA_PAD) && HAVE_DECL_RTA_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_PAD) == (24), "RTA_PAD != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_PAD 24
 #endif
-#if !(defined(RTA_UID) || (defined(HAVE_DECL_RTA_UID) && HAVE_DECL_RTA_UID))
+#if defined(RTA_UID) || (defined(HAVE_DECL_RTA_UID) && HAVE_DECL_RTA_UID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_UID) == (25), "RTA_UID != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_UID 25
 #endif
-#if !(defined(RTA_TTL_PROPAGATE) || (defined(HAVE_DECL_RTA_TTL_PROPAGATE) && HAVE_DECL_RTA_TTL_PROPAGATE))
+#if defined(RTA_TTL_PROPAGATE) || (defined(HAVE_DECL_RTA_TTL_PROPAGATE) && HAVE_DECL_RTA_TTL_PROPAGATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTA_TTL_PROPAGATE) == (26), "RTA_TTL_PROPAGATE != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTA_TTL_PROPAGATE 26
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_route_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_route_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_route_attrs[] = {
@@ -119,4 +233,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_rta_metrics_attrs.h b/xlat/rtnl_rta_metrics_attrs.h
index b395ca3..b441459 100644
--- a/xlat/rtnl_rta_metrics_attrs.h
+++ b/xlat/rtnl_rta_metrics_attrs.h
@@ -1,61 +1,135 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RTAX_UNSPEC) || (defined(HAVE_DECL_RTAX_UNSPEC) && HAVE_DECL_RTAX_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_UNSPEC) == (0), "RTAX_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_UNSPEC 0
 #endif
-#if !(defined(RTAX_LOCK) || (defined(HAVE_DECL_RTAX_LOCK) && HAVE_DECL_RTAX_LOCK))
+#if defined(RTAX_LOCK) || (defined(HAVE_DECL_RTAX_LOCK) && HAVE_DECL_RTAX_LOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_LOCK) == (1), "RTAX_LOCK != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_LOCK 1
 #endif
-#if !(defined(RTAX_MTU) || (defined(HAVE_DECL_RTAX_MTU) && HAVE_DECL_RTAX_MTU))
+#if defined(RTAX_MTU) || (defined(HAVE_DECL_RTAX_MTU) && HAVE_DECL_RTAX_MTU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_MTU) == (2), "RTAX_MTU != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_MTU 2
 #endif
-#if !(defined(RTAX_WINDOW) || (defined(HAVE_DECL_RTAX_WINDOW) && HAVE_DECL_RTAX_WINDOW))
+#if defined(RTAX_WINDOW) || (defined(HAVE_DECL_RTAX_WINDOW) && HAVE_DECL_RTAX_WINDOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_WINDOW) == (3), "RTAX_WINDOW != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_WINDOW 3
 #endif
-#if !(defined(RTAX_RTT) || (defined(HAVE_DECL_RTAX_RTT) && HAVE_DECL_RTAX_RTT))
+#if defined(RTAX_RTT) || (defined(HAVE_DECL_RTAX_RTT) && HAVE_DECL_RTAX_RTT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_RTT) == (4), "RTAX_RTT != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_RTT 4
 #endif
-#if !(defined(RTAX_RTTVAR) || (defined(HAVE_DECL_RTAX_RTTVAR) && HAVE_DECL_RTAX_RTTVAR))
+#if defined(RTAX_RTTVAR) || (defined(HAVE_DECL_RTAX_RTTVAR) && HAVE_DECL_RTAX_RTTVAR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_RTTVAR) == (5), "RTAX_RTTVAR != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_RTTVAR 5
 #endif
-#if !(defined(RTAX_SSTHRESH) || (defined(HAVE_DECL_RTAX_SSTHRESH) && HAVE_DECL_RTAX_SSTHRESH))
+#if defined(RTAX_SSTHRESH) || (defined(HAVE_DECL_RTAX_SSTHRESH) && HAVE_DECL_RTAX_SSTHRESH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_SSTHRESH) == (6), "RTAX_SSTHRESH != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_SSTHRESH 6
 #endif
-#if !(defined(RTAX_CWND) || (defined(HAVE_DECL_RTAX_CWND) && HAVE_DECL_RTAX_CWND))
+#if defined(RTAX_CWND) || (defined(HAVE_DECL_RTAX_CWND) && HAVE_DECL_RTAX_CWND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_CWND) == (7), "RTAX_CWND != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_CWND 7
 #endif
-#if !(defined(RTAX_ADVMSS) || (defined(HAVE_DECL_RTAX_ADVMSS) && HAVE_DECL_RTAX_ADVMSS))
+#if defined(RTAX_ADVMSS) || (defined(HAVE_DECL_RTAX_ADVMSS) && HAVE_DECL_RTAX_ADVMSS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_ADVMSS) == (8), "RTAX_ADVMSS != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_ADVMSS 8
 #endif
-#if !(defined(RTAX_REORDERING) || (defined(HAVE_DECL_RTAX_REORDERING) && HAVE_DECL_RTAX_REORDERING))
+#if defined(RTAX_REORDERING) || (defined(HAVE_DECL_RTAX_REORDERING) && HAVE_DECL_RTAX_REORDERING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_REORDERING) == (9), "RTAX_REORDERING != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_REORDERING 9
 #endif
-#if !(defined(RTAX_HOPLIMIT) || (defined(HAVE_DECL_RTAX_HOPLIMIT) && HAVE_DECL_RTAX_HOPLIMIT))
+#if defined(RTAX_HOPLIMIT) || (defined(HAVE_DECL_RTAX_HOPLIMIT) && HAVE_DECL_RTAX_HOPLIMIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_HOPLIMIT) == (10), "RTAX_HOPLIMIT != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_HOPLIMIT 10
 #endif
-#if !(defined(RTAX_INITCWND) || (defined(HAVE_DECL_RTAX_INITCWND) && HAVE_DECL_RTAX_INITCWND))
+#if defined(RTAX_INITCWND) || (defined(HAVE_DECL_RTAX_INITCWND) && HAVE_DECL_RTAX_INITCWND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_INITCWND) == (11), "RTAX_INITCWND != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_INITCWND 11
 #endif
-#if !(defined(RTAX_FEATURES) || (defined(HAVE_DECL_RTAX_FEATURES) && HAVE_DECL_RTAX_FEATURES))
+#if defined(RTAX_FEATURES) || (defined(HAVE_DECL_RTAX_FEATURES) && HAVE_DECL_RTAX_FEATURES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_FEATURES) == (12), "RTAX_FEATURES != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_FEATURES 12
 #endif
-#if !(defined(RTAX_RTO_MIN) || (defined(HAVE_DECL_RTAX_RTO_MIN) && HAVE_DECL_RTAX_RTO_MIN))
+#if defined(RTAX_RTO_MIN) || (defined(HAVE_DECL_RTAX_RTO_MIN) && HAVE_DECL_RTAX_RTO_MIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_RTO_MIN) == (13), "RTAX_RTO_MIN != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_RTO_MIN 13
 #endif
-#if !(defined(RTAX_INITRWND) || (defined(HAVE_DECL_RTAX_INITRWND) && HAVE_DECL_RTAX_INITRWND))
+#if defined(RTAX_INITRWND) || (defined(HAVE_DECL_RTAX_INITRWND) && HAVE_DECL_RTAX_INITRWND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_INITRWND) == (14), "RTAX_INITRWND != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_INITRWND 14
 #endif
-#if !(defined(RTAX_QUICKACK) || (defined(HAVE_DECL_RTAX_QUICKACK) && HAVE_DECL_RTAX_QUICKACK))
+#if defined(RTAX_QUICKACK) || (defined(HAVE_DECL_RTAX_QUICKACK) && HAVE_DECL_RTAX_QUICKACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_QUICKACK) == (15), "RTAX_QUICKACK != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_QUICKACK 15
 #endif
-#if !(defined(RTAX_CC_ALGO) || (defined(HAVE_DECL_RTAX_CC_ALGO) && HAVE_DECL_RTAX_CC_ALGO))
+#if defined(RTAX_CC_ALGO) || (defined(HAVE_DECL_RTAX_CC_ALGO) && HAVE_DECL_RTAX_CC_ALGO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RTAX_CC_ALGO) == (16), "RTAX_CC_ALGO != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RTAX_CC_ALGO 16
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_rta_metrics_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_rta_metrics_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_rta_metrics_attrs[] = {
@@ -79,4 +153,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_rule_attrs.h b/xlat/rtnl_rule_attrs.h
index c9680ec..683bbee 100644
--- a/xlat/rtnl_rule_attrs.h
+++ b/xlat/rtnl_rule_attrs.h
@@ -1,73 +1,191 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FRA_UNSPEC) || (defined(HAVE_DECL_FRA_UNSPEC) && HAVE_DECL_FRA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_UNSPEC) == (0), "FRA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_UNSPEC 0
 #endif
-#if !(defined(FRA_DST) || (defined(HAVE_DECL_FRA_DST) && HAVE_DECL_FRA_DST))
+#if defined(FRA_DST) || (defined(HAVE_DECL_FRA_DST) && HAVE_DECL_FRA_DST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_DST) == (1), "FRA_DST != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_DST 1
 #endif
-#if !(defined(FRA_SRC) || (defined(HAVE_DECL_FRA_SRC) && HAVE_DECL_FRA_SRC))
+#if defined(FRA_SRC) || (defined(HAVE_DECL_FRA_SRC) && HAVE_DECL_FRA_SRC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_SRC) == (2), "FRA_SRC != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_SRC 2
 #endif
-#if !(defined(FRA_IIFNAME) || (defined(HAVE_DECL_FRA_IIFNAME) && HAVE_DECL_FRA_IIFNAME))
+#if defined(FRA_IIFNAME) || (defined(HAVE_DECL_FRA_IIFNAME) && HAVE_DECL_FRA_IIFNAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_IIFNAME) == (3), "FRA_IIFNAME != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_IIFNAME 3
 #endif
-#if !(defined(FRA_GOTO) || (defined(HAVE_DECL_FRA_GOTO) && HAVE_DECL_FRA_GOTO))
+#if defined(FRA_GOTO) || (defined(HAVE_DECL_FRA_GOTO) && HAVE_DECL_FRA_GOTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_GOTO) == (4), "FRA_GOTO != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_GOTO 4
 #endif
-#if !(defined(FRA_UNUSED2) || (defined(HAVE_DECL_FRA_UNUSED2) && HAVE_DECL_FRA_UNUSED2))
+#if defined(FRA_UNUSED2) || (defined(HAVE_DECL_FRA_UNUSED2) && HAVE_DECL_FRA_UNUSED2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_UNUSED2) == (5), "FRA_UNUSED2 != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_UNUSED2 5
 #endif
-#if !(defined(FRA_PRIORITY) || (defined(HAVE_DECL_FRA_PRIORITY) && HAVE_DECL_FRA_PRIORITY))
+#if defined(FRA_PRIORITY) || (defined(HAVE_DECL_FRA_PRIORITY) && HAVE_DECL_FRA_PRIORITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_PRIORITY) == (6), "FRA_PRIORITY != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_PRIORITY 6
 #endif
-#if !(defined(FRA_UNUSED3) || (defined(HAVE_DECL_FRA_UNUSED3) && HAVE_DECL_FRA_UNUSED3))
+#if defined(FRA_UNUSED3) || (defined(HAVE_DECL_FRA_UNUSED3) && HAVE_DECL_FRA_UNUSED3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_UNUSED3) == (7), "FRA_UNUSED3 != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_UNUSED3 7
 #endif
-#if !(defined(FRA_UNUSED4) || (defined(HAVE_DECL_FRA_UNUSED4) && HAVE_DECL_FRA_UNUSED4))
+#if defined(FRA_UNUSED4) || (defined(HAVE_DECL_FRA_UNUSED4) && HAVE_DECL_FRA_UNUSED4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_UNUSED4) == (8), "FRA_UNUSED4 != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_UNUSED4 8
 #endif
-#if !(defined(FRA_UNUSED5) || (defined(HAVE_DECL_FRA_UNUSED5) && HAVE_DECL_FRA_UNUSED5))
+#if defined(FRA_UNUSED5) || (defined(HAVE_DECL_FRA_UNUSED5) && HAVE_DECL_FRA_UNUSED5)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_UNUSED5) == (9), "FRA_UNUSED5 != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_UNUSED5 9
 #endif
-#if !(defined(FRA_FWMARK) || (defined(HAVE_DECL_FRA_FWMARK) && HAVE_DECL_FRA_FWMARK))
+#if defined(FRA_FWMARK) || (defined(HAVE_DECL_FRA_FWMARK) && HAVE_DECL_FRA_FWMARK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_FWMARK) == (10), "FRA_FWMARK != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_FWMARK 10
 #endif
-#if !(defined(FRA_FLOW) || (defined(HAVE_DECL_FRA_FLOW) && HAVE_DECL_FRA_FLOW))
+#if defined(FRA_FLOW) || (defined(HAVE_DECL_FRA_FLOW) && HAVE_DECL_FRA_FLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_FLOW) == (11), "FRA_FLOW != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_FLOW 11
 #endif
-#if !(defined(FRA_TUN_ID) || (defined(HAVE_DECL_FRA_TUN_ID) && HAVE_DECL_FRA_TUN_ID))
+#if defined(FRA_TUN_ID) || (defined(HAVE_DECL_FRA_TUN_ID) && HAVE_DECL_FRA_TUN_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_TUN_ID) == (12), "FRA_TUN_ID != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_TUN_ID 12
 #endif
-#if !(defined(FRA_SUPPRESS_IFGROUP) || (defined(HAVE_DECL_FRA_SUPPRESS_IFGROUP) && HAVE_DECL_FRA_SUPPRESS_IFGROUP))
+#if defined(FRA_SUPPRESS_IFGROUP) || (defined(HAVE_DECL_FRA_SUPPRESS_IFGROUP) && HAVE_DECL_FRA_SUPPRESS_IFGROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_SUPPRESS_IFGROUP) == (13), "FRA_SUPPRESS_IFGROUP != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_SUPPRESS_IFGROUP 13
 #endif
-#if !(defined(FRA_SUPPRESS_PREFIXLEN) || (defined(HAVE_DECL_FRA_SUPPRESS_PREFIXLEN) && HAVE_DECL_FRA_SUPPRESS_PREFIXLEN))
+#if defined(FRA_SUPPRESS_PREFIXLEN) || (defined(HAVE_DECL_FRA_SUPPRESS_PREFIXLEN) && HAVE_DECL_FRA_SUPPRESS_PREFIXLEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_SUPPRESS_PREFIXLEN) == (14), "FRA_SUPPRESS_PREFIXLEN != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_SUPPRESS_PREFIXLEN 14
 #endif
-#if !(defined(FRA_TABLE) || (defined(HAVE_DECL_FRA_TABLE) && HAVE_DECL_FRA_TABLE))
+#if defined(FRA_TABLE) || (defined(HAVE_DECL_FRA_TABLE) && HAVE_DECL_FRA_TABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_TABLE) == (15), "FRA_TABLE != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_TABLE 15
 #endif
-#if !(defined(FRA_FWMASK) || (defined(HAVE_DECL_FRA_FWMASK) && HAVE_DECL_FRA_FWMASK))
+#if defined(FRA_FWMASK) || (defined(HAVE_DECL_FRA_FWMASK) && HAVE_DECL_FRA_FWMASK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_FWMASK) == (16), "FRA_FWMASK != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_FWMASK 16
 #endif
-#if !(defined(FRA_OIFNAME) || (defined(HAVE_DECL_FRA_OIFNAME) && HAVE_DECL_FRA_OIFNAME))
+#if defined(FRA_OIFNAME) || (defined(HAVE_DECL_FRA_OIFNAME) && HAVE_DECL_FRA_OIFNAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_OIFNAME) == (17), "FRA_OIFNAME != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_OIFNAME 17
 #endif
-#if !(defined(FRA_PAD) || (defined(HAVE_DECL_FRA_PAD) && HAVE_DECL_FRA_PAD))
+#if defined(FRA_PAD) || (defined(HAVE_DECL_FRA_PAD) && HAVE_DECL_FRA_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_PAD) == (18), "FRA_PAD != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_PAD 18
 #endif
-#if !(defined(FRA_L3MDEV) || (defined(HAVE_DECL_FRA_L3MDEV) && HAVE_DECL_FRA_L3MDEV))
+#if defined(FRA_L3MDEV) || (defined(HAVE_DECL_FRA_L3MDEV) && HAVE_DECL_FRA_L3MDEV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_L3MDEV) == (19), "FRA_L3MDEV != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_L3MDEV 19
 #endif
-#if !(defined(FRA_UID_RANGE) || (defined(HAVE_DECL_FRA_UID_RANGE) && HAVE_DECL_FRA_UID_RANGE))
+#if defined(FRA_UID_RANGE) || (defined(HAVE_DECL_FRA_UID_RANGE) && HAVE_DECL_FRA_UID_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_UID_RANGE) == (20), "FRA_UID_RANGE != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FRA_UID_RANGE 20
 #endif
-
-#ifdef IN_MPERS
-
-# error static const struct xlat rtnl_rule_attrs in mpers mode
-
+#if defined(FRA_PROTOCOL) || (defined(HAVE_DECL_FRA_PROTOCOL) && HAVE_DECL_FRA_PROTOCOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_PROTOCOL) == (21), "FRA_PROTOCOL != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define FRA_PROTOCOL 21
+#endif
+#if defined(FRA_IP_PROTO) || (defined(HAVE_DECL_FRA_IP_PROTO) && HAVE_DECL_FRA_IP_PROTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_IP_PROTO) == (22), "FRA_IP_PROTO != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FRA_IP_PROTO 22
+#endif
+#if defined(FRA_SPORT_RANGE) || (defined(HAVE_DECL_FRA_SPORT_RANGE) && HAVE_DECL_FRA_SPORT_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_SPORT_RANGE) == (23), "FRA_SPORT_RANGE != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FRA_SPORT_RANGE 23
+#endif
+#if defined(FRA_DPORT_RANGE) || (defined(HAVE_DECL_FRA_DPORT_RANGE) && HAVE_DECL_FRA_DPORT_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FRA_DPORT_RANGE) == (24), "FRA_DPORT_RANGE != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FRA_DPORT_RANGE 24
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat rtnl_rule_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_rule_attrs[] = {
@@ -92,7 +210,13 @@
  XLAT(FRA_PAD),
  XLAT(FRA_L3MDEV),
  XLAT(FRA_UID_RANGE),
+ XLAT(FRA_PROTOCOL),
+ XLAT(FRA_IP_PROTO),
+ XLAT(FRA_SPORT_RANGE),
+ XLAT(FRA_DPORT_RANGE),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_rule_attrs.in b/xlat/rtnl_rule_attrs.in
index 971f118..96ab442 100644
--- a/xlat/rtnl_rule_attrs.in
+++ b/xlat/rtnl_rule_attrs.in
@@ -19,3 +19,7 @@
 FRA_PAD			18
 FRA_L3MDEV		19
 FRA_UID_RANGE		20
+FRA_PROTOCOL		21
+FRA_IP_PROTO		22
+FRA_SPORT_RANGE		23
+FRA_DPORT_RANGE		24
diff --git a/xlat/rtnl_tc_action_attrs.h b/xlat/rtnl_tc_action_attrs.h
index d950089..03990c5 100644
--- a/xlat/rtnl_tc_action_attrs.h
+++ b/xlat/rtnl_tc_action_attrs.h
@@ -1,31 +1,65 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TCA_ACT_UNSPEC) || (defined(HAVE_DECL_TCA_ACT_UNSPEC) && HAVE_DECL_TCA_ACT_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_ACT_UNSPEC) == (0), "TCA_ACT_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_ACT_UNSPEC 0
 #endif
-#if !(defined(TCA_ACT_KIND) || (defined(HAVE_DECL_TCA_ACT_KIND) && HAVE_DECL_TCA_ACT_KIND))
+#if defined(TCA_ACT_KIND) || (defined(HAVE_DECL_TCA_ACT_KIND) && HAVE_DECL_TCA_ACT_KIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_ACT_KIND) == (1), "TCA_ACT_KIND != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_ACT_KIND 1
 #endif
-#if !(defined(TCA_ACT_OPTIONS) || (defined(HAVE_DECL_TCA_ACT_OPTIONS) && HAVE_DECL_TCA_ACT_OPTIONS))
+#if defined(TCA_ACT_OPTIONS) || (defined(HAVE_DECL_TCA_ACT_OPTIONS) && HAVE_DECL_TCA_ACT_OPTIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_ACT_OPTIONS) == (2), "TCA_ACT_OPTIONS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_ACT_OPTIONS 2
 #endif
-#if !(defined(TCA_ACT_INDEX) || (defined(HAVE_DECL_TCA_ACT_INDEX) && HAVE_DECL_TCA_ACT_INDEX))
+#if defined(TCA_ACT_INDEX) || (defined(HAVE_DECL_TCA_ACT_INDEX) && HAVE_DECL_TCA_ACT_INDEX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_ACT_INDEX) == (3), "TCA_ACT_INDEX != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_ACT_INDEX 3
 #endif
-#if !(defined(TCA_ACT_STATS) || (defined(HAVE_DECL_TCA_ACT_STATS) && HAVE_DECL_TCA_ACT_STATS))
+#if defined(TCA_ACT_STATS) || (defined(HAVE_DECL_TCA_ACT_STATS) && HAVE_DECL_TCA_ACT_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_ACT_STATS) == (4), "TCA_ACT_STATS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_ACT_STATS 4
 #endif
-#if !(defined(TCA_ACT_PAD) || (defined(HAVE_DECL_TCA_ACT_PAD) && HAVE_DECL_TCA_ACT_PAD))
+#if defined(TCA_ACT_PAD) || (defined(HAVE_DECL_TCA_ACT_PAD) && HAVE_DECL_TCA_ACT_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_ACT_PAD) == (5), "TCA_ACT_PAD != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_ACT_PAD 5
 #endif
-#if !(defined(TCA_ACT_COOKIE) || (defined(HAVE_DECL_TCA_ACT_COOKIE) && HAVE_DECL_TCA_ACT_COOKIE))
+#if defined(TCA_ACT_COOKIE) || (defined(HAVE_DECL_TCA_ACT_COOKIE) && HAVE_DECL_TCA_ACT_COOKIE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_ACT_COOKIE) == (6), "TCA_ACT_COOKIE != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_ACT_COOKIE 6
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_tc_action_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_tc_action_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_tc_action_attrs[] = {
@@ -39,4 +73,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_tc_attrs.h b/xlat/rtnl_tc_attrs.h
index f622eed..fc0dedc 100644
--- a/xlat/rtnl_tc_attrs.h
+++ b/xlat/rtnl_tc_attrs.h
@@ -1,55 +1,121 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TCA_UNSPEC) || (defined(HAVE_DECL_TCA_UNSPEC) && HAVE_DECL_TCA_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_UNSPEC) == (0), "TCA_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_UNSPEC 0
 #endif
-#if !(defined(TCA_KIND) || (defined(HAVE_DECL_TCA_KIND) && HAVE_DECL_TCA_KIND))
+#if defined(TCA_KIND) || (defined(HAVE_DECL_TCA_KIND) && HAVE_DECL_TCA_KIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_KIND) == (1), "TCA_KIND != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_KIND 1
 #endif
-#if !(defined(TCA_OPTIONS) || (defined(HAVE_DECL_TCA_OPTIONS) && HAVE_DECL_TCA_OPTIONS))
+#if defined(TCA_OPTIONS) || (defined(HAVE_DECL_TCA_OPTIONS) && HAVE_DECL_TCA_OPTIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_OPTIONS) == (2), "TCA_OPTIONS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_OPTIONS 2
 #endif
-#if !(defined(TCA_STATS) || (defined(HAVE_DECL_TCA_STATS) && HAVE_DECL_TCA_STATS))
+#if defined(TCA_STATS) || (defined(HAVE_DECL_TCA_STATS) && HAVE_DECL_TCA_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STATS) == (3), "TCA_STATS != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STATS 3
 #endif
-#if !(defined(TCA_XSTATS) || (defined(HAVE_DECL_TCA_XSTATS) && HAVE_DECL_TCA_XSTATS))
+#if defined(TCA_XSTATS) || (defined(HAVE_DECL_TCA_XSTATS) && HAVE_DECL_TCA_XSTATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_XSTATS) == (4), "TCA_XSTATS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_XSTATS 4
 #endif
-#if !(defined(TCA_RATE) || (defined(HAVE_DECL_TCA_RATE) && HAVE_DECL_TCA_RATE))
+#if defined(TCA_RATE) || (defined(HAVE_DECL_TCA_RATE) && HAVE_DECL_TCA_RATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_RATE) == (5), "TCA_RATE != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_RATE 5
 #endif
-#if !(defined(TCA_FCNT) || (defined(HAVE_DECL_TCA_FCNT) && HAVE_DECL_TCA_FCNT))
+#if defined(TCA_FCNT) || (defined(HAVE_DECL_TCA_FCNT) && HAVE_DECL_TCA_FCNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_FCNT) == (6), "TCA_FCNT != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_FCNT 6
 #endif
-#if !(defined(TCA_STATS2) || (defined(HAVE_DECL_TCA_STATS2) && HAVE_DECL_TCA_STATS2))
+#if defined(TCA_STATS2) || (defined(HAVE_DECL_TCA_STATS2) && HAVE_DECL_TCA_STATS2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STATS2) == (7), "TCA_STATS2 != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STATS2 7
 #endif
-#if !(defined(TCA_STAB) || (defined(HAVE_DECL_TCA_STAB) && HAVE_DECL_TCA_STAB))
+#if defined(TCA_STAB) || (defined(HAVE_DECL_TCA_STAB) && HAVE_DECL_TCA_STAB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STAB) == (8), "TCA_STAB != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STAB 8
 #endif
-#if !(defined(TCA_PAD) || (defined(HAVE_DECL_TCA_PAD) && HAVE_DECL_TCA_PAD))
+#if defined(TCA_PAD) || (defined(HAVE_DECL_TCA_PAD) && HAVE_DECL_TCA_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_PAD) == (9), "TCA_PAD != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_PAD 9
 #endif
-#if !(defined(TCA_DUMP_INVISIBLE) || (defined(HAVE_DECL_TCA_DUMP_INVISIBLE) && HAVE_DECL_TCA_DUMP_INVISIBLE))
+#if defined(TCA_DUMP_INVISIBLE) || (defined(HAVE_DECL_TCA_DUMP_INVISIBLE) && HAVE_DECL_TCA_DUMP_INVISIBLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_DUMP_INVISIBLE) == (10), "TCA_DUMP_INVISIBLE != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_DUMP_INVISIBLE 10
 #endif
-#if !(defined(TCA_CHAIN) || (defined(HAVE_DECL_TCA_CHAIN) && HAVE_DECL_TCA_CHAIN))
+#if defined(TCA_CHAIN) || (defined(HAVE_DECL_TCA_CHAIN) && HAVE_DECL_TCA_CHAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_CHAIN) == (11), "TCA_CHAIN != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_CHAIN 11
 #endif
-#if !(defined(TCA_HW_OFFLOAD) || (defined(HAVE_DECL_TCA_HW_OFFLOAD) && HAVE_DECL_TCA_HW_OFFLOAD))
+#if defined(TCA_HW_OFFLOAD) || (defined(HAVE_DECL_TCA_HW_OFFLOAD) && HAVE_DECL_TCA_HW_OFFLOAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_HW_OFFLOAD) == (12), "TCA_HW_OFFLOAD != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_HW_OFFLOAD 12
 #endif
-#if !(defined(TCA_INGRESS_BLOCK) || (defined(HAVE_DECL_TCA_INGRESS_BLOCK) && HAVE_DECL_TCA_INGRESS_BLOCK))
+#if defined(TCA_INGRESS_BLOCK) || (defined(HAVE_DECL_TCA_INGRESS_BLOCK) && HAVE_DECL_TCA_INGRESS_BLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_INGRESS_BLOCK) == (13), "TCA_INGRESS_BLOCK != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_INGRESS_BLOCK 13
 #endif
-#if !(defined(TCA_EGRESS_BLOCK) || (defined(HAVE_DECL_TCA_EGRESS_BLOCK) && HAVE_DECL_TCA_EGRESS_BLOCK))
+#if defined(TCA_EGRESS_BLOCK) || (defined(HAVE_DECL_TCA_EGRESS_BLOCK) && HAVE_DECL_TCA_EGRESS_BLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_EGRESS_BLOCK) == (14), "TCA_EGRESS_BLOCK != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_EGRESS_BLOCK 14
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_tc_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_tc_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_tc_attrs[] = {
@@ -71,4 +137,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_tca_stab_attrs.h b/xlat/rtnl_tca_stab_attrs.h
index 8e01f14..ca2f167 100644
--- a/xlat/rtnl_tca_stab_attrs.h
+++ b/xlat/rtnl_tca_stab_attrs.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rtnl_tca_stab_attrs.in; do not edit. */
-#if !(defined(TCA_STAB_UNSPEC) || (defined(HAVE_DECL_TCA_STAB_UNSPEC) && HAVE_DECL_TCA_STAB_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TCA_STAB_UNSPEC) || (defined(HAVE_DECL_TCA_STAB_UNSPEC) && HAVE_DECL_TCA_STAB_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STAB_UNSPEC) == (0), "TCA_STAB_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STAB_UNSPEC 0
 #endif
-#if !(defined(TCA_STAB_BASE) || (defined(HAVE_DECL_TCA_STAB_BASE) && HAVE_DECL_TCA_STAB_BASE))
+#if defined(TCA_STAB_BASE) || (defined(HAVE_DECL_TCA_STAB_BASE) && HAVE_DECL_TCA_STAB_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STAB_BASE) == (1), "TCA_STAB_BASE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STAB_BASE 1
 #endif
-#if !(defined(TCA_STAB_DATA) || (defined(HAVE_DECL_TCA_STAB_DATA) && HAVE_DECL_TCA_STAB_DATA))
+#if defined(TCA_STAB_DATA) || (defined(HAVE_DECL_TCA_STAB_DATA) && HAVE_DECL_TCA_STAB_DATA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STAB_DATA) == (2), "TCA_STAB_DATA != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STAB_DATA 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_tca_stab_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_tca_stab_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_tca_stab_attrs[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rtnl_tca_stats_attrs.h b/xlat/rtnl_tca_stats_attrs.h
index 87a7ee4d..6441ede 100644
--- a/xlat/rtnl_tca_stats_attrs.h
+++ b/xlat/rtnl_tca_stats_attrs.h
@@ -1,31 +1,65 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rtnl_tca_stats_attrs.in; do not edit. */
-#if !(defined(TCA_STATS_UNSPEC) || (defined(HAVE_DECL_TCA_STATS_UNSPEC) && HAVE_DECL_TCA_STATS_UNSPEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TCA_STATS_UNSPEC) || (defined(HAVE_DECL_TCA_STATS_UNSPEC) && HAVE_DECL_TCA_STATS_UNSPEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STATS_UNSPEC) == (0), "TCA_STATS_UNSPEC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STATS_UNSPEC 0
 #endif
-#if !(defined(TCA_STATS_BASIC) || (defined(HAVE_DECL_TCA_STATS_BASIC) && HAVE_DECL_TCA_STATS_BASIC))
+#if defined(TCA_STATS_BASIC) || (defined(HAVE_DECL_TCA_STATS_BASIC) && HAVE_DECL_TCA_STATS_BASIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STATS_BASIC) == (1), "TCA_STATS_BASIC != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STATS_BASIC 1
 #endif
-#if !(defined(TCA_STATS_RATE_EST) || (defined(HAVE_DECL_TCA_STATS_RATE_EST) && HAVE_DECL_TCA_STATS_RATE_EST))
+#if defined(TCA_STATS_RATE_EST) || (defined(HAVE_DECL_TCA_STATS_RATE_EST) && HAVE_DECL_TCA_STATS_RATE_EST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STATS_RATE_EST) == (2), "TCA_STATS_RATE_EST != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STATS_RATE_EST 2
 #endif
-#if !(defined(TCA_STATS_QUEUE) || (defined(HAVE_DECL_TCA_STATS_QUEUE) && HAVE_DECL_TCA_STATS_QUEUE))
+#if defined(TCA_STATS_QUEUE) || (defined(HAVE_DECL_TCA_STATS_QUEUE) && HAVE_DECL_TCA_STATS_QUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STATS_QUEUE) == (3), "TCA_STATS_QUEUE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STATS_QUEUE 3
 #endif
-#if !(defined(TCA_STATS_APP) || (defined(HAVE_DECL_TCA_STATS_APP) && HAVE_DECL_TCA_STATS_APP))
+#if defined(TCA_STATS_APP) || (defined(HAVE_DECL_TCA_STATS_APP) && HAVE_DECL_TCA_STATS_APP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STATS_APP) == (4), "TCA_STATS_APP != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STATS_APP 4
 #endif
-#if !(defined(TCA_STATS_RATE_EST64) || (defined(HAVE_DECL_TCA_STATS_RATE_EST64) && HAVE_DECL_TCA_STATS_RATE_EST64))
+#if defined(TCA_STATS_RATE_EST64) || (defined(HAVE_DECL_TCA_STATS_RATE_EST64) && HAVE_DECL_TCA_STATS_RATE_EST64)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STATS_RATE_EST64) == (5), "TCA_STATS_RATE_EST64 != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STATS_RATE_EST64 5
 #endif
-#if !(defined(TCA_STATS_PAD) || (defined(HAVE_DECL_TCA_STATS_PAD) && HAVE_DECL_TCA_STATS_PAD))
+#if defined(TCA_STATS_PAD) || (defined(HAVE_DECL_TCA_STATS_PAD) && HAVE_DECL_TCA_STATS_PAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCA_STATS_PAD) == (6), "TCA_STATS_PAD != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCA_STATS_PAD 6
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rtnl_tca_stats_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rtnl_tca_stats_attrs in mpers mode
+
+# else
 
 static
 const struct xlat rtnl_tca_stats_attrs[] = {
@@ -39,4 +73,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/rwf_flags.h b/xlat/rwf_flags.h
index dee1f8b..9b410e8 100644
--- a/xlat/rwf_flags.h
+++ b/xlat/rwf_flags.h
@@ -1,25 +1,51 @@
 /* Generated by ./xlat/gen.sh from ./xlat/rwf_flags.in; do not edit. */
-#if !(defined(RWF_HIPRI) || (defined(HAVE_DECL_RWF_HIPRI) && HAVE_DECL_RWF_HIPRI))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RWF_HIPRI) || (defined(HAVE_DECL_RWF_HIPRI) && HAVE_DECL_RWF_HIPRI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RWF_HIPRI) == (0x01), "RWF_HIPRI != 0x01");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RWF_HIPRI 0x01
 #endif
-#if !(defined(RWF_DSYNC) || (defined(HAVE_DECL_RWF_DSYNC) && HAVE_DECL_RWF_DSYNC))
+#if defined(RWF_DSYNC) || (defined(HAVE_DECL_RWF_DSYNC) && HAVE_DECL_RWF_DSYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RWF_DSYNC) == (0x02), "RWF_DSYNC != 0x02");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RWF_DSYNC 0x02
 #endif
-#if !(defined(RWF_SYNC) || (defined(HAVE_DECL_RWF_SYNC) && HAVE_DECL_RWF_SYNC))
+#if defined(RWF_SYNC) || (defined(HAVE_DECL_RWF_SYNC) && HAVE_DECL_RWF_SYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RWF_SYNC) == (0x04), "RWF_SYNC != 0x04");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RWF_SYNC 0x04
 #endif
-#if !(defined(RWF_NOWAIT) || (defined(HAVE_DECL_RWF_NOWAIT) && HAVE_DECL_RWF_NOWAIT))
+#if defined(RWF_NOWAIT) || (defined(HAVE_DECL_RWF_NOWAIT) && HAVE_DECL_RWF_NOWAIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RWF_NOWAIT) == (0x08), "RWF_NOWAIT != 0x08");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RWF_NOWAIT 0x08
 #endif
-#if !(defined(RWF_APPEND) || (defined(HAVE_DECL_RWF_APPEND) && HAVE_DECL_RWF_APPEND))
+#if defined(RWF_APPEND) || (defined(HAVE_DECL_RWF_APPEND) && HAVE_DECL_RWF_APPEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RWF_APPEND) == (0x10), "RWF_APPEND != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RWF_APPEND 0x10
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat rwf_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat rwf_flags in mpers mode
+
+# else
 
 static
 const struct xlat rwf_flags[] = {
@@ -31,4 +57,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/s390_guarded_storage_commands.h b/xlat/s390_guarded_storage_commands.h
index d2d0a36..9899819 100644
--- a/xlat/s390_guarded_storage_commands.h
+++ b/xlat/s390_guarded_storage_commands.h
@@ -1,25 +1,51 @@
 /* Generated by ./xlat/gen.sh from ./xlat/s390_guarded_storage_commands.in; do not edit. */
-#if !(defined(GS_ENABLE) || (defined(HAVE_DECL_GS_ENABLE) && HAVE_DECL_GS_ENABLE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(GS_ENABLE) || (defined(HAVE_DECL_GS_ENABLE) && HAVE_DECL_GS_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GS_ENABLE) == (0), "GS_ENABLE != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define GS_ENABLE 0
 #endif
-#if !(defined(GS_DISABLE) || (defined(HAVE_DECL_GS_DISABLE) && HAVE_DECL_GS_DISABLE))
+#if defined(GS_DISABLE) || (defined(HAVE_DECL_GS_DISABLE) && HAVE_DECL_GS_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GS_DISABLE) == (1), "GS_DISABLE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define GS_DISABLE 1
 #endif
-#if !(defined(GS_SET_BC_CB) || (defined(HAVE_DECL_GS_SET_BC_CB) && HAVE_DECL_GS_SET_BC_CB))
+#if defined(GS_SET_BC_CB) || (defined(HAVE_DECL_GS_SET_BC_CB) && HAVE_DECL_GS_SET_BC_CB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GS_SET_BC_CB) == (2), "GS_SET_BC_CB != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define GS_SET_BC_CB 2
 #endif
-#if !(defined(GS_CLEAR_BC_CB) || (defined(HAVE_DECL_GS_CLEAR_BC_CB) && HAVE_DECL_GS_CLEAR_BC_CB))
+#if defined(GS_CLEAR_BC_CB) || (defined(HAVE_DECL_GS_CLEAR_BC_CB) && HAVE_DECL_GS_CLEAR_BC_CB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GS_CLEAR_BC_CB) == (3), "GS_CLEAR_BC_CB != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define GS_CLEAR_BC_CB 3
 #endif
-#if !(defined(GS_BROADCAST) || (defined(HAVE_DECL_GS_BROADCAST) && HAVE_DECL_GS_BROADCAST))
+#if defined(GS_BROADCAST) || (defined(HAVE_DECL_GS_BROADCAST) && HAVE_DECL_GS_BROADCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GS_BROADCAST) == (4), "GS_BROADCAST != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define GS_BROADCAST 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat s390_guarded_storage_commands in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat s390_guarded_storage_commands in mpers mode
+
+# else
 
 static
 const struct xlat s390_guarded_storage_commands[] = {
@@ -31,4 +57,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/s390_runtime_instr_commands.h b/xlat/s390_runtime_instr_commands.h
index 5d4aefd..a33a97f 100644
--- a/xlat/s390_runtime_instr_commands.h
+++ b/xlat/s390_runtime_instr_commands.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/s390_runtime_instr_commands.in; do not edit. */
-#if !(defined(S390_RUNTIME_INSTR_START) || (defined(HAVE_DECL_S390_RUNTIME_INSTR_START) && HAVE_DECL_S390_RUNTIME_INSTR_START))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(S390_RUNTIME_INSTR_START) || (defined(HAVE_DECL_S390_RUNTIME_INSTR_START) && HAVE_DECL_S390_RUNTIME_INSTR_START)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((S390_RUNTIME_INSTR_START) == (0x1), "S390_RUNTIME_INSTR_START != 0x1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define S390_RUNTIME_INSTR_START 0x1
 #endif
-#if !(defined(S390_RUNTIME_INSTR_STOP) || (defined(HAVE_DECL_S390_RUNTIME_INSTR_STOP) && HAVE_DECL_S390_RUNTIME_INSTR_STOP))
+#if defined(S390_RUNTIME_INSTR_STOP) || (defined(HAVE_DECL_S390_RUNTIME_INSTR_STOP) && HAVE_DECL_S390_RUNTIME_INSTR_STOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((S390_RUNTIME_INSTR_STOP) == (0x2), "S390_RUNTIME_INSTR_STOP != 0x2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define S390_RUNTIME_INSTR_STOP 0x2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat s390_runtime_instr_commands in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat s390_runtime_instr_commands in mpers mode
+
+# else
 
 static
 const struct xlat s390_runtime_instr_commands[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/s390_sthyi_function_codes.h b/xlat/s390_sthyi_function_codes.h
index d82b93c..df04b30 100644
--- a/xlat/s390_sthyi_function_codes.h
+++ b/xlat/s390_sthyi_function_codes.h
@@ -1,13 +1,23 @@
 /* Generated by ./xlat/gen.sh from ./xlat/s390_sthyi_function_codes.in; do not edit. */
-#if !(defined(STHYI_FC_CP_IFL_CAP) || (defined(HAVE_DECL_STHYI_FC_CP_IFL_CAP) && HAVE_DECL_STHYI_FC_CP_IFL_CAP))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(STHYI_FC_CP_IFL_CAP) || (defined(HAVE_DECL_STHYI_FC_CP_IFL_CAP) && HAVE_DECL_STHYI_FC_CP_IFL_CAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STHYI_FC_CP_IFL_CAP) == (0), "STHYI_FC_CP_IFL_CAP != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STHYI_FC_CP_IFL_CAP 0
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat s390_sthyi_function_codes in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat s390_sthyi_function_codes in mpers mode
+
+# else
 
 static
 const struct xlat s390_sthyi_function_codes[] = {
@@ -15,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sa_handler_values.h b/xlat/sa_handler_values.h
index 3d7da04..796e4b7 100644
--- a/xlat/sa_handler_values.h
+++ b/xlat/sa_handler_values.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sa_handler_values.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sa_handler_values in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sa_handler_values in mpers mode
+
+# else
 
 static
 const struct xlat sa_handler_values[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sched_flags.h b/xlat/sched_flags.h
index d087e15..759994f 100644
--- a/xlat/sched_flags.h
+++ b/xlat/sched_flags.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sched_flags.in; do not edit. */
-#if !(defined(SCHED_FLAG_RESET_ON_FORK) || (defined(HAVE_DECL_SCHED_FLAG_RESET_ON_FORK) && HAVE_DECL_SCHED_FLAG_RESET_ON_FORK))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SCHED_FLAG_RESET_ON_FORK) || (defined(HAVE_DECL_SCHED_FLAG_RESET_ON_FORK) && HAVE_DECL_SCHED_FLAG_RESET_ON_FORK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCHED_FLAG_RESET_ON_FORK) == (1), "SCHED_FLAG_RESET_ON_FORK != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SCHED_FLAG_RESET_ON_FORK 1
 #endif
-#if !(defined(SCHED_FLAG_RECLAIM) || (defined(HAVE_DECL_SCHED_FLAG_RECLAIM) && HAVE_DECL_SCHED_FLAG_RECLAIM))
+#if defined(SCHED_FLAG_RECLAIM) || (defined(HAVE_DECL_SCHED_FLAG_RECLAIM) && HAVE_DECL_SCHED_FLAG_RECLAIM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCHED_FLAG_RECLAIM) == (2), "SCHED_FLAG_RECLAIM != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SCHED_FLAG_RECLAIM 2
 #endif
-#if !(defined(SCHED_FLAG_DL_OVERRUN) || (defined(HAVE_DECL_SCHED_FLAG_DL_OVERRUN) && HAVE_DECL_SCHED_FLAG_DL_OVERRUN))
+#if defined(SCHED_FLAG_DL_OVERRUN) || (defined(HAVE_DECL_SCHED_FLAG_DL_OVERRUN) && HAVE_DECL_SCHED_FLAG_DL_OVERRUN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCHED_FLAG_DL_OVERRUN) == (4), "SCHED_FLAG_DL_OVERRUN != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SCHED_FLAG_DL_OVERRUN 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat sched_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat sched_flags in mpers mode
+
+# else
 
 static
 const struct xlat sched_flags[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/schedulers.h b/xlat/schedulers.h
index 099db27..2ce324f 100644
--- a/xlat/schedulers.h
+++ b/xlat/schedulers.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/schedulers.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat schedulers in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat schedulers in mpers mode
+
+# else
 
 static
 const struct xlat schedulers[] = {
@@ -32,4 +38,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/scmvals.h b/xlat/scmvals.h
index da66af7..ed142cb 100644
--- a/xlat/scmvals.h
+++ b/xlat/scmvals.h
@@ -1,11 +1,27 @@
 /* Generated by ./xlat/gen.sh from ./xlat/scmvals.in; do not edit. */
-#if !(defined(SCM_RIGHTS) || (defined(HAVE_DECL_SCM_RIGHTS) && HAVE_DECL_SCM_RIGHTS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SCM_RIGHTS) || (defined(HAVE_DECL_SCM_RIGHTS) && HAVE_DECL_SCM_RIGHTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCM_RIGHTS) == (1), "SCM_RIGHTS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SCM_RIGHTS 1
 #endif
-#if !(defined(SCM_CREDENTIALS) || (defined(HAVE_DECL_SCM_CREDENTIALS) && HAVE_DECL_SCM_CREDENTIALS))
+#if defined(SCM_CREDENTIALS) || (defined(HAVE_DECL_SCM_CREDENTIALS) && HAVE_DECL_SCM_CREDENTIALS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCM_CREDENTIALS) == (2), "SCM_CREDENTIALS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SCM_CREDENTIALS 2
 #endif
-#if !(defined(SCM_SECURITY) || (defined(HAVE_DECL_SCM_SECURITY) && HAVE_DECL_SCM_SECURITY))
+#if defined(SCM_SECURITY) || (defined(HAVE_DECL_SCM_SECURITY) && HAVE_DECL_SCM_SECURITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCM_SECURITY) == (3), "SCM_SECURITY != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SCM_SECURITY 3
 #endif
 #ifndef SCM_TIMESTAMP
@@ -63,11 +79,13 @@
 # endif
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat scmvals in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat scmvals in mpers mode
+
+# else
 
 static
 const struct xlat scmvals[] = {
@@ -155,4 +173,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/scsi_sg_commands.h b/xlat/scsi_sg_commands.h
index 6ccafbc..b274b22 100644
--- a/xlat/scsi_sg_commands.h
+++ b/xlat/scsi_sg_commands.h
@@ -1,76 +1,180 @@
 /* Generated by ./xlat/gen.sh from ./xlat/scsi_sg_commands.in; do not edit. */
-#if !(defined(SG_SET_TIMEOUT) || (defined(HAVE_DECL_SG_SET_TIMEOUT) && HAVE_DECL_SG_SET_TIMEOUT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SG_SET_TIMEOUT) || (defined(HAVE_DECL_SG_SET_TIMEOUT) && HAVE_DECL_SG_SET_TIMEOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SET_TIMEOUT) == (0x2201), "SG_SET_TIMEOUT != 0x2201");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SET_TIMEOUT 0x2201
 #endif
-#if !(defined(SG_GET_TIMEOUT) || (defined(HAVE_DECL_SG_GET_TIMEOUT) && HAVE_DECL_SG_GET_TIMEOUT))
+#if defined(SG_GET_TIMEOUT) || (defined(HAVE_DECL_SG_GET_TIMEOUT) && HAVE_DECL_SG_GET_TIMEOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_TIMEOUT) == (0x2202), "SG_GET_TIMEOUT != 0x2202");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_TIMEOUT 0x2202
 #endif
-#if !(defined(SG_EMULATED_HOST) || (defined(HAVE_DECL_SG_EMULATED_HOST) && HAVE_DECL_SG_EMULATED_HOST))
+#if defined(SG_EMULATED_HOST) || (defined(HAVE_DECL_SG_EMULATED_HOST) && HAVE_DECL_SG_EMULATED_HOST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_EMULATED_HOST) == (0x2203), "SG_EMULATED_HOST != 0x2203");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_EMULATED_HOST 0x2203
 #endif
-#if !(defined(SG_SET_TRANSFORM) || (defined(HAVE_DECL_SG_SET_TRANSFORM) && HAVE_DECL_SG_SET_TRANSFORM))
+#if defined(SG_SET_TRANSFORM) || (defined(HAVE_DECL_SG_SET_TRANSFORM) && HAVE_DECL_SG_SET_TRANSFORM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SET_TRANSFORM) == (0x2204), "SG_SET_TRANSFORM != 0x2204");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SET_TRANSFORM 0x2204
 #endif
-#if !(defined(SG_GET_TRANSFORM) || (defined(HAVE_DECL_SG_GET_TRANSFORM) && HAVE_DECL_SG_GET_TRANSFORM))
+#if defined(SG_GET_TRANSFORM) || (defined(HAVE_DECL_SG_GET_TRANSFORM) && HAVE_DECL_SG_GET_TRANSFORM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_TRANSFORM) == (0x2205), "SG_GET_TRANSFORM != 0x2205");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_TRANSFORM 0x2205
 #endif
-#if !(defined(SG_GET_COMMAND_Q) || (defined(HAVE_DECL_SG_GET_COMMAND_Q) && HAVE_DECL_SG_GET_COMMAND_Q))
+#if defined(SG_GET_COMMAND_Q) || (defined(HAVE_DECL_SG_GET_COMMAND_Q) && HAVE_DECL_SG_GET_COMMAND_Q)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_COMMAND_Q) == (0x2270), "SG_GET_COMMAND_Q != 0x2270");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_COMMAND_Q 0x2270
 #endif
-#if !(defined(SG_SET_COMMAND_Q) || (defined(HAVE_DECL_SG_SET_COMMAND_Q) && HAVE_DECL_SG_SET_COMMAND_Q))
+#if defined(SG_SET_COMMAND_Q) || (defined(HAVE_DECL_SG_SET_COMMAND_Q) && HAVE_DECL_SG_SET_COMMAND_Q)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SET_COMMAND_Q) == (0x2271), "SG_SET_COMMAND_Q != 0x2271");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SET_COMMAND_Q 0x2271
 #endif
-#if !(defined(SG_GET_RESERVED_SIZE) || (defined(HAVE_DECL_SG_GET_RESERVED_SIZE) && HAVE_DECL_SG_GET_RESERVED_SIZE))
+#if defined(SG_GET_RESERVED_SIZE) || (defined(HAVE_DECL_SG_GET_RESERVED_SIZE) && HAVE_DECL_SG_GET_RESERVED_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_RESERVED_SIZE) == (0x2272), "SG_GET_RESERVED_SIZE != 0x2272");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_RESERVED_SIZE 0x2272
 #endif
-#if !(defined(SG_SET_RESERVED_SIZE) || (defined(HAVE_DECL_SG_SET_RESERVED_SIZE) && HAVE_DECL_SG_SET_RESERVED_SIZE))
+#if defined(SG_SET_RESERVED_SIZE) || (defined(HAVE_DECL_SG_SET_RESERVED_SIZE) && HAVE_DECL_SG_SET_RESERVED_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SET_RESERVED_SIZE) == (0x2275), "SG_SET_RESERVED_SIZE != 0x2275");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SET_RESERVED_SIZE 0x2275
 #endif
-#if !(defined(SG_GET_SCSI_ID) || (defined(HAVE_DECL_SG_GET_SCSI_ID) && HAVE_DECL_SG_GET_SCSI_ID))
+#if defined(SG_GET_SCSI_ID) || (defined(HAVE_DECL_SG_GET_SCSI_ID) && HAVE_DECL_SG_GET_SCSI_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_SCSI_ID) == (0x2276), "SG_GET_SCSI_ID != 0x2276");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_SCSI_ID 0x2276
 #endif
-#if !(defined(SG_SET_FORCE_LOW_DMA) || (defined(HAVE_DECL_SG_SET_FORCE_LOW_DMA) && HAVE_DECL_SG_SET_FORCE_LOW_DMA))
+#if defined(SG_SET_FORCE_LOW_DMA) || (defined(HAVE_DECL_SG_SET_FORCE_LOW_DMA) && HAVE_DECL_SG_SET_FORCE_LOW_DMA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SET_FORCE_LOW_DMA) == (0x2279), "SG_SET_FORCE_LOW_DMA != 0x2279");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SET_FORCE_LOW_DMA 0x2279
 #endif
-#if !(defined(SG_GET_LOW_DMA) || (defined(HAVE_DECL_SG_GET_LOW_DMA) && HAVE_DECL_SG_GET_LOW_DMA))
+#if defined(SG_GET_LOW_DMA) || (defined(HAVE_DECL_SG_GET_LOW_DMA) && HAVE_DECL_SG_GET_LOW_DMA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_LOW_DMA) == (0x227a), "SG_GET_LOW_DMA != 0x227a");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_LOW_DMA 0x227a
 #endif
-#if !(defined(SG_SET_FORCE_PACK_ID) || (defined(HAVE_DECL_SG_SET_FORCE_PACK_ID) && HAVE_DECL_SG_SET_FORCE_PACK_ID))
+#if defined(SG_SET_FORCE_PACK_ID) || (defined(HAVE_DECL_SG_SET_FORCE_PACK_ID) && HAVE_DECL_SG_SET_FORCE_PACK_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SET_FORCE_PACK_ID) == (0x227b), "SG_SET_FORCE_PACK_ID != 0x227b");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SET_FORCE_PACK_ID 0x227b
 #endif
-#if !(defined(SG_GET_PACK_ID) || (defined(HAVE_DECL_SG_GET_PACK_ID) && HAVE_DECL_SG_GET_PACK_ID))
+#if defined(SG_GET_PACK_ID) || (defined(HAVE_DECL_SG_GET_PACK_ID) && HAVE_DECL_SG_GET_PACK_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_PACK_ID) == (0x227c), "SG_GET_PACK_ID != 0x227c");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_PACK_ID 0x227c
 #endif
-#if !(defined(SG_GET_NUM_WAITING) || (defined(HAVE_DECL_SG_GET_NUM_WAITING) && HAVE_DECL_SG_GET_NUM_WAITING))
+#if defined(SG_GET_NUM_WAITING) || (defined(HAVE_DECL_SG_GET_NUM_WAITING) && HAVE_DECL_SG_GET_NUM_WAITING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_NUM_WAITING) == (0x227d), "SG_GET_NUM_WAITING != 0x227d");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_NUM_WAITING 0x227d
 #endif
-#if !(defined(SG_SET_DEBUG) || (defined(HAVE_DECL_SG_SET_DEBUG) && HAVE_DECL_SG_SET_DEBUG))
+#if defined(SG_SET_DEBUG) || (defined(HAVE_DECL_SG_SET_DEBUG) && HAVE_DECL_SG_SET_DEBUG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SET_DEBUG) == (0x227e), "SG_SET_DEBUG != 0x227e");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SET_DEBUG 0x227e
 #endif
-#if !(defined(SG_GET_SG_TABLESIZE) || (defined(HAVE_DECL_SG_GET_SG_TABLESIZE) && HAVE_DECL_SG_GET_SG_TABLESIZE))
+#if defined(SG_GET_SG_TABLESIZE) || (defined(HAVE_DECL_SG_GET_SG_TABLESIZE) && HAVE_DECL_SG_GET_SG_TABLESIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_SG_TABLESIZE) == (0x227F), "SG_GET_SG_TABLESIZE != 0x227F");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_SG_TABLESIZE 0x227F
 #endif
-#if !(defined(SG_GET_VERSION_NUM) || (defined(HAVE_DECL_SG_GET_VERSION_NUM) && HAVE_DECL_SG_GET_VERSION_NUM))
+#if defined(SG_GET_VERSION_NUM) || (defined(HAVE_DECL_SG_GET_VERSION_NUM) && HAVE_DECL_SG_GET_VERSION_NUM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_VERSION_NUM) == (0x2282), "SG_GET_VERSION_NUM != 0x2282");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_VERSION_NUM 0x2282
 #endif
-#if !(defined(SG_NEXT_CMD_LEN) || (defined(HAVE_DECL_SG_NEXT_CMD_LEN) && HAVE_DECL_SG_NEXT_CMD_LEN))
+#if defined(SG_NEXT_CMD_LEN) || (defined(HAVE_DECL_SG_NEXT_CMD_LEN) && HAVE_DECL_SG_NEXT_CMD_LEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_NEXT_CMD_LEN) == (0x2283), "SG_NEXT_CMD_LEN != 0x2283");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_NEXT_CMD_LEN 0x2283
 #endif
-#if !(defined(SG_SCSI_RESET) || (defined(HAVE_DECL_SG_SCSI_RESET) && HAVE_DECL_SG_SCSI_RESET))
+#if defined(SG_SCSI_RESET) || (defined(HAVE_DECL_SG_SCSI_RESET) && HAVE_DECL_SG_SCSI_RESET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SCSI_RESET) == (0x2284), "SG_SCSI_RESET != 0x2284");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SCSI_RESET 0x2284
 #endif
-#if !(defined(SG_IO) || (defined(HAVE_DECL_SG_IO) && HAVE_DECL_SG_IO))
+#if defined(SG_IO) || (defined(HAVE_DECL_SG_IO) && HAVE_DECL_SG_IO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_IO) == (0x2285), "SG_IO != 0x2285");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_IO 0x2285
 #endif
-#if !(defined(SG_GET_REQUEST_TABLE) || (defined(HAVE_DECL_SG_GET_REQUEST_TABLE) && HAVE_DECL_SG_GET_REQUEST_TABLE))
+#if defined(SG_GET_REQUEST_TABLE) || (defined(HAVE_DECL_SG_GET_REQUEST_TABLE) && HAVE_DECL_SG_GET_REQUEST_TABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_REQUEST_TABLE) == (0x2286), "SG_GET_REQUEST_TABLE != 0x2286");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_REQUEST_TABLE 0x2286
 #endif
-#if !(defined(SG_SET_KEEP_ORPHAN) || (defined(HAVE_DECL_SG_SET_KEEP_ORPHAN) && HAVE_DECL_SG_SET_KEEP_ORPHAN))
+#if defined(SG_SET_KEEP_ORPHAN) || (defined(HAVE_DECL_SG_SET_KEEP_ORPHAN) && HAVE_DECL_SG_SET_KEEP_ORPHAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SET_KEEP_ORPHAN) == (0x2287), "SG_SET_KEEP_ORPHAN != 0x2287");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SET_KEEP_ORPHAN 0x2287
 #endif
-#if !(defined(SG_GET_KEEP_ORPHAN) || (defined(HAVE_DECL_SG_GET_KEEP_ORPHAN) && HAVE_DECL_SG_GET_KEEP_ORPHAN))
+#if defined(SG_GET_KEEP_ORPHAN) || (defined(HAVE_DECL_SG_GET_KEEP_ORPHAN) && HAVE_DECL_SG_GET_KEEP_ORPHAN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_KEEP_ORPHAN) == (0x2288), "SG_GET_KEEP_ORPHAN != 0x2288");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_KEEP_ORPHAN 0x2288
 #endif
-#if !(defined(SG_GET_ACCESS_COUNT) || (defined(HAVE_DECL_SG_GET_ACCESS_COUNT) && HAVE_DECL_SG_GET_ACCESS_COUNT))
+#if defined(SG_GET_ACCESS_COUNT) || (defined(HAVE_DECL_SG_GET_ACCESS_COUNT) && HAVE_DECL_SG_GET_ACCESS_COUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_GET_ACCESS_COUNT) == (0x2289), "SG_GET_ACCESS_COUNT != 0x2289");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_GET_ACCESS_COUNT 0x2289
 #endif
diff --git a/xlat/secbits.h b/xlat/secbits.h
index d616e1f..5058930 100644
--- a/xlat/secbits.h
+++ b/xlat/secbits.h
@@ -1,34 +1,72 @@
 /* Generated by ./xlat/gen.sh from ./xlat/secbits.in; do not edit. */
-#if !(defined(SECBIT_NOROOT) || (defined(HAVE_DECL_SECBIT_NOROOT) && HAVE_DECL_SECBIT_NOROOT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SECBIT_NOROOT) || (defined(HAVE_DECL_SECBIT_NOROOT) && HAVE_DECL_SECBIT_NOROOT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECBIT_NOROOT) == ((1 << 0)), "SECBIT_NOROOT != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECBIT_NOROOT (1 << 0)
 #endif
-#if !(defined(SECBIT_NOROOT_LOCKED) || (defined(HAVE_DECL_SECBIT_NOROOT_LOCKED) && HAVE_DECL_SECBIT_NOROOT_LOCKED))
+#if defined(SECBIT_NOROOT_LOCKED) || (defined(HAVE_DECL_SECBIT_NOROOT_LOCKED) && HAVE_DECL_SECBIT_NOROOT_LOCKED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECBIT_NOROOT_LOCKED) == ((1 << 1)), "SECBIT_NOROOT_LOCKED != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECBIT_NOROOT_LOCKED (1 << 1)
 #endif
-#if !(defined(SECBIT_NO_SETUID_FIXUP) || (defined(HAVE_DECL_SECBIT_NO_SETUID_FIXUP) && HAVE_DECL_SECBIT_NO_SETUID_FIXUP))
+#if defined(SECBIT_NO_SETUID_FIXUP) || (defined(HAVE_DECL_SECBIT_NO_SETUID_FIXUP) && HAVE_DECL_SECBIT_NO_SETUID_FIXUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECBIT_NO_SETUID_FIXUP) == ((1 << 2)), "SECBIT_NO_SETUID_FIXUP != (1 << 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECBIT_NO_SETUID_FIXUP (1 << 2)
 #endif
-#if !(defined(SECBIT_NO_SETUID_FIXUP_LOCKED) || (defined(HAVE_DECL_SECBIT_NO_SETUID_FIXUP_LOCKED) && HAVE_DECL_SECBIT_NO_SETUID_FIXUP_LOCKED))
+#if defined(SECBIT_NO_SETUID_FIXUP_LOCKED) || (defined(HAVE_DECL_SECBIT_NO_SETUID_FIXUP_LOCKED) && HAVE_DECL_SECBIT_NO_SETUID_FIXUP_LOCKED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECBIT_NO_SETUID_FIXUP_LOCKED) == ((1 << 3)), "SECBIT_NO_SETUID_FIXUP_LOCKED != (1 << 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECBIT_NO_SETUID_FIXUP_LOCKED (1 << 3)
 #endif
-#if !(defined(SECBIT_KEEP_CAPS) || (defined(HAVE_DECL_SECBIT_KEEP_CAPS) && HAVE_DECL_SECBIT_KEEP_CAPS))
+#if defined(SECBIT_KEEP_CAPS) || (defined(HAVE_DECL_SECBIT_KEEP_CAPS) && HAVE_DECL_SECBIT_KEEP_CAPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECBIT_KEEP_CAPS) == ((1 << 4)), "SECBIT_KEEP_CAPS != (1 << 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECBIT_KEEP_CAPS (1 << 4)
 #endif
-#if !(defined(SECBIT_KEEP_CAPS_LOCKED) || (defined(HAVE_DECL_SECBIT_KEEP_CAPS_LOCKED) && HAVE_DECL_SECBIT_KEEP_CAPS_LOCKED))
+#if defined(SECBIT_KEEP_CAPS_LOCKED) || (defined(HAVE_DECL_SECBIT_KEEP_CAPS_LOCKED) && HAVE_DECL_SECBIT_KEEP_CAPS_LOCKED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECBIT_KEEP_CAPS_LOCKED) == ((1 << 5)), "SECBIT_KEEP_CAPS_LOCKED != (1 << 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECBIT_KEEP_CAPS_LOCKED (1 << 5)
 #endif
-#if !(defined(SECBIT_NO_CAP_AMBIENT_RAISE) || (defined(HAVE_DECL_SECBIT_NO_CAP_AMBIENT_RAISE) && HAVE_DECL_SECBIT_NO_CAP_AMBIENT_RAISE))
+#if defined(SECBIT_NO_CAP_AMBIENT_RAISE) || (defined(HAVE_DECL_SECBIT_NO_CAP_AMBIENT_RAISE) && HAVE_DECL_SECBIT_NO_CAP_AMBIENT_RAISE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECBIT_NO_CAP_AMBIENT_RAISE) == ((1 << 6)), "SECBIT_NO_CAP_AMBIENT_RAISE != (1 << 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECBIT_NO_CAP_AMBIENT_RAISE (1 << 6)
 #endif
-#if !(defined(SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED) || (defined(HAVE_DECL_SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED) && HAVE_DECL_SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED))
+#if defined(SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED) || (defined(HAVE_DECL_SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED) && HAVE_DECL_SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED) == ((1 << 7)), "SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED != (1 << 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED (1 << 7)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat secbits in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat secbits in mpers mode
+
+# else
 
 static
 const struct xlat secbits[] = {
@@ -43,4 +81,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/seccomp_filter_flags.h b/xlat/seccomp_filter_flags.h
index e9801d7..c670e60 100644
--- a/xlat/seccomp_filter_flags.h
+++ b/xlat/seccomp_filter_flags.h
@@ -1,17 +1,41 @@
 /* Generated by ./xlat/gen.sh from ./xlat/seccomp_filter_flags.in; do not edit. */
-#if !(defined(SECCOMP_FILTER_FLAG_TSYNC) || (defined(HAVE_DECL_SECCOMP_FILTER_FLAG_TSYNC) && HAVE_DECL_SECCOMP_FILTER_FLAG_TSYNC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SECCOMP_FILTER_FLAG_TSYNC) || (defined(HAVE_DECL_SECCOMP_FILTER_FLAG_TSYNC) && HAVE_DECL_SECCOMP_FILTER_FLAG_TSYNC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_FILTER_FLAG_TSYNC) == (1), "SECCOMP_FILTER_FLAG_TSYNC != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_FILTER_FLAG_TSYNC 1
 #endif
-#if !(defined(SECCOMP_FILTER_FLAG_LOG) || (defined(HAVE_DECL_SECCOMP_FILTER_FLAG_LOG) && HAVE_DECL_SECCOMP_FILTER_FLAG_LOG))
+#if defined(SECCOMP_FILTER_FLAG_LOG) || (defined(HAVE_DECL_SECCOMP_FILTER_FLAG_LOG) && HAVE_DECL_SECCOMP_FILTER_FLAG_LOG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_FILTER_FLAG_LOG) == (2), "SECCOMP_FILTER_FLAG_LOG != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_FILTER_FLAG_LOG 2
 #endif
+#if defined(SECCOMP_FILTER_FLAG_SPEC_ALLOW) || (defined(HAVE_DECL_SECCOMP_FILTER_FLAG_SPEC_ALLOW) && HAVE_DECL_SECCOMP_FILTER_FLAG_SPEC_ALLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_FILTER_FLAG_SPEC_ALLOW) == (4), "SECCOMP_FILTER_FLAG_SPEC_ALLOW != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SECCOMP_FILTER_FLAG_SPEC_ALLOW 4
+#endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat seccomp_filter_flags[] = {
  XLAT(SECCOMP_FILTER_FLAG_TSYNC),
  XLAT(SECCOMP_FILTER_FLAG_LOG),
+ XLAT(SECCOMP_FILTER_FLAG_SPEC_ALLOW),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/seccomp_filter_flags.in b/xlat/seccomp_filter_flags.in
index 439f381..be2dab8 100644
--- a/xlat/seccomp_filter_flags.in
+++ b/xlat/seccomp_filter_flags.in
@@ -1,2 +1,3 @@
 SECCOMP_FILTER_FLAG_TSYNC 1
 SECCOMP_FILTER_FLAG_LOG 2
+SECCOMP_FILTER_FLAG_SPEC_ALLOW 4
diff --git a/xlat/seccomp_mode.h b/xlat/seccomp_mode.h
index 842dd44..bb5200f 100644
--- a/xlat/seccomp_mode.h
+++ b/xlat/seccomp_mode.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/seccomp_mode.in; do not edit. */
-#if !(defined(SECCOMP_MODE_DISABLED) || (defined(HAVE_DECL_SECCOMP_MODE_DISABLED) && HAVE_DECL_SECCOMP_MODE_DISABLED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SECCOMP_MODE_DISABLED) || (defined(HAVE_DECL_SECCOMP_MODE_DISABLED) && HAVE_DECL_SECCOMP_MODE_DISABLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_MODE_DISABLED) == (0), "SECCOMP_MODE_DISABLED != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_MODE_DISABLED 0
 #endif
-#if !(defined(SECCOMP_MODE_STRICT) || (defined(HAVE_DECL_SECCOMP_MODE_STRICT) && HAVE_DECL_SECCOMP_MODE_STRICT))
+#if defined(SECCOMP_MODE_STRICT) || (defined(HAVE_DECL_SECCOMP_MODE_STRICT) && HAVE_DECL_SECCOMP_MODE_STRICT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_MODE_STRICT) == (1), "SECCOMP_MODE_STRICT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_MODE_STRICT 1
 #endif
-#if !(defined(SECCOMP_MODE_FILTER) || (defined(HAVE_DECL_SECCOMP_MODE_FILTER) && HAVE_DECL_SECCOMP_MODE_FILTER))
+#if defined(SECCOMP_MODE_FILTER) || (defined(HAVE_DECL_SECCOMP_MODE_FILTER) && HAVE_DECL_SECCOMP_MODE_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_MODE_FILTER) == (2), "SECCOMP_MODE_FILTER != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_MODE_FILTER 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat seccomp_mode in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat seccomp_mode in mpers mode
+
+# else
 
 static
 const struct xlat seccomp_mode[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/seccomp_ops.h b/xlat/seccomp_ops.h
index b6f0e2a..67e62c2 100644
--- a/xlat/seccomp_ops.h
+++ b/xlat/seccomp_ops.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/seccomp_ops.in; do not edit. */
-#if !(defined(SECCOMP_SET_MODE_STRICT) || (defined(HAVE_DECL_SECCOMP_SET_MODE_STRICT) && HAVE_DECL_SECCOMP_SET_MODE_STRICT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SECCOMP_SET_MODE_STRICT) || (defined(HAVE_DECL_SECCOMP_SET_MODE_STRICT) && HAVE_DECL_SECCOMP_SET_MODE_STRICT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_SET_MODE_STRICT) == (0), "SECCOMP_SET_MODE_STRICT != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_SET_MODE_STRICT 0
 #endif
-#if !(defined(SECCOMP_SET_MODE_FILTER) || (defined(HAVE_DECL_SECCOMP_SET_MODE_FILTER) && HAVE_DECL_SECCOMP_SET_MODE_FILTER))
+#if defined(SECCOMP_SET_MODE_FILTER) || (defined(HAVE_DECL_SECCOMP_SET_MODE_FILTER) && HAVE_DECL_SECCOMP_SET_MODE_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_SET_MODE_FILTER) == (1), "SECCOMP_SET_MODE_FILTER != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_SET_MODE_FILTER 1
 #endif
-#if !(defined(SECCOMP_GET_ACTION_AVAIL) || (defined(HAVE_DECL_SECCOMP_GET_ACTION_AVAIL) && HAVE_DECL_SECCOMP_GET_ACTION_AVAIL))
+#if defined(SECCOMP_GET_ACTION_AVAIL) || (defined(HAVE_DECL_SECCOMP_GET_ACTION_AVAIL) && HAVE_DECL_SECCOMP_GET_ACTION_AVAIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_GET_ACTION_AVAIL) == (2), "SECCOMP_GET_ACTION_AVAIL != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_GET_ACTION_AVAIL 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat seccomp_ops in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat seccomp_ops in mpers mode
+
+# else
 
 static
 const struct xlat seccomp_ops[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/seccomp_ret_action.h b/xlat/seccomp_ret_action.h
index 7937641..21a14cd 100644
--- a/xlat/seccomp_ret_action.h
+++ b/xlat/seccomp_ret_action.h
@@ -1,27 +1,61 @@
 /* Generated by ./xlat/gen.sh from ./xlat/seccomp_ret_action.in; do not edit. */
-#if !(defined(SECCOMP_RET_KILL_PROCESS) || (defined(HAVE_DECL_SECCOMP_RET_KILL_PROCESS) && HAVE_DECL_SECCOMP_RET_KILL_PROCESS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SECCOMP_RET_KILL_PROCESS) || (defined(HAVE_DECL_SECCOMP_RET_KILL_PROCESS) && HAVE_DECL_SECCOMP_RET_KILL_PROCESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_RET_KILL_PROCESS) == (0x80000000U), "SECCOMP_RET_KILL_PROCESS != 0x80000000U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_RET_KILL_PROCESS 0x80000000U
 #endif
-#if !(defined(SECCOMP_RET_KILL_THREAD) || (defined(HAVE_DECL_SECCOMP_RET_KILL_THREAD) && HAVE_DECL_SECCOMP_RET_KILL_THREAD))
+#if defined(SECCOMP_RET_KILL_THREAD) || (defined(HAVE_DECL_SECCOMP_RET_KILL_THREAD) && HAVE_DECL_SECCOMP_RET_KILL_THREAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_RET_KILL_THREAD) == (0), "SECCOMP_RET_KILL_THREAD != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_RET_KILL_THREAD 0
 #endif
-#if !(defined(SECCOMP_RET_TRAP) || (defined(HAVE_DECL_SECCOMP_RET_TRAP) && HAVE_DECL_SECCOMP_RET_TRAP))
+#if defined(SECCOMP_RET_TRAP) || (defined(HAVE_DECL_SECCOMP_RET_TRAP) && HAVE_DECL_SECCOMP_RET_TRAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_RET_TRAP) == (0x00030000U), "SECCOMP_RET_TRAP != 0x00030000U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_RET_TRAP 0x00030000U
 #endif
-#if !(defined(SECCOMP_RET_ERRNO) || (defined(HAVE_DECL_SECCOMP_RET_ERRNO) && HAVE_DECL_SECCOMP_RET_ERRNO))
+#if defined(SECCOMP_RET_ERRNO) || (defined(HAVE_DECL_SECCOMP_RET_ERRNO) && HAVE_DECL_SECCOMP_RET_ERRNO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_RET_ERRNO) == (0x00050000U), "SECCOMP_RET_ERRNO != 0x00050000U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_RET_ERRNO 0x00050000U
 #endif
-#if !(defined(SECCOMP_RET_TRACE) || (defined(HAVE_DECL_SECCOMP_RET_TRACE) && HAVE_DECL_SECCOMP_RET_TRACE))
+#if defined(SECCOMP_RET_TRACE) || (defined(HAVE_DECL_SECCOMP_RET_TRACE) && HAVE_DECL_SECCOMP_RET_TRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_RET_TRACE) == (0x7ff00000U), "SECCOMP_RET_TRACE != 0x7ff00000U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_RET_TRACE 0x7ff00000U
 #endif
-#if !(defined(SECCOMP_RET_LOG) || (defined(HAVE_DECL_SECCOMP_RET_LOG) && HAVE_DECL_SECCOMP_RET_LOG))
+#if defined(SECCOMP_RET_LOG) || (defined(HAVE_DECL_SECCOMP_RET_LOG) && HAVE_DECL_SECCOMP_RET_LOG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_RET_LOG) == (0x7ffc0000U), "SECCOMP_RET_LOG != 0x7ffc0000U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_RET_LOG 0x7ffc0000U
 #endif
-#if !(defined(SECCOMP_RET_ALLOW) || (defined(HAVE_DECL_SECCOMP_RET_ALLOW) && HAVE_DECL_SECCOMP_RET_ALLOW))
+#if defined(SECCOMP_RET_ALLOW) || (defined(HAVE_DECL_SECCOMP_RET_ALLOW) && HAVE_DECL_SECCOMP_RET_ALLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SECCOMP_RET_ALLOW) == (0x7fff0000U), "SECCOMP_RET_ALLOW != 0x7fff0000U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SECCOMP_RET_ALLOW 0x7fff0000U
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat seccomp_ret_action[] = {
  XLAT(SECCOMP_RET_KILL_PROCESS),
@@ -34,4 +68,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/semctl_flags.h b/xlat/semctl_flags.h
index b8e0c62..ffb88de 100644
--- a/xlat/semctl_flags.h
+++ b/xlat/semctl_flags.h
@@ -1,55 +1,135 @@
 /* Generated by ./xlat/gen.sh from ./xlat/semctl_flags.in; do not edit. */
-#if !(defined(SEM_STAT) || (defined(HAVE_DECL_SEM_STAT) && HAVE_DECL_SEM_STAT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPC_RMID) || (defined(HAVE_DECL_IPC_RMID) && HAVE_DECL_IPC_RMID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_RMID) == (0), "IPC_RMID != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_RMID 0
+#endif
+#if defined(IPC_SET) || (defined(HAVE_DECL_IPC_SET) && HAVE_DECL_IPC_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_SET) == (1), "IPC_SET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_SET 1
+#endif
+#if defined(IPC_STAT) || (defined(HAVE_DECL_IPC_STAT) && HAVE_DECL_IPC_STAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_STAT) == (2), "IPC_STAT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_STAT 2
+#endif
+#if defined(IPC_INFO) || (defined(HAVE_DECL_IPC_INFO) && HAVE_DECL_IPC_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_INFO) == (3), "IPC_INFO != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_INFO 3
+#endif
+#if defined(GETPID) || (defined(HAVE_DECL_GETPID) && HAVE_DECL_GETPID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GETPID) == (11), "GETPID != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define GETPID 11
+#endif
+#if defined(GETVAL) || (defined(HAVE_DECL_GETVAL) && HAVE_DECL_GETVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GETVAL) == (12), "GETVAL != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define GETVAL 12
+#endif
+#if defined(GETALL) || (defined(HAVE_DECL_GETALL) && HAVE_DECL_GETALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GETALL) == (13), "GETALL != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define GETALL 13
+#endif
+#if defined(GETNCNT) || (defined(HAVE_DECL_GETNCNT) && HAVE_DECL_GETNCNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GETNCNT) == (14), "GETNCNT != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define GETNCNT 14
+#endif
+#if defined(GETZCNT) || (defined(HAVE_DECL_GETZCNT) && HAVE_DECL_GETZCNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((GETZCNT) == (15), "GETZCNT != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define GETZCNT 15
+#endif
+#if defined(SETVAL) || (defined(HAVE_DECL_SETVAL) && HAVE_DECL_SETVAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SETVAL) == (16), "SETVAL != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SETVAL 16
+#endif
+#if defined(SETALL) || (defined(HAVE_DECL_SETALL) && HAVE_DECL_SETALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SETALL) == (17), "SETALL != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SETALL 17
+#endif
+#if defined(SEM_STAT) || (defined(HAVE_DECL_SEM_STAT) && HAVE_DECL_SEM_STAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEM_STAT) == (18), "SEM_STAT != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEM_STAT 18
 #endif
-#if !(defined(SEM_INFO) || (defined(HAVE_DECL_SEM_INFO) && HAVE_DECL_SEM_INFO))
+#if defined(SEM_INFO) || (defined(HAVE_DECL_SEM_INFO) && HAVE_DECL_SEM_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEM_INFO) == (19), "SEM_INFO != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEM_INFO 19
 #endif
-
-#ifdef IN_MPERS
-
-# error static const struct xlat semctl_flags in mpers mode
-
+#if defined(SEM_STAT_ANY) || (defined(HAVE_DECL_SEM_STAT_ANY) && HAVE_DECL_SEM_STAT_ANY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEM_STAT_ANY) == (20), "SEM_STAT_ANY != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 #else
+# define SEM_STAT_ANY 20
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat semctl_flags in mpers mode
+
+# else
 
 static
 const struct xlat semctl_flags[] = {
-#if defined(IPC_RMID) || (defined(HAVE_DECL_IPC_RMID) && HAVE_DECL_IPC_RMID)
-  XLAT(IPC_RMID),
-#endif
-#if defined(IPC_SET) || (defined(HAVE_DECL_IPC_SET) && HAVE_DECL_IPC_SET)
-  XLAT(IPC_SET),
-#endif
-#if defined(IPC_STAT) || (defined(HAVE_DECL_IPC_STAT) && HAVE_DECL_IPC_STAT)
-  XLAT(IPC_STAT),
-#endif
-#if defined(IPC_INFO) || (defined(HAVE_DECL_IPC_INFO) && HAVE_DECL_IPC_INFO)
-  XLAT(IPC_INFO),
-#endif
+
+ XLAT(IPC_RMID),
+ XLAT(IPC_SET),
+ XLAT(IPC_STAT),
+ XLAT(IPC_INFO),
+ XLAT(GETPID),
+ XLAT(GETVAL),
+ XLAT(GETALL),
+ XLAT(GETNCNT),
+ XLAT(GETZCNT),
+ XLAT(SETVAL),
+ XLAT(SETALL),
  XLAT(SEM_STAT),
  XLAT(SEM_INFO),
-#if defined(GETPID) || (defined(HAVE_DECL_GETPID) && HAVE_DECL_GETPID)
-  XLAT(GETPID),
-#endif
-#if defined(GETVAL) || (defined(HAVE_DECL_GETVAL) && HAVE_DECL_GETVAL)
-  XLAT(GETVAL),
-#endif
-#if defined(GETALL) || (defined(HAVE_DECL_GETALL) && HAVE_DECL_GETALL)
-  XLAT(GETALL),
-#endif
-#if defined(GETNCNT) || (defined(HAVE_DECL_GETNCNT) && HAVE_DECL_GETNCNT)
-  XLAT(GETNCNT),
-#endif
-#if defined(GETZCNT) || (defined(HAVE_DECL_GETZCNT) && HAVE_DECL_GETZCNT)
-  XLAT(GETZCNT),
-#endif
-#if defined(SETVAL) || (defined(HAVE_DECL_SETVAL) && HAVE_DECL_SETVAL)
-  XLAT(SETVAL),
-#endif
-#if defined(SETALL) || (defined(HAVE_DECL_SETALL) && HAVE_DECL_SETALL)
-  XLAT(SETALL),
-#endif
+ XLAT(SEM_STAT_ANY),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/semctl_flags.in b/xlat/semctl_flags.in
index 5638adb..9e8b84b 100644
--- a/xlat/semctl_flags.in
+++ b/xlat/semctl_flags.in
@@ -1,13 +1,15 @@
-IPC_RMID
-IPC_SET
-IPC_STAT
-IPC_INFO
+/* sort -k2,2g */
+IPC_RMID 0
+IPC_SET 1
+IPC_STAT 2
+IPC_INFO 3
+GETPID 11
+GETVAL 12
+GETALL 13
+GETNCNT 14
+GETZCNT 15
+SETVAL 16
+SETALL 17
 SEM_STAT 18
 SEM_INFO 19
-GETPID
-GETVAL
-GETALL
-GETNCNT
-GETZCNT
-SETVAL
-SETALL
+SEM_STAT_ANY 20
diff --git a/xlat/semop_flags.h b/xlat/semop_flags.h
index b5ce4a0..fcd9e11 100644
--- a/xlat/semop_flags.h
+++ b/xlat/semop_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/semop_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat semop_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat semop_flags in mpers mode
+
+# else
 
 static
 const struct xlat semop_flags[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/setns_types.h b/xlat/setns_types.h
index a91171d..2b5368f 100644
--- a/xlat/setns_types.h
+++ b/xlat/setns_types.h
@@ -1,27 +1,61 @@
 /* Generated by ./xlat/gen.sh from ./xlat/setns_types.in; do not edit. */
-#if !(defined(CLONE_NEWNS) || (defined(HAVE_DECL_CLONE_NEWNS) && HAVE_DECL_CLONE_NEWNS))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(CLONE_NEWNS) || (defined(HAVE_DECL_CLONE_NEWNS) && HAVE_DECL_CLONE_NEWNS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWNS) == (0x00020000), "CLONE_NEWNS != 0x00020000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWNS 0x00020000
 #endif
-#if !(defined(CLONE_NEWCGROUP) || (defined(HAVE_DECL_CLONE_NEWCGROUP) && HAVE_DECL_CLONE_NEWCGROUP))
+#if defined(CLONE_NEWCGROUP) || (defined(HAVE_DECL_CLONE_NEWCGROUP) && HAVE_DECL_CLONE_NEWCGROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWCGROUP) == (0x02000000), "CLONE_NEWCGROUP != 0x02000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWCGROUP 0x02000000
 #endif
-#if !(defined(CLONE_NEWUTS) || (defined(HAVE_DECL_CLONE_NEWUTS) && HAVE_DECL_CLONE_NEWUTS))
+#if defined(CLONE_NEWUTS) || (defined(HAVE_DECL_CLONE_NEWUTS) && HAVE_DECL_CLONE_NEWUTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWUTS) == (0x04000000), "CLONE_NEWUTS != 0x04000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWUTS 0x04000000
 #endif
-#if !(defined(CLONE_NEWIPC) || (defined(HAVE_DECL_CLONE_NEWIPC) && HAVE_DECL_CLONE_NEWIPC))
+#if defined(CLONE_NEWIPC) || (defined(HAVE_DECL_CLONE_NEWIPC) && HAVE_DECL_CLONE_NEWIPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWIPC) == (0x08000000), "CLONE_NEWIPC != 0x08000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWIPC 0x08000000
 #endif
-#if !(defined(CLONE_NEWUSER) || (defined(HAVE_DECL_CLONE_NEWUSER) && HAVE_DECL_CLONE_NEWUSER))
+#if defined(CLONE_NEWUSER) || (defined(HAVE_DECL_CLONE_NEWUSER) && HAVE_DECL_CLONE_NEWUSER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWUSER) == (0x10000000), "CLONE_NEWUSER != 0x10000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWUSER 0x10000000
 #endif
-#if !(defined(CLONE_NEWPID) || (defined(HAVE_DECL_CLONE_NEWPID) && HAVE_DECL_CLONE_NEWPID))
+#if defined(CLONE_NEWPID) || (defined(HAVE_DECL_CLONE_NEWPID) && HAVE_DECL_CLONE_NEWPID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWPID) == (0x20000000), "CLONE_NEWPID != 0x20000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWPID 0x20000000
 #endif
-#if !(defined(CLONE_NEWNET) || (defined(HAVE_DECL_CLONE_NEWNET) && HAVE_DECL_CLONE_NEWNET))
+#if defined(CLONE_NEWNET) || (defined(HAVE_DECL_CLONE_NEWNET) && HAVE_DECL_CLONE_NEWNET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLONE_NEWNET) == (0x40000000), "CLONE_NEWNET != 0x40000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLONE_NEWNET 0x40000000
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat setns_types[] = {
  XLAT(0),
@@ -35,4 +69,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/setsock_ip_options.h b/xlat/setsock_ip_options.h
new file mode 100644
index 0000000..c5f8fc5
--- /dev/null
+++ b/xlat/setsock_ip_options.h
@@ -0,0 +1,97 @@
+/* Generated by ./xlat/gen.sh from ./xlat/setsock_ip_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat setsock_ip_options in mpers mode
+
+# else
+
+static
+const struct xlat setsock_ip_options[] = {
+/*
+* Options specific to setsockopt(SOL_IP).
+* Common {g,s}etsockopt(SOL_IP) options
+* should be in sock_ip_options.in instead.
+*/
+
+#if defined(ARPT_SO_SET_REPLACE) || (defined(HAVE_DECL_ARPT_SO_SET_REPLACE) && HAVE_DECL_ARPT_SO_SET_REPLACE)
+  XLAT(ARPT_SO_SET_REPLACE),
+#endif
+#if defined(ARPT_SO_SET_ADD_COUNTERS) || (defined(HAVE_DECL_ARPT_SO_SET_ADD_COUNTERS) && HAVE_DECL_ARPT_SO_SET_ADD_COUNTERS)
+  XLAT(ARPT_SO_SET_ADD_COUNTERS),
+#endif
+
+#if defined(EBT_SO_SET_ENTRIES) || (defined(HAVE_DECL_EBT_SO_SET_ENTRIES) && HAVE_DECL_EBT_SO_SET_ENTRIES)
+  XLAT(EBT_SO_SET_ENTRIES),
+#endif
+#if defined(EBT_SO_SET_COUNTERS) || (defined(HAVE_DECL_EBT_SO_SET_COUNTERS) && HAVE_DECL_EBT_SO_SET_COUNTERS)
+  XLAT(EBT_SO_SET_COUNTERS),
+#endif
+
+#if defined(IP_VS_SO_SET_NONE) || (defined(HAVE_DECL_IP_VS_SO_SET_NONE) && HAVE_DECL_IP_VS_SO_SET_NONE)
+  XLAT(IP_VS_SO_SET_NONE),
+#endif
+#if defined(IP_VS_SO_SET_INSERT) || (defined(HAVE_DECL_IP_VS_SO_SET_INSERT) && HAVE_DECL_IP_VS_SO_SET_INSERT)
+  XLAT(IP_VS_SO_SET_INSERT),
+#endif
+#if defined(IP_VS_SO_SET_ADD) || (defined(HAVE_DECL_IP_VS_SO_SET_ADD) && HAVE_DECL_IP_VS_SO_SET_ADD)
+  XLAT(IP_VS_SO_SET_ADD),
+#endif
+#if defined(IP_VS_SO_SET_EDIT) || (defined(HAVE_DECL_IP_VS_SO_SET_EDIT) && HAVE_DECL_IP_VS_SO_SET_EDIT)
+  XLAT(IP_VS_SO_SET_EDIT),
+#endif
+#if defined(IP_VS_SO_SET_DEL) || (defined(HAVE_DECL_IP_VS_SO_SET_DEL) && HAVE_DECL_IP_VS_SO_SET_DEL)
+  XLAT(IP_VS_SO_SET_DEL),
+#endif
+#if defined(IP_VS_SO_SET_FLUSH) || (defined(HAVE_DECL_IP_VS_SO_SET_FLUSH) && HAVE_DECL_IP_VS_SO_SET_FLUSH)
+  XLAT(IP_VS_SO_SET_FLUSH),
+#endif
+#if defined(IP_VS_SO_SET_LIST) || (defined(HAVE_DECL_IP_VS_SO_SET_LIST) && HAVE_DECL_IP_VS_SO_SET_LIST)
+  XLAT(IP_VS_SO_SET_LIST),
+#endif
+#if defined(IP_VS_SO_SET_ADDDEST) || (defined(HAVE_DECL_IP_VS_SO_SET_ADDDEST) && HAVE_DECL_IP_VS_SO_SET_ADDDEST)
+  XLAT(IP_VS_SO_SET_ADDDEST),
+#endif
+#if defined(IP_VS_SO_SET_DELDEST) || (defined(HAVE_DECL_IP_VS_SO_SET_DELDEST) && HAVE_DECL_IP_VS_SO_SET_DELDEST)
+  XLAT(IP_VS_SO_SET_DELDEST),
+#endif
+#if defined(IP_VS_SO_SET_EDITDEST) || (defined(HAVE_DECL_IP_VS_SO_SET_EDITDEST) && HAVE_DECL_IP_VS_SO_SET_EDITDEST)
+  XLAT(IP_VS_SO_SET_EDITDEST),
+#endif
+#if defined(IP_VS_SO_SET_TIMEOUT) || (defined(HAVE_DECL_IP_VS_SO_SET_TIMEOUT) && HAVE_DECL_IP_VS_SO_SET_TIMEOUT)
+  XLAT(IP_VS_SO_SET_TIMEOUT),
+#endif
+#if defined(IP_VS_SO_SET_STARTDAEMON) || (defined(HAVE_DECL_IP_VS_SO_SET_STARTDAEMON) && HAVE_DECL_IP_VS_SO_SET_STARTDAEMON)
+  XLAT(IP_VS_SO_SET_STARTDAEMON),
+#endif
+#if defined(IP_VS_SO_SET_STOPDAEMON) || (defined(HAVE_DECL_IP_VS_SO_SET_STOPDAEMON) && HAVE_DECL_IP_VS_SO_SET_STOPDAEMON)
+  XLAT(IP_VS_SO_SET_STOPDAEMON),
+#endif
+#if defined(IP_VS_SO_SET_RESTORE) || (defined(HAVE_DECL_IP_VS_SO_SET_RESTORE) && HAVE_DECL_IP_VS_SO_SET_RESTORE)
+  XLAT(IP_VS_SO_SET_RESTORE),
+#endif
+#if defined(IP_VS_SO_SET_SAVE) || (defined(HAVE_DECL_IP_VS_SO_SET_SAVE) && HAVE_DECL_IP_VS_SO_SET_SAVE)
+  XLAT(IP_VS_SO_SET_SAVE),
+#endif
+#if defined(IP_VS_SO_SET_ZERO) || (defined(HAVE_DECL_IP_VS_SO_SET_ZERO) && HAVE_DECL_IP_VS_SO_SET_ZERO)
+  XLAT(IP_VS_SO_SET_ZERO),
+#endif
+
+#if defined(IPT_SO_SET_REPLACE) || (defined(HAVE_DECL_IPT_SO_SET_REPLACE) && HAVE_DECL_IPT_SO_SET_REPLACE)
+  XLAT(IPT_SO_SET_REPLACE),
+#endif
+#if defined(IPT_SO_SET_ADD_COUNTERS) || (defined(HAVE_DECL_IPT_SO_SET_ADD_COUNTERS) && HAVE_DECL_IPT_SO_SET_ADD_COUNTERS)
+  XLAT(IPT_SO_SET_ADD_COUNTERS),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/setsock_ip_options.in b/xlat/setsock_ip_options.in
new file mode 100644
index 0000000..c811439
--- /dev/null
+++ b/xlat/setsock_ip_options.in
@@ -0,0 +1,31 @@
+/*
+ * Options specific to setsockopt(SOL_IP).
+ * Common {g,s}etsockopt(SOL_IP) options
+ * should be in sock_ip_options.in instead.
+ */
+
+ARPT_SO_SET_REPLACE
+ARPT_SO_SET_ADD_COUNTERS
+
+EBT_SO_SET_ENTRIES
+EBT_SO_SET_COUNTERS
+
+IP_VS_SO_SET_NONE
+IP_VS_SO_SET_INSERT
+IP_VS_SO_SET_ADD
+IP_VS_SO_SET_EDIT
+IP_VS_SO_SET_DEL
+IP_VS_SO_SET_FLUSH
+IP_VS_SO_SET_LIST
+IP_VS_SO_SET_ADDDEST
+IP_VS_SO_SET_DELDEST
+IP_VS_SO_SET_EDITDEST
+IP_VS_SO_SET_TIMEOUT
+IP_VS_SO_SET_STARTDAEMON
+IP_VS_SO_SET_STOPDAEMON
+IP_VS_SO_SET_RESTORE
+IP_VS_SO_SET_SAVE
+IP_VS_SO_SET_ZERO
+
+IPT_SO_SET_REPLACE
+IPT_SO_SET_ADD_COUNTERS
diff --git a/xlat/setsock_ipv6_options.h b/xlat/setsock_ipv6_options.h
new file mode 100644
index 0000000..8a473e6
--- /dev/null
+++ b/xlat/setsock_ipv6_options.h
@@ -0,0 +1,34 @@
+/* Generated by ./xlat/gen.sh from ./xlat/setsock_ipv6_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat setsock_ipv6_options in mpers mode
+
+# else
+
+static
+const struct xlat setsock_ipv6_options[] = {
+/*
+* Options specific to setsockopt(SOL_IPV6).
+* Common {g,s}etsockopt(SOL_IPV6) options
+* should be in sock_ipv6_options.in instead.
+*/
+
+#if defined(IP6T_SO_SET_REPLACE) || (defined(HAVE_DECL_IP6T_SO_SET_REPLACE) && HAVE_DECL_IP6T_SO_SET_REPLACE)
+  XLAT(IP6T_SO_SET_REPLACE),
+#endif
+#if defined(IP6T_SO_SET_ADD_COUNTERS) || (defined(HAVE_DECL_IP6T_SO_SET_ADD_COUNTERS) && HAVE_DECL_IP6T_SO_SET_ADD_COUNTERS)
+  XLAT(IP6T_SO_SET_ADD_COUNTERS),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/setsock_ipv6_options.in b/xlat/setsock_ipv6_options.in
new file mode 100644
index 0000000..087a176
--- /dev/null
+++ b/xlat/setsock_ipv6_options.in
@@ -0,0 +1,8 @@
+/*
+ * Options specific to setsockopt(SOL_IPV6).
+ * Common {g,s}etsockopt(SOL_IPV6) options
+ * should be in sock_ipv6_options.in instead.
+ */
+
+IP6T_SO_SET_REPLACE
+IP6T_SO_SET_ADD_COUNTERS
diff --git a/xlat/setsock_options.h b/xlat/setsock_options.h
new file mode 100644
index 0000000..2ee500c
--- /dev/null
+++ b/xlat/setsock_options.h
@@ -0,0 +1,44 @@
+/* Generated by ./xlat/gen.sh from ./xlat/setsock_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined __hppa__
+#if defined(SO_ATTACH_FILTER) || (defined(HAVE_DECL_SO_ATTACH_FILTER) && HAVE_DECL_SO_ATTACH_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_FILTER) == (16410), "SO_ATTACH_FILTER != 16410");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_FILTER 16410
+#endif
+#else
+#if defined(SO_ATTACH_FILTER) || (defined(HAVE_DECL_SO_ATTACH_FILTER) && HAVE_DECL_SO_ATTACH_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_FILTER) == (26), "SO_ATTACH_FILTER != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_FILTER 26
+#endif
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat setsock_options in mpers mode
+
+# else
+
+static
+const struct xlat setsock_options[] = {
+#if defined __hppa__
+ XLAT(SO_ATTACH_FILTER),
+#else
+ XLAT(SO_ATTACH_FILTER),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/setsock_options.in b/xlat/setsock_options.in
new file mode 100644
index 0000000..38f2920
--- /dev/null
+++ b/xlat/setsock_options.in
@@ -0,0 +1,5 @@
+#if defined __hppa__
+SO_ATTACH_FILTER 16410
+#else
+SO_ATTACH_FILTER 26
+#endif
diff --git a/xlat/setsockipoptions.h b/xlat/setsockipoptions.h
deleted file mode 100644
index 34ae307..0000000
--- a/xlat/setsockipoptions.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/setsockipoptions.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat setsockipoptions in mpers mode
-
-#else
-
-static
-const struct xlat setsockipoptions[] = {
-/*
-* Options specific to setsockopt(SOL_IP).
-* Common {g,s}etsockopt(SOL_IP) options
-* should be in sockipoptions.in instead.
-*/
-
-#if defined(ARPT_SO_SET_REPLACE) || (defined(HAVE_DECL_ARPT_SO_SET_REPLACE) && HAVE_DECL_ARPT_SO_SET_REPLACE)
-  XLAT(ARPT_SO_SET_REPLACE),
-#endif
-#if defined(ARPT_SO_SET_ADD_COUNTERS) || (defined(HAVE_DECL_ARPT_SO_SET_ADD_COUNTERS) && HAVE_DECL_ARPT_SO_SET_ADD_COUNTERS)
-  XLAT(ARPT_SO_SET_ADD_COUNTERS),
-#endif
-
-#if defined(EBT_SO_SET_ENTRIES) || (defined(HAVE_DECL_EBT_SO_SET_ENTRIES) && HAVE_DECL_EBT_SO_SET_ENTRIES)
-  XLAT(EBT_SO_SET_ENTRIES),
-#endif
-#if defined(EBT_SO_SET_COUNTERS) || (defined(HAVE_DECL_EBT_SO_SET_COUNTERS) && HAVE_DECL_EBT_SO_SET_COUNTERS)
-  XLAT(EBT_SO_SET_COUNTERS),
-#endif
-
-#if defined(IP_VS_SO_SET_NONE) || (defined(HAVE_DECL_IP_VS_SO_SET_NONE) && HAVE_DECL_IP_VS_SO_SET_NONE)
-  XLAT(IP_VS_SO_SET_NONE),
-#endif
-#if defined(IP_VS_SO_SET_INSERT) || (defined(HAVE_DECL_IP_VS_SO_SET_INSERT) && HAVE_DECL_IP_VS_SO_SET_INSERT)
-  XLAT(IP_VS_SO_SET_INSERT),
-#endif
-#if defined(IP_VS_SO_SET_ADD) || (defined(HAVE_DECL_IP_VS_SO_SET_ADD) && HAVE_DECL_IP_VS_SO_SET_ADD)
-  XLAT(IP_VS_SO_SET_ADD),
-#endif
-#if defined(IP_VS_SO_SET_EDIT) || (defined(HAVE_DECL_IP_VS_SO_SET_EDIT) && HAVE_DECL_IP_VS_SO_SET_EDIT)
-  XLAT(IP_VS_SO_SET_EDIT),
-#endif
-#if defined(IP_VS_SO_SET_DEL) || (defined(HAVE_DECL_IP_VS_SO_SET_DEL) && HAVE_DECL_IP_VS_SO_SET_DEL)
-  XLAT(IP_VS_SO_SET_DEL),
-#endif
-#if defined(IP_VS_SO_SET_FLUSH) || (defined(HAVE_DECL_IP_VS_SO_SET_FLUSH) && HAVE_DECL_IP_VS_SO_SET_FLUSH)
-  XLAT(IP_VS_SO_SET_FLUSH),
-#endif
-#if defined(IP_VS_SO_SET_LIST) || (defined(HAVE_DECL_IP_VS_SO_SET_LIST) && HAVE_DECL_IP_VS_SO_SET_LIST)
-  XLAT(IP_VS_SO_SET_LIST),
-#endif
-#if defined(IP_VS_SO_SET_ADDDEST) || (defined(HAVE_DECL_IP_VS_SO_SET_ADDDEST) && HAVE_DECL_IP_VS_SO_SET_ADDDEST)
-  XLAT(IP_VS_SO_SET_ADDDEST),
-#endif
-#if defined(IP_VS_SO_SET_DELDEST) || (defined(HAVE_DECL_IP_VS_SO_SET_DELDEST) && HAVE_DECL_IP_VS_SO_SET_DELDEST)
-  XLAT(IP_VS_SO_SET_DELDEST),
-#endif
-#if defined(IP_VS_SO_SET_EDITDEST) || (defined(HAVE_DECL_IP_VS_SO_SET_EDITDEST) && HAVE_DECL_IP_VS_SO_SET_EDITDEST)
-  XLAT(IP_VS_SO_SET_EDITDEST),
-#endif
-#if defined(IP_VS_SO_SET_TIMEOUT) || (defined(HAVE_DECL_IP_VS_SO_SET_TIMEOUT) && HAVE_DECL_IP_VS_SO_SET_TIMEOUT)
-  XLAT(IP_VS_SO_SET_TIMEOUT),
-#endif
-#if defined(IP_VS_SO_SET_STARTDAEMON) || (defined(HAVE_DECL_IP_VS_SO_SET_STARTDAEMON) && HAVE_DECL_IP_VS_SO_SET_STARTDAEMON)
-  XLAT(IP_VS_SO_SET_STARTDAEMON),
-#endif
-#if defined(IP_VS_SO_SET_STOPDAEMON) || (defined(HAVE_DECL_IP_VS_SO_SET_STOPDAEMON) && HAVE_DECL_IP_VS_SO_SET_STOPDAEMON)
-  XLAT(IP_VS_SO_SET_STOPDAEMON),
-#endif
-#if defined(IP_VS_SO_SET_RESTORE) || (defined(HAVE_DECL_IP_VS_SO_SET_RESTORE) && HAVE_DECL_IP_VS_SO_SET_RESTORE)
-  XLAT(IP_VS_SO_SET_RESTORE),
-#endif
-#if defined(IP_VS_SO_SET_SAVE) || (defined(HAVE_DECL_IP_VS_SO_SET_SAVE) && HAVE_DECL_IP_VS_SO_SET_SAVE)
-  XLAT(IP_VS_SO_SET_SAVE),
-#endif
-#if defined(IP_VS_SO_SET_ZERO) || (defined(HAVE_DECL_IP_VS_SO_SET_ZERO) && HAVE_DECL_IP_VS_SO_SET_ZERO)
-  XLAT(IP_VS_SO_SET_ZERO),
-#endif
-
-#if defined(IPT_SO_SET_REPLACE) || (defined(HAVE_DECL_IPT_SO_SET_REPLACE) && HAVE_DECL_IPT_SO_SET_REPLACE)
-  XLAT(IPT_SO_SET_REPLACE),
-#endif
-#if defined(IPT_SO_SET_ADD_COUNTERS) || (defined(HAVE_DECL_IPT_SO_SET_ADD_COUNTERS) && HAVE_DECL_IPT_SO_SET_ADD_COUNTERS)
-  XLAT(IPT_SO_SET_ADD_COUNTERS),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/setsockipv6options.h b/xlat/setsockipv6options.h
deleted file mode 100644
index 4fea6bc..0000000
--- a/xlat/setsockipv6options.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/setsockipv6options.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat setsockipv6options in mpers mode
-
-#else
-
-static
-const struct xlat setsockipv6options[] = {
-/*
-* Options specific to setsockopt(SOL_IPV6).
-* Common {g,s}etsockopt(SOL_IPV6) options
-* should be in sockipv6options.in instead.
-*/
-
-#if defined(IP6T_SO_SET_REPLACE) || (defined(HAVE_DECL_IP6T_SO_SET_REPLACE) && HAVE_DECL_IP6T_SO_SET_REPLACE)
-  XLAT(IP6T_SO_SET_REPLACE),
-#endif
-#if defined(IP6T_SO_SET_ADD_COUNTERS) || (defined(HAVE_DECL_IP6T_SO_SET_ADD_COUNTERS) && HAVE_DECL_IP6T_SO_SET_ADD_COUNTERS)
-  XLAT(IP6T_SO_SET_ADD_COUNTERS),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/sfd_flags.h b/xlat/sfd_flags.h
index 23d08b8..84e29de 100644
--- a/xlat/sfd_flags.h
+++ b/xlat/sfd_flags.h
@@ -1,18 +1,32 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sfd_flags.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
 #if defined SFD_CLOEXEC || defined O_CLOEXEC
-#if !(defined(SFD_CLOEXEC) || (defined(HAVE_DECL_SFD_CLOEXEC) && HAVE_DECL_SFD_CLOEXEC))
+#if defined(SFD_CLOEXEC) || (defined(HAVE_DECL_SFD_CLOEXEC) && HAVE_DECL_SFD_CLOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SFD_CLOEXEC) == (O_CLOEXEC), "SFD_CLOEXEC != O_CLOEXEC");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SFD_CLOEXEC O_CLOEXEC
 #endif
 #endif
-#if !(defined(SFD_NONBLOCK) || (defined(HAVE_DECL_SFD_NONBLOCK) && HAVE_DECL_SFD_NONBLOCK))
+#if defined(SFD_NONBLOCK) || (defined(HAVE_DECL_SFD_NONBLOCK) && HAVE_DECL_SFD_NONBLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SFD_NONBLOCK) == (O_NONBLOCK), "SFD_NONBLOCK != O_NONBLOCK");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SFD_NONBLOCK O_NONBLOCK
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat sfd_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat sfd_flags in mpers mode
+
+# else
 
 static
 const struct xlat sfd_flags[] = {
@@ -23,4 +37,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sg_io_dxfer_direction.h b/xlat/sg_io_dxfer_direction.h
index 4923016..93dda68 100644
--- a/xlat/sg_io_dxfer_direction.h
+++ b/xlat/sg_io_dxfer_direction.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sg_io_dxfer_direction.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sg_io_dxfer_direction[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sg_io_dxfer_direction[] = {
 #if defined(SG_DXFER_NONE) || (defined(HAVE_DECL_SG_DXFER_NONE) && HAVE_DECL_SG_DXFER_NONE)
   XLAT(SG_DXFER_NONE),
@@ -25,4 +31,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sg_io_flags.h b/xlat/sg_io_flags.h
index 5c25ad7..9b938e9 100644
--- a/xlat/sg_io_flags.h
+++ b/xlat/sg_io_flags.h
@@ -1,32 +1,62 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sg_io_flags.in; do not edit. */
-#if !(defined(SG_FLAG_DIRECT_IO) || (defined(HAVE_DECL_SG_FLAG_DIRECT_IO) && HAVE_DECL_SG_FLAG_DIRECT_IO))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SG_FLAG_DIRECT_IO) || (defined(HAVE_DECL_SG_FLAG_DIRECT_IO) && HAVE_DECL_SG_FLAG_DIRECT_IO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_FLAG_DIRECT_IO) == (1), "SG_FLAG_DIRECT_IO != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_FLAG_DIRECT_IO 1
 #endif
-#if !(defined(SG_FLAG_UNUSED_LUN_INHIBIT) || (defined(HAVE_DECL_SG_FLAG_UNUSED_LUN_INHIBIT) && HAVE_DECL_SG_FLAG_UNUSED_LUN_INHIBIT))
+#if defined(SG_FLAG_UNUSED_LUN_INHIBIT) || (defined(HAVE_DECL_SG_FLAG_UNUSED_LUN_INHIBIT) && HAVE_DECL_SG_FLAG_UNUSED_LUN_INHIBIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_FLAG_UNUSED_LUN_INHIBIT) == (2), "SG_FLAG_UNUSED_LUN_INHIBIT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_FLAG_UNUSED_LUN_INHIBIT 2
 #endif
-#if !(defined(SG_FLAG_MMAP_IO) || (defined(HAVE_DECL_SG_FLAG_MMAP_IO) && HAVE_DECL_SG_FLAG_MMAP_IO))
+#if defined(SG_FLAG_MMAP_IO) || (defined(HAVE_DECL_SG_FLAG_MMAP_IO) && HAVE_DECL_SG_FLAG_MMAP_IO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_FLAG_MMAP_IO) == (4), "SG_FLAG_MMAP_IO != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_FLAG_MMAP_IO 4
 #endif
-#if !(defined(SG_FLAG_NO_DXFER) || (defined(HAVE_DECL_SG_FLAG_NO_DXFER) && HAVE_DECL_SG_FLAG_NO_DXFER))
+#if defined(SG_FLAG_NO_DXFER) || (defined(HAVE_DECL_SG_FLAG_NO_DXFER) && HAVE_DECL_SG_FLAG_NO_DXFER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_FLAG_NO_DXFER) == (0x10000), "SG_FLAG_NO_DXFER != 0x10000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_FLAG_NO_DXFER 0x10000
 #endif
-#if !(defined(SG_FLAG_Q_AT_TAIL) || (defined(HAVE_DECL_SG_FLAG_Q_AT_TAIL) && HAVE_DECL_SG_FLAG_Q_AT_TAIL))
+#if defined(SG_FLAG_Q_AT_TAIL) || (defined(HAVE_DECL_SG_FLAG_Q_AT_TAIL) && HAVE_DECL_SG_FLAG_Q_AT_TAIL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_FLAG_Q_AT_TAIL) == (0x10), "SG_FLAG_Q_AT_TAIL != 0x10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_FLAG_Q_AT_TAIL 0x10
 #endif
-#if !(defined(SG_FLAG_Q_AT_HEAD) || (defined(HAVE_DECL_SG_FLAG_Q_AT_HEAD) && HAVE_DECL_SG_FLAG_Q_AT_HEAD))
+#if defined(SG_FLAG_Q_AT_HEAD) || (defined(HAVE_DECL_SG_FLAG_Q_AT_HEAD) && HAVE_DECL_SG_FLAG_Q_AT_HEAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_FLAG_Q_AT_HEAD) == (0x20), "SG_FLAG_Q_AT_HEAD != 0x20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_FLAG_Q_AT_HEAD 0x20
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sg_io_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sg_io_flags[] = {
  XLAT(SG_FLAG_DIRECT_IO),
  XLAT(SG_FLAG_UNUSED_LUN_INHIBIT),
@@ -37,4 +67,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sg_io_info.h b/xlat/sg_io_info.h
index 49929be..af88616 100644
--- a/xlat/sg_io_info.h
+++ b/xlat/sg_io_info.h
@@ -1,15 +1,33 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sg_io_info.in; do not edit. */
-#if !(defined(SG_INFO_CHECK) || (defined(HAVE_DECL_SG_INFO_CHECK) && HAVE_DECL_SG_INFO_CHECK))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SG_INFO_CHECK) || (defined(HAVE_DECL_SG_INFO_CHECK) && HAVE_DECL_SG_INFO_CHECK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_INFO_CHECK) == (1), "SG_INFO_CHECK != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_INFO_CHECK 1
 #endif
-#if !(defined(SG_INFO_DIRECT_IO) || (defined(HAVE_DECL_SG_INFO_DIRECT_IO) && HAVE_DECL_SG_INFO_DIRECT_IO))
+#if defined(SG_INFO_DIRECT_IO) || (defined(HAVE_DECL_SG_INFO_DIRECT_IO) && HAVE_DECL_SG_INFO_DIRECT_IO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_INFO_DIRECT_IO) == (2), "SG_INFO_DIRECT_IO != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_INFO_DIRECT_IO 2
 #endif
-#if !(defined(SG_INFO_MIXED_IO) || (defined(HAVE_DECL_SG_INFO_MIXED_IO) && HAVE_DECL_SG_INFO_MIXED_IO))
+#if defined(SG_INFO_MIXED_IO) || (defined(HAVE_DECL_SG_INFO_MIXED_IO) && HAVE_DECL_SG_INFO_MIXED_IO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_INFO_MIXED_IO) == (4), "SG_INFO_MIXED_IO != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_INFO_MIXED_IO 4
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat sg_io_info[] = {
  XLAT(SG_INFO_CHECK),
@@ -18,4 +36,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sg_scsi_reset.h b/xlat/sg_scsi_reset.h
index b33ed1d..e261fd5 100644
--- a/xlat/sg_scsi_reset.h
+++ b/xlat/sg_scsi_reset.h
@@ -1,28 +1,58 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sg_scsi_reset.in; do not edit. */
-#if !(defined(SG_SCSI_RESET_NOTHING) || (defined(HAVE_DECL_SG_SCSI_RESET_NOTHING) && HAVE_DECL_SG_SCSI_RESET_NOTHING))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SG_SCSI_RESET_NOTHING) || (defined(HAVE_DECL_SG_SCSI_RESET_NOTHING) && HAVE_DECL_SG_SCSI_RESET_NOTHING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SCSI_RESET_NOTHING) == (0), "SG_SCSI_RESET_NOTHING != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SCSI_RESET_NOTHING 0
 #endif
-#if !(defined(SG_SCSI_RESET_DEVICE) || (defined(HAVE_DECL_SG_SCSI_RESET_DEVICE) && HAVE_DECL_SG_SCSI_RESET_DEVICE))
+#if defined(SG_SCSI_RESET_DEVICE) || (defined(HAVE_DECL_SG_SCSI_RESET_DEVICE) && HAVE_DECL_SG_SCSI_RESET_DEVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SCSI_RESET_DEVICE) == (1), "SG_SCSI_RESET_DEVICE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SCSI_RESET_DEVICE 1
 #endif
-#if !(defined(SG_SCSI_RESET_BUS) || (defined(HAVE_DECL_SG_SCSI_RESET_BUS) && HAVE_DECL_SG_SCSI_RESET_BUS))
+#if defined(SG_SCSI_RESET_BUS) || (defined(HAVE_DECL_SG_SCSI_RESET_BUS) && HAVE_DECL_SG_SCSI_RESET_BUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SCSI_RESET_BUS) == (2), "SG_SCSI_RESET_BUS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SCSI_RESET_BUS 2
 #endif
-#if !(defined(SG_SCSI_RESET_HOST) || (defined(HAVE_DECL_SG_SCSI_RESET_HOST) && HAVE_DECL_SG_SCSI_RESET_HOST))
+#if defined(SG_SCSI_RESET_HOST) || (defined(HAVE_DECL_SG_SCSI_RESET_HOST) && HAVE_DECL_SG_SCSI_RESET_HOST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SCSI_RESET_HOST) == (3), "SG_SCSI_RESET_HOST != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SCSI_RESET_HOST 3
 #endif
-#if !(defined(SG_SCSI_RESET_TARGET) || (defined(HAVE_DECL_SG_SCSI_RESET_TARGET) && HAVE_DECL_SG_SCSI_RESET_TARGET))
+#if defined(SG_SCSI_RESET_TARGET) || (defined(HAVE_DECL_SG_SCSI_RESET_TARGET) && HAVE_DECL_SG_SCSI_RESET_TARGET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SCSI_RESET_TARGET) == (4), "SG_SCSI_RESET_TARGET != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SCSI_RESET_TARGET 4
 #endif
-#if !(defined(SG_SCSI_RESET_NO_ESCALATE) || (defined(HAVE_DECL_SG_SCSI_RESET_NO_ESCALATE) && HAVE_DECL_SG_SCSI_RESET_NO_ESCALATE))
+#if defined(SG_SCSI_RESET_NO_ESCALATE) || (defined(HAVE_DECL_SG_SCSI_RESET_NO_ESCALATE) && HAVE_DECL_SG_SCSI_RESET_NO_ESCALATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SG_SCSI_RESET_NO_ESCALATE) == (0x100), "SG_SCSI_RESET_NO_ESCALATE != 0x100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SG_SCSI_RESET_NO_ESCALATE 0x100
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat sg_scsi_reset in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat sg_scsi_reset in mpers mode
+
+# else
 
 static
 const struct xlat sg_scsi_reset[] = {
@@ -35,4 +65,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/shm_flags.h b/xlat/shm_flags.h
index 5919153..f7f5b38 100644
--- a/xlat/shm_flags.h
+++ b/xlat/shm_flags.h
@@ -1,13 +1,23 @@
 /* Generated by ./xlat/gen.sh from ./xlat/shm_flags.in; do not edit. */
-#if !(defined(SHM_EXEC) || (defined(HAVE_DECL_SHM_EXEC) && HAVE_DECL_SHM_EXEC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SHM_EXEC) || (defined(HAVE_DECL_SHM_EXEC) && HAVE_DECL_SHM_EXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHM_EXEC) == (0100000), "SHM_EXEC != 0100000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SHM_EXEC 0100000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat shm_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat shm_flags in mpers mode
+
+# else
 
 static
 const struct xlat shm_flags[] = {
@@ -24,4 +34,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/shm_resource_flags.h b/xlat/shm_resource_flags.h
index 11caf5a..6b703af 100644
--- a/xlat/shm_resource_flags.h
+++ b/xlat/shm_resource_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/shm_resource_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat shm_resource_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat shm_resource_flags in mpers mode
+
+# else
 
 static
 const struct xlat shm_resource_flags[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/shmctl_flags.h b/xlat/shmctl_flags.h
index eac0c1d..40ac3ae 100644
--- a/xlat/shmctl_flags.h
+++ b/xlat/shmctl_flags.h
@@ -1,40 +1,97 @@
 /* Generated by ./xlat/gen.sh from ./xlat/shmctl_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPC_RMID) || (defined(HAVE_DECL_IPC_RMID) && HAVE_DECL_IPC_RMID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_RMID) == (0), "IPC_RMID != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_RMID 0
+#endif
+#if defined(IPC_SET) || (defined(HAVE_DECL_IPC_SET) && HAVE_DECL_IPC_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_SET) == (1), "IPC_SET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_SET 1
+#endif
+#if defined(IPC_STAT) || (defined(HAVE_DECL_IPC_STAT) && HAVE_DECL_IPC_STAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_STAT) == (2), "IPC_STAT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_STAT 2
+#endif
+#if defined(IPC_INFO) || (defined(HAVE_DECL_IPC_INFO) && HAVE_DECL_IPC_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPC_INFO) == (3), "IPC_INFO != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPC_INFO 3
+#endif
+#if defined(SHM_LOCK) || (defined(HAVE_DECL_SHM_LOCK) && HAVE_DECL_SHM_LOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHM_LOCK) == (11), "SHM_LOCK != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SHM_LOCK 11
+#endif
+#if defined(SHM_UNLOCK) || (defined(HAVE_DECL_SHM_UNLOCK) && HAVE_DECL_SHM_UNLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHM_UNLOCK) == (12), "SHM_UNLOCK != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SHM_UNLOCK 12
+#endif
+#if defined(SHM_STAT) || (defined(HAVE_DECL_SHM_STAT) && HAVE_DECL_SHM_STAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHM_STAT) == (13), "SHM_STAT != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SHM_STAT 13
+#endif
+#if defined(SHM_INFO) || (defined(HAVE_DECL_SHM_INFO) && HAVE_DECL_SHM_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHM_INFO) == (14), "SHM_INFO != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SHM_INFO 14
+#endif
+#if defined(SHM_STAT_ANY) || (defined(HAVE_DECL_SHM_STAT_ANY) && HAVE_DECL_SHM_STAT_ANY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHM_STAT_ANY) == (15), "SHM_STAT_ANY != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SHM_STAT_ANY 15
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat shmctl_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat shmctl_flags[] = {
-#if defined(IPC_RMID) || (defined(HAVE_DECL_IPC_RMID) && HAVE_DECL_IPC_RMID)
-  XLAT(IPC_RMID),
-#endif
-#if defined(IPC_SET) || (defined(HAVE_DECL_IPC_SET) && HAVE_DECL_IPC_SET)
-  XLAT(IPC_SET),
-#endif
-#if defined(IPC_STAT) || (defined(HAVE_DECL_IPC_STAT) && HAVE_DECL_IPC_STAT)
-  XLAT(IPC_STAT),
-#endif
-#if defined(IPC_INFO) || (defined(HAVE_DECL_IPC_INFO) && HAVE_DECL_IPC_INFO)
-  XLAT(IPC_INFO),
-#endif
-#if defined(SHM_LOCK) || (defined(HAVE_DECL_SHM_LOCK) && HAVE_DECL_SHM_LOCK)
-  XLAT(SHM_LOCK),
-#endif
-#if defined(SHM_UNLOCK) || (defined(HAVE_DECL_SHM_UNLOCK) && HAVE_DECL_SHM_UNLOCK)
-  XLAT(SHM_UNLOCK),
-#endif
-#if defined(SHM_STAT) || (defined(HAVE_DECL_SHM_STAT) && HAVE_DECL_SHM_STAT)
-  XLAT(SHM_STAT),
-#endif
-#if defined(SHM_INFO) || (defined(HAVE_DECL_SHM_INFO) && HAVE_DECL_SHM_INFO)
-  XLAT(SHM_INFO),
-#endif
+
+ XLAT(IPC_RMID),
+ XLAT(IPC_SET),
+ XLAT(IPC_STAT),
+ XLAT(IPC_INFO),
+ XLAT(SHM_LOCK),
+ XLAT(SHM_UNLOCK),
+ XLAT(SHM_STAT),
+ XLAT(SHM_INFO),
+ XLAT(SHM_STAT_ANY),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/shmctl_flags.in b/xlat/shmctl_flags.in
index f22e793..b794306 100644
--- a/xlat/shmctl_flags.in
+++ b/xlat/shmctl_flags.in
@@ -1,8 +1,10 @@
-IPC_RMID
-IPC_SET
-IPC_STAT
-IPC_INFO
-SHM_LOCK
-SHM_UNLOCK
-SHM_STAT
-SHM_INFO
+/* sort -k2,2g */
+IPC_RMID 0
+IPC_SET 1
+IPC_STAT 2
+IPC_INFO 3
+SHM_LOCK 11
+SHM_UNLOCK 12
+SHM_STAT 13
+SHM_INFO 14
+SHM_STAT_ANY 15
diff --git a/xlat/shutdown_modes.h b/xlat/shutdown_modes.h
index f34cb6b..2662c36 100644
--- a/xlat/shutdown_modes.h
+++ b/xlat/shutdown_modes.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/shutdown_modes.in; do not edit. */
-#if !(defined(SHUT_RD) || (defined(HAVE_DECL_SHUT_RD) && HAVE_DECL_SHUT_RD))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SHUT_RD) || (defined(HAVE_DECL_SHUT_RD) && HAVE_DECL_SHUT_RD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHUT_RD) == (0), "SHUT_RD != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SHUT_RD 0
 #endif
-#if !(defined(SHUT_WR) || (defined(HAVE_DECL_SHUT_WR) && HAVE_DECL_SHUT_WR))
+#if defined(SHUT_WR) || (defined(HAVE_DECL_SHUT_WR) && HAVE_DECL_SHUT_WR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHUT_WR) == (1), "SHUT_WR != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SHUT_WR 1
 #endif
-#if !(defined(SHUT_RDWR) || (defined(HAVE_DECL_SHUT_RDWR) && HAVE_DECL_SHUT_RDWR))
+#if defined(SHUT_RDWR) || (defined(HAVE_DECL_SHUT_RDWR) && HAVE_DECL_SHUT_RDWR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SHUT_RDWR) == (2), "SHUT_RDWR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SHUT_RDWR 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat shutdown_modes in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat shutdown_modes in mpers mode
+
+# else
 
 static
 const struct xlat shutdown_modes[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigact_flags.h b/xlat/sigact_flags.h
index 7149b92..14bb012 100644
--- a/xlat/sigact_flags.h
+++ b/xlat/sigact_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigact_flags.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
 #if defined SA_NOMASK && SA_NODEFER != SA_NOMASK
 #endif
 #if defined SA_ONESHOT && SA_ONESHOT != SA_RESETHAND
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat sigact_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat sigact_flags in mpers mode
+
+# else
 
 static
 const struct xlat sigact_flags[] = {
@@ -67,4 +73,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigaltstack_flags.h b/xlat/sigaltstack_flags.h
index 76ed327..68359b4 100644
--- a/xlat/sigaltstack_flags.h
+++ b/xlat/sigaltstack_flags.h
@@ -1,23 +1,41 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigaltstack_flags.in; do not edit. */
-#if !(defined(SS_ONSTACK) || (defined(HAVE_DECL_SS_ONSTACK) && HAVE_DECL_SS_ONSTACK))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SS_ONSTACK) || (defined(HAVE_DECL_SS_ONSTACK) && HAVE_DECL_SS_ONSTACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SS_ONSTACK) == (1), "SS_ONSTACK != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SS_ONSTACK 1
 #endif
-#if !(defined(SS_DISABLE) || (defined(HAVE_DECL_SS_DISABLE) && HAVE_DECL_SS_DISABLE))
+#if defined(SS_DISABLE) || (defined(HAVE_DECL_SS_DISABLE) && HAVE_DECL_SS_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SS_DISABLE) == (2), "SS_DISABLE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SS_DISABLE 2
 #endif
-#if !(defined(SS_AUTODISARM) || (defined(HAVE_DECL_SS_AUTODISARM) && HAVE_DECL_SS_AUTODISARM))
+#if defined(SS_AUTODISARM) || (defined(HAVE_DECL_SS_AUTODISARM) && HAVE_DECL_SS_AUTODISARM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SS_AUTODISARM) == ((1U << 31)), "SS_AUTODISARM != (1U << 31)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SS_AUTODISARM (1U << 31)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigaltstack_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigaltstack_flags[] = {
  XLAT(SS_ONSTACK),
  XLAT(SS_DISABLE),
@@ -25,4 +43,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigbus_codes.h b/xlat/sigbus_codes.h
index 30c017d..4212356 100644
--- a/xlat/sigbus_codes.h
+++ b/xlat/sigbus_codes.h
@@ -1,29 +1,55 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigbus_codes.in; do not edit. */
-#if !(defined(BUS_ADRALN) || (defined(HAVE_DECL_BUS_ADRALN) && HAVE_DECL_BUS_ADRALN))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BUS_ADRALN) || (defined(HAVE_DECL_BUS_ADRALN) && HAVE_DECL_BUS_ADRALN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BUS_ADRALN) == (1), "BUS_ADRALN != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BUS_ADRALN 1
 #endif
-#if !(defined(BUS_ADRERR) || (defined(HAVE_DECL_BUS_ADRERR) && HAVE_DECL_BUS_ADRERR))
+#if defined(BUS_ADRERR) || (defined(HAVE_DECL_BUS_ADRERR) && HAVE_DECL_BUS_ADRERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BUS_ADRERR) == (2), "BUS_ADRERR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BUS_ADRERR 2
 #endif
-#if !(defined(BUS_OBJERR) || (defined(HAVE_DECL_BUS_OBJERR) && HAVE_DECL_BUS_OBJERR))
+#if defined(BUS_OBJERR) || (defined(HAVE_DECL_BUS_OBJERR) && HAVE_DECL_BUS_OBJERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BUS_OBJERR) == (3), "BUS_OBJERR != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BUS_OBJERR 3
 #endif
-#if !(defined(BUS_MCEERR_AR) || (defined(HAVE_DECL_BUS_MCEERR_AR) && HAVE_DECL_BUS_MCEERR_AR))
+#if defined(BUS_MCEERR_AR) || (defined(HAVE_DECL_BUS_MCEERR_AR) && HAVE_DECL_BUS_MCEERR_AR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BUS_MCEERR_AR) == (4), "BUS_MCEERR_AR != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BUS_MCEERR_AR 4
 #endif
-#if !(defined(BUS_MCEERR_AO) || (defined(HAVE_DECL_BUS_MCEERR_AO) && HAVE_DECL_BUS_MCEERR_AO))
+#if defined(BUS_MCEERR_AO) || (defined(HAVE_DECL_BUS_MCEERR_AO) && HAVE_DECL_BUS_MCEERR_AO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BUS_MCEERR_AO) == (5), "BUS_MCEERR_AO != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define BUS_MCEERR_AO 5
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigbus_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigbus_codes[] = {
  XLAT(BUS_ADRALN),
  XLAT(BUS_ADRERR),
@@ -36,4 +62,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigchld_codes.h b/xlat/sigchld_codes.h
index e1bf046..515eb2c 100644
--- a/xlat/sigchld_codes.h
+++ b/xlat/sigchld_codes.h
@@ -1,32 +1,62 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigchld_codes.in; do not edit. */
-#if !(defined(CLD_EXITED) || (defined(HAVE_DECL_CLD_EXITED) && HAVE_DECL_CLD_EXITED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(CLD_EXITED) || (defined(HAVE_DECL_CLD_EXITED) && HAVE_DECL_CLD_EXITED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLD_EXITED) == (1), "CLD_EXITED != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLD_EXITED 1
 #endif
-#if !(defined(CLD_KILLED) || (defined(HAVE_DECL_CLD_KILLED) && HAVE_DECL_CLD_KILLED))
+#if defined(CLD_KILLED) || (defined(HAVE_DECL_CLD_KILLED) && HAVE_DECL_CLD_KILLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLD_KILLED) == (2), "CLD_KILLED != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLD_KILLED 2
 #endif
-#if !(defined(CLD_DUMPED) || (defined(HAVE_DECL_CLD_DUMPED) && HAVE_DECL_CLD_DUMPED))
+#if defined(CLD_DUMPED) || (defined(HAVE_DECL_CLD_DUMPED) && HAVE_DECL_CLD_DUMPED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLD_DUMPED) == (3), "CLD_DUMPED != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLD_DUMPED 3
 #endif
-#if !(defined(CLD_TRAPPED) || (defined(HAVE_DECL_CLD_TRAPPED) && HAVE_DECL_CLD_TRAPPED))
+#if defined(CLD_TRAPPED) || (defined(HAVE_DECL_CLD_TRAPPED) && HAVE_DECL_CLD_TRAPPED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLD_TRAPPED) == (4), "CLD_TRAPPED != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLD_TRAPPED 4
 #endif
-#if !(defined(CLD_STOPPED) || (defined(HAVE_DECL_CLD_STOPPED) && HAVE_DECL_CLD_STOPPED))
+#if defined(CLD_STOPPED) || (defined(HAVE_DECL_CLD_STOPPED) && HAVE_DECL_CLD_STOPPED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLD_STOPPED) == (5), "CLD_STOPPED != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLD_STOPPED 5
 #endif
-#if !(defined(CLD_CONTINUED) || (defined(HAVE_DECL_CLD_CONTINUED) && HAVE_DECL_CLD_CONTINUED))
+#if defined(CLD_CONTINUED) || (defined(HAVE_DECL_CLD_CONTINUED) && HAVE_DECL_CLD_CONTINUED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CLD_CONTINUED) == (6), "CLD_CONTINUED != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define CLD_CONTINUED 6
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigchld_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigchld_codes[] = {
  XLAT(CLD_EXITED),
  XLAT(CLD_KILLED),
@@ -37,4 +67,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigemt_codes.h b/xlat/sigemt_codes.h
index 68f6fb4..0938327 100644
--- a/xlat/sigemt_codes.h
+++ b/xlat/sigemt_codes.h
@@ -1,20 +1,32 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigemt_codes.in; do not edit. */
-#if !(defined(EMT_TAGOVF) || (defined(HAVE_DECL_EMT_TAGOVF) && HAVE_DECL_EMT_TAGOVF))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(EMT_TAGOVF) || (defined(HAVE_DECL_EMT_TAGOVF) && HAVE_DECL_EMT_TAGOVF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((EMT_TAGOVF) == (1), "EMT_TAGOVF != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define EMT_TAGOVF 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigemt_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigemt_codes[] = {
  XLAT(EMT_TAGOVF),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigev_value.h b/xlat/sigev_value.h
index 7c569a5..c9069d5 100644
--- a/xlat/sigev_value.h
+++ b/xlat/sigev_value.h
@@ -1,26 +1,48 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigev_value.in; do not edit. */
-#if !(defined(SIGEV_SIGNAL) || (defined(HAVE_DECL_SIGEV_SIGNAL) && HAVE_DECL_SIGEV_SIGNAL))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SIGEV_SIGNAL) || (defined(HAVE_DECL_SIGEV_SIGNAL) && HAVE_DECL_SIGEV_SIGNAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SIGEV_SIGNAL) == (0), "SIGEV_SIGNAL != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SIGEV_SIGNAL 0
 #endif
-#if !(defined(SIGEV_NONE) || (defined(HAVE_DECL_SIGEV_NONE) && HAVE_DECL_SIGEV_NONE))
+#if defined(SIGEV_NONE) || (defined(HAVE_DECL_SIGEV_NONE) && HAVE_DECL_SIGEV_NONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SIGEV_NONE) == (1), "SIGEV_NONE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SIGEV_NONE 1
 #endif
-#if !(defined(SIGEV_THREAD) || (defined(HAVE_DECL_SIGEV_THREAD) && HAVE_DECL_SIGEV_THREAD))
+#if defined(SIGEV_THREAD) || (defined(HAVE_DECL_SIGEV_THREAD) && HAVE_DECL_SIGEV_THREAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SIGEV_THREAD) == (2), "SIGEV_THREAD != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SIGEV_THREAD 2
 #endif
-#if !(defined(SIGEV_THREAD_ID) || (defined(HAVE_DECL_SIGEV_THREAD_ID) && HAVE_DECL_SIGEV_THREAD_ID))
+#if defined(SIGEV_THREAD_ID) || (defined(HAVE_DECL_SIGEV_THREAD_ID) && HAVE_DECL_SIGEV_THREAD_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SIGEV_THREAD_ID) == (4), "SIGEV_THREAD_ID != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SIGEV_THREAD_ID 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigev_value[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigev_value[] = {
  XLAT(SIGEV_SIGNAL),
  XLAT(SIGEV_NONE),
@@ -29,4 +51,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigfpe_codes.h b/xlat/sigfpe_codes.h
index 1821f34..eab8237 100644
--- a/xlat/sigfpe_codes.h
+++ b/xlat/sigfpe_codes.h
@@ -1,38 +1,90 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigfpe_codes.in; do not edit. */
-#if !(defined(FPE_INTDIV) || (defined(HAVE_DECL_FPE_INTDIV) && HAVE_DECL_FPE_INTDIV))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(FPE_INTDIV) || (defined(HAVE_DECL_FPE_INTDIV) && HAVE_DECL_FPE_INTDIV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_INTDIV) == (1), "FPE_INTDIV != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FPE_INTDIV 1
 #endif
-#if !(defined(FPE_INTOVF) || (defined(HAVE_DECL_FPE_INTOVF) && HAVE_DECL_FPE_INTOVF))
+#if defined(FPE_INTOVF) || (defined(HAVE_DECL_FPE_INTOVF) && HAVE_DECL_FPE_INTOVF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_INTOVF) == (2), "FPE_INTOVF != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FPE_INTOVF 2
 #endif
-#if !(defined(FPE_FLTDIV) || (defined(HAVE_DECL_FPE_FLTDIV) && HAVE_DECL_FPE_FLTDIV))
+#if defined(FPE_FLTDIV) || (defined(HAVE_DECL_FPE_FLTDIV) && HAVE_DECL_FPE_FLTDIV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_FLTDIV) == (3), "FPE_FLTDIV != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FPE_FLTDIV 3
 #endif
-#if !(defined(FPE_FLTOVF) || (defined(HAVE_DECL_FPE_FLTOVF) && HAVE_DECL_FPE_FLTOVF))
+#if defined(FPE_FLTOVF) || (defined(HAVE_DECL_FPE_FLTOVF) && HAVE_DECL_FPE_FLTOVF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_FLTOVF) == (4), "FPE_FLTOVF != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FPE_FLTOVF 4
 #endif
-#if !(defined(FPE_FLTUND) || (defined(HAVE_DECL_FPE_FLTUND) && HAVE_DECL_FPE_FLTUND))
+#if defined(FPE_FLTUND) || (defined(HAVE_DECL_FPE_FLTUND) && HAVE_DECL_FPE_FLTUND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_FLTUND) == (5), "FPE_FLTUND != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FPE_FLTUND 5
 #endif
-#if !(defined(FPE_FLTRES) || (defined(HAVE_DECL_FPE_FLTRES) && HAVE_DECL_FPE_FLTRES))
+#if defined(FPE_FLTRES) || (defined(HAVE_DECL_FPE_FLTRES) && HAVE_DECL_FPE_FLTRES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_FLTRES) == (6), "FPE_FLTRES != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FPE_FLTRES 6
 #endif
-#if !(defined(FPE_FLTINV) || (defined(HAVE_DECL_FPE_FLTINV) && HAVE_DECL_FPE_FLTINV))
+#if defined(FPE_FLTINV) || (defined(HAVE_DECL_FPE_FLTINV) && HAVE_DECL_FPE_FLTINV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_FLTINV) == (7), "FPE_FLTINV != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FPE_FLTINV 7
 #endif
-#if !(defined(FPE_FLTSUB) || (defined(HAVE_DECL_FPE_FLTSUB) && HAVE_DECL_FPE_FLTSUB))
+#if defined(FPE_FLTSUB) || (defined(HAVE_DECL_FPE_FLTSUB) && HAVE_DECL_FPE_FLTSUB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_FLTSUB) == (8), "FPE_FLTSUB != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define FPE_FLTSUB 8
 #endif
+#if defined(FPE_FLTUNK) || (defined(HAVE_DECL_FPE_FLTUNK) && HAVE_DECL_FPE_FLTUNK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_FLTUNK) == (14), "FPE_FLTUNK != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FPE_FLTUNK 14
+#endif
+#if defined(FPE_CONDTRAP) || (defined(HAVE_DECL_FPE_CONDTRAP) && HAVE_DECL_FPE_CONDTRAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((FPE_CONDTRAP) == (15), "FPE_CONDTRAP != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define FPE_CONDTRAP 15
+#endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigfpe_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigfpe_codes[] = {
  XLAT(FPE_INTDIV),
  XLAT(FPE_INTOVF),
@@ -60,7 +112,11 @@
 #if defined(__FPE_INVDEC) || (defined(HAVE_DECL___FPE_INVDEC) && HAVE_DECL___FPE_INVDEC)
   XLAT(__FPE_INVDEC),
 #endif
+ XLAT(FPE_FLTUNK),
+ XLAT(FPE_CONDTRAP),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigfpe_codes.in b/xlat/sigfpe_codes.in
index 31cc924..4abd621 100644
--- a/xlat/sigfpe_codes.in
+++ b/xlat/sigfpe_codes.in
@@ -12,3 +12,5 @@
 __FPE_DECERR /* 11 - ia64 */
 __FPE_INVASC /* 12 - ia64 */
 __FPE_INVDEC /* 13 - ia64 */
+FPE_FLTUNK 14
+FPE_CONDTRAP 15
diff --git a/xlat/sigill_codes.h b/xlat/sigill_codes.h
index 24fe266..74eaea0 100644
--- a/xlat/sigill_codes.h
+++ b/xlat/sigill_codes.h
@@ -1,38 +1,76 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigill_codes.in; do not edit. */
-#if !(defined(ILL_ILLOPC) || (defined(HAVE_DECL_ILL_ILLOPC) && HAVE_DECL_ILL_ILLOPC))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(ILL_ILLOPC) || (defined(HAVE_DECL_ILL_ILLOPC) && HAVE_DECL_ILL_ILLOPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ILL_ILLOPC) == (1), "ILL_ILLOPC != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ILL_ILLOPC 1
 #endif
-#if !(defined(ILL_ILLOPN) || (defined(HAVE_DECL_ILL_ILLOPN) && HAVE_DECL_ILL_ILLOPN))
+#if defined(ILL_ILLOPN) || (defined(HAVE_DECL_ILL_ILLOPN) && HAVE_DECL_ILL_ILLOPN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ILL_ILLOPN) == (2), "ILL_ILLOPN != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ILL_ILLOPN 2
 #endif
-#if !(defined(ILL_ILLADR) || (defined(HAVE_DECL_ILL_ILLADR) && HAVE_DECL_ILL_ILLADR))
+#if defined(ILL_ILLADR) || (defined(HAVE_DECL_ILL_ILLADR) && HAVE_DECL_ILL_ILLADR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ILL_ILLADR) == (3), "ILL_ILLADR != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ILL_ILLADR 3
 #endif
-#if !(defined(ILL_ILLTRP) || (defined(HAVE_DECL_ILL_ILLTRP) && HAVE_DECL_ILL_ILLTRP))
+#if defined(ILL_ILLTRP) || (defined(HAVE_DECL_ILL_ILLTRP) && HAVE_DECL_ILL_ILLTRP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ILL_ILLTRP) == (4), "ILL_ILLTRP != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ILL_ILLTRP 4
 #endif
-#if !(defined(ILL_PRVOPC) || (defined(HAVE_DECL_ILL_PRVOPC) && HAVE_DECL_ILL_PRVOPC))
+#if defined(ILL_PRVOPC) || (defined(HAVE_DECL_ILL_PRVOPC) && HAVE_DECL_ILL_PRVOPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ILL_PRVOPC) == (5), "ILL_PRVOPC != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ILL_PRVOPC 5
 #endif
-#if !(defined(ILL_PRVREG) || (defined(HAVE_DECL_ILL_PRVREG) && HAVE_DECL_ILL_PRVREG))
+#if defined(ILL_PRVREG) || (defined(HAVE_DECL_ILL_PRVREG) && HAVE_DECL_ILL_PRVREG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ILL_PRVREG) == (6), "ILL_PRVREG != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ILL_PRVREG 6
 #endif
-#if !(defined(ILL_COPROC) || (defined(HAVE_DECL_ILL_COPROC) && HAVE_DECL_ILL_COPROC))
+#if defined(ILL_COPROC) || (defined(HAVE_DECL_ILL_COPROC) && HAVE_DECL_ILL_COPROC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ILL_COPROC) == (7), "ILL_COPROC != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ILL_COPROC 7
 #endif
-#if !(defined(ILL_BADSTK) || (defined(HAVE_DECL_ILL_BADSTK) && HAVE_DECL_ILL_BADSTK))
+#if defined(ILL_BADSTK) || (defined(HAVE_DECL_ILL_BADSTK) && HAVE_DECL_ILL_BADSTK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ILL_BADSTK) == (8), "ILL_BADSTK != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ILL_BADSTK 8
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigill_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigill_codes[] = {
  XLAT(ILL_ILLOPC),
 #if defined(ILL_ILLPARAOP) || (defined(HAVE_DECL_ILL_ILLPARAOP) && HAVE_DECL_ILL_ILLPARAOP)
@@ -75,4 +113,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/siginfo_codes.h b/xlat/siginfo_codes.h
index faef6c7..a882d24 100644
--- a/xlat/siginfo_codes.h
+++ b/xlat/siginfo_codes.h
@@ -1,51 +1,129 @@
 /* Generated by ./xlat/gen.sh from ./xlat/siginfo_codes.in; do not edit. */
-#if !(defined(SI_USER) || (defined(HAVE_DECL_SI_USER) && HAVE_DECL_SI_USER))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SI_USER) || (defined(HAVE_DECL_SI_USER) && HAVE_DECL_SI_USER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_USER) == (0), "SI_USER != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_USER 0
 #endif
-#if !(defined(SI_KERNEL) || (defined(HAVE_DECL_SI_KERNEL) && HAVE_DECL_SI_KERNEL))
+#if defined(SI_KERNEL) || (defined(HAVE_DECL_SI_KERNEL) && HAVE_DECL_SI_KERNEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_KERNEL) == (0x80), "SI_KERNEL != 0x80");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_KERNEL 0x80
 #endif
-#if !(defined(SI_QUEUE) || (defined(HAVE_DECL_SI_QUEUE) && HAVE_DECL_SI_QUEUE))
+#if defined(SI_QUEUE) || (defined(HAVE_DECL_SI_QUEUE) && HAVE_DECL_SI_QUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_QUEUE) == (-1), "SI_QUEUE != -1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_QUEUE -1
 #endif
-#if !(defined(SI_TIMER) || (defined(HAVE_DECL_SI_TIMER) && HAVE_DECL_SI_TIMER))
+#ifdef __mips__
+#if defined(SI_ASYNCIO) || (defined(HAVE_DECL_SI_ASYNCIO) && HAVE_DECL_SI_ASYNCIO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_ASYNCIO) == (-2), "SI_ASYNCIO != -2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SI_ASYNCIO -2
+#endif
+#if defined(SI_TIMER) || (defined(HAVE_DECL_SI_TIMER) && HAVE_DECL_SI_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_TIMER) == (-3), "SI_TIMER != -3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SI_TIMER -3
+#endif
+#if defined(SI_MESGQ) || (defined(HAVE_DECL_SI_MESGQ) && HAVE_DECL_SI_MESGQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_MESGQ) == (-4), "SI_MESGQ != -4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SI_MESGQ -4
+#endif
+#else
+#if defined(SI_TIMER) || (defined(HAVE_DECL_SI_TIMER) && HAVE_DECL_SI_TIMER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_TIMER) == (-2), "SI_TIMER != -2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_TIMER -2
 #endif
-#if !(defined(SI_MESGQ) || (defined(HAVE_DECL_SI_MESGQ) && HAVE_DECL_SI_MESGQ))
+#if defined(SI_MESGQ) || (defined(HAVE_DECL_SI_MESGQ) && HAVE_DECL_SI_MESGQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_MESGQ) == (-3), "SI_MESGQ != -3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_MESGQ -3
 #endif
-#if !(defined(SI_ASYNCIO) || (defined(HAVE_DECL_SI_ASYNCIO) && HAVE_DECL_SI_ASYNCIO))
+#if defined(SI_ASYNCIO) || (defined(HAVE_DECL_SI_ASYNCIO) && HAVE_DECL_SI_ASYNCIO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_ASYNCIO) == (-4), "SI_ASYNCIO != -4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_ASYNCIO -4
 #endif
-#if !(defined(SI_SIGIO) || (defined(HAVE_DECL_SI_SIGIO) && HAVE_DECL_SI_SIGIO))
+#endif
+#if defined(SI_SIGIO) || (defined(HAVE_DECL_SI_SIGIO) && HAVE_DECL_SI_SIGIO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_SIGIO) == (-5), "SI_SIGIO != -5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_SIGIO -5
 #endif
-#if !(defined(SI_TKILL) || (defined(HAVE_DECL_SI_TKILL) && HAVE_DECL_SI_TKILL))
+#if defined(SI_TKILL) || (defined(HAVE_DECL_SI_TKILL) && HAVE_DECL_SI_TKILL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_TKILL) == (-6), "SI_TKILL != -6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_TKILL -6
 #endif
-#if !(defined(SI_DETHREAD) || (defined(HAVE_DECL_SI_DETHREAD) && HAVE_DECL_SI_DETHREAD))
+#if defined(SI_DETHREAD) || (defined(HAVE_DECL_SI_DETHREAD) && HAVE_DECL_SI_DETHREAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_DETHREAD) == (-7), "SI_DETHREAD != -7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_DETHREAD -7
 #endif
-#if !(defined(SI_ASYNCNL) || (defined(HAVE_DECL_SI_ASYNCNL) && HAVE_DECL_SI_ASYNCNL))
+#if defined(SI_ASYNCNL) || (defined(HAVE_DECL_SI_ASYNCNL) && HAVE_DECL_SI_ASYNCNL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SI_ASYNCNL) == (-60), "SI_ASYNCNL != -60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SI_ASYNCNL -60
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat siginfo_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat siginfo_codes[] = {
  XLAT(SI_USER),
  XLAT(SI_KERNEL),
  XLAT(SI_QUEUE),
+
+#ifdef __mips__
+ XLAT(SI_ASYNCIO),
+ XLAT(SI_TIMER),
+ XLAT(SI_MESGQ),
+#else
  XLAT(SI_TIMER),
  XLAT(SI_MESGQ),
  XLAT(SI_ASYNCIO),
+#endif
+
  XLAT(SI_SIGIO),
  XLAT(SI_TKILL),
  XLAT(SI_DETHREAD),
@@ -59,4 +137,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/siginfo_codes.in b/xlat/siginfo_codes.in
index a57c370..968c660 100644
--- a/xlat/siginfo_codes.in
+++ b/xlat/siginfo_codes.in
@@ -1,9 +1,17 @@
 SI_USER 0
 SI_KERNEL 0x80
 SI_QUEUE -1
+
+#ifdef __mips__
+SI_ASYNCIO -2
+SI_TIMER -3
+SI_MESGQ -4
+#else
 SI_TIMER -2
 SI_MESGQ -3
 SI_ASYNCIO -4
+#endif
+
 SI_SIGIO -5
 SI_TKILL -6
 SI_DETHREAD -7
diff --git a/xlat/sigpoll_codes.h b/xlat/sigpoll_codes.h
index 55cc1bb..5e9f08b 100644
--- a/xlat/sigpoll_codes.h
+++ b/xlat/sigpoll_codes.h
@@ -1,32 +1,62 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigpoll_codes.in; do not edit. */
-#if !(defined(POLL_IN) || (defined(HAVE_DECL_POLL_IN) && HAVE_DECL_POLL_IN))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(POLL_IN) || (defined(HAVE_DECL_POLL_IN) && HAVE_DECL_POLL_IN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLL_IN) == (1), "POLL_IN != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLL_IN 1
 #endif
-#if !(defined(POLL_OUT) || (defined(HAVE_DECL_POLL_OUT) && HAVE_DECL_POLL_OUT))
+#if defined(POLL_OUT) || (defined(HAVE_DECL_POLL_OUT) && HAVE_DECL_POLL_OUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLL_OUT) == (2), "POLL_OUT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLL_OUT 2
 #endif
-#if !(defined(POLL_MSG) || (defined(HAVE_DECL_POLL_MSG) && HAVE_DECL_POLL_MSG))
+#if defined(POLL_MSG) || (defined(HAVE_DECL_POLL_MSG) && HAVE_DECL_POLL_MSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLL_MSG) == (3), "POLL_MSG != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLL_MSG 3
 #endif
-#if !(defined(POLL_ERR) || (defined(HAVE_DECL_POLL_ERR) && HAVE_DECL_POLL_ERR))
+#if defined(POLL_ERR) || (defined(HAVE_DECL_POLL_ERR) && HAVE_DECL_POLL_ERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLL_ERR) == (4), "POLL_ERR != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLL_ERR 4
 #endif
-#if !(defined(POLL_PRI) || (defined(HAVE_DECL_POLL_PRI) && HAVE_DECL_POLL_PRI))
+#if defined(POLL_PRI) || (defined(HAVE_DECL_POLL_PRI) && HAVE_DECL_POLL_PRI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLL_PRI) == (5), "POLL_PRI != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLL_PRI 5
 #endif
-#if !(defined(POLL_HUP) || (defined(HAVE_DECL_POLL_HUP) && HAVE_DECL_POLL_HUP))
+#if defined(POLL_HUP) || (defined(HAVE_DECL_POLL_HUP) && HAVE_DECL_POLL_HUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((POLL_HUP) == (6), "POLL_HUP != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define POLL_HUP 6
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigpoll_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigpoll_codes[] = {
  XLAT(POLL_IN),
  XLAT(POLL_OUT),
@@ -37,4 +67,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigprocmaskcmds.h b/xlat/sigprocmaskcmds.h
index 427680b..02df705 100644
--- a/xlat/sigprocmaskcmds.h
+++ b/xlat/sigprocmaskcmds.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigprocmaskcmds.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sigprocmaskcmds in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sigprocmaskcmds in mpers mode
+
+# else
 
 static
 const struct xlat sigprocmaskcmds[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigprof_codes.h b/xlat/sigprof_codes.h
index 2323b9e..6776434 100644
--- a/xlat/sigprof_codes.h
+++ b/xlat/sigprof_codes.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigprof_codes.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigprof_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigprof_codes[] = {
 #if defined(PROF_SIG) || (defined(HAVE_DECL_PROF_SIG) && HAVE_DECL_PROF_SIG)
   XLAT(PROF_SIG),
@@ -16,4 +22,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigsegv_codes.h b/xlat/sigsegv_codes.h
index 30dceee..64fbc79 100644
--- a/xlat/sigsegv_codes.h
+++ b/xlat/sigsegv_codes.h
@@ -1,26 +1,69 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigsegv_codes.in; do not edit. */
-#if !(defined(SEGV_MAPERR) || (defined(HAVE_DECL_SEGV_MAPERR) && HAVE_DECL_SEGV_MAPERR))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SEGV_MAPERR) || (defined(HAVE_DECL_SEGV_MAPERR) && HAVE_DECL_SEGV_MAPERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEGV_MAPERR) == (1), "SEGV_MAPERR != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEGV_MAPERR 1
 #endif
-#if !(defined(SEGV_ACCERR) || (defined(HAVE_DECL_SEGV_ACCERR) && HAVE_DECL_SEGV_ACCERR))
+#if defined(SEGV_ACCERR) || (defined(HAVE_DECL_SEGV_ACCERR) && HAVE_DECL_SEGV_ACCERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEGV_ACCERR) == (2), "SEGV_ACCERR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEGV_ACCERR 2
 #endif
-#if !(defined(SEGV_BNDERR) || (defined(HAVE_DECL_SEGV_BNDERR) && HAVE_DECL_SEGV_BNDERR))
+#if defined(SEGV_BNDERR) || (defined(HAVE_DECL_SEGV_BNDERR) && HAVE_DECL_SEGV_BNDERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEGV_BNDERR) == (3), "SEGV_BNDERR != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEGV_BNDERR 3
 #endif
-#if !(defined(SEGV_PKUERR) || (defined(HAVE_DECL_SEGV_PKUERR) && HAVE_DECL_SEGV_PKUERR))
+#if defined(SEGV_PKUERR) || (defined(HAVE_DECL_SEGV_PKUERR) && HAVE_DECL_SEGV_PKUERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEGV_PKUERR) == (4), "SEGV_PKUERR != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SEGV_PKUERR 4
 #endif
+#if defined(SEGV_ACCADI) || (defined(HAVE_DECL_SEGV_ACCADI) && HAVE_DECL_SEGV_ACCADI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEGV_ACCADI) == (5), "SEGV_ACCADI != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SEGV_ACCADI 5
+#endif
+#if defined(SEGV_ADIDERR) || (defined(HAVE_DECL_SEGV_ADIDERR) && HAVE_DECL_SEGV_ADIDERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEGV_ADIDERR) == (6), "SEGV_ADIDERR != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SEGV_ADIDERR 6
+#endif
+#if defined(SEGV_ADIPERR) || (defined(HAVE_DECL_SEGV_ADIPERR) && HAVE_DECL_SEGV_ADIPERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SEGV_ADIPERR) == (7), "SEGV_ADIPERR != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SEGV_ADIPERR 7
+#endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigsegv_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigsegv_codes[] = {
  XLAT(SEGV_MAPERR),
  XLAT(SEGV_ACCERR),
@@ -32,7 +75,12 @@
   XLAT(__SEGV_PSTKOVF),
 #endif
  XLAT(SEGV_PKUERR),
+ XLAT(SEGV_ACCADI),
+ XLAT(SEGV_ADIDERR),
+ XLAT(SEGV_ADIPERR),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigsegv_codes.in b/xlat/sigsegv_codes.in
index 86dbdc5..2ca98f6 100644
--- a/xlat/sigsegv_codes.in
+++ b/xlat/sigsegv_codes.in
@@ -4,3 +4,6 @@
 SEGV_BNDERR 3
 __SEGV_PSTKOVF /* 4 - ia64 */
 SEGV_PKUERR 4
+SEGV_ACCADI 5	/* sparc */
+SEGV_ADIDERR 6	/* sparc */
+SEGV_ADIPERR 7	/* sparc */
diff --git a/xlat/sigsys_codes.h b/xlat/sigsys_codes.h
index 6fba1fb..4539740 100644
--- a/xlat/sigsys_codes.h
+++ b/xlat/sigsys_codes.h
@@ -1,20 +1,32 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigsys_codes.in; do not edit. */
-#if !(defined(SYS_SECCOMP) || (defined(HAVE_DECL_SYS_SECCOMP) && HAVE_DECL_SYS_SECCOMP))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SYS_SECCOMP) || (defined(HAVE_DECL_SYS_SECCOMP) && HAVE_DECL_SYS_SECCOMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_SECCOMP) == (1), "SYS_SECCOMP != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_SECCOMP 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigsys_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigsys_codes[] = {
  XLAT(SYS_SECCOMP),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sigtrap_codes.h b/xlat/sigtrap_codes.h
index db2a7c9..0fbac5c 100644
--- a/xlat/sigtrap_codes.h
+++ b/xlat/sigtrap_codes.h
@@ -1,26 +1,48 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sigtrap_codes.in; do not edit. */
-#if !(defined(TRAP_BRKPT) || (defined(HAVE_DECL_TRAP_BRKPT) && HAVE_DECL_TRAP_BRKPT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TRAP_BRKPT) || (defined(HAVE_DECL_TRAP_BRKPT) && HAVE_DECL_TRAP_BRKPT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TRAP_BRKPT) == (1), "TRAP_BRKPT != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TRAP_BRKPT 1
 #endif
-#if !(defined(TRAP_TRACE) || (defined(HAVE_DECL_TRAP_TRACE) && HAVE_DECL_TRAP_TRACE))
+#if defined(TRAP_TRACE) || (defined(HAVE_DECL_TRAP_TRACE) && HAVE_DECL_TRAP_TRACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TRAP_TRACE) == (2), "TRAP_TRACE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TRAP_TRACE 2
 #endif
-#if !(defined(TRAP_BRANCH) || (defined(HAVE_DECL_TRAP_BRANCH) && HAVE_DECL_TRAP_BRANCH))
+#if defined(TRAP_BRANCH) || (defined(HAVE_DECL_TRAP_BRANCH) && HAVE_DECL_TRAP_BRANCH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TRAP_BRANCH) == (3), "TRAP_BRANCH != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TRAP_BRANCH 3
 #endif
-#if !(defined(TRAP_HWBKPT) || (defined(HAVE_DECL_TRAP_HWBKPT) && HAVE_DECL_TRAP_HWBKPT))
+#if defined(TRAP_HWBKPT) || (defined(HAVE_DECL_TRAP_HWBKPT) && HAVE_DECL_TRAP_HWBKPT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TRAP_HWBKPT) == (4), "TRAP_HWBKPT != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TRAP_HWBKPT 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat sigtrap_codes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat sigtrap_codes[] = {
 #if defined(TRAP_STEP) || (defined(HAVE_DECL_TRAP_STEP) && HAVE_DECL_TRAP_STEP)
   XLAT(TRAP_STEP),
@@ -41,4 +63,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/skf_ad.h b/xlat/skf_ad.h
index 23b157f..fac1518 100644
--- a/xlat/skf_ad.h
+++ b/xlat/skf_ad.h
@@ -1,58 +1,128 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SKF_AD_PROTOCOL) || (defined(HAVE_DECL_SKF_AD_PROTOCOL) && HAVE_DECL_SKF_AD_PROTOCOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_PROTOCOL) == (0), "SKF_AD_PROTOCOL != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_PROTOCOL 0
 #endif
-#if !(defined(SKF_AD_PKTTYPE) || (defined(HAVE_DECL_SKF_AD_PKTTYPE) && HAVE_DECL_SKF_AD_PKTTYPE))
+#if defined(SKF_AD_PKTTYPE) || (defined(HAVE_DECL_SKF_AD_PKTTYPE) && HAVE_DECL_SKF_AD_PKTTYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_PKTTYPE) == (4), "SKF_AD_PKTTYPE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_PKTTYPE 4
 #endif
-#if !(defined(SKF_AD_IFINDEX) || (defined(HAVE_DECL_SKF_AD_IFINDEX) && HAVE_DECL_SKF_AD_IFINDEX))
+#if defined(SKF_AD_IFINDEX) || (defined(HAVE_DECL_SKF_AD_IFINDEX) && HAVE_DECL_SKF_AD_IFINDEX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_IFINDEX) == (8), "SKF_AD_IFINDEX != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_IFINDEX 8
 #endif
-#if !(defined(SKF_AD_NLATTR) || (defined(HAVE_DECL_SKF_AD_NLATTR) && HAVE_DECL_SKF_AD_NLATTR))
+#if defined(SKF_AD_NLATTR) || (defined(HAVE_DECL_SKF_AD_NLATTR) && HAVE_DECL_SKF_AD_NLATTR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_NLATTR) == (12), "SKF_AD_NLATTR != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(SKF_AD_NLATTR_NEST) || (defined(HAVE_DECL_SKF_AD_NLATTR_NEST) && HAVE_DECL_SKF_AD_NLATTR_NEST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_NLATTR_NEST) == (16), "SKF_AD_NLATTR_NEST != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_NLATTR_NEST 16
 #endif
-#if !(defined(SKF_AD_MARK) || (defined(HAVE_DECL_SKF_AD_MARK) && HAVE_DECL_SKF_AD_MARK))
+#if defined(SKF_AD_MARK) || (defined(HAVE_DECL_SKF_AD_MARK) && HAVE_DECL_SKF_AD_MARK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_MARK) == (20), "SKF_AD_MARK != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_MARK 20
 #endif
-#if !(defined(SKF_AD_QUEUE) || (defined(HAVE_DECL_SKF_AD_QUEUE) && HAVE_DECL_SKF_AD_QUEUE))
+#if defined(SKF_AD_QUEUE) || (defined(HAVE_DECL_SKF_AD_QUEUE) && HAVE_DECL_SKF_AD_QUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_QUEUE) == (24), "SKF_AD_QUEUE != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_QUEUE 24
 #endif
-#if !(defined(SKF_AD_HATYPE) || (defined(HAVE_DECL_SKF_AD_HATYPE) && HAVE_DECL_SKF_AD_HATYPE))
+#if defined(SKF_AD_HATYPE) || (defined(HAVE_DECL_SKF_AD_HATYPE) && HAVE_DECL_SKF_AD_HATYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_HATYPE) == (28), "SKF_AD_HATYPE != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_HATYPE 28
 #endif
-#if !(defined(SKF_AD_RXHASH) || (defined(HAVE_DECL_SKF_AD_RXHASH) && HAVE_DECL_SKF_AD_RXHASH))
+#if defined(SKF_AD_RXHASH) || (defined(HAVE_DECL_SKF_AD_RXHASH) && HAVE_DECL_SKF_AD_RXHASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_RXHASH) == (32), "SKF_AD_RXHASH != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_RXHASH 32
 #endif
-#if !(defined(SKF_AD_CPU) || (defined(HAVE_DECL_SKF_AD_CPU) && HAVE_DECL_SKF_AD_CPU))
+#if defined(SKF_AD_CPU) || (defined(HAVE_DECL_SKF_AD_CPU) && HAVE_DECL_SKF_AD_CPU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_CPU) == (36), "SKF_AD_CPU != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(SKF_AD_ALU_XOR_X) || (defined(HAVE_DECL_SKF_AD_ALU_XOR_X) && HAVE_DECL_SKF_AD_ALU_XOR_X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_ALU_XOR_X) == (40), "SKF_AD_ALU_XOR_X != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(SKF_AD_VLAN_TAG) || (defined(HAVE_DECL_SKF_AD_VLAN_TAG) && HAVE_DECL_SKF_AD_VLAN_TAG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_VLAN_TAG) == (44), "SKF_AD_VLAN_TAG != 44");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(SKF_AD_VLAN_TAG_PRESENT) || (defined(HAVE_DECL_SKF_AD_VLAN_TAG_PRESENT) && HAVE_DECL_SKF_AD_VLAN_TAG_PRESENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_VLAN_TAG_PRESENT) == (48), "SKF_AD_VLAN_TAG_PRESENT != 48");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(SKF_AD_PAY_OFFSET) || (defined(HAVE_DECL_SKF_AD_PAY_OFFSET) && HAVE_DECL_SKF_AD_PAY_OFFSET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_PAY_OFFSET) == (52), "SKF_AD_PAY_OFFSET != 52");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_PAY_OFFSET 52
 #endif
-#if !(defined(SKF_AD_RANDOM) || (defined(HAVE_DECL_SKF_AD_RANDOM) && HAVE_DECL_SKF_AD_RANDOM))
+#if defined(SKF_AD_RANDOM) || (defined(HAVE_DECL_SKF_AD_RANDOM) && HAVE_DECL_SKF_AD_RANDOM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_RANDOM) == (56), "SKF_AD_RANDOM != 56");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # 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))
+#if defined(SKF_AD_VLAN_TPID) || (defined(HAVE_DECL_SKF_AD_VLAN_TPID) && HAVE_DECL_SKF_AD_VLAN_TPID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_VLAN_TPID) == (60), "SKF_AD_VLAN_TPID != 60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SKF_AD_VLAN_TPID 60
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat skf_ad in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat skf_ad in mpers mode
+
+# else
 
 static
 const struct xlat skf_ad[] = {
@@ -75,4 +145,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/skf_off.h b/xlat/skf_off.h
new file mode 100644
index 0000000..77afe64
--- /dev/null
+++ b/xlat/skf_off.h
@@ -0,0 +1,26 @@
+/* Generated by ./xlat/gen.sh from ./xlat/skf_off.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SKF_AD_OFF) || (defined(HAVE_DECL_SKF_AD_OFF) && HAVE_DECL_SKF_AD_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_AD_OFF) == (-0x1000), "SKF_AD_OFF != -0x1000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SKF_AD_OFF -0x1000
+#endif
+#if defined(SKF_NET_OFF) || (defined(HAVE_DECL_SKF_NET_OFF) && HAVE_DECL_SKF_NET_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_NET_OFF) == (-0x100000), "SKF_NET_OFF != -0x100000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SKF_NET_OFF -0x100000
+#endif
+#if defined(SKF_LL_OFF) || (defined(HAVE_DECL_SKF_LL_OFF) && HAVE_DECL_SKF_LL_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SKF_LL_OFF) == (-0x200000), "SKF_LL_OFF != -0x200000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SKF_LL_OFF -0x200000
+#endif
diff --git a/xlat/skf_off.in b/xlat/skf_off.in
new file mode 100644
index 0000000..6db30a9
--- /dev/null
+++ b/xlat/skf_off.in
@@ -0,0 +1,4 @@
+SKF_AD_OFF	-0x1000
+SKF_NET_OFF	-0x100000
+SKF_LL_OFF	-0x200000
+#stop
diff --git a/xlat/smc_diag_attrs.h b/xlat/smc_diag_attrs.h
index 84899ee..e6c0a4e 100644
--- a/xlat/smc_diag_attrs.h
+++ b/xlat/smc_diag_attrs.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/smc_diag_attrs.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat smc_diag_attrs in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat smc_diag_attrs in mpers mode
+
+# else
 
 static
 const struct xlat smc_diag_attrs[] = {
@@ -15,4 +21,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/smc_diag_extended_flags.h b/xlat/smc_diag_extended_flags.h
index 988dc94..48cb3a4 100644
--- a/xlat/smc_diag_extended_flags.h
+++ b/xlat/smc_diag_extended_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/smc_diag_extended_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat smc_diag_extended_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat smc_diag_extended_flags in mpers mode
+
+# else
 
 static
 const struct xlat smc_diag_extended_flags[] = {
@@ -13,4 +19,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/smc_link_group_roles.h b/xlat/smc_link_group_roles.h
index a52e853..24f2f5d 100644
--- a/xlat/smc_link_group_roles.h
+++ b/xlat/smc_link_group_roles.h
@@ -1,16 +1,30 @@
 /* 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))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SMC_CLNT) || (defined(HAVE_DECL_SMC_CLNT) && HAVE_DECL_SMC_CLNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_CLNT) == (0), "SMC_CLNT != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_CLNT 0
 #endif
-#if !(defined(SMC_SERV) || (defined(HAVE_DECL_SMC_SERV) && HAVE_DECL_SMC_SERV))
+#if defined(SMC_SERV) || (defined(HAVE_DECL_SMC_SERV) && HAVE_DECL_SMC_SERV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_SERV) == (1), "SMC_SERV != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_SERV 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat smc_link_group_roles in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat smc_link_group_roles in mpers mode
+
+# else
 
 static
 const struct xlat smc_link_group_roles[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/smc_protocols.h b/xlat/smc_protocols.h
new file mode 100644
index 0000000..18ab383
--- /dev/null
+++ b/xlat/smc_protocols.h
@@ -0,0 +1,38 @@
+/* Generated by ./xlat/gen.sh from ./xlat/smc_protocols.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MCPROTO_SMC) || (defined(HAVE_DECL_MCPROTO_SMC) && HAVE_DECL_MCPROTO_SMC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MCPROTO_SMC) == (0), "MCPROTO_SMC != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define MCPROTO_SMC 0
+#endif
+#if defined(SMCPROTO_SMC6) || (defined(HAVE_DECL_SMCPROTO_SMC6) && HAVE_DECL_SMCPROTO_SMC6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMCPROTO_SMC6) == (1), "SMCPROTO_SMC6 != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SMCPROTO_SMC6 1
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat smc_protocols in mpers mode
+
+# else
+
+static
+const struct xlat smc_protocols[] = {
+ [MCPROTO_SMC] = XLAT(MCPROTO_SMC),
+ [SMCPROTO_SMC6] = XLAT(SMCPROTO_SMC6),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/smc_protocols.in b/xlat/smc_protocols.in
new file mode 100644
index 0000000..3a65a39
--- /dev/null
+++ b/xlat/smc_protocols.in
@@ -0,0 +1,3 @@
+#value_indexed
+MCPROTO_SMC	0
+SMCPROTO_SMC6	1
diff --git a/xlat/smc_states.h b/xlat/smc_states.h
index a5371d7..e88a62c 100644
--- a/xlat/smc_states.h
+++ b/xlat/smc_states.h
@@ -1,46 +1,100 @@
 /* Generated by ./xlat/gen.sh from ./xlat/smc_states.in; do not edit. */
-#if !(defined(SMC_ACTIVE) || (defined(HAVE_DECL_SMC_ACTIVE) && HAVE_DECL_SMC_ACTIVE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SMC_ACTIVE) || (defined(HAVE_DECL_SMC_ACTIVE) && HAVE_DECL_SMC_ACTIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_ACTIVE) == (1), "SMC_ACTIVE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_ACTIVE 1
 #endif
-#if !(defined(SMC_INIT) || (defined(HAVE_DECL_SMC_INIT) && HAVE_DECL_SMC_INIT))
+#if defined(SMC_INIT) || (defined(HAVE_DECL_SMC_INIT) && HAVE_DECL_SMC_INIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_INIT) == (2), "SMC_INIT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_INIT 2
 #endif
-#if !(defined(SMC_CLOSED) || (defined(HAVE_DECL_SMC_CLOSED) && HAVE_DECL_SMC_CLOSED))
+#if defined(SMC_CLOSED) || (defined(HAVE_DECL_SMC_CLOSED) && HAVE_DECL_SMC_CLOSED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_CLOSED) == (7), "SMC_CLOSED != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_CLOSED 7
 #endif
-#if !(defined(SMC_LISTEN) || (defined(HAVE_DECL_SMC_LISTEN) && HAVE_DECL_SMC_LISTEN))
+#if defined(SMC_LISTEN) || (defined(HAVE_DECL_SMC_LISTEN) && HAVE_DECL_SMC_LISTEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_LISTEN) == (10), "SMC_LISTEN != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_LISTEN 10
 #endif
-#if !(defined(SMC_PEERCLOSEWAIT1) || (defined(HAVE_DECL_SMC_PEERCLOSEWAIT1) && HAVE_DECL_SMC_PEERCLOSEWAIT1))
+#if defined(SMC_PEERCLOSEWAIT1) || (defined(HAVE_DECL_SMC_PEERCLOSEWAIT1) && HAVE_DECL_SMC_PEERCLOSEWAIT1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_PEERCLOSEWAIT1) == (20), "SMC_PEERCLOSEWAIT1 != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_PEERCLOSEWAIT1 20
 #endif
-#if !(defined(SMC_PEERCLOSEWAIT2) || (defined(HAVE_DECL_SMC_PEERCLOSEWAIT2) && HAVE_DECL_SMC_PEERCLOSEWAIT2))
+#if defined(SMC_PEERCLOSEWAIT2) || (defined(HAVE_DECL_SMC_PEERCLOSEWAIT2) && HAVE_DECL_SMC_PEERCLOSEWAIT2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_PEERCLOSEWAIT2) == (21), "SMC_PEERCLOSEWAIT2 != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_PEERCLOSEWAIT2 21
 #endif
-#if !(defined(SMC_APPFINCLOSEWAIT) || (defined(HAVE_DECL_SMC_APPFINCLOSEWAIT) && HAVE_DECL_SMC_APPFINCLOSEWAIT))
+#if defined(SMC_APPFINCLOSEWAIT) || (defined(HAVE_DECL_SMC_APPFINCLOSEWAIT) && HAVE_DECL_SMC_APPFINCLOSEWAIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_APPFINCLOSEWAIT) == (24), "SMC_APPFINCLOSEWAIT != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_APPFINCLOSEWAIT 24
 #endif
-#if !(defined(SMC_APPCLOSEWAIT1) || (defined(HAVE_DECL_SMC_APPCLOSEWAIT1) && HAVE_DECL_SMC_APPCLOSEWAIT1))
+#if defined(SMC_APPCLOSEWAIT1) || (defined(HAVE_DECL_SMC_APPCLOSEWAIT1) && HAVE_DECL_SMC_APPCLOSEWAIT1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_APPCLOSEWAIT1) == (22), "SMC_APPCLOSEWAIT1 != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_APPCLOSEWAIT1 22
 #endif
-#if !(defined(SMC_APPCLOSEWAIT2) || (defined(HAVE_DECL_SMC_APPCLOSEWAIT2) && HAVE_DECL_SMC_APPCLOSEWAIT2))
+#if defined(SMC_APPCLOSEWAIT2) || (defined(HAVE_DECL_SMC_APPCLOSEWAIT2) && HAVE_DECL_SMC_APPCLOSEWAIT2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_APPCLOSEWAIT2) == (23), "SMC_APPCLOSEWAIT2 != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_APPCLOSEWAIT2 23
 #endif
-#if !(defined(SMC_PEERFINCLOSEWAIT) || (defined(HAVE_DECL_SMC_PEERFINCLOSEWAIT) && HAVE_DECL_SMC_PEERFINCLOSEWAIT))
+#if defined(SMC_PEERFINCLOSEWAIT) || (defined(HAVE_DECL_SMC_PEERFINCLOSEWAIT) && HAVE_DECL_SMC_PEERFINCLOSEWAIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_PEERFINCLOSEWAIT) == (25), "SMC_PEERFINCLOSEWAIT != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_PEERFINCLOSEWAIT 25
 #endif
-#if !(defined(SMC_PEERABORTWAIT) || (defined(HAVE_DECL_SMC_PEERABORTWAIT) && HAVE_DECL_SMC_PEERABORTWAIT))
+#if defined(SMC_PEERABORTWAIT) || (defined(HAVE_DECL_SMC_PEERABORTWAIT) && HAVE_DECL_SMC_PEERABORTWAIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_PEERABORTWAIT) == (26), "SMC_PEERABORTWAIT != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_PEERABORTWAIT 26
 #endif
-#if !(defined(SMC_PROCESSABORT) || (defined(HAVE_DECL_SMC_PROCESSABORT) && HAVE_DECL_SMC_PROCESSABORT))
+#if defined(SMC_PROCESSABORT) || (defined(HAVE_DECL_SMC_PROCESSABORT) && HAVE_DECL_SMC_PROCESSABORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SMC_PROCESSABORT) == (27), "SMC_PROCESSABORT != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SMC_PROCESSABORT 27
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat smc_states in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat smc_states in mpers mode
+
+# else
 
 static
 const struct xlat smc_states[] = {
@@ -59,4 +113,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/snmp_icmp6_stats.h b/xlat/snmp_icmp6_stats.h
new file mode 100644
index 0000000..62553d5
--- /dev/null
+++ b/xlat/snmp_icmp6_stats.h
@@ -0,0 +1,70 @@
+/* Generated by ./xlat/gen.sh from ./xlat/snmp_icmp6_stats.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(ICMP6_MIB_NUM) || (defined(HAVE_DECL_ICMP6_MIB_NUM) && HAVE_DECL_ICMP6_MIB_NUM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ICMP6_MIB_NUM) == (0), "ICMP6_MIB_NUM != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ICMP6_MIB_NUM 0
+#endif
+#if defined(ICMP6_MIB_INMSGS) || (defined(HAVE_DECL_ICMP6_MIB_INMSGS) && HAVE_DECL_ICMP6_MIB_INMSGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ICMP6_MIB_INMSGS) == (1), "ICMP6_MIB_INMSGS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ICMP6_MIB_INMSGS 1
+#endif
+#if defined(ICMP6_MIB_INERRORS) || (defined(HAVE_DECL_ICMP6_MIB_INERRORS) && HAVE_DECL_ICMP6_MIB_INERRORS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ICMP6_MIB_INERRORS) == (2), "ICMP6_MIB_INERRORS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ICMP6_MIB_INERRORS 2
+#endif
+#if defined(ICMP6_MIB_OUTMSGS) || (defined(HAVE_DECL_ICMP6_MIB_OUTMSGS) && HAVE_DECL_ICMP6_MIB_OUTMSGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ICMP6_MIB_OUTMSGS) == (3), "ICMP6_MIB_OUTMSGS != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ICMP6_MIB_OUTMSGS 3
+#endif
+#if defined(ICMP6_MIB_OUTERRORS) || (defined(HAVE_DECL_ICMP6_MIB_OUTERRORS) && HAVE_DECL_ICMP6_MIB_OUTERRORS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ICMP6_MIB_OUTERRORS) == (4), "ICMP6_MIB_OUTERRORS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ICMP6_MIB_OUTERRORS 4
+#endif
+#if defined(ICMP6_MIB_CSUMERRORS) || (defined(HAVE_DECL_ICMP6_MIB_CSUMERRORS) && HAVE_DECL_ICMP6_MIB_CSUMERRORS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ICMP6_MIB_CSUMERRORS) == (5), "ICMP6_MIB_CSUMERRORS != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ICMP6_MIB_CSUMERRORS 5
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat snmp_icmp6_stats in mpers mode
+
+# else
+
+static
+const struct xlat snmp_icmp6_stats[] = {
+ [ICMP6_MIB_NUM] = XLAT(ICMP6_MIB_NUM),
+ [ICMP6_MIB_INMSGS] = XLAT(ICMP6_MIB_INMSGS),
+ [ICMP6_MIB_INERRORS] = XLAT(ICMP6_MIB_INERRORS),
+ [ICMP6_MIB_OUTMSGS] = XLAT(ICMP6_MIB_OUTMSGS),
+ [ICMP6_MIB_OUTERRORS] = XLAT(ICMP6_MIB_OUTERRORS),
+ [ICMP6_MIB_CSUMERRORS] = XLAT(ICMP6_MIB_CSUMERRORS),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/snmp_icmp6_stats.in b/xlat/snmp_icmp6_stats.in
new file mode 100644
index 0000000..ee4769e
--- /dev/null
+++ b/xlat/snmp_icmp6_stats.in
@@ -0,0 +1,7 @@
+#value_indexed
+ICMP6_MIB_NUM		0
+ICMP6_MIB_INMSGS	1
+ICMP6_MIB_INERRORS	2
+ICMP6_MIB_OUTMSGS	3
+ICMP6_MIB_OUTERRORS	4
+ICMP6_MIB_CSUMERRORS	5
diff --git a/xlat/snmp_ip_stats.h b/xlat/snmp_ip_stats.h
new file mode 100644
index 0000000..e2a4af9
--- /dev/null
+++ b/xlat/snmp_ip_stats.h
@@ -0,0 +1,310 @@
+/* Generated by ./xlat/gen.sh from ./xlat/snmp_ip_stats.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IPSTATS_MIB_NUM) || (defined(HAVE_DECL_IPSTATS_MIB_NUM) && HAVE_DECL_IPSTATS_MIB_NUM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_NUM) == (0), "IPSTATS_MIB_NUM != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_NUM 0
+#endif
+#if defined(IPSTATS_MIB_INPKTS) || (defined(HAVE_DECL_IPSTATS_MIB_INPKTS) && HAVE_DECL_IPSTATS_MIB_INPKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INPKTS) == (1), "IPSTATS_MIB_INPKTS != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INPKTS 1
+#endif
+#if defined(IPSTATS_MIB_INOCTETS) || (defined(HAVE_DECL_IPSTATS_MIB_INOCTETS) && HAVE_DECL_IPSTATS_MIB_INOCTETS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INOCTETS) == (2), "IPSTATS_MIB_INOCTETS != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INOCTETS 2
+#endif
+#if defined(IPSTATS_MIB_INDELIVERS) || (defined(HAVE_DECL_IPSTATS_MIB_INDELIVERS) && HAVE_DECL_IPSTATS_MIB_INDELIVERS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INDELIVERS) == (3), "IPSTATS_MIB_INDELIVERS != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INDELIVERS 3
+#endif
+#if defined(IPSTATS_MIB_OUTFORWDATAGRAMS) || (defined(HAVE_DECL_IPSTATS_MIB_OUTFORWDATAGRAMS) && HAVE_DECL_IPSTATS_MIB_OUTFORWDATAGRAMS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_OUTFORWDATAGRAMS) == (4), "IPSTATS_MIB_OUTFORWDATAGRAMS != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_OUTFORWDATAGRAMS 4
+#endif
+#if defined(IPSTATS_MIB_OUTPKTS) || (defined(HAVE_DECL_IPSTATS_MIB_OUTPKTS) && HAVE_DECL_IPSTATS_MIB_OUTPKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_OUTPKTS) == (5), "IPSTATS_MIB_OUTPKTS != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_OUTPKTS 5
+#endif
+#if defined(IPSTATS_MIB_OUTOCTETS) || (defined(HAVE_DECL_IPSTATS_MIB_OUTOCTETS) && HAVE_DECL_IPSTATS_MIB_OUTOCTETS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_OUTOCTETS) == (6), "IPSTATS_MIB_OUTOCTETS != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_OUTOCTETS 6
+#endif
+#if defined(IPSTATS_MIB_INHDRERRORS) || (defined(HAVE_DECL_IPSTATS_MIB_INHDRERRORS) && HAVE_DECL_IPSTATS_MIB_INHDRERRORS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INHDRERRORS) == (7), "IPSTATS_MIB_INHDRERRORS != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INHDRERRORS 7
+#endif
+#if defined(IPSTATS_MIB_INTOOBIGERRORS) || (defined(HAVE_DECL_IPSTATS_MIB_INTOOBIGERRORS) && HAVE_DECL_IPSTATS_MIB_INTOOBIGERRORS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INTOOBIGERRORS) == (8), "IPSTATS_MIB_INTOOBIGERRORS != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INTOOBIGERRORS 8
+#endif
+#if defined(IPSTATS_MIB_INNOROUTES) || (defined(HAVE_DECL_IPSTATS_MIB_INNOROUTES) && HAVE_DECL_IPSTATS_MIB_INNOROUTES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INNOROUTES) == (9), "IPSTATS_MIB_INNOROUTES != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INNOROUTES 9
+#endif
+#if defined(IPSTATS_MIB_INADDRERRORS) || (defined(HAVE_DECL_IPSTATS_MIB_INADDRERRORS) && HAVE_DECL_IPSTATS_MIB_INADDRERRORS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INADDRERRORS) == (10), "IPSTATS_MIB_INADDRERRORS != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INADDRERRORS 10
+#endif
+#if defined(IPSTATS_MIB_INUNKNOWNPROTOS) || (defined(HAVE_DECL_IPSTATS_MIB_INUNKNOWNPROTOS) && HAVE_DECL_IPSTATS_MIB_INUNKNOWNPROTOS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INUNKNOWNPROTOS) == (11), "IPSTATS_MIB_INUNKNOWNPROTOS != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INUNKNOWNPROTOS 11
+#endif
+#if defined(IPSTATS_MIB_INTRUNCATEDPKTS) || (defined(HAVE_DECL_IPSTATS_MIB_INTRUNCATEDPKTS) && HAVE_DECL_IPSTATS_MIB_INTRUNCATEDPKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INTRUNCATEDPKTS) == (12), "IPSTATS_MIB_INTRUNCATEDPKTS != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INTRUNCATEDPKTS 12
+#endif
+#if defined(IPSTATS_MIB_INDISCARDS) || (defined(HAVE_DECL_IPSTATS_MIB_INDISCARDS) && HAVE_DECL_IPSTATS_MIB_INDISCARDS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INDISCARDS) == (13), "IPSTATS_MIB_INDISCARDS != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INDISCARDS 13
+#endif
+#if defined(IPSTATS_MIB_OUTDISCARDS) || (defined(HAVE_DECL_IPSTATS_MIB_OUTDISCARDS) && HAVE_DECL_IPSTATS_MIB_OUTDISCARDS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_OUTDISCARDS) == (14), "IPSTATS_MIB_OUTDISCARDS != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_OUTDISCARDS 14
+#endif
+#if defined(IPSTATS_MIB_OUTNOROUTES) || (defined(HAVE_DECL_IPSTATS_MIB_OUTNOROUTES) && HAVE_DECL_IPSTATS_MIB_OUTNOROUTES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_OUTNOROUTES) == (15), "IPSTATS_MIB_OUTNOROUTES != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_OUTNOROUTES 15
+#endif
+#if defined(IPSTATS_MIB_REASMTIMEOUT) || (defined(HAVE_DECL_IPSTATS_MIB_REASMTIMEOUT) && HAVE_DECL_IPSTATS_MIB_REASMTIMEOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_REASMTIMEOUT) == (16), "IPSTATS_MIB_REASMTIMEOUT != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_REASMTIMEOUT 16
+#endif
+#if defined(IPSTATS_MIB_REASMREQDS) || (defined(HAVE_DECL_IPSTATS_MIB_REASMREQDS) && HAVE_DECL_IPSTATS_MIB_REASMREQDS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_REASMREQDS) == (17), "IPSTATS_MIB_REASMREQDS != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_REASMREQDS 17
+#endif
+#if defined(IPSTATS_MIB_REASMOKS) || (defined(HAVE_DECL_IPSTATS_MIB_REASMOKS) && HAVE_DECL_IPSTATS_MIB_REASMOKS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_REASMOKS) == (18), "IPSTATS_MIB_REASMOKS != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_REASMOKS 18
+#endif
+#if defined(IPSTATS_MIB_REASMFAILS) || (defined(HAVE_DECL_IPSTATS_MIB_REASMFAILS) && HAVE_DECL_IPSTATS_MIB_REASMFAILS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_REASMFAILS) == (19), "IPSTATS_MIB_REASMFAILS != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_REASMFAILS 19
+#endif
+#if defined(IPSTATS_MIB_FRAGOKS) || (defined(HAVE_DECL_IPSTATS_MIB_FRAGOKS) && HAVE_DECL_IPSTATS_MIB_FRAGOKS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_FRAGOKS) == (20), "IPSTATS_MIB_FRAGOKS != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_FRAGOKS 20
+#endif
+#if defined(IPSTATS_MIB_FRAGFAILS) || (defined(HAVE_DECL_IPSTATS_MIB_FRAGFAILS) && HAVE_DECL_IPSTATS_MIB_FRAGFAILS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_FRAGFAILS) == (21), "IPSTATS_MIB_FRAGFAILS != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_FRAGFAILS 21
+#endif
+#if defined(IPSTATS_MIB_FRAGCREATES) || (defined(HAVE_DECL_IPSTATS_MIB_FRAGCREATES) && HAVE_DECL_IPSTATS_MIB_FRAGCREATES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_FRAGCREATES) == (22), "IPSTATS_MIB_FRAGCREATES != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_FRAGCREATES 22
+#endif
+#if defined(IPSTATS_MIB_INMCASTPKTS) || (defined(HAVE_DECL_IPSTATS_MIB_INMCASTPKTS) && HAVE_DECL_IPSTATS_MIB_INMCASTPKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INMCASTPKTS) == (23), "IPSTATS_MIB_INMCASTPKTS != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INMCASTPKTS 23
+#endif
+#if defined(IPSTATS_MIB_OUTMCASTPKTS) || (defined(HAVE_DECL_IPSTATS_MIB_OUTMCASTPKTS) && HAVE_DECL_IPSTATS_MIB_OUTMCASTPKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_OUTMCASTPKTS) == (24), "IPSTATS_MIB_OUTMCASTPKTS != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_OUTMCASTPKTS 24
+#endif
+#if defined(IPSTATS_MIB_INBCASTPKTS) || (defined(HAVE_DECL_IPSTATS_MIB_INBCASTPKTS) && HAVE_DECL_IPSTATS_MIB_INBCASTPKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INBCASTPKTS) == (25), "IPSTATS_MIB_INBCASTPKTS != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INBCASTPKTS 25
+#endif
+#if defined(IPSTATS_MIB_OUTBCASTPKTS) || (defined(HAVE_DECL_IPSTATS_MIB_OUTBCASTPKTS) && HAVE_DECL_IPSTATS_MIB_OUTBCASTPKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_OUTBCASTPKTS) == (26), "IPSTATS_MIB_OUTBCASTPKTS != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_OUTBCASTPKTS 26
+#endif
+#if defined(IPSTATS_MIB_INMCASTOCTETS) || (defined(HAVE_DECL_IPSTATS_MIB_INMCASTOCTETS) && HAVE_DECL_IPSTATS_MIB_INMCASTOCTETS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INMCASTOCTETS) == (27), "IPSTATS_MIB_INMCASTOCTETS != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INMCASTOCTETS 27
+#endif
+#if defined(IPSTATS_MIB_OUTMCASTOCTETS) || (defined(HAVE_DECL_IPSTATS_MIB_OUTMCASTOCTETS) && HAVE_DECL_IPSTATS_MIB_OUTMCASTOCTETS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_OUTMCASTOCTETS) == (28), "IPSTATS_MIB_OUTMCASTOCTETS != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_OUTMCASTOCTETS 28
+#endif
+#if defined(IPSTATS_MIB_INBCASTOCTETS) || (defined(HAVE_DECL_IPSTATS_MIB_INBCASTOCTETS) && HAVE_DECL_IPSTATS_MIB_INBCASTOCTETS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_INBCASTOCTETS) == (29), "IPSTATS_MIB_INBCASTOCTETS != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_INBCASTOCTETS 29
+#endif
+#if defined(IPSTATS_MIB_OUTBCASTOCTETS) || (defined(HAVE_DECL_IPSTATS_MIB_OUTBCASTOCTETS) && HAVE_DECL_IPSTATS_MIB_OUTBCASTOCTETS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_OUTBCASTOCTETS) == (30), "IPSTATS_MIB_OUTBCASTOCTETS != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_OUTBCASTOCTETS 30
+#endif
+#if defined(IPSTATS_MIB_CSUMERRORS) || (defined(HAVE_DECL_IPSTATS_MIB_CSUMERRORS) && HAVE_DECL_IPSTATS_MIB_CSUMERRORS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_CSUMERRORS) == (31), "IPSTATS_MIB_CSUMERRORS != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_CSUMERRORS 31
+#endif
+#if defined(IPSTATS_MIB_NOECTPKTS) || (defined(HAVE_DECL_IPSTATS_MIB_NOECTPKTS) && HAVE_DECL_IPSTATS_MIB_NOECTPKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_NOECTPKTS) == (32), "IPSTATS_MIB_NOECTPKTS != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_NOECTPKTS 32
+#endif
+#if defined(IPSTATS_MIB_ECT1PKTS) || (defined(HAVE_DECL_IPSTATS_MIB_ECT1PKTS) && HAVE_DECL_IPSTATS_MIB_ECT1PKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_ECT1PKTS) == (33), "IPSTATS_MIB_ECT1PKTS != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_ECT1PKTS 33
+#endif
+#if defined(IPSTATS_MIB_ECT0PKTS) || (defined(HAVE_DECL_IPSTATS_MIB_ECT0PKTS) && HAVE_DECL_IPSTATS_MIB_ECT0PKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_ECT0PKTS) == (34), "IPSTATS_MIB_ECT0PKTS != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_ECT0PKTS 34
+#endif
+#if defined(IPSTATS_MIB_CEPKTS) || (defined(HAVE_DECL_IPSTATS_MIB_CEPKTS) && HAVE_DECL_IPSTATS_MIB_CEPKTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IPSTATS_MIB_CEPKTS) == (35), "IPSTATS_MIB_CEPKTS != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IPSTATS_MIB_CEPKTS 35
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat snmp_ip_stats in mpers mode
+
+# else
+
+static
+const struct xlat snmp_ip_stats[] = {
+ [IPSTATS_MIB_NUM] = XLAT(IPSTATS_MIB_NUM),
+ [IPSTATS_MIB_INPKTS] = XLAT(IPSTATS_MIB_INPKTS),
+ [IPSTATS_MIB_INOCTETS] = XLAT(IPSTATS_MIB_INOCTETS),
+ [IPSTATS_MIB_INDELIVERS] = XLAT(IPSTATS_MIB_INDELIVERS),
+ [IPSTATS_MIB_OUTFORWDATAGRAMS] = XLAT(IPSTATS_MIB_OUTFORWDATAGRAMS),
+ [IPSTATS_MIB_OUTPKTS] = XLAT(IPSTATS_MIB_OUTPKTS),
+ [IPSTATS_MIB_OUTOCTETS] = XLAT(IPSTATS_MIB_OUTOCTETS),
+ [IPSTATS_MIB_INHDRERRORS] = XLAT(IPSTATS_MIB_INHDRERRORS),
+ [IPSTATS_MIB_INTOOBIGERRORS] = XLAT(IPSTATS_MIB_INTOOBIGERRORS),
+ [IPSTATS_MIB_INNOROUTES] = XLAT(IPSTATS_MIB_INNOROUTES),
+ [IPSTATS_MIB_INADDRERRORS] = XLAT(IPSTATS_MIB_INADDRERRORS),
+ [IPSTATS_MIB_INUNKNOWNPROTOS] = XLAT(IPSTATS_MIB_INUNKNOWNPROTOS),
+ [IPSTATS_MIB_INTRUNCATEDPKTS] = XLAT(IPSTATS_MIB_INTRUNCATEDPKTS),
+ [IPSTATS_MIB_INDISCARDS] = XLAT(IPSTATS_MIB_INDISCARDS),
+ [IPSTATS_MIB_OUTDISCARDS] = XLAT(IPSTATS_MIB_OUTDISCARDS),
+ [IPSTATS_MIB_OUTNOROUTES] = XLAT(IPSTATS_MIB_OUTNOROUTES),
+ [IPSTATS_MIB_REASMTIMEOUT] = XLAT(IPSTATS_MIB_REASMTIMEOUT),
+ [IPSTATS_MIB_REASMREQDS] = XLAT(IPSTATS_MIB_REASMREQDS),
+ [IPSTATS_MIB_REASMOKS] = XLAT(IPSTATS_MIB_REASMOKS),
+ [IPSTATS_MIB_REASMFAILS] = XLAT(IPSTATS_MIB_REASMFAILS),
+ [IPSTATS_MIB_FRAGOKS] = XLAT(IPSTATS_MIB_FRAGOKS),
+ [IPSTATS_MIB_FRAGFAILS] = XLAT(IPSTATS_MIB_FRAGFAILS),
+ [IPSTATS_MIB_FRAGCREATES] = XLAT(IPSTATS_MIB_FRAGCREATES),
+ [IPSTATS_MIB_INMCASTPKTS] = XLAT(IPSTATS_MIB_INMCASTPKTS),
+ [IPSTATS_MIB_OUTMCASTPKTS] = XLAT(IPSTATS_MIB_OUTMCASTPKTS),
+ [IPSTATS_MIB_INBCASTPKTS] = XLAT(IPSTATS_MIB_INBCASTPKTS),
+ [IPSTATS_MIB_OUTBCASTPKTS] = XLAT(IPSTATS_MIB_OUTBCASTPKTS),
+ [IPSTATS_MIB_INMCASTOCTETS] = XLAT(IPSTATS_MIB_INMCASTOCTETS),
+ [IPSTATS_MIB_OUTMCASTOCTETS] = XLAT(IPSTATS_MIB_OUTMCASTOCTETS),
+ [IPSTATS_MIB_INBCASTOCTETS] = XLAT(IPSTATS_MIB_INBCASTOCTETS),
+ [IPSTATS_MIB_OUTBCASTOCTETS] = XLAT(IPSTATS_MIB_OUTBCASTOCTETS),
+ [IPSTATS_MIB_CSUMERRORS] = XLAT(IPSTATS_MIB_CSUMERRORS),
+ [IPSTATS_MIB_NOECTPKTS] = XLAT(IPSTATS_MIB_NOECTPKTS),
+ [IPSTATS_MIB_ECT1PKTS] = XLAT(IPSTATS_MIB_ECT1PKTS),
+ [IPSTATS_MIB_ECT0PKTS] = XLAT(IPSTATS_MIB_ECT0PKTS),
+ [IPSTATS_MIB_CEPKTS] = XLAT(IPSTATS_MIB_CEPKTS),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/snmp_ip_stats.in b/xlat/snmp_ip_stats.in
new file mode 100644
index 0000000..4bfb7ee
--- /dev/null
+++ b/xlat/snmp_ip_stats.in
@@ -0,0 +1,37 @@
+#value_indexed
+IPSTATS_MIB_NUM			0
+IPSTATS_MIB_INPKTS		1
+IPSTATS_MIB_INOCTETS		2
+IPSTATS_MIB_INDELIVERS		3
+IPSTATS_MIB_OUTFORWDATAGRAMS	4
+IPSTATS_MIB_OUTPKTS		5
+IPSTATS_MIB_OUTOCTETS		6
+IPSTATS_MIB_INHDRERRORS		7
+IPSTATS_MIB_INTOOBIGERRORS	8
+IPSTATS_MIB_INNOROUTES		9
+IPSTATS_MIB_INADDRERRORS	10
+IPSTATS_MIB_INUNKNOWNPROTOS	11
+IPSTATS_MIB_INTRUNCATEDPKTS	12
+IPSTATS_MIB_INDISCARDS		13
+IPSTATS_MIB_OUTDISCARDS		14
+IPSTATS_MIB_OUTNOROUTES		15
+IPSTATS_MIB_REASMTIMEOUT	16
+IPSTATS_MIB_REASMREQDS		17
+IPSTATS_MIB_REASMOKS		18
+IPSTATS_MIB_REASMFAILS		19
+IPSTATS_MIB_FRAGOKS		20
+IPSTATS_MIB_FRAGFAILS		21
+IPSTATS_MIB_FRAGCREATES		22
+IPSTATS_MIB_INMCASTPKTS		23
+IPSTATS_MIB_OUTMCASTPKTS	24
+IPSTATS_MIB_INBCASTPKTS		25
+IPSTATS_MIB_OUTBCASTPKTS	26
+IPSTATS_MIB_INMCASTOCTETS	27
+IPSTATS_MIB_OUTMCASTOCTETS	28
+IPSTATS_MIB_INBCASTOCTETS	29
+IPSTATS_MIB_OUTBCASTOCTETS	30
+IPSTATS_MIB_CSUMERRORS		31
+IPSTATS_MIB_NOECTPKTS		32
+IPSTATS_MIB_ECT1PKTS		33
+IPSTATS_MIB_ECT0PKTS		34
+IPSTATS_MIB_CEPKTS		35
diff --git a/xlat/sock_alg_options.h b/xlat/sock_alg_options.h
new file mode 100644
index 0000000..41b00a9
--- /dev/null
+++ b/xlat/sock_alg_options.h
@@ -0,0 +1,62 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_alg_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(ALG_SET_KEY) || (defined(HAVE_DECL_ALG_SET_KEY) && HAVE_DECL_ALG_SET_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ALG_SET_KEY) == (1), "ALG_SET_KEY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ALG_SET_KEY 1
+#endif
+#if defined(ALG_SET_IV) || (defined(HAVE_DECL_ALG_SET_IV) && HAVE_DECL_ALG_SET_IV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ALG_SET_IV) == (2), "ALG_SET_IV != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ALG_SET_IV 2
+#endif
+#if defined(ALG_SET_OP) || (defined(HAVE_DECL_ALG_SET_OP) && HAVE_DECL_ALG_SET_OP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ALG_SET_OP) == (3), "ALG_SET_OP != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ALG_SET_OP 3
+#endif
+#if defined(ALG_SET_AEAD_ASSOCLEN) || (defined(HAVE_DECL_ALG_SET_AEAD_ASSOCLEN) && HAVE_DECL_ALG_SET_AEAD_ASSOCLEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ALG_SET_AEAD_ASSOCLEN) == (4), "ALG_SET_AEAD_ASSOCLEN != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ALG_SET_AEAD_ASSOCLEN 4
+#endif
+#if defined(ALG_SET_AEAD_AUTHSIZE) || (defined(HAVE_DECL_ALG_SET_AEAD_AUTHSIZE) && HAVE_DECL_ALG_SET_AEAD_AUTHSIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ALG_SET_AEAD_AUTHSIZE) == (5), "ALG_SET_AEAD_AUTHSIZE != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define ALG_SET_AEAD_AUTHSIZE 5
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_alg_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_alg_options[] = {
+ [ALG_SET_KEY] = XLAT(ALG_SET_KEY),
+ [ALG_SET_IV] = XLAT(ALG_SET_IV),
+ [ALG_SET_OP] = XLAT(ALG_SET_OP),
+ [ALG_SET_AEAD_ASSOCLEN] = XLAT(ALG_SET_AEAD_ASSOCLEN),
+ [ALG_SET_AEAD_AUTHSIZE] = XLAT(ALG_SET_AEAD_AUTHSIZE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_alg_options.in b/xlat/sock_alg_options.in
new file mode 100644
index 0000000..a1fb4a1
--- /dev/null
+++ b/xlat/sock_alg_options.in
@@ -0,0 +1,6 @@
+#value_indexed
+ALG_SET_KEY		1
+ALG_SET_IV		2
+ALG_SET_OP		3
+ALG_SET_AEAD_ASSOCLEN	4
+ALG_SET_AEAD_AUTHSIZE	5
diff --git a/xlat/sock_bluetooth_options.h b/xlat/sock_bluetooth_options.h
new file mode 100644
index 0000000..4a57abd
--- /dev/null
+++ b/xlat/sock_bluetooth_options.h
@@ -0,0 +1,87 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_bluetooth_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(BT_SECURITY) || (defined(HAVE_DECL_BT_SECURITY) && HAVE_DECL_BT_SECURITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BT_SECURITY) == (4), "BT_SECURITY != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BT_SECURITY 4
+#endif
+#if defined(BT_DEFER_SETUP) || (defined(HAVE_DECL_BT_DEFER_SETUP) && HAVE_DECL_BT_DEFER_SETUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BT_DEFER_SETUP) == (7), "BT_DEFER_SETUP != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BT_DEFER_SETUP 7
+#endif
+#if defined(BT_FLUSHABLE) || (defined(HAVE_DECL_BT_FLUSHABLE) && HAVE_DECL_BT_FLUSHABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BT_FLUSHABLE) == (8), "BT_FLUSHABLE != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BT_FLUSHABLE 8
+#endif
+#if defined(BT_POWER) || (defined(HAVE_DECL_BT_POWER) && HAVE_DECL_BT_POWER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BT_POWER) == (9), "BT_POWER != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BT_POWER 9
+#endif
+#if defined(BT_CHANNEL_POLICY) || (defined(HAVE_DECL_BT_CHANNEL_POLICY) && HAVE_DECL_BT_CHANNEL_POLICY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BT_CHANNEL_POLICY) == (10), "BT_CHANNEL_POLICY != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BT_CHANNEL_POLICY 10
+#endif
+#if defined(BT_VOICE) || (defined(HAVE_DECL_BT_VOICE) && HAVE_DECL_BT_VOICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BT_VOICE) == (11), "BT_VOICE != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BT_VOICE 11
+#endif
+#if defined(BT_SNDMTU) || (defined(HAVE_DECL_BT_SNDMTU) && HAVE_DECL_BT_SNDMTU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BT_SNDMTU) == (12), "BT_SNDMTU != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BT_SNDMTU 12
+#endif
+#if defined(BT_RCVMTU) || (defined(HAVE_DECL_BT_RCVMTU) && HAVE_DECL_BT_RCVMTU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((BT_RCVMTU) == (13), "BT_RCVMTU != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define BT_RCVMTU 13
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_bluetooth_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_bluetooth_options[] = {
+
+ XLAT(BT_SECURITY),
+ XLAT(BT_DEFER_SETUP),
+ XLAT(BT_FLUSHABLE),
+ XLAT(BT_POWER),
+ XLAT(BT_CHANNEL_POLICY),
+ XLAT(BT_VOICE),
+ XLAT(BT_SNDMTU),
+ XLAT(BT_RCVMTU),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_bluetooth_options.in b/xlat/sock_bluetooth_options.in
new file mode 100644
index 0000000..919b21b
--- /dev/null
+++ b/xlat/sock_bluetooth_options.in
@@ -0,0 +1,9 @@
+/* sort -k2,2n */
+BT_SECURITY		4
+BT_DEFER_SETUP		7
+BT_FLUSHABLE		8
+BT_POWER		9
+BT_CHANNEL_POLICY	10
+BT_VOICE		11
+BT_SNDMTU		12
+BT_RCVMTU		13
diff --git a/xlat/sock_caif_options.h b/xlat/sock_caif_options.h
new file mode 100644
index 0000000..1066132
--- /dev/null
+++ b/xlat/sock_caif_options.h
@@ -0,0 +1,46 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_caif_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(CAIFSO_LINK_SELECT) || (defined(HAVE_DECL_CAIFSO_LINK_SELECT) && HAVE_DECL_CAIFSO_LINK_SELECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAIFSO_LINK_SELECT) == (127), "CAIFSO_LINK_SELECT != 127");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAIFSO_LINK_SELECT 127
+#endif
+#if defined(CAIFSO_REQ_PARAM) || (defined(HAVE_DECL_CAIFSO_REQ_PARAM) && HAVE_DECL_CAIFSO_REQ_PARAM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAIFSO_REQ_PARAM) == (128), "CAIFSO_REQ_PARAM != 128");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAIFSO_REQ_PARAM 128
+#endif
+#if defined(CAIFSO_RSP_PARAM) || (defined(HAVE_DECL_CAIFSO_RSP_PARAM) && HAVE_DECL_CAIFSO_RSP_PARAM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((CAIFSO_RSP_PARAM) == (129), "CAIFSO_RSP_PARAM != 129");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define CAIFSO_RSP_PARAM 129
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_caif_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_caif_options[] = {
+ XLAT(CAIFSO_LINK_SELECT),
+ XLAT(CAIFSO_REQ_PARAM),
+ XLAT(CAIFSO_RSP_PARAM),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_caif_options.in b/xlat/sock_caif_options.in
new file mode 100644
index 0000000..5e1c044
--- /dev/null
+++ b/xlat/sock_caif_options.in
@@ -0,0 +1,3 @@
+CAIFSO_LINK_SELECT	127
+CAIFSO_REQ_PARAM	128
+CAIFSO_RSP_PARAM	129
diff --git a/xlat/sock_dccp_options.h b/xlat/sock_dccp_options.h
new file mode 100644
index 0000000..41b487c
--- /dev/null
+++ b/xlat/sock_dccp_options.h
@@ -0,0 +1,151 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_dccp_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(DCCP_SOCKOPT_PACKET_SIZE) || (defined(HAVE_DECL_DCCP_SOCKOPT_PACKET_SIZE) && HAVE_DECL_DCCP_SOCKOPT_PACKET_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_PACKET_SIZE) == (1), "DCCP_SOCKOPT_PACKET_SIZE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_PACKET_SIZE 1
+#endif
+#if defined(DCCP_SOCKOPT_SERVICE) || (defined(HAVE_DECL_DCCP_SOCKOPT_SERVICE) && HAVE_DECL_DCCP_SOCKOPT_SERVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_SERVICE) == (2), "DCCP_SOCKOPT_SERVICE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_SERVICE 2
+#endif
+#if defined(DCCP_SOCKOPT_CHANGE_L) || (defined(HAVE_DECL_DCCP_SOCKOPT_CHANGE_L) && HAVE_DECL_DCCP_SOCKOPT_CHANGE_L)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_CHANGE_L) == (3), "DCCP_SOCKOPT_CHANGE_L != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_CHANGE_L 3
+#endif
+#if defined(DCCP_SOCKOPT_CHANGE_R) || (defined(HAVE_DECL_DCCP_SOCKOPT_CHANGE_R) && HAVE_DECL_DCCP_SOCKOPT_CHANGE_R)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_CHANGE_R) == (4), "DCCP_SOCKOPT_CHANGE_R != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_CHANGE_R 4
+#endif
+#if defined(DCCP_SOCKOPT_GET_CUR_MPS) || (defined(HAVE_DECL_DCCP_SOCKOPT_GET_CUR_MPS) && HAVE_DECL_DCCP_SOCKOPT_GET_CUR_MPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_GET_CUR_MPS) == (5), "DCCP_SOCKOPT_GET_CUR_MPS != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_GET_CUR_MPS 5
+#endif
+#if defined(DCCP_SOCKOPT_SERVER_TIMEWAIT) || (defined(HAVE_DECL_DCCP_SOCKOPT_SERVER_TIMEWAIT) && HAVE_DECL_DCCP_SOCKOPT_SERVER_TIMEWAIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_SERVER_TIMEWAIT) == (6), "DCCP_SOCKOPT_SERVER_TIMEWAIT != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_SERVER_TIMEWAIT 6
+#endif
+#if defined(DCCP_SOCKOPT_SEND_CSCOV) || (defined(HAVE_DECL_DCCP_SOCKOPT_SEND_CSCOV) && HAVE_DECL_DCCP_SOCKOPT_SEND_CSCOV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_SEND_CSCOV) == (10), "DCCP_SOCKOPT_SEND_CSCOV != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_SEND_CSCOV 10
+#endif
+#if defined(DCCP_SOCKOPT_RECV_CSCOV) || (defined(HAVE_DECL_DCCP_SOCKOPT_RECV_CSCOV) && HAVE_DECL_DCCP_SOCKOPT_RECV_CSCOV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_RECV_CSCOV) == (11), "DCCP_SOCKOPT_RECV_CSCOV != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_RECV_CSCOV 11
+#endif
+#if defined(DCCP_SOCKOPT_AVAILABLE_CCIDS) || (defined(HAVE_DECL_DCCP_SOCKOPT_AVAILABLE_CCIDS) && HAVE_DECL_DCCP_SOCKOPT_AVAILABLE_CCIDS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_AVAILABLE_CCIDS) == (12), "DCCP_SOCKOPT_AVAILABLE_CCIDS != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_AVAILABLE_CCIDS 12
+#endif
+#if defined(DCCP_SOCKOPT_CCID) || (defined(HAVE_DECL_DCCP_SOCKOPT_CCID) && HAVE_DECL_DCCP_SOCKOPT_CCID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_CCID) == (13), "DCCP_SOCKOPT_CCID != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_CCID 13
+#endif
+#if defined(DCCP_SOCKOPT_TX_CCID) || (defined(HAVE_DECL_DCCP_SOCKOPT_TX_CCID) && HAVE_DECL_DCCP_SOCKOPT_TX_CCID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_TX_CCID) == (14), "DCCP_SOCKOPT_TX_CCID != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_TX_CCID 14
+#endif
+#if defined(DCCP_SOCKOPT_RX_CCID) || (defined(HAVE_DECL_DCCP_SOCKOPT_RX_CCID) && HAVE_DECL_DCCP_SOCKOPT_RX_CCID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_RX_CCID) == (15), "DCCP_SOCKOPT_RX_CCID != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_RX_CCID 15
+#endif
+#if defined(DCCP_SOCKOPT_QPOLICY_ID) || (defined(HAVE_DECL_DCCP_SOCKOPT_QPOLICY_ID) && HAVE_DECL_DCCP_SOCKOPT_QPOLICY_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_QPOLICY_ID) == (16), "DCCP_SOCKOPT_QPOLICY_ID != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_QPOLICY_ID 16
+#endif
+#if defined(DCCP_SOCKOPT_QPOLICY_TXQLEN) || (defined(HAVE_DECL_DCCP_SOCKOPT_QPOLICY_TXQLEN) && HAVE_DECL_DCCP_SOCKOPT_QPOLICY_TXQLEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_QPOLICY_TXQLEN) == (17), "DCCP_SOCKOPT_QPOLICY_TXQLEN != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_QPOLICY_TXQLEN 17
+#endif
+#if defined(DCCP_SOCKOPT_CCID_RX_INFO) || (defined(HAVE_DECL_DCCP_SOCKOPT_CCID_RX_INFO) && HAVE_DECL_DCCP_SOCKOPT_CCID_RX_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_CCID_RX_INFO) == (128), "DCCP_SOCKOPT_CCID_RX_INFO != 128");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_CCID_RX_INFO 128
+#endif
+#if defined(DCCP_SOCKOPT_CCID_TX_INFO) || (defined(HAVE_DECL_DCCP_SOCKOPT_CCID_TX_INFO) && HAVE_DECL_DCCP_SOCKOPT_CCID_TX_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((DCCP_SOCKOPT_CCID_TX_INFO) == (192), "DCCP_SOCKOPT_CCID_TX_INFO != 192");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define DCCP_SOCKOPT_CCID_TX_INFO 192
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_dccp_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_dccp_options[] = {
+
+ XLAT(DCCP_SOCKOPT_PACKET_SIZE),
+ XLAT(DCCP_SOCKOPT_SERVICE),
+ XLAT(DCCP_SOCKOPT_CHANGE_L),
+ XLAT(DCCP_SOCKOPT_CHANGE_R),
+ XLAT(DCCP_SOCKOPT_GET_CUR_MPS),
+ XLAT(DCCP_SOCKOPT_SERVER_TIMEWAIT),
+ XLAT(DCCP_SOCKOPT_SEND_CSCOV),
+ XLAT(DCCP_SOCKOPT_RECV_CSCOV),
+ XLAT(DCCP_SOCKOPT_AVAILABLE_CCIDS),
+ XLAT(DCCP_SOCKOPT_CCID),
+ XLAT(DCCP_SOCKOPT_TX_CCID),
+ XLAT(DCCP_SOCKOPT_RX_CCID),
+ XLAT(DCCP_SOCKOPT_QPOLICY_ID),
+ XLAT(DCCP_SOCKOPT_QPOLICY_TXQLEN),
+ XLAT(DCCP_SOCKOPT_CCID_RX_INFO),
+ XLAT(DCCP_SOCKOPT_CCID_TX_INFO),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_dccp_options.in b/xlat/sock_dccp_options.in
new file mode 100644
index 0000000..06a0efe
--- /dev/null
+++ b/xlat/sock_dccp_options.in
@@ -0,0 +1,17 @@
+/* sort -k2,2n */
+DCCP_SOCKOPT_PACKET_SIZE	1
+DCCP_SOCKOPT_SERVICE		2
+DCCP_SOCKOPT_CHANGE_L		3
+DCCP_SOCKOPT_CHANGE_R		4
+DCCP_SOCKOPT_GET_CUR_MPS	5
+DCCP_SOCKOPT_SERVER_TIMEWAIT	6
+DCCP_SOCKOPT_SEND_CSCOV		10
+DCCP_SOCKOPT_RECV_CSCOV		11
+DCCP_SOCKOPT_AVAILABLE_CCIDS	12
+DCCP_SOCKOPT_CCID		13
+DCCP_SOCKOPT_TX_CCID		14
+DCCP_SOCKOPT_RX_CCID		15
+DCCP_SOCKOPT_QPOLICY_ID		16
+DCCP_SOCKOPT_QPOLICY_TXQLEN	17
+DCCP_SOCKOPT_CCID_RX_INFO	128
+DCCP_SOCKOPT_CCID_TX_INFO	192
diff --git a/xlat/sock_ip_options.h b/xlat/sock_ip_options.h
new file mode 100644
index 0000000..496db57
--- /dev/null
+++ b/xlat/sock_ip_options.h
@@ -0,0 +1,172 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_ip_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_ip_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_ip_options[] = {
+#if defined(IP_TOS) || (defined(HAVE_DECL_IP_TOS) && HAVE_DECL_IP_TOS)
+  XLAT(IP_TOS),
+#endif
+#if defined(IP_TTL) || (defined(HAVE_DECL_IP_TTL) && HAVE_DECL_IP_TTL)
+  XLAT(IP_TTL),
+#endif
+#if defined(IP_HDRINCL) || (defined(HAVE_DECL_IP_HDRINCL) && HAVE_DECL_IP_HDRINCL)
+  XLAT(IP_HDRINCL),
+#endif
+#if defined(IP_OPTIONS) || (defined(HAVE_DECL_IP_OPTIONS) && HAVE_DECL_IP_OPTIONS)
+  XLAT(IP_OPTIONS),
+#endif
+#if defined(IP_ROUTER_ALERT) || (defined(HAVE_DECL_IP_ROUTER_ALERT) && HAVE_DECL_IP_ROUTER_ALERT)
+  XLAT(IP_ROUTER_ALERT),
+#endif
+#if defined(IP_RECVOPTIONS) || (defined(HAVE_DECL_IP_RECVOPTIONS) && HAVE_DECL_IP_RECVOPTIONS)
+  XLAT(IP_RECVOPTIONS),
+#endif
+#if defined(IP_RECVOPTS) || (defined(HAVE_DECL_IP_RECVOPTS) && HAVE_DECL_IP_RECVOPTS)
+  XLAT(IP_RECVOPTS),
+#endif
+#if defined(IP_RETOPTS) || (defined(HAVE_DECL_IP_RETOPTS) && HAVE_DECL_IP_RETOPTS)
+  XLAT(IP_RETOPTS),
+#endif
+#if defined(IP_RECVRETOPTS) || (defined(HAVE_DECL_IP_RECVRETOPTS) && HAVE_DECL_IP_RECVRETOPTS)
+  XLAT(IP_RECVRETOPTS),
+#endif
+#if defined(IP_RECVDSTADDR) || (defined(HAVE_DECL_IP_RECVDSTADDR) && HAVE_DECL_IP_RECVDSTADDR)
+  XLAT(IP_RECVDSTADDR),
+#endif
+#if defined(IP_PKTINFO) || (defined(HAVE_DECL_IP_PKTINFO) && HAVE_DECL_IP_PKTINFO)
+  XLAT(IP_PKTINFO),
+#endif
+#if defined(IP_PKTOPTIONS) || (defined(HAVE_DECL_IP_PKTOPTIONS) && HAVE_DECL_IP_PKTOPTIONS)
+  XLAT(IP_PKTOPTIONS),
+#endif
+#if defined(IP_MTU_DISCOVER) || (defined(HAVE_DECL_IP_MTU_DISCOVER) && HAVE_DECL_IP_MTU_DISCOVER)
+  XLAT(IP_MTU_DISCOVER),
+#endif
+#if defined(IP_RECVERR) || (defined(HAVE_DECL_IP_RECVERR) && HAVE_DECL_IP_RECVERR)
+  XLAT(IP_RECVERR),
+#endif
+#if defined(IP_RECVTTL) || (defined(HAVE_DECL_IP_RECVTTL) && HAVE_DECL_IP_RECVTTL)
+  XLAT(IP_RECVTTL),
+#endif
+#if defined(IP_RECVTOS) || (defined(HAVE_DECL_IP_RECVTOS) && HAVE_DECL_IP_RECVTOS)
+  XLAT(IP_RECVTOS),
+#endif
+#if defined(IP_MTU) || (defined(HAVE_DECL_IP_MTU) && HAVE_DECL_IP_MTU)
+  XLAT(IP_MTU),
+#endif
+#if defined(IP_MULTICAST_IF) || (defined(HAVE_DECL_IP_MULTICAST_IF) && HAVE_DECL_IP_MULTICAST_IF)
+  XLAT(IP_MULTICAST_IF),
+#endif
+#if defined(IP_MULTICAST_TTL) || (defined(HAVE_DECL_IP_MULTICAST_TTL) && HAVE_DECL_IP_MULTICAST_TTL)
+  XLAT(IP_MULTICAST_TTL),
+#endif
+#if defined(IP_MULTICAST_LOOP) || (defined(HAVE_DECL_IP_MULTICAST_LOOP) && HAVE_DECL_IP_MULTICAST_LOOP)
+  XLAT(IP_MULTICAST_LOOP),
+#endif
+#if defined(IP_ADD_MEMBERSHIP) || (defined(HAVE_DECL_IP_ADD_MEMBERSHIP) && HAVE_DECL_IP_ADD_MEMBERSHIP)
+  XLAT(IP_ADD_MEMBERSHIP),
+#endif
+#if defined(IP_DROP_MEMBERSHIP) || (defined(HAVE_DECL_IP_DROP_MEMBERSHIP) && HAVE_DECL_IP_DROP_MEMBERSHIP)
+  XLAT(IP_DROP_MEMBERSHIP),
+#endif
+#if defined(IP_BROADCAST_IF) || (defined(HAVE_DECL_IP_BROADCAST_IF) && HAVE_DECL_IP_BROADCAST_IF)
+  XLAT(IP_BROADCAST_IF),
+#endif
+#if defined(IP_RECVIFINDEX) || (defined(HAVE_DECL_IP_RECVIFINDEX) && HAVE_DECL_IP_RECVIFINDEX)
+  XLAT(IP_RECVIFINDEX),
+#endif
+#if defined(IP_MSFILTER) || (defined(HAVE_DECL_IP_MSFILTER) && HAVE_DECL_IP_MSFILTER)
+  XLAT(IP_MSFILTER),
+#endif
+#if defined(IP_FREEBIND) || (defined(HAVE_DECL_IP_FREEBIND) && HAVE_DECL_IP_FREEBIND)
+  XLAT(IP_FREEBIND),
+#endif
+#if defined(IP_IPSEC_POLICY) || (defined(HAVE_DECL_IP_IPSEC_POLICY) && HAVE_DECL_IP_IPSEC_POLICY)
+  XLAT(IP_IPSEC_POLICY),
+#endif
+#if defined(IP_XFRM_POLICY) || (defined(HAVE_DECL_IP_XFRM_POLICY) && HAVE_DECL_IP_XFRM_POLICY)
+  XLAT(IP_XFRM_POLICY),
+#endif
+#if defined(IP_PASSSEC) || (defined(HAVE_DECL_IP_PASSSEC) && HAVE_DECL_IP_PASSSEC)
+  XLAT(IP_PASSSEC),
+#endif
+#if defined(IP_TRANSPARENT) || (defined(HAVE_DECL_IP_TRANSPARENT) && HAVE_DECL_IP_TRANSPARENT)
+  XLAT(IP_TRANSPARENT),
+#endif
+#if defined(IP_ORIGDSTADDR) || (defined(HAVE_DECL_IP_ORIGDSTADDR) && HAVE_DECL_IP_ORIGDSTADDR)
+  XLAT(IP_ORIGDSTADDR),
+#endif
+#if defined(IP_RECVORIGDSTADDR) || (defined(HAVE_DECL_IP_RECVORIGDSTADDR) && HAVE_DECL_IP_RECVORIGDSTADDR)
+  XLAT(IP_RECVORIGDSTADDR),
+#endif
+#if defined(IP_MINTTL) || (defined(HAVE_DECL_IP_MINTTL) && HAVE_DECL_IP_MINTTL)
+  XLAT(IP_MINTTL),
+#endif
+#if defined(IP_NODEFRAG) || (defined(HAVE_DECL_IP_NODEFRAG) && HAVE_DECL_IP_NODEFRAG)
+  XLAT(IP_NODEFRAG),
+#endif
+#if defined(IP_CHECKSUM) || (defined(HAVE_DECL_IP_CHECKSUM) && HAVE_DECL_IP_CHECKSUM)
+  XLAT(IP_CHECKSUM),
+#endif
+#if defined(IP_BIND_ADDRESS_NO_PORT) || (defined(HAVE_DECL_IP_BIND_ADDRESS_NO_PORT) && HAVE_DECL_IP_BIND_ADDRESS_NO_PORT)
+  XLAT(IP_BIND_ADDRESS_NO_PORT),
+#endif
+#if defined(IP_RECVFRAGSIZE) || (defined(HAVE_DECL_IP_RECVFRAGSIZE) && HAVE_DECL_IP_RECVFRAGSIZE)
+  XLAT(IP_RECVFRAGSIZE),
+#endif
+#if defined(IP_UNBLOCK_SOURCE) || (defined(HAVE_DECL_IP_UNBLOCK_SOURCE) && HAVE_DECL_IP_UNBLOCK_SOURCE)
+  XLAT(IP_UNBLOCK_SOURCE),
+#endif
+#if defined(IP_BLOCK_SOURCE) || (defined(HAVE_DECL_IP_BLOCK_SOURCE) && HAVE_DECL_IP_BLOCK_SOURCE)
+  XLAT(IP_BLOCK_SOURCE),
+#endif
+#if defined(IP_ADD_SOURCE_MEMBERSHIP) || (defined(HAVE_DECL_IP_ADD_SOURCE_MEMBERSHIP) && HAVE_DECL_IP_ADD_SOURCE_MEMBERSHIP)
+  XLAT(IP_ADD_SOURCE_MEMBERSHIP),
+#endif
+#if defined(IP_DROP_SOURCE_MEMBERSHIP) || (defined(HAVE_DECL_IP_DROP_SOURCE_MEMBERSHIP) && HAVE_DECL_IP_DROP_SOURCE_MEMBERSHIP)
+  XLAT(IP_DROP_SOURCE_MEMBERSHIP),
+#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(IP_MULTICAST_ALL) || (defined(HAVE_DECL_IP_MULTICAST_ALL) && HAVE_DECL_IP_MULTICAST_ALL)
+  XLAT(IP_MULTICAST_ALL),
+#endif
+#if defined(IP_UNICAST_IF) || (defined(HAVE_DECL_IP_UNICAST_IF) && HAVE_DECL_IP_UNICAST_IF)
+  XLAT(IP_UNICAST_IF),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_ip_options.in b/xlat/sock_ip_options.in
new file mode 100644
index 0000000..51ed134
--- /dev/null
+++ b/xlat/sock_ip_options.in
@@ -0,0 +1,50 @@
+IP_TOS
+IP_TTL
+IP_HDRINCL
+IP_OPTIONS
+IP_ROUTER_ALERT
+IP_RECVOPTIONS
+IP_RECVOPTS
+IP_RETOPTS
+IP_RECVRETOPTS
+IP_RECVDSTADDR
+IP_PKTINFO
+IP_PKTOPTIONS
+IP_MTU_DISCOVER
+IP_RECVERR
+IP_RECVTTL
+IP_RECVTOS
+IP_MTU
+IP_MULTICAST_IF
+IP_MULTICAST_TTL
+IP_MULTICAST_LOOP
+IP_ADD_MEMBERSHIP
+IP_DROP_MEMBERSHIP
+IP_BROADCAST_IF
+IP_RECVIFINDEX
+IP_MSFILTER
+IP_FREEBIND
+IP_IPSEC_POLICY
+IP_XFRM_POLICY
+IP_PASSSEC
+IP_TRANSPARENT
+IP_ORIGDSTADDR
+IP_RECVORIGDSTADDR
+IP_MINTTL
+IP_NODEFRAG
+IP_CHECKSUM
+IP_BIND_ADDRESS_NO_PORT
+IP_RECVFRAGSIZE
+IP_UNBLOCK_SOURCE
+IP_BLOCK_SOURCE
+IP_ADD_SOURCE_MEMBERSHIP
+IP_DROP_SOURCE_MEMBERSHIP
+MCAST_JOIN_GROUP
+MCAST_BLOCK_SOURCE
+MCAST_UNBLOCK_SOURCE
+MCAST_LEAVE_GROUP
+MCAST_JOIN_SOURCE_GROUP
+MCAST_LEAVE_SOURCE_GROUP
+MCAST_MSFILTER
+IP_MULTICAST_ALL
+IP_UNICAST_IF
diff --git a/xlat/sock_ipv6_options.h b/xlat/sock_ipv6_options.h
new file mode 100644
index 0000000..14ea341
--- /dev/null
+++ b/xlat/sock_ipv6_options.h
@@ -0,0 +1,208 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_ipv6_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_ipv6_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_ipv6_options[] = {
+#if defined(IPV6_ADDRFORM) || (defined(HAVE_DECL_IPV6_ADDRFORM) && HAVE_DECL_IPV6_ADDRFORM)
+  XLAT(IPV6_ADDRFORM),
+#endif
+#if defined(IPV6_2292PKTINFO) || (defined(HAVE_DECL_IPV6_2292PKTINFO) && HAVE_DECL_IPV6_2292PKTINFO)
+  XLAT(IPV6_2292PKTINFO),
+#endif
+#if defined(IPV6_2292HOPOPTS) || (defined(HAVE_DECL_IPV6_2292HOPOPTS) && HAVE_DECL_IPV6_2292HOPOPTS)
+  XLAT(IPV6_2292HOPOPTS),
+#endif
+#if defined(IPV6_2292DSTOPTS) || (defined(HAVE_DECL_IPV6_2292DSTOPTS) && HAVE_DECL_IPV6_2292DSTOPTS)
+  XLAT(IPV6_2292DSTOPTS),
+#endif
+#if defined(IPV6_2292RTHDR) || (defined(HAVE_DECL_IPV6_2292RTHDR) && HAVE_DECL_IPV6_2292RTHDR)
+  XLAT(IPV6_2292RTHDR),
+#endif
+#if defined(IPV6_2292PKTOPTIONS) || (defined(HAVE_DECL_IPV6_2292PKTOPTIONS) && HAVE_DECL_IPV6_2292PKTOPTIONS)
+  XLAT(IPV6_2292PKTOPTIONS),
+#endif
+#if defined(IPV6_CHECKSUM) || (defined(HAVE_DECL_IPV6_CHECKSUM) && HAVE_DECL_IPV6_CHECKSUM)
+  XLAT(IPV6_CHECKSUM),
+#endif
+#if defined(IPV6_2292HOPLIMIT) || (defined(HAVE_DECL_IPV6_2292HOPLIMIT) && HAVE_DECL_IPV6_2292HOPLIMIT)
+  XLAT(IPV6_2292HOPLIMIT),
+#endif
+#if defined(IPV6_NEXTHOP) || (defined(HAVE_DECL_IPV6_NEXTHOP) && HAVE_DECL_IPV6_NEXTHOP)
+  XLAT(IPV6_NEXTHOP),
+#endif
+#if defined(IPV6_AUTHHDR) || (defined(HAVE_DECL_IPV6_AUTHHDR) && HAVE_DECL_IPV6_AUTHHDR)
+  XLAT(IPV6_AUTHHDR),
+#endif
+#if defined(IPV6_FLOWINFO) || (defined(HAVE_DECL_IPV6_FLOWINFO) && HAVE_DECL_IPV6_FLOWINFO)
+  XLAT(IPV6_FLOWINFO),
+#endif
+#if defined(IPV6_UNICAST_HOPS) || (defined(HAVE_DECL_IPV6_UNICAST_HOPS) && HAVE_DECL_IPV6_UNICAST_HOPS)
+  XLAT(IPV6_UNICAST_HOPS),
+#endif
+#if defined(IPV6_MULTICAST_IF) || (defined(HAVE_DECL_IPV6_MULTICAST_IF) && HAVE_DECL_IPV6_MULTICAST_IF)
+  XLAT(IPV6_MULTICAST_IF),
+#endif
+#if defined(IPV6_MULTICAST_HOPS) || (defined(HAVE_DECL_IPV6_MULTICAST_HOPS) && HAVE_DECL_IPV6_MULTICAST_HOPS)
+  XLAT(IPV6_MULTICAST_HOPS),
+#endif
+#if defined(IPV6_MULTICAST_LOOP) || (defined(HAVE_DECL_IPV6_MULTICAST_LOOP) && HAVE_DECL_IPV6_MULTICAST_LOOP)
+  XLAT(IPV6_MULTICAST_LOOP),
+#endif
+#if defined(IPV6_ADD_MEMBERSHIP) || (defined(HAVE_DECL_IPV6_ADD_MEMBERSHIP) && HAVE_DECL_IPV6_ADD_MEMBERSHIP)
+  XLAT(IPV6_ADD_MEMBERSHIP),
+#endif
+#if defined(IPV6_DROP_MEMBERSHIP) || (defined(HAVE_DECL_IPV6_DROP_MEMBERSHIP) && HAVE_DECL_IPV6_DROP_MEMBERSHIP)
+  XLAT(IPV6_DROP_MEMBERSHIP),
+#endif
+#if defined(IPV6_ROUTER_ALERT) || (defined(HAVE_DECL_IPV6_ROUTER_ALERT) && HAVE_DECL_IPV6_ROUTER_ALERT)
+  XLAT(IPV6_ROUTER_ALERT),
+#endif
+#if defined(IPV6_MTU_DISCOVER) || (defined(HAVE_DECL_IPV6_MTU_DISCOVER) && HAVE_DECL_IPV6_MTU_DISCOVER)
+  XLAT(IPV6_MTU_DISCOVER),
+#endif
+#if defined(IPV6_MTU) || (defined(HAVE_DECL_IPV6_MTU) && HAVE_DECL_IPV6_MTU)
+  XLAT(IPV6_MTU),
+#endif
+#if defined(IPV6_RECVERR) || (defined(HAVE_DECL_IPV6_RECVERR) && HAVE_DECL_IPV6_RECVERR)
+  XLAT(IPV6_RECVERR),
+#endif
+#if defined(IPV6_V6ONLY) || (defined(HAVE_DECL_IPV6_V6ONLY) && HAVE_DECL_IPV6_V6ONLY)
+  XLAT(IPV6_V6ONLY),
+#endif
+#if defined(IPV6_JOIN_ANYCAST) || (defined(HAVE_DECL_IPV6_JOIN_ANYCAST) && HAVE_DECL_IPV6_JOIN_ANYCAST)
+  XLAT(IPV6_JOIN_ANYCAST),
+#endif
+#if defined(IPV6_LEAVE_ANYCAST) || (defined(HAVE_DECL_IPV6_LEAVE_ANYCAST) && HAVE_DECL_IPV6_LEAVE_ANYCAST)
+  XLAT(IPV6_LEAVE_ANYCAST),
+#endif
+#if defined(IPV6_FLOWLABEL_MGR) || (defined(HAVE_DECL_IPV6_FLOWLABEL_MGR) && HAVE_DECL_IPV6_FLOWLABEL_MGR)
+  XLAT(IPV6_FLOWLABEL_MGR),
+#endif
+#if defined(IPV6_FLOWINFO_SEND) || (defined(HAVE_DECL_IPV6_FLOWINFO_SEND) && HAVE_DECL_IPV6_FLOWINFO_SEND)
+  XLAT(IPV6_FLOWINFO_SEND),
+#endif
+#if defined(IPV6_IPSEC_POLICY) || (defined(HAVE_DECL_IPV6_IPSEC_POLICY) && HAVE_DECL_IPV6_IPSEC_POLICY)
+  XLAT(IPV6_IPSEC_POLICY),
+#endif
+#if defined(IPV6_XFRM_POLICY) || (defined(HAVE_DECL_IPV6_XFRM_POLICY) && HAVE_DECL_IPV6_XFRM_POLICY)
+  XLAT(IPV6_XFRM_POLICY),
+#endif
+#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
+#if defined(IPV6_PKTINFO) || (defined(HAVE_DECL_IPV6_PKTINFO) && HAVE_DECL_IPV6_PKTINFO)
+  XLAT(IPV6_PKTINFO),
+#endif
+#if defined(IPV6_RECVHOPLIMIT) || (defined(HAVE_DECL_IPV6_RECVHOPLIMIT) && HAVE_DECL_IPV6_RECVHOPLIMIT)
+  XLAT(IPV6_RECVHOPLIMIT),
+#endif
+#if defined(IPV6_HOPLIMIT) || (defined(HAVE_DECL_IPV6_HOPLIMIT) && HAVE_DECL_IPV6_HOPLIMIT)
+  XLAT(IPV6_HOPLIMIT),
+#endif
+#if defined(IPV6_RECVHOPOPTS) || (defined(HAVE_DECL_IPV6_RECVHOPOPTS) && HAVE_DECL_IPV6_RECVHOPOPTS)
+  XLAT(IPV6_RECVHOPOPTS),
+#endif
+#if defined(IPV6_HOPOPTS) || (defined(HAVE_DECL_IPV6_HOPOPTS) && HAVE_DECL_IPV6_HOPOPTS)
+  XLAT(IPV6_HOPOPTS),
+#endif
+#if defined(IPV6_RTHDRDSTOPTS) || (defined(HAVE_DECL_IPV6_RTHDRDSTOPTS) && HAVE_DECL_IPV6_RTHDRDSTOPTS)
+  XLAT(IPV6_RTHDRDSTOPTS),
+#endif
+#if defined(IPV6_RECVRTHDR) || (defined(HAVE_DECL_IPV6_RECVRTHDR) && HAVE_DECL_IPV6_RECVRTHDR)
+  XLAT(IPV6_RECVRTHDR),
+#endif
+#if defined(IPV6_RTHDR) || (defined(HAVE_DECL_IPV6_RTHDR) && HAVE_DECL_IPV6_RTHDR)
+  XLAT(IPV6_RTHDR),
+#endif
+#if defined(IPV6_RECVDSTOPTS) || (defined(HAVE_DECL_IPV6_RECVDSTOPTS) && HAVE_DECL_IPV6_RECVDSTOPTS)
+  XLAT(IPV6_RECVDSTOPTS),
+#endif
+#if defined(IPV6_DSTOPTS) || (defined(HAVE_DECL_IPV6_DSTOPTS) && HAVE_DECL_IPV6_DSTOPTS)
+  XLAT(IPV6_DSTOPTS),
+#endif
+#if defined(IPV6_RECVPATHMTU) || (defined(HAVE_DECL_IPV6_RECVPATHMTU) && HAVE_DECL_IPV6_RECVPATHMTU)
+  XLAT(IPV6_RECVPATHMTU),
+#endif
+#if defined(IPV6_PATHMTU) || (defined(HAVE_DECL_IPV6_PATHMTU) && HAVE_DECL_IPV6_PATHMTU)
+  XLAT(IPV6_PATHMTU),
+#endif
+#if defined(IPV6_DONTFRAG) || (defined(HAVE_DECL_IPV6_DONTFRAG) && HAVE_DECL_IPV6_DONTFRAG)
+  XLAT(IPV6_DONTFRAG),
+#endif
+#if defined(IPV6_USE_MIN_MTU) || (defined(HAVE_DECL_IPV6_USE_MIN_MTU) && HAVE_DECL_IPV6_USE_MIN_MTU)
+  XLAT(IPV6_USE_MIN_MTU),
+#endif
+#if defined(IPV6_RECVTCLASS) || (defined(HAVE_DECL_IPV6_RECVTCLASS) && HAVE_DECL_IPV6_RECVTCLASS)
+  XLAT(IPV6_RECVTCLASS),
+#endif
+#if defined(IPV6_TCLASS) || (defined(HAVE_DECL_IPV6_TCLASS) && HAVE_DECL_IPV6_TCLASS)
+  XLAT(IPV6_TCLASS),
+#endif
+#if defined(IPV6_AUTOFLOWLABEL) || (defined(HAVE_DECL_IPV6_AUTOFLOWLABEL) && HAVE_DECL_IPV6_AUTOFLOWLABEL)
+  XLAT(IPV6_AUTOFLOWLABEL),
+#endif
+#if defined(IPV6_ADDR_PREFERENCES) || (defined(HAVE_DECL_IPV6_ADDR_PREFERENCES) && HAVE_DECL_IPV6_ADDR_PREFERENCES)
+  XLAT(IPV6_ADDR_PREFERENCES),
+#endif
+#if defined(IPV6_MINHOPCOUNT) || (defined(HAVE_DECL_IPV6_MINHOPCOUNT) && HAVE_DECL_IPV6_MINHOPCOUNT)
+  XLAT(IPV6_MINHOPCOUNT),
+#endif
+#if defined(IPV6_ORIGDSTADDR) || (defined(HAVE_DECL_IPV6_ORIGDSTADDR) && HAVE_DECL_IPV6_ORIGDSTADDR)
+  XLAT(IPV6_ORIGDSTADDR),
+#endif
+#if defined(IPV6_RECVORIGDSTADDR) || (defined(HAVE_DECL_IPV6_RECVORIGDSTADDR) && HAVE_DECL_IPV6_RECVORIGDSTADDR)
+  XLAT(IPV6_RECVORIGDSTADDR),
+#endif
+#if defined(IPV6_TRANSPARENT) || (defined(HAVE_DECL_IPV6_TRANSPARENT) && HAVE_DECL_IPV6_TRANSPARENT)
+  XLAT(IPV6_TRANSPARENT),
+#endif
+#if defined(IPV6_UNICAST_IF) || (defined(HAVE_DECL_IPV6_UNICAST_IF) && HAVE_DECL_IPV6_UNICAST_IF)
+  XLAT(IPV6_UNICAST_IF),
+#endif
+#if defined(IPV6_RECVFRAGSIZE) || (defined(HAVE_DECL_IPV6_RECVFRAGSIZE) && HAVE_DECL_IPV6_RECVFRAGSIZE)
+  XLAT(IPV6_RECVFRAGSIZE),
+#endif
+#if defined(IPV6_FREEBIND) || (defined(HAVE_DECL_IPV6_FREEBIND) && HAVE_DECL_IPV6_FREEBIND)
+  XLAT(IPV6_FREEBIND),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_ipv6_options.in b/xlat/sock_ipv6_options.in
new file mode 100644
index 0000000..4f23d19
--- /dev/null
+++ b/xlat/sock_ipv6_options.in
@@ -0,0 +1,62 @@
+IPV6_ADDRFORM
+IPV6_2292PKTINFO
+IPV6_2292HOPOPTS
+IPV6_2292DSTOPTS
+IPV6_2292RTHDR
+IPV6_2292PKTOPTIONS
+IPV6_CHECKSUM
+IPV6_2292HOPLIMIT
+IPV6_NEXTHOP
+IPV6_AUTHHDR
+IPV6_FLOWINFO
+IPV6_UNICAST_HOPS
+IPV6_MULTICAST_IF
+IPV6_MULTICAST_HOPS
+IPV6_MULTICAST_LOOP
+IPV6_ADD_MEMBERSHIP
+IPV6_DROP_MEMBERSHIP
+IPV6_ROUTER_ALERT
+IPV6_MTU_DISCOVER
+IPV6_MTU
+IPV6_RECVERR
+IPV6_V6ONLY
+IPV6_JOIN_ANYCAST
+IPV6_LEAVE_ANYCAST
+IPV6_FLOWLABEL_MGR
+IPV6_FLOWINFO_SEND
+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
+IPV6_HOPLIMIT
+IPV6_RECVHOPOPTS
+IPV6_HOPOPTS
+IPV6_RTHDRDSTOPTS
+IPV6_RECVRTHDR
+IPV6_RTHDR
+IPV6_RECVDSTOPTS
+IPV6_DSTOPTS
+IPV6_RECVPATHMTU
+IPV6_PATHMTU
+IPV6_DONTFRAG
+IPV6_USE_MIN_MTU
+IPV6_RECVTCLASS
+IPV6_TCLASS
+IPV6_AUTOFLOWLABEL
+IPV6_ADDR_PREFERENCES
+IPV6_MINHOPCOUNT
+IPV6_ORIGDSTADDR
+IPV6_RECVORIGDSTADDR
+IPV6_TRANSPARENT
+IPV6_UNICAST_IF
+IPV6_RECVFRAGSIZE
+IPV6_FREEBIND
diff --git a/xlat/sock_ipx_options.h b/xlat/sock_ipx_options.h
new file mode 100644
index 0000000..cee80f1
--- /dev/null
+++ b/xlat/sock_ipx_options.h
@@ -0,0 +1,25 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_ipx_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_ipx_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_ipx_options[] = {
+#if defined(IPX_TYPE) || (defined(HAVE_DECL_IPX_TYPE) && HAVE_DECL_IPX_TYPE)
+  XLAT(IPX_TYPE),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_ipx_options.in b/xlat/sock_ipx_options.in
new file mode 100644
index 0000000..eba97fd
--- /dev/null
+++ b/xlat/sock_ipx_options.in
@@ -0,0 +1 @@
+IPX_TYPE
diff --git a/xlat/sock_irda_options.h b/xlat/sock_irda_options.h
new file mode 100644
index 0000000..5964390
--- /dev/null
+++ b/xlat/sock_irda_options.h
@@ -0,0 +1,110 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_irda_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IRLMP_ENUMDEVICES) || (defined(HAVE_DECL_IRLMP_ENUMDEVICES) && HAVE_DECL_IRLMP_ENUMDEVICES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_ENUMDEVICES) == (1), "IRLMP_ENUMDEVICES != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_ENUMDEVICES 1
+#endif
+#if defined(IRLMP_IAS_SET) || (defined(HAVE_DECL_IRLMP_IAS_SET) && HAVE_DECL_IRLMP_IAS_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_IAS_SET) == (2), "IRLMP_IAS_SET != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_IAS_SET 2
+#endif
+#if defined(IRLMP_IAS_QUERY) || (defined(HAVE_DECL_IRLMP_IAS_QUERY) && HAVE_DECL_IRLMP_IAS_QUERY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_IAS_QUERY) == (3), "IRLMP_IAS_QUERY != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_IAS_QUERY 3
+#endif
+#if defined(IRLMP_HINTS_SET) || (defined(HAVE_DECL_IRLMP_HINTS_SET) && HAVE_DECL_IRLMP_HINTS_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_HINTS_SET) == (4), "IRLMP_HINTS_SET != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_HINTS_SET 4
+#endif
+#if defined(IRLMP_QOS_SET) || (defined(HAVE_DECL_IRLMP_QOS_SET) && HAVE_DECL_IRLMP_QOS_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_QOS_SET) == (5), "IRLMP_QOS_SET != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_QOS_SET 5
+#endif
+#if defined(IRLMP_QOS_GET) || (defined(HAVE_DECL_IRLMP_QOS_GET) && HAVE_DECL_IRLMP_QOS_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_QOS_GET) == (6), "IRLMP_QOS_GET != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_QOS_GET 6
+#endif
+#if defined(IRLMP_MAX_SDU_SIZE) || (defined(HAVE_DECL_IRLMP_MAX_SDU_SIZE) && HAVE_DECL_IRLMP_MAX_SDU_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_MAX_SDU_SIZE) == (7), "IRLMP_MAX_SDU_SIZE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_MAX_SDU_SIZE 7
+#endif
+#if defined(IRLMP_IAS_GET) || (defined(HAVE_DECL_IRLMP_IAS_GET) && HAVE_DECL_IRLMP_IAS_GET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_IAS_GET) == (8), "IRLMP_IAS_GET != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_IAS_GET 8
+#endif
+#if defined(IRLMP_IAS_DEL) || (defined(HAVE_DECL_IRLMP_IAS_DEL) && HAVE_DECL_IRLMP_IAS_DEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_IAS_DEL) == (9), "IRLMP_IAS_DEL != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_IAS_DEL 9
+#endif
+#if defined(IRLMP_HINT_MASK_SET) || (defined(HAVE_DECL_IRLMP_HINT_MASK_SET) && HAVE_DECL_IRLMP_HINT_MASK_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_HINT_MASK_SET) == (10), "IRLMP_HINT_MASK_SET != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_HINT_MASK_SET 10
+#endif
+#if defined(IRLMP_WAITDEVICE) || (defined(HAVE_DECL_IRLMP_WAITDEVICE) && HAVE_DECL_IRLMP_WAITDEVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IRLMP_WAITDEVICE) == (11), "IRLMP_WAITDEVICE != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IRLMP_WAITDEVICE 11
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_irda_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_irda_options[] = {
+ [IRLMP_ENUMDEVICES] = XLAT(IRLMP_ENUMDEVICES),
+ [IRLMP_IAS_SET] = XLAT(IRLMP_IAS_SET),
+ [IRLMP_IAS_QUERY] = XLAT(IRLMP_IAS_QUERY),
+ [IRLMP_HINTS_SET] = XLAT(IRLMP_HINTS_SET),
+ [IRLMP_QOS_SET] = XLAT(IRLMP_QOS_SET),
+ [IRLMP_QOS_GET] = XLAT(IRLMP_QOS_GET),
+ [IRLMP_MAX_SDU_SIZE] = XLAT(IRLMP_MAX_SDU_SIZE),
+ [IRLMP_IAS_GET] = XLAT(IRLMP_IAS_GET),
+ [IRLMP_IAS_DEL] = XLAT(IRLMP_IAS_DEL),
+ [IRLMP_HINT_MASK_SET] = XLAT(IRLMP_HINT_MASK_SET),
+ [IRLMP_WAITDEVICE] = XLAT(IRLMP_WAITDEVICE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_irda_options.in b/xlat/sock_irda_options.in
new file mode 100644
index 0000000..a26e098
--- /dev/null
+++ b/xlat/sock_irda_options.in
@@ -0,0 +1,12 @@
+#value_indexed
+IRLMP_ENUMDEVICES	1
+IRLMP_IAS_SET		2
+IRLMP_IAS_QUERY		3
+IRLMP_HINTS_SET		4
+IRLMP_QOS_SET		5
+IRLMP_QOS_GET		6
+IRLMP_MAX_SDU_SIZE	7
+IRLMP_IAS_GET		8
+IRLMP_IAS_DEL		9
+IRLMP_HINT_MASK_SET	10
+IRLMP_WAITDEVICE	11
diff --git a/xlat/sock_iucv_options.h b/xlat/sock_iucv_options.h
new file mode 100644
index 0000000..ad4b173
--- /dev/null
+++ b/xlat/sock_iucv_options.h
@@ -0,0 +1,46 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_iucv_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SO_IPRMDATA_MSG) || (defined(HAVE_DECL_SO_IPRMDATA_MSG) && HAVE_DECL_SO_IPRMDATA_MSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_IPRMDATA_MSG) == (0x0080), "SO_IPRMDATA_MSG != 0x0080");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_IPRMDATA_MSG 0x0080
+#endif
+#if defined(SO_MSGLIMIT) || (defined(HAVE_DECL_SO_MSGLIMIT) && HAVE_DECL_SO_MSGLIMIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MSGLIMIT) == (0x1000), "SO_MSGLIMIT != 0x1000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MSGLIMIT 0x1000
+#endif
+#if defined(SO_MSGSIZE) || (defined(HAVE_DECL_SO_MSGSIZE) && HAVE_DECL_SO_MSGSIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MSGSIZE) == (0x0800), "SO_MSGSIZE != 0x0800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MSGSIZE 0x0800
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_iucv_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_iucv_options[] = {
+ XLAT(SO_IPRMDATA_MSG),
+ XLAT(SO_MSGLIMIT),
+ XLAT(SO_MSGSIZE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_iucv_options.in b/xlat/sock_iucv_options.in
new file mode 100644
index 0000000..827b54c
--- /dev/null
+++ b/xlat/sock_iucv_options.in
@@ -0,0 +1,3 @@
+SO_IPRMDATA_MSG	0x0080
+SO_MSGLIMIT	0x1000
+SO_MSGSIZE	0x0800
diff --git a/xlat/sock_kcm_options.h b/xlat/sock_kcm_options.h
new file mode 100644
index 0000000..43e4cc4
--- /dev/null
+++ b/xlat/sock_kcm_options.h
@@ -0,0 +1,30 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_kcm_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KCM_RECV_DISABLE) || (defined(HAVE_DECL_KCM_RECV_DISABLE) && HAVE_DECL_KCM_RECV_DISABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KCM_RECV_DISABLE) == (1), "KCM_RECV_DISABLE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define KCM_RECV_DISABLE 1
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_kcm_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_kcm_options[] = {
+ XLAT(KCM_RECV_DISABLE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_kcm_options.in b/xlat/sock_kcm_options.in
new file mode 100644
index 0000000..ee58639
--- /dev/null
+++ b/xlat/sock_kcm_options.in
@@ -0,0 +1 @@
+KCM_RECV_DISABLE	1
diff --git a/xlat/sock_llc_options.h b/xlat/sock_llc_options.h
new file mode 100644
index 0000000..109ecdc
--- /dev/null
+++ b/xlat/sock_llc_options.h
@@ -0,0 +1,102 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_llc_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(LLC_OPT_UNKNOWN) || (defined(HAVE_DECL_LLC_OPT_UNKNOWN) && HAVE_DECL_LLC_OPT_UNKNOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_UNKNOWN) == (0), "LLC_OPT_UNKNOWN != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_UNKNOWN 0
+#endif
+#if defined(LLC_OPT_RETRY) || (defined(HAVE_DECL_LLC_OPT_RETRY) && HAVE_DECL_LLC_OPT_RETRY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_RETRY) == (1), "LLC_OPT_RETRY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_RETRY 1
+#endif
+#if defined(LLC_OPT_SIZE) || (defined(HAVE_DECL_LLC_OPT_SIZE) && HAVE_DECL_LLC_OPT_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_SIZE) == (2), "LLC_OPT_SIZE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_SIZE 2
+#endif
+#if defined(LLC_OPT_ACK_TMR_EXP) || (defined(HAVE_DECL_LLC_OPT_ACK_TMR_EXP) && HAVE_DECL_LLC_OPT_ACK_TMR_EXP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_ACK_TMR_EXP) == (3), "LLC_OPT_ACK_TMR_EXP != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_ACK_TMR_EXP 3
+#endif
+#if defined(LLC_OPT_P_TMR_EXP) || (defined(HAVE_DECL_LLC_OPT_P_TMR_EXP) && HAVE_DECL_LLC_OPT_P_TMR_EXP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_P_TMR_EXP) == (4), "LLC_OPT_P_TMR_EXP != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_P_TMR_EXP 4
+#endif
+#if defined(LLC_OPT_REJ_TMR_EXP) || (defined(HAVE_DECL_LLC_OPT_REJ_TMR_EXP) && HAVE_DECL_LLC_OPT_REJ_TMR_EXP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_REJ_TMR_EXP) == (5), "LLC_OPT_REJ_TMR_EXP != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_REJ_TMR_EXP 5
+#endif
+#if defined(LLC_OPT_BUSY_TMR_EXP) || (defined(HAVE_DECL_LLC_OPT_BUSY_TMR_EXP) && HAVE_DECL_LLC_OPT_BUSY_TMR_EXP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_BUSY_TMR_EXP) == (6), "LLC_OPT_BUSY_TMR_EXP != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_BUSY_TMR_EXP 6
+#endif
+#if defined(LLC_OPT_TX_WIN) || (defined(HAVE_DECL_LLC_OPT_TX_WIN) && HAVE_DECL_LLC_OPT_TX_WIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_TX_WIN) == (7), "LLC_OPT_TX_WIN != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_TX_WIN 7
+#endif
+#if defined(LLC_OPT_RX_WIN) || (defined(HAVE_DECL_LLC_OPT_RX_WIN) && HAVE_DECL_LLC_OPT_RX_WIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_RX_WIN) == (8), "LLC_OPT_RX_WIN != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_RX_WIN 8
+#endif
+#if defined(LLC_OPT_PKTINFO) || (defined(HAVE_DECL_LLC_OPT_PKTINFO) && HAVE_DECL_LLC_OPT_PKTINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((LLC_OPT_PKTINFO) == (9), "LLC_OPT_PKTINFO != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define LLC_OPT_PKTINFO 9
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_llc_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_llc_options[] = {
+ [LLC_OPT_UNKNOWN] = XLAT(LLC_OPT_UNKNOWN),
+ [LLC_OPT_RETRY] = XLAT(LLC_OPT_RETRY),
+ [LLC_OPT_SIZE] = XLAT(LLC_OPT_SIZE),
+ [LLC_OPT_ACK_TMR_EXP] = XLAT(LLC_OPT_ACK_TMR_EXP),
+ [LLC_OPT_P_TMR_EXP] = XLAT(LLC_OPT_P_TMR_EXP),
+ [LLC_OPT_REJ_TMR_EXP] = XLAT(LLC_OPT_REJ_TMR_EXP),
+ [LLC_OPT_BUSY_TMR_EXP] = XLAT(LLC_OPT_BUSY_TMR_EXP),
+ [LLC_OPT_TX_WIN] = XLAT(LLC_OPT_TX_WIN),
+ [LLC_OPT_RX_WIN] = XLAT(LLC_OPT_RX_WIN),
+ [LLC_OPT_PKTINFO] = XLAT(LLC_OPT_PKTINFO),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_llc_options.in b/xlat/sock_llc_options.in
new file mode 100644
index 0000000..7a948d7
--- /dev/null
+++ b/xlat/sock_llc_options.in
@@ -0,0 +1,11 @@
+#value_indexed
+LLC_OPT_UNKNOWN		0
+LLC_OPT_RETRY		1
+LLC_OPT_SIZE		2
+LLC_OPT_ACK_TMR_EXP	3
+LLC_OPT_P_TMR_EXP	4
+LLC_OPT_REJ_TMR_EXP	5
+LLC_OPT_BUSY_TMR_EXP	6
+LLC_OPT_TX_WIN		7
+LLC_OPT_RX_WIN		8
+LLC_OPT_PKTINFO		9
diff --git a/xlat/sock_netlink_options.h b/xlat/sock_netlink_options.h
new file mode 100644
index 0000000..8f359db
--- /dev/null
+++ b/xlat/sock_netlink_options.h
@@ -0,0 +1,110 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_netlink_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NETLINK_ADD_MEMBERSHIP) || (defined(HAVE_DECL_NETLINK_ADD_MEMBERSHIP) && HAVE_DECL_NETLINK_ADD_MEMBERSHIP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_ADD_MEMBERSHIP) == (1), "NETLINK_ADD_MEMBERSHIP != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_ADD_MEMBERSHIP 1
+#endif
+#if defined(NETLINK_DROP_MEMBERSHIP) || (defined(HAVE_DECL_NETLINK_DROP_MEMBERSHIP) && HAVE_DECL_NETLINK_DROP_MEMBERSHIP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_DROP_MEMBERSHIP) == (2), "NETLINK_DROP_MEMBERSHIP != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_DROP_MEMBERSHIP 2
+#endif
+#if defined(NETLINK_PKTINFO) || (defined(HAVE_DECL_NETLINK_PKTINFO) && HAVE_DECL_NETLINK_PKTINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_PKTINFO) == (3), "NETLINK_PKTINFO != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_PKTINFO 3
+#endif
+#if defined(NETLINK_BROADCAST_ERROR) || (defined(HAVE_DECL_NETLINK_BROADCAST_ERROR) && HAVE_DECL_NETLINK_BROADCAST_ERROR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_BROADCAST_ERROR) == (4), "NETLINK_BROADCAST_ERROR != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_BROADCAST_ERROR 4
+#endif
+#if defined(NETLINK_NO_ENOBUFS) || (defined(HAVE_DECL_NETLINK_NO_ENOBUFS) && HAVE_DECL_NETLINK_NO_ENOBUFS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_NO_ENOBUFS) == (5), "NETLINK_NO_ENOBUFS != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_NO_ENOBUFS 5
+#endif
+#if defined(NETLINK_RX_RING) || (defined(HAVE_DECL_NETLINK_RX_RING) && HAVE_DECL_NETLINK_RX_RING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_RX_RING) == (6), "NETLINK_RX_RING != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_RX_RING 6
+#endif
+#if defined(NETLINK_TX_RING) || (defined(HAVE_DECL_NETLINK_TX_RING) && HAVE_DECL_NETLINK_TX_RING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_TX_RING) == (7), "NETLINK_TX_RING != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_TX_RING 7
+#endif
+#if defined(NETLINK_LISTEN_ALL_NSID) || (defined(HAVE_DECL_NETLINK_LISTEN_ALL_NSID) && HAVE_DECL_NETLINK_LISTEN_ALL_NSID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_LISTEN_ALL_NSID) == (8), "NETLINK_LISTEN_ALL_NSID != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_LISTEN_ALL_NSID 8
+#endif
+#if defined(NETLINK_LIST_MEMBERSHIPS) || (defined(HAVE_DECL_NETLINK_LIST_MEMBERSHIPS) && HAVE_DECL_NETLINK_LIST_MEMBERSHIPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_LIST_MEMBERSHIPS) == (9), "NETLINK_LIST_MEMBERSHIPS != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_LIST_MEMBERSHIPS 9
+#endif
+#if defined(NETLINK_CAP_ACK) || (defined(HAVE_DECL_NETLINK_CAP_ACK) && HAVE_DECL_NETLINK_CAP_ACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_CAP_ACK) == (10), "NETLINK_CAP_ACK != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_CAP_ACK 10
+#endif
+#if defined(NETLINK_EXT_ACK) || (defined(HAVE_DECL_NETLINK_EXT_ACK) && HAVE_DECL_NETLINK_EXT_ACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NETLINK_EXT_ACK) == (11), "NETLINK_EXT_ACK != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NETLINK_EXT_ACK 11
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_netlink_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_netlink_options[] = {
+ XLAT(NETLINK_ADD_MEMBERSHIP),
+ XLAT(NETLINK_DROP_MEMBERSHIP),
+ XLAT(NETLINK_PKTINFO),
+ XLAT(NETLINK_BROADCAST_ERROR),
+ XLAT(NETLINK_NO_ENOBUFS),
+ XLAT(NETLINK_RX_RING),
+ XLAT(NETLINK_TX_RING),
+ XLAT(NETLINK_LISTEN_ALL_NSID),
+ XLAT(NETLINK_LIST_MEMBERSHIPS),
+ XLAT(NETLINK_CAP_ACK),
+ XLAT(NETLINK_EXT_ACK),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_netlink_options.in b/xlat/sock_netlink_options.in
new file mode 100644
index 0000000..033ffd4
--- /dev/null
+++ b/xlat/sock_netlink_options.in
@@ -0,0 +1,11 @@
+NETLINK_ADD_MEMBERSHIP		1
+NETLINK_DROP_MEMBERSHIP		2
+NETLINK_PKTINFO			3
+NETLINK_BROADCAST_ERROR		4
+NETLINK_NO_ENOBUFS		5
+NETLINK_RX_RING			6
+NETLINK_TX_RING			7
+NETLINK_LISTEN_ALL_NSID		8
+NETLINK_LIST_MEMBERSHIPS	9
+NETLINK_CAP_ACK			10
+NETLINK_EXT_ACK			11
diff --git a/xlat/sock_nfcllcp_options.h b/xlat/sock_nfcllcp_options.h
new file mode 100644
index 0000000..4d7bfb8
--- /dev/null
+++ b/xlat/sock_nfcllcp_options.h
@@ -0,0 +1,62 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_nfcllcp_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(NFC_LLCP_RW) || (defined(HAVE_DECL_NFC_LLCP_RW) && HAVE_DECL_NFC_LLCP_RW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFC_LLCP_RW) == (0), "NFC_LLCP_RW != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NFC_LLCP_RW 0
+#endif
+#if defined(NFC_LLCP_MIUX) || (defined(HAVE_DECL_NFC_LLCP_MIUX) && HAVE_DECL_NFC_LLCP_MIUX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFC_LLCP_MIUX) == (1), "NFC_LLCP_MIUX != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NFC_LLCP_MIUX 1
+#endif
+#if defined(NFC_LLCP_REMOTE_MIU) || (defined(HAVE_DECL_NFC_LLCP_REMOTE_MIU) && HAVE_DECL_NFC_LLCP_REMOTE_MIU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFC_LLCP_REMOTE_MIU) == (2), "NFC_LLCP_REMOTE_MIU != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NFC_LLCP_REMOTE_MIU 2
+#endif
+#if defined(NFC_LLCP_REMOTE_LTO) || (defined(HAVE_DECL_NFC_LLCP_REMOTE_LTO) && HAVE_DECL_NFC_LLCP_REMOTE_LTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFC_LLCP_REMOTE_LTO) == (3), "NFC_LLCP_REMOTE_LTO != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NFC_LLCP_REMOTE_LTO 3
+#endif
+#if defined(NFC_LLCP_REMOTE_RW) || (defined(HAVE_DECL_NFC_LLCP_REMOTE_RW) && HAVE_DECL_NFC_LLCP_REMOTE_RW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((NFC_LLCP_REMOTE_RW) == (4), "NFC_LLCP_REMOTE_RW != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define NFC_LLCP_REMOTE_RW 4
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_nfcllcp_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_nfcllcp_options[] = {
+ [NFC_LLCP_RW] = XLAT(NFC_LLCP_RW),
+ [NFC_LLCP_MIUX] = XLAT(NFC_LLCP_MIUX),
+ [NFC_LLCP_REMOTE_MIU] = XLAT(NFC_LLCP_REMOTE_MIU),
+ [NFC_LLCP_REMOTE_LTO] = XLAT(NFC_LLCP_REMOTE_LTO),
+ [NFC_LLCP_REMOTE_RW] = XLAT(NFC_LLCP_REMOTE_RW),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_nfcllcp_options.in b/xlat/sock_nfcllcp_options.in
new file mode 100644
index 0000000..c9f9fdc
--- /dev/null
+++ b/xlat/sock_nfcllcp_options.in
@@ -0,0 +1,6 @@
+#value_indexed
+NFC_LLCP_RW		0
+NFC_LLCP_MIUX		1
+NFC_LLCP_REMOTE_MIU	2
+NFC_LLCP_REMOTE_LTO	3
+NFC_LLCP_REMOTE_RW	4
diff --git a/xlat/sock_options.h b/xlat/sock_options.h
new file mode 100644
index 0000000..a85a8ad
--- /dev/null
+++ b/xlat/sock_options.h
@@ -0,0 +1,1858 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SO_DEBUG) || (defined(HAVE_DECL_SO_DEBUG) && HAVE_DECL_SO_DEBUG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_DEBUG) == (1), "SO_DEBUG != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_DEBUG 1
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_REUSEADDR) || (defined(HAVE_DECL_SO_REUSEADDR) && HAVE_DECL_SO_REUSEADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_REUSEADDR) == (4), "SO_REUSEADDR != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_REUSEADDR 4
+#endif
+#else
+#if defined(SO_REUSEADDR) || (defined(HAVE_DECL_SO_REUSEADDR) && HAVE_DECL_SO_REUSEADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_REUSEADDR) == (2), "SO_REUSEADDR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_REUSEADDR 2
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_TYPE) || (defined(HAVE_DECL_SO_TYPE) && HAVE_DECL_SO_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TYPE) == (4104), "SO_TYPE != 4104");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TYPE 4104
+#endif
+#else
+#if defined(SO_TYPE) || (defined(HAVE_DECL_SO_TYPE) && HAVE_DECL_SO_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TYPE) == (3), "SO_TYPE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TYPE 3
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_ERROR) || (defined(HAVE_DECL_SO_ERROR) && HAVE_DECL_SO_ERROR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ERROR) == (4103), "SO_ERROR != 4103");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ERROR 4103
+#endif
+#else
+#if defined(SO_ERROR) || (defined(HAVE_DECL_SO_ERROR) && HAVE_DECL_SO_ERROR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ERROR) == (4), "SO_ERROR != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ERROR 4
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_DONTROUTE) || (defined(HAVE_DECL_SO_DONTROUTE) && HAVE_DECL_SO_DONTROUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_DONTROUTE) == (16), "SO_DONTROUTE != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_DONTROUTE 16
+#endif
+#else
+#if defined(SO_DONTROUTE) || (defined(HAVE_DECL_SO_DONTROUTE) && HAVE_DECL_SO_DONTROUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_DONTROUTE) == (5), "SO_DONTROUTE != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_DONTROUTE 5
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_BROADCAST) || (defined(HAVE_DECL_SO_BROADCAST) && HAVE_DECL_SO_BROADCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BROADCAST) == (32), "SO_BROADCAST != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BROADCAST 32
+#endif
+#else
+#if defined(SO_BROADCAST) || (defined(HAVE_DECL_SO_BROADCAST) && HAVE_DECL_SO_BROADCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BROADCAST) == (6), "SO_BROADCAST != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BROADCAST 6
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_SNDBUF) || (defined(HAVE_DECL_SO_SNDBUF) && HAVE_DECL_SO_SNDBUF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDBUF) == (4097), "SO_SNDBUF != 4097");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDBUF 4097
+#endif
+#else
+#if defined(SO_SNDBUF) || (defined(HAVE_DECL_SO_SNDBUF) && HAVE_DECL_SO_SNDBUF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDBUF) == (7), "SO_SNDBUF != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDBUF 7
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_RCVBUF) || (defined(HAVE_DECL_SO_RCVBUF) && HAVE_DECL_SO_RCVBUF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVBUF) == (4098), "SO_RCVBUF != 4098");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVBUF 4098
+#endif
+#else
+#if defined(SO_RCVBUF) || (defined(HAVE_DECL_SO_RCVBUF) && HAVE_DECL_SO_RCVBUF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVBUF) == (8), "SO_RCVBUF != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVBUF 8
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_KEEPALIVE) || (defined(HAVE_DECL_SO_KEEPALIVE) && HAVE_DECL_SO_KEEPALIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_KEEPALIVE) == (8), "SO_KEEPALIVE != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_KEEPALIVE 8
+#endif
+#else
+#if defined(SO_KEEPALIVE) || (defined(HAVE_DECL_SO_KEEPALIVE) && HAVE_DECL_SO_KEEPALIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_KEEPALIVE) == (9), "SO_KEEPALIVE != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_KEEPALIVE 9
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_OOBINLINE) || (defined(HAVE_DECL_SO_OOBINLINE) && HAVE_DECL_SO_OOBINLINE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_OOBINLINE) == (256), "SO_OOBINLINE != 256");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_OOBINLINE 256
+#endif
+#else
+#if defined(SO_OOBINLINE) || (defined(HAVE_DECL_SO_OOBINLINE) && HAVE_DECL_SO_OOBINLINE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_OOBINLINE) == (10), "SO_OOBINLINE != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_OOBINLINE 10
+#endif
+#endif
+#if defined __hppa__
+#if defined(SO_NO_CHECK) || (defined(HAVE_DECL_SO_NO_CHECK) && HAVE_DECL_SO_NO_CHECK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_NO_CHECK) == (16395), "SO_NO_CHECK != 16395");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_NO_CHECK 16395
+#endif
+#else
+#if defined(SO_NO_CHECK) || (defined(HAVE_DECL_SO_NO_CHECK) && HAVE_DECL_SO_NO_CHECK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_NO_CHECK) == (11), "SO_NO_CHECK != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_NO_CHECK 11
+#endif
+#endif
+#if defined __hppa__
+#if defined(SO_PRIORITY) || (defined(HAVE_DECL_SO_PRIORITY) && HAVE_DECL_SO_PRIORITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PRIORITY) == (16396), "SO_PRIORITY != 16396");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PRIORITY 16396
+#endif
+#else
+#if defined(SO_PRIORITY) || (defined(HAVE_DECL_SO_PRIORITY) && HAVE_DECL_SO_PRIORITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PRIORITY) == (12), "SO_PRIORITY != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PRIORITY 12
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_LINGER) || (defined(HAVE_DECL_SO_LINGER) && HAVE_DECL_SO_LINGER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_LINGER) == (128), "SO_LINGER != 128");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_LINGER 128
+#endif
+#else
+#if defined(SO_LINGER) || (defined(HAVE_DECL_SO_LINGER) && HAVE_DECL_SO_LINGER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_LINGER) == (13), "SO_LINGER != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_LINGER 13
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_BSDCOMPAT) || (defined(HAVE_DECL_SO_BSDCOMPAT) && HAVE_DECL_SO_BSDCOMPAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BSDCOMPAT) == (1024), "SO_BSDCOMPAT != 1024");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BSDCOMPAT 1024
+#endif
+#elif defined __hppa__
+#if defined(SO_BSDCOMPAT) || (defined(HAVE_DECL_SO_BSDCOMPAT) && HAVE_DECL_SO_BSDCOMPAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BSDCOMPAT) == (16398), "SO_BSDCOMPAT != 16398");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BSDCOMPAT 16398
+#endif
+#else
+#if defined(SO_BSDCOMPAT) || (defined(HAVE_DECL_SO_BSDCOMPAT) && HAVE_DECL_SO_BSDCOMPAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BSDCOMPAT) == (14), "SO_BSDCOMPAT != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BSDCOMPAT 14
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_REUSEPORT) || (defined(HAVE_DECL_SO_REUSEPORT) && HAVE_DECL_SO_REUSEPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_REUSEPORT) == (512), "SO_REUSEPORT != 512");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_REUSEPORT 512
+#endif
+#else
+#if defined(SO_REUSEPORT) || (defined(HAVE_DECL_SO_REUSEPORT) && HAVE_DECL_SO_REUSEPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_REUSEPORT) == (15), "SO_REUSEPORT != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_REUSEPORT 15
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_PASSCRED) || (defined(HAVE_DECL_SO_PASSCRED) && HAVE_DECL_SO_PASSCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PASSCRED) == (2), "SO_PASSCRED != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PASSCRED 2
+#endif
+#elif defined __alpha__ || defined __mips__
+#if defined(SO_PASSCRED) || (defined(HAVE_DECL_SO_PASSCRED) && HAVE_DECL_SO_PASSCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PASSCRED) == (17), "SO_PASSCRED != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PASSCRED 17
+#endif
+#elif defined __powerpc__
+#if defined(SO_PASSCRED) || (defined(HAVE_DECL_SO_PASSCRED) && HAVE_DECL_SO_PASSCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PASSCRED) == (20), "SO_PASSCRED != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PASSCRED 20
+#endif
+#elif defined __hppa__
+#if defined(SO_PASSCRED) || (defined(HAVE_DECL_SO_PASSCRED) && HAVE_DECL_SO_PASSCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PASSCRED) == (16400), "SO_PASSCRED != 16400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PASSCRED 16400
+#endif
+#else
+#if defined(SO_PASSCRED) || (defined(HAVE_DECL_SO_PASSCRED) && HAVE_DECL_SO_PASSCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PASSCRED) == (16), "SO_PASSCRED != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PASSCRED 16
+#endif
+#endif
+#if defined __alpha__ || defined __mips__
+#if defined(SO_PEERCRED) || (defined(HAVE_DECL_SO_PEERCRED) && HAVE_DECL_SO_PEERCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERCRED) == (18), "SO_PEERCRED != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERCRED 18
+#endif
+#elif defined __powerpc__
+#if defined(SO_PEERCRED) || (defined(HAVE_DECL_SO_PEERCRED) && HAVE_DECL_SO_PEERCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERCRED) == (21), "SO_PEERCRED != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERCRED 21
+#endif
+#elif defined __sparc__
+#if defined(SO_PEERCRED) || (defined(HAVE_DECL_SO_PEERCRED) && HAVE_DECL_SO_PEERCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERCRED) == (64), "SO_PEERCRED != 64");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERCRED 64
+#endif
+#elif defined __hppa__
+#if defined(SO_PEERCRED) || (defined(HAVE_DECL_SO_PEERCRED) && HAVE_DECL_SO_PEERCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERCRED) == (16401), "SO_PEERCRED != 16401");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERCRED 16401
+#endif
+#else
+#if defined(SO_PEERCRED) || (defined(HAVE_DECL_SO_PEERCRED) && HAVE_DECL_SO_PEERCRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERCRED) == (17), "SO_PEERCRED != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERCRED 17
+#endif
+#endif
+#if defined __powerpc__
+#if defined(SO_RCVLOWAT) || (defined(HAVE_DECL_SO_RCVLOWAT) && HAVE_DECL_SO_RCVLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVLOWAT) == (16), "SO_RCVLOWAT != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVLOWAT 16
+#endif
+#elif defined __sparc__
+#if defined(SO_RCVLOWAT) || (defined(HAVE_DECL_SO_RCVLOWAT) && HAVE_DECL_SO_RCVLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVLOWAT) == (2048), "SO_RCVLOWAT != 2048");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVLOWAT 2048
+#endif
+#elif defined __hppa__ || defined __mips__
+#if defined(SO_RCVLOWAT) || (defined(HAVE_DECL_SO_RCVLOWAT) && HAVE_DECL_SO_RCVLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVLOWAT) == (4100), "SO_RCVLOWAT != 4100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVLOWAT 4100
+#endif
+#elif defined __alpha__
+#if defined(SO_RCVLOWAT) || (defined(HAVE_DECL_SO_RCVLOWAT) && HAVE_DECL_SO_RCVLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVLOWAT) == (4112), "SO_RCVLOWAT != 4112");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVLOWAT 4112
+#endif
+#else
+#if defined(SO_RCVLOWAT) || (defined(HAVE_DECL_SO_RCVLOWAT) && HAVE_DECL_SO_RCVLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVLOWAT) == (18), "SO_RCVLOWAT != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVLOWAT 18
+#endif
+#endif
+#if defined __powerpc__
+#if defined(SO_SNDLOWAT) || (defined(HAVE_DECL_SO_SNDLOWAT) && HAVE_DECL_SO_SNDLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDLOWAT) == (17), "SO_SNDLOWAT != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDLOWAT 17
+#endif
+#elif defined __sparc__
+#if defined(SO_SNDLOWAT) || (defined(HAVE_DECL_SO_SNDLOWAT) && HAVE_DECL_SO_SNDLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDLOWAT) == (4096), "SO_SNDLOWAT != 4096");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDLOWAT 4096
+#endif
+#elif defined __hppa__ || defined __mips__
+#if defined(SO_SNDLOWAT) || (defined(HAVE_DECL_SO_SNDLOWAT) && HAVE_DECL_SO_SNDLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDLOWAT) == (4099), "SO_SNDLOWAT != 4099");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDLOWAT 4099
+#endif
+#elif defined __alpha__
+#if defined(SO_SNDLOWAT) || (defined(HAVE_DECL_SO_SNDLOWAT) && HAVE_DECL_SO_SNDLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDLOWAT) == (4113), "SO_SNDLOWAT != 4113");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDLOWAT 4113
+#endif
+#else
+#if defined(SO_SNDLOWAT) || (defined(HAVE_DECL_SO_SNDLOWAT) && HAVE_DECL_SO_SNDLOWAT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDLOWAT) == (19), "SO_SNDLOWAT != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDLOWAT 19
+#endif
+#endif
+#if defined __powerpc__
+#if defined(SO_RCVTIMEO) || (defined(HAVE_DECL_SO_RCVTIMEO) && HAVE_DECL_SO_RCVTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVTIMEO) == (18), "SO_RCVTIMEO != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVTIMEO 18
+#endif
+#elif defined __hppa__ || defined __mips__
+#if defined(SO_RCVTIMEO) || (defined(HAVE_DECL_SO_RCVTIMEO) && HAVE_DECL_SO_RCVTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVTIMEO) == (4102), "SO_RCVTIMEO != 4102");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVTIMEO 4102
+#endif
+#elif defined __alpha__
+#if defined(SO_RCVTIMEO) || (defined(HAVE_DECL_SO_RCVTIMEO) && HAVE_DECL_SO_RCVTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVTIMEO) == (4114), "SO_RCVTIMEO != 4114");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVTIMEO 4114
+#endif
+#elif defined __sparc__
+#if defined(SO_RCVTIMEO) || (defined(HAVE_DECL_SO_RCVTIMEO) && HAVE_DECL_SO_RCVTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVTIMEO) == (8192), "SO_RCVTIMEO != 8192");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVTIMEO 8192
+#endif
+#else
+#if defined(SO_RCVTIMEO) || (defined(HAVE_DECL_SO_RCVTIMEO) && HAVE_DECL_SO_RCVTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVTIMEO) == (20), "SO_RCVTIMEO != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVTIMEO 20
+#endif
+#endif
+#if defined __powerpc__
+#if defined(SO_SNDTIMEO) || (defined(HAVE_DECL_SO_SNDTIMEO) && HAVE_DECL_SO_SNDTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDTIMEO) == (19), "SO_SNDTIMEO != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDTIMEO 19
+#endif
+#elif defined __hppa__ || defined __mips__
+#if defined(SO_SNDTIMEO) || (defined(HAVE_DECL_SO_SNDTIMEO) && HAVE_DECL_SO_SNDTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDTIMEO) == (4101), "SO_SNDTIMEO != 4101");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDTIMEO 4101
+#endif
+#elif defined __alpha__
+#if defined(SO_SNDTIMEO) || (defined(HAVE_DECL_SO_SNDTIMEO) && HAVE_DECL_SO_SNDTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDTIMEO) == (4115), "SO_SNDTIMEO != 4115");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDTIMEO 4115
+#endif
+#elif defined __sparc__
+#if defined(SO_SNDTIMEO) || (defined(HAVE_DECL_SO_SNDTIMEO) && HAVE_DECL_SO_SNDTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDTIMEO) == (16384), "SO_SNDTIMEO != 16384");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDTIMEO 16384
+#endif
+#else
+#if defined(SO_SNDTIMEO) || (defined(HAVE_DECL_SO_SNDTIMEO) && HAVE_DECL_SO_SNDTIMEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDTIMEO) == (21), "SO_SNDTIMEO != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDTIMEO 21
+#endif
+#endif
+#if defined __alpha__
+#if defined(SO_SECURITY_AUTHENTICATION) || (defined(HAVE_DECL_SO_SECURITY_AUTHENTICATION) && HAVE_DECL_SO_SECURITY_AUTHENTICATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_AUTHENTICATION) == (19), "SO_SECURITY_AUTHENTICATION != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_AUTHENTICATION 19
+#endif
+#elif defined __hppa__
+#if defined(SO_SECURITY_AUTHENTICATION) || (defined(HAVE_DECL_SO_SECURITY_AUTHENTICATION) && HAVE_DECL_SO_SECURITY_AUTHENTICATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_AUTHENTICATION) == (16406), "SO_SECURITY_AUTHENTICATION != 16406");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_AUTHENTICATION 16406
+#endif
+#elif defined __sparc__
+#if defined(SO_SECURITY_AUTHENTICATION) || (defined(HAVE_DECL_SO_SECURITY_AUTHENTICATION) && HAVE_DECL_SO_SECURITY_AUTHENTICATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_AUTHENTICATION) == (20481), "SO_SECURITY_AUTHENTICATION != 20481");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_AUTHENTICATION 20481
+#endif
+#else
+#if defined(SO_SECURITY_AUTHENTICATION) || (defined(HAVE_DECL_SO_SECURITY_AUTHENTICATION) && HAVE_DECL_SO_SECURITY_AUTHENTICATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_AUTHENTICATION) == (22), "SO_SECURITY_AUTHENTICATION != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_AUTHENTICATION 22
+#endif
+#endif
+#if defined __alpha__
+#if defined(SO_SECURITY_ENCRYPTION_TRANSPORT) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT) && HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_ENCRYPTION_TRANSPORT) == (20), "SO_SECURITY_ENCRYPTION_TRANSPORT != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_ENCRYPTION_TRANSPORT 20
+#endif
+#elif defined __hppa__
+#if defined(SO_SECURITY_ENCRYPTION_TRANSPORT) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT) && HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_ENCRYPTION_TRANSPORT) == (16407), "SO_SECURITY_ENCRYPTION_TRANSPORT != 16407");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_ENCRYPTION_TRANSPORT 16407
+#endif
+#elif defined __sparc__
+#if defined(SO_SECURITY_ENCRYPTION_TRANSPORT) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT) && HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_ENCRYPTION_TRANSPORT) == (20482), "SO_SECURITY_ENCRYPTION_TRANSPORT != 20482");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_ENCRYPTION_TRANSPORT 20482
+#endif
+#else
+#if defined(SO_SECURITY_ENCRYPTION_TRANSPORT) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT) && HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_ENCRYPTION_TRANSPORT) == (23), "SO_SECURITY_ENCRYPTION_TRANSPORT != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_ENCRYPTION_TRANSPORT 23
+#endif
+#endif
+#if defined __alpha__
+#if defined(SO_SECURITY_ENCRYPTION_NETWORK) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK) && HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_ENCRYPTION_NETWORK) == (21), "SO_SECURITY_ENCRYPTION_NETWORK != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_ENCRYPTION_NETWORK 21
+#endif
+#elif defined __hppa__
+#if defined(SO_SECURITY_ENCRYPTION_NETWORK) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK) && HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_ENCRYPTION_NETWORK) == (16408), "SO_SECURITY_ENCRYPTION_NETWORK != 16408");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_ENCRYPTION_NETWORK 16408
+#endif
+#elif defined __sparc__
+#if defined(SO_SECURITY_ENCRYPTION_NETWORK) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK) && HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_ENCRYPTION_NETWORK) == (20484), "SO_SECURITY_ENCRYPTION_NETWORK != 20484");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_ENCRYPTION_NETWORK 20484
+#endif
+#else
+#if defined(SO_SECURITY_ENCRYPTION_NETWORK) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK) && HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SECURITY_ENCRYPTION_NETWORK) == (24), "SO_SECURITY_ENCRYPTION_NETWORK != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SECURITY_ENCRYPTION_NETWORK 24
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_BINDTODEVICE) || (defined(HAVE_DECL_SO_BINDTODEVICE) && HAVE_DECL_SO_BINDTODEVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BINDTODEVICE) == (13), "SO_BINDTODEVICE != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BINDTODEVICE 13
+#endif
+#elif defined __hppa__
+#if defined(SO_BINDTODEVICE) || (defined(HAVE_DECL_SO_BINDTODEVICE) && HAVE_DECL_SO_BINDTODEVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BINDTODEVICE) == (16409), "SO_BINDTODEVICE != 16409");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BINDTODEVICE 16409
+#endif
+#else
+#if defined(SO_BINDTODEVICE) || (defined(HAVE_DECL_SO_BINDTODEVICE) && HAVE_DECL_SO_BINDTODEVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BINDTODEVICE) == (25), "SO_BINDTODEVICE != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BINDTODEVICE 25
+#endif
+#endif
+#if defined __hppa__
+#if defined(SO_DETACH_FILTER) || (defined(HAVE_DECL_SO_DETACH_FILTER) && HAVE_DECL_SO_DETACH_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_DETACH_FILTER) == (16411), "SO_DETACH_FILTER != 16411");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_DETACH_FILTER 16411
+#endif
+#else
+#if defined(SO_DETACH_FILTER) || (defined(HAVE_DECL_SO_DETACH_FILTER) && HAVE_DECL_SO_DETACH_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_DETACH_FILTER) == (27), "SO_DETACH_FILTER != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_DETACH_FILTER 27
+#endif
+#endif
+#if defined __hppa__
+#if defined(SO_PEERNAME) || (defined(HAVE_DECL_SO_PEERNAME) && HAVE_DECL_SO_PEERNAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERNAME) == (8192), "SO_PEERNAME != 8192");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERNAME 8192
+#endif
+#else
+#if defined(SO_PEERNAME) || (defined(HAVE_DECL_SO_PEERNAME) && HAVE_DECL_SO_PEERNAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERNAME) == (28), "SO_PEERNAME != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERNAME 28
+#endif
+#endif
+#if defined __hppa__
+#if defined(SO_TIMESTAMP) || (defined(HAVE_DECL_SO_TIMESTAMP) && HAVE_DECL_SO_TIMESTAMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMP) == (16402), "SO_TIMESTAMP != 16402");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMP 16402
+#endif
+#else
+#if defined(SO_TIMESTAMP) || (defined(HAVE_DECL_SO_TIMESTAMP) && HAVE_DECL_SO_TIMESTAMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMP) == (29), "SO_TIMESTAMP != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMP 29
+#endif
+#endif
+#if defined __mips__
+#if defined(SO_ACCEPTCONN) || (defined(HAVE_DECL_SO_ACCEPTCONN) && HAVE_DECL_SO_ACCEPTCONN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ACCEPTCONN) == (4105), "SO_ACCEPTCONN != 4105");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ACCEPTCONN 4105
+#endif
+#elif defined __alpha__
+#if defined(SO_ACCEPTCONN) || (defined(HAVE_DECL_SO_ACCEPTCONN) && HAVE_DECL_SO_ACCEPTCONN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ACCEPTCONN) == (4116), "SO_ACCEPTCONN != 4116");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ACCEPTCONN 4116
+#endif
+#elif defined __hppa__
+#if defined(SO_ACCEPTCONN) || (defined(HAVE_DECL_SO_ACCEPTCONN) && HAVE_DECL_SO_ACCEPTCONN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ACCEPTCONN) == (16412), "SO_ACCEPTCONN != 16412");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ACCEPTCONN 16412
+#endif
+#elif defined __sparc__
+#if defined(SO_ACCEPTCONN) || (defined(HAVE_DECL_SO_ACCEPTCONN) && HAVE_DECL_SO_ACCEPTCONN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ACCEPTCONN) == (32768), "SO_ACCEPTCONN != 32768");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ACCEPTCONN 32768
+#endif
+#else
+#if defined(SO_ACCEPTCONN) || (defined(HAVE_DECL_SO_ACCEPTCONN) && HAVE_DECL_SO_ACCEPTCONN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ACCEPTCONN) == (30), "SO_ACCEPTCONN != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ACCEPTCONN 30
+#endif
+#endif
+#if defined __alpha__ || defined __mips__ || defined __sparc__
+#if defined(SO_PEERSEC) || (defined(HAVE_DECL_SO_PEERSEC) && HAVE_DECL_SO_PEERSEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERSEC) == (30), "SO_PEERSEC != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERSEC 30
+#endif
+#elif defined __hppa__
+#if defined(SO_PEERSEC) || (defined(HAVE_DECL_SO_PEERSEC) && HAVE_DECL_SO_PEERSEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERSEC) == (16413), "SO_PEERSEC != 16413");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERSEC 16413
+#endif
+#else
+#if defined(SO_PEERSEC) || (defined(HAVE_DECL_SO_PEERSEC) && HAVE_DECL_SO_PEERSEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERSEC) == (31), "SO_PEERSEC != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERSEC 31
+#endif
+#endif
+#if defined __mips__
+#if defined(SO_SNDBUFFORCE) || (defined(HAVE_DECL_SO_SNDBUFFORCE) && HAVE_DECL_SO_SNDBUFFORCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDBUFFORCE) == (31), "SO_SNDBUFFORCE != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDBUFFORCE 31
+#endif
+#elif defined __alpha__ || defined __hppa__ || defined __sparc__
+#if defined(SO_SNDBUFFORCE) || (defined(HAVE_DECL_SO_SNDBUFFORCE) && HAVE_DECL_SO_SNDBUFFORCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDBUFFORCE) == (4106), "SO_SNDBUFFORCE != 4106");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDBUFFORCE 4106
+#endif
+#else
+#if defined(SO_SNDBUFFORCE) || (defined(HAVE_DECL_SO_SNDBUFFORCE) && HAVE_DECL_SO_SNDBUFFORCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SNDBUFFORCE) == (32), "SO_SNDBUFFORCE != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SNDBUFFORCE 32
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __sparc__
+#if defined(SO_RCVBUFFORCE) || (defined(HAVE_DECL_SO_RCVBUFFORCE) && HAVE_DECL_SO_RCVBUFFORCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVBUFFORCE) == (4107), "SO_RCVBUFFORCE != 4107");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVBUFFORCE 4107
+#endif
+#else
+#if defined(SO_RCVBUFFORCE) || (defined(HAVE_DECL_SO_RCVBUFFORCE) && HAVE_DECL_SO_RCVBUFFORCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RCVBUFFORCE) == (33), "SO_RCVBUFFORCE != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RCVBUFFORCE 33
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_PASSSEC) || (defined(HAVE_DECL_SO_PASSSEC) && HAVE_DECL_SO_PASSSEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PASSSEC) == (31), "SO_PASSSEC != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PASSSEC 31
+#endif
+#elif defined __hppa__
+#if defined(SO_PASSSEC) || (defined(HAVE_DECL_SO_PASSSEC) && HAVE_DECL_SO_PASSSEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PASSSEC) == (16414), "SO_PASSSEC != 16414");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PASSSEC 16414
+#endif
+#else
+#if defined(SO_PASSSEC) || (defined(HAVE_DECL_SO_PASSSEC) && HAVE_DECL_SO_PASSSEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PASSSEC) == (34), "SO_PASSSEC != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PASSSEC 34
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_TIMESTAMPNS) || (defined(HAVE_DECL_SO_TIMESTAMPNS) && HAVE_DECL_SO_TIMESTAMPNS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMPNS) == (33), "SO_TIMESTAMPNS != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMPNS 33
+#endif
+#elif defined __hppa__
+#if defined(SO_TIMESTAMPNS) || (defined(HAVE_DECL_SO_TIMESTAMPNS) && HAVE_DECL_SO_TIMESTAMPNS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMPNS) == (16403), "SO_TIMESTAMPNS != 16403");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMPNS 16403
+#endif
+#else
+#if defined(SO_TIMESTAMPNS) || (defined(HAVE_DECL_SO_TIMESTAMPNS) && HAVE_DECL_SO_TIMESTAMPNS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMPNS) == (35), "SO_TIMESTAMPNS != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMPNS 35
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_MARK) || (defined(HAVE_DECL_SO_MARK) && HAVE_DECL_SO_MARK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MARK) == (34), "SO_MARK != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MARK 34
+#endif
+#elif defined __hppa__
+#if defined(SO_MARK) || (defined(HAVE_DECL_SO_MARK) && HAVE_DECL_SO_MARK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MARK) == (16415), "SO_MARK != 16415");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MARK 16415
+#endif
+#else
+#if defined(SO_MARK) || (defined(HAVE_DECL_SO_MARK) && HAVE_DECL_SO_MARK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MARK) == (36), "SO_MARK != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MARK 36
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_TIMESTAMPING) || (defined(HAVE_DECL_SO_TIMESTAMPING) && HAVE_DECL_SO_TIMESTAMPING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMPING) == (35), "SO_TIMESTAMPING != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMPING 35
+#endif
+#elif defined __hppa__
+#if defined(SO_TIMESTAMPING) || (defined(HAVE_DECL_SO_TIMESTAMPING) && HAVE_DECL_SO_TIMESTAMPING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMPING) == (16416), "SO_TIMESTAMPING != 16416");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMPING 16416
+#endif
+#else
+#if defined(SO_TIMESTAMPING) || (defined(HAVE_DECL_SO_TIMESTAMPING) && HAVE_DECL_SO_TIMESTAMPING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMPING) == (37), "SO_TIMESTAMPING != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMPING 37
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_PROTOCOL) || (defined(HAVE_DECL_SO_PROTOCOL) && HAVE_DECL_SO_PROTOCOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PROTOCOL) == (4136), "SO_PROTOCOL != 4136");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PROTOCOL 4136
+#endif
+#else
+#if defined(SO_PROTOCOL) || (defined(HAVE_DECL_SO_PROTOCOL) && HAVE_DECL_SO_PROTOCOL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PROTOCOL) == (38), "SO_PROTOCOL != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PROTOCOL 38
+#endif
+#endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SO_DOMAIN) || (defined(HAVE_DECL_SO_DOMAIN) && HAVE_DECL_SO_DOMAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_DOMAIN) == (4137), "SO_DOMAIN != 4137");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_DOMAIN 4137
+#endif
+#else
+#if defined(SO_DOMAIN) || (defined(HAVE_DECL_SO_DOMAIN) && HAVE_DECL_SO_DOMAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_DOMAIN) == (39), "SO_DOMAIN != 39");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_DOMAIN 39
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_RXQ_OVFL) || (defined(HAVE_DECL_SO_RXQ_OVFL) && HAVE_DECL_SO_RXQ_OVFL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RXQ_OVFL) == (36), "SO_RXQ_OVFL != 36");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RXQ_OVFL 36
+#endif
+#elif defined __hppa__
+#if defined(SO_RXQ_OVFL) || (defined(HAVE_DECL_SO_RXQ_OVFL) && HAVE_DECL_SO_RXQ_OVFL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RXQ_OVFL) == (16417), "SO_RXQ_OVFL != 16417");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RXQ_OVFL 16417
+#endif
+#else
+#if defined(SO_RXQ_OVFL) || (defined(HAVE_DECL_SO_RXQ_OVFL) && HAVE_DECL_SO_RXQ_OVFL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RXQ_OVFL) == (40), "SO_RXQ_OVFL != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RXQ_OVFL 40
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_WIFI_STATUS) || (defined(HAVE_DECL_SO_WIFI_STATUS) && HAVE_DECL_SO_WIFI_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_WIFI_STATUS) == (37), "SO_WIFI_STATUS != 37");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_WIFI_STATUS 37
+#endif
+#elif defined __hppa__
+#if defined(SO_WIFI_STATUS) || (defined(HAVE_DECL_SO_WIFI_STATUS) && HAVE_DECL_SO_WIFI_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_WIFI_STATUS) == (16418), "SO_WIFI_STATUS != 16418");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_WIFI_STATUS 16418
+#endif
+#else
+#if defined(SO_WIFI_STATUS) || (defined(HAVE_DECL_SO_WIFI_STATUS) && HAVE_DECL_SO_WIFI_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_WIFI_STATUS) == (41), "SO_WIFI_STATUS != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_WIFI_STATUS 41
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_PEEK_OFF) || (defined(HAVE_DECL_SO_PEEK_OFF) && HAVE_DECL_SO_PEEK_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEEK_OFF) == (38), "SO_PEEK_OFF != 38");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEEK_OFF 38
+#endif
+#elif defined __hppa__
+#if defined(SO_PEEK_OFF) || (defined(HAVE_DECL_SO_PEEK_OFF) && HAVE_DECL_SO_PEEK_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEEK_OFF) == (16419), "SO_PEEK_OFF != 16419");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEEK_OFF 16419
+#endif
+#else
+#if defined(SO_PEEK_OFF) || (defined(HAVE_DECL_SO_PEEK_OFF) && HAVE_DECL_SO_PEEK_OFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEEK_OFF) == (42), "SO_PEEK_OFF != 42");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEEK_OFF 42
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_NOFCS) || (defined(HAVE_DECL_SO_NOFCS) && HAVE_DECL_SO_NOFCS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_NOFCS) == (39), "SO_NOFCS != 39");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_NOFCS 39
+#endif
+#elif defined __hppa__
+#if defined(SO_NOFCS) || (defined(HAVE_DECL_SO_NOFCS) && HAVE_DECL_SO_NOFCS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_NOFCS) == (16420), "SO_NOFCS != 16420");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_NOFCS 16420
+#endif
+#else
+#if defined(SO_NOFCS) || (defined(HAVE_DECL_SO_NOFCS) && HAVE_DECL_SO_NOFCS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_NOFCS) == (43), "SO_NOFCS != 43");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_NOFCS 43
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_LOCK_FILTER) || (defined(HAVE_DECL_SO_LOCK_FILTER) && HAVE_DECL_SO_LOCK_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_LOCK_FILTER) == (40), "SO_LOCK_FILTER != 40");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_LOCK_FILTER 40
+#endif
+#elif defined __hppa__
+#if defined(SO_LOCK_FILTER) || (defined(HAVE_DECL_SO_LOCK_FILTER) && HAVE_DECL_SO_LOCK_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_LOCK_FILTER) == (16421), "SO_LOCK_FILTER != 16421");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_LOCK_FILTER 16421
+#endif
+#else
+#if defined(SO_LOCK_FILTER) || (defined(HAVE_DECL_SO_LOCK_FILTER) && HAVE_DECL_SO_LOCK_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_LOCK_FILTER) == (44), "SO_LOCK_FILTER != 44");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_LOCK_FILTER 44
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_SELECT_ERR_QUEUE) || (defined(HAVE_DECL_SO_SELECT_ERR_QUEUE) && HAVE_DECL_SO_SELECT_ERR_QUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SELECT_ERR_QUEUE) == (41), "SO_SELECT_ERR_QUEUE != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SELECT_ERR_QUEUE 41
+#endif
+#elif defined __hppa__
+#if defined(SO_SELECT_ERR_QUEUE) || (defined(HAVE_DECL_SO_SELECT_ERR_QUEUE) && HAVE_DECL_SO_SELECT_ERR_QUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SELECT_ERR_QUEUE) == (16422), "SO_SELECT_ERR_QUEUE != 16422");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SELECT_ERR_QUEUE 16422
+#endif
+#else
+#if defined(SO_SELECT_ERR_QUEUE) || (defined(HAVE_DECL_SO_SELECT_ERR_QUEUE) && HAVE_DECL_SO_SELECT_ERR_QUEUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_SELECT_ERR_QUEUE) == (45), "SO_SELECT_ERR_QUEUE != 45");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_SELECT_ERR_QUEUE 45
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_BUSY_POLL) || (defined(HAVE_DECL_SO_BUSY_POLL) && HAVE_DECL_SO_BUSY_POLL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BUSY_POLL) == (48), "SO_BUSY_POLL != 48");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BUSY_POLL 48
+#endif
+#elif defined __hppa__
+#if defined(SO_BUSY_POLL) || (defined(HAVE_DECL_SO_BUSY_POLL) && HAVE_DECL_SO_BUSY_POLL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BUSY_POLL) == (16423), "SO_BUSY_POLL != 16423");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BUSY_POLL 16423
+#endif
+#else
+#if defined(SO_BUSY_POLL) || (defined(HAVE_DECL_SO_BUSY_POLL) && HAVE_DECL_SO_BUSY_POLL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BUSY_POLL) == (46), "SO_BUSY_POLL != 46");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BUSY_POLL 46
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_MAX_PACING_RATE) || (defined(HAVE_DECL_SO_MAX_PACING_RATE) && HAVE_DECL_SO_MAX_PACING_RATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MAX_PACING_RATE) == (49), "SO_MAX_PACING_RATE != 49");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MAX_PACING_RATE 49
+#endif
+#elif defined __hppa__
+#if defined(SO_MAX_PACING_RATE) || (defined(HAVE_DECL_SO_MAX_PACING_RATE) && HAVE_DECL_SO_MAX_PACING_RATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MAX_PACING_RATE) == (16424), "SO_MAX_PACING_RATE != 16424");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MAX_PACING_RATE 16424
+#endif
+#else
+#if defined(SO_MAX_PACING_RATE) || (defined(HAVE_DECL_SO_MAX_PACING_RATE) && HAVE_DECL_SO_MAX_PACING_RATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MAX_PACING_RATE) == (47), "SO_MAX_PACING_RATE != 47");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MAX_PACING_RATE 47
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_BPF_EXTENSIONS) || (defined(HAVE_DECL_SO_BPF_EXTENSIONS) && HAVE_DECL_SO_BPF_EXTENSIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BPF_EXTENSIONS) == (50), "SO_BPF_EXTENSIONS != 50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BPF_EXTENSIONS 50
+#endif
+#elif defined __hppa__
+#if defined(SO_BPF_EXTENSIONS) || (defined(HAVE_DECL_SO_BPF_EXTENSIONS) && HAVE_DECL_SO_BPF_EXTENSIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BPF_EXTENSIONS) == (16425), "SO_BPF_EXTENSIONS != 16425");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BPF_EXTENSIONS 16425
+#endif
+#else
+#if defined(SO_BPF_EXTENSIONS) || (defined(HAVE_DECL_SO_BPF_EXTENSIONS) && HAVE_DECL_SO_BPF_EXTENSIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_BPF_EXTENSIONS) == (48), "SO_BPF_EXTENSIONS != 48");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_BPF_EXTENSIONS 48
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_INCOMING_CPU) || (defined(HAVE_DECL_SO_INCOMING_CPU) && HAVE_DECL_SO_INCOMING_CPU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_INCOMING_CPU) == (51), "SO_INCOMING_CPU != 51");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_INCOMING_CPU 51
+#endif
+#elif defined __hppa__
+#if defined(SO_INCOMING_CPU) || (defined(HAVE_DECL_SO_INCOMING_CPU) && HAVE_DECL_SO_INCOMING_CPU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_INCOMING_CPU) == (16426), "SO_INCOMING_CPU != 16426");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_INCOMING_CPU 16426
+#endif
+#else
+#if defined(SO_INCOMING_CPU) || (defined(HAVE_DECL_SO_INCOMING_CPU) && HAVE_DECL_SO_INCOMING_CPU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_INCOMING_CPU) == (49), "SO_INCOMING_CPU != 49");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_INCOMING_CPU 49
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_ATTACH_BPF) || (defined(HAVE_DECL_SO_ATTACH_BPF) && HAVE_DECL_SO_ATTACH_BPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_BPF) == (52), "SO_ATTACH_BPF != 52");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_BPF 52
+#endif
+#elif defined __hppa__
+#if defined(SO_ATTACH_BPF) || (defined(HAVE_DECL_SO_ATTACH_BPF) && HAVE_DECL_SO_ATTACH_BPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_BPF) == (16427), "SO_ATTACH_BPF != 16427");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_BPF 16427
+#endif
+#else
+#if defined(SO_ATTACH_BPF) || (defined(HAVE_DECL_SO_ATTACH_BPF) && HAVE_DECL_SO_ATTACH_BPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_BPF) == (50), "SO_ATTACH_BPF != 50");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_BPF 50
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_ATTACH_REUSEPORT_CBPF) || (defined(HAVE_DECL_SO_ATTACH_REUSEPORT_CBPF) && HAVE_DECL_SO_ATTACH_REUSEPORT_CBPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_REUSEPORT_CBPF) == (53), "SO_ATTACH_REUSEPORT_CBPF != 53");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_REUSEPORT_CBPF 53
+#endif
+#elif defined __hppa__
+#if defined(SO_ATTACH_REUSEPORT_CBPF) || (defined(HAVE_DECL_SO_ATTACH_REUSEPORT_CBPF) && HAVE_DECL_SO_ATTACH_REUSEPORT_CBPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_REUSEPORT_CBPF) == (16428), "SO_ATTACH_REUSEPORT_CBPF != 16428");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_REUSEPORT_CBPF 16428
+#endif
+#else
+#if defined(SO_ATTACH_REUSEPORT_CBPF) || (defined(HAVE_DECL_SO_ATTACH_REUSEPORT_CBPF) && HAVE_DECL_SO_ATTACH_REUSEPORT_CBPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_REUSEPORT_CBPF) == (51), "SO_ATTACH_REUSEPORT_CBPF != 51");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_REUSEPORT_CBPF 51
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_ATTACH_REUSEPORT_EBPF) || (defined(HAVE_DECL_SO_ATTACH_REUSEPORT_EBPF) && HAVE_DECL_SO_ATTACH_REUSEPORT_EBPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_REUSEPORT_EBPF) == (54), "SO_ATTACH_REUSEPORT_EBPF != 54");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_REUSEPORT_EBPF 54
+#endif
+#elif defined __hppa__
+#if defined(SO_ATTACH_REUSEPORT_EBPF) || (defined(HAVE_DECL_SO_ATTACH_REUSEPORT_EBPF) && HAVE_DECL_SO_ATTACH_REUSEPORT_EBPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_REUSEPORT_EBPF) == (16429), "SO_ATTACH_REUSEPORT_EBPF != 16429");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_REUSEPORT_EBPF 16429
+#endif
+#else
+#if defined(SO_ATTACH_REUSEPORT_EBPF) || (defined(HAVE_DECL_SO_ATTACH_REUSEPORT_EBPF) && HAVE_DECL_SO_ATTACH_REUSEPORT_EBPF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ATTACH_REUSEPORT_EBPF) == (52), "SO_ATTACH_REUSEPORT_EBPF != 52");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ATTACH_REUSEPORT_EBPF 52
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_CNX_ADVICE) || (defined(HAVE_DECL_SO_CNX_ADVICE) && HAVE_DECL_SO_CNX_ADVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_CNX_ADVICE) == (55), "SO_CNX_ADVICE != 55");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_CNX_ADVICE 55
+#endif
+#elif defined __hppa__
+#if defined(SO_CNX_ADVICE) || (defined(HAVE_DECL_SO_CNX_ADVICE) && HAVE_DECL_SO_CNX_ADVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_CNX_ADVICE) == (16430), "SO_CNX_ADVICE != 16430");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_CNX_ADVICE 16430
+#endif
+#else
+#if defined(SO_CNX_ADVICE) || (defined(HAVE_DECL_SO_CNX_ADVICE) && HAVE_DECL_SO_CNX_ADVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_CNX_ADVICE) == (53), "SO_CNX_ADVICE != 53");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_CNX_ADVICE 53
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_MEMINFO) || (defined(HAVE_DECL_SO_MEMINFO) && HAVE_DECL_SO_MEMINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MEMINFO) == (57), "SO_MEMINFO != 57");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MEMINFO 57
+#endif
+#elif defined __hppa__
+#if defined(SO_MEMINFO) || (defined(HAVE_DECL_SO_MEMINFO) && HAVE_DECL_SO_MEMINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MEMINFO) == (16432), "SO_MEMINFO != 16432");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MEMINFO 16432
+#endif
+#else
+#if defined(SO_MEMINFO) || (defined(HAVE_DECL_SO_MEMINFO) && HAVE_DECL_SO_MEMINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_MEMINFO) == (55), "SO_MEMINFO != 55");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_MEMINFO 55
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_INCOMING_NAPI_ID) || (defined(HAVE_DECL_SO_INCOMING_NAPI_ID) && HAVE_DECL_SO_INCOMING_NAPI_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_INCOMING_NAPI_ID) == (58), "SO_INCOMING_NAPI_ID != 58");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_INCOMING_NAPI_ID 58
+#endif
+#elif defined __hppa__
+#if defined(SO_INCOMING_NAPI_ID) || (defined(HAVE_DECL_SO_INCOMING_NAPI_ID) && HAVE_DECL_SO_INCOMING_NAPI_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_INCOMING_NAPI_ID) == (16433), "SO_INCOMING_NAPI_ID != 16433");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_INCOMING_NAPI_ID 16433
+#endif
+#else
+#if defined(SO_INCOMING_NAPI_ID) || (defined(HAVE_DECL_SO_INCOMING_NAPI_ID) && HAVE_DECL_SO_INCOMING_NAPI_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_INCOMING_NAPI_ID) == (56), "SO_INCOMING_NAPI_ID != 56");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_INCOMING_NAPI_ID 56
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_COOKIE) || (defined(HAVE_DECL_SO_COOKIE) && HAVE_DECL_SO_COOKIE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_COOKIE) == (59), "SO_COOKIE != 59");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_COOKIE 59
+#endif
+#elif defined __hppa__
+#if defined(SO_COOKIE) || (defined(HAVE_DECL_SO_COOKIE) && HAVE_DECL_SO_COOKIE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_COOKIE) == (16434), "SO_COOKIE != 16434");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_COOKIE 16434
+#endif
+#else
+#if defined(SO_COOKIE) || (defined(HAVE_DECL_SO_COOKIE) && HAVE_DECL_SO_COOKIE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_COOKIE) == (57), "SO_COOKIE != 57");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_COOKIE 57
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_PEERGROUPS) || (defined(HAVE_DECL_SO_PEERGROUPS) && HAVE_DECL_SO_PEERGROUPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERGROUPS) == (61), "SO_PEERGROUPS != 61");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERGROUPS 61
+#endif
+#elif defined __hppa__
+#if defined(SO_PEERGROUPS) || (defined(HAVE_DECL_SO_PEERGROUPS) && HAVE_DECL_SO_PEERGROUPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERGROUPS) == (16436), "SO_PEERGROUPS != 16436");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERGROUPS 16436
+#endif
+#else
+#if defined(SO_PEERGROUPS) || (defined(HAVE_DECL_SO_PEERGROUPS) && HAVE_DECL_SO_PEERGROUPS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_PEERGROUPS) == (59), "SO_PEERGROUPS != 59");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_PEERGROUPS 59
+#endif
+#endif
+#if defined __sparc__
+#if defined(SO_ZEROCOPY) || (defined(HAVE_DECL_SO_ZEROCOPY) && HAVE_DECL_SO_ZEROCOPY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ZEROCOPY) == (62), "SO_ZEROCOPY != 62");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ZEROCOPY 62
+#endif
+#elif defined __hppa__
+#if defined(SO_ZEROCOPY) || (defined(HAVE_DECL_SO_ZEROCOPY) && HAVE_DECL_SO_ZEROCOPY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ZEROCOPY) == (16437), "SO_ZEROCOPY != 16437");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ZEROCOPY 16437
+#endif
+#else
+#if defined(SO_ZEROCOPY) || (defined(HAVE_DECL_SO_ZEROCOPY) && HAVE_DECL_SO_ZEROCOPY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_ZEROCOPY) == (60), "SO_ZEROCOPY != 60");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_ZEROCOPY 60
+#endif
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_options[] = {
+ XLAT(SO_DEBUG),
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_REUSEADDR),
+#else
+ XLAT(SO_REUSEADDR),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_TYPE),
+#else
+ XLAT(SO_TYPE),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_ERROR),
+#else
+ XLAT(SO_ERROR),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_DONTROUTE),
+#else
+ XLAT(SO_DONTROUTE),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_BROADCAST),
+#else
+ XLAT(SO_BROADCAST),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_SNDBUF),
+#else
+ XLAT(SO_SNDBUF),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_RCVBUF),
+#else
+ XLAT(SO_RCVBUF),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_KEEPALIVE),
+#else
+ XLAT(SO_KEEPALIVE),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_OOBINLINE),
+#else
+ XLAT(SO_OOBINLINE),
+#endif
+
+#if defined __hppa__
+ XLAT(SO_NO_CHECK),
+#else
+ XLAT(SO_NO_CHECK),
+#endif
+
+#if defined __hppa__
+ XLAT(SO_PRIORITY),
+#else
+ XLAT(SO_PRIORITY),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_LINGER),
+#else
+ XLAT(SO_LINGER),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_BSDCOMPAT),
+#elif defined __hppa__
+ XLAT(SO_BSDCOMPAT),
+#else
+ XLAT(SO_BSDCOMPAT),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_REUSEPORT),
+#else
+ XLAT(SO_REUSEPORT),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_PASSCRED),
+#elif defined __alpha__ || defined __mips__
+ XLAT(SO_PASSCRED),
+#elif defined __powerpc__
+ XLAT(SO_PASSCRED),
+#elif defined __hppa__
+ XLAT(SO_PASSCRED),
+#else
+ XLAT(SO_PASSCRED),
+#endif
+
+#if defined __alpha__ || defined __mips__
+ XLAT(SO_PEERCRED),
+#elif defined __powerpc__
+ XLAT(SO_PEERCRED),
+#elif defined __sparc__
+ XLAT(SO_PEERCRED),
+#elif defined __hppa__
+ XLAT(SO_PEERCRED),
+#else
+ XLAT(SO_PEERCRED),
+#endif
+
+#if defined __powerpc__
+ XLAT(SO_RCVLOWAT),
+#elif defined __sparc__
+ XLAT(SO_RCVLOWAT),
+#elif defined __hppa__ || defined __mips__
+ XLAT(SO_RCVLOWAT),
+#elif defined __alpha__
+ XLAT(SO_RCVLOWAT),
+#else
+ XLAT(SO_RCVLOWAT),
+#endif
+
+#if defined __powerpc__
+ XLAT(SO_SNDLOWAT),
+#elif defined __sparc__
+ XLAT(SO_SNDLOWAT),
+#elif defined __hppa__ || defined __mips__
+ XLAT(SO_SNDLOWAT),
+#elif defined __alpha__
+ XLAT(SO_SNDLOWAT),
+#else
+ XLAT(SO_SNDLOWAT),
+#endif
+
+#if defined __powerpc__
+ XLAT(SO_RCVTIMEO),
+#elif defined __hppa__ || defined __mips__
+ XLAT(SO_RCVTIMEO),
+#elif defined __alpha__
+ XLAT(SO_RCVTIMEO),
+#elif defined __sparc__
+ XLAT(SO_RCVTIMEO),
+#else
+ XLAT(SO_RCVTIMEO),
+#endif
+
+#if defined __powerpc__
+ XLAT(SO_SNDTIMEO),
+#elif defined __hppa__ || defined __mips__
+ XLAT(SO_SNDTIMEO),
+#elif defined __alpha__
+ XLAT(SO_SNDTIMEO),
+#elif defined __sparc__
+ XLAT(SO_SNDTIMEO),
+#else
+ XLAT(SO_SNDTIMEO),
+#endif
+
+#if defined __alpha__
+ XLAT(SO_SECURITY_AUTHENTICATION),
+#elif defined __hppa__
+ XLAT(SO_SECURITY_AUTHENTICATION),
+#elif defined __sparc__
+ XLAT(SO_SECURITY_AUTHENTICATION),
+#else
+ XLAT(SO_SECURITY_AUTHENTICATION),
+#endif
+
+#if defined __alpha__
+ XLAT(SO_SECURITY_ENCRYPTION_TRANSPORT),
+#elif defined __hppa__
+ XLAT(SO_SECURITY_ENCRYPTION_TRANSPORT),
+#elif defined __sparc__
+ XLAT(SO_SECURITY_ENCRYPTION_TRANSPORT),
+#else
+ XLAT(SO_SECURITY_ENCRYPTION_TRANSPORT),
+#endif
+
+#if defined __alpha__
+ XLAT(SO_SECURITY_ENCRYPTION_NETWORK),
+#elif defined __hppa__
+ XLAT(SO_SECURITY_ENCRYPTION_NETWORK),
+#elif defined __sparc__
+ XLAT(SO_SECURITY_ENCRYPTION_NETWORK),
+#else
+ XLAT(SO_SECURITY_ENCRYPTION_NETWORK),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_BINDTODEVICE),
+#elif defined __hppa__
+ XLAT(SO_BINDTODEVICE),
+#else
+ XLAT(SO_BINDTODEVICE),
+#endif
+
+#if defined __hppa__
+ XLAT(SO_DETACH_FILTER),
+#else
+ XLAT(SO_DETACH_FILTER),
+#endif
+
+#if defined __hppa__
+ XLAT(SO_PEERNAME),
+#else
+ XLAT(SO_PEERNAME),
+#endif
+
+#if defined __hppa__
+ XLAT(SO_TIMESTAMP),
+#else
+ XLAT(SO_TIMESTAMP),
+#endif
+
+#if defined __mips__
+ XLAT(SO_ACCEPTCONN),
+#elif defined __alpha__
+ XLAT(SO_ACCEPTCONN),
+#elif defined __hppa__
+ XLAT(SO_ACCEPTCONN),
+#elif defined __sparc__
+ XLAT(SO_ACCEPTCONN),
+#else
+ XLAT(SO_ACCEPTCONN),
+#endif
+
+#if defined __alpha__ || defined __mips__ || defined __sparc__
+ XLAT(SO_PEERSEC),
+#elif defined __hppa__
+ XLAT(SO_PEERSEC),
+#else
+ XLAT(SO_PEERSEC),
+#endif
+
+#if defined __mips__
+ XLAT(SO_SNDBUFFORCE),
+#elif defined __alpha__ || defined __hppa__ || defined __sparc__
+ XLAT(SO_SNDBUFFORCE),
+#else
+ XLAT(SO_SNDBUFFORCE),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __sparc__
+ XLAT(SO_RCVBUFFORCE),
+#else
+ XLAT(SO_RCVBUFFORCE),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_PASSSEC),
+#elif defined __hppa__
+ XLAT(SO_PASSSEC),
+#else
+ XLAT(SO_PASSSEC),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_TIMESTAMPNS),
+#elif defined __hppa__
+ XLAT(SO_TIMESTAMPNS),
+#else
+ XLAT(SO_TIMESTAMPNS),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_MARK),
+#elif defined __hppa__
+ XLAT(SO_MARK),
+#else
+ XLAT(SO_MARK),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_TIMESTAMPING),
+#elif defined __hppa__
+ XLAT(SO_TIMESTAMPING),
+#else
+ XLAT(SO_TIMESTAMPING),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_PROTOCOL),
+#else
+ XLAT(SO_PROTOCOL),
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SO_DOMAIN),
+#else
+ XLAT(SO_DOMAIN),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_RXQ_OVFL),
+#elif defined __hppa__
+ XLAT(SO_RXQ_OVFL),
+#else
+ XLAT(SO_RXQ_OVFL),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_WIFI_STATUS),
+#elif defined __hppa__
+ XLAT(SO_WIFI_STATUS),
+#else
+ XLAT(SO_WIFI_STATUS),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_PEEK_OFF),
+#elif defined __hppa__
+ XLAT(SO_PEEK_OFF),
+#else
+ XLAT(SO_PEEK_OFF),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_NOFCS),
+#elif defined __hppa__
+ XLAT(SO_NOFCS),
+#else
+ XLAT(SO_NOFCS),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_LOCK_FILTER),
+#elif defined __hppa__
+ XLAT(SO_LOCK_FILTER),
+#else
+ XLAT(SO_LOCK_FILTER),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_SELECT_ERR_QUEUE),
+#elif defined __hppa__
+ XLAT(SO_SELECT_ERR_QUEUE),
+#else
+ XLAT(SO_SELECT_ERR_QUEUE),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_BUSY_POLL),
+#elif defined __hppa__
+ XLAT(SO_BUSY_POLL),
+#else
+ XLAT(SO_BUSY_POLL),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_MAX_PACING_RATE),
+#elif defined __hppa__
+ XLAT(SO_MAX_PACING_RATE),
+#else
+ XLAT(SO_MAX_PACING_RATE),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_BPF_EXTENSIONS),
+#elif defined __hppa__
+ XLAT(SO_BPF_EXTENSIONS),
+#else
+ XLAT(SO_BPF_EXTENSIONS),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_INCOMING_CPU),
+#elif defined __hppa__
+ XLAT(SO_INCOMING_CPU),
+#else
+ XLAT(SO_INCOMING_CPU),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_ATTACH_BPF),
+#elif defined __hppa__
+ XLAT(SO_ATTACH_BPF),
+#else
+ XLAT(SO_ATTACH_BPF),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_ATTACH_REUSEPORT_CBPF),
+#elif defined __hppa__
+ XLAT(SO_ATTACH_REUSEPORT_CBPF),
+#else
+ XLAT(SO_ATTACH_REUSEPORT_CBPF),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_ATTACH_REUSEPORT_EBPF),
+#elif defined __hppa__
+ XLAT(SO_ATTACH_REUSEPORT_EBPF),
+#else
+ XLAT(SO_ATTACH_REUSEPORT_EBPF),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_CNX_ADVICE),
+#elif defined __hppa__
+ XLAT(SO_CNX_ADVICE),
+#else
+ XLAT(SO_CNX_ADVICE),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_MEMINFO),
+#elif defined __hppa__
+ XLAT(SO_MEMINFO),
+#else
+ XLAT(SO_MEMINFO),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_INCOMING_NAPI_ID),
+#elif defined __hppa__
+ XLAT(SO_INCOMING_NAPI_ID),
+#else
+ XLAT(SO_INCOMING_NAPI_ID),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_COOKIE),
+#elif defined __hppa__
+ XLAT(SO_COOKIE),
+#else
+ XLAT(SO_COOKIE),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_PEERGROUPS),
+#elif defined __hppa__
+ XLAT(SO_PEERGROUPS),
+#else
+ XLAT(SO_PEERGROUPS),
+#endif
+
+#if defined __sparc__
+ XLAT(SO_ZEROCOPY),
+#elif defined __hppa__
+ XLAT(SO_ZEROCOPY),
+#else
+ XLAT(SO_ZEROCOPY),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_options.in b/xlat/sock_options.in
new file mode 100644
index 0000000..6104f4a
--- /dev/null
+++ b/xlat/sock_options.in
@@ -0,0 +1,445 @@
+SO_DEBUG 1
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_REUSEADDR 4
+#else
+SO_REUSEADDR 2
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_TYPE 4104
+#else
+SO_TYPE 3
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_ERROR 4103
+#else
+SO_ERROR 4
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_DONTROUTE 16
+#else
+SO_DONTROUTE 5
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_BROADCAST 32
+#else
+SO_BROADCAST 6
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_SNDBUF 4097
+#else
+SO_SNDBUF 7
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_RCVBUF 4098
+#else
+SO_RCVBUF 8
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_KEEPALIVE 8
+#else
+SO_KEEPALIVE 9
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_OOBINLINE 256
+#else
+SO_OOBINLINE 10
+#endif
+
+#if defined __hppa__
+SO_NO_CHECK 16395
+#else
+SO_NO_CHECK 11
+#endif
+
+#if defined __hppa__
+SO_PRIORITY 16396
+#else
+SO_PRIORITY 12
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_LINGER 128
+#else
+SO_LINGER 13
+#endif
+
+#if defined __sparc__
+SO_BSDCOMPAT 1024
+#elif defined __hppa__
+SO_BSDCOMPAT 16398
+#else
+SO_BSDCOMPAT 14
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_REUSEPORT 512
+#else
+SO_REUSEPORT 15
+#endif
+
+#if defined __sparc__
+SO_PASSCRED 2
+#elif defined __alpha__ || defined __mips__
+SO_PASSCRED 17
+#elif defined __powerpc__
+SO_PASSCRED 20
+#elif defined __hppa__
+SO_PASSCRED 16400
+#else
+SO_PASSCRED 16
+#endif
+
+#if defined __alpha__ || defined __mips__
+SO_PEERCRED 18
+#elif defined __powerpc__
+SO_PEERCRED 21
+#elif defined __sparc__
+SO_PEERCRED 64
+#elif defined __hppa__
+SO_PEERCRED 16401
+#else
+SO_PEERCRED 17
+#endif
+
+#if defined __powerpc__
+SO_RCVLOWAT 16
+#elif defined __sparc__
+SO_RCVLOWAT 2048
+#elif defined __hppa__ || defined __mips__
+SO_RCVLOWAT 4100
+#elif defined __alpha__
+SO_RCVLOWAT 4112
+#else
+SO_RCVLOWAT 18
+#endif
+
+#if defined __powerpc__
+SO_SNDLOWAT 17
+#elif defined __sparc__
+SO_SNDLOWAT 4096
+#elif defined __hppa__ || defined __mips__
+SO_SNDLOWAT 4099
+#elif defined __alpha__
+SO_SNDLOWAT 4113
+#else
+SO_SNDLOWAT 19
+#endif
+
+#if defined __powerpc__
+SO_RCVTIMEO 18
+#elif defined __hppa__ || defined __mips__
+SO_RCVTIMEO 4102
+#elif defined __alpha__
+SO_RCVTIMEO 4114
+#elif defined __sparc__
+SO_RCVTIMEO 8192
+#else
+SO_RCVTIMEO 20
+#endif
+
+#if defined __powerpc__
+SO_SNDTIMEO 19
+#elif defined __hppa__ || defined __mips__
+SO_SNDTIMEO 4101
+#elif defined __alpha__
+SO_SNDTIMEO 4115
+#elif defined __sparc__
+SO_SNDTIMEO 16384
+#else
+SO_SNDTIMEO 21
+#endif
+
+#if defined __alpha__
+SO_SECURITY_AUTHENTICATION 19
+#elif defined __hppa__
+SO_SECURITY_AUTHENTICATION 16406
+#elif defined __sparc__
+SO_SECURITY_AUTHENTICATION 20481
+#else
+SO_SECURITY_AUTHENTICATION 22
+#endif
+
+#if defined __alpha__
+SO_SECURITY_ENCRYPTION_TRANSPORT 20
+#elif defined __hppa__
+SO_SECURITY_ENCRYPTION_TRANSPORT 16407
+#elif defined __sparc__
+SO_SECURITY_ENCRYPTION_TRANSPORT 20482
+#else
+SO_SECURITY_ENCRYPTION_TRANSPORT 23
+#endif
+
+#if defined __alpha__
+SO_SECURITY_ENCRYPTION_NETWORK 21
+#elif defined __hppa__
+SO_SECURITY_ENCRYPTION_NETWORK 16408
+#elif defined __sparc__
+SO_SECURITY_ENCRYPTION_NETWORK 20484
+#else
+SO_SECURITY_ENCRYPTION_NETWORK 24
+#endif
+
+#if defined __sparc__
+SO_BINDTODEVICE 13
+#elif defined __hppa__
+SO_BINDTODEVICE 16409
+#else
+SO_BINDTODEVICE 25
+#endif
+
+#if defined __hppa__
+SO_DETACH_FILTER 16411
+#else
+SO_DETACH_FILTER 27
+#endif
+
+#if defined __hppa__
+SO_PEERNAME 8192
+#else
+SO_PEERNAME 28
+#endif
+
+#if defined __hppa__
+SO_TIMESTAMP 16402
+#else
+SO_TIMESTAMP 29
+#endif
+
+#if defined __mips__
+SO_ACCEPTCONN 4105
+#elif defined __alpha__
+SO_ACCEPTCONN 4116
+#elif defined __hppa__
+SO_ACCEPTCONN 16412
+#elif defined __sparc__
+SO_ACCEPTCONN 32768
+#else
+SO_ACCEPTCONN 30
+#endif
+
+#if defined __alpha__ || defined __mips__ || defined __sparc__
+SO_PEERSEC 30
+#elif defined __hppa__
+SO_PEERSEC 16413
+#else
+SO_PEERSEC 31
+#endif
+
+#if defined __mips__
+SO_SNDBUFFORCE 31
+#elif defined __alpha__ || defined __hppa__ || defined __sparc__
+SO_SNDBUFFORCE 4106
+#else
+SO_SNDBUFFORCE 32
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __sparc__
+SO_RCVBUFFORCE 4107
+#else
+SO_RCVBUFFORCE 33
+#endif
+
+#if defined __sparc__
+SO_PASSSEC 31
+#elif defined __hppa__
+SO_PASSSEC 16414
+#else
+SO_PASSSEC 34
+#endif
+
+#if defined __sparc__
+SO_TIMESTAMPNS 33
+#elif defined __hppa__
+SO_TIMESTAMPNS 16403
+#else
+SO_TIMESTAMPNS 35
+#endif
+
+#if defined __sparc__
+SO_MARK 34
+#elif defined __hppa__
+SO_MARK 16415
+#else
+SO_MARK 36
+#endif
+
+#if defined __sparc__
+SO_TIMESTAMPING 35
+#elif defined __hppa__
+SO_TIMESTAMPING 16416
+#else
+SO_TIMESTAMPING 37
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_PROTOCOL 4136
+#else
+SO_PROTOCOL 38
+#endif
+
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SO_DOMAIN 4137
+#else
+SO_DOMAIN 39
+#endif
+
+#if defined __sparc__
+SO_RXQ_OVFL 36
+#elif defined __hppa__
+SO_RXQ_OVFL 16417
+#else
+SO_RXQ_OVFL 40
+#endif
+
+#if defined __sparc__
+SO_WIFI_STATUS 37
+#elif defined __hppa__
+SO_WIFI_STATUS 16418
+#else
+SO_WIFI_STATUS 41
+#endif
+
+#if defined __sparc__
+SO_PEEK_OFF 38
+#elif defined __hppa__
+SO_PEEK_OFF 16419
+#else
+SO_PEEK_OFF 42
+#endif
+
+#if defined __sparc__
+SO_NOFCS 39
+#elif defined __hppa__
+SO_NOFCS 16420
+#else
+SO_NOFCS 43
+#endif
+
+#if defined __sparc__
+SO_LOCK_FILTER 40
+#elif defined __hppa__
+SO_LOCK_FILTER 16421
+#else
+SO_LOCK_FILTER 44
+#endif
+
+#if defined __sparc__
+SO_SELECT_ERR_QUEUE 41
+#elif defined __hppa__
+SO_SELECT_ERR_QUEUE 16422
+#else
+SO_SELECT_ERR_QUEUE 45
+#endif
+
+#if defined __sparc__
+SO_BUSY_POLL 48
+#elif defined __hppa__
+SO_BUSY_POLL 16423
+#else
+SO_BUSY_POLL 46
+#endif
+
+#if defined __sparc__
+SO_MAX_PACING_RATE 49
+#elif defined __hppa__
+SO_MAX_PACING_RATE 16424
+#else
+SO_MAX_PACING_RATE 47
+#endif
+
+#if defined __sparc__
+SO_BPF_EXTENSIONS 50
+#elif defined __hppa__
+SO_BPF_EXTENSIONS 16425
+#else
+SO_BPF_EXTENSIONS 48
+#endif
+
+#if defined __sparc__
+SO_INCOMING_CPU 51
+#elif defined __hppa__
+SO_INCOMING_CPU 16426
+#else
+SO_INCOMING_CPU 49
+#endif
+
+#if defined __sparc__
+SO_ATTACH_BPF 52
+#elif defined __hppa__
+SO_ATTACH_BPF 16427
+#else
+SO_ATTACH_BPF 50
+#endif
+
+#if defined __sparc__
+SO_ATTACH_REUSEPORT_CBPF 53
+#elif defined __hppa__
+SO_ATTACH_REUSEPORT_CBPF 16428
+#else
+SO_ATTACH_REUSEPORT_CBPF 51
+#endif
+
+#if defined __sparc__
+SO_ATTACH_REUSEPORT_EBPF 54
+#elif defined __hppa__
+SO_ATTACH_REUSEPORT_EBPF 16429
+#else
+SO_ATTACH_REUSEPORT_EBPF 52
+#endif
+
+#if defined __sparc__
+SO_CNX_ADVICE 55
+#elif defined __hppa__
+SO_CNX_ADVICE 16430
+#else
+SO_CNX_ADVICE 53
+#endif
+
+#if defined __sparc__
+SO_MEMINFO 57
+#elif defined __hppa__
+SO_MEMINFO 16432
+#else
+SO_MEMINFO 55
+#endif
+
+#if defined __sparc__
+SO_INCOMING_NAPI_ID 58
+#elif defined __hppa__
+SO_INCOMING_NAPI_ID 16433
+#else
+SO_INCOMING_NAPI_ID 56
+#endif
+
+#if defined __sparc__
+SO_COOKIE 59
+#elif defined __hppa__
+SO_COOKIE 16434
+#else
+SO_COOKIE 57
+#endif
+
+#if defined __sparc__
+SO_PEERGROUPS 61
+#elif defined __hppa__
+SO_PEERGROUPS 16436
+#else
+SO_PEERGROUPS 59
+#endif
+
+#if defined __sparc__
+SO_ZEROCOPY 62
+#elif defined __hppa__
+SO_ZEROCOPY 16437
+#else
+SO_ZEROCOPY 60
+#endif
diff --git a/xlat/sock_packet_options.h b/xlat/sock_packet_options.h
new file mode 100644
index 0000000..045fc59
--- /dev/null
+++ b/xlat/sock_packet_options.h
@@ -0,0 +1,85 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_packet_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_packet_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_packet_options[] = {
+#if defined(PACKET_ADD_MEMBERSHIP) || (defined(HAVE_DECL_PACKET_ADD_MEMBERSHIP) && HAVE_DECL_PACKET_ADD_MEMBERSHIP)
+  XLAT(PACKET_ADD_MEMBERSHIP),
+#endif
+#if defined(PACKET_DROP_MEMBERSHIP) || (defined(HAVE_DECL_PACKET_DROP_MEMBERSHIP) && HAVE_DECL_PACKET_DROP_MEMBERSHIP)
+  XLAT(PACKET_DROP_MEMBERSHIP),
+#endif
+#if defined(PACKET_RECV_OUTPUT) || (defined(HAVE_DECL_PACKET_RECV_OUTPUT) && HAVE_DECL_PACKET_RECV_OUTPUT)
+  XLAT(PACKET_RECV_OUTPUT),
+#endif
+#if defined(PACKET_RX_RING) || (defined(HAVE_DECL_PACKET_RX_RING) && HAVE_DECL_PACKET_RX_RING)
+  XLAT(PACKET_RX_RING),
+#endif
+#if defined(PACKET_STATISTICS) || (defined(HAVE_DECL_PACKET_STATISTICS) && HAVE_DECL_PACKET_STATISTICS)
+  XLAT(PACKET_STATISTICS),
+#endif
+#if defined(PACKET_COPY_THRESH) || (defined(HAVE_DECL_PACKET_COPY_THRESH) && HAVE_DECL_PACKET_COPY_THRESH)
+  XLAT(PACKET_COPY_THRESH),
+#endif
+#if defined(PACKET_AUXDATA) || (defined(HAVE_DECL_PACKET_AUXDATA) && HAVE_DECL_PACKET_AUXDATA)
+  XLAT(PACKET_AUXDATA),
+#endif
+#if defined(PACKET_ORIGDEV) || (defined(HAVE_DECL_PACKET_ORIGDEV) && HAVE_DECL_PACKET_ORIGDEV)
+  XLAT(PACKET_ORIGDEV),
+#endif
+#if defined(PACKET_VERSION) || (defined(HAVE_DECL_PACKET_VERSION) && HAVE_DECL_PACKET_VERSION)
+  XLAT(PACKET_VERSION),
+#endif
+#if defined(PACKET_HDRLEN) || (defined(HAVE_DECL_PACKET_HDRLEN) && HAVE_DECL_PACKET_HDRLEN)
+  XLAT(PACKET_HDRLEN),
+#endif
+#if defined(PACKET_RESERVE) || (defined(HAVE_DECL_PACKET_RESERVE) && HAVE_DECL_PACKET_RESERVE)
+  XLAT(PACKET_RESERVE),
+#endif
+#if defined(PACKET_TX_RING) || (defined(HAVE_DECL_PACKET_TX_RING) && HAVE_DECL_PACKET_TX_RING)
+  XLAT(PACKET_TX_RING),
+#endif
+#if defined(PACKET_LOSS) || (defined(HAVE_DECL_PACKET_LOSS) && HAVE_DECL_PACKET_LOSS)
+  XLAT(PACKET_LOSS),
+#endif
+#if defined(PACKET_VNET_HDR) || (defined(HAVE_DECL_PACKET_VNET_HDR) && HAVE_DECL_PACKET_VNET_HDR)
+  XLAT(PACKET_VNET_HDR),
+#endif
+#if defined(PACKET_TX_TIMESTAMP) || (defined(HAVE_DECL_PACKET_TX_TIMESTAMP) && HAVE_DECL_PACKET_TX_TIMESTAMP)
+  XLAT(PACKET_TX_TIMESTAMP),
+#endif
+#if defined(PACKET_TIMESTAMP) || (defined(HAVE_DECL_PACKET_TIMESTAMP) && HAVE_DECL_PACKET_TIMESTAMP)
+  XLAT(PACKET_TIMESTAMP),
+#endif
+#if defined(PACKET_FANOUT) || (defined(HAVE_DECL_PACKET_FANOUT) && HAVE_DECL_PACKET_FANOUT)
+  XLAT(PACKET_FANOUT),
+#endif
+#if defined(PACKET_TX_HAS_OFF) || (defined(HAVE_DECL_PACKET_TX_HAS_OFF) && HAVE_DECL_PACKET_TX_HAS_OFF)
+  XLAT(PACKET_TX_HAS_OFF),
+#endif
+#if defined(PACKET_QDISC_BYPASS) || (defined(HAVE_DECL_PACKET_QDISC_BYPASS) && HAVE_DECL_PACKET_QDISC_BYPASS)
+  XLAT(PACKET_QDISC_BYPASS),
+#endif
+#if defined(PACKET_ROLLOVER_STATS) || (defined(HAVE_DECL_PACKET_ROLLOVER_STATS) && HAVE_DECL_PACKET_ROLLOVER_STATS)
+  XLAT(PACKET_ROLLOVER_STATS),
+#endif
+#if defined(PACKET_FANOUT_DATA) || (defined(HAVE_DECL_PACKET_FANOUT_DATA) && HAVE_DECL_PACKET_FANOUT_DATA)
+  XLAT(PACKET_FANOUT_DATA),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_packet_options.in b/xlat/sock_packet_options.in
new file mode 100644
index 0000000..d11ad0b
--- /dev/null
+++ b/xlat/sock_packet_options.in
@@ -0,0 +1,21 @@
+PACKET_ADD_MEMBERSHIP
+PACKET_DROP_MEMBERSHIP
+PACKET_RECV_OUTPUT
+PACKET_RX_RING
+PACKET_STATISTICS
+PACKET_COPY_THRESH
+PACKET_AUXDATA
+PACKET_ORIGDEV
+PACKET_VERSION
+PACKET_HDRLEN
+PACKET_RESERVE
+PACKET_TX_RING
+PACKET_LOSS
+PACKET_VNET_HDR
+PACKET_TX_TIMESTAMP
+PACKET_TIMESTAMP
+PACKET_FANOUT
+PACKET_TX_HAS_OFF
+PACKET_QDISC_BYPASS
+PACKET_ROLLOVER_STATS
+PACKET_FANOUT_DATA
diff --git a/xlat/sock_pnp_options.h b/xlat/sock_pnp_options.h
new file mode 100644
index 0000000..d9083b3
--- /dev/null
+++ b/xlat/sock_pnp_options.h
@@ -0,0 +1,54 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_pnp_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PNPIPE_ENCAP) || (defined(HAVE_DECL_PNPIPE_ENCAP) && HAVE_DECL_PNPIPE_ENCAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PNPIPE_ENCAP) == (1), "PNPIPE_ENCAP != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PNPIPE_ENCAP 1
+#endif
+#if defined(PNPIPE_IFINDEX) || (defined(HAVE_DECL_PNPIPE_IFINDEX) && HAVE_DECL_PNPIPE_IFINDEX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PNPIPE_IFINDEX) == (2), "PNPIPE_IFINDEX != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PNPIPE_IFINDEX 2
+#endif
+#if defined(PNPIPE_HANDLE) || (defined(HAVE_DECL_PNPIPE_HANDLE) && HAVE_DECL_PNPIPE_HANDLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PNPIPE_HANDLE) == (3), "PNPIPE_HANDLE != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PNPIPE_HANDLE 3
+#endif
+#if defined(PNPIPE_INITSTATE) || (defined(HAVE_DECL_PNPIPE_INITSTATE) && HAVE_DECL_PNPIPE_INITSTATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PNPIPE_INITSTATE) == (4), "PNPIPE_INITSTATE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PNPIPE_INITSTATE 4
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_pnp_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_pnp_options[] = {
+ XLAT(PNPIPE_ENCAP),
+ XLAT(PNPIPE_IFINDEX),
+ XLAT(PNPIPE_HANDLE),
+ XLAT(PNPIPE_INITSTATE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_pnp_options.in b/xlat/sock_pnp_options.in
new file mode 100644
index 0000000..a8d939c
--- /dev/null
+++ b/xlat/sock_pnp_options.in
@@ -0,0 +1,4 @@
+PNPIPE_ENCAP		1
+PNPIPE_IFINDEX		2
+PNPIPE_HANDLE		3
+PNPIPE_INITSTATE	4
diff --git a/xlat/sock_pppol2tp_options.h b/xlat/sock_pppol2tp_options.h
new file mode 100644
index 0000000..4f4064f
--- /dev/null
+++ b/xlat/sock_pppol2tp_options.h
@@ -0,0 +1,62 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_pppol2tp_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(PPPOL2TP_SO_DEBUG) || (defined(HAVE_DECL_PPPOL2TP_SO_DEBUG) && HAVE_DECL_PPPOL2TP_SO_DEBUG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PPPOL2TP_SO_DEBUG) == (1), "PPPOL2TP_SO_DEBUG != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PPPOL2TP_SO_DEBUG 1
+#endif
+#if defined(PPPOL2TP_SO_RECVSEQ) || (defined(HAVE_DECL_PPPOL2TP_SO_RECVSEQ) && HAVE_DECL_PPPOL2TP_SO_RECVSEQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PPPOL2TP_SO_RECVSEQ) == (2), "PPPOL2TP_SO_RECVSEQ != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PPPOL2TP_SO_RECVSEQ 2
+#endif
+#if defined(PPPOL2TP_SO_SENDSEQ) || (defined(HAVE_DECL_PPPOL2TP_SO_SENDSEQ) && HAVE_DECL_PPPOL2TP_SO_SENDSEQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PPPOL2TP_SO_SENDSEQ) == (3), "PPPOL2TP_SO_SENDSEQ != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PPPOL2TP_SO_SENDSEQ 3
+#endif
+#if defined(PPPOL2TP_SO_LNSMODE) || (defined(HAVE_DECL_PPPOL2TP_SO_LNSMODE) && HAVE_DECL_PPPOL2TP_SO_LNSMODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PPPOL2TP_SO_LNSMODE) == (4), "PPPOL2TP_SO_LNSMODE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PPPOL2TP_SO_LNSMODE 4
+#endif
+#if defined(PPPOL2TP_SO_REORDERTO) || (defined(HAVE_DECL_PPPOL2TP_SO_REORDERTO) && HAVE_DECL_PPPOL2TP_SO_REORDERTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((PPPOL2TP_SO_REORDERTO) == (5), "PPPOL2TP_SO_REORDERTO != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define PPPOL2TP_SO_REORDERTO 5
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_pppol2tp_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_pppol2tp_options[] = {
+ [PPPOL2TP_SO_DEBUG] = XLAT(PPPOL2TP_SO_DEBUG),
+ [PPPOL2TP_SO_RECVSEQ] = XLAT(PPPOL2TP_SO_RECVSEQ),
+ [PPPOL2TP_SO_SENDSEQ] = XLAT(PPPOL2TP_SO_SENDSEQ),
+ [PPPOL2TP_SO_LNSMODE] = XLAT(PPPOL2TP_SO_LNSMODE),
+ [PPPOL2TP_SO_REORDERTO] = XLAT(PPPOL2TP_SO_REORDERTO),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_pppol2tp_options.in b/xlat/sock_pppol2tp_options.in
new file mode 100644
index 0000000..9c4177a
--- /dev/null
+++ b/xlat/sock_pppol2tp_options.in
@@ -0,0 +1,6 @@
+#value_indexed
+PPPOL2TP_SO_DEBUG	1
+PPPOL2TP_SO_RECVSEQ	2
+PPPOL2TP_SO_SENDSEQ	3
+PPPOL2TP_SO_LNSMODE	4
+PPPOL2TP_SO_REORDERTO	5
diff --git a/xlat/sock_raw_options.h b/xlat/sock_raw_options.h
new file mode 100644
index 0000000..e69998c
--- /dev/null
+++ b/xlat/sock_raw_options.h
@@ -0,0 +1,25 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_raw_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_raw_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_raw_options[] = {
+#if defined(ICMP_FILTER) || (defined(HAVE_DECL_ICMP_FILTER) && HAVE_DECL_ICMP_FILTER)
+  XLAT(ICMP_FILTER),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_raw_options.in b/xlat/sock_raw_options.in
new file mode 100644
index 0000000..b341134
--- /dev/null
+++ b/xlat/sock_raw_options.in
@@ -0,0 +1 @@
+ICMP_FILTER
diff --git a/xlat/sock_rds_options.h b/xlat/sock_rds_options.h
new file mode 100644
index 0000000..c135a5f
--- /dev/null
+++ b/xlat/sock_rds_options.h
@@ -0,0 +1,209 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_rds_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RDS_CANCEL_SENT_TO) || (defined(HAVE_DECL_RDS_CANCEL_SENT_TO) && HAVE_DECL_RDS_CANCEL_SENT_TO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_CANCEL_SENT_TO) == (1), "RDS_CANCEL_SENT_TO != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_CANCEL_SENT_TO 1
+#endif
+#if defined(RDS_GET_MR) || (defined(HAVE_DECL_RDS_GET_MR) && HAVE_DECL_RDS_GET_MR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_GET_MR) == (2), "RDS_GET_MR != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_GET_MR 2
+#endif
+#if defined(RDS_FREE_MR) || (defined(HAVE_DECL_RDS_FREE_MR) && HAVE_DECL_RDS_FREE_MR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_FREE_MR) == (3), "RDS_FREE_MR != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_FREE_MR 3
+#endif
+#if defined(RDS_BARRIER) || (defined(HAVE_DECL_RDS_BARRIER) && HAVE_DECL_RDS_BARRIER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_BARRIER) == (4), "RDS_BARRIER != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_BARRIER 4
+#endif
+#if defined(RDS_RECVERR) || (defined(HAVE_DECL_RDS_RECVERR) && HAVE_DECL_RDS_RECVERR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_RECVERR) == (5), "RDS_RECVERR != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_RECVERR 5
+#endif
+#if defined(RDS_CONG_MONITOR) || (defined(HAVE_DECL_RDS_CONG_MONITOR) && HAVE_DECL_RDS_CONG_MONITOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_CONG_MONITOR) == (6), "RDS_CONG_MONITOR != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_CONG_MONITOR 6
+#endif
+#if defined(RDS_GET_MR_FOR_DEST) || (defined(HAVE_DECL_RDS_GET_MR_FOR_DEST) && HAVE_DECL_RDS_GET_MR_FOR_DEST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_GET_MR_FOR_DEST) == (7), "RDS_GET_MR_FOR_DEST != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_GET_MR_FOR_DEST 7
+#endif
+#if defined(SO_RDS_TRANSPORT) || (defined(HAVE_DECL_SO_RDS_TRANSPORT) && HAVE_DECL_SO_RDS_TRANSPORT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RDS_TRANSPORT) == (8), "SO_RDS_TRANSPORT != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RDS_TRANSPORT 8
+#endif
+#if defined(SO_RDS_MSG_RXPATH_LATENCY) || (defined(HAVE_DECL_SO_RDS_MSG_RXPATH_LATENCY) && HAVE_DECL_SO_RDS_MSG_RXPATH_LATENCY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_RDS_MSG_RXPATH_LATENCY) == (10), "SO_RDS_MSG_RXPATH_LATENCY != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_RDS_MSG_RXPATH_LATENCY 10
+#endif
+#ifndef __hppa__
+#if defined(SO_TIMESTAMP) || (defined(HAVE_DECL_SO_TIMESTAMP) && HAVE_DECL_SO_TIMESTAMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMP) == (29), "SO_TIMESTAMP != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMP 29
+#endif
+#endif
+#if defined(RDS_INFO_COUNTERS) || (defined(HAVE_DECL_RDS_INFO_COUNTERS) && HAVE_DECL_RDS_INFO_COUNTERS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_COUNTERS) == (10000), "RDS_INFO_COUNTERS != 10000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_COUNTERS 10000
+#endif
+#if defined(RDS_INFO_CONNECTIONS) || (defined(HAVE_DECL_RDS_INFO_CONNECTIONS) && HAVE_DECL_RDS_INFO_CONNECTIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_CONNECTIONS) == (10001), "RDS_INFO_CONNECTIONS != 10001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_CONNECTIONS 10001
+#endif
+#if defined(RDS_INFO_FLOWS) || (defined(HAVE_DECL_RDS_INFO_FLOWS) && HAVE_DECL_RDS_INFO_FLOWS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_FLOWS) == (10002), "RDS_INFO_FLOWS != 10002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_FLOWS 10002
+#endif
+#if defined(RDS_INFO_SEND_MESSAGES) || (defined(HAVE_DECL_RDS_INFO_SEND_MESSAGES) && HAVE_DECL_RDS_INFO_SEND_MESSAGES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_SEND_MESSAGES) == (10003), "RDS_INFO_SEND_MESSAGES != 10003");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_SEND_MESSAGES 10003
+#endif
+#if defined(RDS_INFO_RETRANS_MESSAGES) || (defined(HAVE_DECL_RDS_INFO_RETRANS_MESSAGES) && HAVE_DECL_RDS_INFO_RETRANS_MESSAGES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_RETRANS_MESSAGES) == (10004), "RDS_INFO_RETRANS_MESSAGES != 10004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_RETRANS_MESSAGES 10004
+#endif
+#if defined(RDS_INFO_RECV_MESSAGES) || (defined(HAVE_DECL_RDS_INFO_RECV_MESSAGES) && HAVE_DECL_RDS_INFO_RECV_MESSAGES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_RECV_MESSAGES) == (10005), "RDS_INFO_RECV_MESSAGES != 10005");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_RECV_MESSAGES 10005
+#endif
+#if defined(RDS_INFO_SOCKETS) || (defined(HAVE_DECL_RDS_INFO_SOCKETS) && HAVE_DECL_RDS_INFO_SOCKETS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_SOCKETS) == (10006), "RDS_INFO_SOCKETS != 10006");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_SOCKETS 10006
+#endif
+#if defined(RDS_INFO_TCP_SOCKETS) || (defined(HAVE_DECL_RDS_INFO_TCP_SOCKETS) && HAVE_DECL_RDS_INFO_TCP_SOCKETS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_TCP_SOCKETS) == (10007), "RDS_INFO_TCP_SOCKETS != 10007");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_TCP_SOCKETS 10007
+#endif
+#if defined(RDS_INFO_IB_CONNECTIONS) || (defined(HAVE_DECL_RDS_INFO_IB_CONNECTIONS) && HAVE_DECL_RDS_INFO_IB_CONNECTIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_IB_CONNECTIONS) == (10008), "RDS_INFO_IB_CONNECTIONS != 10008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_IB_CONNECTIONS 10008
+#endif
+#if defined(RDS_INFO_CONNECTION_STATS) || (defined(HAVE_DECL_RDS_INFO_CONNECTION_STATS) && HAVE_DECL_RDS_INFO_CONNECTION_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_CONNECTION_STATS) == (10009), "RDS_INFO_CONNECTION_STATS != 10009");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_CONNECTION_STATS 10009
+#endif
+#if defined(RDS_INFO_IWARP_CONNECTIONS) || (defined(HAVE_DECL_RDS_INFO_IWARP_CONNECTIONS) && HAVE_DECL_RDS_INFO_IWARP_CONNECTIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RDS_INFO_IWARP_CONNECTIONS) == (10010), "RDS_INFO_IWARP_CONNECTIONS != 10010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RDS_INFO_IWARP_CONNECTIONS 10010
+#endif
+#ifdef __hppa__
+#if defined(SO_TIMESTAMP) || (defined(HAVE_DECL_SO_TIMESTAMP) && HAVE_DECL_SO_TIMESTAMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SO_TIMESTAMP) == (0x4012), "SO_TIMESTAMP != 0x4012");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SO_TIMESTAMP 0x4012
+#endif
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_rds_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_rds_options[] = {
+ XLAT(RDS_CANCEL_SENT_TO),
+ XLAT(RDS_GET_MR),
+ XLAT(RDS_FREE_MR),
+ XLAT(RDS_BARRIER),
+ XLAT(RDS_RECVERR),
+ XLAT(RDS_CONG_MONITOR),
+ XLAT(RDS_GET_MR_FOR_DEST),
+ XLAT(SO_RDS_TRANSPORT),
+ XLAT(SO_RDS_MSG_RXPATH_LATENCY),
+
+#ifndef __hppa__
+ XLAT(SO_TIMESTAMP),
+#endif
+
+ XLAT(RDS_INFO_COUNTERS),
+ XLAT(RDS_INFO_CONNECTIONS),
+ XLAT(RDS_INFO_FLOWS),
+ XLAT(RDS_INFO_SEND_MESSAGES),
+ XLAT(RDS_INFO_RETRANS_MESSAGES),
+ XLAT(RDS_INFO_RECV_MESSAGES),
+ XLAT(RDS_INFO_SOCKETS),
+ XLAT(RDS_INFO_TCP_SOCKETS),
+ XLAT(RDS_INFO_IB_CONNECTIONS),
+ XLAT(RDS_INFO_CONNECTION_STATS),
+ XLAT(RDS_INFO_IWARP_CONNECTIONS),
+
+#ifdef __hppa__
+ XLAT(SO_TIMESTAMP),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_rds_options.in b/xlat/sock_rds_options.in
new file mode 100644
index 0000000..776d64a
--- /dev/null
+++ b/xlat/sock_rds_options.in
@@ -0,0 +1,29 @@
+RDS_CANCEL_SENT_TO	1
+RDS_GET_MR		2
+RDS_FREE_MR		3
+RDS_BARRIER		4
+RDS_RECVERR		5
+RDS_CONG_MONITOR	6
+RDS_GET_MR_FOR_DEST	7
+SO_RDS_TRANSPORT	8
+SO_RDS_MSG_RXPATH_LATENCY	10
+
+#ifndef __hppa__
+SO_TIMESTAMP		29
+#endif
+
+RDS_INFO_COUNTERS		10000
+RDS_INFO_CONNECTIONS		10001
+RDS_INFO_FLOWS			10002
+RDS_INFO_SEND_MESSAGES		10003
+RDS_INFO_RETRANS_MESSAGES	10004
+RDS_INFO_RECV_MESSAGES		10005
+RDS_INFO_SOCKETS		10006
+RDS_INFO_TCP_SOCKETS		10007
+RDS_INFO_IB_CONNECTIONS		10008
+RDS_INFO_CONNECTION_STATS	10009
+RDS_INFO_IWARP_CONNECTIONS	10010
+
+#ifdef __hppa__
+SO_TIMESTAMP		0x4012
+#endif
diff --git a/xlat/sock_rxrpc_options.h b/xlat/sock_rxrpc_options.h
new file mode 100644
index 0000000..a7ab59a
--- /dev/null
+++ b/xlat/sock_rxrpc_options.h
@@ -0,0 +1,70 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_rxrpc_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RXRPC_SECURITY_KEY) || (defined(HAVE_DECL_RXRPC_SECURITY_KEY) && HAVE_DECL_RXRPC_SECURITY_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RXRPC_SECURITY_KEY) == (1), "RXRPC_SECURITY_KEY != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RXRPC_SECURITY_KEY 1
+#endif
+#if defined(RXRPC_SECURITY_KEYRING) || (defined(HAVE_DECL_RXRPC_SECURITY_KEYRING) && HAVE_DECL_RXRPC_SECURITY_KEYRING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RXRPC_SECURITY_KEYRING) == (2), "RXRPC_SECURITY_KEYRING != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RXRPC_SECURITY_KEYRING 2
+#endif
+#if defined(RXRPC_EXCLUSIVE_CONNECTION) || (defined(HAVE_DECL_RXRPC_EXCLUSIVE_CONNECTION) && HAVE_DECL_RXRPC_EXCLUSIVE_CONNECTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RXRPC_EXCLUSIVE_CONNECTION) == (3), "RXRPC_EXCLUSIVE_CONNECTION != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RXRPC_EXCLUSIVE_CONNECTION 3
+#endif
+#if defined(RXRPC_MIN_SECURITY_LEVEL) || (defined(HAVE_DECL_RXRPC_MIN_SECURITY_LEVEL) && HAVE_DECL_RXRPC_MIN_SECURITY_LEVEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RXRPC_MIN_SECURITY_LEVEL) == (4), "RXRPC_MIN_SECURITY_LEVEL != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RXRPC_MIN_SECURITY_LEVEL 4
+#endif
+#if defined(RXRPC_UPGRADEABLE_SERVICE) || (defined(HAVE_DECL_RXRPC_UPGRADEABLE_SERVICE) && HAVE_DECL_RXRPC_UPGRADEABLE_SERVICE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RXRPC_UPGRADEABLE_SERVICE) == (5), "RXRPC_UPGRADEABLE_SERVICE != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RXRPC_UPGRADEABLE_SERVICE 5
+#endif
+#if defined(RXRPC_SUPPORTED_CMSG) || (defined(HAVE_DECL_RXRPC_SUPPORTED_CMSG) && HAVE_DECL_RXRPC_SUPPORTED_CMSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RXRPC_SUPPORTED_CMSG) == (6), "RXRPC_SUPPORTED_CMSG != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define RXRPC_SUPPORTED_CMSG 6
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_rxrpc_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_rxrpc_options[] = {
+ [RXRPC_SECURITY_KEY] = XLAT(RXRPC_SECURITY_KEY),
+ [RXRPC_SECURITY_KEYRING] = XLAT(RXRPC_SECURITY_KEYRING),
+ [RXRPC_EXCLUSIVE_CONNECTION] = XLAT(RXRPC_EXCLUSIVE_CONNECTION),
+ [RXRPC_MIN_SECURITY_LEVEL] = XLAT(RXRPC_MIN_SECURITY_LEVEL),
+ [RXRPC_UPGRADEABLE_SERVICE] = XLAT(RXRPC_UPGRADEABLE_SERVICE),
+ [RXRPC_SUPPORTED_CMSG] = XLAT(RXRPC_SUPPORTED_CMSG),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_rxrpc_options.in b/xlat/sock_rxrpc_options.in
new file mode 100644
index 0000000..5540829
--- /dev/null
+++ b/xlat/sock_rxrpc_options.in
@@ -0,0 +1,7 @@
+#value_indexed
+RXRPC_SECURITY_KEY		1
+RXRPC_SECURITY_KEYRING		2
+RXRPC_EXCLUSIVE_CONNECTION	3
+RXRPC_MIN_SECURITY_LEVEL	4
+RXRPC_UPGRADEABLE_SERVICE	5
+RXRPC_SUPPORTED_CMSG		6
diff --git a/xlat/sock_sctp_options.h b/xlat/sock_sctp_options.h
new file mode 100644
index 0000000..13e08d4
--- /dev/null
+++ b/xlat/sock_sctp_options.h
@@ -0,0 +1,527 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_sctp_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SCTP_RTOINFO) || (defined(HAVE_DECL_SCTP_RTOINFO) && HAVE_DECL_SCTP_RTOINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_RTOINFO) == (0), "SCTP_RTOINFO != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_RTOINFO 0
+#endif
+#if defined(SCTP_ASSOCINFO) || (defined(HAVE_DECL_SCTP_ASSOCINFO) && HAVE_DECL_SCTP_ASSOCINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_ASSOCINFO) == (1), "SCTP_ASSOCINFO != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_ASSOCINFO 1
+#endif
+#if defined(SCTP_INITMSG) || (defined(HAVE_DECL_SCTP_INITMSG) && HAVE_DECL_SCTP_INITMSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_INITMSG) == (2), "SCTP_INITMSG != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_INITMSG 2
+#endif
+#if defined(SCTP_NODELAY) || (defined(HAVE_DECL_SCTP_NODELAY) && HAVE_DECL_SCTP_NODELAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_NODELAY) == (3), "SCTP_NODELAY != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_NODELAY 3
+#endif
+#if defined(SCTP_AUTOCLOSE) || (defined(HAVE_DECL_SCTP_AUTOCLOSE) && HAVE_DECL_SCTP_AUTOCLOSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_AUTOCLOSE) == (4), "SCTP_AUTOCLOSE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_AUTOCLOSE 4
+#endif
+#if defined(SCTP_SET_PEER_PRIMARY_ADDR) || (defined(HAVE_DECL_SCTP_SET_PEER_PRIMARY_ADDR) && HAVE_DECL_SCTP_SET_PEER_PRIMARY_ADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_SET_PEER_PRIMARY_ADDR) == (5), "SCTP_SET_PEER_PRIMARY_ADDR != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_SET_PEER_PRIMARY_ADDR 5
+#endif
+#if defined(SCTP_PRIMARY_ADDR) || (defined(HAVE_DECL_SCTP_PRIMARY_ADDR) && HAVE_DECL_SCTP_PRIMARY_ADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_PRIMARY_ADDR) == (6), "SCTP_PRIMARY_ADDR != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_PRIMARY_ADDR 6
+#endif
+#if defined(SCTP_ADAPTATION_LAYER) || (defined(HAVE_DECL_SCTP_ADAPTATION_LAYER) && HAVE_DECL_SCTP_ADAPTATION_LAYER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_ADAPTATION_LAYER) == (7), "SCTP_ADAPTATION_LAYER != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_ADAPTATION_LAYER 7
+#endif
+#if defined(SCTP_DISABLE_FRAGMENTS) || (defined(HAVE_DECL_SCTP_DISABLE_FRAGMENTS) && HAVE_DECL_SCTP_DISABLE_FRAGMENTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_DISABLE_FRAGMENTS) == (8), "SCTP_DISABLE_FRAGMENTS != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_DISABLE_FRAGMENTS 8
+#endif
+#if defined(SCTP_PEER_ADDR_PARAMS) || (defined(HAVE_DECL_SCTP_PEER_ADDR_PARAMS) && HAVE_DECL_SCTP_PEER_ADDR_PARAMS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_PEER_ADDR_PARAMS) == (9), "SCTP_PEER_ADDR_PARAMS != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_PEER_ADDR_PARAMS 9
+#endif
+#if defined(SCTP_DEFAULT_SEND_PARAM) || (defined(HAVE_DECL_SCTP_DEFAULT_SEND_PARAM) && HAVE_DECL_SCTP_DEFAULT_SEND_PARAM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_DEFAULT_SEND_PARAM) == (10), "SCTP_DEFAULT_SEND_PARAM != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_DEFAULT_SEND_PARAM 10
+#endif
+#if defined(SCTP_EVENTS) || (defined(HAVE_DECL_SCTP_EVENTS) && HAVE_DECL_SCTP_EVENTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_EVENTS) == (11), "SCTP_EVENTS != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_EVENTS 11
+#endif
+#if defined(SCTP_I_WANT_MAPPED_V4_ADDR) || (defined(HAVE_DECL_SCTP_I_WANT_MAPPED_V4_ADDR) && HAVE_DECL_SCTP_I_WANT_MAPPED_V4_ADDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_I_WANT_MAPPED_V4_ADDR) == (12), "SCTP_I_WANT_MAPPED_V4_ADDR != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_I_WANT_MAPPED_V4_ADDR 12
+#endif
+#if defined(SCTP_MAXSEG) || (defined(HAVE_DECL_SCTP_MAXSEG) && HAVE_DECL_SCTP_MAXSEG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_MAXSEG) == (13), "SCTP_MAXSEG != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_MAXSEG 13
+#endif
+#if defined(SCTP_STATUS) || (defined(HAVE_DECL_SCTP_STATUS) && HAVE_DECL_SCTP_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_STATUS) == (14), "SCTP_STATUS != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_STATUS 14
+#endif
+#if defined(SCTP_GET_PEER_ADDR_INFO) || (defined(HAVE_DECL_SCTP_GET_PEER_ADDR_INFO) && HAVE_DECL_SCTP_GET_PEER_ADDR_INFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_PEER_ADDR_INFO) == (15), "SCTP_GET_PEER_ADDR_INFO != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_PEER_ADDR_INFO 15
+#endif
+#if defined(SCTP_DELAYED_SACK) || (defined(HAVE_DECL_SCTP_DELAYED_SACK) && HAVE_DECL_SCTP_DELAYED_SACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_DELAYED_SACK) == (16), "SCTP_DELAYED_SACK != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_DELAYED_SACK 16
+#endif
+#if defined(SCTP_CONTEXT) || (defined(HAVE_DECL_SCTP_CONTEXT) && HAVE_DECL_SCTP_CONTEXT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_CONTEXT) == (17), "SCTP_CONTEXT != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_CONTEXT 17
+#endif
+#if defined(SCTP_FRAGMENT_INTERLEAVE) || (defined(HAVE_DECL_SCTP_FRAGMENT_INTERLEAVE) && HAVE_DECL_SCTP_FRAGMENT_INTERLEAVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_FRAGMENT_INTERLEAVE) == (18), "SCTP_FRAGMENT_INTERLEAVE != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_FRAGMENT_INTERLEAVE 18
+#endif
+#if defined(SCTP_PARTIAL_DELIVERY_POINT) || (defined(HAVE_DECL_SCTP_PARTIAL_DELIVERY_POINT) && HAVE_DECL_SCTP_PARTIAL_DELIVERY_POINT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_PARTIAL_DELIVERY_POINT) == (19), "SCTP_PARTIAL_DELIVERY_POINT != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_PARTIAL_DELIVERY_POINT 19
+#endif
+#if defined(SCTP_MAX_BURST) || (defined(HAVE_DECL_SCTP_MAX_BURST) && HAVE_DECL_SCTP_MAX_BURST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_MAX_BURST) == (20), "SCTP_MAX_BURST != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_MAX_BURST 20
+#endif
+#if defined(SCTP_AUTH_CHUNK) || (defined(HAVE_DECL_SCTP_AUTH_CHUNK) && HAVE_DECL_SCTP_AUTH_CHUNK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_AUTH_CHUNK) == (21), "SCTP_AUTH_CHUNK != 21");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_AUTH_CHUNK 21
+#endif
+#if defined(SCTP_HMAC_IDENT) || (defined(HAVE_DECL_SCTP_HMAC_IDENT) && HAVE_DECL_SCTP_HMAC_IDENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_HMAC_IDENT) == (22), "SCTP_HMAC_IDENT != 22");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_HMAC_IDENT 22
+#endif
+#if defined(SCTP_AUTH_KEY) || (defined(HAVE_DECL_SCTP_AUTH_KEY) && HAVE_DECL_SCTP_AUTH_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_AUTH_KEY) == (23), "SCTP_AUTH_KEY != 23");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_AUTH_KEY 23
+#endif
+#if defined(SCTP_AUTH_ACTIVE_KEY) || (defined(HAVE_DECL_SCTP_AUTH_ACTIVE_KEY) && HAVE_DECL_SCTP_AUTH_ACTIVE_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_AUTH_ACTIVE_KEY) == (24), "SCTP_AUTH_ACTIVE_KEY != 24");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_AUTH_ACTIVE_KEY 24
+#endif
+#if defined(SCTP_AUTH_DELETE_KEY) || (defined(HAVE_DECL_SCTP_AUTH_DELETE_KEY) && HAVE_DECL_SCTP_AUTH_DELETE_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_AUTH_DELETE_KEY) == (25), "SCTP_AUTH_DELETE_KEY != 25");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_AUTH_DELETE_KEY 25
+#endif
+#if defined(SCTP_PEER_AUTH_CHUNKS) || (defined(HAVE_DECL_SCTP_PEER_AUTH_CHUNKS) && HAVE_DECL_SCTP_PEER_AUTH_CHUNKS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_PEER_AUTH_CHUNKS) == (26), "SCTP_PEER_AUTH_CHUNKS != 26");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_PEER_AUTH_CHUNKS 26
+#endif
+#if defined(SCTP_LOCAL_AUTH_CHUNKS) || (defined(HAVE_DECL_SCTP_LOCAL_AUTH_CHUNKS) && HAVE_DECL_SCTP_LOCAL_AUTH_CHUNKS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_LOCAL_AUTH_CHUNKS) == (27), "SCTP_LOCAL_AUTH_CHUNKS != 27");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_LOCAL_AUTH_CHUNKS 27
+#endif
+#if defined(SCTP_GET_ASSOC_NUMBER) || (defined(HAVE_DECL_SCTP_GET_ASSOC_NUMBER) && HAVE_DECL_SCTP_GET_ASSOC_NUMBER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_ASSOC_NUMBER) == (28), "SCTP_GET_ASSOC_NUMBER != 28");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_ASSOC_NUMBER 28
+#endif
+#if defined(SCTP_GET_ASSOC_ID_LIST) || (defined(HAVE_DECL_SCTP_GET_ASSOC_ID_LIST) && HAVE_DECL_SCTP_GET_ASSOC_ID_LIST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_ASSOC_ID_LIST) == (29), "SCTP_GET_ASSOC_ID_LIST != 29");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_ASSOC_ID_LIST 29
+#endif
+#if defined(SCTP_AUTO_ASCONF) || (defined(HAVE_DECL_SCTP_AUTO_ASCONF) && HAVE_DECL_SCTP_AUTO_ASCONF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_AUTO_ASCONF) == (30), "SCTP_AUTO_ASCONF != 30");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_AUTO_ASCONF 30
+#endif
+#if defined(SCTP_PEER_ADDR_THLDS) || (defined(HAVE_DECL_SCTP_PEER_ADDR_THLDS) && HAVE_DECL_SCTP_PEER_ADDR_THLDS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_PEER_ADDR_THLDS) == (31), "SCTP_PEER_ADDR_THLDS != 31");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_PEER_ADDR_THLDS 31
+#endif
+#if defined(SCTP_RECVRCVINFO) || (defined(HAVE_DECL_SCTP_RECVRCVINFO) && HAVE_DECL_SCTP_RECVRCVINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_RECVRCVINFO) == (32), "SCTP_RECVRCVINFO != 32");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_RECVRCVINFO 32
+#endif
+#if defined(SCTP_RECVNXTINFO) || (defined(HAVE_DECL_SCTP_RECVNXTINFO) && HAVE_DECL_SCTP_RECVNXTINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_RECVNXTINFO) == (33), "SCTP_RECVNXTINFO != 33");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_RECVNXTINFO 33
+#endif
+#if defined(SCTP_DEFAULT_SNDINFO) || (defined(HAVE_DECL_SCTP_DEFAULT_SNDINFO) && HAVE_DECL_SCTP_DEFAULT_SNDINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_DEFAULT_SNDINFO) == (34), "SCTP_DEFAULT_SNDINFO != 34");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_DEFAULT_SNDINFO 34
+#endif
+#if defined(SCTP_AUTH_DEACTIVATE_KEY) || (defined(HAVE_DECL_SCTP_AUTH_DEACTIVATE_KEY) && HAVE_DECL_SCTP_AUTH_DEACTIVATE_KEY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_AUTH_DEACTIVATE_KEY) == (35), "SCTP_AUTH_DEACTIVATE_KEY != 35");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_AUTH_DEACTIVATE_KEY 35
+#endif
+#if defined(SCTP_SOCKOPT_BINDX_ADD) || (defined(HAVE_DECL_SCTP_SOCKOPT_BINDX_ADD) && HAVE_DECL_SCTP_SOCKOPT_BINDX_ADD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_SOCKOPT_BINDX_ADD) == (100), "SCTP_SOCKOPT_BINDX_ADD != 100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_SOCKOPT_BINDX_ADD 100
+#endif
+#if defined(SCTP_SOCKOPT_BINDX_REM) || (defined(HAVE_DECL_SCTP_SOCKOPT_BINDX_REM) && HAVE_DECL_SCTP_SOCKOPT_BINDX_REM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_SOCKOPT_BINDX_REM) == (101), "SCTP_SOCKOPT_BINDX_REM != 101");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_SOCKOPT_BINDX_REM 101
+#endif
+#if defined(SCTP_SOCKOPT_PEELOFF) || (defined(HAVE_DECL_SCTP_SOCKOPT_PEELOFF) && HAVE_DECL_SCTP_SOCKOPT_PEELOFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_SOCKOPT_PEELOFF) == (102), "SCTP_SOCKOPT_PEELOFF != 102");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_SOCKOPT_PEELOFF 102
+#endif
+#if defined(SCTP_GET_PEER_ADDRS_NUM_OLD) || (defined(HAVE_DECL_SCTP_GET_PEER_ADDRS_NUM_OLD) && HAVE_DECL_SCTP_GET_PEER_ADDRS_NUM_OLD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_PEER_ADDRS_NUM_OLD) == (103), "SCTP_GET_PEER_ADDRS_NUM_OLD != 103");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_PEER_ADDRS_NUM_OLD 103
+#endif
+#if defined(SCTP_GET_PEER_ADDRS_OLD) || (defined(HAVE_DECL_SCTP_GET_PEER_ADDRS_OLD) && HAVE_DECL_SCTP_GET_PEER_ADDRS_OLD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_PEER_ADDRS_OLD) == (104), "SCTP_GET_PEER_ADDRS_OLD != 104");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_PEER_ADDRS_OLD 104
+#endif
+#if defined(SCTP_GET_LOCAL_ADDRS_NUM_OLD) || (defined(HAVE_DECL_SCTP_GET_LOCAL_ADDRS_NUM_OLD) && HAVE_DECL_SCTP_GET_LOCAL_ADDRS_NUM_OLD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_LOCAL_ADDRS_NUM_OLD) == (105), "SCTP_GET_LOCAL_ADDRS_NUM_OLD != 105");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_LOCAL_ADDRS_NUM_OLD 105
+#endif
+#if defined(SCTP_GET_LOCAL_ADDRS_OLD) || (defined(HAVE_DECL_SCTP_GET_LOCAL_ADDRS_OLD) && HAVE_DECL_SCTP_GET_LOCAL_ADDRS_OLD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_LOCAL_ADDRS_OLD) == (106), "SCTP_GET_LOCAL_ADDRS_OLD != 106");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_LOCAL_ADDRS_OLD 106
+#endif
+#if defined(SCTP_SOCKOPT_CONNECTX_OLD) || (defined(HAVE_DECL_SCTP_SOCKOPT_CONNECTX_OLD) && HAVE_DECL_SCTP_SOCKOPT_CONNECTX_OLD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_SOCKOPT_CONNECTX_OLD) == (107), "SCTP_SOCKOPT_CONNECTX_OLD != 107");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_SOCKOPT_CONNECTX_OLD 107
+#endif
+#if defined(SCTP_GET_PEER_ADDRS) || (defined(HAVE_DECL_SCTP_GET_PEER_ADDRS) && HAVE_DECL_SCTP_GET_PEER_ADDRS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_PEER_ADDRS) == (108), "SCTP_GET_PEER_ADDRS != 108");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_PEER_ADDRS 108
+#endif
+#if defined(SCTP_GET_LOCAL_ADDRS) || (defined(HAVE_DECL_SCTP_GET_LOCAL_ADDRS) && HAVE_DECL_SCTP_GET_LOCAL_ADDRS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_LOCAL_ADDRS) == (109), "SCTP_GET_LOCAL_ADDRS != 109");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_LOCAL_ADDRS 109
+#endif
+#if defined(SCTP_SOCKOPT_CONNECTX) || (defined(HAVE_DECL_SCTP_SOCKOPT_CONNECTX) && HAVE_DECL_SCTP_SOCKOPT_CONNECTX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_SOCKOPT_CONNECTX) == (110), "SCTP_SOCKOPT_CONNECTX != 110");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_SOCKOPT_CONNECTX 110
+#endif
+#if defined(SCTP_SOCKOPT_CONNECTX3) || (defined(HAVE_DECL_SCTP_SOCKOPT_CONNECTX3) && HAVE_DECL_SCTP_SOCKOPT_CONNECTX3)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_SOCKOPT_CONNECTX3) == (111), "SCTP_SOCKOPT_CONNECTX3 != 111");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_SOCKOPT_CONNECTX3 111
+#endif
+#if defined(SCTP_GET_ASSOC_STATS) || (defined(HAVE_DECL_SCTP_GET_ASSOC_STATS) && HAVE_DECL_SCTP_GET_ASSOC_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_GET_ASSOC_STATS) == (112), "SCTP_GET_ASSOC_STATS != 112");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_GET_ASSOC_STATS 112
+#endif
+#if defined(SCTP_PR_SUPPORTED) || (defined(HAVE_DECL_SCTP_PR_SUPPORTED) && HAVE_DECL_SCTP_PR_SUPPORTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_PR_SUPPORTED) == (113), "SCTP_PR_SUPPORTED != 113");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_PR_SUPPORTED 113
+#endif
+#if defined(SCTP_DEFAULT_PRINFO) || (defined(HAVE_DECL_SCTP_DEFAULT_PRINFO) && HAVE_DECL_SCTP_DEFAULT_PRINFO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_DEFAULT_PRINFO) == (114), "SCTP_DEFAULT_PRINFO != 114");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_DEFAULT_PRINFO 114
+#endif
+#if defined(SCTP_PR_ASSOC_STATUS) || (defined(HAVE_DECL_SCTP_PR_ASSOC_STATUS) && HAVE_DECL_SCTP_PR_ASSOC_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_PR_ASSOC_STATUS) == (115), "SCTP_PR_ASSOC_STATUS != 115");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_PR_ASSOC_STATUS 115
+#endif
+#if defined(SCTP_PR_STREAM_STATUS) || (defined(HAVE_DECL_SCTP_PR_STREAM_STATUS) && HAVE_DECL_SCTP_PR_STREAM_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_PR_STREAM_STATUS) == (116), "SCTP_PR_STREAM_STATUS != 116");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_PR_STREAM_STATUS 116
+#endif
+#if defined(SCTP_RECONFIG_SUPPORTED) || (defined(HAVE_DECL_SCTP_RECONFIG_SUPPORTED) && HAVE_DECL_SCTP_RECONFIG_SUPPORTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_RECONFIG_SUPPORTED) == (117), "SCTP_RECONFIG_SUPPORTED != 117");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_RECONFIG_SUPPORTED 117
+#endif
+#if defined(SCTP_ENABLE_STREAM_RESET) || (defined(HAVE_DECL_SCTP_ENABLE_STREAM_RESET) && HAVE_DECL_SCTP_ENABLE_STREAM_RESET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_ENABLE_STREAM_RESET) == (118), "SCTP_ENABLE_STREAM_RESET != 118");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_ENABLE_STREAM_RESET 118
+#endif
+#if defined(SCTP_RESET_STREAMS) || (defined(HAVE_DECL_SCTP_RESET_STREAMS) && HAVE_DECL_SCTP_RESET_STREAMS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_RESET_STREAMS) == (119), "SCTP_RESET_STREAMS != 119");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_RESET_STREAMS 119
+#endif
+#if defined(SCTP_RESET_ASSOC) || (defined(HAVE_DECL_SCTP_RESET_ASSOC) && HAVE_DECL_SCTP_RESET_ASSOC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_RESET_ASSOC) == (120), "SCTP_RESET_ASSOC != 120");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_RESET_ASSOC 120
+#endif
+#if defined(SCTP_ADD_STREAMS) || (defined(HAVE_DECL_SCTP_ADD_STREAMS) && HAVE_DECL_SCTP_ADD_STREAMS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_ADD_STREAMS) == (121), "SCTP_ADD_STREAMS != 121");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_ADD_STREAMS 121
+#endif
+#if defined(SCTP_SOCKOPT_PEELOFF_FLAGS) || (defined(HAVE_DECL_SCTP_SOCKOPT_PEELOFF_FLAGS) && HAVE_DECL_SCTP_SOCKOPT_PEELOFF_FLAGS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_SOCKOPT_PEELOFF_FLAGS) == (122), "SCTP_SOCKOPT_PEELOFF_FLAGS != 122");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_SOCKOPT_PEELOFF_FLAGS 122
+#endif
+#if defined(SCTP_STREAM_SCHEDULER) || (defined(HAVE_DECL_SCTP_STREAM_SCHEDULER) && HAVE_DECL_SCTP_STREAM_SCHEDULER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_STREAM_SCHEDULER) == (123), "SCTP_STREAM_SCHEDULER != 123");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_STREAM_SCHEDULER 123
+#endif
+#if defined(SCTP_STREAM_SCHEDULER_VALUE) || (defined(HAVE_DECL_SCTP_STREAM_SCHEDULER_VALUE) && HAVE_DECL_SCTP_STREAM_SCHEDULER_VALUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_STREAM_SCHEDULER_VALUE) == (124), "SCTP_STREAM_SCHEDULER_VALUE != 124");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_STREAM_SCHEDULER_VALUE 124
+#endif
+#if defined(SCTP_INTERLEAVING_SUPPORTED) || (defined(HAVE_DECL_SCTP_INTERLEAVING_SUPPORTED) && HAVE_DECL_SCTP_INTERLEAVING_SUPPORTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_INTERLEAVING_SUPPORTED) == (125), "SCTP_INTERLEAVING_SUPPORTED != 125");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_INTERLEAVING_SUPPORTED 125
+#endif
+#if defined(SCTP_SENDMSG_CONNECT) || (defined(HAVE_DECL_SCTP_SENDMSG_CONNECT) && HAVE_DECL_SCTP_SENDMSG_CONNECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SCTP_SENDMSG_CONNECT) == (126), "SCTP_SENDMSG_CONNECT != 126");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SCTP_SENDMSG_CONNECT 126
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_sctp_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_sctp_options[] = {
+ XLAT(SCTP_RTOINFO),
+ XLAT(SCTP_ASSOCINFO),
+ XLAT(SCTP_INITMSG),
+ XLAT(SCTP_NODELAY),
+ XLAT(SCTP_AUTOCLOSE),
+ XLAT(SCTP_SET_PEER_PRIMARY_ADDR),
+ XLAT(SCTP_PRIMARY_ADDR),
+ XLAT(SCTP_ADAPTATION_LAYER),
+ XLAT(SCTP_DISABLE_FRAGMENTS),
+ XLAT(SCTP_PEER_ADDR_PARAMS),
+ XLAT(SCTP_DEFAULT_SEND_PARAM),
+ XLAT(SCTP_EVENTS),
+ XLAT(SCTP_I_WANT_MAPPED_V4_ADDR),
+ XLAT(SCTP_MAXSEG),
+ XLAT(SCTP_STATUS),
+ XLAT(SCTP_GET_PEER_ADDR_INFO),
+ XLAT(SCTP_DELAYED_SACK),
+ XLAT(SCTP_CONTEXT),
+ XLAT(SCTP_FRAGMENT_INTERLEAVE),
+ XLAT(SCTP_PARTIAL_DELIVERY_POINT),
+ XLAT(SCTP_MAX_BURST),
+ XLAT(SCTP_AUTH_CHUNK),
+ XLAT(SCTP_HMAC_IDENT),
+ XLAT(SCTP_AUTH_KEY),
+ XLAT(SCTP_AUTH_ACTIVE_KEY),
+ XLAT(SCTP_AUTH_DELETE_KEY),
+ XLAT(SCTP_PEER_AUTH_CHUNKS),
+ XLAT(SCTP_LOCAL_AUTH_CHUNKS),
+ XLAT(SCTP_GET_ASSOC_NUMBER),
+ XLAT(SCTP_GET_ASSOC_ID_LIST),
+ XLAT(SCTP_AUTO_ASCONF),
+ XLAT(SCTP_PEER_ADDR_THLDS),
+ XLAT(SCTP_RECVRCVINFO),
+ XLAT(SCTP_RECVNXTINFO),
+ XLAT(SCTP_DEFAULT_SNDINFO),
+ XLAT(SCTP_AUTH_DEACTIVATE_KEY),
+
+ XLAT(SCTP_SOCKOPT_BINDX_ADD),
+ XLAT(SCTP_SOCKOPT_BINDX_REM),
+ XLAT(SCTP_SOCKOPT_PEELOFF),
+ XLAT(SCTP_GET_PEER_ADDRS_NUM_OLD),
+ XLAT(SCTP_GET_PEER_ADDRS_OLD),
+ XLAT(SCTP_GET_LOCAL_ADDRS_NUM_OLD),
+ XLAT(SCTP_GET_LOCAL_ADDRS_OLD),
+ XLAT(SCTP_SOCKOPT_CONNECTX_OLD),
+ XLAT(SCTP_GET_PEER_ADDRS),
+ XLAT(SCTP_GET_LOCAL_ADDRS),
+ XLAT(SCTP_SOCKOPT_CONNECTX),
+ XLAT(SCTP_SOCKOPT_CONNECTX3),
+ XLAT(SCTP_GET_ASSOC_STATS),
+ XLAT(SCTP_PR_SUPPORTED),
+ XLAT(SCTP_DEFAULT_PRINFO),
+ XLAT(SCTP_PR_ASSOC_STATUS),
+ XLAT(SCTP_PR_STREAM_STATUS),
+ XLAT(SCTP_RECONFIG_SUPPORTED),
+ XLAT(SCTP_ENABLE_STREAM_RESET),
+ XLAT(SCTP_RESET_STREAMS),
+ XLAT(SCTP_RESET_ASSOC),
+ XLAT(SCTP_ADD_STREAMS),
+ XLAT(SCTP_SOCKOPT_PEELOFF_FLAGS),
+ XLAT(SCTP_STREAM_SCHEDULER),
+ XLAT(SCTP_STREAM_SCHEDULER_VALUE),
+ XLAT(SCTP_INTERLEAVING_SUPPORTED),
+ XLAT(SCTP_SENDMSG_CONNECT),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_sctp_options.in b/xlat/sock_sctp_options.in
new file mode 100644
index 0000000..bbb914e
--- /dev/null
+++ b/xlat/sock_sctp_options.in
@@ -0,0 +1,64 @@
+SCTP_RTOINFO			0
+SCTP_ASSOCINFO			1
+SCTP_INITMSG			2
+SCTP_NODELAY			3
+SCTP_AUTOCLOSE			4
+SCTP_SET_PEER_PRIMARY_ADDR	5
+SCTP_PRIMARY_ADDR		6
+SCTP_ADAPTATION_LAYER		7
+SCTP_DISABLE_FRAGMENTS		8
+SCTP_PEER_ADDR_PARAMS		9
+SCTP_DEFAULT_SEND_PARAM		10
+SCTP_EVENTS			11
+SCTP_I_WANT_MAPPED_V4_ADDR	12
+SCTP_MAXSEG			13
+SCTP_STATUS			14
+SCTP_GET_PEER_ADDR_INFO		15
+SCTP_DELAYED_SACK		16
+SCTP_CONTEXT			17
+SCTP_FRAGMENT_INTERLEAVE	18
+SCTP_PARTIAL_DELIVERY_POINT	19
+SCTP_MAX_BURST			20
+SCTP_AUTH_CHUNK			21
+SCTP_HMAC_IDENT			22
+SCTP_AUTH_KEY			23
+SCTP_AUTH_ACTIVE_KEY		24
+SCTP_AUTH_DELETE_KEY		25
+SCTP_PEER_AUTH_CHUNKS		26
+SCTP_LOCAL_AUTH_CHUNKS		27
+SCTP_GET_ASSOC_NUMBER		28
+SCTP_GET_ASSOC_ID_LIST		29
+SCTP_AUTO_ASCONF		30
+SCTP_PEER_ADDR_THLDS		31
+SCTP_RECVRCVINFO		32
+SCTP_RECVNXTINFO		33
+SCTP_DEFAULT_SNDINFO		34
+SCTP_AUTH_DEACTIVATE_KEY	35
+/* linux specific things */
+SCTP_SOCKOPT_BINDX_ADD		100
+SCTP_SOCKOPT_BINDX_REM		101
+SCTP_SOCKOPT_PEELOFF		102
+SCTP_GET_PEER_ADDRS_NUM_OLD	103
+SCTP_GET_PEER_ADDRS_OLD		104
+SCTP_GET_LOCAL_ADDRS_NUM_OLD	105
+SCTP_GET_LOCAL_ADDRS_OLD	106
+SCTP_SOCKOPT_CONNECTX_OLD	107
+SCTP_GET_PEER_ADDRS		108
+SCTP_GET_LOCAL_ADDRS		109
+SCTP_SOCKOPT_CONNECTX		110
+SCTP_SOCKOPT_CONNECTX3		111
+SCTP_GET_ASSOC_STATS		112
+SCTP_PR_SUPPORTED		113
+SCTP_DEFAULT_PRINFO		114
+SCTP_PR_ASSOC_STATUS		115
+SCTP_PR_STREAM_STATUS		116
+SCTP_RECONFIG_SUPPORTED		117
+SCTP_ENABLE_STREAM_RESET	118
+SCTP_RESET_STREAMS		119
+SCTP_RESET_ASSOC		120
+SCTP_ADD_STREAMS		121
+SCTP_SOCKOPT_PEELOFF_FLAGS	122
+SCTP_STREAM_SCHEDULER		123
+SCTP_STREAM_SCHEDULER_VALUE	124
+SCTP_INTERLEAVING_SUPPORTED	125
+SCTP_SENDMSG_CONNECT		126
diff --git a/xlat/sock_tcp_options.h b/xlat/sock_tcp_options.h
new file mode 100644
index 0000000..58d966a
--- /dev/null
+++ b/xlat/sock_tcp_options.h
@@ -0,0 +1,124 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_tcp_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_tcp_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_tcp_options[] = {
+#if defined(TCP_NODELAY) || (defined(HAVE_DECL_TCP_NODELAY) && HAVE_DECL_TCP_NODELAY)
+  XLAT(TCP_NODELAY),
+#endif
+#if defined(TCP_MAXSEG) || (defined(HAVE_DECL_TCP_MAXSEG) && HAVE_DECL_TCP_MAXSEG)
+  XLAT(TCP_MAXSEG),
+#endif
+#if defined(TCP_CORK) || (defined(HAVE_DECL_TCP_CORK) && HAVE_DECL_TCP_CORK)
+  XLAT(TCP_CORK),
+#endif
+#if defined(TCP_KEEPIDLE) || (defined(HAVE_DECL_TCP_KEEPIDLE) && HAVE_DECL_TCP_KEEPIDLE)
+  XLAT(TCP_KEEPIDLE),
+#endif
+#if defined(TCP_KEEPINTVL) || (defined(HAVE_DECL_TCP_KEEPINTVL) && HAVE_DECL_TCP_KEEPINTVL)
+  XLAT(TCP_KEEPINTVL),
+#endif
+#if defined(TCP_KEEPCNT) || (defined(HAVE_DECL_TCP_KEEPCNT) && HAVE_DECL_TCP_KEEPCNT)
+  XLAT(TCP_KEEPCNT),
+#endif
+#if defined(TCP_SYNCNT) || (defined(HAVE_DECL_TCP_SYNCNT) && HAVE_DECL_TCP_SYNCNT)
+  XLAT(TCP_SYNCNT),
+#endif
+#if defined(TCP_LINGER2) || (defined(HAVE_DECL_TCP_LINGER2) && HAVE_DECL_TCP_LINGER2)
+  XLAT(TCP_LINGER2),
+#endif
+#if defined(TCP_DEFER_ACCEPT) || (defined(HAVE_DECL_TCP_DEFER_ACCEPT) && HAVE_DECL_TCP_DEFER_ACCEPT)
+  XLAT(TCP_DEFER_ACCEPT),
+#endif
+#if defined(TCP_WINDOW_CLAMP) || (defined(HAVE_DECL_TCP_WINDOW_CLAMP) && HAVE_DECL_TCP_WINDOW_CLAMP)
+  XLAT(TCP_WINDOW_CLAMP),
+#endif
+#if defined(TCP_INFO) || (defined(HAVE_DECL_TCP_INFO) && HAVE_DECL_TCP_INFO)
+  XLAT(TCP_INFO),
+#endif
+#if defined(TCP_QUICKACK) || (defined(HAVE_DECL_TCP_QUICKACK) && HAVE_DECL_TCP_QUICKACK)
+  XLAT(TCP_QUICKACK),
+#endif
+#if defined(TCP_CONGESTION) || (defined(HAVE_DECL_TCP_CONGESTION) && HAVE_DECL_TCP_CONGESTION)
+  XLAT(TCP_CONGESTION),
+#endif
+#if defined(TCP_MD5SIG) || (defined(HAVE_DECL_TCP_MD5SIG) && HAVE_DECL_TCP_MD5SIG)
+  XLAT(TCP_MD5SIG),
+#endif
+#if defined(TCP_COOKIE_TRANSACTIONS) || (defined(HAVE_DECL_TCP_COOKIE_TRANSACTIONS) && HAVE_DECL_TCP_COOKIE_TRANSACTIONS)
+  XLAT(TCP_COOKIE_TRANSACTIONS),
+#endif
+#if defined(TCP_THIN_LINEAR_TIMEOUTS) || (defined(HAVE_DECL_TCP_THIN_LINEAR_TIMEOUTS) && HAVE_DECL_TCP_THIN_LINEAR_TIMEOUTS)
+  XLAT(TCP_THIN_LINEAR_TIMEOUTS),
+#endif
+#if defined(TCP_THIN_DUPACK) || (defined(HAVE_DECL_TCP_THIN_DUPACK) && HAVE_DECL_TCP_THIN_DUPACK)
+  XLAT(TCP_THIN_DUPACK),
+#endif
+#if defined(TCP_USER_TIMEOUT) || (defined(HAVE_DECL_TCP_USER_TIMEOUT) && HAVE_DECL_TCP_USER_TIMEOUT)
+  XLAT(TCP_USER_TIMEOUT),
+#endif
+#if defined(TCP_REPAIR) || (defined(HAVE_DECL_TCP_REPAIR) && HAVE_DECL_TCP_REPAIR)
+  XLAT(TCP_REPAIR),
+#endif
+#if defined(TCP_REPAIR_QUEUE) || (defined(HAVE_DECL_TCP_REPAIR_QUEUE) && HAVE_DECL_TCP_REPAIR_QUEUE)
+  XLAT(TCP_REPAIR_QUEUE),
+#endif
+#if defined(TCP_QUEUE_SEQ) || (defined(HAVE_DECL_TCP_QUEUE_SEQ) && HAVE_DECL_TCP_QUEUE_SEQ)
+  XLAT(TCP_QUEUE_SEQ),
+#endif
+#if defined(TCP_REPAIR_OPTIONS) || (defined(HAVE_DECL_TCP_REPAIR_OPTIONS) && HAVE_DECL_TCP_REPAIR_OPTIONS)
+  XLAT(TCP_REPAIR_OPTIONS),
+#endif
+#if defined(TCP_FASTOPEN) || (defined(HAVE_DECL_TCP_FASTOPEN) && HAVE_DECL_TCP_FASTOPEN)
+  XLAT(TCP_FASTOPEN),
+#endif
+#if defined(TCP_TIMESTAMP) || (defined(HAVE_DECL_TCP_TIMESTAMP) && HAVE_DECL_TCP_TIMESTAMP)
+  XLAT(TCP_TIMESTAMP),
+#endif
+#if defined(TCP_NOTSENT_LOWAT) || (defined(HAVE_DECL_TCP_NOTSENT_LOWAT) && HAVE_DECL_TCP_NOTSENT_LOWAT)
+  XLAT(TCP_NOTSENT_LOWAT),
+#endif
+#if defined(TCP_CC_INFO) || (defined(HAVE_DECL_TCP_CC_INFO) && HAVE_DECL_TCP_CC_INFO)
+  XLAT(TCP_CC_INFO),
+#endif
+#if defined(TCP_SAVE_SYN) || (defined(HAVE_DECL_TCP_SAVE_SYN) && HAVE_DECL_TCP_SAVE_SYN)
+  XLAT(TCP_SAVE_SYN),
+#endif
+#if defined(TCP_SAVED_SYN) || (defined(HAVE_DECL_TCP_SAVED_SYN) && HAVE_DECL_TCP_SAVED_SYN)
+  XLAT(TCP_SAVED_SYN),
+#endif
+#if defined(TCP_REPAIR_WINDOW) || (defined(HAVE_DECL_TCP_REPAIR_WINDOW) && HAVE_DECL_TCP_REPAIR_WINDOW)
+  XLAT(TCP_REPAIR_WINDOW),
+#endif
+#if defined(TCP_FASTOPEN_CONNECT) || (defined(HAVE_DECL_TCP_FASTOPEN_CONNECT) && HAVE_DECL_TCP_FASTOPEN_CONNECT)
+  XLAT(TCP_FASTOPEN_CONNECT),
+#endif
+#if defined(TCP_ULP) || (defined(HAVE_DECL_TCP_ULP) && HAVE_DECL_TCP_ULP)
+  XLAT(TCP_ULP),
+#endif
+#if defined(TCP_MD5SIG_EXT) || (defined(HAVE_DECL_TCP_MD5SIG_EXT) && HAVE_DECL_TCP_MD5SIG_EXT)
+  XLAT(TCP_MD5SIG_EXT),
+#endif
+#if defined(TCP_FASTOPEN_KEY) || (defined(HAVE_DECL_TCP_FASTOPEN_KEY) && HAVE_DECL_TCP_FASTOPEN_KEY)
+  XLAT(TCP_FASTOPEN_KEY),
+#endif
+#if defined(TCP_FASTOPEN_NO_COOKIE) || (defined(HAVE_DECL_TCP_FASTOPEN_NO_COOKIE) && HAVE_DECL_TCP_FASTOPEN_NO_COOKIE)
+  XLAT(TCP_FASTOPEN_NO_COOKIE),
+#endif
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_tcp_options.in b/xlat/sock_tcp_options.in
new file mode 100644
index 0000000..44f1a2a
--- /dev/null
+++ b/xlat/sock_tcp_options.in
@@ -0,0 +1,34 @@
+TCP_NODELAY
+TCP_MAXSEG
+TCP_CORK
+TCP_KEEPIDLE
+TCP_KEEPINTVL
+TCP_KEEPCNT
+TCP_SYNCNT
+TCP_LINGER2
+TCP_DEFER_ACCEPT
+TCP_WINDOW_CLAMP
+TCP_INFO
+TCP_QUICKACK
+TCP_CONGESTION
+TCP_MD5SIG
+TCP_COOKIE_TRANSACTIONS
+TCP_THIN_LINEAR_TIMEOUTS
+TCP_THIN_DUPACK
+TCP_USER_TIMEOUT
+TCP_REPAIR
+TCP_REPAIR_QUEUE
+TCP_QUEUE_SEQ
+TCP_REPAIR_OPTIONS
+TCP_FASTOPEN
+TCP_TIMESTAMP
+TCP_NOTSENT_LOWAT
+TCP_CC_INFO
+TCP_SAVE_SYN
+TCP_SAVED_SYN
+TCP_REPAIR_WINDOW
+TCP_FASTOPEN_CONNECT
+TCP_ULP
+TCP_MD5SIG_EXT
+TCP_FASTOPEN_KEY
+TCP_FASTOPEN_NO_COOKIE
diff --git a/xlat/sock_tipc_options.h b/xlat/sock_tipc_options.h
new file mode 100644
index 0000000..c41a91c
--- /dev/null
+++ b/xlat/sock_tipc_options.h
@@ -0,0 +1,103 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_tipc_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TIPC_IMPORTANCE) || (defined(HAVE_DECL_TIPC_IMPORTANCE) && HAVE_DECL_TIPC_IMPORTANCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_IMPORTANCE) == (127), "TIPC_IMPORTANCE != 127");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_IMPORTANCE 127
+#endif
+#if defined(TIPC_SRC_DROPPABLE) || (defined(HAVE_DECL_TIPC_SRC_DROPPABLE) && HAVE_DECL_TIPC_SRC_DROPPABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_SRC_DROPPABLE) == (128), "TIPC_SRC_DROPPABLE != 128");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_SRC_DROPPABLE 128
+#endif
+#if defined(TIPC_DEST_DROPPABLE) || (defined(HAVE_DECL_TIPC_DEST_DROPPABLE) && HAVE_DECL_TIPC_DEST_DROPPABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_DEST_DROPPABLE) == (129), "TIPC_DEST_DROPPABLE != 129");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_DEST_DROPPABLE 129
+#endif
+#if defined(TIPC_CONN_TIMEOUT) || (defined(HAVE_DECL_TIPC_CONN_TIMEOUT) && HAVE_DECL_TIPC_CONN_TIMEOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_CONN_TIMEOUT) == (130), "TIPC_CONN_TIMEOUT != 130");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_CONN_TIMEOUT 130
+#endif
+#if defined(TIPC_NODE_RECVQ_DEPTH) || (defined(HAVE_DECL_TIPC_NODE_RECVQ_DEPTH) && HAVE_DECL_TIPC_NODE_RECVQ_DEPTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_NODE_RECVQ_DEPTH) == (131), "TIPC_NODE_RECVQ_DEPTH != 131");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_NODE_RECVQ_DEPTH 131
+#endif
+#if defined(TIPC_SOCK_RECVQ_DEPTH) || (defined(HAVE_DECL_TIPC_SOCK_RECVQ_DEPTH) && HAVE_DECL_TIPC_SOCK_RECVQ_DEPTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_SOCK_RECVQ_DEPTH) == (132), "TIPC_SOCK_RECVQ_DEPTH != 132");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_SOCK_RECVQ_DEPTH 132
+#endif
+#if defined(TIPC_MCAST_BROADCAST) || (defined(HAVE_DECL_TIPC_MCAST_BROADCAST) && HAVE_DECL_TIPC_MCAST_BROADCAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_MCAST_BROADCAST) == (133), "TIPC_MCAST_BROADCAST != 133");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_MCAST_BROADCAST 133
+#endif
+#if defined(TIPC_MCAST_REPLICAST) || (defined(HAVE_DECL_TIPC_MCAST_REPLICAST) && HAVE_DECL_TIPC_MCAST_REPLICAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_MCAST_REPLICAST) == (134), "TIPC_MCAST_REPLICAST != 134");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_MCAST_REPLICAST 134
+#endif
+#if defined(TIPC_GROUP_JOIN) || (defined(HAVE_DECL_TIPC_GROUP_JOIN) && HAVE_DECL_TIPC_GROUP_JOIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_GROUP_JOIN) == (135), "TIPC_GROUP_JOIN != 135");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_GROUP_JOIN 135
+#endif
+#if defined(TIPC_GROUP_LEAVE) || (defined(HAVE_DECL_TIPC_GROUP_LEAVE) && HAVE_DECL_TIPC_GROUP_LEAVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TIPC_GROUP_LEAVE) == (136), "TIPC_GROUP_LEAVE != 136");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TIPC_GROUP_LEAVE 136
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_tipc_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_tipc_options[] = {
+
+ XLAT(TIPC_IMPORTANCE),
+ XLAT(TIPC_SRC_DROPPABLE),
+ XLAT(TIPC_DEST_DROPPABLE),
+ XLAT(TIPC_CONN_TIMEOUT),
+ XLAT(TIPC_NODE_RECVQ_DEPTH),
+ XLAT(TIPC_SOCK_RECVQ_DEPTH),
+ XLAT(TIPC_MCAST_BROADCAST),
+ XLAT(TIPC_MCAST_REPLICAST),
+ XLAT(TIPC_GROUP_JOIN),
+ XLAT(TIPC_GROUP_LEAVE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_tipc_options.in b/xlat/sock_tipc_options.in
new file mode 100644
index 0000000..849e50d
--- /dev/null
+++ b/xlat/sock_tipc_options.in
@@ -0,0 +1,11 @@
+/* sort -k2,2n */
+TIPC_IMPORTANCE		127
+TIPC_SRC_DROPPABLE	128
+TIPC_DEST_DROPPABLE	129
+TIPC_CONN_TIMEOUT	130
+TIPC_NODE_RECVQ_DEPTH	131
+TIPC_SOCK_RECVQ_DEPTH	132
+TIPC_MCAST_BROADCAST	133
+TIPC_MCAST_REPLICAST	134
+TIPC_GROUP_JOIN		135
+TIPC_GROUP_LEAVE	136
diff --git a/xlat/sock_tls_options.h b/xlat/sock_tls_options.h
new file mode 100644
index 0000000..7e1f253
--- /dev/null
+++ b/xlat/sock_tls_options.h
@@ -0,0 +1,38 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_tls_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TLS_TX) || (defined(HAVE_DECL_TLS_TX) && HAVE_DECL_TLS_TX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TLS_TX) == (1), "TLS_TX != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TLS_TX 1
+#endif
+#if defined(TLS_RX) || (defined(HAVE_DECL_TLS_RX) && HAVE_DECL_TLS_RX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TLS_RX) == (2), "TLS_RX != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define TLS_RX 2
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_tls_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_tls_options[] = {
+ XLAT(TLS_TX),
+ XLAT(TLS_RX),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_tls_options.in b/xlat/sock_tls_options.in
new file mode 100644
index 0000000..5fcefd6
--- /dev/null
+++ b/xlat/sock_tls_options.in
@@ -0,0 +1,2 @@
+TLS_TX	1
+TLS_RX	2
diff --git a/xlat/sock_type_flags.h b/xlat/sock_type_flags.h
index d1af088..d8755c4 100644
--- a/xlat/sock_type_flags.h
+++ b/xlat/sock_type_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sock_type_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sock_type_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_type_flags in mpers mode
+
+# else
 
 static
 const struct xlat sock_type_flags[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_udp_options.h b/xlat/sock_udp_options.h
new file mode 100644
index 0000000..51aa1c7
--- /dev/null
+++ b/xlat/sock_udp_options.h
@@ -0,0 +1,54 @@
+/* Generated by ./xlat/gen.sh from ./xlat/sock_udp_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(UDP_CORK) || (defined(HAVE_DECL_UDP_CORK) && HAVE_DECL_UDP_CORK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((UDP_CORK) == (1), "UDP_CORK != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define UDP_CORK 1
+#endif
+#if defined(UDP_ENCAP) || (defined(HAVE_DECL_UDP_ENCAP) && HAVE_DECL_UDP_ENCAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((UDP_ENCAP) == (100), "UDP_ENCAP != 100");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define UDP_ENCAP 100
+#endif
+#if defined(UDP_NO_CHECK6_TX) || (defined(HAVE_DECL_UDP_NO_CHECK6_TX) && HAVE_DECL_UDP_NO_CHECK6_TX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((UDP_NO_CHECK6_TX) == (101), "UDP_NO_CHECK6_TX != 101");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define UDP_NO_CHECK6_TX 101
+#endif
+#if defined(UDP_NO_CHECK6_RX) || (defined(HAVE_DECL_UDP_NO_CHECK6_RX) && HAVE_DECL_UDP_NO_CHECK6_RX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((UDP_NO_CHECK6_RX) == (102), "UDP_NO_CHECK6_RX != 102");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define UDP_NO_CHECK6_RX 102
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sock_udp_options in mpers mode
+
+# else
+
+static
+const struct xlat sock_udp_options[] = {
+ XLAT(UDP_CORK),
+ XLAT(UDP_ENCAP),
+ XLAT(UDP_NO_CHECK6_TX),
+ XLAT(UDP_NO_CHECK6_RX),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sock_udp_options.in b/xlat/sock_udp_options.in
new file mode 100644
index 0000000..18ec8d4
--- /dev/null
+++ b/xlat/sock_udp_options.in
@@ -0,0 +1,4 @@
+UDP_CORK		1
+UDP_ENCAP		100
+UDP_NO_CHECK6_TX	101
+UDP_NO_CHECK6_RX	102
diff --git a/xlat/socketcalls.h b/xlat/socketcalls.h
index 3680446..a3ae148 100644
--- a/xlat/socketcalls.h
+++ b/xlat/socketcalls.h
@@ -1,70 +1,156 @@
 /* Generated by ./xlat/gen.sh from ./xlat/socketcalls.in; do not edit. */
-#if !(defined(SYS_SOCKET) || (defined(HAVE_DECL_SYS_SOCKET) && HAVE_DECL_SYS_SOCKET))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SYS_SOCKET) || (defined(HAVE_DECL_SYS_SOCKET) && HAVE_DECL_SYS_SOCKET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_SOCKET) == (1), "SYS_SOCKET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_SOCKET 1
 #endif
-#if !(defined(SYS_BIND) || (defined(HAVE_DECL_SYS_BIND) && HAVE_DECL_SYS_BIND))
+#if defined(SYS_BIND) || (defined(HAVE_DECL_SYS_BIND) && HAVE_DECL_SYS_BIND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_BIND) == (2), "SYS_BIND != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_BIND 2
 #endif
-#if !(defined(SYS_CONNECT) || (defined(HAVE_DECL_SYS_CONNECT) && HAVE_DECL_SYS_CONNECT))
+#if defined(SYS_CONNECT) || (defined(HAVE_DECL_SYS_CONNECT) && HAVE_DECL_SYS_CONNECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_CONNECT) == (3), "SYS_CONNECT != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_CONNECT 3
 #endif
-#if !(defined(SYS_LISTEN) || (defined(HAVE_DECL_SYS_LISTEN) && HAVE_DECL_SYS_LISTEN))
+#if defined(SYS_LISTEN) || (defined(HAVE_DECL_SYS_LISTEN) && HAVE_DECL_SYS_LISTEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_LISTEN) == (4), "SYS_LISTEN != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_LISTEN 4
 #endif
-#if !(defined(SYS_ACCEPT) || (defined(HAVE_DECL_SYS_ACCEPT) && HAVE_DECL_SYS_ACCEPT))
+#if defined(SYS_ACCEPT) || (defined(HAVE_DECL_SYS_ACCEPT) && HAVE_DECL_SYS_ACCEPT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_ACCEPT) == (5), "SYS_ACCEPT != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_ACCEPT 5
 #endif
-#if !(defined(SYS_GETSOCKNAME) || (defined(HAVE_DECL_SYS_GETSOCKNAME) && HAVE_DECL_SYS_GETSOCKNAME))
+#if defined(SYS_GETSOCKNAME) || (defined(HAVE_DECL_SYS_GETSOCKNAME) && HAVE_DECL_SYS_GETSOCKNAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_GETSOCKNAME) == (6), "SYS_GETSOCKNAME != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_GETSOCKNAME 6
 #endif
-#if !(defined(SYS_GETPEERNAME) || (defined(HAVE_DECL_SYS_GETPEERNAME) && HAVE_DECL_SYS_GETPEERNAME))
+#if defined(SYS_GETPEERNAME) || (defined(HAVE_DECL_SYS_GETPEERNAME) && HAVE_DECL_SYS_GETPEERNAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_GETPEERNAME) == (7), "SYS_GETPEERNAME != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_GETPEERNAME 7
 #endif
-#if !(defined(SYS_SOCKETPAIR) || (defined(HAVE_DECL_SYS_SOCKETPAIR) && HAVE_DECL_SYS_SOCKETPAIR))
+#if defined(SYS_SOCKETPAIR) || (defined(HAVE_DECL_SYS_SOCKETPAIR) && HAVE_DECL_SYS_SOCKETPAIR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_SOCKETPAIR) == (8), "SYS_SOCKETPAIR != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_SOCKETPAIR 8
 #endif
-#if !(defined(SYS_SEND) || (defined(HAVE_DECL_SYS_SEND) && HAVE_DECL_SYS_SEND))
+#if defined(SYS_SEND) || (defined(HAVE_DECL_SYS_SEND) && HAVE_DECL_SYS_SEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_SEND) == (9), "SYS_SEND != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_SEND 9
 #endif
-#if !(defined(SYS_RECV) || (defined(HAVE_DECL_SYS_RECV) && HAVE_DECL_SYS_RECV))
+#if defined(SYS_RECV) || (defined(HAVE_DECL_SYS_RECV) && HAVE_DECL_SYS_RECV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_RECV) == (10), "SYS_RECV != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_RECV 10
 #endif
-#if !(defined(SYS_SENDTO) || (defined(HAVE_DECL_SYS_SENDTO) && HAVE_DECL_SYS_SENDTO))
+#if defined(SYS_SENDTO) || (defined(HAVE_DECL_SYS_SENDTO) && HAVE_DECL_SYS_SENDTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_SENDTO) == (11), "SYS_SENDTO != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_SENDTO 11
 #endif
-#if !(defined(SYS_RECVFROM) || (defined(HAVE_DECL_SYS_RECVFROM) && HAVE_DECL_SYS_RECVFROM))
+#if defined(SYS_RECVFROM) || (defined(HAVE_DECL_SYS_RECVFROM) && HAVE_DECL_SYS_RECVFROM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_RECVFROM) == (12), "SYS_RECVFROM != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_RECVFROM 12
 #endif
-#if !(defined(SYS_SHUTDOWN) || (defined(HAVE_DECL_SYS_SHUTDOWN) && HAVE_DECL_SYS_SHUTDOWN))
+#if defined(SYS_SHUTDOWN) || (defined(HAVE_DECL_SYS_SHUTDOWN) && HAVE_DECL_SYS_SHUTDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_SHUTDOWN) == (13), "SYS_SHUTDOWN != 13");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_SHUTDOWN 13
 #endif
-#if !(defined(SYS_SETSOCKOPT) || (defined(HAVE_DECL_SYS_SETSOCKOPT) && HAVE_DECL_SYS_SETSOCKOPT))
+#if defined(SYS_SETSOCKOPT) || (defined(HAVE_DECL_SYS_SETSOCKOPT) && HAVE_DECL_SYS_SETSOCKOPT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_SETSOCKOPT) == (14), "SYS_SETSOCKOPT != 14");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_SETSOCKOPT 14
 #endif
-#if !(defined(SYS_GETSOCKOPT) || (defined(HAVE_DECL_SYS_GETSOCKOPT) && HAVE_DECL_SYS_GETSOCKOPT))
+#if defined(SYS_GETSOCKOPT) || (defined(HAVE_DECL_SYS_GETSOCKOPT) && HAVE_DECL_SYS_GETSOCKOPT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_GETSOCKOPT) == (15), "SYS_GETSOCKOPT != 15");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_GETSOCKOPT 15
 #endif
-#if !(defined(SYS_SENDMSG) || (defined(HAVE_DECL_SYS_SENDMSG) && HAVE_DECL_SYS_SENDMSG))
+#if defined(SYS_SENDMSG) || (defined(HAVE_DECL_SYS_SENDMSG) && HAVE_DECL_SYS_SENDMSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_SENDMSG) == (16), "SYS_SENDMSG != 16");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_SENDMSG 16
 #endif
-#if !(defined(SYS_RECVMSG) || (defined(HAVE_DECL_SYS_RECVMSG) && HAVE_DECL_SYS_RECVMSG))
+#if defined(SYS_RECVMSG) || (defined(HAVE_DECL_SYS_RECVMSG) && HAVE_DECL_SYS_RECVMSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_RECVMSG) == (17), "SYS_RECVMSG != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_RECVMSG 17
 #endif
-#if !(defined(SYS_ACCEPT4) || (defined(HAVE_DECL_SYS_ACCEPT4) && HAVE_DECL_SYS_ACCEPT4))
+#if defined(SYS_ACCEPT4) || (defined(HAVE_DECL_SYS_ACCEPT4) && HAVE_DECL_SYS_ACCEPT4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_ACCEPT4) == (18), "SYS_ACCEPT4 != 18");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_ACCEPT4 18
 #endif
-#if !(defined(SYS_RECVMMSG) || (defined(HAVE_DECL_SYS_RECVMMSG) && HAVE_DECL_SYS_RECVMMSG))
+#if defined(SYS_RECVMMSG) || (defined(HAVE_DECL_SYS_RECVMMSG) && HAVE_DECL_SYS_RECVMMSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_RECVMMSG) == (19), "SYS_RECVMMSG != 19");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_RECVMMSG 19
 #endif
-#if !(defined(SYS_SENDMMSG) || (defined(HAVE_DECL_SYS_SENDMMSG) && HAVE_DECL_SYS_SENDMMSG))
+#if defined(SYS_SENDMMSG) || (defined(HAVE_DECL_SYS_SENDMMSG) && HAVE_DECL_SYS_SENDMMSG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYS_SENDMMSG) == (20), "SYS_SENDMMSG != 20");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYS_SENDMMSG 20
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat socketcalls in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat socketcalls in mpers mode
+
+# else
 
 static
 const struct xlat socketcalls[] = {
@@ -91,4 +177,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/socketlayers.h b/xlat/socketlayers.h
index dc96902..5296344 100644
--- a/xlat/socketlayers.h
+++ b/xlat/socketlayers.h
@@ -1,118 +1,282 @@
 /* Generated by ./xlat/gen.sh from ./xlat/socketlayers.in; do not edit. */
-#if !(defined(SOL_IP) || (defined(HAVE_DECL_SOL_IP) && HAVE_DECL_SOL_IP))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SOL_IP) || (defined(HAVE_DECL_SOL_IP) && HAVE_DECL_SOL_IP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_IP) == (0), "SOL_IP != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_IP 0
 #endif
-#if !(defined(SOL_SOCKET) || (defined(HAVE_DECL_SOL_SOCKET) && HAVE_DECL_SOL_SOCKET))
+#if !(defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__)
+#if defined(SOL_SOCKET) || (defined(HAVE_DECL_SOL_SOCKET) && HAVE_DECL_SOL_SOCKET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_SOCKET) == (1), "SOL_SOCKET != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_SOCKET 1
 #endif
-#if !(defined(SOL_TCP) || (defined(HAVE_DECL_SOL_TCP) && HAVE_DECL_SOL_TCP))
+#endif
+#if defined(SOL_TCP) || (defined(HAVE_DECL_SOL_TCP) && HAVE_DECL_SOL_TCP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_TCP) == (6), "SOL_TCP != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_TCP 6
 #endif
-#if !(defined(SOL_UDP) || (defined(HAVE_DECL_SOL_UDP) && HAVE_DECL_SOL_UDP))
+#if defined(SOL_UDP) || (defined(HAVE_DECL_SOL_UDP) && HAVE_DECL_SOL_UDP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_UDP) == (17), "SOL_UDP != 17");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_UDP 17
 #endif
-#if !(defined(SOL_IPV6) || (defined(HAVE_DECL_SOL_IPV6) && HAVE_DECL_SOL_IPV6))
+#if defined(SOL_IPV6) || (defined(HAVE_DECL_SOL_IPV6) && HAVE_DECL_SOL_IPV6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_IPV6) == (41), "SOL_IPV6 != 41");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_IPV6 41
 #endif
-#if !(defined(SOL_ICMPV6) || (defined(HAVE_DECL_SOL_ICMPV6) && HAVE_DECL_SOL_ICMPV6))
+#if defined(SOL_ICMPV6) || (defined(HAVE_DECL_SOL_ICMPV6) && HAVE_DECL_SOL_ICMPV6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_ICMPV6) == (58), "SOL_ICMPV6 != 58");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_ICMPV6 58
 #endif
-#if !(defined(SOL_SCTP) || (defined(HAVE_DECL_SOL_SCTP) && HAVE_DECL_SOL_SCTP))
+#if defined(SOL_SCTP) || (defined(HAVE_DECL_SOL_SCTP) && HAVE_DECL_SOL_SCTP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_SCTP) == (132), "SOL_SCTP != 132");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_SCTP 132
 #endif
-#if !(defined(SOL_UDPLITE) || (defined(HAVE_DECL_SOL_UDPLITE) && HAVE_DECL_SOL_UDPLITE))
+#if defined(SOL_UDPLITE) || (defined(HAVE_DECL_SOL_UDPLITE) && HAVE_DECL_SOL_UDPLITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_UDPLITE) == (136), "SOL_UDPLITE != 136");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_UDPLITE 136
 #endif
-#if !(defined(SOL_RAW) || (defined(HAVE_DECL_SOL_RAW) && HAVE_DECL_SOL_RAW))
+#if defined(SOL_RAW) || (defined(HAVE_DECL_SOL_RAW) && HAVE_DECL_SOL_RAW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_RAW) == (255), "SOL_RAW != 255");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_RAW 255
 #endif
-#if !(defined(SOL_IPX) || (defined(HAVE_DECL_SOL_IPX) && HAVE_DECL_SOL_IPX))
+#if defined(SOL_IPX) || (defined(HAVE_DECL_SOL_IPX) && HAVE_DECL_SOL_IPX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_IPX) == (256), "SOL_IPX != 256");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_IPX 256
 #endif
-#if !(defined(SOL_AX25) || (defined(HAVE_DECL_SOL_AX25) && HAVE_DECL_SOL_AX25))
+#if defined(SOL_AX25) || (defined(HAVE_DECL_SOL_AX25) && HAVE_DECL_SOL_AX25)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_AX25) == (257), "SOL_AX25 != 257");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_AX25 257
 #endif
-#if !(defined(SOL_ATALK) || (defined(HAVE_DECL_SOL_ATALK) && HAVE_DECL_SOL_ATALK))
+#if defined(SOL_ATALK) || (defined(HAVE_DECL_SOL_ATALK) && HAVE_DECL_SOL_ATALK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_ATALK) == (258), "SOL_ATALK != 258");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_ATALK 258
 #endif
-#if !(defined(SOL_NETROM) || (defined(HAVE_DECL_SOL_NETROM) && HAVE_DECL_SOL_NETROM))
+#if defined(SOL_NETROM) || (defined(HAVE_DECL_SOL_NETROM) && HAVE_DECL_SOL_NETROM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_NETROM) == (259), "SOL_NETROM != 259");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_NETROM 259
 #endif
-#if !(defined(SOL_ROSE) || (defined(HAVE_DECL_SOL_ROSE) && HAVE_DECL_SOL_ROSE))
+#if defined(SOL_ROSE) || (defined(HAVE_DECL_SOL_ROSE) && HAVE_DECL_SOL_ROSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_ROSE) == (260), "SOL_ROSE != 260");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_ROSE 260
 #endif
-#if !(defined(SOL_DECNET) || (defined(HAVE_DECL_SOL_DECNET) && HAVE_DECL_SOL_DECNET))
+#if defined(SOL_DECNET) || (defined(HAVE_DECL_SOL_DECNET) && HAVE_DECL_SOL_DECNET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_DECNET) == (261), "SOL_DECNET != 261");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_DECNET 261
 #endif
-#if !(defined(SOL_X25) || (defined(HAVE_DECL_SOL_X25) && HAVE_DECL_SOL_X25))
+#if defined(SOL_X25) || (defined(HAVE_DECL_SOL_X25) && HAVE_DECL_SOL_X25)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_X25) == (262), "SOL_X25 != 262");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_X25 262
 #endif
-#if !(defined(SOL_PACKET) || (defined(HAVE_DECL_SOL_PACKET) && HAVE_DECL_SOL_PACKET))
+#if defined(SOL_PACKET) || (defined(HAVE_DECL_SOL_PACKET) && HAVE_DECL_SOL_PACKET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_PACKET) == (263), "SOL_PACKET != 263");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_PACKET 263
 #endif
-#if !(defined(SOL_ATM) || (defined(HAVE_DECL_SOL_ATM) && HAVE_DECL_SOL_ATM))
+#if defined(SOL_ATM) || (defined(HAVE_DECL_SOL_ATM) && HAVE_DECL_SOL_ATM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_ATM) == (264), "SOL_ATM != 264");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_ATM 264
 #endif
-#if !(defined(SOL_AAL) || (defined(HAVE_DECL_SOL_AAL) && HAVE_DECL_SOL_AAL))
+#if defined(SOL_AAL) || (defined(HAVE_DECL_SOL_AAL) && HAVE_DECL_SOL_AAL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_AAL) == (265), "SOL_AAL != 265");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_AAL 265
 #endif
-#if !(defined(SOL_IRDA) || (defined(HAVE_DECL_SOL_IRDA) && HAVE_DECL_SOL_IRDA))
+#if defined(SOL_IRDA) || (defined(HAVE_DECL_SOL_IRDA) && HAVE_DECL_SOL_IRDA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_IRDA) == (266), "SOL_IRDA != 266");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_IRDA 266
 #endif
-#if !(defined(SOL_NETBEUI) || (defined(HAVE_DECL_SOL_NETBEUI) && HAVE_DECL_SOL_NETBEUI))
+#if defined(SOL_NETBEUI) || (defined(HAVE_DECL_SOL_NETBEUI) && HAVE_DECL_SOL_NETBEUI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_NETBEUI) == (267), "SOL_NETBEUI != 267");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_NETBEUI 267
 #endif
-#if !(defined(SOL_LLC) || (defined(HAVE_DECL_SOL_LLC) && HAVE_DECL_SOL_LLC))
+#if defined(SOL_LLC) || (defined(HAVE_DECL_SOL_LLC) && HAVE_DECL_SOL_LLC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_LLC) == (268), "SOL_LLC != 268");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_LLC 268
 #endif
-#if !(defined(SOL_DCCP) || (defined(HAVE_DECL_SOL_DCCP) && HAVE_DECL_SOL_DCCP))
+#if defined(SOL_DCCP) || (defined(HAVE_DECL_SOL_DCCP) && HAVE_DECL_SOL_DCCP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_DCCP) == (269), "SOL_DCCP != 269");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_DCCP 269
 #endif
-#if !(defined(SOL_NETLINK) || (defined(HAVE_DECL_SOL_NETLINK) && HAVE_DECL_SOL_NETLINK))
+#if defined(SOL_NETLINK) || (defined(HAVE_DECL_SOL_NETLINK) && HAVE_DECL_SOL_NETLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_NETLINK) == (270), "SOL_NETLINK != 270");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_NETLINK 270
 #endif
-#if !(defined(SOL_TIPC) || (defined(HAVE_DECL_SOL_TIPC) && HAVE_DECL_SOL_TIPC))
+#if defined(SOL_TIPC) || (defined(HAVE_DECL_SOL_TIPC) && HAVE_DECL_SOL_TIPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_TIPC) == (271), "SOL_TIPC != 271");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_TIPC 271
 #endif
-#if !(defined(SOL_RXRPC) || (defined(HAVE_DECL_SOL_RXRPC) && HAVE_DECL_SOL_RXRPC))
+#if defined(SOL_RXRPC) || (defined(HAVE_DECL_SOL_RXRPC) && HAVE_DECL_SOL_RXRPC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_RXRPC) == (272), "SOL_RXRPC != 272");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_RXRPC 272
 #endif
-#if !(defined(SOL_PPPOL2TP) || (defined(HAVE_DECL_SOL_PPPOL2TP) && HAVE_DECL_SOL_PPPOL2TP))
+#if defined(SOL_PPPOL2TP) || (defined(HAVE_DECL_SOL_PPPOL2TP) && HAVE_DECL_SOL_PPPOL2TP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_PPPOL2TP) == (273), "SOL_PPPOL2TP != 273");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_PPPOL2TP 273
 #endif
-#if !(defined(SOL_BLUETOOTH) || (defined(HAVE_DECL_SOL_BLUETOOTH) && HAVE_DECL_SOL_BLUETOOTH))
+#if defined(SOL_BLUETOOTH) || (defined(HAVE_DECL_SOL_BLUETOOTH) && HAVE_DECL_SOL_BLUETOOTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_BLUETOOTH) == (274), "SOL_BLUETOOTH != 274");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_BLUETOOTH 274
 #endif
-#if !(defined(SOL_PNPIPE) || (defined(HAVE_DECL_SOL_PNPIPE) && HAVE_DECL_SOL_PNPIPE))
+#if defined(SOL_PNPIPE) || (defined(HAVE_DECL_SOL_PNPIPE) && HAVE_DECL_SOL_PNPIPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_PNPIPE) == (275), "SOL_PNPIPE != 275");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_PNPIPE 275
 #endif
-#if !(defined(SOL_RDS) || (defined(HAVE_DECL_SOL_RDS) && HAVE_DECL_SOL_RDS))
+#if defined(SOL_RDS) || (defined(HAVE_DECL_SOL_RDS) && HAVE_DECL_SOL_RDS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_RDS) == (276), "SOL_RDS != 276");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_RDS 276
 #endif
-#if !(defined(SOL_IUCV) || (defined(HAVE_DECL_SOL_IUCV) && HAVE_DECL_SOL_IUCV))
+#if defined(SOL_IUCV) || (defined(HAVE_DECL_SOL_IUCV) && HAVE_DECL_SOL_IUCV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_IUCV) == (277), "SOL_IUCV != 277");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_IUCV 277
 #endif
-#if !(defined(SOL_CAIF) || (defined(HAVE_DECL_SOL_CAIF) && HAVE_DECL_SOL_CAIF))
+#if defined(SOL_CAIF) || (defined(HAVE_DECL_SOL_CAIF) && HAVE_DECL_SOL_CAIF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_CAIF) == (278), "SOL_CAIF != 278");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_CAIF 278
 #endif
-#if !(defined(SOL_ALG) || (defined(HAVE_DECL_SOL_ALG) && HAVE_DECL_SOL_ALG))
+#if defined(SOL_ALG) || (defined(HAVE_DECL_SOL_ALG) && HAVE_DECL_SOL_ALG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_ALG) == (279), "SOL_ALG != 279");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_ALG 279
 #endif
-#if !(defined(SOL_NFC) || (defined(HAVE_DECL_SOL_NFC) && HAVE_DECL_SOL_NFC))
+#if defined(SOL_NFC) || (defined(HAVE_DECL_SOL_NFC) && HAVE_DECL_SOL_NFC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_NFC) == (280), "SOL_NFC != 280");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_NFC 280
 #endif
-#if !(defined(SOL_KCM) || (defined(HAVE_DECL_SOL_KCM) && HAVE_DECL_SOL_KCM))
+#if defined(SOL_KCM) || (defined(HAVE_DECL_SOL_KCM) && HAVE_DECL_SOL_KCM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_KCM) == (281), "SOL_KCM != 281");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_KCM 281
 #endif
-#if !(defined(SOL_TLS) || (defined(HAVE_DECL_SOL_TLS) && HAVE_DECL_SOL_TLS))
+#if defined(SOL_TLS) || (defined(HAVE_DECL_SOL_TLS) && HAVE_DECL_SOL_TLS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_TLS) == (282), "SOL_TLS != 282");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SOL_TLS 282
 #endif
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+#if defined(SOL_SOCKET) || (defined(HAVE_DECL_SOL_SOCKET) && HAVE_DECL_SOL_SOCKET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SOL_SOCKET) == (0xffff), "SOL_SOCKET != 0xffff");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define SOL_SOCKET 0xffff
+#endif
+#endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat socketlayers[] = {
+
  XLAT(SOL_IP),
+#if !(defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__)
  XLAT(SOL_SOCKET),
+#endif
  XLAT(SOL_TCP),
  XLAT(SOL_UDP),
  XLAT(SOL_IPV6),
@@ -147,7 +311,12 @@
  XLAT(SOL_NFC),
  XLAT(SOL_KCM),
  XLAT(SOL_TLS),
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+ XLAT(SOL_SOCKET),
+#endif
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/socketlayers.in b/xlat/socketlayers.in
index dc80c58..0dfa446 100644
--- a/xlat/socketlayers.in
+++ b/xlat/socketlayers.in
@@ -1,5 +1,8 @@
+/* sort -k2,2n */
 SOL_IP		0
+#if !(defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__)
 SOL_SOCKET	1
+#endif
 SOL_TCP		6
 SOL_UDP		17
 SOL_IPV6	41
@@ -34,3 +37,6 @@
 SOL_NFC		280
 SOL_KCM		281
 SOL_TLS		282
+#if defined __alpha__ || defined __hppa__ || defined __mips__ || defined __sparc__
+SOL_SOCKET	0xffff
+#endif
diff --git a/xlat/sockipoptions.h b/xlat/sockipoptions.h
deleted file mode 100644
index 26d768f..0000000
--- a/xlat/sockipoptions.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/sockipoptions.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat sockipoptions in mpers mode
-
-#else
-
-static
-const struct xlat sockipoptions[] = {
-#if defined(IP_TOS) || (defined(HAVE_DECL_IP_TOS) && HAVE_DECL_IP_TOS)
-  XLAT(IP_TOS),
-#endif
-#if defined(IP_TTL) || (defined(HAVE_DECL_IP_TTL) && HAVE_DECL_IP_TTL)
-  XLAT(IP_TTL),
-#endif
-#if defined(IP_HDRINCL) || (defined(HAVE_DECL_IP_HDRINCL) && HAVE_DECL_IP_HDRINCL)
-  XLAT(IP_HDRINCL),
-#endif
-#if defined(IP_OPTIONS) || (defined(HAVE_DECL_IP_OPTIONS) && HAVE_DECL_IP_OPTIONS)
-  XLAT(IP_OPTIONS),
-#endif
-#if defined(IP_ROUTER_ALERT) || (defined(HAVE_DECL_IP_ROUTER_ALERT) && HAVE_DECL_IP_ROUTER_ALERT)
-  XLAT(IP_ROUTER_ALERT),
-#endif
-#if defined(IP_RECVOPTIONS) || (defined(HAVE_DECL_IP_RECVOPTIONS) && HAVE_DECL_IP_RECVOPTIONS)
-  XLAT(IP_RECVOPTIONS),
-#endif
-#if defined(IP_RECVOPTS) || (defined(HAVE_DECL_IP_RECVOPTS) && HAVE_DECL_IP_RECVOPTS)
-  XLAT(IP_RECVOPTS),
-#endif
-#if defined(IP_RETOPTS) || (defined(HAVE_DECL_IP_RETOPTS) && HAVE_DECL_IP_RETOPTS)
-  XLAT(IP_RETOPTS),
-#endif
-#if defined(IP_RECVRETOPTS) || (defined(HAVE_DECL_IP_RECVRETOPTS) && HAVE_DECL_IP_RECVRETOPTS)
-  XLAT(IP_RECVRETOPTS),
-#endif
-#if defined(IP_RECVDSTADDR) || (defined(HAVE_DECL_IP_RECVDSTADDR) && HAVE_DECL_IP_RECVDSTADDR)
-  XLAT(IP_RECVDSTADDR),
-#endif
-#if defined(IP_PKTINFO) || (defined(HAVE_DECL_IP_PKTINFO) && HAVE_DECL_IP_PKTINFO)
-  XLAT(IP_PKTINFO),
-#endif
-#if defined(IP_PKTOPTIONS) || (defined(HAVE_DECL_IP_PKTOPTIONS) && HAVE_DECL_IP_PKTOPTIONS)
-  XLAT(IP_PKTOPTIONS),
-#endif
-#if defined(IP_MTU_DISCOVER) || (defined(HAVE_DECL_IP_MTU_DISCOVER) && HAVE_DECL_IP_MTU_DISCOVER)
-  XLAT(IP_MTU_DISCOVER),
-#endif
-#if defined(IP_RECVERR) || (defined(HAVE_DECL_IP_RECVERR) && HAVE_DECL_IP_RECVERR)
-  XLAT(IP_RECVERR),
-#endif
-#if defined(IP_RECVTTL) || (defined(HAVE_DECL_IP_RECVTTL) && HAVE_DECL_IP_RECVTTL)
-  XLAT(IP_RECVTTL),
-#endif
-#if defined(IP_RECVTOS) || (defined(HAVE_DECL_IP_RECVTOS) && HAVE_DECL_IP_RECVTOS)
-  XLAT(IP_RECVTOS),
-#endif
-#if defined(IP_MTU) || (defined(HAVE_DECL_IP_MTU) && HAVE_DECL_IP_MTU)
-  XLAT(IP_MTU),
-#endif
-#if defined(IP_MULTICAST_IF) || (defined(HAVE_DECL_IP_MULTICAST_IF) && HAVE_DECL_IP_MULTICAST_IF)
-  XLAT(IP_MULTICAST_IF),
-#endif
-#if defined(IP_MULTICAST_TTL) || (defined(HAVE_DECL_IP_MULTICAST_TTL) && HAVE_DECL_IP_MULTICAST_TTL)
-  XLAT(IP_MULTICAST_TTL),
-#endif
-#if defined(IP_MULTICAST_LOOP) || (defined(HAVE_DECL_IP_MULTICAST_LOOP) && HAVE_DECL_IP_MULTICAST_LOOP)
-  XLAT(IP_MULTICAST_LOOP),
-#endif
-#if defined(IP_ADD_MEMBERSHIP) || (defined(HAVE_DECL_IP_ADD_MEMBERSHIP) && HAVE_DECL_IP_ADD_MEMBERSHIP)
-  XLAT(IP_ADD_MEMBERSHIP),
-#endif
-#if defined(IP_DROP_MEMBERSHIP) || (defined(HAVE_DECL_IP_DROP_MEMBERSHIP) && HAVE_DECL_IP_DROP_MEMBERSHIP)
-  XLAT(IP_DROP_MEMBERSHIP),
-#endif
-#if defined(IP_BROADCAST_IF) || (defined(HAVE_DECL_IP_BROADCAST_IF) && HAVE_DECL_IP_BROADCAST_IF)
-  XLAT(IP_BROADCAST_IF),
-#endif
-#if defined(IP_RECVIFINDEX) || (defined(HAVE_DECL_IP_RECVIFINDEX) && HAVE_DECL_IP_RECVIFINDEX)
-  XLAT(IP_RECVIFINDEX),
-#endif
-#if defined(IP_MSFILTER) || (defined(HAVE_DECL_IP_MSFILTER) && HAVE_DECL_IP_MSFILTER)
-  XLAT(IP_MSFILTER),
-#endif
-#if defined(IP_FREEBIND) || (defined(HAVE_DECL_IP_FREEBIND) && HAVE_DECL_IP_FREEBIND)
-  XLAT(IP_FREEBIND),
-#endif
-#if defined(IP_IPSEC_POLICY) || (defined(HAVE_DECL_IP_IPSEC_POLICY) && HAVE_DECL_IP_IPSEC_POLICY)
-  XLAT(IP_IPSEC_POLICY),
-#endif
-#if defined(IP_XFRM_POLICY) || (defined(HAVE_DECL_IP_XFRM_POLICY) && HAVE_DECL_IP_XFRM_POLICY)
-  XLAT(IP_XFRM_POLICY),
-#endif
-#if defined(IP_PASSSEC) || (defined(HAVE_DECL_IP_PASSSEC) && HAVE_DECL_IP_PASSSEC)
-  XLAT(IP_PASSSEC),
-#endif
-#if defined(IP_TRANSPARENT) || (defined(HAVE_DECL_IP_TRANSPARENT) && HAVE_DECL_IP_TRANSPARENT)
-  XLAT(IP_TRANSPARENT),
-#endif
-#if defined(IP_ORIGDSTADDR) || (defined(HAVE_DECL_IP_ORIGDSTADDR) && HAVE_DECL_IP_ORIGDSTADDR)
-  XLAT(IP_ORIGDSTADDR),
-#endif
-#if defined(IP_RECVORIGDSTADDR) || (defined(HAVE_DECL_IP_RECVORIGDSTADDR) && HAVE_DECL_IP_RECVORIGDSTADDR)
-  XLAT(IP_RECVORIGDSTADDR),
-#endif
-#if defined(IP_MINTTL) || (defined(HAVE_DECL_IP_MINTTL) && HAVE_DECL_IP_MINTTL)
-  XLAT(IP_MINTTL),
-#endif
-#if defined(IP_NODEFRAG) || (defined(HAVE_DECL_IP_NODEFRAG) && HAVE_DECL_IP_NODEFRAG)
-  XLAT(IP_NODEFRAG),
-#endif
-#if defined(IP_CHECKSUM) || (defined(HAVE_DECL_IP_CHECKSUM) && HAVE_DECL_IP_CHECKSUM)
-  XLAT(IP_CHECKSUM),
-#endif
-#if defined(IP_BIND_ADDRESS_NO_PORT) || (defined(HAVE_DECL_IP_BIND_ADDRESS_NO_PORT) && HAVE_DECL_IP_BIND_ADDRESS_NO_PORT)
-  XLAT(IP_BIND_ADDRESS_NO_PORT),
-#endif
-#if defined(IP_RECVFRAGSIZE) || (defined(HAVE_DECL_IP_RECVFRAGSIZE) && HAVE_DECL_IP_RECVFRAGSIZE)
-  XLAT(IP_RECVFRAGSIZE),
-#endif
-#if defined(IP_UNBLOCK_SOURCE) || (defined(HAVE_DECL_IP_UNBLOCK_SOURCE) && HAVE_DECL_IP_UNBLOCK_SOURCE)
-  XLAT(IP_UNBLOCK_SOURCE),
-#endif
-#if defined(IP_BLOCK_SOURCE) || (defined(HAVE_DECL_IP_BLOCK_SOURCE) && HAVE_DECL_IP_BLOCK_SOURCE)
-  XLAT(IP_BLOCK_SOURCE),
-#endif
-#if defined(IP_ADD_SOURCE_MEMBERSHIP) || (defined(HAVE_DECL_IP_ADD_SOURCE_MEMBERSHIP) && HAVE_DECL_IP_ADD_SOURCE_MEMBERSHIP)
-  XLAT(IP_ADD_SOURCE_MEMBERSHIP),
-#endif
-#if defined(IP_DROP_SOURCE_MEMBERSHIP) || (defined(HAVE_DECL_IP_DROP_SOURCE_MEMBERSHIP) && HAVE_DECL_IP_DROP_SOURCE_MEMBERSHIP)
-  XLAT(IP_DROP_SOURCE_MEMBERSHIP),
-#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(IP_MULTICAST_ALL) || (defined(HAVE_DECL_IP_MULTICAST_ALL) && HAVE_DECL_IP_MULTICAST_ALL)
-  XLAT(IP_MULTICAST_ALL),
-#endif
-#if defined(IP_UNICAST_IF) || (defined(HAVE_DECL_IP_UNICAST_IF) && HAVE_DECL_IP_UNICAST_IF)
-  XLAT(IP_UNICAST_IF),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/sockipv6options.h b/xlat/sockipv6options.h
deleted file mode 100644
index 4309089..0000000
--- a/xlat/sockipv6options.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/sockipv6options.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat sockipv6options in mpers mode
-
-#else
-
-static
-const struct xlat sockipv6options[] = {
-#if defined(IPV6_ADDRFORM) || (defined(HAVE_DECL_IPV6_ADDRFORM) && HAVE_DECL_IPV6_ADDRFORM)
-  XLAT(IPV6_ADDRFORM),
-#endif
-#if defined(IPV6_2292PKTINFO) || (defined(HAVE_DECL_IPV6_2292PKTINFO) && HAVE_DECL_IPV6_2292PKTINFO)
-  XLAT(IPV6_2292PKTINFO),
-#endif
-#if defined(IPV6_2292HOPOPTS) || (defined(HAVE_DECL_IPV6_2292HOPOPTS) && HAVE_DECL_IPV6_2292HOPOPTS)
-  XLAT(IPV6_2292HOPOPTS),
-#endif
-#if defined(IPV6_2292DSTOPTS) || (defined(HAVE_DECL_IPV6_2292DSTOPTS) && HAVE_DECL_IPV6_2292DSTOPTS)
-  XLAT(IPV6_2292DSTOPTS),
-#endif
-#if defined(IPV6_2292RTHDR) || (defined(HAVE_DECL_IPV6_2292RTHDR) && HAVE_DECL_IPV6_2292RTHDR)
-  XLAT(IPV6_2292RTHDR),
-#endif
-#if defined(IPV6_2292PKTOPTIONS) || (defined(HAVE_DECL_IPV6_2292PKTOPTIONS) && HAVE_DECL_IPV6_2292PKTOPTIONS)
-  XLAT(IPV6_2292PKTOPTIONS),
-#endif
-#if defined(IPV6_CHECKSUM) || (defined(HAVE_DECL_IPV6_CHECKSUM) && HAVE_DECL_IPV6_CHECKSUM)
-  XLAT(IPV6_CHECKSUM),
-#endif
-#if defined(IPV6_2292HOPLIMIT) || (defined(HAVE_DECL_IPV6_2292HOPLIMIT) && HAVE_DECL_IPV6_2292HOPLIMIT)
-  XLAT(IPV6_2292HOPLIMIT),
-#endif
-#if defined(IPV6_NEXTHOP) || (defined(HAVE_DECL_IPV6_NEXTHOP) && HAVE_DECL_IPV6_NEXTHOP)
-  XLAT(IPV6_NEXTHOP),
-#endif
-#if defined(IPV6_AUTHHDR) || (defined(HAVE_DECL_IPV6_AUTHHDR) && HAVE_DECL_IPV6_AUTHHDR)
-  XLAT(IPV6_AUTHHDR),
-#endif
-#if defined(IPV6_FLOWINFO) || (defined(HAVE_DECL_IPV6_FLOWINFO) && HAVE_DECL_IPV6_FLOWINFO)
-  XLAT(IPV6_FLOWINFO),
-#endif
-#if defined(IPV6_UNICAST_HOPS) || (defined(HAVE_DECL_IPV6_UNICAST_HOPS) && HAVE_DECL_IPV6_UNICAST_HOPS)
-  XLAT(IPV6_UNICAST_HOPS),
-#endif
-#if defined(IPV6_MULTICAST_IF) || (defined(HAVE_DECL_IPV6_MULTICAST_IF) && HAVE_DECL_IPV6_MULTICAST_IF)
-  XLAT(IPV6_MULTICAST_IF),
-#endif
-#if defined(IPV6_MULTICAST_HOPS) || (defined(HAVE_DECL_IPV6_MULTICAST_HOPS) && HAVE_DECL_IPV6_MULTICAST_HOPS)
-  XLAT(IPV6_MULTICAST_HOPS),
-#endif
-#if defined(IPV6_MULTICAST_LOOP) || (defined(HAVE_DECL_IPV6_MULTICAST_LOOP) && HAVE_DECL_IPV6_MULTICAST_LOOP)
-  XLAT(IPV6_MULTICAST_LOOP),
-#endif
-#if defined(IPV6_ADD_MEMBERSHIP) || (defined(HAVE_DECL_IPV6_ADD_MEMBERSHIP) && HAVE_DECL_IPV6_ADD_MEMBERSHIP)
-  XLAT(IPV6_ADD_MEMBERSHIP),
-#endif
-#if defined(IPV6_DROP_MEMBERSHIP) || (defined(HAVE_DECL_IPV6_DROP_MEMBERSHIP) && HAVE_DECL_IPV6_DROP_MEMBERSHIP)
-  XLAT(IPV6_DROP_MEMBERSHIP),
-#endif
-#if defined(IPV6_ROUTER_ALERT) || (defined(HAVE_DECL_IPV6_ROUTER_ALERT) && HAVE_DECL_IPV6_ROUTER_ALERT)
-  XLAT(IPV6_ROUTER_ALERT),
-#endif
-#if defined(IPV6_MTU_DISCOVER) || (defined(HAVE_DECL_IPV6_MTU_DISCOVER) && HAVE_DECL_IPV6_MTU_DISCOVER)
-  XLAT(IPV6_MTU_DISCOVER),
-#endif
-#if defined(IPV6_MTU) || (defined(HAVE_DECL_IPV6_MTU) && HAVE_DECL_IPV6_MTU)
-  XLAT(IPV6_MTU),
-#endif
-#if defined(IPV6_RECVERR) || (defined(HAVE_DECL_IPV6_RECVERR) && HAVE_DECL_IPV6_RECVERR)
-  XLAT(IPV6_RECVERR),
-#endif
-#if defined(IPV6_V6ONLY) || (defined(HAVE_DECL_IPV6_V6ONLY) && HAVE_DECL_IPV6_V6ONLY)
-  XLAT(IPV6_V6ONLY),
-#endif
-#if defined(IPV6_JOIN_ANYCAST) || (defined(HAVE_DECL_IPV6_JOIN_ANYCAST) && HAVE_DECL_IPV6_JOIN_ANYCAST)
-  XLAT(IPV6_JOIN_ANYCAST),
-#endif
-#if defined(IPV6_LEAVE_ANYCAST) || (defined(HAVE_DECL_IPV6_LEAVE_ANYCAST) && HAVE_DECL_IPV6_LEAVE_ANYCAST)
-  XLAT(IPV6_LEAVE_ANYCAST),
-#endif
-#if defined(IPV6_FLOWLABEL_MGR) || (defined(HAVE_DECL_IPV6_FLOWLABEL_MGR) && HAVE_DECL_IPV6_FLOWLABEL_MGR)
-  XLAT(IPV6_FLOWLABEL_MGR),
-#endif
-#if defined(IPV6_FLOWINFO_SEND) || (defined(HAVE_DECL_IPV6_FLOWINFO_SEND) && HAVE_DECL_IPV6_FLOWINFO_SEND)
-  XLAT(IPV6_FLOWINFO_SEND),
-#endif
-#if defined(IPV6_IPSEC_POLICY) || (defined(HAVE_DECL_IPV6_IPSEC_POLICY) && HAVE_DECL_IPV6_IPSEC_POLICY)
-  XLAT(IPV6_IPSEC_POLICY),
-#endif
-#if defined(IPV6_XFRM_POLICY) || (defined(HAVE_DECL_IPV6_XFRM_POLICY) && HAVE_DECL_IPV6_XFRM_POLICY)
-  XLAT(IPV6_XFRM_POLICY),
-#endif
-#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
-#if defined(IPV6_PKTINFO) || (defined(HAVE_DECL_IPV6_PKTINFO) && HAVE_DECL_IPV6_PKTINFO)
-  XLAT(IPV6_PKTINFO),
-#endif
-#if defined(IPV6_RECVHOPLIMIT) || (defined(HAVE_DECL_IPV6_RECVHOPLIMIT) && HAVE_DECL_IPV6_RECVHOPLIMIT)
-  XLAT(IPV6_RECVHOPLIMIT),
-#endif
-#if defined(IPV6_HOPLIMIT) || (defined(HAVE_DECL_IPV6_HOPLIMIT) && HAVE_DECL_IPV6_HOPLIMIT)
-  XLAT(IPV6_HOPLIMIT),
-#endif
-#if defined(IPV6_RECVHOPOPTS) || (defined(HAVE_DECL_IPV6_RECVHOPOPTS) && HAVE_DECL_IPV6_RECVHOPOPTS)
-  XLAT(IPV6_RECVHOPOPTS),
-#endif
-#if defined(IPV6_HOPOPTS) || (defined(HAVE_DECL_IPV6_HOPOPTS) && HAVE_DECL_IPV6_HOPOPTS)
-  XLAT(IPV6_HOPOPTS),
-#endif
-#if defined(IPV6_RTHDRDSTOPTS) || (defined(HAVE_DECL_IPV6_RTHDRDSTOPTS) && HAVE_DECL_IPV6_RTHDRDSTOPTS)
-  XLAT(IPV6_RTHDRDSTOPTS),
-#endif
-#if defined(IPV6_RECVRTHDR) || (defined(HAVE_DECL_IPV6_RECVRTHDR) && HAVE_DECL_IPV6_RECVRTHDR)
-  XLAT(IPV6_RECVRTHDR),
-#endif
-#if defined(IPV6_RTHDR) || (defined(HAVE_DECL_IPV6_RTHDR) && HAVE_DECL_IPV6_RTHDR)
-  XLAT(IPV6_RTHDR),
-#endif
-#if defined(IPV6_RECVDSTOPTS) || (defined(HAVE_DECL_IPV6_RECVDSTOPTS) && HAVE_DECL_IPV6_RECVDSTOPTS)
-  XLAT(IPV6_RECVDSTOPTS),
-#endif
-#if defined(IPV6_DSTOPTS) || (defined(HAVE_DECL_IPV6_DSTOPTS) && HAVE_DECL_IPV6_DSTOPTS)
-  XLAT(IPV6_DSTOPTS),
-#endif
-#if defined(IPV6_RECVPATHMTU) || (defined(HAVE_DECL_IPV6_RECVPATHMTU) && HAVE_DECL_IPV6_RECVPATHMTU)
-  XLAT(IPV6_RECVPATHMTU),
-#endif
-#if defined(IPV6_PATHMTU) || (defined(HAVE_DECL_IPV6_PATHMTU) && HAVE_DECL_IPV6_PATHMTU)
-  XLAT(IPV6_PATHMTU),
-#endif
-#if defined(IPV6_DONTFRAG) || (defined(HAVE_DECL_IPV6_DONTFRAG) && HAVE_DECL_IPV6_DONTFRAG)
-  XLAT(IPV6_DONTFRAG),
-#endif
-#if defined(IPV6_USE_MIN_MTU) || (defined(HAVE_DECL_IPV6_USE_MIN_MTU) && HAVE_DECL_IPV6_USE_MIN_MTU)
-  XLAT(IPV6_USE_MIN_MTU),
-#endif
-#if defined(IPV6_RECVTCLASS) || (defined(HAVE_DECL_IPV6_RECVTCLASS) && HAVE_DECL_IPV6_RECVTCLASS)
-  XLAT(IPV6_RECVTCLASS),
-#endif
-#if defined(IPV6_TCLASS) || (defined(HAVE_DECL_IPV6_TCLASS) && HAVE_DECL_IPV6_TCLASS)
-  XLAT(IPV6_TCLASS),
-#endif
-#if defined(IPV6_AUTOFLOWLABEL) || (defined(HAVE_DECL_IPV6_AUTOFLOWLABEL) && HAVE_DECL_IPV6_AUTOFLOWLABEL)
-  XLAT(IPV6_AUTOFLOWLABEL),
-#endif
-#if defined(IPV6_ADDR_PREFERENCES) || (defined(HAVE_DECL_IPV6_ADDR_PREFERENCES) && HAVE_DECL_IPV6_ADDR_PREFERENCES)
-  XLAT(IPV6_ADDR_PREFERENCES),
-#endif
-#if defined(IPV6_MINHOPCOUNT) || (defined(HAVE_DECL_IPV6_MINHOPCOUNT) && HAVE_DECL_IPV6_MINHOPCOUNT)
-  XLAT(IPV6_MINHOPCOUNT),
-#endif
-#if defined(IPV6_ORIGDSTADDR) || (defined(HAVE_DECL_IPV6_ORIGDSTADDR) && HAVE_DECL_IPV6_ORIGDSTADDR)
-  XLAT(IPV6_ORIGDSTADDR),
-#endif
-#if defined(IPV6_RECVORIGDSTADDR) || (defined(HAVE_DECL_IPV6_RECVORIGDSTADDR) && HAVE_DECL_IPV6_RECVORIGDSTADDR)
-  XLAT(IPV6_RECVORIGDSTADDR),
-#endif
-#if defined(IPV6_TRANSPARENT) || (defined(HAVE_DECL_IPV6_TRANSPARENT) && HAVE_DECL_IPV6_TRANSPARENT)
-  XLAT(IPV6_TRANSPARENT),
-#endif
-#if defined(IPV6_UNICAST_IF) || (defined(HAVE_DECL_IPV6_UNICAST_IF) && HAVE_DECL_IPV6_UNICAST_IF)
-  XLAT(IPV6_UNICAST_IF),
-#endif
-#if defined(IPV6_RECVFRAGSIZE) || (defined(HAVE_DECL_IPV6_RECVFRAGSIZE) && HAVE_DECL_IPV6_RECVFRAGSIZE)
-  XLAT(IPV6_RECVFRAGSIZE),
-#endif
-#if defined(IPV6_FREEBIND) || (defined(HAVE_DECL_IPV6_FREEBIND) && HAVE_DECL_IPV6_FREEBIND)
-  XLAT(IPV6_FREEBIND),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/sockipxoptions.h b/xlat/sockipxoptions.h
deleted file mode 100644
index 0e92f0e..0000000
--- a/xlat/sockipxoptions.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/sockipxoptions.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat sockipxoptions in mpers mode
-
-#else
-
-static
-const struct xlat sockipxoptions[] = {
-#if defined(IPX_TYPE) || (defined(HAVE_DECL_IPX_TYPE) && HAVE_DECL_IPX_TYPE)
-  XLAT(IPX_TYPE),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/socknetlinkoptions.h b/xlat/socknetlinkoptions.h
deleted file mode 100644
index e101213..0000000
--- a/xlat/socknetlinkoptions.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/socknetlinkoptions.in; do not edit. */
-#if !(defined(NETLINK_ADD_MEMBERSHIP) || (defined(HAVE_DECL_NETLINK_ADD_MEMBERSHIP) && HAVE_DECL_NETLINK_ADD_MEMBERSHIP))
-# define NETLINK_ADD_MEMBERSHIP 1
-#endif
-#if !(defined(NETLINK_DROP_MEMBERSHIP) || (defined(HAVE_DECL_NETLINK_DROP_MEMBERSHIP) && HAVE_DECL_NETLINK_DROP_MEMBERSHIP))
-# define NETLINK_DROP_MEMBERSHIP 2
-#endif
-#if !(defined(NETLINK_PKTINFO) || (defined(HAVE_DECL_NETLINK_PKTINFO) && HAVE_DECL_NETLINK_PKTINFO))
-# define NETLINK_PKTINFO 3
-#endif
-#if !(defined(NETLINK_BROADCAST_ERROR) || (defined(HAVE_DECL_NETLINK_BROADCAST_ERROR) && HAVE_DECL_NETLINK_BROADCAST_ERROR))
-# define NETLINK_BROADCAST_ERROR 4
-#endif
-#if !(defined(NETLINK_NO_ENOBUFS) || (defined(HAVE_DECL_NETLINK_NO_ENOBUFS) && HAVE_DECL_NETLINK_NO_ENOBUFS))
-# define NETLINK_NO_ENOBUFS 5
-#endif
-#if !(defined(NETLINK_RX_RING) || (defined(HAVE_DECL_NETLINK_RX_RING) && HAVE_DECL_NETLINK_RX_RING))
-# define NETLINK_RX_RING 6
-#endif
-#if !(defined(NETLINK_TX_RING) || (defined(HAVE_DECL_NETLINK_TX_RING) && HAVE_DECL_NETLINK_TX_RING))
-# define NETLINK_TX_RING 7
-#endif
-#if !(defined(NETLINK_LISTEN_ALL_NSID) || (defined(HAVE_DECL_NETLINK_LISTEN_ALL_NSID) && HAVE_DECL_NETLINK_LISTEN_ALL_NSID))
-# define NETLINK_LISTEN_ALL_NSID 8
-#endif
-#if !(defined(NETLINK_LIST_MEMBERSHIPS) || (defined(HAVE_DECL_NETLINK_LIST_MEMBERSHIPS) && HAVE_DECL_NETLINK_LIST_MEMBERSHIPS))
-# define NETLINK_LIST_MEMBERSHIPS 9
-#endif
-#if !(defined(NETLINK_CAP_ACK) || (defined(HAVE_DECL_NETLINK_CAP_ACK) && HAVE_DECL_NETLINK_CAP_ACK))
-# define NETLINK_CAP_ACK 10
-#endif
-#if !(defined(NETLINK_EXT_ACK) || (defined(HAVE_DECL_NETLINK_EXT_ACK) && HAVE_DECL_NETLINK_EXT_ACK))
-# define NETLINK_EXT_ACK 11
-#endif
-
-#ifdef IN_MPERS
-
-# error static const struct xlat socknetlinkoptions in mpers mode
-
-#else
-
-static
-const struct xlat socknetlinkoptions[] = {
- XLAT(NETLINK_ADD_MEMBERSHIP),
- XLAT(NETLINK_DROP_MEMBERSHIP),
- XLAT(NETLINK_PKTINFO),
- XLAT(NETLINK_BROADCAST_ERROR),
- XLAT(NETLINK_NO_ENOBUFS),
- XLAT(NETLINK_RX_RING),
- XLAT(NETLINK_TX_RING),
- XLAT(NETLINK_LISTEN_ALL_NSID),
- XLAT(NETLINK_LIST_MEMBERSHIPS),
- XLAT(NETLINK_CAP_ACK),
- XLAT(NETLINK_EXT_ACK),
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/sockoptions.h b/xlat/sockoptions.h
deleted file mode 100644
index 6e99155..0000000
--- a/xlat/sockoptions.h
+++ /dev/null
@@ -1,228 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/sockoptions.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat sockoptions in mpers mode
-
-#else
-
-static
-const struct xlat sockoptions[] = {
-#if defined(SO_DEBUG) || (defined(HAVE_DECL_SO_DEBUG) && HAVE_DECL_SO_DEBUG)
-  XLAT(SO_DEBUG),
-#endif
-#if defined(SO_REUSEADDR) || (defined(HAVE_DECL_SO_REUSEADDR) && HAVE_DECL_SO_REUSEADDR)
-  XLAT(SO_REUSEADDR),
-#endif
-#if defined(SO_TYPE) || (defined(HAVE_DECL_SO_TYPE) && HAVE_DECL_SO_TYPE)
-  XLAT(SO_TYPE),
-#endif
-#if defined(SO_ERROR) || (defined(HAVE_DECL_SO_ERROR) && HAVE_DECL_SO_ERROR)
-  XLAT(SO_ERROR),
-#endif
-#if defined(SO_DONTROUTE) || (defined(HAVE_DECL_SO_DONTROUTE) && HAVE_DECL_SO_DONTROUTE)
-  XLAT(SO_DONTROUTE),
-#endif
-#if defined(SO_BROADCAST) || (defined(HAVE_DECL_SO_BROADCAST) && HAVE_DECL_SO_BROADCAST)
-  XLAT(SO_BROADCAST),
-#endif
-#if defined(SO_SNDBUF) || (defined(HAVE_DECL_SO_SNDBUF) && HAVE_DECL_SO_SNDBUF)
-  XLAT(SO_SNDBUF),
-#endif
-#if defined(SO_RCVBUF) || (defined(HAVE_DECL_SO_RCVBUF) && HAVE_DECL_SO_RCVBUF)
-  XLAT(SO_RCVBUF),
-#endif
-#if defined(SO_SNDBUFFORCE) || (defined(HAVE_DECL_SO_SNDBUFFORCE) && HAVE_DECL_SO_SNDBUFFORCE)
-  XLAT(SO_SNDBUFFORCE),
-#endif
-#if defined(SO_RCVBUFFORCE) || (defined(HAVE_DECL_SO_RCVBUFFORCE) && HAVE_DECL_SO_RCVBUFFORCE)
-  XLAT(SO_RCVBUFFORCE),
-#endif
-#if defined(SO_KEEPALIVE) || (defined(HAVE_DECL_SO_KEEPALIVE) && HAVE_DECL_SO_KEEPALIVE)
-  XLAT(SO_KEEPALIVE),
-#endif
-#if defined(SO_OOBINLINE) || (defined(HAVE_DECL_SO_OOBINLINE) && HAVE_DECL_SO_OOBINLINE)
-  XLAT(SO_OOBINLINE),
-#endif
-#if defined(SO_NO_CHECK) || (defined(HAVE_DECL_SO_NO_CHECK) && HAVE_DECL_SO_NO_CHECK)
-  XLAT(SO_NO_CHECK),
-#endif
-#if defined(SO_PRIORITY) || (defined(HAVE_DECL_SO_PRIORITY) && HAVE_DECL_SO_PRIORITY)
-  XLAT(SO_PRIORITY),
-#endif
-#if defined(SO_LINGER) || (defined(HAVE_DECL_SO_LINGER) && HAVE_DECL_SO_LINGER)
-  XLAT(SO_LINGER),
-#endif
-#if defined(SO_BSDCOMPAT) || (defined(HAVE_DECL_SO_BSDCOMPAT) && HAVE_DECL_SO_BSDCOMPAT)
-  XLAT(SO_BSDCOMPAT),
-#endif
-#if defined(SO_REUSEPORT) || (defined(HAVE_DECL_SO_REUSEPORT) && HAVE_DECL_SO_REUSEPORT)
-  XLAT(SO_REUSEPORT),
-#endif
-#if defined(SO_PASSCRED) || (defined(HAVE_DECL_SO_PASSCRED) && HAVE_DECL_SO_PASSCRED)
-  XLAT(SO_PASSCRED),
-#endif
-#if defined(SO_PEERCRED) || (defined(HAVE_DECL_SO_PEERCRED) && HAVE_DECL_SO_PEERCRED)
-  XLAT(SO_PEERCRED),
-#endif
-#if defined(SO_RCVLOWAT) || (defined(HAVE_DECL_SO_RCVLOWAT) && HAVE_DECL_SO_RCVLOWAT)
-  XLAT(SO_RCVLOWAT),
-#endif
-#if defined(SO_SNDLOWAT) || (defined(HAVE_DECL_SO_SNDLOWAT) && HAVE_DECL_SO_SNDLOWAT)
-  XLAT(SO_SNDLOWAT),
-#endif
-#if defined(SO_RCVTIMEO) || (defined(HAVE_DECL_SO_RCVTIMEO) && HAVE_DECL_SO_RCVTIMEO)
-  XLAT(SO_RCVTIMEO),
-#endif
-#if defined(SO_SNDTIMEO) || (defined(HAVE_DECL_SO_SNDTIMEO) && HAVE_DECL_SO_SNDTIMEO)
-  XLAT(SO_SNDTIMEO),
-#endif
-#if defined(SO_SECURITY_AUTHENTICATION) || (defined(HAVE_DECL_SO_SECURITY_AUTHENTICATION) && HAVE_DECL_SO_SECURITY_AUTHENTICATION)
-  XLAT(SO_SECURITY_AUTHENTICATION),
-#endif
-#if defined(SO_SECURITY_ENCRYPTION_TRANSPORT) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT) && HAVE_DECL_SO_SECURITY_ENCRYPTION_TRANSPORT)
-  XLAT(SO_SECURITY_ENCRYPTION_TRANSPORT),
-#endif
-#if defined(SO_SECURITY_ENCRYPTION_NETWORK) || (defined(HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK) && HAVE_DECL_SO_SECURITY_ENCRYPTION_NETWORK)
-  XLAT(SO_SECURITY_ENCRYPTION_NETWORK),
-#endif
-#if defined(SO_BINDTODEVICE) || (defined(HAVE_DECL_SO_BINDTODEVICE) && HAVE_DECL_SO_BINDTODEVICE)
-  XLAT(SO_BINDTODEVICE),
-#endif
-#if defined(SO_ATTACH_FILTER) || (defined(HAVE_DECL_SO_ATTACH_FILTER) && HAVE_DECL_SO_ATTACH_FILTER)
-  XLAT(SO_ATTACH_FILTER),
-#endif
-#if defined(SO_GET_FILTER) || (defined(HAVE_DECL_SO_GET_FILTER) && HAVE_DECL_SO_GET_FILTER)
-  XLAT(SO_GET_FILTER),
-#endif
-#if defined(SO_DETACH_FILTER) || (defined(HAVE_DECL_SO_DETACH_FILTER) && HAVE_DECL_SO_DETACH_FILTER)
-  XLAT(SO_DETACH_FILTER),
-#endif
-#if defined(SO_DETACH_BPF) || (defined(HAVE_DECL_SO_DETACH_BPF) && HAVE_DECL_SO_DETACH_BPF)
-  XLAT(SO_DETACH_BPF),
-#endif
-#if defined(SO_PEERNAME) || (defined(HAVE_DECL_SO_PEERNAME) && HAVE_DECL_SO_PEERNAME)
-  XLAT(SO_PEERNAME),
-#endif
-#if defined(SO_TIMESTAMP) || (defined(HAVE_DECL_SO_TIMESTAMP) && HAVE_DECL_SO_TIMESTAMP)
-  XLAT(SO_TIMESTAMP),
-#endif
-#if defined(SO_ACCEPTCONN) || (defined(HAVE_DECL_SO_ACCEPTCONN) && HAVE_DECL_SO_ACCEPTCONN)
-  XLAT(SO_ACCEPTCONN),
-#endif
-#if defined(SO_PEERSEC) || (defined(HAVE_DECL_SO_PEERSEC) && HAVE_DECL_SO_PEERSEC)
-  XLAT(SO_PEERSEC),
-#endif
-#if defined(SO_PASSSEC) || (defined(HAVE_DECL_SO_PASSSEC) && HAVE_DECL_SO_PASSSEC)
-  XLAT(SO_PASSSEC),
-#endif
-#if defined(SO_TIMESTAMPNS) || (defined(HAVE_DECL_SO_TIMESTAMPNS) && HAVE_DECL_SO_TIMESTAMPNS)
-  XLAT(SO_TIMESTAMPNS),
-#endif
-#if defined(SO_MARK) || (defined(HAVE_DECL_SO_MARK) && HAVE_DECL_SO_MARK)
-  XLAT(SO_MARK),
-#endif
-#if defined(SO_TIMESTAMPING) || (defined(HAVE_DECL_SO_TIMESTAMPING) && HAVE_DECL_SO_TIMESTAMPING)
-  XLAT(SO_TIMESTAMPING),
-#endif
-#if defined(SO_PROTOCOL) || (defined(HAVE_DECL_SO_PROTOCOL) && HAVE_DECL_SO_PROTOCOL)
-  XLAT(SO_PROTOCOL),
-#endif
-#if defined(SO_DOMAIN) || (defined(HAVE_DECL_SO_DOMAIN) && HAVE_DECL_SO_DOMAIN)
-  XLAT(SO_DOMAIN),
-#endif
-#if defined(SO_RXQ_OVFL) || (defined(HAVE_DECL_SO_RXQ_OVFL) && HAVE_DECL_SO_RXQ_OVFL)
-  XLAT(SO_RXQ_OVFL),
-#endif
-#if defined(SO_WIFI_STATUS) || (defined(HAVE_DECL_SO_WIFI_STATUS) && HAVE_DECL_SO_WIFI_STATUS)
-  XLAT(SO_WIFI_STATUS),
-#endif
-#if defined(SO_PEEK_OFF) || (defined(HAVE_DECL_SO_PEEK_OFF) && HAVE_DECL_SO_PEEK_OFF)
-  XLAT(SO_PEEK_OFF),
-#endif
-#if defined(SO_NOFCS) || (defined(HAVE_DECL_SO_NOFCS) && HAVE_DECL_SO_NOFCS)
-  XLAT(SO_NOFCS),
-#endif
-#if defined(SO_LOCK_FILTER) || (defined(HAVE_DECL_SO_LOCK_FILTER) && HAVE_DECL_SO_LOCK_FILTER)
-  XLAT(SO_LOCK_FILTER),
-#endif
-#if defined(SO_SELECT_ERR_QUEUE) || (defined(HAVE_DECL_SO_SELECT_ERR_QUEUE) && HAVE_DECL_SO_SELECT_ERR_QUEUE)
-  XLAT(SO_SELECT_ERR_QUEUE),
-#endif
-#if defined(SO_BUSY_POLL) || (defined(HAVE_DECL_SO_BUSY_POLL) && HAVE_DECL_SO_BUSY_POLL)
-  XLAT(SO_BUSY_POLL),
-#endif
-#if defined(SO_MAX_PACING_RATE) || (defined(HAVE_DECL_SO_MAX_PACING_RATE) && HAVE_DECL_SO_MAX_PACING_RATE)
-  XLAT(SO_MAX_PACING_RATE),
-#endif
-#if defined(SO_BPF_EXTENSIONS) || (defined(HAVE_DECL_SO_BPF_EXTENSIONS) && HAVE_DECL_SO_BPF_EXTENSIONS)
-  XLAT(SO_BPF_EXTENSIONS),
-#endif
-#if defined(SO_INCOMING_CPU) || (defined(HAVE_DECL_SO_INCOMING_CPU) && HAVE_DECL_SO_INCOMING_CPU)
-  XLAT(SO_INCOMING_CPU),
-#endif
-#if defined(SO_ATTACH_BPF) || (defined(HAVE_DECL_SO_ATTACH_BPF) && HAVE_DECL_SO_ATTACH_BPF)
-  XLAT(SO_ATTACH_BPF),
-#endif
-#if defined(SO_ATTACH_REUSEPORT_CBPF) || (defined(HAVE_DECL_SO_ATTACH_REUSEPORT_CBPF) && HAVE_DECL_SO_ATTACH_REUSEPORT_CBPF)
-  XLAT(SO_ATTACH_REUSEPORT_CBPF),
-#endif
-#if defined(SO_ATTACH_REUSEPORT_EBPF) || (defined(HAVE_DECL_SO_ATTACH_REUSEPORT_EBPF) && HAVE_DECL_SO_ATTACH_REUSEPORT_EBPF)
-  XLAT(SO_ATTACH_REUSEPORT_EBPF),
-#endif
-#if defined(SO_CNX_ADVICE) || (defined(HAVE_DECL_SO_CNX_ADVICE) && HAVE_DECL_SO_CNX_ADVICE)
-  XLAT(SO_CNX_ADVICE),
-#endif
-#if defined(SO_MEMINFO) || (defined(HAVE_DECL_SO_MEMINFO) && HAVE_DECL_SO_MEMINFO)
-  XLAT(SO_MEMINFO),
-#endif
-#if defined(SO_INCOMING_NAPI_ID) || (defined(HAVE_DECL_SO_INCOMING_NAPI_ID) && HAVE_DECL_SO_INCOMING_NAPI_ID)
-  XLAT(SO_INCOMING_NAPI_ID),
-#endif
-#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_ZEROCOPY) || (defined(HAVE_DECL_SO_ZEROCOPY) && HAVE_DECL_SO_ZEROCOPY)
-  XLAT(SO_ZEROCOPY),
-#endif
-
-#if defined(SO_ALLRAW) || (defined(HAVE_DECL_SO_ALLRAW) && HAVE_DECL_SO_ALLRAW)
-  XLAT(SO_ALLRAW),
-#endif
-#if defined(SO_ICS) || (defined(HAVE_DECL_SO_ICS) && HAVE_DECL_SO_ICS)
-  XLAT(SO_ICS),
-#endif
-#if defined(SO_IMASOCKET) || (defined(HAVE_DECL_SO_IMASOCKET) && HAVE_DECL_SO_IMASOCKET)
-  XLAT(SO_IMASOCKET),
-#endif
-#if defined(SO_LISTENING) || (defined(HAVE_DECL_SO_LISTENING) && HAVE_DECL_SO_LISTENING)
-  XLAT(SO_LISTENING),
-#endif
-#if defined(SO_MGMT) || (defined(HAVE_DECL_SO_MGMT) && HAVE_DECL_SO_MGMT)
-  XLAT(SO_MGMT),
-#endif
-#if defined(SO_ORDREL) || (defined(HAVE_DECL_SO_ORDREL) && HAVE_DECL_SO_ORDREL)
-  XLAT(SO_ORDREL),
-#endif
-#if defined(SO_PARALLELSVR) || (defined(HAVE_DECL_SO_PARALLELSVR) && HAVE_DECL_SO_PARALLELSVR)
-  XLAT(SO_PARALLELSVR),
-#endif
-#if defined(SO_PROTOTYPE) || (defined(HAVE_DECL_SO_PROTOTYPE) && HAVE_DECL_SO_PROTOTYPE)
-  XLAT(SO_PROTOTYPE),
-#endif
-#if defined(SO_RDWR) || (defined(HAVE_DECL_SO_RDWR) && HAVE_DECL_SO_RDWR)
-  XLAT(SO_RDWR),
-#endif
-#if defined(SO_SEMA) || (defined(HAVE_DECL_SO_SEMA) && HAVE_DECL_SO_SEMA)
-  XLAT(SO_SEMA),
-#endif
-#if defined(SO_USELOOPBACK) || (defined(HAVE_DECL_SO_USELOOPBACK) && HAVE_DECL_SO_USELOOPBACK)
-  XLAT(SO_USELOOPBACK),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/sockpacketoptions.h b/xlat/sockpacketoptions.h
deleted file mode 100644
index ae4c5f4..0000000
--- a/xlat/sockpacketoptions.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/sockpacketoptions.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat sockpacketoptions in mpers mode
-
-#else
-
-static
-const struct xlat sockpacketoptions[] = {
-#if defined(PACKET_ADD_MEMBERSHIP) || (defined(HAVE_DECL_PACKET_ADD_MEMBERSHIP) && HAVE_DECL_PACKET_ADD_MEMBERSHIP)
-  XLAT(PACKET_ADD_MEMBERSHIP),
-#endif
-#if defined(PACKET_DROP_MEMBERSHIP) || (defined(HAVE_DECL_PACKET_DROP_MEMBERSHIP) && HAVE_DECL_PACKET_DROP_MEMBERSHIP)
-  XLAT(PACKET_DROP_MEMBERSHIP),
-#endif
-#if defined(PACKET_RECV_OUTPUT) || (defined(HAVE_DECL_PACKET_RECV_OUTPUT) && HAVE_DECL_PACKET_RECV_OUTPUT)
-  XLAT(PACKET_RECV_OUTPUT),
-#endif
-#if defined(PACKET_RX_RING) || (defined(HAVE_DECL_PACKET_RX_RING) && HAVE_DECL_PACKET_RX_RING)
-  XLAT(PACKET_RX_RING),
-#endif
-#if defined(PACKET_STATISTICS) || (defined(HAVE_DECL_PACKET_STATISTICS) && HAVE_DECL_PACKET_STATISTICS)
-  XLAT(PACKET_STATISTICS),
-#endif
-#if defined(PACKET_COPY_THRESH) || (defined(HAVE_DECL_PACKET_COPY_THRESH) && HAVE_DECL_PACKET_COPY_THRESH)
-  XLAT(PACKET_COPY_THRESH),
-#endif
-#if defined(PACKET_AUXDATA) || (defined(HAVE_DECL_PACKET_AUXDATA) && HAVE_DECL_PACKET_AUXDATA)
-  XLAT(PACKET_AUXDATA),
-#endif
-#if defined(PACKET_ORIGDEV) || (defined(HAVE_DECL_PACKET_ORIGDEV) && HAVE_DECL_PACKET_ORIGDEV)
-  XLAT(PACKET_ORIGDEV),
-#endif
-#if defined(PACKET_VERSION) || (defined(HAVE_DECL_PACKET_VERSION) && HAVE_DECL_PACKET_VERSION)
-  XLAT(PACKET_VERSION),
-#endif
-#if defined(PACKET_HDRLEN) || (defined(HAVE_DECL_PACKET_HDRLEN) && HAVE_DECL_PACKET_HDRLEN)
-  XLAT(PACKET_HDRLEN),
-#endif
-#if defined(PACKET_RESERVE) || (defined(HAVE_DECL_PACKET_RESERVE) && HAVE_DECL_PACKET_RESERVE)
-  XLAT(PACKET_RESERVE),
-#endif
-#if defined(PACKET_TX_RING) || (defined(HAVE_DECL_PACKET_TX_RING) && HAVE_DECL_PACKET_TX_RING)
-  XLAT(PACKET_TX_RING),
-#endif
-#if defined(PACKET_LOSS) || (defined(HAVE_DECL_PACKET_LOSS) && HAVE_DECL_PACKET_LOSS)
-  XLAT(PACKET_LOSS),
-#endif
-#if defined(PACKET_VNET_HDR) || (defined(HAVE_DECL_PACKET_VNET_HDR) && HAVE_DECL_PACKET_VNET_HDR)
-  XLAT(PACKET_VNET_HDR),
-#endif
-#if defined(PACKET_TX_TIMESTAMP) || (defined(HAVE_DECL_PACKET_TX_TIMESTAMP) && HAVE_DECL_PACKET_TX_TIMESTAMP)
-  XLAT(PACKET_TX_TIMESTAMP),
-#endif
-#if defined(PACKET_TIMESTAMP) || (defined(HAVE_DECL_PACKET_TIMESTAMP) && HAVE_DECL_PACKET_TIMESTAMP)
-  XLAT(PACKET_TIMESTAMP),
-#endif
-#if defined(PACKET_FANOUT) || (defined(HAVE_DECL_PACKET_FANOUT) && HAVE_DECL_PACKET_FANOUT)
-  XLAT(PACKET_FANOUT),
-#endif
-#if defined(PACKET_TX_HAS_OFF) || (defined(HAVE_DECL_PACKET_TX_HAS_OFF) && HAVE_DECL_PACKET_TX_HAS_OFF)
-  XLAT(PACKET_TX_HAS_OFF),
-#endif
-#if defined(PACKET_QDISC_BYPASS) || (defined(HAVE_DECL_PACKET_QDISC_BYPASS) && HAVE_DECL_PACKET_QDISC_BYPASS)
-  XLAT(PACKET_QDISC_BYPASS),
-#endif
-#if defined(PACKET_ROLLOVER_STATS) || (defined(HAVE_DECL_PACKET_ROLLOVER_STATS) && HAVE_DECL_PACKET_ROLLOVER_STATS)
-  XLAT(PACKET_ROLLOVER_STATS),
-#endif
-#if defined(PACKET_FANOUT_DATA) || (defined(HAVE_DECL_PACKET_FANOUT_DATA) && HAVE_DECL_PACKET_FANOUT_DATA)
-  XLAT(PACKET_FANOUT_DATA),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/sockrawoptions.h b/xlat/sockrawoptions.h
deleted file mode 100644
index 99868c8..0000000
--- a/xlat/sockrawoptions.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/sockrawoptions.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat sockrawoptions in mpers mode
-
-#else
-
-static
-const struct xlat sockrawoptions[] = {
-#if defined(ICMP_FILTER) || (defined(HAVE_DECL_ICMP_FILTER) && HAVE_DECL_ICMP_FILTER)
-  XLAT(ICMP_FILTER),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/socksctpoptions.h b/xlat/socksctpoptions.h
deleted file mode 100644
index 4041db3..0000000
--- a/xlat/socksctpoptions.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/socksctpoptions.in; do not edit. */
-#if !(defined(SCTP_RTOINFO) || (defined(HAVE_DECL_SCTP_RTOINFO) && HAVE_DECL_SCTP_RTOINFO))
-# define SCTP_RTOINFO 0
-#endif
-#if !(defined(SCTP_ASSOCINFO) || (defined(HAVE_DECL_SCTP_ASSOCINFO) && HAVE_DECL_SCTP_ASSOCINFO))
-# define SCTP_ASSOCINFO 1
-#endif
-#if !(defined(SCTP_INITMSG) || (defined(HAVE_DECL_SCTP_INITMSG) && HAVE_DECL_SCTP_INITMSG))
-# define SCTP_INITMSG 2
-#endif
-#if !(defined(SCTP_NODELAY) || (defined(HAVE_DECL_SCTP_NODELAY) && HAVE_DECL_SCTP_NODELAY))
-# define SCTP_NODELAY 3
-#endif
-#if !(defined(SCTP_AUTOCLOSE) || (defined(HAVE_DECL_SCTP_AUTOCLOSE) && HAVE_DECL_SCTP_AUTOCLOSE))
-# define SCTP_AUTOCLOSE 4
-#endif
-#if !(defined(SCTP_SET_PEER_PRIMARY_ADDR) || (defined(HAVE_DECL_SCTP_SET_PEER_PRIMARY_ADDR) && HAVE_DECL_SCTP_SET_PEER_PRIMARY_ADDR))
-# define SCTP_SET_PEER_PRIMARY_ADDR 5
-#endif
-#if !(defined(SCTP_PRIMARY_ADDR) || (defined(HAVE_DECL_SCTP_PRIMARY_ADDR) && HAVE_DECL_SCTP_PRIMARY_ADDR))
-# define SCTP_PRIMARY_ADDR 6
-#endif
-#if !(defined(SCTP_ADAPTATION_LAYER) || (defined(HAVE_DECL_SCTP_ADAPTATION_LAYER) && HAVE_DECL_SCTP_ADAPTATION_LAYER))
-# define SCTP_ADAPTATION_LAYER 7
-#endif
-#if !(defined(SCTP_DISABLE_FRAGMENTS) || (defined(HAVE_DECL_SCTP_DISABLE_FRAGMENTS) && HAVE_DECL_SCTP_DISABLE_FRAGMENTS))
-# define SCTP_DISABLE_FRAGMENTS 8
-#endif
-#if !(defined(SCTP_PEER_ADDR_PARAMS) || (defined(HAVE_DECL_SCTP_PEER_ADDR_PARAMS) && HAVE_DECL_SCTP_PEER_ADDR_PARAMS))
-# define SCTP_PEER_ADDR_PARAMS 9
-#endif
-#if !(defined(SCTP_DEFAULT_SEND_PARAM) || (defined(HAVE_DECL_SCTP_DEFAULT_SEND_PARAM) && HAVE_DECL_SCTP_DEFAULT_SEND_PARAM))
-# define SCTP_DEFAULT_SEND_PARAM 10
-#endif
-#if !(defined(SCTP_EVENTS) || (defined(HAVE_DECL_SCTP_EVENTS) && HAVE_DECL_SCTP_EVENTS))
-# define SCTP_EVENTS 11
-#endif
-#if !(defined(SCTP_I_WANT_MAPPED_V4_ADDR) || (defined(HAVE_DECL_SCTP_I_WANT_MAPPED_V4_ADDR) && HAVE_DECL_SCTP_I_WANT_MAPPED_V4_ADDR))
-# define SCTP_I_WANT_MAPPED_V4_ADDR 12
-#endif
-#if !(defined(SCTP_MAXSEG) || (defined(HAVE_DECL_SCTP_MAXSEG) && HAVE_DECL_SCTP_MAXSEG))
-# define SCTP_MAXSEG 13
-#endif
-#if !(defined(SCTP_STATUS) || (defined(HAVE_DECL_SCTP_STATUS) && HAVE_DECL_SCTP_STATUS))
-# define SCTP_STATUS 14
-#endif
-#if !(defined(SCTP_GET_PEER_ADDR_INFO) || (defined(HAVE_DECL_SCTP_GET_PEER_ADDR_INFO) && HAVE_DECL_SCTP_GET_PEER_ADDR_INFO))
-# define SCTP_GET_PEER_ADDR_INFO 15
-#endif
-#if !(defined(SCTP_DELAYED_SACK) || (defined(HAVE_DECL_SCTP_DELAYED_SACK) && HAVE_DECL_SCTP_DELAYED_SACK))
-# define SCTP_DELAYED_SACK 16
-#endif
-#if !(defined(SCTP_CONTEXT) || (defined(HAVE_DECL_SCTP_CONTEXT) && HAVE_DECL_SCTP_CONTEXT))
-# define SCTP_CONTEXT 17
-#endif
-#if !(defined(SCTP_FRAGMENT_INTERLEAVE) || (defined(HAVE_DECL_SCTP_FRAGMENT_INTERLEAVE) && HAVE_DECL_SCTP_FRAGMENT_INTERLEAVE))
-# define SCTP_FRAGMENT_INTERLEAVE 18
-#endif
-#if !(defined(SCTP_PARTIAL_DELIVERY_POINT) || (defined(HAVE_DECL_SCTP_PARTIAL_DELIVERY_POINT) && HAVE_DECL_SCTP_PARTIAL_DELIVERY_POINT))
-# define SCTP_PARTIAL_DELIVERY_POINT 19
-#endif
-#if !(defined(SCTP_MAX_BURST) || (defined(HAVE_DECL_SCTP_MAX_BURST) && HAVE_DECL_SCTP_MAX_BURST))
-# define SCTP_MAX_BURST 20
-#endif
-#if !(defined(SCTP_AUTH_CHUNK) || (defined(HAVE_DECL_SCTP_AUTH_CHUNK) && HAVE_DECL_SCTP_AUTH_CHUNK))
-# define SCTP_AUTH_CHUNK 21
-#endif
-#if !(defined(SCTP_HMAC_IDENT) || (defined(HAVE_DECL_SCTP_HMAC_IDENT) && HAVE_DECL_SCTP_HMAC_IDENT))
-# define SCTP_HMAC_IDENT 22
-#endif
-#if !(defined(SCTP_AUTH_KEY) || (defined(HAVE_DECL_SCTP_AUTH_KEY) && HAVE_DECL_SCTP_AUTH_KEY))
-# define SCTP_AUTH_KEY 23
-#endif
-#if !(defined(SCTP_AUTH_ACTIVE_KEY) || (defined(HAVE_DECL_SCTP_AUTH_ACTIVE_KEY) && HAVE_DECL_SCTP_AUTH_ACTIVE_KEY))
-# define SCTP_AUTH_ACTIVE_KEY 24
-#endif
-#if !(defined(SCTP_AUTH_DELETE_KEY) || (defined(HAVE_DECL_SCTP_AUTH_DELETE_KEY) && HAVE_DECL_SCTP_AUTH_DELETE_KEY))
-# define SCTP_AUTH_DELETE_KEY 25
-#endif
-#if !(defined(SCTP_PEER_AUTH_CHUNKS) || (defined(HAVE_DECL_SCTP_PEER_AUTH_CHUNKS) && HAVE_DECL_SCTP_PEER_AUTH_CHUNKS))
-# define SCTP_PEER_AUTH_CHUNKS 26
-#endif
-#if !(defined(SCTP_LOCAL_AUTH_CHUNKS) || (defined(HAVE_DECL_SCTP_LOCAL_AUTH_CHUNKS) && HAVE_DECL_SCTP_LOCAL_AUTH_CHUNKS))
-# define SCTP_LOCAL_AUTH_CHUNKS 27
-#endif
-#if !(defined(SCTP_GET_ASSOC_NUMBER) || (defined(HAVE_DECL_SCTP_GET_ASSOC_NUMBER) && HAVE_DECL_SCTP_GET_ASSOC_NUMBER))
-# define SCTP_GET_ASSOC_NUMBER 28
-#endif
-#if !(defined(SCTP_GET_ASSOC_ID_LIST) || (defined(HAVE_DECL_SCTP_GET_ASSOC_ID_LIST) && HAVE_DECL_SCTP_GET_ASSOC_ID_LIST))
-# define SCTP_GET_ASSOC_ID_LIST 29
-#endif
-#if !(defined(SCTP_AUTO_ASCONF) || (defined(HAVE_DECL_SCTP_AUTO_ASCONF) && HAVE_DECL_SCTP_AUTO_ASCONF))
-# define SCTP_AUTO_ASCONF 30
-#endif
-#if !(defined(SCTP_PEER_ADDR_THLDS) || (defined(HAVE_DECL_SCTP_PEER_ADDR_THLDS) && HAVE_DECL_SCTP_PEER_ADDR_THLDS))
-# define SCTP_PEER_ADDR_THLDS 31
-#endif
-#if !(defined(SCTP_RECVRCVINFO) || (defined(HAVE_DECL_SCTP_RECVRCVINFO) && HAVE_DECL_SCTP_RECVRCVINFO))
-# define SCTP_RECVRCVINFO 32
-#endif
-#if !(defined(SCTP_RECVNXTINFO) || (defined(HAVE_DECL_SCTP_RECVNXTINFO) && HAVE_DECL_SCTP_RECVNXTINFO))
-# define SCTP_RECVNXTINFO 33
-#endif
-#if !(defined(SCTP_DEFAULT_SNDINFO) || (defined(HAVE_DECL_SCTP_DEFAULT_SNDINFO) && HAVE_DECL_SCTP_DEFAULT_SNDINFO))
-# define SCTP_DEFAULT_SNDINFO 34
-#endif
-#if !(defined(SCTP_SOCKOPT_BINDX_ADD) || (defined(HAVE_DECL_SCTP_SOCKOPT_BINDX_ADD) && HAVE_DECL_SCTP_SOCKOPT_BINDX_ADD))
-# define SCTP_SOCKOPT_BINDX_ADD 100
-#endif
-#if !(defined(SCTP_SOCKOPT_BINDX_REM) || (defined(HAVE_DECL_SCTP_SOCKOPT_BINDX_REM) && HAVE_DECL_SCTP_SOCKOPT_BINDX_REM))
-# define SCTP_SOCKOPT_BINDX_REM 101
-#endif
-#if !(defined(SCTP_SOCKOPT_PEELOFF) || (defined(HAVE_DECL_SCTP_SOCKOPT_PEELOFF) && HAVE_DECL_SCTP_SOCKOPT_PEELOFF))
-# define SCTP_SOCKOPT_PEELOFF 102
-#endif
-#if !(defined(SCTP_GET_PEER_ADDRS_NUM_OLD) || (defined(HAVE_DECL_SCTP_GET_PEER_ADDRS_NUM_OLD) && HAVE_DECL_SCTP_GET_PEER_ADDRS_NUM_OLD))
-# define SCTP_GET_PEER_ADDRS_NUM_OLD 103
-#endif
-#if !(defined(SCTP_GET_PEER_ADDRS_OLD) || (defined(HAVE_DECL_SCTP_GET_PEER_ADDRS_OLD) && HAVE_DECL_SCTP_GET_PEER_ADDRS_OLD))
-# define SCTP_GET_PEER_ADDRS_OLD 104
-#endif
-#if !(defined(SCTP_GET_LOCAL_ADDRS_NUM_OLD) || (defined(HAVE_DECL_SCTP_GET_LOCAL_ADDRS_NUM_OLD) && HAVE_DECL_SCTP_GET_LOCAL_ADDRS_NUM_OLD))
-# define SCTP_GET_LOCAL_ADDRS_NUM_OLD 105
-#endif
-#if !(defined(SCTP_GET_LOCAL_ADDRS_OLD) || (defined(HAVE_DECL_SCTP_GET_LOCAL_ADDRS_OLD) && HAVE_DECL_SCTP_GET_LOCAL_ADDRS_OLD))
-# define SCTP_GET_LOCAL_ADDRS_OLD 106
-#endif
-#if !(defined(SCTP_SOCKOPT_CONNECTX_OLD) || (defined(HAVE_DECL_SCTP_SOCKOPT_CONNECTX_OLD) && HAVE_DECL_SCTP_SOCKOPT_CONNECTX_OLD))
-# define SCTP_SOCKOPT_CONNECTX_OLD 107
-#endif
-#if !(defined(SCTP_GET_PEER_ADDRS) || (defined(HAVE_DECL_SCTP_GET_PEER_ADDRS) && HAVE_DECL_SCTP_GET_PEER_ADDRS))
-# define SCTP_GET_PEER_ADDRS 108
-#endif
-#if !(defined(SCTP_GET_LOCAL_ADDRS) || (defined(HAVE_DECL_SCTP_GET_LOCAL_ADDRS) && HAVE_DECL_SCTP_GET_LOCAL_ADDRS))
-# define SCTP_GET_LOCAL_ADDRS 109
-#endif
-#if !(defined(SCTP_SOCKOPT_CONNECTX) || (defined(HAVE_DECL_SCTP_SOCKOPT_CONNECTX) && HAVE_DECL_SCTP_SOCKOPT_CONNECTX))
-# define SCTP_SOCKOPT_CONNECTX 110
-#endif
-#if !(defined(SCTP_SOCKOPT_CONNECTX3) || (defined(HAVE_DECL_SCTP_SOCKOPT_CONNECTX3) && HAVE_DECL_SCTP_SOCKOPT_CONNECTX3))
-# define SCTP_SOCKOPT_CONNECTX3 111
-#endif
-#if !(defined(SCTP_GET_ASSOC_STATS) || (defined(HAVE_DECL_SCTP_GET_ASSOC_STATS) && HAVE_DECL_SCTP_GET_ASSOC_STATS))
-# define SCTP_GET_ASSOC_STATS 112
-#endif
-#if !(defined(SCTP_PR_SUPPORTED) || (defined(HAVE_DECL_SCTP_PR_SUPPORTED) && HAVE_DECL_SCTP_PR_SUPPORTED))
-# define SCTP_PR_SUPPORTED 113
-#endif
-#if !(defined(SCTP_DEFAULT_PRINFO) || (defined(HAVE_DECL_SCTP_DEFAULT_PRINFO) && HAVE_DECL_SCTP_DEFAULT_PRINFO))
-# define SCTP_DEFAULT_PRINFO 114
-#endif
-#if !(defined(SCTP_PR_ASSOC_STATUS) || (defined(HAVE_DECL_SCTP_PR_ASSOC_STATUS) && HAVE_DECL_SCTP_PR_ASSOC_STATUS))
-# define SCTP_PR_ASSOC_STATUS 115
-#endif
-#if !(defined(SCTP_PR_STREAM_STATUS) || (defined(HAVE_DECL_SCTP_PR_STREAM_STATUS) && HAVE_DECL_SCTP_PR_STREAM_STATUS))
-# define SCTP_PR_STREAM_STATUS 116
-#endif
-#if !(defined(SCTP_RECONFIG_SUPPORTED) || (defined(HAVE_DECL_SCTP_RECONFIG_SUPPORTED) && HAVE_DECL_SCTP_RECONFIG_SUPPORTED))
-# define SCTP_RECONFIG_SUPPORTED 117
-#endif
-#if !(defined(SCTP_ENABLE_STREAM_RESET) || (defined(HAVE_DECL_SCTP_ENABLE_STREAM_RESET) && HAVE_DECL_SCTP_ENABLE_STREAM_RESET))
-# define SCTP_ENABLE_STREAM_RESET 118
-#endif
-#if !(defined(SCTP_RESET_STREAMS) || (defined(HAVE_DECL_SCTP_RESET_STREAMS) && HAVE_DECL_SCTP_RESET_STREAMS))
-# define SCTP_RESET_STREAMS 119
-#endif
-#if !(defined(SCTP_RESET_ASSOC) || (defined(HAVE_DECL_SCTP_RESET_ASSOC) && HAVE_DECL_SCTP_RESET_ASSOC))
-# define SCTP_RESET_ASSOC 120
-#endif
-#if !(defined(SCTP_ADD_STREAMS) || (defined(HAVE_DECL_SCTP_ADD_STREAMS) && HAVE_DECL_SCTP_ADD_STREAMS))
-# define SCTP_ADD_STREAMS 121
-#endif
-#if !(defined(SCTP_SOCKOPT_PEELOFF_FLAGS) || (defined(HAVE_DECL_SCTP_SOCKOPT_PEELOFF_FLAGS) && HAVE_DECL_SCTP_SOCKOPT_PEELOFF_FLAGS))
-# define SCTP_SOCKOPT_PEELOFF_FLAGS 122
-#endif
-#if !(defined(SCTP_STREAM_SCHEDULER) || (defined(HAVE_DECL_SCTP_STREAM_SCHEDULER) && HAVE_DECL_SCTP_STREAM_SCHEDULER))
-# define SCTP_STREAM_SCHEDULER 123
-#endif
-#if !(defined(SCTP_STREAM_SCHEDULER_VALUE) || (defined(HAVE_DECL_SCTP_STREAM_SCHEDULER_VALUE) && HAVE_DECL_SCTP_STREAM_SCHEDULER_VALUE))
-# define SCTP_STREAM_SCHEDULER_VALUE 124
-#endif
-#if !(defined(SCTP_INTERLEAVING_SUPPORTED) || (defined(HAVE_DECL_SCTP_INTERLEAVING_SUPPORTED) && HAVE_DECL_SCTP_INTERLEAVING_SUPPORTED))
-# define SCTP_INTERLEAVING_SUPPORTED 125
-#endif
-
-#ifdef IN_MPERS
-
-# error static const struct xlat socksctpoptions in mpers mode
-
-#else
-
-static
-const struct xlat socksctpoptions[] = {
- XLAT(SCTP_RTOINFO),
- XLAT(SCTP_ASSOCINFO),
- XLAT(SCTP_INITMSG),
- XLAT(SCTP_NODELAY),
- XLAT(SCTP_AUTOCLOSE),
- XLAT(SCTP_SET_PEER_PRIMARY_ADDR),
- XLAT(SCTP_PRIMARY_ADDR),
- XLAT(SCTP_ADAPTATION_LAYER),
- XLAT(SCTP_DISABLE_FRAGMENTS),
- XLAT(SCTP_PEER_ADDR_PARAMS),
- XLAT(SCTP_DEFAULT_SEND_PARAM),
- XLAT(SCTP_EVENTS),
- XLAT(SCTP_I_WANT_MAPPED_V4_ADDR),
- XLAT(SCTP_MAXSEG),
- XLAT(SCTP_STATUS),
- XLAT(SCTP_GET_PEER_ADDR_INFO),
- XLAT(SCTP_DELAYED_SACK),
- XLAT(SCTP_CONTEXT),
- XLAT(SCTP_FRAGMENT_INTERLEAVE),
- XLAT(SCTP_PARTIAL_DELIVERY_POINT),
- XLAT(SCTP_MAX_BURST),
- XLAT(SCTP_AUTH_CHUNK),
- XLAT(SCTP_HMAC_IDENT),
- XLAT(SCTP_AUTH_KEY),
- XLAT(SCTP_AUTH_ACTIVE_KEY),
- XLAT(SCTP_AUTH_DELETE_KEY),
- XLAT(SCTP_PEER_AUTH_CHUNKS),
- XLAT(SCTP_LOCAL_AUTH_CHUNKS),
- XLAT(SCTP_GET_ASSOC_NUMBER),
- XLAT(SCTP_GET_ASSOC_ID_LIST),
- XLAT(SCTP_AUTO_ASCONF),
- XLAT(SCTP_PEER_ADDR_THLDS),
- XLAT(SCTP_RECVRCVINFO),
- XLAT(SCTP_RECVNXTINFO),
- XLAT(SCTP_DEFAULT_SNDINFO),
-
- XLAT(SCTP_SOCKOPT_BINDX_ADD),
- XLAT(SCTP_SOCKOPT_BINDX_REM),
- XLAT(SCTP_SOCKOPT_PEELOFF),
- XLAT(SCTP_GET_PEER_ADDRS_NUM_OLD),
- XLAT(SCTP_GET_PEER_ADDRS_OLD),
- XLAT(SCTP_GET_LOCAL_ADDRS_NUM_OLD),
- XLAT(SCTP_GET_LOCAL_ADDRS_OLD),
- XLAT(SCTP_SOCKOPT_CONNECTX_OLD),
- XLAT(SCTP_GET_PEER_ADDRS),
- XLAT(SCTP_GET_LOCAL_ADDRS),
- XLAT(SCTP_SOCKOPT_CONNECTX),
- XLAT(SCTP_SOCKOPT_CONNECTX3),
- XLAT(SCTP_GET_ASSOC_STATS),
- XLAT(SCTP_PR_SUPPORTED),
- XLAT(SCTP_DEFAULT_PRINFO),
- XLAT(SCTP_PR_ASSOC_STATUS),
- XLAT(SCTP_PR_STREAM_STATUS),
- XLAT(SCTP_RECONFIG_SUPPORTED),
- XLAT(SCTP_ENABLE_STREAM_RESET),
- XLAT(SCTP_RESET_STREAMS),
- XLAT(SCTP_RESET_ASSOC),
- XLAT(SCTP_ADD_STREAMS),
- XLAT(SCTP_SOCKOPT_PEELOFF_FLAGS),
- XLAT(SCTP_STREAM_SCHEDULER),
- XLAT(SCTP_STREAM_SCHEDULER_VALUE),
- XLAT(SCTP_INTERLEAVING_SUPPORTED),
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/socktcpoptions.h b/xlat/socktcpoptions.h
deleted file mode 100644
index 55d6fd0..0000000
--- a/xlat/socktcpoptions.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Generated by ./xlat/gen.sh from ./xlat/socktcpoptions.in; do not edit. */
-
-#ifdef IN_MPERS
-
-# error static const struct xlat socktcpoptions in mpers mode
-
-#else
-
-static
-const struct xlat socktcpoptions[] = {
-#if defined(TCP_NODELAY) || (defined(HAVE_DECL_TCP_NODELAY) && HAVE_DECL_TCP_NODELAY)
-  XLAT(TCP_NODELAY),
-#endif
-#if defined(TCP_MAXSEG) || (defined(HAVE_DECL_TCP_MAXSEG) && HAVE_DECL_TCP_MAXSEG)
-  XLAT(TCP_MAXSEG),
-#endif
-#if defined(TCP_CORK) || (defined(HAVE_DECL_TCP_CORK) && HAVE_DECL_TCP_CORK)
-  XLAT(TCP_CORK),
-#endif
-#if defined(TCP_KEEPIDLE) || (defined(HAVE_DECL_TCP_KEEPIDLE) && HAVE_DECL_TCP_KEEPIDLE)
-  XLAT(TCP_KEEPIDLE),
-#endif
-#if defined(TCP_KEEPINTVL) || (defined(HAVE_DECL_TCP_KEEPINTVL) && HAVE_DECL_TCP_KEEPINTVL)
-  XLAT(TCP_KEEPINTVL),
-#endif
-#if defined(TCP_KEEPCNT) || (defined(HAVE_DECL_TCP_KEEPCNT) && HAVE_DECL_TCP_KEEPCNT)
-  XLAT(TCP_KEEPCNT),
-#endif
-#if defined(TCP_SYNCNT) || (defined(HAVE_DECL_TCP_SYNCNT) && HAVE_DECL_TCP_SYNCNT)
-  XLAT(TCP_SYNCNT),
-#endif
-#if defined(TCP_LINGER2) || (defined(HAVE_DECL_TCP_LINGER2) && HAVE_DECL_TCP_LINGER2)
-  XLAT(TCP_LINGER2),
-#endif
-#if defined(TCP_DEFER_ACCEPT) || (defined(HAVE_DECL_TCP_DEFER_ACCEPT) && HAVE_DECL_TCP_DEFER_ACCEPT)
-  XLAT(TCP_DEFER_ACCEPT),
-#endif
-#if defined(TCP_WINDOW_CLAMP) || (defined(HAVE_DECL_TCP_WINDOW_CLAMP) && HAVE_DECL_TCP_WINDOW_CLAMP)
-  XLAT(TCP_WINDOW_CLAMP),
-#endif
-#if defined(TCP_INFO) || (defined(HAVE_DECL_TCP_INFO) && HAVE_DECL_TCP_INFO)
-  XLAT(TCP_INFO),
-#endif
-#if defined(TCP_QUICKACK) || (defined(HAVE_DECL_TCP_QUICKACK) && HAVE_DECL_TCP_QUICKACK)
-  XLAT(TCP_QUICKACK),
-#endif
-#if defined(TCP_CONGESTION) || (defined(HAVE_DECL_TCP_CONGESTION) && HAVE_DECL_TCP_CONGESTION)
-  XLAT(TCP_CONGESTION),
-#endif
-#if defined(TCP_MD5SIG) || (defined(HAVE_DECL_TCP_MD5SIG) && HAVE_DECL_TCP_MD5SIG)
-  XLAT(TCP_MD5SIG),
-#endif
-#if defined(TCP_COOKIE_TRANSACTIONS) || (defined(HAVE_DECL_TCP_COOKIE_TRANSACTIONS) && HAVE_DECL_TCP_COOKIE_TRANSACTIONS)
-  XLAT(TCP_COOKIE_TRANSACTIONS),
-#endif
-#if defined(TCP_THIN_LINEAR_TIMEOUTS) || (defined(HAVE_DECL_TCP_THIN_LINEAR_TIMEOUTS) && HAVE_DECL_TCP_THIN_LINEAR_TIMEOUTS)
-  XLAT(TCP_THIN_LINEAR_TIMEOUTS),
-#endif
-#if defined(TCP_THIN_DUPACK) || (defined(HAVE_DECL_TCP_THIN_DUPACK) && HAVE_DECL_TCP_THIN_DUPACK)
-  XLAT(TCP_THIN_DUPACK),
-#endif
-#if defined(TCP_USER_TIMEOUT) || (defined(HAVE_DECL_TCP_USER_TIMEOUT) && HAVE_DECL_TCP_USER_TIMEOUT)
-  XLAT(TCP_USER_TIMEOUT),
-#endif
-#if defined(TCP_REPAIR) || (defined(HAVE_DECL_TCP_REPAIR) && HAVE_DECL_TCP_REPAIR)
-  XLAT(TCP_REPAIR),
-#endif
-#if defined(TCP_REPAIR_QUEUE) || (defined(HAVE_DECL_TCP_REPAIR_QUEUE) && HAVE_DECL_TCP_REPAIR_QUEUE)
-  XLAT(TCP_REPAIR_QUEUE),
-#endif
-#if defined(TCP_QUEUE_SEQ) || (defined(HAVE_DECL_TCP_QUEUE_SEQ) && HAVE_DECL_TCP_QUEUE_SEQ)
-  XLAT(TCP_QUEUE_SEQ),
-#endif
-#if defined(TCP_REPAIR_OPTIONS) || (defined(HAVE_DECL_TCP_REPAIR_OPTIONS) && HAVE_DECL_TCP_REPAIR_OPTIONS)
-  XLAT(TCP_REPAIR_OPTIONS),
-#endif
-#if defined(TCP_FASTOPEN) || (defined(HAVE_DECL_TCP_FASTOPEN) && HAVE_DECL_TCP_FASTOPEN)
-  XLAT(TCP_FASTOPEN),
-#endif
-#if defined(TCP_TIMESTAMP) || (defined(HAVE_DECL_TCP_TIMESTAMP) && HAVE_DECL_TCP_TIMESTAMP)
-  XLAT(TCP_TIMESTAMP),
-#endif
-#if defined(TCP_NOTSENT_LOWAT) || (defined(HAVE_DECL_TCP_NOTSENT_LOWAT) && HAVE_DECL_TCP_NOTSENT_LOWAT)
-  XLAT(TCP_NOTSENT_LOWAT),
-#endif
-#if defined(TCP_CC_INFO) || (defined(HAVE_DECL_TCP_CC_INFO) && HAVE_DECL_TCP_CC_INFO)
-  XLAT(TCP_CC_INFO),
-#endif
-#if defined(TCP_SAVE_SYN) || (defined(HAVE_DECL_TCP_SAVE_SYN) && HAVE_DECL_TCP_SAVE_SYN)
-  XLAT(TCP_SAVE_SYN),
-#endif
-#if defined(TCP_SAVED_SYN) || (defined(HAVE_DECL_TCP_SAVED_SYN) && HAVE_DECL_TCP_SAVED_SYN)
-  XLAT(TCP_SAVED_SYN),
-#endif
-#if defined(TCP_REPAIR_WINDOW) || (defined(HAVE_DECL_TCP_REPAIR_WINDOW) && HAVE_DECL_TCP_REPAIR_WINDOW)
-  XLAT(TCP_REPAIR_WINDOW),
-#endif
-#if defined(TCP_FASTOPEN_CONNECT) || (defined(HAVE_DECL_TCP_FASTOPEN_CONNECT) && HAVE_DECL_TCP_FASTOPEN_CONNECT)
-  XLAT(TCP_FASTOPEN_CONNECT),
-#endif
-#if defined(TCP_ULP) || (defined(HAVE_DECL_TCP_ULP) && HAVE_DECL_TCP_ULP)
-  XLAT(TCP_ULP),
-#endif
-#if defined(TCP_MD5SIG_EXT) || (defined(HAVE_DECL_TCP_MD5SIG_EXT) && HAVE_DECL_TCP_MD5SIG_EXT)
-  XLAT(TCP_MD5SIG_EXT),
-#endif
-#if defined(TCP_FASTOPEN_KEY) || (defined(HAVE_DECL_TCP_FASTOPEN_KEY) && HAVE_DECL_TCP_FASTOPEN_KEY)
-  XLAT(TCP_FASTOPEN_KEY),
-#endif
-#if defined(TCP_FASTOPEN_NO_COOKIE) || (defined(HAVE_DECL_TCP_FASTOPEN_NO_COOKIE) && HAVE_DECL_TCP_FASTOPEN_NO_COOKIE)
-  XLAT(TCP_FASTOPEN_NO_COOKIE),
-#endif
- XLAT_END
-};
-
-#endif /* !IN_MPERS */
diff --git a/xlat/socktypes.h b/xlat/socktypes.h
index 8ca50dc..208c172 100644
--- a/xlat/socktypes.h
+++ b/xlat/socktypes.h
@@ -1,6 +1,12 @@
 /* Generated by ./xlat/gen.sh from ./xlat/socktypes.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat socktypes[] = {
 #if defined(SOCK_STREAM) || (defined(HAVE_DECL_SOCK_STREAM) && HAVE_DECL_SOCK_STREAM)
@@ -27,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sparc_kern_features.h b/xlat/sparc_kern_features.h
index fbd4929..0cc647c 100644
--- a/xlat/sparc_kern_features.h
+++ b/xlat/sparc_kern_features.h
@@ -1,13 +1,23 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sparc_kern_features.in; do not edit. */
-#if !(defined(KERN_FEATURE_MIXED_MODE_STACK) || (defined(HAVE_DECL_KERN_FEATURE_MIXED_MODE_STACK) && HAVE_DECL_KERN_FEATURE_MIXED_MODE_STACK))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(KERN_FEATURE_MIXED_MODE_STACK) || (defined(HAVE_DECL_KERN_FEATURE_MIXED_MODE_STACK) && HAVE_DECL_KERN_FEATURE_MIXED_MODE_STACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((KERN_FEATURE_MIXED_MODE_STACK) == (1), "KERN_FEATURE_MIXED_MODE_STACK != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define KERN_FEATURE_MIXED_MODE_STACK 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat sparc_kern_features in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat sparc_kern_features in mpers mode
+
+# else
 
 static
 const struct xlat sparc_kern_features[] = {
@@ -15,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/splice_flags.h b/xlat/splice_flags.h
index 5d30583..e011833 100644
--- a/xlat/splice_flags.h
+++ b/xlat/splice_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/splice_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat splice_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat splice_flags in mpers mode
+
+# else
 
 static
 const struct xlat splice_flags[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sram_alloc_flags.h b/xlat/sram_alloc_flags.h
index 009324f..0c9a9c0 100644
--- a/xlat/sram_alloc_flags.h
+++ b/xlat/sram_alloc_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sram_alloc_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sram_alloc_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sram_alloc_flags in mpers mode
+
+# else
 
 static
 const struct xlat sram_alloc_flags[] = {
@@ -26,4 +32,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/statfs_flags.h b/xlat/statfs_flags.h
index 149f57f..caf6063 100644
--- a/xlat/statfs_flags.h
+++ b/xlat/statfs_flags.h
@@ -1,40 +1,86 @@
 /* Generated by ./xlat/gen.sh from ./xlat/statfs_flags.in; do not edit. */
-#if !(defined(ST_VALID) || (defined(HAVE_DECL_ST_VALID) && HAVE_DECL_ST_VALID))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(ST_VALID) || (defined(HAVE_DECL_ST_VALID) && HAVE_DECL_ST_VALID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_VALID) == (0x0020), "ST_VALID != 0x0020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_VALID 0x0020
 #endif
-#if !(defined(ST_RDONLY) || (defined(HAVE_DECL_ST_RDONLY) && HAVE_DECL_ST_RDONLY))
+#if defined(ST_RDONLY) || (defined(HAVE_DECL_ST_RDONLY) && HAVE_DECL_ST_RDONLY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_RDONLY) == (0x0001), "ST_RDONLY != 0x0001");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_RDONLY 0x0001
 #endif
-#if !(defined(ST_NOSUID) || (defined(HAVE_DECL_ST_NOSUID) && HAVE_DECL_ST_NOSUID))
+#if defined(ST_NOSUID) || (defined(HAVE_DECL_ST_NOSUID) && HAVE_DECL_ST_NOSUID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_NOSUID) == (0x0002), "ST_NOSUID != 0x0002");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_NOSUID 0x0002
 #endif
-#if !(defined(ST_NODEV) || (defined(HAVE_DECL_ST_NODEV) && HAVE_DECL_ST_NODEV))
+#if defined(ST_NODEV) || (defined(HAVE_DECL_ST_NODEV) && HAVE_DECL_ST_NODEV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_NODEV) == (0x0004), "ST_NODEV != 0x0004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_NODEV 0x0004
 #endif
-#if !(defined(ST_NOEXEC) || (defined(HAVE_DECL_ST_NOEXEC) && HAVE_DECL_ST_NOEXEC))
+#if defined(ST_NOEXEC) || (defined(HAVE_DECL_ST_NOEXEC) && HAVE_DECL_ST_NOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_NOEXEC) == (0x0008), "ST_NOEXEC != 0x0008");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_NOEXEC 0x0008
 #endif
-#if !(defined(ST_SYNCHRONOUS) || (defined(HAVE_DECL_ST_SYNCHRONOUS) && HAVE_DECL_ST_SYNCHRONOUS))
+#if defined(ST_SYNCHRONOUS) || (defined(HAVE_DECL_ST_SYNCHRONOUS) && HAVE_DECL_ST_SYNCHRONOUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_SYNCHRONOUS) == (0x0010), "ST_SYNCHRONOUS != 0x0010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_SYNCHRONOUS 0x0010
 #endif
-#if !(defined(ST_MANDLOCK) || (defined(HAVE_DECL_ST_MANDLOCK) && HAVE_DECL_ST_MANDLOCK))
+#if defined(ST_MANDLOCK) || (defined(HAVE_DECL_ST_MANDLOCK) && HAVE_DECL_ST_MANDLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_MANDLOCK) == (0x0040), "ST_MANDLOCK != 0x0040");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_MANDLOCK 0x0040
 #endif
-#if !(defined(ST_NOATIME) || (defined(HAVE_DECL_ST_NOATIME) && HAVE_DECL_ST_NOATIME))
+#if defined(ST_NOATIME) || (defined(HAVE_DECL_ST_NOATIME) && HAVE_DECL_ST_NOATIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_NOATIME) == (0x0400), "ST_NOATIME != 0x0400");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_NOATIME 0x0400
 #endif
-#if !(defined(ST_NODIRATIME) || (defined(HAVE_DECL_ST_NODIRATIME) && HAVE_DECL_ST_NODIRATIME))
+#if defined(ST_NODIRATIME) || (defined(HAVE_DECL_ST_NODIRATIME) && HAVE_DECL_ST_NODIRATIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_NODIRATIME) == (0x0800), "ST_NODIRATIME != 0x0800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_NODIRATIME 0x0800
 #endif
-#if !(defined(ST_RELATIME) || (defined(HAVE_DECL_ST_RELATIME) && HAVE_DECL_ST_RELATIME))
+#if defined(ST_RELATIME) || (defined(HAVE_DECL_ST_RELATIME) && HAVE_DECL_ST_RELATIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((ST_RELATIME) == (0x1000), "ST_RELATIME != 0x1000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define ST_RELATIME 0x1000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat statfs_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat statfs_flags in mpers mode
+
+# else
 
 static
 const struct xlat statfs_flags[] = {
@@ -51,4 +97,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/statx_attrs.h b/xlat/statx_attrs.h
index 20370af..849ec0e 100644
--- a/xlat/statx_attrs.h
+++ b/xlat/statx_attrs.h
@@ -1,28 +1,58 @@
 /* Generated by ./xlat/gen.sh from ./xlat/statx_attrs.in; do not edit. */
-#if !(defined(STATX_ATTR_COMPRESSED) || (defined(HAVE_DECL_STATX_ATTR_COMPRESSED) && HAVE_DECL_STATX_ATTR_COMPRESSED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(STATX_ATTR_COMPRESSED) || (defined(HAVE_DECL_STATX_ATTR_COMPRESSED) && HAVE_DECL_STATX_ATTR_COMPRESSED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_ATTR_COMPRESSED) == (0x00000004), "STATX_ATTR_COMPRESSED != 0x00000004");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_ATTR_COMPRESSED 0x00000004
 #endif
-#if !(defined(STATX_ATTR_IMMUTABLE) || (defined(HAVE_DECL_STATX_ATTR_IMMUTABLE) && HAVE_DECL_STATX_ATTR_IMMUTABLE))
+#if defined(STATX_ATTR_IMMUTABLE) || (defined(HAVE_DECL_STATX_ATTR_IMMUTABLE) && HAVE_DECL_STATX_ATTR_IMMUTABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_ATTR_IMMUTABLE) == (0x00000010), "STATX_ATTR_IMMUTABLE != 0x00000010");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_ATTR_IMMUTABLE 0x00000010
 #endif
-#if !(defined(STATX_ATTR_APPEND) || (defined(HAVE_DECL_STATX_ATTR_APPEND) && HAVE_DECL_STATX_ATTR_APPEND))
+#if defined(STATX_ATTR_APPEND) || (defined(HAVE_DECL_STATX_ATTR_APPEND) && HAVE_DECL_STATX_ATTR_APPEND)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_ATTR_APPEND) == (0x00000020), "STATX_ATTR_APPEND != 0x00000020");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_ATTR_APPEND 0x00000020
 #endif
-#if !(defined(STATX_ATTR_NODUMP) || (defined(HAVE_DECL_STATX_ATTR_NODUMP) && HAVE_DECL_STATX_ATTR_NODUMP))
+#if defined(STATX_ATTR_NODUMP) || (defined(HAVE_DECL_STATX_ATTR_NODUMP) && HAVE_DECL_STATX_ATTR_NODUMP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_ATTR_NODUMP) == (0x00000040), "STATX_ATTR_NODUMP != 0x00000040");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_ATTR_NODUMP 0x00000040
 #endif
-#if !(defined(STATX_ATTR_ENCRYPTED) || (defined(HAVE_DECL_STATX_ATTR_ENCRYPTED) && HAVE_DECL_STATX_ATTR_ENCRYPTED))
+#if defined(STATX_ATTR_ENCRYPTED) || (defined(HAVE_DECL_STATX_ATTR_ENCRYPTED) && HAVE_DECL_STATX_ATTR_ENCRYPTED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_ATTR_ENCRYPTED) == (0x00000800), "STATX_ATTR_ENCRYPTED != 0x00000800");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_ATTR_ENCRYPTED 0x00000800
 #endif
-#if !(defined(STATX_ATTR_AUTOMOUNT) || (defined(HAVE_DECL_STATX_ATTR_AUTOMOUNT) && HAVE_DECL_STATX_ATTR_AUTOMOUNT))
+#if defined(STATX_ATTR_AUTOMOUNT) || (defined(HAVE_DECL_STATX_ATTR_AUTOMOUNT) && HAVE_DECL_STATX_ATTR_AUTOMOUNT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_ATTR_AUTOMOUNT) == (0x00001000), "STATX_ATTR_AUTOMOUNT != 0x00001000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_ATTR_AUTOMOUNT 0x00001000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat statx_attrs in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat statx_attrs in mpers mode
+
+# else
 
 static
 const struct xlat statx_attrs[] = {
@@ -35,4 +65,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/statx_masks.h b/xlat/statx_masks.h
index 9e0f543..f94ee8a 100644
--- a/xlat/statx_masks.h
+++ b/xlat/statx_masks.h
@@ -1,52 +1,114 @@
 /* Generated by ./xlat/gen.sh from ./xlat/statx_masks.in; do not edit. */
-#if !(defined(STATX_ALL) || (defined(HAVE_DECL_STATX_ALL) && HAVE_DECL_STATX_ALL))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(STATX_ALL) || (defined(HAVE_DECL_STATX_ALL) && HAVE_DECL_STATX_ALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_ALL) == (0x00000fffU), "STATX_ALL != 0x00000fffU");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_ALL 0x00000fffU
 #endif
-#if !(defined(STATX_BASIC_STATS) || (defined(HAVE_DECL_STATX_BASIC_STATS) && HAVE_DECL_STATX_BASIC_STATS))
+#if defined(STATX_BASIC_STATS) || (defined(HAVE_DECL_STATX_BASIC_STATS) && HAVE_DECL_STATX_BASIC_STATS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_BASIC_STATS) == (0x000007ffU), "STATX_BASIC_STATS != 0x000007ffU");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_BASIC_STATS 0x000007ffU
 #endif
-#if !(defined(STATX_TYPE) || (defined(HAVE_DECL_STATX_TYPE) && HAVE_DECL_STATX_TYPE))
+#if defined(STATX_TYPE) || (defined(HAVE_DECL_STATX_TYPE) && HAVE_DECL_STATX_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_TYPE) == (0x00000001U), "STATX_TYPE != 0x00000001U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_TYPE 0x00000001U
 #endif
-#if !(defined(STATX_MODE) || (defined(HAVE_DECL_STATX_MODE) && HAVE_DECL_STATX_MODE))
+#if defined(STATX_MODE) || (defined(HAVE_DECL_STATX_MODE) && HAVE_DECL_STATX_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_MODE) == (0x00000002U), "STATX_MODE != 0x00000002U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_MODE 0x00000002U
 #endif
-#if !(defined(STATX_NLINK) || (defined(HAVE_DECL_STATX_NLINK) && HAVE_DECL_STATX_NLINK))
+#if defined(STATX_NLINK) || (defined(HAVE_DECL_STATX_NLINK) && HAVE_DECL_STATX_NLINK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_NLINK) == (0x00000004U), "STATX_NLINK != 0x00000004U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_NLINK 0x00000004U
 #endif
-#if !(defined(STATX_UID) || (defined(HAVE_DECL_STATX_UID) && HAVE_DECL_STATX_UID))
+#if defined(STATX_UID) || (defined(HAVE_DECL_STATX_UID) && HAVE_DECL_STATX_UID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_UID) == (0x00000008U), "STATX_UID != 0x00000008U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_UID 0x00000008U
 #endif
-#if !(defined(STATX_GID) || (defined(HAVE_DECL_STATX_GID) && HAVE_DECL_STATX_GID))
+#if defined(STATX_GID) || (defined(HAVE_DECL_STATX_GID) && HAVE_DECL_STATX_GID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_GID) == (0x00000010U), "STATX_GID != 0x00000010U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_GID 0x00000010U
 #endif
-#if !(defined(STATX_ATIME) || (defined(HAVE_DECL_STATX_ATIME) && HAVE_DECL_STATX_ATIME))
+#if defined(STATX_ATIME) || (defined(HAVE_DECL_STATX_ATIME) && HAVE_DECL_STATX_ATIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_ATIME) == (0x00000020U), "STATX_ATIME != 0x00000020U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_ATIME 0x00000020U
 #endif
-#if !(defined(STATX_MTIME) || (defined(HAVE_DECL_STATX_MTIME) && HAVE_DECL_STATX_MTIME))
+#if defined(STATX_MTIME) || (defined(HAVE_DECL_STATX_MTIME) && HAVE_DECL_STATX_MTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_MTIME) == (0x00000040U), "STATX_MTIME != 0x00000040U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_MTIME 0x00000040U
 #endif
-#if !(defined(STATX_CTIME) || (defined(HAVE_DECL_STATX_CTIME) && HAVE_DECL_STATX_CTIME))
+#if defined(STATX_CTIME) || (defined(HAVE_DECL_STATX_CTIME) && HAVE_DECL_STATX_CTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_CTIME) == (0x00000080U), "STATX_CTIME != 0x00000080U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_CTIME 0x00000080U
 #endif
-#if !(defined(STATX_INO) || (defined(HAVE_DECL_STATX_INO) && HAVE_DECL_STATX_INO))
+#if defined(STATX_INO) || (defined(HAVE_DECL_STATX_INO) && HAVE_DECL_STATX_INO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_INO) == (0x00000100U), "STATX_INO != 0x00000100U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_INO 0x00000100U
 #endif
-#if !(defined(STATX_SIZE) || (defined(HAVE_DECL_STATX_SIZE) && HAVE_DECL_STATX_SIZE))
+#if defined(STATX_SIZE) || (defined(HAVE_DECL_STATX_SIZE) && HAVE_DECL_STATX_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_SIZE) == (0x00000200U), "STATX_SIZE != 0x00000200U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_SIZE 0x00000200U
 #endif
-#if !(defined(STATX_BLOCKS) || (defined(HAVE_DECL_STATX_BLOCKS) && HAVE_DECL_STATX_BLOCKS))
+#if defined(STATX_BLOCKS) || (defined(HAVE_DECL_STATX_BLOCKS) && HAVE_DECL_STATX_BLOCKS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_BLOCKS) == (0x00000400U), "STATX_BLOCKS != 0x00000400U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_BLOCKS 0x00000400U
 #endif
-#if !(defined(STATX_BTIME) || (defined(HAVE_DECL_STATX_BTIME) && HAVE_DECL_STATX_BTIME))
+#if defined(STATX_BTIME) || (defined(HAVE_DECL_STATX_BTIME) && HAVE_DECL_STATX_BTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((STATX_BTIME) == (0x00000800U), "STATX_BTIME != 0x00000800U");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define STATX_BTIME 0x00000800U
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat statx_masks in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat statx_masks in mpers mode
+
+# else
 
 static
 const struct xlat statx_masks[] = {
@@ -68,4 +130,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/swap_flags.h b/xlat/swap_flags.h
index 9baec44..d03aa13 100644
--- a/xlat/swap_flags.h
+++ b/xlat/swap_flags.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/swap_flags.in; do not edit. */
-#if !(defined(SWAP_FLAG_PREFER) || (defined(HAVE_DECL_SWAP_FLAG_PREFER) && HAVE_DECL_SWAP_FLAG_PREFER))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SWAP_FLAG_PREFER) || (defined(HAVE_DECL_SWAP_FLAG_PREFER) && HAVE_DECL_SWAP_FLAG_PREFER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SWAP_FLAG_PREFER) == (0x8000), "SWAP_FLAG_PREFER != 0x8000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SWAP_FLAG_PREFER 0x8000
 #endif
-#if !(defined(SWAP_FLAG_DISCARD) || (defined(HAVE_DECL_SWAP_FLAG_DISCARD) && HAVE_DECL_SWAP_FLAG_DISCARD))
+#if defined(SWAP_FLAG_DISCARD) || (defined(HAVE_DECL_SWAP_FLAG_DISCARD) && HAVE_DECL_SWAP_FLAG_DISCARD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SWAP_FLAG_DISCARD) == (0x10000), "SWAP_FLAG_DISCARD != 0x10000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SWAP_FLAG_DISCARD 0x10000
 #endif
-#if !(defined(SWAP_FLAG_DISCARD_ONCE) || (defined(HAVE_DECL_SWAP_FLAG_DISCARD_ONCE) && HAVE_DECL_SWAP_FLAG_DISCARD_ONCE))
+#if defined(SWAP_FLAG_DISCARD_ONCE) || (defined(HAVE_DECL_SWAP_FLAG_DISCARD_ONCE) && HAVE_DECL_SWAP_FLAG_DISCARD_ONCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SWAP_FLAG_DISCARD_ONCE) == (0x20000), "SWAP_FLAG_DISCARD_ONCE != 0x20000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SWAP_FLAG_DISCARD_ONCE 0x20000
 #endif
-#if !(defined(SWAP_FLAG_DISCARD_PAGES) || (defined(HAVE_DECL_SWAP_FLAG_DISCARD_PAGES) && HAVE_DECL_SWAP_FLAG_DISCARD_PAGES))
+#if defined(SWAP_FLAG_DISCARD_PAGES) || (defined(HAVE_DECL_SWAP_FLAG_DISCARD_PAGES) && HAVE_DECL_SWAP_FLAG_DISCARD_PAGES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SWAP_FLAG_DISCARD_PAGES) == (0x40000), "SWAP_FLAG_DISCARD_PAGES != 0x40000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SWAP_FLAG_DISCARD_PAGES 0x40000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat swap_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat swap_flags in mpers mode
+
+# else
 
 static
 const struct xlat swap_flags[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sync_file_range_flags.h b/xlat/sync_file_range_flags.h
index 08d9ac1..2d7de90 100644
--- a/xlat/sync_file_range_flags.h
+++ b/xlat/sync_file_range_flags.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sync_file_range_flags.in; do not edit. */
-#if !(defined(SYNC_FILE_RANGE_WAIT_BEFORE) || (defined(HAVE_DECL_SYNC_FILE_RANGE_WAIT_BEFORE) && HAVE_DECL_SYNC_FILE_RANGE_WAIT_BEFORE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(SYNC_FILE_RANGE_WAIT_BEFORE) || (defined(HAVE_DECL_SYNC_FILE_RANGE_WAIT_BEFORE) && HAVE_DECL_SYNC_FILE_RANGE_WAIT_BEFORE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYNC_FILE_RANGE_WAIT_BEFORE) == (1), "SYNC_FILE_RANGE_WAIT_BEFORE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYNC_FILE_RANGE_WAIT_BEFORE 1
 #endif
-#if !(defined(SYNC_FILE_RANGE_WRITE) || (defined(HAVE_DECL_SYNC_FILE_RANGE_WRITE) && HAVE_DECL_SYNC_FILE_RANGE_WRITE))
+#if defined(SYNC_FILE_RANGE_WRITE) || (defined(HAVE_DECL_SYNC_FILE_RANGE_WRITE) && HAVE_DECL_SYNC_FILE_RANGE_WRITE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYNC_FILE_RANGE_WRITE) == (2), "SYNC_FILE_RANGE_WRITE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYNC_FILE_RANGE_WRITE 2
 #endif
-#if !(defined(SYNC_FILE_RANGE_WAIT_AFTER) || (defined(HAVE_DECL_SYNC_FILE_RANGE_WAIT_AFTER) && HAVE_DECL_SYNC_FILE_RANGE_WAIT_AFTER))
+#if defined(SYNC_FILE_RANGE_WAIT_AFTER) || (defined(HAVE_DECL_SYNC_FILE_RANGE_WAIT_AFTER) && HAVE_DECL_SYNC_FILE_RANGE_WAIT_AFTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((SYNC_FILE_RANGE_WAIT_AFTER) == (4), "SYNC_FILE_RANGE_WAIT_AFTER != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define SYNC_FILE_RANGE_WAIT_AFTER 4
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat sync_file_range_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat sync_file_range_flags in mpers mode
+
+# else
 
 static
 const struct xlat sync_file_range_flags[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_kern.h b/xlat/sysctl_kern.h
index b7276da..438dd95 100644
--- a/xlat/sysctl_kern.h
+++ b/xlat/sysctl_kern.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_kern.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_kern in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_kern in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_kern[] = {
@@ -111,4 +117,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_net.h b/xlat/sysctl_net.h
index 864c548..1e2b0c7 100644
--- a/xlat/sysctl_net.h
+++ b/xlat/sysctl_net.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_net.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_net in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_net in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_net[] = {
@@ -40,4 +46,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_net_core.h b/xlat/sysctl_net_core.h
index d3db06c..2cce965 100644
--- a/xlat/sysctl_net_core.h
+++ b/xlat/sysctl_net_core.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_net_core.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_net_core in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_net_core in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_net_core[] = {
@@ -43,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_net_ipv4.h b/xlat/sysctl_net_ipv4.h
index cd0a005..fdf0204 100644
--- a/xlat/sysctl_net_ipv4.h
+++ b/xlat/sysctl_net_ipv4.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_net_ipv4.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_net_ipv4 in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_net_ipv4 in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_net_ipv4[] = {
@@ -149,4 +155,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_net_ipv4_conf.h b/xlat/sysctl_net_ipv4_conf.h
index c9cd4dc..892df33 100644
--- a/xlat/sysctl_net_ipv4_conf.h
+++ b/xlat/sysctl_net_ipv4_conf.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_net_ipv4_conf.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_net_ipv4_conf in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_net_ipv4_conf in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_net_ipv4_conf[] = {
@@ -45,4 +51,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_net_ipv4_route.h b/xlat/sysctl_net_ipv4_route.h
index 91983e4..4cb40ad 100644
--- a/xlat/sysctl_net_ipv4_route.h
+++ b/xlat/sysctl_net_ipv4_route.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_net_ipv4_route.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_net_ipv4_route in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_net_ipv4_route in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_net_ipv4_route[] = {
@@ -32,4 +38,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_net_ipv6.h b/xlat/sysctl_net_ipv6.h
index c92a16c..06b6c45 100644
--- a/xlat/sysctl_net_ipv6.h
+++ b/xlat/sysctl_net_ipv6.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_net_ipv6.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_net_ipv6 in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_net_ipv6 in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_net_ipv6[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_net_ipv6_route.h b/xlat/sysctl_net_ipv6_route.h
index cc976ff..7bcf4bc 100644
--- a/xlat/sysctl_net_ipv6_route.h
+++ b/xlat/sysctl_net_ipv6_route.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_net_ipv6_route.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_net_ipv6_route in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_net_ipv6_route in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_net_ipv6_route[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_net_unix.h b/xlat/sysctl_net_unix.h
index c940dab..ea0043c 100644
--- a/xlat/sysctl_net_unix.h
+++ b/xlat/sysctl_net_unix.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_net_unix.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_net_unix in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_net_unix in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_net_unix[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_root.h b/xlat/sysctl_root.h
index 0d4b039..ddb7a2d 100644
--- a/xlat/sysctl_root.h
+++ b/xlat/sysctl_root.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_root.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_root in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_root in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_root[] = {
@@ -38,4 +44,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysctl_vm.h b/xlat/sysctl_vm.h
index 36896a2..bb86bd8 100644
--- a/xlat/sysctl_vm.h
+++ b/xlat/sysctl_vm.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysctl_vm.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysctl_vm in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysctl_vm in mpers mode
+
+# else
 
 static
 const struct xlat sysctl_vm[] = {
@@ -45,4 +51,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/syslog_action_type.h b/xlat/syslog_action_type.h
index b4f543f..6d1c7fd 100644
--- a/xlat/syslog_action_type.h
+++ b/xlat/syslog_action_type.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/syslog_action_type.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat syslog_action_type in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat syslog_action_type in mpers mode
+
+# else
 
 static
 const struct xlat syslog_action_type[] = {
@@ -22,4 +28,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/sysmips_operations.h b/xlat/sysmips_operations.h
index 107caa2..6e3b00c 100644
--- a/xlat/sysmips_operations.h
+++ b/xlat/sysmips_operations.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/sysmips_operations.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat sysmips_operations in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat sysmips_operations in mpers mode
+
+# else
 
 static
 const struct xlat sysmips_operations[] = {
@@ -26,4 +32,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/tcflsh_options.h b/xlat/tcflsh_options.h
index 5d67bb7..9730263 100644
--- a/xlat/tcflsh_options.h
+++ b/xlat/tcflsh_options.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/tcflsh_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat tcflsh_options in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat tcflsh_options in mpers mode
+
+# else
 
 static
 const struct xlat tcflsh_options[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/tcp_state_flags.h b/xlat/tcp_state_flags.h
index 34c8140..3f0cb8c 100644
--- a/xlat/tcp_state_flags.h
+++ b/xlat/tcp_state_flags.h
@@ -1,6 +1,12 @@
 /* Generated by ./xlat/gen.sh from ./xlat/tcp_state_flags.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat tcp_state_flags[] = {
 
@@ -43,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/tcp_states.h b/xlat/tcp_states.h
index 3559240..199b7f5 100644
--- a/xlat/tcp_states.h
+++ b/xlat/tcp_states.h
@@ -1,42 +1,96 @@
 /* Generated by ./xlat/gen.sh from ./xlat/tcp_states.in; do not edit. */
-#if !(defined(TCP_ESTABLISHED) || (defined(HAVE_DECL_TCP_ESTABLISHED) && HAVE_DECL_TCP_ESTABLISHED))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TCP_ESTABLISHED) || (defined(HAVE_DECL_TCP_ESTABLISHED) && HAVE_DECL_TCP_ESTABLISHED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_ESTABLISHED) == (1), "TCP_ESTABLISHED != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_ESTABLISHED 1
 #endif
-#if !(defined(TCP_SYN_SENT) || (defined(HAVE_DECL_TCP_SYN_SENT) && HAVE_DECL_TCP_SYN_SENT))
+#if defined(TCP_SYN_SENT) || (defined(HAVE_DECL_TCP_SYN_SENT) && HAVE_DECL_TCP_SYN_SENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_SYN_SENT) == (2), "TCP_SYN_SENT != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_SYN_SENT 2
 #endif
-#if !(defined(TCP_SYN_RECV) || (defined(HAVE_DECL_TCP_SYN_RECV) && HAVE_DECL_TCP_SYN_RECV))
+#if defined(TCP_SYN_RECV) || (defined(HAVE_DECL_TCP_SYN_RECV) && HAVE_DECL_TCP_SYN_RECV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_SYN_RECV) == (3), "TCP_SYN_RECV != 3");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_SYN_RECV 3
 #endif
-#if !(defined(TCP_FIN_WAIT1) || (defined(HAVE_DECL_TCP_FIN_WAIT1) && HAVE_DECL_TCP_FIN_WAIT1))
+#if defined(TCP_FIN_WAIT1) || (defined(HAVE_DECL_TCP_FIN_WAIT1) && HAVE_DECL_TCP_FIN_WAIT1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_FIN_WAIT1) == (4), "TCP_FIN_WAIT1 != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_FIN_WAIT1 4
 #endif
-#if !(defined(TCP_FIN_WAIT2) || (defined(HAVE_DECL_TCP_FIN_WAIT2) && HAVE_DECL_TCP_FIN_WAIT2))
+#if defined(TCP_FIN_WAIT2) || (defined(HAVE_DECL_TCP_FIN_WAIT2) && HAVE_DECL_TCP_FIN_WAIT2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_FIN_WAIT2) == (5), "TCP_FIN_WAIT2 != 5");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_FIN_WAIT2 5
 #endif
-#if !(defined(TCP_TIME_WAIT) || (defined(HAVE_DECL_TCP_TIME_WAIT) && HAVE_DECL_TCP_TIME_WAIT))
+#if defined(TCP_TIME_WAIT) || (defined(HAVE_DECL_TCP_TIME_WAIT) && HAVE_DECL_TCP_TIME_WAIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_TIME_WAIT) == (6), "TCP_TIME_WAIT != 6");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_TIME_WAIT 6
 #endif
-#if !(defined(TCP_CLOSE) || (defined(HAVE_DECL_TCP_CLOSE) && HAVE_DECL_TCP_CLOSE))
+#if defined(TCP_CLOSE) || (defined(HAVE_DECL_TCP_CLOSE) && HAVE_DECL_TCP_CLOSE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_CLOSE) == (7), "TCP_CLOSE != 7");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_CLOSE 7
 #endif
-#if !(defined(TCP_CLOSE_WAIT) || (defined(HAVE_DECL_TCP_CLOSE_WAIT) && HAVE_DECL_TCP_CLOSE_WAIT))
+#if defined(TCP_CLOSE_WAIT) || (defined(HAVE_DECL_TCP_CLOSE_WAIT) && HAVE_DECL_TCP_CLOSE_WAIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_CLOSE_WAIT) == (8), "TCP_CLOSE_WAIT != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_CLOSE_WAIT 8
 #endif
-#if !(defined(TCP_LAST_ACK) || (defined(HAVE_DECL_TCP_LAST_ACK) && HAVE_DECL_TCP_LAST_ACK))
+#if defined(TCP_LAST_ACK) || (defined(HAVE_DECL_TCP_LAST_ACK) && HAVE_DECL_TCP_LAST_ACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_LAST_ACK) == (9), "TCP_LAST_ACK != 9");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_LAST_ACK 9
 #endif
-#if !(defined(TCP_LISTEN) || (defined(HAVE_DECL_TCP_LISTEN) && HAVE_DECL_TCP_LISTEN))
+#if defined(TCP_LISTEN) || (defined(HAVE_DECL_TCP_LISTEN) && HAVE_DECL_TCP_LISTEN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_LISTEN) == (10), "TCP_LISTEN != 10");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_LISTEN 10
 #endif
-#if !(defined(TCP_CLOSING) || (defined(HAVE_DECL_TCP_CLOSING) && HAVE_DECL_TCP_CLOSING))
+#if defined(TCP_CLOSING) || (defined(HAVE_DECL_TCP_CLOSING) && HAVE_DECL_TCP_CLOSING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_CLOSING) == (11), "TCP_CLOSING != 11");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_CLOSING 11
 #endif
-#if !(defined(TCP_NEW_SYN_RECV) || (defined(HAVE_DECL_TCP_NEW_SYN_RECV) && HAVE_DECL_TCP_NEW_SYN_RECV))
+#if defined(TCP_NEW_SYN_RECV) || (defined(HAVE_DECL_TCP_NEW_SYN_RECV) && HAVE_DECL_TCP_NEW_SYN_RECV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TCP_NEW_SYN_RECV) == (12), "TCP_NEW_SYN_RECV != 12");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TCP_NEW_SYN_RECV 12
 #endif
 
-#ifndef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat tcp_states[] = {
  XLAT(TCP_ESTABLISHED),
@@ -54,4 +108,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/tcxonc_options.h b/xlat/tcxonc_options.h
index 83aae83..c259441 100644
--- a/xlat/tcxonc_options.h
+++ b/xlat/tcxonc_options.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/tcxonc_options.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat tcxonc_options in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat tcxonc_options in mpers mode
+
+# else
 
 static
 const struct xlat tcxonc_options[] = {
@@ -23,4 +29,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/timerfdflags.h b/xlat/timerfdflags.h
index 571f7ec..7d0f72b 100644
--- a/xlat/timerfdflags.h
+++ b/xlat/timerfdflags.h
@@ -1,24 +1,46 @@
 /* Generated by ./xlat/gen.sh from ./xlat/timerfdflags.in; do not edit. */
-#if !(defined(TFD_TIMER_ABSTIME) || (defined(HAVE_DECL_TFD_TIMER_ABSTIME) && HAVE_DECL_TFD_TIMER_ABSTIME))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(TFD_TIMER_ABSTIME) || (defined(HAVE_DECL_TFD_TIMER_ABSTIME) && HAVE_DECL_TFD_TIMER_ABSTIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TFD_TIMER_ABSTIME) == ((1 << 0)), "TFD_TIMER_ABSTIME != (1 << 0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TFD_TIMER_ABSTIME (1 << 0)
 #endif
-#if !(defined(TFD_TIMER_CANCEL_ON_SET) || (defined(HAVE_DECL_TFD_TIMER_CANCEL_ON_SET) && HAVE_DECL_TFD_TIMER_CANCEL_ON_SET))
+#if defined(TFD_TIMER_CANCEL_ON_SET) || (defined(HAVE_DECL_TFD_TIMER_CANCEL_ON_SET) && HAVE_DECL_TFD_TIMER_CANCEL_ON_SET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TFD_TIMER_CANCEL_ON_SET) == ((1 << 1)), "TFD_TIMER_CANCEL_ON_SET != (1 << 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TFD_TIMER_CANCEL_ON_SET (1 << 1)
 #endif
 #if defined TFD_CLOEXEC || defined O_CLOEXEC
-#if !(defined(TFD_CLOEXEC) || (defined(HAVE_DECL_TFD_CLOEXEC) && HAVE_DECL_TFD_CLOEXEC))
+#if defined(TFD_CLOEXEC) || (defined(HAVE_DECL_TFD_CLOEXEC) && HAVE_DECL_TFD_CLOEXEC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TFD_CLOEXEC) == (O_CLOEXEC), "TFD_CLOEXEC != O_CLOEXEC");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TFD_CLOEXEC O_CLOEXEC
 #endif
 #endif
-#if !(defined(TFD_NONBLOCK) || (defined(HAVE_DECL_TFD_NONBLOCK) && HAVE_DECL_TFD_NONBLOCK))
+#if defined(TFD_NONBLOCK) || (defined(HAVE_DECL_TFD_NONBLOCK) && HAVE_DECL_TFD_NONBLOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((TFD_NONBLOCK) == (O_NONBLOCK), "TFD_NONBLOCK != O_NONBLOCK");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define TFD_NONBLOCK O_NONBLOCK
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat timerfdflags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat timerfdflags in mpers mode
+
+# else
 
 static
 const struct xlat timerfdflags[] = {
@@ -33,4 +55,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/tun_device_types.h b/xlat/tun_device_types.h
new file mode 100644
index 0000000..a1bf5a1
--- /dev/null
+++ b/xlat/tun_device_types.h
@@ -0,0 +1,38 @@
+/* Generated by ./xlat/gen.sh from ./xlat/tun_device_types.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(IFF_TUN) || (defined(HAVE_DECL_IFF_TUN) && HAVE_DECL_IFF_TUN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_TUN) == (1), "IFF_TUN != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_TUN 1
+#endif
+#if defined(IFF_TAP) || (defined(HAVE_DECL_IFF_TAP) && HAVE_DECL_IFF_TAP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((IFF_TAP) == (2), "IFF_TAP != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define IFF_TAP 2
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat tun_device_types in mpers mode
+
+# else
+
+static
+const struct xlat tun_device_types[] = {
+ [IFF_TUN] = XLAT(IFF_TUN),
+ [IFF_TAP] = XLAT(IFF_TAP),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/tun_device_types.in b/xlat/tun_device_types.in
new file mode 100644
index 0000000..81af0bc
--- /dev/null
+++ b/xlat/tun_device_types.in
@@ -0,0 +1,3 @@
+#value_indexed
+IFF_TUN	1
+IFF_TAP 2
diff --git a/xlat/ubi_volume_props.h b/xlat/ubi_volume_props.h
index cfae600..fb7ca99 100644
--- a/xlat/ubi_volume_props.h
+++ b/xlat/ubi_volume_props.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ubi_volume_props.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ubi_volume_props in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ubi_volume_props in mpers mode
+
+# else
 
 static
 const struct xlat ubi_volume_props[] = {
@@ -12,4 +18,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/ubi_volume_types.h b/xlat/ubi_volume_types.h
index 0facbf2..77e8e6a 100644
--- a/xlat/ubi_volume_types.h
+++ b/xlat/ubi_volume_types.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/ubi_volume_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat ubi_volume_types in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat ubi_volume_types in mpers mode
+
+# else
 
 static
 const struct xlat ubi_volume_types[] = {
@@ -13,4 +19,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/uffd_api_features.h b/xlat/uffd_api_features.h
index 2ea3a9e..66ea2d2 100644
--- a/xlat/uffd_api_features.h
+++ b/xlat/uffd_api_features.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/uffd_api_features.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat uffd_api_features in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat uffd_api_features in mpers mode
+
+# else
 
 static
 const struct xlat uffd_api_features[] = {
@@ -38,4 +44,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/uffd_api_flags.h b/xlat/uffd_api_flags.h
index 4963ec4..7d0f929 100644
--- a/xlat/uffd_api_flags.h
+++ b/xlat/uffd_api_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/uffd_api_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat uffd_api_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat uffd_api_flags in mpers mode
+
+# else
 
 static
 const struct xlat uffd_api_flags[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/uffd_copy_flags.h b/xlat/uffd_copy_flags.h
index 669c1bb..1d45e6c 100644
--- a/xlat/uffd_copy_flags.h
+++ b/xlat/uffd_copy_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/uffd_copy_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat uffd_copy_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat uffd_copy_flags in mpers mode
+
+# else
 
 static
 const struct xlat uffd_copy_flags[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/uffd_flags.h b/xlat/uffd_flags.h
index 5fd260e..7180961 100644
--- a/xlat/uffd_flags.h
+++ b/xlat/uffd_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/uffd_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat uffd_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat uffd_flags in mpers mode
+
+# else
 
 static
 const struct xlat uffd_flags[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/uffd_register_ioctl_flags.h b/xlat/uffd_register_ioctl_flags.h
index 0c90f3c..affbb07 100644
--- a/xlat/uffd_register_ioctl_flags.h
+++ b/xlat/uffd_register_ioctl_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/uffd_register_ioctl_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat uffd_register_ioctl_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat uffd_register_ioctl_flags in mpers mode
+
+# else
 
 static
 const struct xlat uffd_register_ioctl_flags[] = {
@@ -20,4 +26,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/uffd_register_mode_flags.h b/xlat/uffd_register_mode_flags.h
index bfcae87..272e4db 100644
--- a/xlat/uffd_register_mode_flags.h
+++ b/xlat/uffd_register_mode_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/uffd_register_mode_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat uffd_register_mode_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat uffd_register_mode_flags in mpers mode
+
+# else
 
 static
 const struct xlat uffd_register_mode_flags[] = {
@@ -17,4 +23,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/uffd_zeropage_flags.h b/xlat/uffd_zeropage_flags.h
index 8367ff6..6d21fb0 100644
--- a/xlat/uffd_zeropage_flags.h
+++ b/xlat/uffd_zeropage_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/uffd_zeropage_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat uffd_zeropage_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat uffd_zeropage_flags in mpers mode
+
+# else
 
 static
 const struct xlat uffd_zeropage_flags[] = {
@@ -14,4 +20,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/umount_flags.h b/xlat/umount_flags.h
index 3219782..c81e661 100644
--- a/xlat/umount_flags.h
+++ b/xlat/umount_flags.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/umount_flags.in; do not edit. */
-#if !(defined(MNT_FORCE) || (defined(HAVE_DECL_MNT_FORCE) && HAVE_DECL_MNT_FORCE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(MNT_FORCE) || (defined(HAVE_DECL_MNT_FORCE) && HAVE_DECL_MNT_FORCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MNT_FORCE) == (1), "MNT_FORCE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MNT_FORCE 1
 #endif
-#if !(defined(MNT_DETACH) || (defined(HAVE_DECL_MNT_DETACH) && HAVE_DECL_MNT_DETACH))
+#if defined(MNT_DETACH) || (defined(HAVE_DECL_MNT_DETACH) && HAVE_DECL_MNT_DETACH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MNT_DETACH) == (2), "MNT_DETACH != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MNT_DETACH 2
 #endif
-#if !(defined(MNT_EXPIRE) || (defined(HAVE_DECL_MNT_EXPIRE) && HAVE_DECL_MNT_EXPIRE))
+#if defined(MNT_EXPIRE) || (defined(HAVE_DECL_MNT_EXPIRE) && HAVE_DECL_MNT_EXPIRE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((MNT_EXPIRE) == (4), "MNT_EXPIRE != 4");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define MNT_EXPIRE 4
 #endif
-#if !(defined(UMOUNT_NOFOLLOW) || (defined(HAVE_DECL_UMOUNT_NOFOLLOW) && HAVE_DECL_UMOUNT_NOFOLLOW))
+#if defined(UMOUNT_NOFOLLOW) || (defined(HAVE_DECL_UMOUNT_NOFOLLOW) && HAVE_DECL_UMOUNT_NOFOLLOW)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((UMOUNT_NOFOLLOW) == (8), "UMOUNT_NOFOLLOW != 8");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define UMOUNT_NOFOLLOW 8
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat umount_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat umount_flags in mpers mode
+
+# else
 
 static
 const struct xlat umount_flags[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/unix_diag_attrs.h b/xlat/unix_diag_attrs.h
index bc18d1d..3f626e0 100644
--- a/xlat/unix_diag_attrs.h
+++ b/xlat/unix_diag_attrs.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/unix_diag_attrs.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat unix_diag_attrs in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat unix_diag_attrs in mpers mode
+
+# else
 
 static
 const struct xlat unix_diag_attrs[] = {
@@ -18,4 +24,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/unix_diag_show.h b/xlat/unix_diag_show.h
index d3bb976..eee89fc 100644
--- a/xlat/unix_diag_show.h
+++ b/xlat/unix_diag_show.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/unix_diag_show.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat unix_diag_show in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat unix_diag_show in mpers mode
+
+# else
 
 static
 const struct xlat unix_diag_show[] = {
@@ -29,4 +35,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/unshare_flags.h b/xlat/unshare_flags.h
index 5c43ebc..ccbfb75 100644
--- a/xlat/unshare_flags.h
+++ b/xlat/unshare_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/unshare_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat unshare_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat unshare_flags in mpers mode
+
+# else
 
 static
 const struct xlat unshare_flags[] = {
@@ -50,4 +56,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/usagewho.h b/xlat/usagewho.h
index 8d46fc0..4b5ace4 100644
--- a/xlat/usagewho.h
+++ b/xlat/usagewho.h
@@ -1,22 +1,44 @@
 /* Generated by ./xlat/gen.sh from ./xlat/usagewho.in; do not edit. */
-#if !(defined(RUSAGE_SELF) || (defined(HAVE_DECL_RUSAGE_SELF) && HAVE_DECL_RUSAGE_SELF))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(RUSAGE_SELF) || (defined(HAVE_DECL_RUSAGE_SELF) && HAVE_DECL_RUSAGE_SELF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RUSAGE_SELF) == (0), "RUSAGE_SELF != 0");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RUSAGE_SELF 0
 #endif
-#if !(defined(RUSAGE_CHILDREN) || (defined(HAVE_DECL_RUSAGE_CHILDREN) && HAVE_DECL_RUSAGE_CHILDREN))
+#if defined(RUSAGE_CHILDREN) || (defined(HAVE_DECL_RUSAGE_CHILDREN) && HAVE_DECL_RUSAGE_CHILDREN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RUSAGE_CHILDREN) == ((-1)), "RUSAGE_CHILDREN != (-1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RUSAGE_CHILDREN (-1)
 #endif
-#if !(defined(RUSAGE_BOTH) || (defined(HAVE_DECL_RUSAGE_BOTH) && HAVE_DECL_RUSAGE_BOTH))
+#if defined(RUSAGE_BOTH) || (defined(HAVE_DECL_RUSAGE_BOTH) && HAVE_DECL_RUSAGE_BOTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RUSAGE_BOTH) == ((-2)), "RUSAGE_BOTH != (-2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RUSAGE_BOTH (-2)
 #endif
-#if !(defined(RUSAGE_THREAD) || (defined(HAVE_DECL_RUSAGE_THREAD) && HAVE_DECL_RUSAGE_THREAD))
+#if defined(RUSAGE_THREAD) || (defined(HAVE_DECL_RUSAGE_THREAD) && HAVE_DECL_RUSAGE_THREAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((RUSAGE_THREAD) == (1), "RUSAGE_THREAD != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define RUSAGE_THREAD 1
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat usagewho in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat usagewho in mpers mode
+
+# else
 
 static
 const struct xlat usagewho[] = {
@@ -27,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_buf_flags.h b/xlat/v4l2_buf_flags.h
index 05eb64d..6ae7216 100644
--- a/xlat/v4l2_buf_flags.h
+++ b/xlat/v4l2_buf_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_buf_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_buf_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_buf_flags[] = {
 #if defined(V4L2_BUF_FLAG_MAPPED) || (defined(HAVE_DECL_V4L2_BUF_FLAG_MAPPED) && HAVE_DECL_V4L2_BUF_FLAG_MAPPED)
   XLAT(V4L2_BUF_FLAG_MAPPED),
@@ -70,4 +76,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_buf_types.h b/xlat/v4l2_buf_types.h
index 5b206d9..a685c8c 100644
--- a/xlat/v4l2_buf_types.h
+++ b/xlat/v4l2_buf_types.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_buf_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_buf_types[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_buf_types[] = {
 #if defined(V4L2_BUF_TYPE_VIDEO_CAPTURE) || (defined(HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE) && HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE)
   XLAT(V4L2_BUF_TYPE_VIDEO_CAPTURE),
@@ -52,4 +58,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_capture_modes.h b/xlat/v4l2_capture_modes.h
index ea21949..74e1a6c 100644
--- a/xlat/v4l2_capture_modes.h
+++ b/xlat/v4l2_capture_modes.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_capture_modes.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_capture_modes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_capture_modes[] = {
 #if defined(V4L2_MODE_HIGHQUALITY) || (defined(HAVE_DECL_V4L2_MODE_HIGHQUALITY) && HAVE_DECL_V4L2_MODE_HIGHQUALITY)
   XLAT(V4L2_MODE_HIGHQUALITY),
@@ -16,4 +22,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_colorspaces.h b/xlat/v4l2_colorspaces.h
index 53d16e6..fad4dcd 100644
--- a/xlat/v4l2_colorspaces.h
+++ b/xlat/v4l2_colorspaces.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_colorspaces.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_colorspaces[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_colorspaces[] = {
 #if defined(V4L2_COLORSPACE_SMPTE170M) || (defined(HAVE_DECL_V4L2_COLORSPACE_SMPTE170M) && HAVE_DECL_V4L2_COLORSPACE_SMPTE170M)
   XLAT(V4L2_COLORSPACE_SMPTE170M),
@@ -49,4 +55,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_control_classes.h b/xlat/v4l2_control_classes.h
index 9ceb9c4..c1bb21d 100644
--- a/xlat/v4l2_control_classes.h
+++ b/xlat/v4l2_control_classes.h
@@ -1,43 +1,121 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_control_classes.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(V4L2_CTRL_CLASS_USER) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_USER) && HAVE_DECL_V4L2_CTRL_CLASS_USER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_USER) == (0x00980000), "V4L2_CTRL_CLASS_USER != 0x00980000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_USER 0x00980000
+#endif
+#if defined(V4L2_CTRL_CLASS_MPEG) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_MPEG) && HAVE_DECL_V4L2_CTRL_CLASS_MPEG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_MPEG) == (0x00990000), "V4L2_CTRL_CLASS_MPEG != 0x00990000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_MPEG 0x00990000
+#endif
+#if defined(V4L2_CTRL_CLASS_CAMERA) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_CAMERA) && HAVE_DECL_V4L2_CTRL_CLASS_CAMERA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_CAMERA) == (0x009a0000), "V4L2_CTRL_CLASS_CAMERA != 0x009a0000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_CAMERA 0x009a0000
+#endif
+#if defined(V4L2_CTRL_CLASS_FM_TX) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_FM_TX) && HAVE_DECL_V4L2_CTRL_CLASS_FM_TX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_FM_TX) == (0x009b0000), "V4L2_CTRL_CLASS_FM_TX != 0x009b0000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_FM_TX 0x009b0000
+#endif
+#if defined(V4L2_CTRL_CLASS_FLASH) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_FLASH) && HAVE_DECL_V4L2_CTRL_CLASS_FLASH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_FLASH) == (0x009c0000), "V4L2_CTRL_CLASS_FLASH != 0x009c0000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_FLASH 0x009c0000
+#endif
+#if defined(V4L2_CTRL_CLASS_JPEG) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_JPEG) && HAVE_DECL_V4L2_CTRL_CLASS_JPEG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_JPEG) == (0x009d0000), "V4L2_CTRL_CLASS_JPEG != 0x009d0000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_JPEG 0x009d0000
+#endif
+#if defined(V4L2_CTRL_CLASS_IMAGE_SOURCE) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_IMAGE_SOURCE) && HAVE_DECL_V4L2_CTRL_CLASS_IMAGE_SOURCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_IMAGE_SOURCE) == (0x009e0000), "V4L2_CTRL_CLASS_IMAGE_SOURCE != 0x009e0000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_IMAGE_SOURCE 0x009e0000
+#endif
+#if defined(V4L2_CTRL_CLASS_IMAGE_PROC) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_IMAGE_PROC) && HAVE_DECL_V4L2_CTRL_CLASS_IMAGE_PROC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_IMAGE_PROC) == (0x009f0000), "V4L2_CTRL_CLASS_IMAGE_PROC != 0x009f0000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_IMAGE_PROC 0x009f0000
+#endif
+#if defined(V4L2_CTRL_CLASS_DV) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_DV) && HAVE_DECL_V4L2_CTRL_CLASS_DV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_DV) == (0x00a00000), "V4L2_CTRL_CLASS_DV != 0x00a00000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_DV 0x00a00000
+#endif
+#if defined(V4L2_CTRL_CLASS_FM_RX) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_FM_RX) && HAVE_DECL_V4L2_CTRL_CLASS_FM_RX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_FM_RX) == (0x00a10000), "V4L2_CTRL_CLASS_FM_RX != 0x00a10000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_FM_RX 0x00a10000
+#endif
+#if defined(V4L2_CTRL_CLASS_RF_TUNER) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_RF_TUNER) && HAVE_DECL_V4L2_CTRL_CLASS_RF_TUNER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_RF_TUNER) == (0x00a20000), "V4L2_CTRL_CLASS_RF_TUNER != 0x00a20000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_RF_TUNER 0x00a20000
+#endif
+#if defined(V4L2_CTRL_CLASS_DETECT) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_DETECT) && HAVE_DECL_V4L2_CTRL_CLASS_DETECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CTRL_CLASS_DETECT) == (0x00a30000), "V4L2_CTRL_CLASS_DETECT != 0x00a30000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CTRL_CLASS_DETECT 0x00a30000
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_control_classes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_control_classes[] = {
-#if defined(V4L2_CTRL_CLASS_USER) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_USER) && HAVE_DECL_V4L2_CTRL_CLASS_USER)
-  XLAT(V4L2_CTRL_CLASS_USER),
-#endif
-#if defined(V4L2_CTRL_CLASS_MPEG) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_MPEG) && HAVE_DECL_V4L2_CTRL_CLASS_MPEG)
-  XLAT(V4L2_CTRL_CLASS_MPEG),
-#endif
-#if defined(V4L2_CTRL_CLASS_CAMERA) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_CAMERA) && HAVE_DECL_V4L2_CTRL_CLASS_CAMERA)
-  XLAT(V4L2_CTRL_CLASS_CAMERA),
-#endif
-#if defined(V4L2_CTRL_CLASS_FM_TX) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_FM_TX) && HAVE_DECL_V4L2_CTRL_CLASS_FM_TX)
-  XLAT(V4L2_CTRL_CLASS_FM_TX),
-#endif
-#if defined(V4L2_CTRL_CLASS_FLASH) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_FLASH) && HAVE_DECL_V4L2_CTRL_CLASS_FLASH)
-  XLAT(V4L2_CTRL_CLASS_FLASH),
-#endif
-#if defined(V4L2_CTRL_CLASS_JPEG) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_JPEG) && HAVE_DECL_V4L2_CTRL_CLASS_JPEG)
-  XLAT(V4L2_CTRL_CLASS_JPEG),
-#endif
-#if defined(V4L2_CTRL_CLASS_IMAGE_SOURCE) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_IMAGE_SOURCE) && HAVE_DECL_V4L2_CTRL_CLASS_IMAGE_SOURCE)
-  XLAT(V4L2_CTRL_CLASS_IMAGE_SOURCE),
-#endif
-#if defined(V4L2_CTRL_CLASS_IMAGE_PROC) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_IMAGE_PROC) && HAVE_DECL_V4L2_CTRL_CLASS_IMAGE_PROC)
-  XLAT(V4L2_CTRL_CLASS_IMAGE_PROC),
-#endif
-#if defined(V4L2_CTRL_CLASS_FM_RX) || (defined(HAVE_DECL_V4L2_CTRL_CLASS_FM_RX) && HAVE_DECL_V4L2_CTRL_CLASS_FM_RX)
-  XLAT(V4L2_CTRL_CLASS_FM_RX),
-#endif
+
+ XLAT(V4L2_CTRL_CLASS_USER),
+ XLAT(V4L2_CTRL_CLASS_MPEG),
+ XLAT(V4L2_CTRL_CLASS_CAMERA),
+ XLAT(V4L2_CTRL_CLASS_FM_TX),
+ XLAT(V4L2_CTRL_CLASS_FLASH),
+ XLAT(V4L2_CTRL_CLASS_JPEG),
+ XLAT(V4L2_CTRL_CLASS_IMAGE_SOURCE),
+ XLAT(V4L2_CTRL_CLASS_IMAGE_PROC),
+ XLAT(V4L2_CTRL_CLASS_DV),
+ XLAT(V4L2_CTRL_CLASS_FM_RX),
+ XLAT(V4L2_CTRL_CLASS_RF_TUNER),
+ XLAT(V4L2_CTRL_CLASS_DETECT),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_control_classes.in b/xlat/v4l2_control_classes.in
index 5666a06..adbf88e 100644
--- a/xlat/v4l2_control_classes.in
+++ b/xlat/v4l2_control_classes.in
@@ -1,9 +1,13 @@
-V4L2_CTRL_CLASS_USER
-V4L2_CTRL_CLASS_MPEG
-V4L2_CTRL_CLASS_CAMERA
-V4L2_CTRL_CLASS_FM_TX
-V4L2_CTRL_CLASS_FLASH
-V4L2_CTRL_CLASS_JPEG
-V4L2_CTRL_CLASS_IMAGE_SOURCE
-V4L2_CTRL_CLASS_IMAGE_PROC
-V4L2_CTRL_CLASS_FM_RX
+/* sort -k2,2 */
+V4L2_CTRL_CLASS_USER		0x00980000	/* Old-style 'user' controls */
+V4L2_CTRL_CLASS_MPEG		0x00990000	/* MPEG-compression controls */
+V4L2_CTRL_CLASS_CAMERA		0x009a0000	/* Camera class controls */
+V4L2_CTRL_CLASS_FM_TX		0x009b0000	/* FM Modulator controls */
+V4L2_CTRL_CLASS_FLASH		0x009c0000	/* Camera flash controls */
+V4L2_CTRL_CLASS_JPEG		0x009d0000	/* JPEG-compression controls */
+V4L2_CTRL_CLASS_IMAGE_SOURCE	0x009e0000	/* Image source controls */
+V4L2_CTRL_CLASS_IMAGE_PROC	0x009f0000	/* Image processing controls */
+V4L2_CTRL_CLASS_DV		0x00a00000	/* Digital Video controls */
+V4L2_CTRL_CLASS_FM_RX		0x00a10000	/* FM Receiver controls */
+V4L2_CTRL_CLASS_RF_TUNER	0x00a20000	/* RF tuner controls */
+V4L2_CTRL_CLASS_DETECT		0x00a30000	/* Detection controls */
diff --git a/xlat/v4l2_control_flags.h b/xlat/v4l2_control_flags.h
index f541971..00c6157 100644
--- a/xlat/v4l2_control_flags.h
+++ b/xlat/v4l2_control_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_control_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_control_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_control_flags[] = {
 #if defined(V4L2_CTRL_FLAG_DISABLED) || (defined(HAVE_DECL_V4L2_CTRL_FLAG_DISABLED) && HAVE_DECL_V4L2_CTRL_FLAG_DISABLED)
   XLAT(V4L2_CTRL_FLAG_DISABLED),
@@ -46,4 +52,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_control_id_bases.h b/xlat/v4l2_control_id_bases.h
new file mode 100644
index 0000000..e668d94
--- /dev/null
+++ b/xlat/v4l2_control_id_bases.h
@@ -0,0 +1,168 @@
+/* Generated by ./xlat/gen.sh from ./xlat/v4l2_control_id_bases.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(V4L2_CID_BASE) || (defined(HAVE_DECL_V4L2_CID_BASE) && HAVE_DECL_V4L2_CID_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_BASE) == ((V4L2_CTRL_CLASS_USER | 0x900)), "V4L2_CID_BASE != (V4L2_CTRL_CLASS_USER | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_BASE (V4L2_CTRL_CLASS_USER | 0x900)
+#endif
+#if defined(V4L2_CID_USER_MEYE_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_MEYE_BASE) && HAVE_DECL_V4L2_CID_USER_MEYE_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_USER_MEYE_BASE) == ((V4L2_CID_BASE + 0x1000)), "V4L2_CID_USER_MEYE_BASE != (V4L2_CID_BASE + 0x1000)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_USER_MEYE_BASE (V4L2_CID_BASE + 0x1000)
+#endif
+#if defined(V4L2_CID_USER_BTTV_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_BTTV_BASE) && HAVE_DECL_V4L2_CID_USER_BTTV_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_USER_BTTV_BASE) == ((V4L2_CID_BASE + 0x1010)), "V4L2_CID_USER_BTTV_BASE != (V4L2_CID_BASE + 0x1010)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_USER_BTTV_BASE (V4L2_CID_BASE + 0x1010)
+#endif
+#if defined(V4L2_CID_USER_TI_VPE_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_TI_VPE_BASE) && HAVE_DECL_V4L2_CID_USER_TI_VPE_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_USER_TI_VPE_BASE) == ((V4L2_CID_BASE + 0x1050)), "V4L2_CID_USER_TI_VPE_BASE != (V4L2_CID_BASE + 0x1050)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_USER_TI_VPE_BASE (V4L2_CID_BASE + 0x1050)
+#endif
+#if defined(V4L2_CID_USER_IMX_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_IMX_BASE) && HAVE_DECL_V4L2_CID_USER_IMX_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_USER_IMX_BASE) == ((V4L2_CID_BASE + 0x1090)), "V4L2_CID_USER_IMX_BASE != (V4L2_CID_BASE + 0x1090)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_USER_IMX_BASE (V4L2_CID_BASE + 0x1090)
+#endif
+#if defined(V4L2_CID_MPEG_BASE) || (defined(HAVE_DECL_V4L2_CID_MPEG_BASE) && HAVE_DECL_V4L2_CID_MPEG_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_BASE) == ((V4L2_CTRL_CLASS_MPEG | 0x900)), "V4L2_CID_MPEG_BASE != (V4L2_CTRL_CLASS_MPEG | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_BASE) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_BASE) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_BASE) == ((V4L2_CTRL_CLASS_MPEG | 0x1000)), "V4L2_CID_MPEG_CX2341X_BASE != (V4L2_CTRL_CLASS_MPEG | 0x1000)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_BASE) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_BASE) && HAVE_DECL_V4L2_CID_MPEG_MFC51_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_BASE) == ((V4L2_CTRL_CLASS_MPEG | 0x1100)), "V4L2_CID_MPEG_MFC51_BASE != (V4L2_CTRL_CLASS_MPEG | 0x1100)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_BASE (V4L2_CTRL_CLASS_MPEG | 0x1100)
+#endif
+#if defined(V4L2_CID_CAMERA_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_CAMERA_CLASS_BASE) && HAVE_DECL_V4L2_CID_CAMERA_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_CAMERA_CLASS_BASE) == ((V4L2_CTRL_CLASS_CAMERA | 0x900)), "V4L2_CID_CAMERA_CLASS_BASE != (V4L2_CTRL_CLASS_CAMERA | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900)
+#endif
+#if defined(V4L2_CID_FM_TX_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_FM_TX_CLASS_BASE) && HAVE_DECL_V4L2_CID_FM_TX_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FM_TX_CLASS_BASE) == ((V4L2_CTRL_CLASS_FM_TX | 0x900)), "V4L2_CID_FM_TX_CLASS_BASE != (V4L2_CTRL_CLASS_FM_TX | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900)
+#endif
+#if defined(V4L2_CID_FLASH_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_FLASH_CLASS_BASE) && HAVE_DECL_V4L2_CID_FLASH_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_CLASS_BASE) == ((V4L2_CTRL_CLASS_FLASH | 0x900)), "V4L2_CID_FLASH_CLASS_BASE != (V4L2_CTRL_CLASS_FLASH | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_CLASS_BASE (V4L2_CTRL_CLASS_FLASH | 0x900)
+#endif
+#if defined(V4L2_CID_JPEG_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_JPEG_CLASS_BASE) && HAVE_DECL_V4L2_CID_JPEG_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_JPEG_CLASS_BASE) == ((V4L2_CTRL_CLASS_JPEG | 0x900)), "V4L2_CID_JPEG_CLASS_BASE != (V4L2_CTRL_CLASS_JPEG | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_JPEG_CLASS_BASE (V4L2_CTRL_CLASS_JPEG | 0x900)
+#endif
+#if defined(V4L2_CID_IMAGE_SOURCE_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_IMAGE_SOURCE_CLASS_BASE) && HAVE_DECL_V4L2_CID_IMAGE_SOURCE_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_IMAGE_SOURCE_CLASS_BASE) == ((V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)), "V4L2_CID_IMAGE_SOURCE_CLASS_BASE != (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_IMAGE_SOURCE_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
+#endif
+#if defined(V4L2_CID_IMAGE_PROC_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_IMAGE_PROC_CLASS_BASE) && HAVE_DECL_V4L2_CID_IMAGE_PROC_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_IMAGE_PROC_CLASS_BASE) == ((V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)), "V4L2_CID_IMAGE_PROC_CLASS_BASE != (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_IMAGE_PROC_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
+#endif
+#if defined(V4L2_CID_DV_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_DV_CLASS_BASE) && HAVE_DECL_V4L2_CID_DV_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DV_CLASS_BASE) == ((V4L2_CTRL_CLASS_DV | 0x900)), "V4L2_CID_DV_CLASS_BASE != (V4L2_CTRL_CLASS_DV | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DV_CLASS_BASE (V4L2_CTRL_CLASS_DV | 0x900)
+#endif
+#if defined(V4L2_CID_FM_RX_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_FM_RX_CLASS_BASE) && HAVE_DECL_V4L2_CID_FM_RX_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FM_RX_CLASS_BASE) == ((V4L2_CTRL_CLASS_FM_RX | 0x900)), "V4L2_CID_FM_RX_CLASS_BASE != (V4L2_CTRL_CLASS_FM_RX | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FM_RX_CLASS_BASE (V4L2_CTRL_CLASS_FM_RX | 0x900)
+#endif
+#if defined(V4L2_CID_RF_TUNER_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_CLASS_BASE) && HAVE_DECL_V4L2_CID_RF_TUNER_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_CLASS_BASE) == ((V4L2_CTRL_CLASS_RF_TUNER | 0x900)), "V4L2_CID_RF_TUNER_CLASS_BASE != (V4L2_CTRL_CLASS_RF_TUNER | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_CLASS_BASE (V4L2_CTRL_CLASS_RF_TUNER | 0x900)
+#endif
+#if defined(V4L2_CID_DETECT_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_DETECT_CLASS_BASE) && HAVE_DECL_V4L2_CID_DETECT_CLASS_BASE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DETECT_CLASS_BASE) == ((V4L2_CTRL_CLASS_DETECT | 0x900)), "V4L2_CID_DETECT_CLASS_BASE != (V4L2_CTRL_CLASS_DETECT | 0x900)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DETECT_CLASS_BASE (V4L2_CTRL_CLASS_DETECT | 0x900)
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+extern const struct xlat v4l2_control_id_bases[];
+
+# else
+
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+static
+#  endif
+const struct xlat v4l2_control_id_bases[] = {
+ XLAT(V4L2_CID_BASE),
+ XLAT(V4L2_CID_USER_MEYE_BASE),
+ XLAT(V4L2_CID_USER_BTTV_BASE),
+ XLAT(V4L2_CID_USER_TI_VPE_BASE),
+ XLAT(V4L2_CID_USER_IMX_BASE),
+ XLAT(V4L2_CID_MPEG_BASE),
+ XLAT(V4L2_CID_MPEG_CX2341X_BASE),
+ XLAT(V4L2_CID_MPEG_MFC51_BASE),
+ XLAT(V4L2_CID_CAMERA_CLASS_BASE),
+ XLAT(V4L2_CID_FM_TX_CLASS_BASE),
+ XLAT(V4L2_CID_FLASH_CLASS_BASE),
+ XLAT(V4L2_CID_JPEG_CLASS_BASE),
+ XLAT(V4L2_CID_IMAGE_SOURCE_CLASS_BASE),
+ XLAT(V4L2_CID_IMAGE_PROC_CLASS_BASE),
+ XLAT(V4L2_CID_DV_CLASS_BASE),
+ XLAT(V4L2_CID_FM_RX_CLASS_BASE),
+ XLAT(V4L2_CID_RF_TUNER_CLASS_BASE),
+ XLAT(V4L2_CID_DETECT_CLASS_BASE),
+ XLAT_END
+};
+
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_control_id_bases.in b/xlat/v4l2_control_id_bases.in
new file mode 100644
index 0000000..a0359be
--- /dev/null
+++ b/xlat/v4l2_control_id_bases.in
@@ -0,0 +1,18 @@
+V4L2_CID_BASE				(V4L2_CTRL_CLASS_USER | 0x900)
+V4L2_CID_USER_MEYE_BASE			(V4L2_CID_BASE + 0x1000)
+V4L2_CID_USER_BTTV_BASE			(V4L2_CID_BASE + 0x1010)
+V4L2_CID_USER_TI_VPE_BASE		(V4L2_CID_BASE + 0x1050)
+V4L2_CID_USER_IMX_BASE			(V4L2_CID_BASE + 0x1090)
+V4L2_CID_MPEG_BASE			(V4L2_CTRL_CLASS_MPEG | 0x900)
+V4L2_CID_MPEG_CX2341X_BASE		(V4L2_CTRL_CLASS_MPEG | 0x1000)
+V4L2_CID_MPEG_MFC51_BASE		(V4L2_CTRL_CLASS_MPEG | 0x1100)
+V4L2_CID_CAMERA_CLASS_BASE		(V4L2_CTRL_CLASS_CAMERA | 0x900)
+V4L2_CID_FM_TX_CLASS_BASE		(V4L2_CTRL_CLASS_FM_TX | 0x900)
+V4L2_CID_FLASH_CLASS_BASE		(V4L2_CTRL_CLASS_FLASH | 0x900)
+V4L2_CID_JPEG_CLASS_BASE		(V4L2_CTRL_CLASS_JPEG | 0x900)
+V4L2_CID_IMAGE_SOURCE_CLASS_BASE	(V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
+V4L2_CID_IMAGE_PROC_CLASS_BASE		(V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
+V4L2_CID_DV_CLASS_BASE			(V4L2_CTRL_CLASS_DV | 0x900)
+V4L2_CID_FM_RX_CLASS_BASE		(V4L2_CTRL_CLASS_FM_RX | 0x900)
+V4L2_CID_RF_TUNER_CLASS_BASE		(V4L2_CTRL_CLASS_RF_TUNER | 0x900)
+V4L2_CID_DETECT_CLASS_BASE		(V4L2_CTRL_CLASS_DETECT | 0x900)
diff --git a/xlat/v4l2_control_ids.h b/xlat/v4l2_control_ids.h
index ae371f8..2b73d34 100644
--- a/xlat/v4l2_control_ids.h
+++ b/xlat/v4l2_control_ids.h
@@ -1,243 +1,2704 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_control_ids.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(V4L2_CID_BRIGHTNESS) || (defined(HAVE_DECL_V4L2_CID_BRIGHTNESS) && HAVE_DECL_V4L2_CID_BRIGHTNESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_BRIGHTNESS) == ((V4L2_CID_BASE+0)), "V4L2_CID_BRIGHTNESS != (V4L2_CID_BASE+0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_BRIGHTNESS (V4L2_CID_BASE+0)
+#endif
+#if defined(V4L2_CID_CONTRAST) || (defined(HAVE_DECL_V4L2_CID_CONTRAST) && HAVE_DECL_V4L2_CID_CONTRAST)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_CONTRAST) == ((V4L2_CID_BASE+1)), "V4L2_CID_CONTRAST != (V4L2_CID_BASE+1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_CONTRAST (V4L2_CID_BASE+1)
+#endif
+#if defined(V4L2_CID_SATURATION) || (defined(HAVE_DECL_V4L2_CID_SATURATION) && HAVE_DECL_V4L2_CID_SATURATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_SATURATION) == ((V4L2_CID_BASE+2)), "V4L2_CID_SATURATION != (V4L2_CID_BASE+2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_SATURATION (V4L2_CID_BASE+2)
+#endif
+#if defined(V4L2_CID_HUE) || (defined(HAVE_DECL_V4L2_CID_HUE) && HAVE_DECL_V4L2_CID_HUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_HUE) == ((V4L2_CID_BASE+3)), "V4L2_CID_HUE != (V4L2_CID_BASE+3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_HUE (V4L2_CID_BASE+3)
+#endif
+#if defined(V4L2_CID_AUDIO_VOLUME) || (defined(HAVE_DECL_V4L2_CID_AUDIO_VOLUME) && HAVE_DECL_V4L2_CID_AUDIO_VOLUME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_VOLUME) == ((V4L2_CID_BASE+5)), "V4L2_CID_AUDIO_VOLUME != (V4L2_CID_BASE+5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_VOLUME (V4L2_CID_BASE+5)
+#endif
+#if defined(V4L2_CID_AUDIO_BALANCE) || (defined(HAVE_DECL_V4L2_CID_AUDIO_BALANCE) && HAVE_DECL_V4L2_CID_AUDIO_BALANCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_BALANCE) == ((V4L2_CID_BASE+6)), "V4L2_CID_AUDIO_BALANCE != (V4L2_CID_BASE+6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_BALANCE (V4L2_CID_BASE+6)
+#endif
+#if defined(V4L2_CID_AUDIO_BASS) || (defined(HAVE_DECL_V4L2_CID_AUDIO_BASS) && HAVE_DECL_V4L2_CID_AUDIO_BASS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_BASS) == ((V4L2_CID_BASE+7)), "V4L2_CID_AUDIO_BASS != (V4L2_CID_BASE+7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_BASS (V4L2_CID_BASE+7)
+#endif
+#if defined(V4L2_CID_AUDIO_TREBLE) || (defined(HAVE_DECL_V4L2_CID_AUDIO_TREBLE) && HAVE_DECL_V4L2_CID_AUDIO_TREBLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_TREBLE) == ((V4L2_CID_BASE+8)), "V4L2_CID_AUDIO_TREBLE != (V4L2_CID_BASE+8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_TREBLE (V4L2_CID_BASE+8)
+#endif
+#if defined(V4L2_CID_AUDIO_MUTE) || (defined(HAVE_DECL_V4L2_CID_AUDIO_MUTE) && HAVE_DECL_V4L2_CID_AUDIO_MUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_MUTE) == ((V4L2_CID_BASE+9)), "V4L2_CID_AUDIO_MUTE != (V4L2_CID_BASE+9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_MUTE (V4L2_CID_BASE+9)
+#endif
+#if defined(V4L2_CID_AUDIO_LOUDNESS) || (defined(HAVE_DECL_V4L2_CID_AUDIO_LOUDNESS) && HAVE_DECL_V4L2_CID_AUDIO_LOUDNESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_LOUDNESS) == ((V4L2_CID_BASE+10)), "V4L2_CID_AUDIO_LOUDNESS != (V4L2_CID_BASE+10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_LOUDNESS (V4L2_CID_BASE+10)
+#endif
+#if defined(V4L2_CID_BLACK_LEVEL) || (defined(HAVE_DECL_V4L2_CID_BLACK_LEVEL) && HAVE_DECL_V4L2_CID_BLACK_LEVEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_BLACK_LEVEL) == ((V4L2_CID_BASE+11)), "V4L2_CID_BLACK_LEVEL != (V4L2_CID_BASE+11)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_BLACK_LEVEL (V4L2_CID_BASE+11)
+#endif
+#if defined(V4L2_CID_AUTO_WHITE_BALANCE) || (defined(HAVE_DECL_V4L2_CID_AUTO_WHITE_BALANCE) && HAVE_DECL_V4L2_CID_AUTO_WHITE_BALANCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUTO_WHITE_BALANCE) == ((V4L2_CID_BASE+12)), "V4L2_CID_AUTO_WHITE_BALANCE != (V4L2_CID_BASE+12)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE+12)
+#endif
+#if defined(V4L2_CID_DO_WHITE_BALANCE) || (defined(HAVE_DECL_V4L2_CID_DO_WHITE_BALANCE) && HAVE_DECL_V4L2_CID_DO_WHITE_BALANCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DO_WHITE_BALANCE) == ((V4L2_CID_BASE+13)), "V4L2_CID_DO_WHITE_BALANCE != (V4L2_CID_BASE+13)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DO_WHITE_BALANCE (V4L2_CID_BASE+13)
+#endif
+#if defined(V4L2_CID_RED_BALANCE) || (defined(HAVE_DECL_V4L2_CID_RED_BALANCE) && HAVE_DECL_V4L2_CID_RED_BALANCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RED_BALANCE) == ((V4L2_CID_BASE+14)), "V4L2_CID_RED_BALANCE != (V4L2_CID_BASE+14)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RED_BALANCE (V4L2_CID_BASE+14)
+#endif
+#if defined(V4L2_CID_BLUE_BALANCE) || (defined(HAVE_DECL_V4L2_CID_BLUE_BALANCE) && HAVE_DECL_V4L2_CID_BLUE_BALANCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_BLUE_BALANCE) == ((V4L2_CID_BASE+15)), "V4L2_CID_BLUE_BALANCE != (V4L2_CID_BASE+15)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_BLUE_BALANCE (V4L2_CID_BASE+15)
+#endif
+#if defined(V4L2_CID_GAMMA) || (defined(HAVE_DECL_V4L2_CID_GAMMA) && HAVE_DECL_V4L2_CID_GAMMA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_GAMMA) == ((V4L2_CID_BASE+16)), "V4L2_CID_GAMMA != (V4L2_CID_BASE+16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_GAMMA (V4L2_CID_BASE+16)
+#endif
+#if defined(V4L2_CID_EXPOSURE) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE) && HAVE_DECL_V4L2_CID_EXPOSURE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_EXPOSURE) == ((V4L2_CID_BASE+17)), "V4L2_CID_EXPOSURE != (V4L2_CID_BASE+17)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_EXPOSURE (V4L2_CID_BASE+17)
+#endif
+#if defined(V4L2_CID_AUTOGAIN) || (defined(HAVE_DECL_V4L2_CID_AUTOGAIN) && HAVE_DECL_V4L2_CID_AUTOGAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUTOGAIN) == ((V4L2_CID_BASE+18)), "V4L2_CID_AUTOGAIN != (V4L2_CID_BASE+18)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUTOGAIN (V4L2_CID_BASE+18)
+#endif
+#if defined(V4L2_CID_GAIN) || (defined(HAVE_DECL_V4L2_CID_GAIN) && HAVE_DECL_V4L2_CID_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_GAIN) == ((V4L2_CID_BASE+19)), "V4L2_CID_GAIN != (V4L2_CID_BASE+19)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_GAIN (V4L2_CID_BASE+19)
+#endif
+#if defined(V4L2_CID_HFLIP) || (defined(HAVE_DECL_V4L2_CID_HFLIP) && HAVE_DECL_V4L2_CID_HFLIP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_HFLIP) == ((V4L2_CID_BASE+20)), "V4L2_CID_HFLIP != (V4L2_CID_BASE+20)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_HFLIP (V4L2_CID_BASE+20)
+#endif
+#if defined(V4L2_CID_VFLIP) || (defined(HAVE_DECL_V4L2_CID_VFLIP) && HAVE_DECL_V4L2_CID_VFLIP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_VFLIP) == ((V4L2_CID_BASE+21)), "V4L2_CID_VFLIP != (V4L2_CID_BASE+21)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_VFLIP (V4L2_CID_BASE+21)
+#endif
+#if defined(V4L2_CID_HCENTER) || (defined(HAVE_DECL_V4L2_CID_HCENTER) && HAVE_DECL_V4L2_CID_HCENTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_HCENTER) == ((V4L2_CID_BASE+22)), "V4L2_CID_HCENTER != (V4L2_CID_BASE+22)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_HCENTER (V4L2_CID_BASE+22)
+#endif
+#if defined(V4L2_CID_VCENTER) || (defined(HAVE_DECL_V4L2_CID_VCENTER) && HAVE_DECL_V4L2_CID_VCENTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_VCENTER) == ((V4L2_CID_BASE+23)), "V4L2_CID_VCENTER != (V4L2_CID_BASE+23)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_VCENTER (V4L2_CID_BASE+23)
+#endif
+#if defined(V4L2_CID_POWER_LINE_FREQUENCY) || (defined(HAVE_DECL_V4L2_CID_POWER_LINE_FREQUENCY) && HAVE_DECL_V4L2_CID_POWER_LINE_FREQUENCY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_POWER_LINE_FREQUENCY) == ((V4L2_CID_BASE+24)), "V4L2_CID_POWER_LINE_FREQUENCY != (V4L2_CID_BASE+24)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE+24)
+#endif
+#if defined(V4L2_CID_HUE_AUTO) || (defined(HAVE_DECL_V4L2_CID_HUE_AUTO) && HAVE_DECL_V4L2_CID_HUE_AUTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_HUE_AUTO) == ((V4L2_CID_BASE+25)), "V4L2_CID_HUE_AUTO != (V4L2_CID_BASE+25)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_HUE_AUTO (V4L2_CID_BASE+25)
+#endif
+#if defined(V4L2_CID_WHITE_BALANCE_TEMPERATURE) || (defined(HAVE_DECL_V4L2_CID_WHITE_BALANCE_TEMPERATURE) && HAVE_DECL_V4L2_CID_WHITE_BALANCE_TEMPERATURE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_WHITE_BALANCE_TEMPERATURE) == ((V4L2_CID_BASE+26)), "V4L2_CID_WHITE_BALANCE_TEMPERATURE != (V4L2_CID_BASE+26)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE+26)
+#endif
+#if defined(V4L2_CID_SHARPNESS) || (defined(HAVE_DECL_V4L2_CID_SHARPNESS) && HAVE_DECL_V4L2_CID_SHARPNESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_SHARPNESS) == ((V4L2_CID_BASE+27)), "V4L2_CID_SHARPNESS != (V4L2_CID_BASE+27)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_SHARPNESS (V4L2_CID_BASE+27)
+#endif
+#if defined(V4L2_CID_BACKLIGHT_COMPENSATION) || (defined(HAVE_DECL_V4L2_CID_BACKLIGHT_COMPENSATION) && HAVE_DECL_V4L2_CID_BACKLIGHT_COMPENSATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_BACKLIGHT_COMPENSATION) == ((V4L2_CID_BASE+28)), "V4L2_CID_BACKLIGHT_COMPENSATION != (V4L2_CID_BASE+28)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28)
+#endif
+#if defined(V4L2_CID_CHROMA_AGC) || (defined(HAVE_DECL_V4L2_CID_CHROMA_AGC) && HAVE_DECL_V4L2_CID_CHROMA_AGC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_CHROMA_AGC) == ((V4L2_CID_BASE+29)), "V4L2_CID_CHROMA_AGC != (V4L2_CID_BASE+29)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29)
+#endif
+#if defined(V4L2_CID_COLOR_KILLER) || (defined(HAVE_DECL_V4L2_CID_COLOR_KILLER) && HAVE_DECL_V4L2_CID_COLOR_KILLER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_COLOR_KILLER) == ((V4L2_CID_BASE+30)), "V4L2_CID_COLOR_KILLER != (V4L2_CID_BASE+30)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30)
+#endif
+#if defined(V4L2_CID_COLORFX) || (defined(HAVE_DECL_V4L2_CID_COLORFX) && HAVE_DECL_V4L2_CID_COLORFX)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_COLORFX) == ((V4L2_CID_BASE+31)), "V4L2_CID_COLORFX != (V4L2_CID_BASE+31)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_COLORFX (V4L2_CID_BASE+31)
+#endif
+#if defined(V4L2_CID_AUTOBRIGHTNESS) || (defined(HAVE_DECL_V4L2_CID_AUTOBRIGHTNESS) && HAVE_DECL_V4L2_CID_AUTOBRIGHTNESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUTOBRIGHTNESS) == ((V4L2_CID_BASE+32)), "V4L2_CID_AUTOBRIGHTNESS != (V4L2_CID_BASE+32)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32)
+#endif
+#if defined(V4L2_CID_BAND_STOP_FILTER) || (defined(HAVE_DECL_V4L2_CID_BAND_STOP_FILTER) && HAVE_DECL_V4L2_CID_BAND_STOP_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_BAND_STOP_FILTER) == ((V4L2_CID_BASE+33)), "V4L2_CID_BAND_STOP_FILTER != (V4L2_CID_BASE+33)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33)
+#endif
+#if defined(V4L2_CID_ROTATE) || (defined(HAVE_DECL_V4L2_CID_ROTATE) && HAVE_DECL_V4L2_CID_ROTATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ROTATE) == ((V4L2_CID_BASE+34)), "V4L2_CID_ROTATE != (V4L2_CID_BASE+34)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ROTATE (V4L2_CID_BASE+34)
+#endif
+#if defined(V4L2_CID_BG_COLOR) || (defined(HAVE_DECL_V4L2_CID_BG_COLOR) && HAVE_DECL_V4L2_CID_BG_COLOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_BG_COLOR) == ((V4L2_CID_BASE+35)), "V4L2_CID_BG_COLOR != (V4L2_CID_BASE+35)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35)
+#endif
+#if defined(V4L2_CID_CHROMA_GAIN) || (defined(HAVE_DECL_V4L2_CID_CHROMA_GAIN) && HAVE_DECL_V4L2_CID_CHROMA_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_CHROMA_GAIN) == ((V4L2_CID_BASE+36)), "V4L2_CID_CHROMA_GAIN != (V4L2_CID_BASE+36)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_CHROMA_GAIN (V4L2_CID_BASE+36)
+#endif
+#if defined(V4L2_CID_ILLUMINATORS_1) || (defined(HAVE_DECL_V4L2_CID_ILLUMINATORS_1) && HAVE_DECL_V4L2_CID_ILLUMINATORS_1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ILLUMINATORS_1) == ((V4L2_CID_BASE+37)), "V4L2_CID_ILLUMINATORS_1 != (V4L2_CID_BASE+37)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ILLUMINATORS_1 (V4L2_CID_BASE+37)
+#endif
+#if defined(V4L2_CID_ILLUMINATORS_2) || (defined(HAVE_DECL_V4L2_CID_ILLUMINATORS_2) && HAVE_DECL_V4L2_CID_ILLUMINATORS_2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ILLUMINATORS_2) == ((V4L2_CID_BASE+38)), "V4L2_CID_ILLUMINATORS_2 != (V4L2_CID_BASE+38)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ILLUMINATORS_2 (V4L2_CID_BASE+38)
+#endif
+#if defined(V4L2_CID_MIN_BUFFERS_FOR_CAPTURE) || (defined(HAVE_DECL_V4L2_CID_MIN_BUFFERS_FOR_CAPTURE) && HAVE_DECL_V4L2_CID_MIN_BUFFERS_FOR_CAPTURE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MIN_BUFFERS_FOR_CAPTURE) == ((V4L2_CID_BASE+39)), "V4L2_CID_MIN_BUFFERS_FOR_CAPTURE != (V4L2_CID_BASE+39)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MIN_BUFFERS_FOR_CAPTURE (V4L2_CID_BASE+39)
+#endif
+#if defined(V4L2_CID_MIN_BUFFERS_FOR_OUTPUT) || (defined(HAVE_DECL_V4L2_CID_MIN_BUFFERS_FOR_OUTPUT) && HAVE_DECL_V4L2_CID_MIN_BUFFERS_FOR_OUTPUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MIN_BUFFERS_FOR_OUTPUT) == ((V4L2_CID_BASE+40)), "V4L2_CID_MIN_BUFFERS_FOR_OUTPUT != (V4L2_CID_BASE+40)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT (V4L2_CID_BASE+40)
+#endif
+#if defined(V4L2_CID_ALPHA_COMPONENT) || (defined(HAVE_DECL_V4L2_CID_ALPHA_COMPONENT) && HAVE_DECL_V4L2_CID_ALPHA_COMPONENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ALPHA_COMPONENT) == ((V4L2_CID_BASE+41)), "V4L2_CID_ALPHA_COMPONENT != (V4L2_CID_BASE+41)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ALPHA_COMPONENT (V4L2_CID_BASE+41)
+#endif
+#if defined(V4L2_CID_COLORFX_CBCR) || (defined(HAVE_DECL_V4L2_CID_COLORFX_CBCR) && HAVE_DECL_V4L2_CID_COLORFX_CBCR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_COLORFX_CBCR) == ((V4L2_CID_BASE+42)), "V4L2_CID_COLORFX_CBCR != (V4L2_CID_BASE+42)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_COLORFX_CBCR (V4L2_CID_BASE+42)
+#endif
+#if defined(V4L2_CID_MPEG_STREAM_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_STREAM_TYPE) && HAVE_DECL_V4L2_CID_MPEG_STREAM_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_STREAM_TYPE) == ((V4L2_CID_MPEG_BASE+0)), "V4L2_CID_MPEG_STREAM_TYPE != (V4L2_CID_MPEG_BASE+0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_STREAM_TYPE (V4L2_CID_MPEG_BASE+0)
+#endif
+#if defined(V4L2_CID_MPEG_STREAM_PID_PMT) || (defined(HAVE_DECL_V4L2_CID_MPEG_STREAM_PID_PMT) && HAVE_DECL_V4L2_CID_MPEG_STREAM_PID_PMT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_STREAM_PID_PMT) == ((V4L2_CID_MPEG_BASE+1)), "V4L2_CID_MPEG_STREAM_PID_PMT != (V4L2_CID_MPEG_BASE+1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_STREAM_PID_PMT (V4L2_CID_MPEG_BASE+1)
+#endif
+#if defined(V4L2_CID_MPEG_STREAM_PID_AUDIO) || (defined(HAVE_DECL_V4L2_CID_MPEG_STREAM_PID_AUDIO) && HAVE_DECL_V4L2_CID_MPEG_STREAM_PID_AUDIO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_STREAM_PID_AUDIO) == ((V4L2_CID_MPEG_BASE+2)), "V4L2_CID_MPEG_STREAM_PID_AUDIO != (V4L2_CID_MPEG_BASE+2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_STREAM_PID_AUDIO (V4L2_CID_MPEG_BASE+2)
+#endif
+#if defined(V4L2_CID_MPEG_STREAM_PID_VIDEO) || (defined(HAVE_DECL_V4L2_CID_MPEG_STREAM_PID_VIDEO) && HAVE_DECL_V4L2_CID_MPEG_STREAM_PID_VIDEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_STREAM_PID_VIDEO) == ((V4L2_CID_MPEG_BASE+3)), "V4L2_CID_MPEG_STREAM_PID_VIDEO != (V4L2_CID_MPEG_BASE+3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_STREAM_PID_VIDEO (V4L2_CID_MPEG_BASE+3)
+#endif
+#if defined(V4L2_CID_MPEG_STREAM_PID_PCR) || (defined(HAVE_DECL_V4L2_CID_MPEG_STREAM_PID_PCR) && HAVE_DECL_V4L2_CID_MPEG_STREAM_PID_PCR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_STREAM_PID_PCR) == ((V4L2_CID_MPEG_BASE+4)), "V4L2_CID_MPEG_STREAM_PID_PCR != (V4L2_CID_MPEG_BASE+4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_STREAM_PID_PCR (V4L2_CID_MPEG_BASE+4)
+#endif
+#if defined(V4L2_CID_MPEG_STREAM_PES_ID_AUDIO) || (defined(HAVE_DECL_V4L2_CID_MPEG_STREAM_PES_ID_AUDIO) && HAVE_DECL_V4L2_CID_MPEG_STREAM_PES_ID_AUDIO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_STREAM_PES_ID_AUDIO) == ((V4L2_CID_MPEG_BASE+5)), "V4L2_CID_MPEG_STREAM_PES_ID_AUDIO != (V4L2_CID_MPEG_BASE+5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO (V4L2_CID_MPEG_BASE+5)
+#endif
+#if defined(V4L2_CID_MPEG_STREAM_PES_ID_VIDEO) || (defined(HAVE_DECL_V4L2_CID_MPEG_STREAM_PES_ID_VIDEO) && HAVE_DECL_V4L2_CID_MPEG_STREAM_PES_ID_VIDEO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_STREAM_PES_ID_VIDEO) == ((V4L2_CID_MPEG_BASE+6)), "V4L2_CID_MPEG_STREAM_PES_ID_VIDEO != (V4L2_CID_MPEG_BASE+6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO (V4L2_CID_MPEG_BASE+6)
+#endif
+#if defined(V4L2_CID_MPEG_STREAM_VBI_FMT) || (defined(HAVE_DECL_V4L2_CID_MPEG_STREAM_VBI_FMT) && HAVE_DECL_V4L2_CID_MPEG_STREAM_VBI_FMT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_STREAM_VBI_FMT) == ((V4L2_CID_MPEG_BASE+7)), "V4L2_CID_MPEG_STREAM_VBI_FMT != (V4L2_CID_MPEG_BASE+7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_STREAM_VBI_FMT (V4L2_CID_MPEG_BASE+7)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ) == ((V4L2_CID_MPEG_BASE+100)), "V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ != (V4L2_CID_MPEG_BASE+100)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ (V4L2_CID_MPEG_BASE+100)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_ENCODING) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_ENCODING) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_ENCODING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_ENCODING) == ((V4L2_CID_MPEG_BASE+101)), "V4L2_CID_MPEG_AUDIO_ENCODING != (V4L2_CID_MPEG_BASE+101)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_ENCODING (V4L2_CID_MPEG_BASE+101)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_L1_BITRATE) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_L1_BITRATE) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_L1_BITRATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_L1_BITRATE) == ((V4L2_CID_MPEG_BASE+102)), "V4L2_CID_MPEG_AUDIO_L1_BITRATE != (V4L2_CID_MPEG_BASE+102)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_L1_BITRATE (V4L2_CID_MPEG_BASE+102)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_L2_BITRATE) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_L2_BITRATE) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_L2_BITRATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_L2_BITRATE) == ((V4L2_CID_MPEG_BASE+103)), "V4L2_CID_MPEG_AUDIO_L2_BITRATE != (V4L2_CID_MPEG_BASE+103)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_L2_BITRATE (V4L2_CID_MPEG_BASE+103)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_L3_BITRATE) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_L3_BITRATE) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_L3_BITRATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_L3_BITRATE) == ((V4L2_CID_MPEG_BASE+104)), "V4L2_CID_MPEG_AUDIO_L3_BITRATE != (V4L2_CID_MPEG_BASE+104)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_L3_BITRATE (V4L2_CID_MPEG_BASE+104)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_MODE) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_MODE) == ((V4L2_CID_MPEG_BASE+105)), "V4L2_CID_MPEG_AUDIO_MODE != (V4L2_CID_MPEG_BASE+105)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_MODE (V4L2_CID_MPEG_BASE+105)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_MODE_EXTENSION) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_MODE_EXTENSION) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_MODE_EXTENSION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_MODE_EXTENSION) == ((V4L2_CID_MPEG_BASE+106)), "V4L2_CID_MPEG_AUDIO_MODE_EXTENSION != (V4L2_CID_MPEG_BASE+106)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION (V4L2_CID_MPEG_BASE+106)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_EMPHASIS) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_EMPHASIS) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_EMPHASIS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_EMPHASIS) == ((V4L2_CID_MPEG_BASE+107)), "V4L2_CID_MPEG_AUDIO_EMPHASIS != (V4L2_CID_MPEG_BASE+107)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_EMPHASIS (V4L2_CID_MPEG_BASE+107)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_CRC) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_CRC) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_CRC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_CRC) == ((V4L2_CID_MPEG_BASE+108)), "V4L2_CID_MPEG_AUDIO_CRC != (V4L2_CID_MPEG_BASE+108)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_CRC (V4L2_CID_MPEG_BASE+108)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_MUTE) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_MUTE) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_MUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_MUTE) == ((V4L2_CID_MPEG_BASE+109)), "V4L2_CID_MPEG_AUDIO_MUTE != (V4L2_CID_MPEG_BASE+109)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_MUTE (V4L2_CID_MPEG_BASE+109)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_AAC_BITRATE) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_AAC_BITRATE) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_AAC_BITRATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_AAC_BITRATE) == ((V4L2_CID_MPEG_BASE+110)), "V4L2_CID_MPEG_AUDIO_AAC_BITRATE != (V4L2_CID_MPEG_BASE+110)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_AAC_BITRATE (V4L2_CID_MPEG_BASE+110)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_AC3_BITRATE) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_AC3_BITRATE) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_AC3_BITRATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_AC3_BITRATE) == ((V4L2_CID_MPEG_BASE+111)), "V4L2_CID_MPEG_AUDIO_AC3_BITRATE != (V4L2_CID_MPEG_BASE+111)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_AC3_BITRATE (V4L2_CID_MPEG_BASE+111)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK) == ((V4L2_CID_MPEG_BASE+112)), "V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK != (V4L2_CID_MPEG_BASE+112)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK (V4L2_CID_MPEG_BASE+112)
+#endif
+#if defined(V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK) || (defined(HAVE_DECL_V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK) && HAVE_DECL_V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK) == ((V4L2_CID_MPEG_BASE+113)), "V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK != (V4L2_CID_MPEG_BASE+113)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_MPEG_BASE+113)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_ENCODING) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_ENCODING) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_ENCODING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_ENCODING) == ((V4L2_CID_MPEG_BASE+200)), "V4L2_CID_MPEG_VIDEO_ENCODING != (V4L2_CID_MPEG_BASE+200)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_ENCODING (V4L2_CID_MPEG_BASE+200)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_ASPECT) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_ASPECT) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_ASPECT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_ASPECT) == ((V4L2_CID_MPEG_BASE+201)), "V4L2_CID_MPEG_VIDEO_ASPECT != (V4L2_CID_MPEG_BASE+201)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_ASPECT (V4L2_CID_MPEG_BASE+201)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_B_FRAMES) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_B_FRAMES) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_B_FRAMES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_B_FRAMES) == ((V4L2_CID_MPEG_BASE+202)), "V4L2_CID_MPEG_VIDEO_B_FRAMES != (V4L2_CID_MPEG_BASE+202)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_B_FRAMES (V4L2_CID_MPEG_BASE+202)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_GOP_SIZE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_GOP_SIZE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_GOP_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_GOP_SIZE) == ((V4L2_CID_MPEG_BASE+203)), "V4L2_CID_MPEG_VIDEO_GOP_SIZE != (V4L2_CID_MPEG_BASE+203)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_GOP_SIZE (V4L2_CID_MPEG_BASE+203)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_GOP_CLOSURE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_GOP_CLOSURE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_GOP_CLOSURE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_GOP_CLOSURE) == ((V4L2_CID_MPEG_BASE+204)), "V4L2_CID_MPEG_VIDEO_GOP_CLOSURE != (V4L2_CID_MPEG_BASE+204)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE (V4L2_CID_MPEG_BASE+204)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_PULLDOWN) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_PULLDOWN) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_PULLDOWN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_PULLDOWN) == ((V4L2_CID_MPEG_BASE+205)), "V4L2_CID_MPEG_VIDEO_PULLDOWN != (V4L2_CID_MPEG_BASE+205)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_PULLDOWN (V4L2_CID_MPEG_BASE+205)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_BITRATE_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_BITRATE_MODE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_BITRATE_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_BITRATE_MODE) == ((V4L2_CID_MPEG_BASE+206)), "V4L2_CID_MPEG_VIDEO_BITRATE_MODE != (V4L2_CID_MPEG_BASE+206)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_BITRATE_MODE (V4L2_CID_MPEG_BASE+206)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_BITRATE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_BITRATE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_BITRATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_BITRATE) == ((V4L2_CID_MPEG_BASE+207)), "V4L2_CID_MPEG_VIDEO_BITRATE != (V4L2_CID_MPEG_BASE+207)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_BITRATE (V4L2_CID_MPEG_BASE+207)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_BITRATE_PEAK) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_BITRATE_PEAK) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_BITRATE_PEAK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_BITRATE_PEAK) == ((V4L2_CID_MPEG_BASE+208)), "V4L2_CID_MPEG_VIDEO_BITRATE_PEAK != (V4L2_CID_MPEG_BASE+208)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK (V4L2_CID_MPEG_BASE+208)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION) == ((V4L2_CID_MPEG_BASE+209)), "V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION != (V4L2_CID_MPEG_BASE+209)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MUTE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MUTE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MUTE) == ((V4L2_CID_MPEG_BASE+210)), "V4L2_CID_MPEG_VIDEO_MUTE != (V4L2_CID_MPEG_BASE+210)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MUTE (V4L2_CID_MPEG_BASE+210)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MUTE_YUV) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MUTE_YUV) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MUTE_YUV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MUTE_YUV) == ((V4L2_CID_MPEG_BASE+211)), "V4L2_CID_MPEG_VIDEO_MUTE_YUV != (V4L2_CID_MPEG_BASE+211)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MUTE_YUV (V4L2_CID_MPEG_BASE+211)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE) == ((V4L2_CID_MPEG_BASE+212)), "V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE != (V4L2_CID_MPEG_BASE+212)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE (V4L2_CID_MPEG_BASE+212)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER) == ((V4L2_CID_MPEG_BASE+213)), "V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER != (V4L2_CID_MPEG_BASE+213)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER (V4L2_CID_MPEG_BASE+213)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB) == ((V4L2_CID_MPEG_BASE+214)), "V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB != (V4L2_CID_MPEG_BASE+214)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB (V4L2_CID_MPEG_BASE+214)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE) == ((V4L2_CID_MPEG_BASE+215)), "V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE != (V4L2_CID_MPEG_BASE+215)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE (V4L2_CID_MPEG_BASE+215)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEADER_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEADER_MODE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEADER_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEADER_MODE) == ((V4L2_CID_MPEG_BASE+216)), "V4L2_CID_MPEG_VIDEO_HEADER_MODE != (V4L2_CID_MPEG_BASE+216)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEADER_MODE (V4L2_CID_MPEG_BASE+216)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MAX_REF_PIC) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MAX_REF_PIC) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MAX_REF_PIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MAX_REF_PIC) == ((V4L2_CID_MPEG_BASE+217)), "V4L2_CID_MPEG_VIDEO_MAX_REF_PIC != (V4L2_CID_MPEG_BASE+217)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MAX_REF_PIC (V4L2_CID_MPEG_BASE+217)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE) == ((V4L2_CID_MPEG_BASE+218)), "V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE != (V4L2_CID_MPEG_BASE+218)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE (V4L2_CID_MPEG_BASE+218)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES) == ((V4L2_CID_MPEG_BASE+219)), "V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES != (V4L2_CID_MPEG_BASE+219)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES (V4L2_CID_MPEG_BASE+219)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB) == ((V4L2_CID_MPEG_BASE+220)), "V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB != (V4L2_CID_MPEG_BASE+220)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB (V4L2_CID_MPEG_BASE+220)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE) == ((V4L2_CID_MPEG_BASE+221)), "V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE != (V4L2_CID_MPEG_BASE+221)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE (V4L2_CID_MPEG_BASE+221)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VBV_SIZE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VBV_SIZE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VBV_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VBV_SIZE) == ((V4L2_CID_MPEG_BASE+222)), "V4L2_CID_MPEG_VIDEO_VBV_SIZE != (V4L2_CID_MPEG_BASE+222)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VBV_SIZE (V4L2_CID_MPEG_BASE+222)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_DEC_PTS) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_DEC_PTS) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_DEC_PTS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_DEC_PTS) == ((V4L2_CID_MPEG_BASE+223)), "V4L2_CID_MPEG_VIDEO_DEC_PTS != (V4L2_CID_MPEG_BASE+223)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_DEC_PTS (V4L2_CID_MPEG_BASE+223)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_DEC_FRAME) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_DEC_FRAME) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_DEC_FRAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_DEC_FRAME) == ((V4L2_CID_MPEG_BASE+224)), "V4L2_CID_MPEG_VIDEO_DEC_FRAME != (V4L2_CID_MPEG_BASE+224)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_DEC_FRAME (V4L2_CID_MPEG_BASE+224)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VBV_DELAY) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VBV_DELAY) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VBV_DELAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VBV_DELAY) == ((V4L2_CID_MPEG_BASE+225)), "V4L2_CID_MPEG_VIDEO_VBV_DELAY != (V4L2_CID_MPEG_BASE+225)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VBV_DELAY (V4L2_CID_MPEG_BASE+225)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER) == ((V4L2_CID_MPEG_BASE+226)), "V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER != (V4L2_CID_MPEG_BASE+226)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER (V4L2_CID_MPEG_BASE+226)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE) == ((V4L2_CID_MPEG_BASE+227)), "V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE != (V4L2_CID_MPEG_BASE+227)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE (V4L2_CID_MPEG_BASE+227)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE) == ((V4L2_CID_MPEG_BASE+228)), "V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE != (V4L2_CID_MPEG_BASE+228)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE (V4L2_CID_MPEG_BASE+228)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME) == ((V4L2_CID_MPEG_BASE+229)), "V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME != (V4L2_CID_MPEG_BASE+229)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME (V4L2_CID_MPEG_BASE+229)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP) == ((V4L2_CID_MPEG_BASE+300)), "V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP != (V4L2_CID_MPEG_BASE+300)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP (V4L2_CID_MPEG_BASE+300)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP) == ((V4L2_CID_MPEG_BASE+301)), "V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP != (V4L2_CID_MPEG_BASE+301)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP (V4L2_CID_MPEG_BASE+301)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP) == ((V4L2_CID_MPEG_BASE+302)), "V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP != (V4L2_CID_MPEG_BASE+302)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP (V4L2_CID_MPEG_BASE+302)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H263_MIN_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_MIN_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_MIN_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H263_MIN_QP) == ((V4L2_CID_MPEG_BASE+303)), "V4L2_CID_MPEG_VIDEO_H263_MIN_QP != (V4L2_CID_MPEG_BASE+303)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H263_MIN_QP (V4L2_CID_MPEG_BASE+303)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H263_MAX_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_MAX_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H263_MAX_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H263_MAX_QP) == ((V4L2_CID_MPEG_BASE+304)), "V4L2_CID_MPEG_VIDEO_H263_MAX_QP != (V4L2_CID_MPEG_BASE+304)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H263_MAX_QP (V4L2_CID_MPEG_BASE+304)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP) == ((V4L2_CID_MPEG_BASE+350)), "V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP != (V4L2_CID_MPEG_BASE+350)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP (V4L2_CID_MPEG_BASE+350)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP) == ((V4L2_CID_MPEG_BASE+351)), "V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP != (V4L2_CID_MPEG_BASE+351)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP (V4L2_CID_MPEG_BASE+351)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP) == ((V4L2_CID_MPEG_BASE+352)), "V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP != (V4L2_CID_MPEG_BASE+352)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP (V4L2_CID_MPEG_BASE+352)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_MIN_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_MIN_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_MIN_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_MIN_QP) == ((V4L2_CID_MPEG_BASE+353)), "V4L2_CID_MPEG_VIDEO_H264_MIN_QP != (V4L2_CID_MPEG_BASE+353)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_MIN_QP (V4L2_CID_MPEG_BASE+353)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_MAX_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_MAX_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_MAX_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_MAX_QP) == ((V4L2_CID_MPEG_BASE+354)), "V4L2_CID_MPEG_VIDEO_H264_MAX_QP != (V4L2_CID_MPEG_BASE+354)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_MAX_QP (V4L2_CID_MPEG_BASE+354)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM) == ((V4L2_CID_MPEG_BASE+355)), "V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM != (V4L2_CID_MPEG_BASE+355)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM (V4L2_CID_MPEG_BASE+355)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE) == ((V4L2_CID_MPEG_BASE+356)), "V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE != (V4L2_CID_MPEG_BASE+356)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE (V4L2_CID_MPEG_BASE+356)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE) == ((V4L2_CID_MPEG_BASE+357)), "V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE != (V4L2_CID_MPEG_BASE+357)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE (V4L2_CID_MPEG_BASE+357)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_I_PERIOD) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_I_PERIOD) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_I_PERIOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_I_PERIOD) == ((V4L2_CID_MPEG_BASE+358)), "V4L2_CID_MPEG_VIDEO_H264_I_PERIOD != (V4L2_CID_MPEG_BASE+358)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_I_PERIOD (V4L2_CID_MPEG_BASE+358)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_LEVEL) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_LEVEL) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_LEVEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_LEVEL) == ((V4L2_CID_MPEG_BASE+359)), "V4L2_CID_MPEG_VIDEO_H264_LEVEL != (V4L2_CID_MPEG_BASE+359)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_LEVEL (V4L2_CID_MPEG_BASE+359)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA) == ((V4L2_CID_MPEG_BASE+360)), "V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA != (V4L2_CID_MPEG_BASE+360)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA (V4L2_CID_MPEG_BASE+360)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA) == ((V4L2_CID_MPEG_BASE+361)), "V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA != (V4L2_CID_MPEG_BASE+361)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA (V4L2_CID_MPEG_BASE+361)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE) == ((V4L2_CID_MPEG_BASE+362)), "V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE != (V4L2_CID_MPEG_BASE+362)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE (V4L2_CID_MPEG_BASE+362)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_PROFILE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_PROFILE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_PROFILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_PROFILE) == ((V4L2_CID_MPEG_BASE+363)), "V4L2_CID_MPEG_VIDEO_H264_PROFILE != (V4L2_CID_MPEG_BASE+363)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_PROFILE (V4L2_CID_MPEG_BASE+363)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT) == ((V4L2_CID_MPEG_BASE+364)), "V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT != (V4L2_CID_MPEG_BASE+364)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT (V4L2_CID_MPEG_BASE+364)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH) == ((V4L2_CID_MPEG_BASE+365)), "V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH != (V4L2_CID_MPEG_BASE+365)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH (V4L2_CID_MPEG_BASE+365)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE) == ((V4L2_CID_MPEG_BASE+366)), "V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE != (V4L2_CID_MPEG_BASE+366)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE (V4L2_CID_MPEG_BASE+366)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC) == ((V4L2_CID_MPEG_BASE+367)), "V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC != (V4L2_CID_MPEG_BASE+367)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC (V4L2_CID_MPEG_BASE+367)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING) == ((V4L2_CID_MPEG_BASE+368)), "V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING != (V4L2_CID_MPEG_BASE+368)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING (V4L2_CID_MPEG_BASE+368)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0) == ((V4L2_CID_MPEG_BASE+369)), "V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0 != (V4L2_CID_MPEG_BASE+369)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0 (V4L2_CID_MPEG_BASE+369)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE) == ((V4L2_CID_MPEG_BASE+370)), "V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE != (V4L2_CID_MPEG_BASE+370)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE (V4L2_CID_MPEG_BASE+370)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_FMO) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_FMO) == ((V4L2_CID_MPEG_BASE+371)), "V4L2_CID_MPEG_VIDEO_H264_FMO != (V4L2_CID_MPEG_BASE+371)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_FMO (V4L2_CID_MPEG_BASE+371)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE) == ((V4L2_CID_MPEG_BASE+372)), "V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE != (V4L2_CID_MPEG_BASE+372)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE (V4L2_CID_MPEG_BASE+372)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP) == ((V4L2_CID_MPEG_BASE+373)), "V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP != (V4L2_CID_MPEG_BASE+373)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP (V4L2_CID_MPEG_BASE+373)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION) == ((V4L2_CID_MPEG_BASE+374)), "V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION != (V4L2_CID_MPEG_BASE+374)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION (V4L2_CID_MPEG_BASE+374)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE) == ((V4L2_CID_MPEG_BASE+375)), "V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE != (V4L2_CID_MPEG_BASE+375)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE (V4L2_CID_MPEG_BASE+375)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH) == ((V4L2_CID_MPEG_BASE+376)), "V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH != (V4L2_CID_MPEG_BASE+376)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH (V4L2_CID_MPEG_BASE+376)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_ASO) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_ASO) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_ASO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_ASO) == ((V4L2_CID_MPEG_BASE+377)), "V4L2_CID_MPEG_VIDEO_H264_ASO != (V4L2_CID_MPEG_BASE+377)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_ASO (V4L2_CID_MPEG_BASE+377)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER) == ((V4L2_CID_MPEG_BASE+378)), "V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER != (V4L2_CID_MPEG_BASE+378)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER (V4L2_CID_MPEG_BASE+378)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING) == ((V4L2_CID_MPEG_BASE+379)), "V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING != (V4L2_CID_MPEG_BASE+379)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING (V4L2_CID_MPEG_BASE+379)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE) == ((V4L2_CID_MPEG_BASE+380)), "V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE != (V4L2_CID_MPEG_BASE+380)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE (V4L2_CID_MPEG_BASE+380)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER) == ((V4L2_CID_MPEG_BASE+381)), "V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER != (V4L2_CID_MPEG_BASE+381)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER (V4L2_CID_MPEG_BASE+381)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP) == ((V4L2_CID_MPEG_BASE+382)), "V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP != (V4L2_CID_MPEG_BASE+382)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP (V4L2_CID_MPEG_BASE+382)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP) == ((V4L2_CID_MPEG_BASE+400)), "V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP != (V4L2_CID_MPEG_BASE+400)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP (V4L2_CID_MPEG_BASE+400)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP) == ((V4L2_CID_MPEG_BASE+401)), "V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP != (V4L2_CID_MPEG_BASE+401)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP (V4L2_CID_MPEG_BASE+401)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP) == ((V4L2_CID_MPEG_BASE+402)), "V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP != (V4L2_CID_MPEG_BASE+402)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP (V4L2_CID_MPEG_BASE+402)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP) == ((V4L2_CID_MPEG_BASE+403)), "V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP != (V4L2_CID_MPEG_BASE+403)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP (V4L2_CID_MPEG_BASE+403)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP) == ((V4L2_CID_MPEG_BASE+404)), "V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP != (V4L2_CID_MPEG_BASE+404)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP (V4L2_CID_MPEG_BASE+404)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL) == ((V4L2_CID_MPEG_BASE+405)), "V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL != (V4L2_CID_MPEG_BASE+405)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL (V4L2_CID_MPEG_BASE+405)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE) == ((V4L2_CID_MPEG_BASE+406)), "V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE != (V4L2_CID_MPEG_BASE+406)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE (V4L2_CID_MPEG_BASE+406)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_MPEG4_QPEL) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_QPEL) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_MPEG4_QPEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_MPEG4_QPEL) == ((V4L2_CID_MPEG_BASE+407)), "V4L2_CID_MPEG_VIDEO_MPEG4_QPEL != (V4L2_CID_MPEG_BASE+407)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL (V4L2_CID_MPEG_BASE+407)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS) == ((V4L2_CID_MPEG_BASE+500)), "V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS != (V4L2_CID_MPEG_BASE+500)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS (V4L2_CID_MPEG_BASE+500)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4) == ((V4L2_CID_MPEG_BASE+501)), "V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4 != (V4L2_CID_MPEG_BASE+501)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4 (V4L2_CID_MPEG_BASE+501)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES) == ((V4L2_CID_MPEG_BASE+502)), "V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES != (V4L2_CID_MPEG_BASE+502)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES (V4L2_CID_MPEG_BASE+502)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL) == ((V4L2_CID_MPEG_BASE+503)), "V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL != (V4L2_CID_MPEG_BASE+503)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL (V4L2_CID_MPEG_BASE+503)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS) == ((V4L2_CID_MPEG_BASE+504)), "V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS != (V4L2_CID_MPEG_BASE+504)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS (V4L2_CID_MPEG_BASE+504)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD) == ((V4L2_CID_MPEG_BASE+505)), "V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD != (V4L2_CID_MPEG_BASE+505)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD (V4L2_CID_MPEG_BASE+505)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL) == ((V4L2_CID_MPEG_BASE+506)), "V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL != (V4L2_CID_MPEG_BASE+506)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL (V4L2_CID_MPEG_BASE+506)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_MIN_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_MIN_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_MIN_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_MIN_QP) == ((V4L2_CID_MPEG_BASE+507)), "V4L2_CID_MPEG_VIDEO_VPX_MIN_QP != (V4L2_CID_MPEG_BASE+507)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_MIN_QP (V4L2_CID_MPEG_BASE+507)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_MAX_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_MAX_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_MAX_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_MAX_QP) == ((V4L2_CID_MPEG_BASE+508)), "V4L2_CID_MPEG_VIDEO_VPX_MAX_QP != (V4L2_CID_MPEG_BASE+508)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP (V4L2_CID_MPEG_BASE+508)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP) == ((V4L2_CID_MPEG_BASE+509)), "V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP != (V4L2_CID_MPEG_BASE+509)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP (V4L2_CID_MPEG_BASE+509)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP) == ((V4L2_CID_MPEG_BASE+510)), "V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP != (V4L2_CID_MPEG_BASE+510)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP (V4L2_CID_MPEG_BASE+510)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_VPX_PROFILE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_PROFILE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_VPX_PROFILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_VPX_PROFILE) == ((V4L2_CID_MPEG_BASE+511)), "V4L2_CID_MPEG_VIDEO_VPX_PROFILE != (V4L2_CID_MPEG_BASE+511)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_VPX_PROFILE (V4L2_CID_MPEG_BASE+511)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP) == ((V4L2_CID_MPEG_BASE + 600)), "V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP != (V4L2_CID_MPEG_BASE + 600)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP (V4L2_CID_MPEG_BASE + 600)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP) == ((V4L2_CID_MPEG_BASE + 601)), "V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP != (V4L2_CID_MPEG_BASE + 601)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP (V4L2_CID_MPEG_BASE + 601)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP) == ((V4L2_CID_MPEG_BASE + 602)), "V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP != (V4L2_CID_MPEG_BASE + 602)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP (V4L2_CID_MPEG_BASE + 602)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP) == ((V4L2_CID_MPEG_BASE + 603)), "V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP != (V4L2_CID_MPEG_BASE + 603)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP (V4L2_CID_MPEG_BASE + 603)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP) == ((V4L2_CID_MPEG_BASE + 604)), "V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP != (V4L2_CID_MPEG_BASE + 604)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP (V4L2_CID_MPEG_BASE + 604)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP) == ((V4L2_CID_MPEG_BASE + 605)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP != (V4L2_CID_MPEG_BASE + 605)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP (V4L2_CID_MPEG_BASE + 605)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE) == ((V4L2_CID_MPEG_BASE + 606)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE != (V4L2_CID_MPEG_BASE + 606)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE (V4L2_CID_MPEG_BASE + 606)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER) == ((V4L2_CID_MPEG_BASE + 607)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER != (V4L2_CID_MPEG_BASE + 607)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER (V4L2_CID_MPEG_BASE + 607)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP) == ((V4L2_CID_MPEG_BASE + 608)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP != (V4L2_CID_MPEG_BASE + 608)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP (V4L2_CID_MPEG_BASE + 608)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP) == ((V4L2_CID_MPEG_BASE + 609)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP != (V4L2_CID_MPEG_BASE + 609)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP (V4L2_CID_MPEG_BASE + 609)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP) == ((V4L2_CID_MPEG_BASE + 610)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP != (V4L2_CID_MPEG_BASE + 610)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP (V4L2_CID_MPEG_BASE + 610)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP) == ((V4L2_CID_MPEG_BASE + 611)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP != (V4L2_CID_MPEG_BASE + 611)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP (V4L2_CID_MPEG_BASE + 611)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP) == ((V4L2_CID_MPEG_BASE + 612)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP != (V4L2_CID_MPEG_BASE + 612)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP (V4L2_CID_MPEG_BASE + 612)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP) == ((V4L2_CID_MPEG_BASE + 613)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP != (V4L2_CID_MPEG_BASE + 613)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP (V4L2_CID_MPEG_BASE + 613)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP) == ((V4L2_CID_MPEG_BASE + 614)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP != (V4L2_CID_MPEG_BASE + 614)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP (V4L2_CID_MPEG_BASE + 614)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_PROFILE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_PROFILE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_PROFILE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_PROFILE) == ((V4L2_CID_MPEG_BASE + 615)), "V4L2_CID_MPEG_VIDEO_HEVC_PROFILE != (V4L2_CID_MPEG_BASE + 615)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_PROFILE (V4L2_CID_MPEG_BASE + 615)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_LEVEL) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LEVEL) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LEVEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_LEVEL) == ((V4L2_CID_MPEG_BASE + 616)), "V4L2_CID_MPEG_VIDEO_HEVC_LEVEL != (V4L2_CID_MPEG_BASE + 616)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_LEVEL (V4L2_CID_MPEG_BASE + 616)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION) == ((V4L2_CID_MPEG_BASE + 617)), "V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION != (V4L2_CID_MPEG_BASE + 617)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION (V4L2_CID_MPEG_BASE + 617)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_TIER) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_TIER) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_TIER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_TIER) == ((V4L2_CID_MPEG_BASE + 618)), "V4L2_CID_MPEG_VIDEO_HEVC_TIER != (V4L2_CID_MPEG_BASE + 618)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_TIER (V4L2_CID_MPEG_BASE + 618)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH) == ((V4L2_CID_MPEG_BASE + 619)), "V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH != (V4L2_CID_MPEG_BASE + 619)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH (V4L2_CID_MPEG_BASE + 619)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE) == ((V4L2_CID_MPEG_BASE + 620)), "V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE != (V4L2_CID_MPEG_BASE + 620)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE (V4L2_CID_MPEG_BASE + 620)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2) == ((V4L2_CID_MPEG_BASE + 621)), "V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2 != (V4L2_CID_MPEG_BASE + 621)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2 (V4L2_CID_MPEG_BASE + 621)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2) == ((V4L2_CID_MPEG_BASE + 622)), "V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2 != (V4L2_CID_MPEG_BASE + 622)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2 (V4L2_CID_MPEG_BASE + 622)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE) == ((V4L2_CID_MPEG_BASE + 623)), "V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE != (V4L2_CID_MPEG_BASE + 623)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE (V4L2_CID_MPEG_BASE + 623)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD) == ((V4L2_CID_MPEG_BASE + 624)), "V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD != (V4L2_CID_MPEG_BASE + 624)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD (V4L2_CID_MPEG_BASE + 624)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU) == ((V4L2_CID_MPEG_BASE + 625)), "V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU != (V4L2_CID_MPEG_BASE + 625)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU (V4L2_CID_MPEG_BASE + 625)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED) == ((V4L2_CID_MPEG_BASE + 626)), "V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED != (V4L2_CID_MPEG_BASE + 626)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED (V4L2_CID_MPEG_BASE + 626)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT) == ((V4L2_CID_MPEG_BASE + 627)), "V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT != (V4L2_CID_MPEG_BASE + 627)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT (V4L2_CID_MPEG_BASE + 627)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB) == ((V4L2_CID_MPEG_BASE + 628)), "V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB != (V4L2_CID_MPEG_BASE + 628)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB (V4L2_CID_MPEG_BASE + 628)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID) == ((V4L2_CID_MPEG_BASE + 629)), "V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID != (V4L2_CID_MPEG_BASE + 629)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID (V4L2_CID_MPEG_BASE + 629)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING) == ((V4L2_CID_MPEG_BASE + 630)), "V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING != (V4L2_CID_MPEG_BASE + 630)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING (V4L2_CID_MPEG_BASE + 630)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1) == ((V4L2_CID_MPEG_BASE + 631)), "V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1 != (V4L2_CID_MPEG_BASE + 631)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1 (V4L2_CID_MPEG_BASE + 631)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT) == ((V4L2_CID_MPEG_BASE + 632)), "V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT != (V4L2_CID_MPEG_BASE + 632)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT (V4L2_CID_MPEG_BASE + 632)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION) == ((V4L2_CID_MPEG_BASE + 633)), "V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION != (V4L2_CID_MPEG_BASE + 633)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION (V4L2_CID_MPEG_BASE + 633)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE) == ((V4L2_CID_MPEG_BASE + 634)), "V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE != (V4L2_CID_MPEG_BASE + 634)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE (V4L2_CID_MPEG_BASE + 634)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD) == ((V4L2_CID_MPEG_BASE + 635)), "V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD != (V4L2_CID_MPEG_BASE + 635)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD (V4L2_CID_MPEG_BASE + 635)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR) == ((V4L2_CID_MPEG_BASE + 636)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR != (V4L2_CID_MPEG_BASE + 636)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR (V4L2_CID_MPEG_BASE + 636)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR) == ((V4L2_CID_MPEG_BASE + 637)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR != (V4L2_CID_MPEG_BASE + 637)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR (V4L2_CID_MPEG_BASE + 637)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR) == ((V4L2_CID_MPEG_BASE + 638)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR != (V4L2_CID_MPEG_BASE + 638)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR (V4L2_CID_MPEG_BASE + 638)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR) == ((V4L2_CID_MPEG_BASE + 639)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR != (V4L2_CID_MPEG_BASE + 639)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR (V4L2_CID_MPEG_BASE + 639)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR) == ((V4L2_CID_MPEG_BASE + 640)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR != (V4L2_CID_MPEG_BASE + 640)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR (V4L2_CID_MPEG_BASE + 640)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR) == ((V4L2_CID_MPEG_BASE + 641)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR != (V4L2_CID_MPEG_BASE + 641)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR (V4L2_CID_MPEG_BASE + 641)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR) == ((V4L2_CID_MPEG_BASE + 642)), "V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR != (V4L2_CID_MPEG_BASE + 642)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR (V4L2_CID_MPEG_BASE + 642)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES) == ((V4L2_CID_MPEG_BASE + 643)), "V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES != (V4L2_CID_MPEG_BASE + 643)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES (V4L2_CID_MPEG_BASE + 643)
+#endif
+#if defined(V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR) || (defined(HAVE_DECL_V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR) && HAVE_DECL_V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR) == ((V4L2_CID_MPEG_BASE + 644)), "V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR != (V4L2_CID_MPEG_BASE + 644)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR (V4L2_CID_MPEG_BASE + 644)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE) == ((V4L2_CID_MPEG_CX2341X_BASE+0)), "V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE != (V4L2_CID_MPEG_CX2341X_BASE+0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+0)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER) == ((V4L2_CID_MPEG_CX2341X_BASE+1)), "V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER != (V4L2_CID_MPEG_CX2341X_BASE+1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+1)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE) == ((V4L2_CID_MPEG_CX2341X_BASE+2)), "V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE != (V4L2_CID_MPEG_CX2341X_BASE+2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+2)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE) == ((V4L2_CID_MPEG_CX2341X_BASE+3)), "V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE != (V4L2_CID_MPEG_CX2341X_BASE+3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+3)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE) == ((V4L2_CID_MPEG_CX2341X_BASE+4)), "V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE != (V4L2_CID_MPEG_CX2341X_BASE+4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+4)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER) == ((V4L2_CID_MPEG_CX2341X_BASE+5)), "V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER != (V4L2_CID_MPEG_CX2341X_BASE+5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+5)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE) == ((V4L2_CID_MPEG_CX2341X_BASE+6)), "V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE != (V4L2_CID_MPEG_CX2341X_BASE+6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+6)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM) == ((V4L2_CID_MPEG_CX2341X_BASE+7)), "V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM != (V4L2_CID_MPEG_CX2341X_BASE+7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+7)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP) == ((V4L2_CID_MPEG_CX2341X_BASE+8)), "V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP != (V4L2_CID_MPEG_CX2341X_BASE+8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+8)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM) == ((V4L2_CID_MPEG_CX2341X_BASE+9)), "V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM != (V4L2_CID_MPEG_CX2341X_BASE+9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP) == ((V4L2_CID_MPEG_CX2341X_BASE+10)), "V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP != (V4L2_CID_MPEG_CX2341X_BASE+10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10)
+#endif
+#if defined(V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS) == ((V4L2_CID_MPEG_CX2341X_BASE+11)), "V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS != (V4L2_CID_MPEG_CX2341X_BASE+11)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS (V4L2_CID_MPEG_CX2341X_BASE+11)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY) == ((V4L2_CID_MPEG_MFC51_BASE+0)), "V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY != (V4L2_CID_MPEG_MFC51_BASE+0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY (V4L2_CID_MPEG_MFC51_BASE+0)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE) == ((V4L2_CID_MPEG_MFC51_BASE+1)), "V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE != (V4L2_CID_MPEG_MFC51_BASE+1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE (V4L2_CID_MPEG_MFC51_BASE+1)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE) == ((V4L2_CID_MPEG_MFC51_BASE+2)), "V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE != (V4L2_CID_MPEG_MFC51_BASE+2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE (V4L2_CID_MPEG_MFC51_BASE+2)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE) == ((V4L2_CID_MPEG_MFC51_BASE+3)), "V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE != (V4L2_CID_MPEG_MFC51_BASE+3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE (V4L2_CID_MPEG_MFC51_BASE+3)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_PADDING) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_PADDING) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_PADDING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_PADDING) == ((V4L2_CID_MPEG_MFC51_BASE+4)), "V4L2_CID_MPEG_MFC51_VIDEO_PADDING != (V4L2_CID_MPEG_MFC51_BASE+4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_PADDING (V4L2_CID_MPEG_MFC51_BASE+4)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV) == ((V4L2_CID_MPEG_MFC51_BASE+5)), "V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV != (V4L2_CID_MPEG_MFC51_BASE+5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV (V4L2_CID_MPEG_MFC51_BASE+5)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT) == ((V4L2_CID_MPEG_MFC51_BASE+6)), "V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT != (V4L2_CID_MPEG_MFC51_BASE+6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT (V4L2_CID_MPEG_MFC51_BASE+6)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF) == ((V4L2_CID_MPEG_MFC51_BASE+7)), "V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF != (V4L2_CID_MPEG_MFC51_BASE+7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF (V4L2_CID_MPEG_MFC51_BASE+7)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY) == ((V4L2_CID_MPEG_MFC51_BASE+50)), "V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY != (V4L2_CID_MPEG_MFC51_BASE+50)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY (V4L2_CID_MPEG_MFC51_BASE+50)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK) == ((V4L2_CID_MPEG_MFC51_BASE+51)), "V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK != (V4L2_CID_MPEG_MFC51_BASE+51)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK (V4L2_CID_MPEG_MFC51_BASE+51)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH) == ((V4L2_CID_MPEG_MFC51_BASE+52)), "V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH != (V4L2_CID_MPEG_MFC51_BASE+52)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH (V4L2_CID_MPEG_MFC51_BASE+52)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC) == ((V4L2_CID_MPEG_MFC51_BASE+53)), "V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC != (V4L2_CID_MPEG_MFC51_BASE+53)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC (V4L2_CID_MPEG_MFC51_BASE+53)
+#endif
+#if defined(V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P) && HAVE_DECL_V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P) == ((V4L2_CID_MPEG_MFC51_BASE+54)), "V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P != (V4L2_CID_MPEG_MFC51_BASE+54)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P (V4L2_CID_MPEG_MFC51_BASE+54)
+#endif
+#if defined(V4L2_CID_EXPOSURE_AUTO) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE_AUTO) && HAVE_DECL_V4L2_CID_EXPOSURE_AUTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_EXPOSURE_AUTO) == ((V4L2_CID_CAMERA_CLASS_BASE+1)), "V4L2_CID_EXPOSURE_AUTO != (V4L2_CID_CAMERA_CLASS_BASE+1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_EXPOSURE_AUTO (V4L2_CID_CAMERA_CLASS_BASE+1)
+#endif
+#if defined(V4L2_CID_EXPOSURE_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE_ABSOLUTE) && HAVE_DECL_V4L2_CID_EXPOSURE_ABSOLUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_EXPOSURE_ABSOLUTE) == ((V4L2_CID_CAMERA_CLASS_BASE+2)), "V4L2_CID_EXPOSURE_ABSOLUTE != (V4L2_CID_CAMERA_CLASS_BASE+2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_EXPOSURE_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+2)
+#endif
+#if defined(V4L2_CID_EXPOSURE_AUTO_PRIORITY) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE_AUTO_PRIORITY) && HAVE_DECL_V4L2_CID_EXPOSURE_AUTO_PRIORITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_EXPOSURE_AUTO_PRIORITY) == ((V4L2_CID_CAMERA_CLASS_BASE+3)), "V4L2_CID_EXPOSURE_AUTO_PRIORITY != (V4L2_CID_CAMERA_CLASS_BASE+3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_EXPOSURE_AUTO_PRIORITY (V4L2_CID_CAMERA_CLASS_BASE+3)
+#endif
+#if defined(V4L2_CID_PAN_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_PAN_RELATIVE) && HAVE_DECL_V4L2_CID_PAN_RELATIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_PAN_RELATIVE) == ((V4L2_CID_CAMERA_CLASS_BASE+4)), "V4L2_CID_PAN_RELATIVE != (V4L2_CID_CAMERA_CLASS_BASE+4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_PAN_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+4)
+#endif
+#if defined(V4L2_CID_TILT_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_TILT_RELATIVE) && HAVE_DECL_V4L2_CID_TILT_RELATIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TILT_RELATIVE) == ((V4L2_CID_CAMERA_CLASS_BASE+5)), "V4L2_CID_TILT_RELATIVE != (V4L2_CID_CAMERA_CLASS_BASE+5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TILT_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+5)
+#endif
+#if defined(V4L2_CID_PAN_RESET) || (defined(HAVE_DECL_V4L2_CID_PAN_RESET) && HAVE_DECL_V4L2_CID_PAN_RESET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_PAN_RESET) == ((V4L2_CID_CAMERA_CLASS_BASE+6)), "V4L2_CID_PAN_RESET != (V4L2_CID_CAMERA_CLASS_BASE+6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_PAN_RESET (V4L2_CID_CAMERA_CLASS_BASE+6)
+#endif
+#if defined(V4L2_CID_TILT_RESET) || (defined(HAVE_DECL_V4L2_CID_TILT_RESET) && HAVE_DECL_V4L2_CID_TILT_RESET)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TILT_RESET) == ((V4L2_CID_CAMERA_CLASS_BASE+7)), "V4L2_CID_TILT_RESET != (V4L2_CID_CAMERA_CLASS_BASE+7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TILT_RESET (V4L2_CID_CAMERA_CLASS_BASE+7)
+#endif
+#if defined(V4L2_CID_PAN_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_PAN_ABSOLUTE) && HAVE_DECL_V4L2_CID_PAN_ABSOLUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_PAN_ABSOLUTE) == ((V4L2_CID_CAMERA_CLASS_BASE+8)), "V4L2_CID_PAN_ABSOLUTE != (V4L2_CID_CAMERA_CLASS_BASE+8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_PAN_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+8)
+#endif
+#if defined(V4L2_CID_TILT_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_TILT_ABSOLUTE) && HAVE_DECL_V4L2_CID_TILT_ABSOLUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TILT_ABSOLUTE) == ((V4L2_CID_CAMERA_CLASS_BASE+9)), "V4L2_CID_TILT_ABSOLUTE != (V4L2_CID_CAMERA_CLASS_BASE+9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TILT_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+9)
+#endif
+#if defined(V4L2_CID_FOCUS_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_FOCUS_ABSOLUTE) && HAVE_DECL_V4L2_CID_FOCUS_ABSOLUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FOCUS_ABSOLUTE) == ((V4L2_CID_CAMERA_CLASS_BASE+10)), "V4L2_CID_FOCUS_ABSOLUTE != (V4L2_CID_CAMERA_CLASS_BASE+10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FOCUS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+10)
+#endif
+#if defined(V4L2_CID_FOCUS_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_FOCUS_RELATIVE) && HAVE_DECL_V4L2_CID_FOCUS_RELATIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FOCUS_RELATIVE) == ((V4L2_CID_CAMERA_CLASS_BASE+11)), "V4L2_CID_FOCUS_RELATIVE != (V4L2_CID_CAMERA_CLASS_BASE+11)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FOCUS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+11)
+#endif
+#if defined(V4L2_CID_FOCUS_AUTO) || (defined(HAVE_DECL_V4L2_CID_FOCUS_AUTO) && HAVE_DECL_V4L2_CID_FOCUS_AUTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FOCUS_AUTO) == ((V4L2_CID_CAMERA_CLASS_BASE+12)), "V4L2_CID_FOCUS_AUTO != (V4L2_CID_CAMERA_CLASS_BASE+12)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FOCUS_AUTO (V4L2_CID_CAMERA_CLASS_BASE+12)
+#endif
+#if defined(V4L2_CID_ZOOM_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_ZOOM_ABSOLUTE) && HAVE_DECL_V4L2_CID_ZOOM_ABSOLUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ZOOM_ABSOLUTE) == ((V4L2_CID_CAMERA_CLASS_BASE+13)), "V4L2_CID_ZOOM_ABSOLUTE != (V4L2_CID_CAMERA_CLASS_BASE+13)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ZOOM_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+13)
+#endif
+#if defined(V4L2_CID_ZOOM_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_ZOOM_RELATIVE) && HAVE_DECL_V4L2_CID_ZOOM_RELATIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ZOOM_RELATIVE) == ((V4L2_CID_CAMERA_CLASS_BASE+14)), "V4L2_CID_ZOOM_RELATIVE != (V4L2_CID_CAMERA_CLASS_BASE+14)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ZOOM_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+14)
+#endif
+#if defined(V4L2_CID_ZOOM_CONTINUOUS) || (defined(HAVE_DECL_V4L2_CID_ZOOM_CONTINUOUS) && HAVE_DECL_V4L2_CID_ZOOM_CONTINUOUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ZOOM_CONTINUOUS) == ((V4L2_CID_CAMERA_CLASS_BASE+15)), "V4L2_CID_ZOOM_CONTINUOUS != (V4L2_CID_CAMERA_CLASS_BASE+15)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ZOOM_CONTINUOUS (V4L2_CID_CAMERA_CLASS_BASE+15)
+#endif
+#if defined(V4L2_CID_PRIVACY) || (defined(HAVE_DECL_V4L2_CID_PRIVACY) && HAVE_DECL_V4L2_CID_PRIVACY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_PRIVACY) == ((V4L2_CID_CAMERA_CLASS_BASE+16)), "V4L2_CID_PRIVACY != (V4L2_CID_CAMERA_CLASS_BASE+16)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16)
+#endif
+#if defined(V4L2_CID_IRIS_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_IRIS_ABSOLUTE) && HAVE_DECL_V4L2_CID_IRIS_ABSOLUTE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_IRIS_ABSOLUTE) == ((V4L2_CID_CAMERA_CLASS_BASE+17)), "V4L2_CID_IRIS_ABSOLUTE != (V4L2_CID_CAMERA_CLASS_BASE+17)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_IRIS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+17)
+#endif
+#if defined(V4L2_CID_IRIS_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_IRIS_RELATIVE) && HAVE_DECL_V4L2_CID_IRIS_RELATIVE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_IRIS_RELATIVE) == ((V4L2_CID_CAMERA_CLASS_BASE+18)), "V4L2_CID_IRIS_RELATIVE != (V4L2_CID_CAMERA_CLASS_BASE+18)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_IRIS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+18)
+#endif
+#if defined(V4L2_CID_AUTO_EXPOSURE_BIAS) || (defined(HAVE_DECL_V4L2_CID_AUTO_EXPOSURE_BIAS) && HAVE_DECL_V4L2_CID_AUTO_EXPOSURE_BIAS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUTO_EXPOSURE_BIAS) == ((V4L2_CID_CAMERA_CLASS_BASE+19)), "V4L2_CID_AUTO_EXPOSURE_BIAS != (V4L2_CID_CAMERA_CLASS_BASE+19)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUTO_EXPOSURE_BIAS (V4L2_CID_CAMERA_CLASS_BASE+19)
+#endif
+#if defined(V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE) || (defined(HAVE_DECL_V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE) && HAVE_DECL_V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE) == ((V4L2_CID_CAMERA_CLASS_BASE+20)), "V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE != (V4L2_CID_CAMERA_CLASS_BASE+20)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE (V4L2_CID_CAMERA_CLASS_BASE+20)
+#endif
+#if defined(V4L2_CID_WIDE_DYNAMIC_RANGE) || (defined(HAVE_DECL_V4L2_CID_WIDE_DYNAMIC_RANGE) && HAVE_DECL_V4L2_CID_WIDE_DYNAMIC_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_WIDE_DYNAMIC_RANGE) == ((V4L2_CID_CAMERA_CLASS_BASE+21)), "V4L2_CID_WIDE_DYNAMIC_RANGE != (V4L2_CID_CAMERA_CLASS_BASE+21)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_WIDE_DYNAMIC_RANGE (V4L2_CID_CAMERA_CLASS_BASE+21)
+#endif
+#if defined(V4L2_CID_IMAGE_STABILIZATION) || (defined(HAVE_DECL_V4L2_CID_IMAGE_STABILIZATION) && HAVE_DECL_V4L2_CID_IMAGE_STABILIZATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_IMAGE_STABILIZATION) == ((V4L2_CID_CAMERA_CLASS_BASE+22)), "V4L2_CID_IMAGE_STABILIZATION != (V4L2_CID_CAMERA_CLASS_BASE+22)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_IMAGE_STABILIZATION (V4L2_CID_CAMERA_CLASS_BASE+22)
+#endif
+#if defined(V4L2_CID_ISO_SENSITIVITY) || (defined(HAVE_DECL_V4L2_CID_ISO_SENSITIVITY) && HAVE_DECL_V4L2_CID_ISO_SENSITIVITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ISO_SENSITIVITY) == ((V4L2_CID_CAMERA_CLASS_BASE+23)), "V4L2_CID_ISO_SENSITIVITY != (V4L2_CID_CAMERA_CLASS_BASE+23)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ISO_SENSITIVITY (V4L2_CID_CAMERA_CLASS_BASE+23)
+#endif
+#if defined(V4L2_CID_ISO_SENSITIVITY_AUTO) || (defined(HAVE_DECL_V4L2_CID_ISO_SENSITIVITY_AUTO) && HAVE_DECL_V4L2_CID_ISO_SENSITIVITY_AUTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ISO_SENSITIVITY_AUTO) == ((V4L2_CID_CAMERA_CLASS_BASE+24)), "V4L2_CID_ISO_SENSITIVITY_AUTO != (V4L2_CID_CAMERA_CLASS_BASE+24)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ISO_SENSITIVITY_AUTO (V4L2_CID_CAMERA_CLASS_BASE+24)
+#endif
+#if defined(V4L2_CID_EXPOSURE_METERING) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE_METERING) && HAVE_DECL_V4L2_CID_EXPOSURE_METERING)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_EXPOSURE_METERING) == ((V4L2_CID_CAMERA_CLASS_BASE+25)), "V4L2_CID_EXPOSURE_METERING != (V4L2_CID_CAMERA_CLASS_BASE+25)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_EXPOSURE_METERING (V4L2_CID_CAMERA_CLASS_BASE+25)
+#endif
+#if defined(V4L2_CID_SCENE_MODE) || (defined(HAVE_DECL_V4L2_CID_SCENE_MODE) && HAVE_DECL_V4L2_CID_SCENE_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_SCENE_MODE) == ((V4L2_CID_CAMERA_CLASS_BASE+26)), "V4L2_CID_SCENE_MODE != (V4L2_CID_CAMERA_CLASS_BASE+26)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_SCENE_MODE (V4L2_CID_CAMERA_CLASS_BASE+26)
+#endif
+#if defined(V4L2_CID_3A_LOCK) || (defined(HAVE_DECL_V4L2_CID_3A_LOCK) && HAVE_DECL_V4L2_CID_3A_LOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_3A_LOCK) == ((V4L2_CID_CAMERA_CLASS_BASE+27)), "V4L2_CID_3A_LOCK != (V4L2_CID_CAMERA_CLASS_BASE+27)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_3A_LOCK (V4L2_CID_CAMERA_CLASS_BASE+27)
+#endif
+#if defined(V4L2_CID_AUTO_FOCUS_START) || (defined(HAVE_DECL_V4L2_CID_AUTO_FOCUS_START) && HAVE_DECL_V4L2_CID_AUTO_FOCUS_START)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUTO_FOCUS_START) == ((V4L2_CID_CAMERA_CLASS_BASE+28)), "V4L2_CID_AUTO_FOCUS_START != (V4L2_CID_CAMERA_CLASS_BASE+28)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUTO_FOCUS_START (V4L2_CID_CAMERA_CLASS_BASE+28)
+#endif
+#if defined(V4L2_CID_AUTO_FOCUS_STOP) || (defined(HAVE_DECL_V4L2_CID_AUTO_FOCUS_STOP) && HAVE_DECL_V4L2_CID_AUTO_FOCUS_STOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUTO_FOCUS_STOP) == ((V4L2_CID_CAMERA_CLASS_BASE+29)), "V4L2_CID_AUTO_FOCUS_STOP != (V4L2_CID_CAMERA_CLASS_BASE+29)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUTO_FOCUS_STOP (V4L2_CID_CAMERA_CLASS_BASE+29)
+#endif
+#if defined(V4L2_CID_AUTO_FOCUS_STATUS) || (defined(HAVE_DECL_V4L2_CID_AUTO_FOCUS_STATUS) && HAVE_DECL_V4L2_CID_AUTO_FOCUS_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUTO_FOCUS_STATUS) == ((V4L2_CID_CAMERA_CLASS_BASE+30)), "V4L2_CID_AUTO_FOCUS_STATUS != (V4L2_CID_CAMERA_CLASS_BASE+30)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUTO_FOCUS_STATUS (V4L2_CID_CAMERA_CLASS_BASE+30)
+#endif
+#if defined(V4L2_CID_AUTO_FOCUS_RANGE) || (defined(HAVE_DECL_V4L2_CID_AUTO_FOCUS_RANGE) && HAVE_DECL_V4L2_CID_AUTO_FOCUS_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUTO_FOCUS_RANGE) == ((V4L2_CID_CAMERA_CLASS_BASE+31)), "V4L2_CID_AUTO_FOCUS_RANGE != (V4L2_CID_CAMERA_CLASS_BASE+31)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUTO_FOCUS_RANGE (V4L2_CID_CAMERA_CLASS_BASE+31)
+#endif
+#if defined(V4L2_CID_PAN_SPEED) || (defined(HAVE_DECL_V4L2_CID_PAN_SPEED) && HAVE_DECL_V4L2_CID_PAN_SPEED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_PAN_SPEED) == ((V4L2_CID_CAMERA_CLASS_BASE+32)), "V4L2_CID_PAN_SPEED != (V4L2_CID_CAMERA_CLASS_BASE+32)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_PAN_SPEED (V4L2_CID_CAMERA_CLASS_BASE+32)
+#endif
+#if defined(V4L2_CID_TILT_SPEED) || (defined(HAVE_DECL_V4L2_CID_TILT_SPEED) && HAVE_DECL_V4L2_CID_TILT_SPEED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TILT_SPEED) == ((V4L2_CID_CAMERA_CLASS_BASE+33)), "V4L2_CID_TILT_SPEED != (V4L2_CID_CAMERA_CLASS_BASE+33)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TILT_SPEED (V4L2_CID_CAMERA_CLASS_BASE+33)
+#endif
+#if defined(V4L2_CID_RDS_TX_DEVIATION) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_DEVIATION) && HAVE_DECL_V4L2_CID_RDS_TX_DEVIATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_DEVIATION) == ((V4L2_CID_FM_TX_CLASS_BASE + 1)), "V4L2_CID_RDS_TX_DEVIATION != (V4L2_CID_FM_TX_CLASS_BASE + 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 1)
+#endif
+#if defined(V4L2_CID_RDS_TX_PI) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_PI) && HAVE_DECL_V4L2_CID_RDS_TX_PI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_PI) == ((V4L2_CID_FM_TX_CLASS_BASE + 2)), "V4L2_CID_RDS_TX_PI != (V4L2_CID_FM_TX_CLASS_BASE + 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_PI (V4L2_CID_FM_TX_CLASS_BASE + 2)
+#endif
+#if defined(V4L2_CID_RDS_TX_PTY) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_PTY) && HAVE_DECL_V4L2_CID_RDS_TX_PTY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_PTY) == ((V4L2_CID_FM_TX_CLASS_BASE + 3)), "V4L2_CID_RDS_TX_PTY != (V4L2_CID_FM_TX_CLASS_BASE + 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_PTY (V4L2_CID_FM_TX_CLASS_BASE + 3)
+#endif
+#if defined(V4L2_CID_RDS_TX_PS_NAME) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_PS_NAME) && HAVE_DECL_V4L2_CID_RDS_TX_PS_NAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_PS_NAME) == ((V4L2_CID_FM_TX_CLASS_BASE + 5)), "V4L2_CID_RDS_TX_PS_NAME != (V4L2_CID_FM_TX_CLASS_BASE + 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5)
+#endif
+#if defined(V4L2_CID_RDS_TX_RADIO_TEXT) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_RADIO_TEXT) && HAVE_DECL_V4L2_CID_RDS_TX_RADIO_TEXT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_RADIO_TEXT) == ((V4L2_CID_FM_TX_CLASS_BASE + 6)), "V4L2_CID_RDS_TX_RADIO_TEXT != (V4L2_CID_FM_TX_CLASS_BASE + 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6)
+#endif
+#if defined(V4L2_CID_RDS_TX_MONO_STEREO) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_MONO_STEREO) && HAVE_DECL_V4L2_CID_RDS_TX_MONO_STEREO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_MONO_STEREO) == ((V4L2_CID_FM_TX_CLASS_BASE + 7)), "V4L2_CID_RDS_TX_MONO_STEREO != (V4L2_CID_FM_TX_CLASS_BASE + 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_MONO_STEREO (V4L2_CID_FM_TX_CLASS_BASE + 7)
+#endif
+#if defined(V4L2_CID_RDS_TX_ARTIFICIAL_HEAD) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_ARTIFICIAL_HEAD) && HAVE_DECL_V4L2_CID_RDS_TX_ARTIFICIAL_HEAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_ARTIFICIAL_HEAD) == ((V4L2_CID_FM_TX_CLASS_BASE + 8)), "V4L2_CID_RDS_TX_ARTIFICIAL_HEAD != (V4L2_CID_FM_TX_CLASS_BASE + 8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_ARTIFICIAL_HEAD (V4L2_CID_FM_TX_CLASS_BASE + 8)
+#endif
+#if defined(V4L2_CID_RDS_TX_COMPRESSED) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_COMPRESSED) && HAVE_DECL_V4L2_CID_RDS_TX_COMPRESSED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_COMPRESSED) == ((V4L2_CID_FM_TX_CLASS_BASE + 9)), "V4L2_CID_RDS_TX_COMPRESSED != (V4L2_CID_FM_TX_CLASS_BASE + 9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_COMPRESSED (V4L2_CID_FM_TX_CLASS_BASE + 9)
+#endif
+#if defined(V4L2_CID_RDS_TX_DYNAMIC_PTY) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_DYNAMIC_PTY) && HAVE_DECL_V4L2_CID_RDS_TX_DYNAMIC_PTY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_DYNAMIC_PTY) == ((V4L2_CID_FM_TX_CLASS_BASE + 10)), "V4L2_CID_RDS_TX_DYNAMIC_PTY != (V4L2_CID_FM_TX_CLASS_BASE + 10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_DYNAMIC_PTY (V4L2_CID_FM_TX_CLASS_BASE + 10)
+#endif
+#if defined(V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT) && HAVE_DECL_V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT) == ((V4L2_CID_FM_TX_CLASS_BASE + 11)), "V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT != (V4L2_CID_FM_TX_CLASS_BASE + 11)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT (V4L2_CID_FM_TX_CLASS_BASE + 11)
+#endif
+#if defined(V4L2_CID_RDS_TX_TRAFFIC_PROGRAM) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_TRAFFIC_PROGRAM) && HAVE_DECL_V4L2_CID_RDS_TX_TRAFFIC_PROGRAM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_TRAFFIC_PROGRAM) == ((V4L2_CID_FM_TX_CLASS_BASE + 12)), "V4L2_CID_RDS_TX_TRAFFIC_PROGRAM != (V4L2_CID_FM_TX_CLASS_BASE + 12)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_TRAFFIC_PROGRAM (V4L2_CID_FM_TX_CLASS_BASE + 12)
+#endif
+#if defined(V4L2_CID_RDS_TX_MUSIC_SPEECH) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_MUSIC_SPEECH) && HAVE_DECL_V4L2_CID_RDS_TX_MUSIC_SPEECH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_MUSIC_SPEECH) == ((V4L2_CID_FM_TX_CLASS_BASE + 13)), "V4L2_CID_RDS_TX_MUSIC_SPEECH != (V4L2_CID_FM_TX_CLASS_BASE + 13)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_MUSIC_SPEECH (V4L2_CID_FM_TX_CLASS_BASE + 13)
+#endif
+#if defined(V4L2_CID_RDS_TX_ALT_FREQS_ENABLE) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_ALT_FREQS_ENABLE) && HAVE_DECL_V4L2_CID_RDS_TX_ALT_FREQS_ENABLE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_ALT_FREQS_ENABLE) == ((V4L2_CID_FM_TX_CLASS_BASE + 14)), "V4L2_CID_RDS_TX_ALT_FREQS_ENABLE != (V4L2_CID_FM_TX_CLASS_BASE + 14)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_ALT_FREQS_ENABLE (V4L2_CID_FM_TX_CLASS_BASE + 14)
+#endif
+#if defined(V4L2_CID_RDS_TX_ALT_FREQS) || (defined(HAVE_DECL_V4L2_CID_RDS_TX_ALT_FREQS) && HAVE_DECL_V4L2_CID_RDS_TX_ALT_FREQS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_TX_ALT_FREQS) == ((V4L2_CID_FM_TX_CLASS_BASE + 15)), "V4L2_CID_RDS_TX_ALT_FREQS != (V4L2_CID_FM_TX_CLASS_BASE + 15)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_TX_ALT_FREQS (V4L2_CID_FM_TX_CLASS_BASE + 15)
+#endif
+#if defined(V4L2_CID_AUDIO_LIMITER_ENABLED) || (defined(HAVE_DECL_V4L2_CID_AUDIO_LIMITER_ENABLED) && HAVE_DECL_V4L2_CID_AUDIO_LIMITER_ENABLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_LIMITER_ENABLED) == ((V4L2_CID_FM_TX_CLASS_BASE + 64)), "V4L2_CID_AUDIO_LIMITER_ENABLED != (V4L2_CID_FM_TX_CLASS_BASE + 64)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_LIMITER_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 64)
+#endif
+#if defined(V4L2_CID_AUDIO_LIMITER_RELEASE_TIME) || (defined(HAVE_DECL_V4L2_CID_AUDIO_LIMITER_RELEASE_TIME) && HAVE_DECL_V4L2_CID_AUDIO_LIMITER_RELEASE_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_LIMITER_RELEASE_TIME) == ((V4L2_CID_FM_TX_CLASS_BASE + 65)), "V4L2_CID_AUDIO_LIMITER_RELEASE_TIME != (V4L2_CID_FM_TX_CLASS_BASE + 65)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 65)
+#endif
+#if defined(V4L2_CID_AUDIO_LIMITER_DEVIATION) || (defined(HAVE_DECL_V4L2_CID_AUDIO_LIMITER_DEVIATION) && HAVE_DECL_V4L2_CID_AUDIO_LIMITER_DEVIATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_LIMITER_DEVIATION) == ((V4L2_CID_FM_TX_CLASS_BASE + 66)), "V4L2_CID_AUDIO_LIMITER_DEVIATION != (V4L2_CID_FM_TX_CLASS_BASE + 66)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_LIMITER_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 66)
+#endif
+#if defined(V4L2_CID_AUDIO_COMPRESSION_ENABLED) || (defined(HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_ENABLED) && HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_ENABLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_COMPRESSION_ENABLED) == ((V4L2_CID_FM_TX_CLASS_BASE + 80)), "V4L2_CID_AUDIO_COMPRESSION_ENABLED != (V4L2_CID_FM_TX_CLASS_BASE + 80)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_COMPRESSION_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 80)
+#endif
+#if defined(V4L2_CID_AUDIO_COMPRESSION_GAIN) || (defined(HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_GAIN) && HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_COMPRESSION_GAIN) == ((V4L2_CID_FM_TX_CLASS_BASE + 81)), "V4L2_CID_AUDIO_COMPRESSION_GAIN != (V4L2_CID_FM_TX_CLASS_BASE + 81)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_COMPRESSION_GAIN (V4L2_CID_FM_TX_CLASS_BASE + 81)
+#endif
+#if defined(V4L2_CID_AUDIO_COMPRESSION_THRESHOLD) || (defined(HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_THRESHOLD) && HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_THRESHOLD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_COMPRESSION_THRESHOLD) == ((V4L2_CID_FM_TX_CLASS_BASE + 82)), "V4L2_CID_AUDIO_COMPRESSION_THRESHOLD != (V4L2_CID_FM_TX_CLASS_BASE + 82)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD (V4L2_CID_FM_TX_CLASS_BASE + 82)
+#endif
+#if defined(V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME) || (defined(HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME) && HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME) == ((V4L2_CID_FM_TX_CLASS_BASE + 83)), "V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME != (V4L2_CID_FM_TX_CLASS_BASE + 83)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (V4L2_CID_FM_TX_CLASS_BASE + 83)
+#endif
+#if defined(V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME) || (defined(HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME) && HAVE_DECL_V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME) == ((V4L2_CID_FM_TX_CLASS_BASE + 84)), "V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME != (V4L2_CID_FM_TX_CLASS_BASE + 84)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84)
+#endif
+#if defined(V4L2_CID_PILOT_TONE_ENABLED) || (defined(HAVE_DECL_V4L2_CID_PILOT_TONE_ENABLED) && HAVE_DECL_V4L2_CID_PILOT_TONE_ENABLED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_PILOT_TONE_ENABLED) == ((V4L2_CID_FM_TX_CLASS_BASE + 96)), "V4L2_CID_PILOT_TONE_ENABLED != (V4L2_CID_FM_TX_CLASS_BASE + 96)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_PILOT_TONE_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 96)
+#endif
+#if defined(V4L2_CID_PILOT_TONE_DEVIATION) || (defined(HAVE_DECL_V4L2_CID_PILOT_TONE_DEVIATION) && HAVE_DECL_V4L2_CID_PILOT_TONE_DEVIATION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_PILOT_TONE_DEVIATION) == ((V4L2_CID_FM_TX_CLASS_BASE + 97)), "V4L2_CID_PILOT_TONE_DEVIATION != (V4L2_CID_FM_TX_CLASS_BASE + 97)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_PILOT_TONE_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 97)
+#endif
+#if defined(V4L2_CID_PILOT_TONE_FREQUENCY) || (defined(HAVE_DECL_V4L2_CID_PILOT_TONE_FREQUENCY) && HAVE_DECL_V4L2_CID_PILOT_TONE_FREQUENCY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_PILOT_TONE_FREQUENCY) == ((V4L2_CID_FM_TX_CLASS_BASE + 98)), "V4L2_CID_PILOT_TONE_FREQUENCY != (V4L2_CID_FM_TX_CLASS_BASE + 98)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_PILOT_TONE_FREQUENCY (V4L2_CID_FM_TX_CLASS_BASE + 98)
+#endif
+#if defined(V4L2_CID_TUNE_PREEMPHASIS) || (defined(HAVE_DECL_V4L2_CID_TUNE_PREEMPHASIS) && HAVE_DECL_V4L2_CID_TUNE_PREEMPHASIS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TUNE_PREEMPHASIS) == ((V4L2_CID_FM_TX_CLASS_BASE + 112)), "V4L2_CID_TUNE_PREEMPHASIS != (V4L2_CID_FM_TX_CLASS_BASE + 112)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TUNE_PREEMPHASIS (V4L2_CID_FM_TX_CLASS_BASE + 112)
+#endif
+#if defined(V4L2_CID_TUNE_POWER_LEVEL) || (defined(HAVE_DECL_V4L2_CID_TUNE_POWER_LEVEL) && HAVE_DECL_V4L2_CID_TUNE_POWER_LEVEL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TUNE_POWER_LEVEL) == ((V4L2_CID_FM_TX_CLASS_BASE + 113)), "V4L2_CID_TUNE_POWER_LEVEL != (V4L2_CID_FM_TX_CLASS_BASE + 113)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TUNE_POWER_LEVEL (V4L2_CID_FM_TX_CLASS_BASE + 113)
+#endif
+#if defined(V4L2_CID_TUNE_ANTENNA_CAPACITOR) || (defined(HAVE_DECL_V4L2_CID_TUNE_ANTENNA_CAPACITOR) && HAVE_DECL_V4L2_CID_TUNE_ANTENNA_CAPACITOR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TUNE_ANTENNA_CAPACITOR) == ((V4L2_CID_FM_TX_CLASS_BASE + 114)), "V4L2_CID_TUNE_ANTENNA_CAPACITOR != (V4L2_CID_FM_TX_CLASS_BASE + 114)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TUNE_ANTENNA_CAPACITOR (V4L2_CID_FM_TX_CLASS_BASE + 114)
+#endif
+#if defined(V4L2_CID_FLASH_LED_MODE) || (defined(HAVE_DECL_V4L2_CID_FLASH_LED_MODE) && HAVE_DECL_V4L2_CID_FLASH_LED_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_LED_MODE) == ((V4L2_CID_FLASH_CLASS_BASE + 1)), "V4L2_CID_FLASH_LED_MODE != (V4L2_CID_FLASH_CLASS_BASE + 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_LED_MODE (V4L2_CID_FLASH_CLASS_BASE + 1)
+#endif
+#if defined(V4L2_CID_FLASH_STROBE_SOURCE) || (defined(HAVE_DECL_V4L2_CID_FLASH_STROBE_SOURCE) && HAVE_DECL_V4L2_CID_FLASH_STROBE_SOURCE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_STROBE_SOURCE) == ((V4L2_CID_FLASH_CLASS_BASE + 2)), "V4L2_CID_FLASH_STROBE_SOURCE != (V4L2_CID_FLASH_CLASS_BASE + 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_STROBE_SOURCE (V4L2_CID_FLASH_CLASS_BASE + 2)
+#endif
+#if defined(V4L2_CID_FLASH_STROBE) || (defined(HAVE_DECL_V4L2_CID_FLASH_STROBE) && HAVE_DECL_V4L2_CID_FLASH_STROBE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_STROBE) == ((V4L2_CID_FLASH_CLASS_BASE + 3)), "V4L2_CID_FLASH_STROBE != (V4L2_CID_FLASH_CLASS_BASE + 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_STROBE (V4L2_CID_FLASH_CLASS_BASE + 3)
+#endif
+#if defined(V4L2_CID_FLASH_STROBE_STOP) || (defined(HAVE_DECL_V4L2_CID_FLASH_STROBE_STOP) && HAVE_DECL_V4L2_CID_FLASH_STROBE_STOP)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_STROBE_STOP) == ((V4L2_CID_FLASH_CLASS_BASE + 4)), "V4L2_CID_FLASH_STROBE_STOP != (V4L2_CID_FLASH_CLASS_BASE + 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_STROBE_STOP (V4L2_CID_FLASH_CLASS_BASE + 4)
+#endif
+#if defined(V4L2_CID_FLASH_STROBE_STATUS) || (defined(HAVE_DECL_V4L2_CID_FLASH_STROBE_STATUS) && HAVE_DECL_V4L2_CID_FLASH_STROBE_STATUS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_STROBE_STATUS) == ((V4L2_CID_FLASH_CLASS_BASE + 5)), "V4L2_CID_FLASH_STROBE_STATUS != (V4L2_CID_FLASH_CLASS_BASE + 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_STROBE_STATUS (V4L2_CID_FLASH_CLASS_BASE + 5)
+#endif
+#if defined(V4L2_CID_FLASH_TIMEOUT) || (defined(HAVE_DECL_V4L2_CID_FLASH_TIMEOUT) && HAVE_DECL_V4L2_CID_FLASH_TIMEOUT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_TIMEOUT) == ((V4L2_CID_FLASH_CLASS_BASE + 6)), "V4L2_CID_FLASH_TIMEOUT != (V4L2_CID_FLASH_CLASS_BASE + 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_TIMEOUT (V4L2_CID_FLASH_CLASS_BASE + 6)
+#endif
+#if defined(V4L2_CID_FLASH_INTENSITY) || (defined(HAVE_DECL_V4L2_CID_FLASH_INTENSITY) && HAVE_DECL_V4L2_CID_FLASH_INTENSITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_INTENSITY) == ((V4L2_CID_FLASH_CLASS_BASE + 7)), "V4L2_CID_FLASH_INTENSITY != (V4L2_CID_FLASH_CLASS_BASE + 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_INTENSITY (V4L2_CID_FLASH_CLASS_BASE + 7)
+#endif
+#if defined(V4L2_CID_FLASH_TORCH_INTENSITY) || (defined(HAVE_DECL_V4L2_CID_FLASH_TORCH_INTENSITY) && HAVE_DECL_V4L2_CID_FLASH_TORCH_INTENSITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_TORCH_INTENSITY) == ((V4L2_CID_FLASH_CLASS_BASE + 8)), "V4L2_CID_FLASH_TORCH_INTENSITY != (V4L2_CID_FLASH_CLASS_BASE + 8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_TORCH_INTENSITY (V4L2_CID_FLASH_CLASS_BASE + 8)
+#endif
+#if defined(V4L2_CID_FLASH_INDICATOR_INTENSITY) || (defined(HAVE_DECL_V4L2_CID_FLASH_INDICATOR_INTENSITY) && HAVE_DECL_V4L2_CID_FLASH_INDICATOR_INTENSITY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_INDICATOR_INTENSITY) == ((V4L2_CID_FLASH_CLASS_BASE + 9)), "V4L2_CID_FLASH_INDICATOR_INTENSITY != (V4L2_CID_FLASH_CLASS_BASE + 9)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_INDICATOR_INTENSITY (V4L2_CID_FLASH_CLASS_BASE + 9)
+#endif
+#if defined(V4L2_CID_FLASH_FAULT) || (defined(HAVE_DECL_V4L2_CID_FLASH_FAULT) && HAVE_DECL_V4L2_CID_FLASH_FAULT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_FAULT) == ((V4L2_CID_FLASH_CLASS_BASE + 10)), "V4L2_CID_FLASH_FAULT != (V4L2_CID_FLASH_CLASS_BASE + 10)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_FAULT (V4L2_CID_FLASH_CLASS_BASE + 10)
+#endif
+#if defined(V4L2_CID_FLASH_CHARGE) || (defined(HAVE_DECL_V4L2_CID_FLASH_CHARGE) && HAVE_DECL_V4L2_CID_FLASH_CHARGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_CHARGE) == ((V4L2_CID_FLASH_CLASS_BASE + 11)), "V4L2_CID_FLASH_CHARGE != (V4L2_CID_FLASH_CLASS_BASE + 11)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_CHARGE (V4L2_CID_FLASH_CLASS_BASE + 11)
+#endif
+#if defined(V4L2_CID_FLASH_READY) || (defined(HAVE_DECL_V4L2_CID_FLASH_READY) && HAVE_DECL_V4L2_CID_FLASH_READY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_FLASH_READY) == ((V4L2_CID_FLASH_CLASS_BASE + 12)), "V4L2_CID_FLASH_READY != (V4L2_CID_FLASH_CLASS_BASE + 12)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_FLASH_READY (V4L2_CID_FLASH_CLASS_BASE + 12)
+#endif
+#if defined(V4L2_CID_VBLANK) || (defined(HAVE_DECL_V4L2_CID_VBLANK) && HAVE_DECL_V4L2_CID_VBLANK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_VBLANK) == ((V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)), "V4L2_CID_VBLANK != (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_VBLANK (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)
+#endif
+#if defined(V4L2_CID_HBLANK) || (defined(HAVE_DECL_V4L2_CID_HBLANK) && HAVE_DECL_V4L2_CID_HBLANK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_HBLANK) == ((V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)), "V4L2_CID_HBLANK != (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_HBLANK (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)
+#endif
+#if defined(V4L2_CID_ANALOGUE_GAIN) || (defined(HAVE_DECL_V4L2_CID_ANALOGUE_GAIN) && HAVE_DECL_V4L2_CID_ANALOGUE_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_ANALOGUE_GAIN) == ((V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)), "V4L2_CID_ANALOGUE_GAIN != (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_ANALOGUE_GAIN (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)
+#endif
+#if defined(V4L2_CID_TEST_PATTERN_RED) || (defined(HAVE_DECL_V4L2_CID_TEST_PATTERN_RED) && HAVE_DECL_V4L2_CID_TEST_PATTERN_RED)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TEST_PATTERN_RED) == ((V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4)), "V4L2_CID_TEST_PATTERN_RED != (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TEST_PATTERN_RED (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4)
+#endif
+#if defined(V4L2_CID_TEST_PATTERN_GREENR) || (defined(HAVE_DECL_V4L2_CID_TEST_PATTERN_GREENR) && HAVE_DECL_V4L2_CID_TEST_PATTERN_GREENR)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TEST_PATTERN_GREENR) == ((V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)), "V4L2_CID_TEST_PATTERN_GREENR != (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TEST_PATTERN_GREENR (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
+#endif
+#if defined(V4L2_CID_TEST_PATTERN_BLUE) || (defined(HAVE_DECL_V4L2_CID_TEST_PATTERN_BLUE) && HAVE_DECL_V4L2_CID_TEST_PATTERN_BLUE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TEST_PATTERN_BLUE) == ((V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)), "V4L2_CID_TEST_PATTERN_BLUE != (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TEST_PATTERN_BLUE (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
+#endif
+#if defined(V4L2_CID_TEST_PATTERN_GREENB) || (defined(HAVE_DECL_V4L2_CID_TEST_PATTERN_GREENB) && HAVE_DECL_V4L2_CID_TEST_PATTERN_GREENB)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TEST_PATTERN_GREENB) == ((V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)), "V4L2_CID_TEST_PATTERN_GREENB != (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TEST_PATTERN_GREENB (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
+#endif
+#if defined(V4L2_CID_LINK_FREQ) || (defined(HAVE_DECL_V4L2_CID_LINK_FREQ) && HAVE_DECL_V4L2_CID_LINK_FREQ)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_LINK_FREQ) == ((V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)), "V4L2_CID_LINK_FREQ != (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_LINK_FREQ (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
+#endif
+#if defined(V4L2_CID_PIXEL_RATE) || (defined(HAVE_DECL_V4L2_CID_PIXEL_RATE) && HAVE_DECL_V4L2_CID_PIXEL_RATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_PIXEL_RATE) == ((V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)), "V4L2_CID_PIXEL_RATE != (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_PIXEL_RATE (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
+#endif
+#if defined(V4L2_CID_TEST_PATTERN) || (defined(HAVE_DECL_V4L2_CID_TEST_PATTERN) && HAVE_DECL_V4L2_CID_TEST_PATTERN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TEST_PATTERN) == ((V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)), "V4L2_CID_TEST_PATTERN != (V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TEST_PATTERN (V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)
+#endif
+#if defined(V4L2_CID_DEINTERLACING_MODE) || (defined(HAVE_DECL_V4L2_CID_DEINTERLACING_MODE) && HAVE_DECL_V4L2_CID_DEINTERLACING_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DEINTERLACING_MODE) == ((V4L2_CID_IMAGE_PROC_CLASS_BASE + 4)), "V4L2_CID_DEINTERLACING_MODE != (V4L2_CID_IMAGE_PROC_CLASS_BASE + 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DEINTERLACING_MODE (V4L2_CID_IMAGE_PROC_CLASS_BASE + 4)
+#endif
+#if defined(V4L2_CID_DIGITAL_GAIN) || (defined(HAVE_DECL_V4L2_CID_DIGITAL_GAIN) && HAVE_DECL_V4L2_CID_DIGITAL_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DIGITAL_GAIN) == ((V4L2_CID_IMAGE_PROC_CLASS_BASE + 5)), "V4L2_CID_DIGITAL_GAIN != (V4L2_CID_IMAGE_PROC_CLASS_BASE + 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DIGITAL_GAIN (V4L2_CID_IMAGE_PROC_CLASS_BASE + 5)
+#endif
+#if defined(V4L2_CID_DV_TX_RGB_RANGE) || (defined(HAVE_DECL_V4L2_CID_DV_TX_RGB_RANGE) && HAVE_DECL_V4L2_CID_DV_TX_RGB_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DV_TX_RGB_RANGE) == ((V4L2_CID_DV_CLASS_BASE + 5)), "V4L2_CID_DV_TX_RGB_RANGE != (V4L2_CID_DV_CLASS_BASE + 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DV_TX_RGB_RANGE (V4L2_CID_DV_CLASS_BASE + 5)
+#endif
+#if defined(V4L2_CID_DV_TX_IT_CONTENT_TYPE) || (defined(HAVE_DECL_V4L2_CID_DV_TX_IT_CONTENT_TYPE) && HAVE_DECL_V4L2_CID_DV_TX_IT_CONTENT_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DV_TX_IT_CONTENT_TYPE) == ((V4L2_CID_DV_CLASS_BASE + 6)), "V4L2_CID_DV_TX_IT_CONTENT_TYPE != (V4L2_CID_DV_CLASS_BASE + 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DV_TX_IT_CONTENT_TYPE (V4L2_CID_DV_CLASS_BASE + 6)
+#endif
+#if defined(V4L2_CID_DV_RX_RGB_RANGE) || (defined(HAVE_DECL_V4L2_CID_DV_RX_RGB_RANGE) && HAVE_DECL_V4L2_CID_DV_RX_RGB_RANGE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DV_RX_RGB_RANGE) == ((V4L2_CID_DV_CLASS_BASE + 101)), "V4L2_CID_DV_RX_RGB_RANGE != (V4L2_CID_DV_CLASS_BASE + 101)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DV_RX_RGB_RANGE (V4L2_CID_DV_CLASS_BASE + 101)
+#endif
+#if defined(V4L2_CID_DV_RX_IT_CONTENT_TYPE) || (defined(HAVE_DECL_V4L2_CID_DV_RX_IT_CONTENT_TYPE) && HAVE_DECL_V4L2_CID_DV_RX_IT_CONTENT_TYPE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DV_RX_IT_CONTENT_TYPE) == ((V4L2_CID_DV_CLASS_BASE + 102)), "V4L2_CID_DV_RX_IT_CONTENT_TYPE != (V4L2_CID_DV_CLASS_BASE + 102)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DV_RX_IT_CONTENT_TYPE (V4L2_CID_DV_CLASS_BASE + 102)
+#endif
+#if defined(V4L2_CID_TUNE_DEEMPHASIS) || (defined(HAVE_DECL_V4L2_CID_TUNE_DEEMPHASIS) && HAVE_DECL_V4L2_CID_TUNE_DEEMPHASIS)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_TUNE_DEEMPHASIS) == ((V4L2_CID_FM_RX_CLASS_BASE + 1)), "V4L2_CID_TUNE_DEEMPHASIS != (V4L2_CID_FM_RX_CLASS_BASE + 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_TUNE_DEEMPHASIS (V4L2_CID_FM_RX_CLASS_BASE + 1)
+#endif
+#if defined(V4L2_CID_RDS_RECEPTION) || (defined(HAVE_DECL_V4L2_CID_RDS_RECEPTION) && HAVE_DECL_V4L2_CID_RDS_RECEPTION)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_RECEPTION) == ((V4L2_CID_FM_RX_CLASS_BASE + 2)), "V4L2_CID_RDS_RECEPTION != (V4L2_CID_FM_RX_CLASS_BASE + 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_RECEPTION (V4L2_CID_FM_RX_CLASS_BASE + 2)
+#endif
+#if defined(V4L2_CID_RDS_RX_PTY) || (defined(HAVE_DECL_V4L2_CID_RDS_RX_PTY) && HAVE_DECL_V4L2_CID_RDS_RX_PTY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_RX_PTY) == ((V4L2_CID_FM_RX_CLASS_BASE + 3)), "V4L2_CID_RDS_RX_PTY != (V4L2_CID_FM_RX_CLASS_BASE + 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_RX_PTY (V4L2_CID_FM_RX_CLASS_BASE + 3)
+#endif
+#if defined(V4L2_CID_RDS_RX_PS_NAME) || (defined(HAVE_DECL_V4L2_CID_RDS_RX_PS_NAME) && HAVE_DECL_V4L2_CID_RDS_RX_PS_NAME)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_RX_PS_NAME) == ((V4L2_CID_FM_RX_CLASS_BASE + 4)), "V4L2_CID_RDS_RX_PS_NAME != (V4L2_CID_FM_RX_CLASS_BASE + 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_RX_PS_NAME (V4L2_CID_FM_RX_CLASS_BASE + 4)
+#endif
+#if defined(V4L2_CID_RDS_RX_RADIO_TEXT) || (defined(HAVE_DECL_V4L2_CID_RDS_RX_RADIO_TEXT) && HAVE_DECL_V4L2_CID_RDS_RX_RADIO_TEXT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_RX_RADIO_TEXT) == ((V4L2_CID_FM_RX_CLASS_BASE + 5)), "V4L2_CID_RDS_RX_RADIO_TEXT != (V4L2_CID_FM_RX_CLASS_BASE + 5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_RX_RADIO_TEXT (V4L2_CID_FM_RX_CLASS_BASE + 5)
+#endif
+#if defined(V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT) || (defined(HAVE_DECL_V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT) && HAVE_DECL_V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT) == ((V4L2_CID_FM_RX_CLASS_BASE + 6)), "V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT != (V4L2_CID_FM_RX_CLASS_BASE + 6)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT (V4L2_CID_FM_RX_CLASS_BASE + 6)
+#endif
+#if defined(V4L2_CID_RDS_RX_TRAFFIC_PROGRAM) || (defined(HAVE_DECL_V4L2_CID_RDS_RX_TRAFFIC_PROGRAM) && HAVE_DECL_V4L2_CID_RDS_RX_TRAFFIC_PROGRAM)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_RX_TRAFFIC_PROGRAM) == ((V4L2_CID_FM_RX_CLASS_BASE + 7)), "V4L2_CID_RDS_RX_TRAFFIC_PROGRAM != (V4L2_CID_FM_RX_CLASS_BASE + 7)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_RX_TRAFFIC_PROGRAM (V4L2_CID_FM_RX_CLASS_BASE + 7)
+#endif
+#if defined(V4L2_CID_RDS_RX_MUSIC_SPEECH) || (defined(HAVE_DECL_V4L2_CID_RDS_RX_MUSIC_SPEECH) && HAVE_DECL_V4L2_CID_RDS_RX_MUSIC_SPEECH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RDS_RX_MUSIC_SPEECH) == ((V4L2_CID_FM_RX_CLASS_BASE + 8)), "V4L2_CID_RDS_RX_MUSIC_SPEECH != (V4L2_CID_FM_RX_CLASS_BASE + 8)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RDS_RX_MUSIC_SPEECH (V4L2_CID_FM_RX_CLASS_BASE + 8)
+#endif
+#if defined(V4L2_CID_RF_TUNER_BANDWIDTH_AUTO) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_BANDWIDTH_AUTO) && HAVE_DECL_V4L2_CID_RF_TUNER_BANDWIDTH_AUTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_BANDWIDTH_AUTO) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 11)), "V4L2_CID_RF_TUNER_BANDWIDTH_AUTO != (V4L2_CID_RF_TUNER_CLASS_BASE + 11)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_BANDWIDTH_AUTO (V4L2_CID_RF_TUNER_CLASS_BASE + 11)
+#endif
+#if defined(V4L2_CID_RF_TUNER_BANDWIDTH) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_BANDWIDTH) && HAVE_DECL_V4L2_CID_RF_TUNER_BANDWIDTH)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_BANDWIDTH) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 12)), "V4L2_CID_RF_TUNER_BANDWIDTH != (V4L2_CID_RF_TUNER_CLASS_BASE + 12)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_BANDWIDTH (V4L2_CID_RF_TUNER_CLASS_BASE + 12)
+#endif
+#if defined(V4L2_CID_RF_TUNER_RF_GAIN) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_RF_GAIN) && HAVE_DECL_V4L2_CID_RF_TUNER_RF_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_RF_GAIN) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 32)), "V4L2_CID_RF_TUNER_RF_GAIN != (V4L2_CID_RF_TUNER_CLASS_BASE + 32)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_RF_GAIN (V4L2_CID_RF_TUNER_CLASS_BASE + 32)
+#endif
+#if defined(V4L2_CID_RF_TUNER_LNA_GAIN_AUTO) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_LNA_GAIN_AUTO) && HAVE_DECL_V4L2_CID_RF_TUNER_LNA_GAIN_AUTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_LNA_GAIN_AUTO) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 41)), "V4L2_CID_RF_TUNER_LNA_GAIN_AUTO != (V4L2_CID_RF_TUNER_CLASS_BASE + 41)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_LNA_GAIN_AUTO (V4L2_CID_RF_TUNER_CLASS_BASE + 41)
+#endif
+#if defined(V4L2_CID_RF_TUNER_LNA_GAIN) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_LNA_GAIN) && HAVE_DECL_V4L2_CID_RF_TUNER_LNA_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_LNA_GAIN) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 42)), "V4L2_CID_RF_TUNER_LNA_GAIN != (V4L2_CID_RF_TUNER_CLASS_BASE + 42)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_LNA_GAIN (V4L2_CID_RF_TUNER_CLASS_BASE + 42)
+#endif
+#if defined(V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO) && HAVE_DECL_V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 51)), "V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO != (V4L2_CID_RF_TUNER_CLASS_BASE + 51)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO (V4L2_CID_RF_TUNER_CLASS_BASE + 51)
+#endif
+#if defined(V4L2_CID_RF_TUNER_MIXER_GAIN) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_MIXER_GAIN) && HAVE_DECL_V4L2_CID_RF_TUNER_MIXER_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_MIXER_GAIN) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 52)), "V4L2_CID_RF_TUNER_MIXER_GAIN != (V4L2_CID_RF_TUNER_CLASS_BASE + 52)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_MIXER_GAIN (V4L2_CID_RF_TUNER_CLASS_BASE + 52)
+#endif
+#if defined(V4L2_CID_RF_TUNER_IF_GAIN_AUTO) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_IF_GAIN_AUTO) && HAVE_DECL_V4L2_CID_RF_TUNER_IF_GAIN_AUTO)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_IF_GAIN_AUTO) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 61)), "V4L2_CID_RF_TUNER_IF_GAIN_AUTO != (V4L2_CID_RF_TUNER_CLASS_BASE + 61)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_IF_GAIN_AUTO (V4L2_CID_RF_TUNER_CLASS_BASE + 61)
+#endif
+#if defined(V4L2_CID_RF_TUNER_IF_GAIN) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_IF_GAIN) && HAVE_DECL_V4L2_CID_RF_TUNER_IF_GAIN)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_IF_GAIN) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 62)), "V4L2_CID_RF_TUNER_IF_GAIN != (V4L2_CID_RF_TUNER_CLASS_BASE + 62)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_IF_GAIN (V4L2_CID_RF_TUNER_CLASS_BASE + 62)
+#endif
+#if defined(V4L2_CID_RF_TUNER_PLL_LOCK) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_PLL_LOCK) && HAVE_DECL_V4L2_CID_RF_TUNER_PLL_LOCK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_RF_TUNER_PLL_LOCK) == ((V4L2_CID_RF_TUNER_CLASS_BASE + 91)), "V4L2_CID_RF_TUNER_PLL_LOCK != (V4L2_CID_RF_TUNER_CLASS_BASE + 91)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_RF_TUNER_PLL_LOCK (V4L2_CID_RF_TUNER_CLASS_BASE + 91)
+#endif
+#if defined(V4L2_CID_DETECT_MD_MODE) || (defined(HAVE_DECL_V4L2_CID_DETECT_MD_MODE) && HAVE_DECL_V4L2_CID_DETECT_MD_MODE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DETECT_MD_MODE) == ((V4L2_CID_DETECT_CLASS_BASE + 1)), "V4L2_CID_DETECT_MD_MODE != (V4L2_CID_DETECT_CLASS_BASE + 1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DETECT_MD_MODE (V4L2_CID_DETECT_CLASS_BASE + 1)
+#endif
+#if defined(V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD) || (defined(HAVE_DECL_V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD) && HAVE_DECL_V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD) == ((V4L2_CID_DETECT_CLASS_BASE + 2)), "V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD != (V4L2_CID_DETECT_CLASS_BASE + 2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD (V4L2_CID_DETECT_CLASS_BASE + 2)
+#endif
+#if defined(V4L2_CID_DETECT_MD_THRESHOLD_GRID) || (defined(HAVE_DECL_V4L2_CID_DETECT_MD_THRESHOLD_GRID) && HAVE_DECL_V4L2_CID_DETECT_MD_THRESHOLD_GRID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DETECT_MD_THRESHOLD_GRID) == ((V4L2_CID_DETECT_CLASS_BASE + 3)), "V4L2_CID_DETECT_MD_THRESHOLD_GRID != (V4L2_CID_DETECT_CLASS_BASE + 3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DETECT_MD_THRESHOLD_GRID (V4L2_CID_DETECT_CLASS_BASE + 3)
+#endif
+#if defined(V4L2_CID_DETECT_MD_REGION_GRID) || (defined(HAVE_DECL_V4L2_CID_DETECT_MD_REGION_GRID) && HAVE_DECL_V4L2_CID_DETECT_MD_REGION_GRID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_CID_DETECT_MD_REGION_GRID) == ((V4L2_CID_DETECT_CLASS_BASE + 4)), "V4L2_CID_DETECT_MD_REGION_GRID != (V4L2_CID_DETECT_CLASS_BASE + 4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_CID_DETECT_MD_REGION_GRID (V4L2_CID_DETECT_CLASS_BASE + 4)
+#endif
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_control_ids[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_control_ids[] = {
- XLAT(0),
-#if defined(V4L2_CID_BRIGHTNESS) || (defined(HAVE_DECL_V4L2_CID_BRIGHTNESS) && HAVE_DECL_V4L2_CID_BRIGHTNESS)
-  XLAT(V4L2_CID_BRIGHTNESS),
-#endif
-#if defined(V4L2_CID_CONTRAST) || (defined(HAVE_DECL_V4L2_CID_CONTRAST) && HAVE_DECL_V4L2_CID_CONTRAST)
-  XLAT(V4L2_CID_CONTRAST),
-#endif
-#if defined(V4L2_CID_SATURATION) || (defined(HAVE_DECL_V4L2_CID_SATURATION) && HAVE_DECL_V4L2_CID_SATURATION)
-  XLAT(V4L2_CID_SATURATION),
-#endif
-#if defined(V4L2_CID_HUE) || (defined(HAVE_DECL_V4L2_CID_HUE) && HAVE_DECL_V4L2_CID_HUE)
-  XLAT(V4L2_CID_HUE),
-#endif
-#if defined(V4L2_CID_AUDIO_VOLUME) || (defined(HAVE_DECL_V4L2_CID_AUDIO_VOLUME) && HAVE_DECL_V4L2_CID_AUDIO_VOLUME)
-  XLAT(V4L2_CID_AUDIO_VOLUME),
-#endif
-#if defined(V4L2_CID_AUDIO_BALANCE) || (defined(HAVE_DECL_V4L2_CID_AUDIO_BALANCE) && HAVE_DECL_V4L2_CID_AUDIO_BALANCE)
-  XLAT(V4L2_CID_AUDIO_BALANCE),
-#endif
-#if defined(V4L2_CID_AUDIO_BASS) || (defined(HAVE_DECL_V4L2_CID_AUDIO_BASS) && HAVE_DECL_V4L2_CID_AUDIO_BASS)
-  XLAT(V4L2_CID_AUDIO_BASS),
-#endif
-#if defined(V4L2_CID_AUDIO_TREBLE) || (defined(HAVE_DECL_V4L2_CID_AUDIO_TREBLE) && HAVE_DECL_V4L2_CID_AUDIO_TREBLE)
-  XLAT(V4L2_CID_AUDIO_TREBLE),
-#endif
-#if defined(V4L2_CID_AUDIO_MUTE) || (defined(HAVE_DECL_V4L2_CID_AUDIO_MUTE) && HAVE_DECL_V4L2_CID_AUDIO_MUTE)
-  XLAT(V4L2_CID_AUDIO_MUTE),
-#endif
-#if defined(V4L2_CID_AUDIO_LOUDNESS) || (defined(HAVE_DECL_V4L2_CID_AUDIO_LOUDNESS) && HAVE_DECL_V4L2_CID_AUDIO_LOUDNESS)
-  XLAT(V4L2_CID_AUDIO_LOUDNESS),
-#endif
-#if defined(V4L2_CID_BLACK_LEVEL) || (defined(HAVE_DECL_V4L2_CID_BLACK_LEVEL) && HAVE_DECL_V4L2_CID_BLACK_LEVEL)
-  XLAT(V4L2_CID_BLACK_LEVEL),
-#endif
-#if defined(V4L2_CID_AUTO_WHITE_BALANCE) || (defined(HAVE_DECL_V4L2_CID_AUTO_WHITE_BALANCE) && HAVE_DECL_V4L2_CID_AUTO_WHITE_BALANCE)
-  XLAT(V4L2_CID_AUTO_WHITE_BALANCE),
-#endif
-#if defined(V4L2_CID_DO_WHITE_BALANCE) || (defined(HAVE_DECL_V4L2_CID_DO_WHITE_BALANCE) && HAVE_DECL_V4L2_CID_DO_WHITE_BALANCE)
-  XLAT(V4L2_CID_DO_WHITE_BALANCE),
-#endif
-#if defined(V4L2_CID_RED_BALANCE) || (defined(HAVE_DECL_V4L2_CID_RED_BALANCE) && HAVE_DECL_V4L2_CID_RED_BALANCE)
-  XLAT(V4L2_CID_RED_BALANCE),
-#endif
-#if defined(V4L2_CID_BLUE_BALANCE) || (defined(HAVE_DECL_V4L2_CID_BLUE_BALANCE) && HAVE_DECL_V4L2_CID_BLUE_BALANCE)
-  XLAT(V4L2_CID_BLUE_BALANCE),
-#endif
-#if defined(V4L2_CID_GAMMA) || (defined(HAVE_DECL_V4L2_CID_GAMMA) && HAVE_DECL_V4L2_CID_GAMMA)
-  XLAT(V4L2_CID_GAMMA),
-#endif
-#if defined(V4L2_CID_WHITENESS) || (defined(HAVE_DECL_V4L2_CID_WHITENESS) && HAVE_DECL_V4L2_CID_WHITENESS)
-  XLAT(V4L2_CID_WHITENESS),
-#endif
-#if defined(V4L2_CID_EXPOSURE) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE) && HAVE_DECL_V4L2_CID_EXPOSURE)
-  XLAT(V4L2_CID_EXPOSURE),
-#endif
-#if defined(V4L2_CID_AUTOGAIN) || (defined(HAVE_DECL_V4L2_CID_AUTOGAIN) && HAVE_DECL_V4L2_CID_AUTOGAIN)
-  XLAT(V4L2_CID_AUTOGAIN),
-#endif
-#if defined(V4L2_CID_GAIN) || (defined(HAVE_DECL_V4L2_CID_GAIN) && HAVE_DECL_V4L2_CID_GAIN)
-  XLAT(V4L2_CID_GAIN),
-#endif
-#if defined(V4L2_CID_HFLIP) || (defined(HAVE_DECL_V4L2_CID_HFLIP) && HAVE_DECL_V4L2_CID_HFLIP)
-  XLAT(V4L2_CID_HFLIP),
-#endif
-#if defined(V4L2_CID_VFLIP) || (defined(HAVE_DECL_V4L2_CID_VFLIP) && HAVE_DECL_V4L2_CID_VFLIP)
-  XLAT(V4L2_CID_VFLIP),
-#endif
-#if defined(V4L2_CID_HCENTER) || (defined(HAVE_DECL_V4L2_CID_HCENTER) && HAVE_DECL_V4L2_CID_HCENTER)
-  XLAT(V4L2_CID_HCENTER),
-#endif
-#if defined(V4L2_CID_VCENTER) || (defined(HAVE_DECL_V4L2_CID_VCENTER) && HAVE_DECL_V4L2_CID_VCENTER)
-  XLAT(V4L2_CID_VCENTER),
-#endif
-#if defined(V4L2_CID_POWER_LINE_FREQUENCY) || (defined(HAVE_DECL_V4L2_CID_POWER_LINE_FREQUENCY) && HAVE_DECL_V4L2_CID_POWER_LINE_FREQUENCY)
-  XLAT(V4L2_CID_POWER_LINE_FREQUENCY),
-#endif
-#if defined(V4L2_CID_HUE_AUTO) || (defined(HAVE_DECL_V4L2_CID_HUE_AUTO) && HAVE_DECL_V4L2_CID_HUE_AUTO)
-  XLAT(V4L2_CID_HUE_AUTO),
-#endif
-#if defined(V4L2_CID_WHITE_BALANCE_TEMPERATURE) || (defined(HAVE_DECL_V4L2_CID_WHITE_BALANCE_TEMPERATURE) && HAVE_DECL_V4L2_CID_WHITE_BALANCE_TEMPERATURE)
-  XLAT(V4L2_CID_WHITE_BALANCE_TEMPERATURE),
-#endif
-#if defined(V4L2_CID_SHARPNESS) || (defined(HAVE_DECL_V4L2_CID_SHARPNESS) && HAVE_DECL_V4L2_CID_SHARPNESS)
-  XLAT(V4L2_CID_SHARPNESS),
-#endif
-#if defined(V4L2_CID_BACKLIGHT_COMPENSATION) || (defined(HAVE_DECL_V4L2_CID_BACKLIGHT_COMPENSATION) && HAVE_DECL_V4L2_CID_BACKLIGHT_COMPENSATION)
-  XLAT(V4L2_CID_BACKLIGHT_COMPENSATION),
-#endif
-#if defined(V4L2_CID_CHROMA_AGC) || (defined(HAVE_DECL_V4L2_CID_CHROMA_AGC) && HAVE_DECL_V4L2_CID_CHROMA_AGC)
-  XLAT(V4L2_CID_CHROMA_AGC),
-#endif
-#if defined(V4L2_CID_CHROMA_GAIN) || (defined(HAVE_DECL_V4L2_CID_CHROMA_GAIN) && HAVE_DECL_V4L2_CID_CHROMA_GAIN)
-  XLAT(V4L2_CID_CHROMA_GAIN),
-#endif
-#if defined(V4L2_CID_COLOR_KILLER) || (defined(HAVE_DECL_V4L2_CID_COLOR_KILLER) && HAVE_DECL_V4L2_CID_COLOR_KILLER)
-  XLAT(V4L2_CID_COLOR_KILLER),
-#endif
-#if defined(V4L2_CID_COLORFX) || (defined(HAVE_DECL_V4L2_CID_COLORFX) && HAVE_DECL_V4L2_CID_COLORFX)
-  XLAT(V4L2_CID_COLORFX),
-#endif
-#if defined(V4L2_CID_COLORFX_CBCR) || (defined(HAVE_DECL_V4L2_CID_COLORFX_CBCR) && HAVE_DECL_V4L2_CID_COLORFX_CBCR)
-  XLAT(V4L2_CID_COLORFX_CBCR),
-#endif
-#if defined(V4L2_CID_AUTOBRIGHTNESS) || (defined(HAVE_DECL_V4L2_CID_AUTOBRIGHTNESS) && HAVE_DECL_V4L2_CID_AUTOBRIGHTNESS)
-  XLAT(V4L2_CID_AUTOBRIGHTNESS),
-#endif
-#if defined(V4L2_CID_BAND_STOP_FILTER) || (defined(HAVE_DECL_V4L2_CID_BAND_STOP_FILTER) && HAVE_DECL_V4L2_CID_BAND_STOP_FILTER)
-  XLAT(V4L2_CID_BAND_STOP_FILTER),
-#endif
-#if defined(V4L2_CID_ROTATE) || (defined(HAVE_DECL_V4L2_CID_ROTATE) && HAVE_DECL_V4L2_CID_ROTATE)
-  XLAT(V4L2_CID_ROTATE),
-#endif
-#if defined(V4L2_CID_BG_COLOR) || (defined(HAVE_DECL_V4L2_CID_BG_COLOR) && HAVE_DECL_V4L2_CID_BG_COLOR)
-  XLAT(V4L2_CID_BG_COLOR),
-#endif
-#if defined(V4L2_CID_ILLUMINATORS_1) || (defined(HAVE_DECL_V4L2_CID_ILLUMINATORS_1) && HAVE_DECL_V4L2_CID_ILLUMINATORS_1)
-  XLAT(V4L2_CID_ILLUMINATORS_1),
-#endif
-#if defined(V4L2_CID_ILLUMINATORS_2) || (defined(HAVE_DECL_V4L2_CID_ILLUMINATORS_2) && HAVE_DECL_V4L2_CID_ILLUMINATORS_2)
-  XLAT(V4L2_CID_ILLUMINATORS_2),
-#endif
-#if defined(V4L2_CID_MIN_BUFFERS_FOR_CAPTURE) || (defined(HAVE_DECL_V4L2_CID_MIN_BUFFERS_FOR_CAPTURE) && HAVE_DECL_V4L2_CID_MIN_BUFFERS_FOR_CAPTURE)
-  XLAT(V4L2_CID_MIN_BUFFERS_FOR_CAPTURE),
-#endif
-#if defined(V4L2_CID_MIN_BUFFERS_FOR_OUTPUT) || (defined(HAVE_DECL_V4L2_CID_MIN_BUFFERS_FOR_OUTPUT) && HAVE_DECL_V4L2_CID_MIN_BUFFERS_FOR_OUTPUT)
-  XLAT(V4L2_CID_MIN_BUFFERS_FOR_OUTPUT),
-#endif
-#if defined(V4L2_CID_ALPHA_COMPONENT) || (defined(HAVE_DECL_V4L2_CID_ALPHA_COMPONENT) && HAVE_DECL_V4L2_CID_ALPHA_COMPONENT)
-  XLAT(V4L2_CID_ALPHA_COMPONENT),
-#endif
 
-#if defined(V4L2_CID_EXPOSURE_AUTO) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE_AUTO) && HAVE_DECL_V4L2_CID_EXPOSURE_AUTO)
-  XLAT(V4L2_CID_EXPOSURE_AUTO),
-#endif
-#if defined(V4L2_CID_EXPOSURE_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE_ABSOLUTE) && HAVE_DECL_V4L2_CID_EXPOSURE_ABSOLUTE)
-  XLAT(V4L2_CID_EXPOSURE_ABSOLUTE),
-#endif
-#if defined(V4L2_CID_EXPOSURE_AUTO_PRIORITY) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE_AUTO_PRIORITY) && HAVE_DECL_V4L2_CID_EXPOSURE_AUTO_PRIORITY)
-  XLAT(V4L2_CID_EXPOSURE_AUTO_PRIORITY),
-#endif
-#if defined(V4L2_CID_PAN_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_PAN_RELATIVE) && HAVE_DECL_V4L2_CID_PAN_RELATIVE)
-  XLAT(V4L2_CID_PAN_RELATIVE),
-#endif
-#if defined(V4L2_CID_TILT_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_TILT_RELATIVE) && HAVE_DECL_V4L2_CID_TILT_RELATIVE)
-  XLAT(V4L2_CID_TILT_RELATIVE),
-#endif
-#if defined(V4L2_CID_PAN_RESET) || (defined(HAVE_DECL_V4L2_CID_PAN_RESET) && HAVE_DECL_V4L2_CID_PAN_RESET)
-  XLAT(V4L2_CID_PAN_RESET),
-#endif
-#if defined(V4L2_CID_TILT_RESET) || (defined(HAVE_DECL_V4L2_CID_TILT_RESET) && HAVE_DECL_V4L2_CID_TILT_RESET)
-  XLAT(V4L2_CID_TILT_RESET),
-#endif
-#if defined(V4L2_CID_PAN_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_PAN_ABSOLUTE) && HAVE_DECL_V4L2_CID_PAN_ABSOLUTE)
-  XLAT(V4L2_CID_PAN_ABSOLUTE),
-#endif
-#if defined(V4L2_CID_TILT_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_TILT_ABSOLUTE) && HAVE_DECL_V4L2_CID_TILT_ABSOLUTE)
-  XLAT(V4L2_CID_TILT_ABSOLUTE),
-#endif
-#if defined(V4L2_CID_FOCUS_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_FOCUS_ABSOLUTE) && HAVE_DECL_V4L2_CID_FOCUS_ABSOLUTE)
-  XLAT(V4L2_CID_FOCUS_ABSOLUTE),
-#endif
-#if defined(V4L2_CID_FOCUS_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_FOCUS_RELATIVE) && HAVE_DECL_V4L2_CID_FOCUS_RELATIVE)
-  XLAT(V4L2_CID_FOCUS_RELATIVE),
-#endif
-#if defined(V4L2_CID_FOCUS_AUTO) || (defined(HAVE_DECL_V4L2_CID_FOCUS_AUTO) && HAVE_DECL_V4L2_CID_FOCUS_AUTO)
-  XLAT(V4L2_CID_FOCUS_AUTO),
-#endif
-#if defined(V4L2_CID_ZOOM_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_ZOOM_ABSOLUTE) && HAVE_DECL_V4L2_CID_ZOOM_ABSOLUTE)
-  XLAT(V4L2_CID_ZOOM_ABSOLUTE),
-#endif
-#if defined(V4L2_CID_ZOOM_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_ZOOM_RELATIVE) && HAVE_DECL_V4L2_CID_ZOOM_RELATIVE)
-  XLAT(V4L2_CID_ZOOM_RELATIVE),
-#endif
-#if defined(V4L2_CID_ZOOM_CONTINUOUS) || (defined(HAVE_DECL_V4L2_CID_ZOOM_CONTINUOUS) && HAVE_DECL_V4L2_CID_ZOOM_CONTINUOUS)
-  XLAT(V4L2_CID_ZOOM_CONTINUOUS),
-#endif
-#if defined(V4L2_CID_PRIVACY) || (defined(HAVE_DECL_V4L2_CID_PRIVACY) && HAVE_DECL_V4L2_CID_PRIVACY)
-  XLAT(V4L2_CID_PRIVACY),
-#endif
-#if defined(V4L2_CID_IRIS_ABSOLUTE) || (defined(HAVE_DECL_V4L2_CID_IRIS_ABSOLUTE) && HAVE_DECL_V4L2_CID_IRIS_ABSOLUTE)
-  XLAT(V4L2_CID_IRIS_ABSOLUTE),
-#endif
-#if defined(V4L2_CID_IRIS_RELATIVE) || (defined(HAVE_DECL_V4L2_CID_IRIS_RELATIVE) && HAVE_DECL_V4L2_CID_IRIS_RELATIVE)
-  XLAT(V4L2_CID_IRIS_RELATIVE),
-#endif
-#if defined(V4L2_CID_AUTO_EXPOSURE_BIAS) || (defined(HAVE_DECL_V4L2_CID_AUTO_EXPOSURE_BIAS) && HAVE_DECL_V4L2_CID_AUTO_EXPOSURE_BIAS)
-  XLAT(V4L2_CID_AUTO_EXPOSURE_BIAS),
-#endif
-#if defined(V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE) || (defined(HAVE_DECL_V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE) && HAVE_DECL_V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE)
-  XLAT(V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE),
-#endif
-#if defined(V4L2_CID_WIDE_DYNAMIC_RANGE) || (defined(HAVE_DECL_V4L2_CID_WIDE_DYNAMIC_RANGE) && HAVE_DECL_V4L2_CID_WIDE_DYNAMIC_RANGE)
-  XLAT(V4L2_CID_WIDE_DYNAMIC_RANGE),
-#endif
-#if defined(V4L2_CID_IMAGE_STABILIZATION) || (defined(HAVE_DECL_V4L2_CID_IMAGE_STABILIZATION) && HAVE_DECL_V4L2_CID_IMAGE_STABILIZATION)
-  XLAT(V4L2_CID_IMAGE_STABILIZATION),
-#endif
-#if defined(V4L2_CID_ISO_SENSITIVITY) || (defined(HAVE_DECL_V4L2_CID_ISO_SENSITIVITY) && HAVE_DECL_V4L2_CID_ISO_SENSITIVITY)
-  XLAT(V4L2_CID_ISO_SENSITIVITY),
-#endif
-#if defined(V4L2_CID_ISO_SENSITIVITY_AUTO) || (defined(HAVE_DECL_V4L2_CID_ISO_SENSITIVITY_AUTO) && HAVE_DECL_V4L2_CID_ISO_SENSITIVITY_AUTO)
-  XLAT(V4L2_CID_ISO_SENSITIVITY_AUTO),
-#endif
-#if defined(V4L2_CID_EXPOSURE_METERING) || (defined(HAVE_DECL_V4L2_CID_EXPOSURE_METERING) && HAVE_DECL_V4L2_CID_EXPOSURE_METERING)
-  XLAT(V4L2_CID_EXPOSURE_METERING),
-#endif
-#if defined(V4L2_CID_SCENE_MODE) || (defined(HAVE_DECL_V4L2_CID_SCENE_MODE) && HAVE_DECL_V4L2_CID_SCENE_MODE)
-  XLAT(V4L2_CID_SCENE_MODE),
-#endif
-#if defined(V4L2_CID_3A_LOCK) || (defined(HAVE_DECL_V4L2_CID_3A_LOCK) && HAVE_DECL_V4L2_CID_3A_LOCK)
-  XLAT(V4L2_CID_3A_LOCK),
-#endif
-#if defined(V4L2_CID_AUTO_FOCUS_START) || (defined(HAVE_DECL_V4L2_CID_AUTO_FOCUS_START) && HAVE_DECL_V4L2_CID_AUTO_FOCUS_START)
-  XLAT(V4L2_CID_AUTO_FOCUS_START),
-#endif
-#if defined(V4L2_CID_AUTO_FOCUS_STOP) || (defined(HAVE_DECL_V4L2_CID_AUTO_FOCUS_STOP) && HAVE_DECL_V4L2_CID_AUTO_FOCUS_STOP)
-  XLAT(V4L2_CID_AUTO_FOCUS_STOP),
-#endif
-#if defined(V4L2_CID_AUTO_FOCUS_STATUS) || (defined(HAVE_DECL_V4L2_CID_AUTO_FOCUS_STATUS) && HAVE_DECL_V4L2_CID_AUTO_FOCUS_STATUS)
-  XLAT(V4L2_CID_AUTO_FOCUS_STATUS),
-#endif
-#if defined(V4L2_CID_AUTO_FOCUS_RANGE) || (defined(HAVE_DECL_V4L2_CID_AUTO_FOCUS_RANGE) && HAVE_DECL_V4L2_CID_AUTO_FOCUS_RANGE)
-  XLAT(V4L2_CID_AUTO_FOCUS_RANGE),
-#endif
-#if defined(V4L2_CID_PRIVATE_BASE) || (defined(HAVE_DECL_V4L2_CID_PRIVATE_BASE) && HAVE_DECL_V4L2_CID_PRIVATE_BASE)
-  XLAT(V4L2_CID_PRIVATE_BASE),
-#endif
+ XLAT(V4L2_CID_BRIGHTNESS),
+ XLAT(V4L2_CID_CONTRAST),
+ XLAT(V4L2_CID_SATURATION),
+ XLAT(V4L2_CID_HUE),
+ XLAT(V4L2_CID_AUDIO_VOLUME),
+ XLAT(V4L2_CID_AUDIO_BALANCE),
+ XLAT(V4L2_CID_AUDIO_BASS),
+ XLAT(V4L2_CID_AUDIO_TREBLE),
+ XLAT(V4L2_CID_AUDIO_MUTE),
+ XLAT(V4L2_CID_AUDIO_LOUDNESS),
+ XLAT(V4L2_CID_BLACK_LEVEL),
+ XLAT(V4L2_CID_AUTO_WHITE_BALANCE),
+ XLAT(V4L2_CID_DO_WHITE_BALANCE),
+ XLAT(V4L2_CID_RED_BALANCE),
+ XLAT(V4L2_CID_BLUE_BALANCE),
+ XLAT(V4L2_CID_GAMMA),
+ XLAT(V4L2_CID_EXPOSURE),
+ XLAT(V4L2_CID_AUTOGAIN),
+ XLAT(V4L2_CID_GAIN),
+ XLAT(V4L2_CID_HFLIP),
+ XLAT(V4L2_CID_VFLIP),
+ XLAT(V4L2_CID_HCENTER),
+ XLAT(V4L2_CID_VCENTER),
+ XLAT(V4L2_CID_POWER_LINE_FREQUENCY),
+ XLAT(V4L2_CID_HUE_AUTO),
+ XLAT(V4L2_CID_WHITE_BALANCE_TEMPERATURE),
+ XLAT(V4L2_CID_SHARPNESS),
+ XLAT(V4L2_CID_BACKLIGHT_COMPENSATION),
+ XLAT(V4L2_CID_CHROMA_AGC),
+ XLAT(V4L2_CID_COLOR_KILLER),
+ XLAT(V4L2_CID_COLORFX),
+ XLAT(V4L2_CID_AUTOBRIGHTNESS),
+ XLAT(V4L2_CID_BAND_STOP_FILTER),
+ XLAT(V4L2_CID_ROTATE),
+ XLAT(V4L2_CID_BG_COLOR),
+ XLAT(V4L2_CID_CHROMA_GAIN),
+ XLAT(V4L2_CID_ILLUMINATORS_1),
+ XLAT(V4L2_CID_ILLUMINATORS_2),
+ XLAT(V4L2_CID_MIN_BUFFERS_FOR_CAPTURE),
+ XLAT(V4L2_CID_MIN_BUFFERS_FOR_OUTPUT),
+ XLAT(V4L2_CID_ALPHA_COMPONENT),
+ XLAT(V4L2_CID_COLORFX_CBCR),
+
+
+ XLAT(V4L2_CID_MPEG_STREAM_TYPE),
+ XLAT(V4L2_CID_MPEG_STREAM_PID_PMT),
+ XLAT(V4L2_CID_MPEG_STREAM_PID_AUDIO),
+ XLAT(V4L2_CID_MPEG_STREAM_PID_VIDEO),
+ XLAT(V4L2_CID_MPEG_STREAM_PID_PCR),
+ XLAT(V4L2_CID_MPEG_STREAM_PES_ID_AUDIO),
+ XLAT(V4L2_CID_MPEG_STREAM_PES_ID_VIDEO),
+ XLAT(V4L2_CID_MPEG_STREAM_VBI_FMT),
+
+ XLAT(V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ),
+ XLAT(V4L2_CID_MPEG_AUDIO_ENCODING),
+ XLAT(V4L2_CID_MPEG_AUDIO_L1_BITRATE),
+ XLAT(V4L2_CID_MPEG_AUDIO_L2_BITRATE),
+ XLAT(V4L2_CID_MPEG_AUDIO_L3_BITRATE),
+ XLAT(V4L2_CID_MPEG_AUDIO_MODE),
+ XLAT(V4L2_CID_MPEG_AUDIO_MODE_EXTENSION),
+ XLAT(V4L2_CID_MPEG_AUDIO_EMPHASIS),
+ XLAT(V4L2_CID_MPEG_AUDIO_CRC),
+ XLAT(V4L2_CID_MPEG_AUDIO_MUTE),
+ XLAT(V4L2_CID_MPEG_AUDIO_AAC_BITRATE),
+ XLAT(V4L2_CID_MPEG_AUDIO_AC3_BITRATE),
+ XLAT(V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK),
+ XLAT(V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK),
+
+ XLAT(V4L2_CID_MPEG_VIDEO_ENCODING),
+ XLAT(V4L2_CID_MPEG_VIDEO_ASPECT),
+ XLAT(V4L2_CID_MPEG_VIDEO_B_FRAMES),
+ XLAT(V4L2_CID_MPEG_VIDEO_GOP_SIZE),
+ XLAT(V4L2_CID_MPEG_VIDEO_GOP_CLOSURE),
+ XLAT(V4L2_CID_MPEG_VIDEO_PULLDOWN),
+ XLAT(V4L2_CID_MPEG_VIDEO_BITRATE_MODE),
+ XLAT(V4L2_CID_MPEG_VIDEO_BITRATE),
+ XLAT(V4L2_CID_MPEG_VIDEO_BITRATE_PEAK),
+ XLAT(V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION),
+ XLAT(V4L2_CID_MPEG_VIDEO_MUTE),
+ XLAT(V4L2_CID_MPEG_VIDEO_MUTE_YUV),
+ XLAT(V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE),
+ XLAT(V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER),
+ XLAT(V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB),
+ XLAT(V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEADER_MODE),
+ XLAT(V4L2_CID_MPEG_VIDEO_MAX_REF_PIC),
+ XLAT(V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE),
+ XLAT(V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES),
+ XLAT(V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB),
+ XLAT(V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE),
+ XLAT(V4L2_CID_MPEG_VIDEO_VBV_SIZE),
+ XLAT(V4L2_CID_MPEG_VIDEO_DEC_PTS),
+ XLAT(V4L2_CID_MPEG_VIDEO_DEC_FRAME),
+ XLAT(V4L2_CID_MPEG_VIDEO_VBV_DELAY),
+ XLAT(V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER),
+ XLAT(V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE),
+ XLAT(V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE),
+ XLAT(V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME),
+ XLAT(V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H263_MIN_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H263_MAX_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_MIN_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_MAX_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_I_PERIOD),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_LEVEL),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_PROFILE),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_FMO),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_ASO),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER),
+ XLAT(V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL),
+ XLAT(V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE),
+ XLAT(V4L2_CID_MPEG_VIDEO_MPEG4_QPEL),
+
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_MIN_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_MAX_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_VPX_PROFILE),
+
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_PROFILE),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_LEVEL),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_TIER),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR),
+ XLAT(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR),
+ XLAT(V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES),
+ XLAT(V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR),
+
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM),
+ XLAT(V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP),
+ XLAT(V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS),
+
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_PADDING),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC),
+ XLAT(V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P),
+
+ XLAT(V4L2_CID_EXPOSURE_AUTO),
+ XLAT(V4L2_CID_EXPOSURE_ABSOLUTE),
+ XLAT(V4L2_CID_EXPOSURE_AUTO_PRIORITY),
+ XLAT(V4L2_CID_PAN_RELATIVE),
+ XLAT(V4L2_CID_TILT_RELATIVE),
+ XLAT(V4L2_CID_PAN_RESET),
+ XLAT(V4L2_CID_TILT_RESET),
+ XLAT(V4L2_CID_PAN_ABSOLUTE),
+ XLAT(V4L2_CID_TILT_ABSOLUTE),
+ XLAT(V4L2_CID_FOCUS_ABSOLUTE),
+ XLAT(V4L2_CID_FOCUS_RELATIVE),
+ XLAT(V4L2_CID_FOCUS_AUTO),
+ XLAT(V4L2_CID_ZOOM_ABSOLUTE),
+ XLAT(V4L2_CID_ZOOM_RELATIVE),
+ XLAT(V4L2_CID_ZOOM_CONTINUOUS),
+ XLAT(V4L2_CID_PRIVACY),
+ XLAT(V4L2_CID_IRIS_ABSOLUTE),
+ XLAT(V4L2_CID_IRIS_RELATIVE),
+ XLAT(V4L2_CID_AUTO_EXPOSURE_BIAS),
+ XLAT(V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE),
+ XLAT(V4L2_CID_WIDE_DYNAMIC_RANGE),
+ XLAT(V4L2_CID_IMAGE_STABILIZATION),
+ XLAT(V4L2_CID_ISO_SENSITIVITY),
+ XLAT(V4L2_CID_ISO_SENSITIVITY_AUTO),
+ XLAT(V4L2_CID_EXPOSURE_METERING),
+ XLAT(V4L2_CID_SCENE_MODE),
+ XLAT(V4L2_CID_3A_LOCK),
+ XLAT(V4L2_CID_AUTO_FOCUS_START),
+ XLAT(V4L2_CID_AUTO_FOCUS_STOP),
+ XLAT(V4L2_CID_AUTO_FOCUS_STATUS),
+ XLAT(V4L2_CID_AUTO_FOCUS_RANGE),
+ XLAT(V4L2_CID_PAN_SPEED),
+ XLAT(V4L2_CID_TILT_SPEED),
+
+ XLAT(V4L2_CID_RDS_TX_DEVIATION),
+ XLAT(V4L2_CID_RDS_TX_PI),
+ XLAT(V4L2_CID_RDS_TX_PTY),
+ XLAT(V4L2_CID_RDS_TX_PS_NAME),
+ XLAT(V4L2_CID_RDS_TX_RADIO_TEXT),
+ XLAT(V4L2_CID_RDS_TX_MONO_STEREO),
+ XLAT(V4L2_CID_RDS_TX_ARTIFICIAL_HEAD),
+ XLAT(V4L2_CID_RDS_TX_COMPRESSED),
+ XLAT(V4L2_CID_RDS_TX_DYNAMIC_PTY),
+ XLAT(V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT),
+ XLAT(V4L2_CID_RDS_TX_TRAFFIC_PROGRAM),
+ XLAT(V4L2_CID_RDS_TX_MUSIC_SPEECH),
+ XLAT(V4L2_CID_RDS_TX_ALT_FREQS_ENABLE),
+ XLAT(V4L2_CID_RDS_TX_ALT_FREQS),
+ XLAT(V4L2_CID_AUDIO_LIMITER_ENABLED),
+ XLAT(V4L2_CID_AUDIO_LIMITER_RELEASE_TIME),
+ XLAT(V4L2_CID_AUDIO_LIMITER_DEVIATION),
+ XLAT(V4L2_CID_AUDIO_COMPRESSION_ENABLED),
+ XLAT(V4L2_CID_AUDIO_COMPRESSION_GAIN),
+ XLAT(V4L2_CID_AUDIO_COMPRESSION_THRESHOLD),
+ XLAT(V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME),
+ XLAT(V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME),
+ XLAT(V4L2_CID_PILOT_TONE_ENABLED),
+ XLAT(V4L2_CID_PILOT_TONE_DEVIATION),
+ XLAT(V4L2_CID_PILOT_TONE_FREQUENCY),
+ XLAT(V4L2_CID_TUNE_PREEMPHASIS),
+ XLAT(V4L2_CID_TUNE_POWER_LEVEL),
+ XLAT(V4L2_CID_TUNE_ANTENNA_CAPACITOR),
+
+ XLAT(V4L2_CID_FLASH_LED_MODE),
+ XLAT(V4L2_CID_FLASH_STROBE_SOURCE),
+ XLAT(V4L2_CID_FLASH_STROBE),
+ XLAT(V4L2_CID_FLASH_STROBE_STOP),
+ XLAT(V4L2_CID_FLASH_STROBE_STATUS),
+ XLAT(V4L2_CID_FLASH_TIMEOUT),
+ XLAT(V4L2_CID_FLASH_INTENSITY),
+ XLAT(V4L2_CID_FLASH_TORCH_INTENSITY),
+ XLAT(V4L2_CID_FLASH_INDICATOR_INTENSITY),
+ XLAT(V4L2_CID_FLASH_FAULT),
+ XLAT(V4L2_CID_FLASH_CHARGE),
+ XLAT(V4L2_CID_FLASH_READY),
+
+ XLAT(V4L2_CID_VBLANK),
+ XLAT(V4L2_CID_HBLANK),
+ XLAT(V4L2_CID_ANALOGUE_GAIN),
+ XLAT(V4L2_CID_TEST_PATTERN_RED),
+ XLAT(V4L2_CID_TEST_PATTERN_GREENR),
+ XLAT(V4L2_CID_TEST_PATTERN_BLUE),
+ XLAT(V4L2_CID_TEST_PATTERN_GREENB),
+
+ XLAT(V4L2_CID_LINK_FREQ),
+ XLAT(V4L2_CID_PIXEL_RATE),
+ XLAT(V4L2_CID_TEST_PATTERN),
+ XLAT(V4L2_CID_DEINTERLACING_MODE),
+ XLAT(V4L2_CID_DIGITAL_GAIN),
+
+ XLAT(V4L2_CID_DV_TX_RGB_RANGE),
+ XLAT(V4L2_CID_DV_TX_IT_CONTENT_TYPE),
+ XLAT(V4L2_CID_DV_RX_RGB_RANGE),
+ XLAT(V4L2_CID_DV_RX_IT_CONTENT_TYPE),
+ XLAT(V4L2_CID_TUNE_DEEMPHASIS),
+ XLAT(V4L2_CID_RDS_RECEPTION),
+ XLAT(V4L2_CID_RDS_RX_PTY),
+ XLAT(V4L2_CID_RDS_RX_PS_NAME),
+ XLAT(V4L2_CID_RDS_RX_RADIO_TEXT),
+ XLAT(V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT),
+ XLAT(V4L2_CID_RDS_RX_TRAFFIC_PROGRAM),
+ XLAT(V4L2_CID_RDS_RX_MUSIC_SPEECH),
+ XLAT(V4L2_CID_RF_TUNER_BANDWIDTH_AUTO),
+ XLAT(V4L2_CID_RF_TUNER_BANDWIDTH),
+ XLAT(V4L2_CID_RF_TUNER_RF_GAIN),
+ XLAT(V4L2_CID_RF_TUNER_LNA_GAIN_AUTO),
+ XLAT(V4L2_CID_RF_TUNER_LNA_GAIN),
+ XLAT(V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO),
+ XLAT(V4L2_CID_RF_TUNER_MIXER_GAIN),
+ XLAT(V4L2_CID_RF_TUNER_IF_GAIN_AUTO),
+ XLAT(V4L2_CID_RF_TUNER_IF_GAIN),
+ XLAT(V4L2_CID_RF_TUNER_PLL_LOCK),
+
+ XLAT(V4L2_CID_DETECT_MD_MODE),
+ XLAT(V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD),
+ XLAT(V4L2_CID_DETECT_MD_THRESHOLD_GRID),
+ XLAT(V4L2_CID_DETECT_MD_REGION_GRID),
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_control_ids.in b/xlat/v4l2_control_ids.in
index 3dee933..0885944 100644
--- a/xlat/v4l2_control_ids.in
+++ b/xlat/v4l2_control_ids.in
@@ -1,77 +1,349 @@
-0
-V4L2_CID_BRIGHTNESS
-V4L2_CID_CONTRAST
-V4L2_CID_SATURATION
-V4L2_CID_HUE
-V4L2_CID_AUDIO_VOLUME
-V4L2_CID_AUDIO_BALANCE
-V4L2_CID_AUDIO_BASS
-V4L2_CID_AUDIO_TREBLE
-V4L2_CID_AUDIO_MUTE
-V4L2_CID_AUDIO_LOUDNESS
-V4L2_CID_BLACK_LEVEL
-V4L2_CID_AUTO_WHITE_BALANCE
-V4L2_CID_DO_WHITE_BALANCE
-V4L2_CID_RED_BALANCE
-V4L2_CID_BLUE_BALANCE
-V4L2_CID_GAMMA
-V4L2_CID_WHITENESS
-V4L2_CID_EXPOSURE
-V4L2_CID_AUTOGAIN
-V4L2_CID_GAIN
-V4L2_CID_HFLIP
-V4L2_CID_VFLIP
-V4L2_CID_HCENTER
-V4L2_CID_VCENTER
-V4L2_CID_POWER_LINE_FREQUENCY
-V4L2_CID_HUE_AUTO
-V4L2_CID_WHITE_BALANCE_TEMPERATURE
-V4L2_CID_SHARPNESS
-V4L2_CID_BACKLIGHT_COMPENSATION
-V4L2_CID_CHROMA_AGC
-V4L2_CID_CHROMA_GAIN
-V4L2_CID_COLOR_KILLER
-V4L2_CID_COLORFX
-V4L2_CID_COLORFX_CBCR
-V4L2_CID_AUTOBRIGHTNESS
-V4L2_CID_BAND_STOP_FILTER
-V4L2_CID_ROTATE
-V4L2_CID_BG_COLOR
-V4L2_CID_ILLUMINATORS_1
-V4L2_CID_ILLUMINATORS_2
-V4L2_CID_MIN_BUFFERS_FOR_CAPTURE
-V4L2_CID_MIN_BUFFERS_FOR_OUTPUT
-V4L2_CID_ALPHA_COMPONENT
+/* User-class control IDs */
+V4L2_CID_BRIGHTNESS			(V4L2_CID_BASE+0)
+V4L2_CID_CONTRAST			(V4L2_CID_BASE+1)
+V4L2_CID_SATURATION			(V4L2_CID_BASE+2)
+V4L2_CID_HUE				(V4L2_CID_BASE+3)
+V4L2_CID_AUDIO_VOLUME			(V4L2_CID_BASE+5)
+V4L2_CID_AUDIO_BALANCE			(V4L2_CID_BASE+6)
+V4L2_CID_AUDIO_BASS			(V4L2_CID_BASE+7)
+V4L2_CID_AUDIO_TREBLE			(V4L2_CID_BASE+8)
+V4L2_CID_AUDIO_MUTE			(V4L2_CID_BASE+9)
+V4L2_CID_AUDIO_LOUDNESS			(V4L2_CID_BASE+10)
+V4L2_CID_BLACK_LEVEL			(V4L2_CID_BASE+11) /* Deprecated */
+V4L2_CID_AUTO_WHITE_BALANCE		(V4L2_CID_BASE+12)
+V4L2_CID_DO_WHITE_BALANCE		(V4L2_CID_BASE+13)
+V4L2_CID_RED_BALANCE			(V4L2_CID_BASE+14)
+V4L2_CID_BLUE_BALANCE			(V4L2_CID_BASE+15)
+V4L2_CID_GAMMA				(V4L2_CID_BASE+16)
+V4L2_CID_EXPOSURE			(V4L2_CID_BASE+17)
+V4L2_CID_AUTOGAIN			(V4L2_CID_BASE+18)
+V4L2_CID_GAIN				(V4L2_CID_BASE+19)
+V4L2_CID_HFLIP				(V4L2_CID_BASE+20)
+V4L2_CID_VFLIP				(V4L2_CID_BASE+21)
+V4L2_CID_HCENTER			(V4L2_CID_BASE+22)
+V4L2_CID_VCENTER			(V4L2_CID_BASE+23)
+V4L2_CID_POWER_LINE_FREQUENCY		(V4L2_CID_BASE+24)
+V4L2_CID_HUE_AUTO			(V4L2_CID_BASE+25)
+V4L2_CID_WHITE_BALANCE_TEMPERATURE	(V4L2_CID_BASE+26)
+V4L2_CID_SHARPNESS			(V4L2_CID_BASE+27)
+V4L2_CID_BACKLIGHT_COMPENSATION		(V4L2_CID_BASE+28)
+V4L2_CID_CHROMA_AGC                     (V4L2_CID_BASE+29)
+V4L2_CID_COLOR_KILLER                   (V4L2_CID_BASE+30)
+V4L2_CID_COLORFX			(V4L2_CID_BASE+31)
+V4L2_CID_AUTOBRIGHTNESS			(V4L2_CID_BASE+32)
+V4L2_CID_BAND_STOP_FILTER		(V4L2_CID_BASE+33)
+V4L2_CID_ROTATE				(V4L2_CID_BASE+34)
+V4L2_CID_BG_COLOR			(V4L2_CID_BASE+35)
+V4L2_CID_CHROMA_GAIN                    (V4L2_CID_BASE+36)
+V4L2_CID_ILLUMINATORS_1			(V4L2_CID_BASE+37)
+V4L2_CID_ILLUMINATORS_2			(V4L2_CID_BASE+38)
+V4L2_CID_MIN_BUFFERS_FOR_CAPTURE	(V4L2_CID_BASE+39)
+V4L2_CID_MIN_BUFFERS_FOR_OUTPUT		(V4L2_CID_BASE+40)
+V4L2_CID_ALPHA_COMPONENT		(V4L2_CID_BASE+41)
+V4L2_CID_COLORFX_CBCR			(V4L2_CID_BASE+42)
+/* MPEG-class control IDs */
+/*  MPEG streams, specific to multiplexed streams */
+V4L2_CID_MPEG_STREAM_TYPE		(V4L2_CID_MPEG_BASE+0)
+V4L2_CID_MPEG_STREAM_PID_PMT		(V4L2_CID_MPEG_BASE+1)
+V4L2_CID_MPEG_STREAM_PID_AUDIO		(V4L2_CID_MPEG_BASE+2)
+V4L2_CID_MPEG_STREAM_PID_VIDEO		(V4L2_CID_MPEG_BASE+3)
+V4L2_CID_MPEG_STREAM_PID_PCR		(V4L2_CID_MPEG_BASE+4)
+V4L2_CID_MPEG_STREAM_PES_ID_AUDIO	(V4L2_CID_MPEG_BASE+5)
+V4L2_CID_MPEG_STREAM_PES_ID_VIDEO	(V4L2_CID_MPEG_BASE+6)
+V4L2_CID_MPEG_STREAM_VBI_FMT		(V4L2_CID_MPEG_BASE+7)
+/*  MPEG audio controls specific to multiplexed streams  */
+V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ	(V4L2_CID_MPEG_BASE+100)
+V4L2_CID_MPEG_AUDIO_ENCODING		(V4L2_CID_MPEG_BASE+101)
+V4L2_CID_MPEG_AUDIO_L1_BITRATE		(V4L2_CID_MPEG_BASE+102)
+V4L2_CID_MPEG_AUDIO_L2_BITRATE		(V4L2_CID_MPEG_BASE+103)
+V4L2_CID_MPEG_AUDIO_L3_BITRATE		(V4L2_CID_MPEG_BASE+104)
+V4L2_CID_MPEG_AUDIO_MODE		(V4L2_CID_MPEG_BASE+105)
+V4L2_CID_MPEG_AUDIO_MODE_EXTENSION	(V4L2_CID_MPEG_BASE+106)
+V4L2_CID_MPEG_AUDIO_EMPHASIS		(V4L2_CID_MPEG_BASE+107)
+V4L2_CID_MPEG_AUDIO_CRC			(V4L2_CID_MPEG_BASE+108)
+V4L2_CID_MPEG_AUDIO_MUTE		(V4L2_CID_MPEG_BASE+109)
+V4L2_CID_MPEG_AUDIO_AAC_BITRATE		(V4L2_CID_MPEG_BASE+110)
+V4L2_CID_MPEG_AUDIO_AC3_BITRATE		(V4L2_CID_MPEG_BASE+111)
+V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK	(V4L2_CID_MPEG_BASE+112)
+V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK  (V4L2_CID_MPEG_BASE+113)
+/*  MPEG video controls specific to multiplexed streams */
+V4L2_CID_MPEG_VIDEO_ENCODING		(V4L2_CID_MPEG_BASE+200)
+V4L2_CID_MPEG_VIDEO_ASPECT		(V4L2_CID_MPEG_BASE+201)
+V4L2_CID_MPEG_VIDEO_B_FRAMES		(V4L2_CID_MPEG_BASE+202)
+V4L2_CID_MPEG_VIDEO_GOP_SIZE		(V4L2_CID_MPEG_BASE+203)
+V4L2_CID_MPEG_VIDEO_GOP_CLOSURE		(V4L2_CID_MPEG_BASE+204)
+V4L2_CID_MPEG_VIDEO_PULLDOWN		(V4L2_CID_MPEG_BASE+205)
+V4L2_CID_MPEG_VIDEO_BITRATE_MODE	(V4L2_CID_MPEG_BASE+206)
+V4L2_CID_MPEG_VIDEO_BITRATE		(V4L2_CID_MPEG_BASE+207)
+V4L2_CID_MPEG_VIDEO_BITRATE_PEAK	(V4L2_CID_MPEG_BASE+208)
+V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION	(V4L2_CID_MPEG_BASE+209)
+V4L2_CID_MPEG_VIDEO_MUTE		(V4L2_CID_MPEG_BASE+210)
+V4L2_CID_MPEG_VIDEO_MUTE_YUV		(V4L2_CID_MPEG_BASE+211)
+V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE		(V4L2_CID_MPEG_BASE+212)
+V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER	(V4L2_CID_MPEG_BASE+213)
+V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB		(V4L2_CID_MPEG_BASE+214)
+V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE			(V4L2_CID_MPEG_BASE+215)
+V4L2_CID_MPEG_VIDEO_HEADER_MODE				(V4L2_CID_MPEG_BASE+216)
+V4L2_CID_MPEG_VIDEO_MAX_REF_PIC			(V4L2_CID_MPEG_BASE+217)
+V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE		(V4L2_CID_MPEG_BASE+218)
+V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES	(V4L2_CID_MPEG_BASE+219)
+V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB		(V4L2_CID_MPEG_BASE+220)
+V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE		(V4L2_CID_MPEG_BASE+221)
+V4L2_CID_MPEG_VIDEO_VBV_SIZE			(V4L2_CID_MPEG_BASE+222)
+V4L2_CID_MPEG_VIDEO_DEC_PTS			(V4L2_CID_MPEG_BASE+223)
+V4L2_CID_MPEG_VIDEO_DEC_FRAME			(V4L2_CID_MPEG_BASE+224)
+V4L2_CID_MPEG_VIDEO_VBV_DELAY			(V4L2_CID_MPEG_BASE+225)
+V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER		(V4L2_CID_MPEG_BASE+226)
+V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE		(V4L2_CID_MPEG_BASE+227)
+V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE		(V4L2_CID_MPEG_BASE+228)
+V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME		(V4L2_CID_MPEG_BASE+229)
+V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP		(V4L2_CID_MPEG_BASE+300)
+V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP		(V4L2_CID_MPEG_BASE+301)
+V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP		(V4L2_CID_MPEG_BASE+302)
+V4L2_CID_MPEG_VIDEO_H263_MIN_QP			(V4L2_CID_MPEG_BASE+303)
+V4L2_CID_MPEG_VIDEO_H263_MAX_QP			(V4L2_CID_MPEG_BASE+304)
+V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP		(V4L2_CID_MPEG_BASE+350)
+V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP		(V4L2_CID_MPEG_BASE+351)
+V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP		(V4L2_CID_MPEG_BASE+352)
+V4L2_CID_MPEG_VIDEO_H264_MIN_QP			(V4L2_CID_MPEG_BASE+353)
+V4L2_CID_MPEG_VIDEO_H264_MAX_QP			(V4L2_CID_MPEG_BASE+354)
+V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM		(V4L2_CID_MPEG_BASE+355)
+V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE		(V4L2_CID_MPEG_BASE+356)
+V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE		(V4L2_CID_MPEG_BASE+357)
+V4L2_CID_MPEG_VIDEO_H264_I_PERIOD		(V4L2_CID_MPEG_BASE+358)
+V4L2_CID_MPEG_VIDEO_H264_LEVEL			(V4L2_CID_MPEG_BASE+359)
+V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA	(V4L2_CID_MPEG_BASE+360)
+V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA	(V4L2_CID_MPEG_BASE+361)
+V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE	(V4L2_CID_MPEG_BASE+362)
+V4L2_CID_MPEG_VIDEO_H264_PROFILE		(V4L2_CID_MPEG_BASE+363)
+V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT	(V4L2_CID_MPEG_BASE+364)
+V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH	(V4L2_CID_MPEG_BASE+365)
+V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE		(V4L2_CID_MPEG_BASE+366)
+V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC		(V4L2_CID_MPEG_BASE+367)
+V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING		(V4L2_CID_MPEG_BASE+368)
+V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0		(V4L2_CID_MPEG_BASE+369)
+V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE	(V4L2_CID_MPEG_BASE+370)
+V4L2_CID_MPEG_VIDEO_H264_FMO			(V4L2_CID_MPEG_BASE+371)
+V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE		(V4L2_CID_MPEG_BASE+372)
+V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP	(V4L2_CID_MPEG_BASE+373)
+V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION	(V4L2_CID_MPEG_BASE+374)
+V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE	(V4L2_CID_MPEG_BASE+375)
+V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH		(V4L2_CID_MPEG_BASE+376)
+V4L2_CID_MPEG_VIDEO_H264_ASO			(V4L2_CID_MPEG_BASE+377)
+V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER	(V4L2_CID_MPEG_BASE+378)
+V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING		(V4L2_CID_MPEG_BASE+379)
+V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE	(V4L2_CID_MPEG_BASE+380)
+V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER	(V4L2_CID_MPEG_BASE+381)
+V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP	(V4L2_CID_MPEG_BASE+382)
+V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP	(V4L2_CID_MPEG_BASE+400)
+V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP	(V4L2_CID_MPEG_BASE+401)
+V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP	(V4L2_CID_MPEG_BASE+402)
+V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP	(V4L2_CID_MPEG_BASE+403)
+V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP	(V4L2_CID_MPEG_BASE+404)
+V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL		(V4L2_CID_MPEG_BASE+405)
+V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE	(V4L2_CID_MPEG_BASE+406)
+V4L2_CID_MPEG_VIDEO_MPEG4_QPEL		(V4L2_CID_MPEG_BASE+407)
+/*  Control IDs for VP8 streams */
+V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS		(V4L2_CID_MPEG_BASE+500)
+V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4		(V4L2_CID_MPEG_BASE+501)
+V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES		(V4L2_CID_MPEG_BASE+502)
+V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL		(V4L2_CID_MPEG_BASE+503)
+V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS	(V4L2_CID_MPEG_BASE+504)
+V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD	(V4L2_CID_MPEG_BASE+505)
+V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL	(V4L2_CID_MPEG_BASE+506)
+V4L2_CID_MPEG_VIDEO_VPX_MIN_QP			(V4L2_CID_MPEG_BASE+507)
+V4L2_CID_MPEG_VIDEO_VPX_MAX_QP			(V4L2_CID_MPEG_BASE+508)
+V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP		(V4L2_CID_MPEG_BASE+509)
+V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP		(V4L2_CID_MPEG_BASE+510)
+V4L2_CID_MPEG_VIDEO_VPX_PROFILE			(V4L2_CID_MPEG_BASE+511)
+/* CIDs for HEVC encoding. */
+V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP			(V4L2_CID_MPEG_BASE + 600)
+V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP			(V4L2_CID_MPEG_BASE + 601)
+V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP		(V4L2_CID_MPEG_BASE + 602)
+V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP		(V4L2_CID_MPEG_BASE + 603)
+V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP		(V4L2_CID_MPEG_BASE + 604)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP		(V4L2_CID_MPEG_BASE + 605)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE	(V4L2_CID_MPEG_BASE + 606)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER	(V4L2_CID_MPEG_BASE + 607)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP	(V4L2_CID_MPEG_BASE + 608)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP	(V4L2_CID_MPEG_BASE + 609)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP	(V4L2_CID_MPEG_BASE + 610)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP	(V4L2_CID_MPEG_BASE + 611)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP	(V4L2_CID_MPEG_BASE + 612)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP	(V4L2_CID_MPEG_BASE + 613)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP	(V4L2_CID_MPEG_BASE + 614)
+V4L2_CID_MPEG_VIDEO_HEVC_PROFILE		(V4L2_CID_MPEG_BASE + 615)
+V4L2_CID_MPEG_VIDEO_HEVC_LEVEL			(V4L2_CID_MPEG_BASE + 616)
+V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION	(V4L2_CID_MPEG_BASE + 617)
+V4L2_CID_MPEG_VIDEO_HEVC_TIER			(V4L2_CID_MPEG_BASE + 618)
+V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH	(V4L2_CID_MPEG_BASE + 619)
+V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE	(V4L2_CID_MPEG_BASE + 620)
+V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2	(V4L2_CID_MPEG_BASE + 621)
+V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2	(V4L2_CID_MPEG_BASE + 622)
+V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE		(V4L2_CID_MPEG_BASE + 623)
+V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD		(V4L2_CID_MPEG_BASE + 624)
+V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU		(V4L2_CID_MPEG_BASE + 625)
+V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED	(V4L2_CID_MPEG_BASE + 626)
+V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT		(V4L2_CID_MPEG_BASE + 627)
+V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB		(V4L2_CID_MPEG_BASE + 628)
+V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID		(V4L2_CID_MPEG_BASE + 629)
+V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING	(V4L2_CID_MPEG_BASE + 630)
+V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1	(V4L2_CID_MPEG_BASE + 631)
+V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT		(V4L2_CID_MPEG_BASE + 632)
+V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION		(V4L2_CID_MPEG_BASE + 633)
+V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE	(V4L2_CID_MPEG_BASE + 634)
+V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD	(V4L2_CID_MPEG_BASE + 635)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR	(V4L2_CID_MPEG_BASE + 636)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR	(V4L2_CID_MPEG_BASE + 637)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR	(V4L2_CID_MPEG_BASE + 638)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR	(V4L2_CID_MPEG_BASE + 639)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR	(V4L2_CID_MPEG_BASE + 640)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR	(V4L2_CID_MPEG_BASE + 641)
+V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR	(V4L2_CID_MPEG_BASE + 642)
+V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES	(V4L2_CID_MPEG_BASE + 643)
+V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR	(V4L2_CID_MPEG_BASE + 644)
+/*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
+V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE		(V4L2_CID_MPEG_CX2341X_BASE+0)
+V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER		(V4L2_CID_MPEG_CX2341X_BASE+1)
+V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE	(V4L2_CID_MPEG_CX2341X_BASE+2)
+V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE	(V4L2_CID_MPEG_CX2341X_BASE+3)
+V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE	(V4L2_CID_MPEG_CX2341X_BASE+4)
+V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER		(V4L2_CID_MPEG_CX2341X_BASE+5)
+V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE		(V4L2_CID_MPEG_CX2341X_BASE+6)
+V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM	(V4L2_CID_MPEG_CX2341X_BASE+7)
+V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP	(V4L2_CID_MPEG_CX2341X_BASE+8)
+V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM	(V4L2_CID_MPEG_CX2341X_BASE+9)
+V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP	(V4L2_CID_MPEG_CX2341X_BASE+10)
+V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS		(V4L2_CID_MPEG_CX2341X_BASE+11)
+/*  MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */
+V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY		(V4L2_CID_MPEG_MFC51_BASE+0)
+V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE	(V4L2_CID_MPEG_MFC51_BASE+1)
+V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE			(V4L2_CID_MPEG_MFC51_BASE+2)
+V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE			(V4L2_CID_MPEG_MFC51_BASE+3)
+V4L2_CID_MPEG_MFC51_VIDEO_PADDING				(V4L2_CID_MPEG_MFC51_BASE+4)
+V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV				(V4L2_CID_MPEG_MFC51_BASE+5)
+V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT			(V4L2_CID_MPEG_MFC51_BASE+6)
+V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF			(V4L2_CID_MPEG_MFC51_BASE+7)
+V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY		(V4L2_CID_MPEG_MFC51_BASE+50)
+V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK			(V4L2_CID_MPEG_MFC51_BASE+51)
+V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH		(V4L2_CID_MPEG_MFC51_BASE+52)
+V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC		(V4L2_CID_MPEG_MFC51_BASE+53)
+V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P		(V4L2_CID_MPEG_MFC51_BASE+54)
 /*  Camera class control IDs */
-V4L2_CID_EXPOSURE_AUTO
-V4L2_CID_EXPOSURE_ABSOLUTE
-V4L2_CID_EXPOSURE_AUTO_PRIORITY
-V4L2_CID_PAN_RELATIVE
-V4L2_CID_TILT_RELATIVE
-V4L2_CID_PAN_RESET
-V4L2_CID_TILT_RESET
-V4L2_CID_PAN_ABSOLUTE
-V4L2_CID_TILT_ABSOLUTE
-V4L2_CID_FOCUS_ABSOLUTE
-V4L2_CID_FOCUS_RELATIVE
-V4L2_CID_FOCUS_AUTO
-V4L2_CID_ZOOM_ABSOLUTE
-V4L2_CID_ZOOM_RELATIVE
-V4L2_CID_ZOOM_CONTINUOUS
-V4L2_CID_PRIVACY
-V4L2_CID_IRIS_ABSOLUTE
-V4L2_CID_IRIS_RELATIVE
-V4L2_CID_AUTO_EXPOSURE_BIAS
-V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE
-V4L2_CID_WIDE_DYNAMIC_RANGE
-V4L2_CID_IMAGE_STABILIZATION
-V4L2_CID_ISO_SENSITIVITY
-V4L2_CID_ISO_SENSITIVITY_AUTO
-V4L2_CID_EXPOSURE_METERING
-V4L2_CID_SCENE_MODE
-V4L2_CID_3A_LOCK
-V4L2_CID_AUTO_FOCUS_START
-V4L2_CID_AUTO_FOCUS_STOP
-V4L2_CID_AUTO_FOCUS_STATUS
-V4L2_CID_AUTO_FOCUS_RANGE
-V4L2_CID_PRIVATE_BASE
+V4L2_CID_EXPOSURE_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+1)
+V4L2_CID_EXPOSURE_ABSOLUTE		(V4L2_CID_CAMERA_CLASS_BASE+2)
+V4L2_CID_EXPOSURE_AUTO_PRIORITY		(V4L2_CID_CAMERA_CLASS_BASE+3)
+V4L2_CID_PAN_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+4)
+V4L2_CID_TILT_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+5)
+V4L2_CID_PAN_RESET			(V4L2_CID_CAMERA_CLASS_BASE+6)
+V4L2_CID_TILT_RESET			(V4L2_CID_CAMERA_CLASS_BASE+7)
+V4L2_CID_PAN_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+8)
+V4L2_CID_TILT_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+9)
+V4L2_CID_FOCUS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+10)
+V4L2_CID_FOCUS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+11)
+V4L2_CID_FOCUS_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+12)
+V4L2_CID_ZOOM_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+13)
+V4L2_CID_ZOOM_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+14)
+V4L2_CID_ZOOM_CONTINUOUS		(V4L2_CID_CAMERA_CLASS_BASE+15)
+V4L2_CID_PRIVACY			(V4L2_CID_CAMERA_CLASS_BASE+16)
+V4L2_CID_IRIS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+17)
+V4L2_CID_IRIS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+18)
+V4L2_CID_AUTO_EXPOSURE_BIAS		(V4L2_CID_CAMERA_CLASS_BASE+19)
+V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE	(V4L2_CID_CAMERA_CLASS_BASE+20)
+V4L2_CID_WIDE_DYNAMIC_RANGE		(V4L2_CID_CAMERA_CLASS_BASE+21)
+V4L2_CID_IMAGE_STABILIZATION		(V4L2_CID_CAMERA_CLASS_BASE+22)
+V4L2_CID_ISO_SENSITIVITY		(V4L2_CID_CAMERA_CLASS_BASE+23)
+V4L2_CID_ISO_SENSITIVITY_AUTO		(V4L2_CID_CAMERA_CLASS_BASE+24)
+V4L2_CID_EXPOSURE_METERING		(V4L2_CID_CAMERA_CLASS_BASE+25)
+V4L2_CID_SCENE_MODE			(V4L2_CID_CAMERA_CLASS_BASE+26)
+V4L2_CID_3A_LOCK			(V4L2_CID_CAMERA_CLASS_BASE+27)
+V4L2_CID_AUTO_FOCUS_START		(V4L2_CID_CAMERA_CLASS_BASE+28)
+V4L2_CID_AUTO_FOCUS_STOP		(V4L2_CID_CAMERA_CLASS_BASE+29)
+V4L2_CID_AUTO_FOCUS_STATUS		(V4L2_CID_CAMERA_CLASS_BASE+30)
+V4L2_CID_AUTO_FOCUS_RANGE		(V4L2_CID_CAMERA_CLASS_BASE+31)
+V4L2_CID_PAN_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+32)
+V4L2_CID_TILT_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+33)
+/* FM Modulator class control IDs */
+V4L2_CID_RDS_TX_DEVIATION		(V4L2_CID_FM_TX_CLASS_BASE + 1)
+V4L2_CID_RDS_TX_PI			(V4L2_CID_FM_TX_CLASS_BASE + 2)
+V4L2_CID_RDS_TX_PTY			(V4L2_CID_FM_TX_CLASS_BASE + 3)
+V4L2_CID_RDS_TX_PS_NAME			(V4L2_CID_FM_TX_CLASS_BASE + 5)
+V4L2_CID_RDS_TX_RADIO_TEXT		(V4L2_CID_FM_TX_CLASS_BASE + 6)
+V4L2_CID_RDS_TX_MONO_STEREO		(V4L2_CID_FM_TX_CLASS_BASE + 7)
+V4L2_CID_RDS_TX_ARTIFICIAL_HEAD		(V4L2_CID_FM_TX_CLASS_BASE + 8)
+V4L2_CID_RDS_TX_COMPRESSED		(V4L2_CID_FM_TX_CLASS_BASE + 9)
+V4L2_CID_RDS_TX_DYNAMIC_PTY		(V4L2_CID_FM_TX_CLASS_BASE + 10)
+V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT	(V4L2_CID_FM_TX_CLASS_BASE + 11)
+V4L2_CID_RDS_TX_TRAFFIC_PROGRAM		(V4L2_CID_FM_TX_CLASS_BASE + 12)
+V4L2_CID_RDS_TX_MUSIC_SPEECH		(V4L2_CID_FM_TX_CLASS_BASE + 13)
+V4L2_CID_RDS_TX_ALT_FREQS_ENABLE	(V4L2_CID_FM_TX_CLASS_BASE + 14)
+V4L2_CID_RDS_TX_ALT_FREQS		(V4L2_CID_FM_TX_CLASS_BASE + 15)
+V4L2_CID_AUDIO_LIMITER_ENABLED		(V4L2_CID_FM_TX_CLASS_BASE + 64)
+V4L2_CID_AUDIO_LIMITER_RELEASE_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 65)
+V4L2_CID_AUDIO_LIMITER_DEVIATION	(V4L2_CID_FM_TX_CLASS_BASE + 66)
+V4L2_CID_AUDIO_COMPRESSION_ENABLED	(V4L2_CID_FM_TX_CLASS_BASE + 80)
+V4L2_CID_AUDIO_COMPRESSION_GAIN		(V4L2_CID_FM_TX_CLASS_BASE + 81)
+V4L2_CID_AUDIO_COMPRESSION_THRESHOLD	(V4L2_CID_FM_TX_CLASS_BASE + 82)
+V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 83)
+V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 84)
+V4L2_CID_PILOT_TONE_ENABLED		(V4L2_CID_FM_TX_CLASS_BASE + 96)
+V4L2_CID_PILOT_TONE_DEVIATION		(V4L2_CID_FM_TX_CLASS_BASE + 97)
+V4L2_CID_PILOT_TONE_FREQUENCY		(V4L2_CID_FM_TX_CLASS_BASE + 98)
+V4L2_CID_TUNE_PREEMPHASIS		(V4L2_CID_FM_TX_CLASS_BASE + 112)
+V4L2_CID_TUNE_POWER_LEVEL		(V4L2_CID_FM_TX_CLASS_BASE + 113)
+V4L2_CID_TUNE_ANTENNA_CAPACITOR		(V4L2_CID_FM_TX_CLASS_BASE + 114)
+/* Flash and privacy (indicator) light controls */
+V4L2_CID_FLASH_LED_MODE			(V4L2_CID_FLASH_CLASS_BASE + 1)
+V4L2_CID_FLASH_STROBE_SOURCE		(V4L2_CID_FLASH_CLASS_BASE + 2)
+V4L2_CID_FLASH_STROBE			(V4L2_CID_FLASH_CLASS_BASE + 3)
+V4L2_CID_FLASH_STROBE_STOP		(V4L2_CID_FLASH_CLASS_BASE + 4)
+V4L2_CID_FLASH_STROBE_STATUS		(V4L2_CID_FLASH_CLASS_BASE + 5)
+V4L2_CID_FLASH_TIMEOUT			(V4L2_CID_FLASH_CLASS_BASE + 6)
+V4L2_CID_FLASH_INTENSITY		(V4L2_CID_FLASH_CLASS_BASE + 7)
+V4L2_CID_FLASH_TORCH_INTENSITY		(V4L2_CID_FLASH_CLASS_BASE + 8)
+V4L2_CID_FLASH_INDICATOR_INTENSITY	(V4L2_CID_FLASH_CLASS_BASE + 9)
+V4L2_CID_FLASH_FAULT			(V4L2_CID_FLASH_CLASS_BASE + 10)
+V4L2_CID_FLASH_CHARGE			(V4L2_CID_FLASH_CLASS_BASE + 11)
+V4L2_CID_FLASH_READY			(V4L2_CID_FLASH_CLASS_BASE + 12)
+/* Image source controls */
+V4L2_CID_VBLANK				(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)
+V4L2_CID_HBLANK				(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)
+V4L2_CID_ANALOGUE_GAIN			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)
+V4L2_CID_TEST_PATTERN_RED		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4)
+V4L2_CID_TEST_PATTERN_GREENR		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
+V4L2_CID_TEST_PATTERN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
+V4L2_CID_TEST_PATTERN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
+/* Image processing controls */
+V4L2_CID_LINK_FREQ			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
+V4L2_CID_PIXEL_RATE			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
+V4L2_CID_TEST_PATTERN			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)
+V4L2_CID_DEINTERLACING_MODE		(V4L2_CID_IMAGE_PROC_CLASS_BASE + 4)
+V4L2_CID_DIGITAL_GAIN			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 5)
+/*  DV-class control IDs defined by V4L2 */
+V4L2_CID_DV_TX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 5)
+V4L2_CID_DV_TX_IT_CONTENT_TYPE		(V4L2_CID_DV_CLASS_BASE + 6)
+V4L2_CID_DV_RX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 101)
+V4L2_CID_DV_RX_IT_CONTENT_TYPE		(V4L2_CID_DV_CLASS_BASE + 102)
+V4L2_CID_TUNE_DEEMPHASIS		(V4L2_CID_FM_RX_CLASS_BASE + 1)
+V4L2_CID_RDS_RECEPTION			(V4L2_CID_FM_RX_CLASS_BASE + 2)
+V4L2_CID_RDS_RX_PTY			(V4L2_CID_FM_RX_CLASS_BASE + 3)
+V4L2_CID_RDS_RX_PS_NAME			(V4L2_CID_FM_RX_CLASS_BASE + 4)
+V4L2_CID_RDS_RX_RADIO_TEXT		(V4L2_CID_FM_RX_CLASS_BASE + 5)
+V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT	(V4L2_CID_FM_RX_CLASS_BASE + 6)
+V4L2_CID_RDS_RX_TRAFFIC_PROGRAM		(V4L2_CID_FM_RX_CLASS_BASE + 7)
+V4L2_CID_RDS_RX_MUSIC_SPEECH		(V4L2_CID_FM_RX_CLASS_BASE + 8)
+V4L2_CID_RF_TUNER_BANDWIDTH_AUTO	(V4L2_CID_RF_TUNER_CLASS_BASE + 11)
+V4L2_CID_RF_TUNER_BANDWIDTH		(V4L2_CID_RF_TUNER_CLASS_BASE + 12)
+V4L2_CID_RF_TUNER_RF_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 32)
+V4L2_CID_RF_TUNER_LNA_GAIN_AUTO		(V4L2_CID_RF_TUNER_CLASS_BASE + 41)
+V4L2_CID_RF_TUNER_LNA_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 42)
+V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO	(V4L2_CID_RF_TUNER_CLASS_BASE + 51)
+V4L2_CID_RF_TUNER_MIXER_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 52)
+V4L2_CID_RF_TUNER_IF_GAIN_AUTO		(V4L2_CID_RF_TUNER_CLASS_BASE + 61)
+V4L2_CID_RF_TUNER_IF_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 62)
+V4L2_CID_RF_TUNER_PLL_LOCK		(V4L2_CID_RF_TUNER_CLASS_BASE + 91)
+/*  Detection-class control IDs defined by V4L2 */
+V4L2_CID_DETECT_MD_MODE			(V4L2_CID_DETECT_CLASS_BASE + 1)
+V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD	(V4L2_CID_DETECT_CLASS_BASE + 2)
+V4L2_CID_DETECT_MD_THRESHOLD_GRID	(V4L2_CID_DETECT_CLASS_BASE + 3)
+V4L2_CID_DETECT_MD_REGION_GRID		(V4L2_CID_DETECT_CLASS_BASE + 4)
diff --git a/xlat/v4l2_control_types.h b/xlat/v4l2_control_types.h
index 872d061..3f5a03a 100644
--- a/xlat/v4l2_control_types.h
+++ b/xlat/v4l2_control_types.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_control_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_control_types[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_control_types[] = {
 #if defined(V4L2_CTRL_TYPE_INTEGER) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_INTEGER) && HAVE_DECL_V4L2_CTRL_TYPE_INTEGER)
   XLAT(V4L2_CTRL_TYPE_INTEGER),
@@ -49,4 +55,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_device_capabilities_flags.h b/xlat/v4l2_device_capabilities_flags.h
index ef78c7a..17b0f5a 100644
--- a/xlat/v4l2_device_capabilities_flags.h
+++ b/xlat/v4l2_device_capabilities_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_device_capabilities_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_device_capabilities_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_device_capabilities_flags[] = {
 #if defined(V4L2_CAP_VIDEO_CAPTURE) || (defined(HAVE_DECL_V4L2_CAP_VIDEO_CAPTURE) && HAVE_DECL_V4L2_CAP_VIDEO_CAPTURE)
   XLAT(V4L2_CAP_VIDEO_CAPTURE),
@@ -97,4 +103,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_fields.h b/xlat/v4l2_fields.h
index a6c78db..e065a73 100644
--- a/xlat/v4l2_fields.h
+++ b/xlat/v4l2_fields.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_fields.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_fields[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_fields[] = {
 #if defined(V4L2_FIELD_ANY) || (defined(HAVE_DECL_V4L2_FIELD_ANY) && HAVE_DECL_V4L2_FIELD_ANY)
   XLAT(V4L2_FIELD_ANY),
@@ -43,4 +49,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_format_description_flags.h b/xlat/v4l2_format_description_flags.h
index d82236d..9bf39a1 100644
--- a/xlat/v4l2_format_description_flags.h
+++ b/xlat/v4l2_format_description_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_format_description_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_format_description_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_format_description_flags[] = {
 #if defined(V4L2_FMT_FLAG_COMPRESSED) || (defined(HAVE_DECL_V4L2_FMT_FLAG_COMPRESSED) && HAVE_DECL_V4L2_FMT_FLAG_COMPRESSED)
   XLAT(V4L2_FMT_FLAG_COMPRESSED),
@@ -19,4 +25,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_frameinterval_types.h b/xlat/v4l2_frameinterval_types.h
index 728c3c7..6b7b942 100644
--- a/xlat/v4l2_frameinterval_types.h
+++ b/xlat/v4l2_frameinterval_types.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_frameinterval_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_frameinterval_types[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_frameinterval_types[] = {
 #if defined(V4L2_FRMIVAL_TYPE_DISCRETE) || (defined(HAVE_DECL_V4L2_FRMIVAL_TYPE_DISCRETE) && HAVE_DECL_V4L2_FRMIVAL_TYPE_DISCRETE)
   XLAT(V4L2_FRMIVAL_TYPE_DISCRETE),
@@ -22,4 +28,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_framesize_types.h b/xlat/v4l2_framesize_types.h
index 28a77c2..9f5dbfa 100644
--- a/xlat/v4l2_framesize_types.h
+++ b/xlat/v4l2_framesize_types.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_framesize_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_framesize_types[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_framesize_types[] = {
 #if defined(V4L2_FRMSIZE_TYPE_DISCRETE) || (defined(HAVE_DECL_V4L2_FRMSIZE_TYPE_DISCRETE) && HAVE_DECL_V4L2_FRMSIZE_TYPE_DISCRETE)
   XLAT(V4L2_FRMSIZE_TYPE_DISCRETE),
@@ -22,4 +28,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_input_types.h b/xlat/v4l2_input_types.h
index 0b1ce6c..9c023f2 100644
--- a/xlat/v4l2_input_types.h
+++ b/xlat/v4l2_input_types.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_input_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_input_types[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_input_types[] = {
 #if defined(V4L2_INPUT_TYPE_TUNER) || (defined(HAVE_DECL_V4L2_INPUT_TYPE_TUNER) && HAVE_DECL_V4L2_INPUT_TYPE_TUNER)
   XLAT(V4L2_INPUT_TYPE_TUNER),
@@ -22,4 +28,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_memories.h b/xlat/v4l2_memories.h
index acbb395..e13190d 100644
--- a/xlat/v4l2_memories.h
+++ b/xlat/v4l2_memories.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_memories.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_memories[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_memories[] = {
 #if defined(V4L2_MEMORY_MMAP) || (defined(HAVE_DECL_V4L2_MEMORY_MMAP) && HAVE_DECL_V4L2_MEMORY_MMAP)
   XLAT(V4L2_MEMORY_MMAP),
@@ -25,4 +31,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_pix_fmts.h b/xlat/v4l2_pix_fmts.h
index 585d580..26a13bf 100644
--- a/xlat/v4l2_pix_fmts.h
+++ b/xlat/v4l2_pix_fmts.h
@@ -1,473 +1,1098 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_pix_fmts.in; do not edit. */
-#if !(defined(V4L2_PIX_FMT_Y10) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y10) && HAVE_DECL_V4L2_PIX_FMT_Y10))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(V4L2_PIX_FMT_Y10) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y10) && HAVE_DECL_V4L2_PIX_FMT_Y10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y10) == (v4l2_fourcc('Y', '1', '0', ' ')), "V4L2_PIX_FMT_Y10 != v4l2_fourcc('Y', '1', '0', ' ')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ')
 #endif
-#if !(defined(V4L2_PIX_FMT_Y12) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y12) && HAVE_DECL_V4L2_PIX_FMT_Y12))
+#if defined(V4L2_PIX_FMT_Y12) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y12) && HAVE_DECL_V4L2_PIX_FMT_Y12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y12) == (v4l2_fourcc('Y', '1', '2', ' ')), "V4L2_PIX_FMT_Y12 != v4l2_fourcc('Y', '1', '2', ' ')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ')
 #endif
-#if !(defined(V4L2_PIX_FMT_Y4) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y4) && HAVE_DECL_V4L2_PIX_FMT_Y4))
+#if defined(V4L2_PIX_FMT_Y4) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y4) && HAVE_DECL_V4L2_PIX_FMT_Y4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y4) == (v4l2_fourcc('Y', '0', '4', ' ')), "V4L2_PIX_FMT_Y4 != v4l2_fourcc('Y', '0', '4', ' ')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ')
 #endif
-#if !(defined(V4L2_PIX_FMT_Y6) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y6) && HAVE_DECL_V4L2_PIX_FMT_Y6))
+#if defined(V4L2_PIX_FMT_Y6) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y6) && HAVE_DECL_V4L2_PIX_FMT_Y6)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y6) == (v4l2_fourcc('Y', '0', '6', ' ')), "V4L2_PIX_FMT_Y6 != v4l2_fourcc('Y', '0', '6', ' ')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ')
 #endif
-#if !(defined(V4L2_PIX_FMT_Y16) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y16) && HAVE_DECL_V4L2_PIX_FMT_Y16))
+#if defined(V4L2_PIX_FMT_Y16) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y16) && HAVE_DECL_V4L2_PIX_FMT_Y16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y16) == (v4l2_fourcc('Y', '1', '6', ' ')), "V4L2_PIX_FMT_Y16 != v4l2_fourcc('Y', '1', '6', ' ')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ')
 #endif
-#if !(defined(V4L2_PIX_FMT_Z16) || (defined(HAVE_DECL_V4L2_PIX_FMT_Z16) && HAVE_DECL_V4L2_PIX_FMT_Z16))
+#if defined(V4L2_PIX_FMT_Z16) || (defined(HAVE_DECL_V4L2_PIX_FMT_Z16) && HAVE_DECL_V4L2_PIX_FMT_Z16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Z16) == (v4l2_fourcc('Z', '1', '6', ' ')), "V4L2_PIX_FMT_Z16 != v4l2_fourcc('Z', '1', '6', ' ')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
 #endif
-#if !(defined(V4L2_PIX_FMT_UV8) || (defined(HAVE_DECL_V4L2_PIX_FMT_UV8) && HAVE_DECL_V4L2_PIX_FMT_UV8))
+#if defined(V4L2_PIX_FMT_UV8) || (defined(HAVE_DECL_V4L2_PIX_FMT_UV8) && HAVE_DECL_V4L2_PIX_FMT_UV8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_UV8) == (v4l2_fourcc('U', 'V', '8', ' ')), "V4L2_PIX_FMT_UV8 != v4l2_fourcc('U', 'V', '8', ' ')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_UV8 v4l2_fourcc('U', 'V', '8', ' ')
 #endif
-#if !(defined(V4L2_PIX_FMT_Y8I) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y8I) && HAVE_DECL_V4L2_PIX_FMT_Y8I))
+#if defined(V4L2_PIX_FMT_Y8I) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y8I) && HAVE_DECL_V4L2_PIX_FMT_Y8I)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y8I) == (v4l2_fourcc('Y', '8', 'I', ' ')), "V4L2_PIX_FMT_Y8I != v4l2_fourcc('Y', '8', 'I', ' ')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y8I v4l2_fourcc('Y', '8', 'I', ' ')
 #endif
-#if !(defined(V4L2_PIX_FMT_MR97310A) || (defined(HAVE_DECL_V4L2_PIX_FMT_MR97310A) && HAVE_DECL_V4L2_PIX_FMT_MR97310A))
+#if defined(V4L2_PIX_FMT_MR97310A) || (defined(HAVE_DECL_V4L2_PIX_FMT_MR97310A) && HAVE_DECL_V4L2_PIX_FMT_MR97310A)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_MR97310A) == (v4l2_fourcc('M', '3', '1', '0')), "V4L2_PIX_FMT_MR97310A != v4l2_fourcc('M', '3', '1', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_SN9C10X) || (defined(HAVE_DECL_V4L2_PIX_FMT_SN9C10X) && HAVE_DECL_V4L2_PIX_FMT_SN9C10X))
+#if defined(V4L2_PIX_FMT_SN9C10X) || (defined(HAVE_DECL_V4L2_PIX_FMT_SN9C10X) && HAVE_DECL_V4L2_PIX_FMT_SN9C10X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SN9C10X) == (v4l2_fourcc('S', '9', '1', '0')), "V4L2_PIX_FMT_SN9C10X != v4l2_fourcc('S', '9', '1', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGRBG10) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG10) && HAVE_DECL_V4L2_PIX_FMT_SGRBG10))
+#if defined(V4L2_PIX_FMT_SGRBG10) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG10) && HAVE_DECL_V4L2_PIX_FMT_SGRBG10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGRBG10) == (v4l2_fourcc('B', 'A', '1', '0')), "V4L2_PIX_FMT_SGRBG10 != v4l2_fourcc('B', 'A', '1', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGBRG10) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG10) && HAVE_DECL_V4L2_PIX_FMT_SGBRG10))
+#if defined(V4L2_PIX_FMT_SGBRG10) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG10) && HAVE_DECL_V4L2_PIX_FMT_SGBRG10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGBRG10) == (v4l2_fourcc('G', 'B', '1', '0')), "V4L2_PIX_FMT_SGBRG10 != v4l2_fourcc('G', 'B', '1', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGRBG10DPCM8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG10DPCM8) && HAVE_DECL_V4L2_PIX_FMT_SGRBG10DPCM8))
+#if defined(V4L2_PIX_FMT_SGRBG10DPCM8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG10DPCM8) && HAVE_DECL_V4L2_PIX_FMT_SGRBG10DPCM8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGRBG10DPCM8) == (v4l2_fourcc('B', 'D', '1', '0')), "V4L2_PIX_FMT_SGRBG10DPCM8 != v4l2_fourcc('B', 'D', '1', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_SBGGR10) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR10) && HAVE_DECL_V4L2_PIX_FMT_SBGGR10))
+#if defined(V4L2_PIX_FMT_SBGGR10) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR10) && HAVE_DECL_V4L2_PIX_FMT_SBGGR10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SBGGR10) == (v4l2_fourcc('B', 'G', '1', '0')), "V4L2_PIX_FMT_SBGGR10 != v4l2_fourcc('B', 'G', '1', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_SRGGB10) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB10) && HAVE_DECL_V4L2_PIX_FMT_SRGGB10))
+#if defined(V4L2_PIX_FMT_SRGGB10) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB10) && HAVE_DECL_V4L2_PIX_FMT_SRGGB10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SRGGB10) == (v4l2_fourcc('R', 'G', '1', '0')), "V4L2_PIX_FMT_SRGGB10 != v4l2_fourcc('R', 'G', '1', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_M420) || (defined(HAVE_DECL_V4L2_PIX_FMT_M420) && HAVE_DECL_V4L2_PIX_FMT_M420))
+#if defined(V4L2_PIX_FMT_M420) || (defined(HAVE_DECL_V4L2_PIX_FMT_M420) && HAVE_DECL_V4L2_PIX_FMT_M420)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_M420) == (v4l2_fourcc('M', '4', '2', '0')), "V4L2_PIX_FMT_M420 != v4l2_fourcc('M', '4', '2', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_SN9C20X_I420) || (defined(HAVE_DECL_V4L2_PIX_FMT_SN9C20X_I420) && HAVE_DECL_V4L2_PIX_FMT_SN9C20X_I420))
+#if defined(V4L2_PIX_FMT_SN9C20X_I420) || (defined(HAVE_DECL_V4L2_PIX_FMT_SN9C20X_I420) && HAVE_DECL_V4L2_PIX_FMT_SN9C20X_I420)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SN9C20X_I420) == (v4l2_fourcc('S', '9', '2', '0')), "V4L2_PIX_FMT_SN9C20X_I420 != v4l2_fourcc('S', '9', '2', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_JL2005BCD) || (defined(HAVE_DECL_V4L2_PIX_FMT_JL2005BCD) && HAVE_DECL_V4L2_PIX_FMT_JL2005BCD))
+#if defined(V4L2_PIX_FMT_JL2005BCD) || (defined(HAVE_DECL_V4L2_PIX_FMT_JL2005BCD) && HAVE_DECL_V4L2_PIX_FMT_JL2005BCD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_JL2005BCD) == (v4l2_fourcc('J', 'L', '2', '0')), "V4L2_PIX_FMT_JL2005BCD != v4l2_fourcc('J', 'L', '2', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_TM6000) || (defined(HAVE_DECL_V4L2_PIX_FMT_TM6000) && HAVE_DECL_V4L2_PIX_FMT_TM6000))
+#if defined(V4L2_PIX_FMT_TM6000) || (defined(HAVE_DECL_V4L2_PIX_FMT_TM6000) && HAVE_DECL_V4L2_PIX_FMT_TM6000)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_TM6000) == (v4l2_fourcc('T', 'M', '6', '0')), "V4L2_PIX_FMT_TM6000 != v4l2_fourcc('T', 'M', '6', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_STV0680) || (defined(HAVE_DECL_V4L2_PIX_FMT_STV0680) && HAVE_DECL_V4L2_PIX_FMT_STV0680))
+#if defined(V4L2_PIX_FMT_STV0680) || (defined(HAVE_DECL_V4L2_PIX_FMT_STV0680) && HAVE_DECL_V4L2_PIX_FMT_STV0680)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_STV0680) == (v4l2_fourcc('S', '6', '8', '0')), "V4L2_PIX_FMT_STV0680 != v4l2_fourcc('S', '6', '8', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_VP8) || (defined(HAVE_DECL_V4L2_PIX_FMT_VP8) && HAVE_DECL_V4L2_PIX_FMT_VP8))
+#if defined(V4L2_PIX_FMT_VP8) || (defined(HAVE_DECL_V4L2_PIX_FMT_VP8) && HAVE_DECL_V4L2_PIX_FMT_VP8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_VP8) == (v4l2_fourcc('V', 'P', '8', '0')), "V4L2_PIX_FMT_VP8 != v4l2_fourcc('V', 'P', '8', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_VP9) || (defined(HAVE_DECL_V4L2_PIX_FMT_VP9) && HAVE_DECL_V4L2_PIX_FMT_VP9))
+#if defined(V4L2_PIX_FMT_VP9) || (defined(HAVE_DECL_V4L2_PIX_FMT_VP9) && HAVE_DECL_V4L2_PIX_FMT_VP9)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_VP9) == (v4l2_fourcc('V', 'P', '9', '0')), "V4L2_PIX_FMT_VP9 != v4l2_fourcc('V', 'P', '9', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0')
 #endif
-#if !(defined(V4L2_PIX_FMT_SE401) || (defined(HAVE_DECL_V4L2_PIX_FMT_SE401) && HAVE_DECL_V4L2_PIX_FMT_SE401))
+#if defined(V4L2_PIX_FMT_SE401) || (defined(HAVE_DECL_V4L2_PIX_FMT_SE401) && HAVE_DECL_V4L2_PIX_FMT_SE401)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SE401) == (v4l2_fourcc('S', '4', '0', '1')), "V4L2_PIX_FMT_SE401 != v4l2_fourcc('S', '4', '0', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SE401 v4l2_fourcc('S', '4', '0', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_SPCA501) || (defined(HAVE_DECL_V4L2_PIX_FMT_SPCA501) && HAVE_DECL_V4L2_PIX_FMT_SPCA501))
+#if defined(V4L2_PIX_FMT_SPCA501) || (defined(HAVE_DECL_V4L2_PIX_FMT_SPCA501) && HAVE_DECL_V4L2_PIX_FMT_SPCA501)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SPCA501) == (v4l2_fourcc('S', '5', '0', '1')), "V4L2_PIX_FMT_SPCA501 != v4l2_fourcc('S', '5', '0', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_OV511) || (defined(HAVE_DECL_V4L2_PIX_FMT_OV511) && HAVE_DECL_V4L2_PIX_FMT_OV511))
+#if defined(V4L2_PIX_FMT_OV511) || (defined(HAVE_DECL_V4L2_PIX_FMT_OV511) && HAVE_DECL_V4L2_PIX_FMT_OV511)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_OV511) == (v4l2_fourcc('O', '5', '1', '1')), "V4L2_PIX_FMT_OV511 != v4l2_fourcc('O', '5', '1', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV21M) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV21M) && HAVE_DECL_V4L2_PIX_FMT_NV21M))
+#if defined(V4L2_PIX_FMT_NV21M) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV21M) && HAVE_DECL_V4L2_PIX_FMT_NV21M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV21M) == (v4l2_fourcc('N', 'M', '2', '1')), "V4L2_PIX_FMT_NV21M != v4l2_fourcc('N', 'M', '2', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV21M v4l2_fourcc('N', 'M', '2', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_YVU420M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU420M) && HAVE_DECL_V4L2_PIX_FMT_YVU420M))
+#if defined(V4L2_PIX_FMT_YVU420M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU420M) && HAVE_DECL_V4L2_PIX_FMT_YVU420M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YVU420M) == (v4l2_fourcc('Y', 'M', '2', '1')), "V4L2_PIX_FMT_YVU420M != v4l2_fourcc('Y', 'M', '2', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_MT21C) || (defined(HAVE_DECL_V4L2_PIX_FMT_MT21C) && HAVE_DECL_V4L2_PIX_FMT_MT21C))
+#if defined(V4L2_PIX_FMT_MT21C) || (defined(HAVE_DECL_V4L2_PIX_FMT_MT21C) && HAVE_DECL_V4L2_PIX_FMT_MT21C)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_MT21C) == (v4l2_fourcc('M', 'T', '2', '1')), "V4L2_PIX_FMT_MT21C != v4l2_fourcc('M', 'T', '2', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV21) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV21) && HAVE_DECL_V4L2_PIX_FMT_NV21))
+#if defined(V4L2_PIX_FMT_NV21) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV21) && HAVE_DECL_V4L2_PIX_FMT_NV21)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV21) == (v4l2_fourcc('N', 'V', '2', '1')), "V4L2_PIX_FMT_NV21 != v4l2_fourcc('N', 'V', '2', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_SPCA561) || (defined(HAVE_DECL_V4L2_PIX_FMT_SPCA561) && HAVE_DECL_V4L2_PIX_FMT_SPCA561))
+#if defined(V4L2_PIX_FMT_SPCA561) || (defined(HAVE_DECL_V4L2_PIX_FMT_SPCA561) && HAVE_DECL_V4L2_PIX_FMT_SPCA561)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SPCA561) == (v4l2_fourcc('S', '5', '6', '1')), "V4L2_PIX_FMT_SPCA561 != v4l2_fourcc('S', '5', '6', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV61M) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV61M) && HAVE_DECL_V4L2_PIX_FMT_NV61M))
+#if defined(V4L2_PIX_FMT_NV61M) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV61M) && HAVE_DECL_V4L2_PIX_FMT_NV61M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV61M) == (v4l2_fourcc('N', 'M', '6', '1')), "V4L2_PIX_FMT_NV61M != v4l2_fourcc('N', 'M', '6', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV61M v4l2_fourcc('N', 'M', '6', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_YVU422M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU422M) && HAVE_DECL_V4L2_PIX_FMT_YVU422M))
+#if defined(V4L2_PIX_FMT_YVU422M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU422M) && HAVE_DECL_V4L2_PIX_FMT_YVU422M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YVU422M) == (v4l2_fourcc('Y', 'M', '6', '1')), "V4L2_PIX_FMT_YVU422M != v4l2_fourcc('Y', 'M', '6', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YVU422M v4l2_fourcc('Y', 'M', '6', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV61) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV61) && HAVE_DECL_V4L2_PIX_FMT_NV61))
+#if defined(V4L2_PIX_FMT_NV61) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV61) && HAVE_DECL_V4L2_PIX_FMT_NV61)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV61) == (v4l2_fourcc('N', 'V', '6', '1')), "V4L2_PIX_FMT_NV61 != v4l2_fourcc('N', 'V', '6', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_SBGGR8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR8) && HAVE_DECL_V4L2_PIX_FMT_SBGGR8))
+#if defined(V4L2_PIX_FMT_SBGGR8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR8) && HAVE_DECL_V4L2_PIX_FMT_SBGGR8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SBGGR8) == (v4l2_fourcc('B', 'A', '8', '1')), "V4L2_PIX_FMT_SBGGR8 != v4l2_fourcc('B', 'A', '8', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_RGB332) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB332) && HAVE_DECL_V4L2_PIX_FMT_RGB332))
+#if defined(V4L2_PIX_FMT_RGB332) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB332) && HAVE_DECL_V4L2_PIX_FMT_RGB332)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_RGB332) == (v4l2_fourcc('R', 'G', 'B', '1')), "V4L2_PIX_FMT_RGB332 != v4l2_fourcc('R', 'G', 'B', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_H264_NO_SC) || (defined(HAVE_DECL_V4L2_PIX_FMT_H264_NO_SC) && HAVE_DECL_V4L2_PIX_FMT_H264_NO_SC))
+#if defined(V4L2_PIX_FMT_H264_NO_SC) || (defined(HAVE_DECL_V4L2_PIX_FMT_H264_NO_SC) && HAVE_DECL_V4L2_PIX_FMT_H264_NO_SC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_H264_NO_SC) == (v4l2_fourcc('A', 'V', 'C', '1')), "V4L2_PIX_FMT_H264_NO_SC != v4l2_fourcc('A', 'V', 'C', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_PWC1) || (defined(HAVE_DECL_V4L2_PIX_FMT_PWC1) && HAVE_DECL_V4L2_PIX_FMT_PWC1))
+#if defined(V4L2_PIX_FMT_PWC1) || (defined(HAVE_DECL_V4L2_PIX_FMT_PWC1) && HAVE_DECL_V4L2_PIX_FMT_PWC1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_PWC1) == (v4l2_fourcc('P', 'W', 'C', '1')), "V4L2_PIX_FMT_PWC1 != v4l2_fourcc('P', 'W', 'C', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_MPEG1) || (defined(HAVE_DECL_V4L2_PIX_FMT_MPEG1) && HAVE_DECL_V4L2_PIX_FMT_MPEG1))
+#if defined(V4L2_PIX_FMT_MPEG1) || (defined(HAVE_DECL_V4L2_PIX_FMT_MPEG1) && HAVE_DECL_V4L2_PIX_FMT_MPEG1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_MPEG1) == (v4l2_fourcc('M', 'P', 'G', '1')), "V4L2_PIX_FMT_MPEG1 != v4l2_fourcc('M', 'P', 'G', '1')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGRBG12) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG12) && HAVE_DECL_V4L2_PIX_FMT_SGRBG12))
+#if defined(V4L2_PIX_FMT_SGRBG12) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG12) && HAVE_DECL_V4L2_PIX_FMT_SGRBG12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGRBG12) == (v4l2_fourcc('B', 'A', '1', '2')), "V4L2_PIX_FMT_SGRBG12 != v4l2_fourcc('B', 'A', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGBRG12) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG12) && HAVE_DECL_V4L2_PIX_FMT_SGBRG12))
+#if defined(V4L2_PIX_FMT_SGBRG12) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG12) && HAVE_DECL_V4L2_PIX_FMT_SGBRG12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGBRG12) == (v4l2_fourcc('G', 'B', '1', '2')), "V4L2_PIX_FMT_SGBRG12 != v4l2_fourcc('G', 'B', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_SBGGR12) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR12) && HAVE_DECL_V4L2_PIX_FMT_SBGGR12))
+#if defined(V4L2_PIX_FMT_SBGGR12) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR12) && HAVE_DECL_V4L2_PIX_FMT_SBGGR12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SBGGR12) == (v4l2_fourcc('B', 'G', '1', '2')), "V4L2_PIX_FMT_SBGGR12 != v4l2_fourcc('B', 'G', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_SRGGB12) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB12) && HAVE_DECL_V4L2_PIX_FMT_SRGGB12))
+#if defined(V4L2_PIX_FMT_SRGGB12) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB12) && HAVE_DECL_V4L2_PIX_FMT_SRGGB12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SRGGB12) == (v4l2_fourcc('R', 'G', '1', '2')), "V4L2_PIX_FMT_SRGGB12 != v4l2_fourcc('R', 'G', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_HM12) || (defined(HAVE_DECL_V4L2_PIX_FMT_HM12) && HAVE_DECL_V4L2_PIX_FMT_HM12))
+#if defined(V4L2_PIX_FMT_HM12) || (defined(HAVE_DECL_V4L2_PIX_FMT_HM12) && HAVE_DECL_V4L2_PIX_FMT_HM12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_HM12) == (v4l2_fourcc('H', 'M', '1', '2')), "V4L2_PIX_FMT_HM12 != v4l2_fourcc('H', 'M', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV12M) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV12M) && HAVE_DECL_V4L2_PIX_FMT_NV12M))
+#if defined(V4L2_PIX_FMT_NV12M) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV12M) && HAVE_DECL_V4L2_PIX_FMT_NV12M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV12M) == (v4l2_fourcc('N', 'M', '1', '2')), "V4L2_PIX_FMT_NV12M != v4l2_fourcc('N', 'M', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV12MT) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV12MT) && HAVE_DECL_V4L2_PIX_FMT_NV12MT))
+#if defined(V4L2_PIX_FMT_NV12MT) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV12MT) && HAVE_DECL_V4L2_PIX_FMT_NV12MT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV12MT) == (v4l2_fourcc('T', 'M', '1', '2')), "V4L2_PIX_FMT_NV12MT != v4l2_fourcc('T', 'M', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV12MT_16X16) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV12MT_16X16) && HAVE_DECL_V4L2_PIX_FMT_NV12MT_16X16))
+#if defined(V4L2_PIX_FMT_NV12MT_16X16) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV12MT_16X16) && HAVE_DECL_V4L2_PIX_FMT_NV12MT_16X16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV12MT_16X16) == (v4l2_fourcc('V', 'M', '1', '2')), "V4L2_PIX_FMT_NV12MT_16X16 != v4l2_fourcc('V', 'M', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV420M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV420M) && HAVE_DECL_V4L2_PIX_FMT_YUV420M))
+#if defined(V4L2_PIX_FMT_YUV420M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV420M) && HAVE_DECL_V4L2_PIX_FMT_YUV420M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV420M) == (v4l2_fourcc('Y', 'M', '1', '2')), "V4L2_PIX_FMT_YUV420M != v4l2_fourcc('Y', 'M', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_ARGB444) || (defined(HAVE_DECL_V4L2_PIX_FMT_ARGB444) && HAVE_DECL_V4L2_PIX_FMT_ARGB444))
+#if defined(V4L2_PIX_FMT_ARGB444) || (defined(HAVE_DECL_V4L2_PIX_FMT_ARGB444) && HAVE_DECL_V4L2_PIX_FMT_ARGB444)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_ARGB444) == (v4l2_fourcc('A', 'R', '1', '2')), "V4L2_PIX_FMT_ARGB444 != v4l2_fourcc('A', 'R', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_XRGB444) || (defined(HAVE_DECL_V4L2_PIX_FMT_XRGB444) && HAVE_DECL_V4L2_PIX_FMT_XRGB444))
+#if defined(V4L2_PIX_FMT_XRGB444) || (defined(HAVE_DECL_V4L2_PIX_FMT_XRGB444) && HAVE_DECL_V4L2_PIX_FMT_XRGB444)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_XRGB444) == (v4l2_fourcc('X', 'R', '1', '2')), "V4L2_PIX_FMT_XRGB444 != v4l2_fourcc('X', 'R', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV420) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV420) && HAVE_DECL_V4L2_PIX_FMT_YUV420))
+#if defined(V4L2_PIX_FMT_YUV420) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV420) && HAVE_DECL_V4L2_PIX_FMT_YUV420)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV420) == (v4l2_fourcc('Y', 'U', '1', '2')), "V4L2_PIX_FMT_YUV420 != v4l2_fourcc('Y', 'U', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV12) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV12) && HAVE_DECL_V4L2_PIX_FMT_NV12))
+#if defined(V4L2_PIX_FMT_NV12) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV12) && HAVE_DECL_V4L2_PIX_FMT_NV12)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV12) == (v4l2_fourcc('N', 'V', '1', '2')), "V4L2_PIX_FMT_NV12 != v4l2_fourcc('N', 'V', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_YVU420) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU420) && HAVE_DECL_V4L2_PIX_FMT_YVU420))
+#if defined(V4L2_PIX_FMT_YVU420) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU420) && HAVE_DECL_V4L2_PIX_FMT_YVU420)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YVU420) == (v4l2_fourcc('Y', 'V', '1', '2')), "V4L2_PIX_FMT_YVU420 != v4l2_fourcc('Y', 'V', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_YVU444M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU444M) && HAVE_DECL_V4L2_PIX_FMT_YVU444M))
+#if defined(V4L2_PIX_FMT_YVU444M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU444M) && HAVE_DECL_V4L2_PIX_FMT_YVU444M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YVU444M) == (v4l2_fourcc('Y', 'M', '4', '2')), "V4L2_PIX_FMT_YVU444M != v4l2_fourcc('Y', 'M', '4', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV42) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV42) && HAVE_DECL_V4L2_PIX_FMT_NV42))
+#if defined(V4L2_PIX_FMT_NV42) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV42) && HAVE_DECL_V4L2_PIX_FMT_NV42)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV42) == (v4l2_fourcc('N', 'V', '4', '2')), "V4L2_PIX_FMT_NV42 != v4l2_fourcc('N', 'V', '4', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_PWC2) || (defined(HAVE_DECL_V4L2_PIX_FMT_PWC2) && HAVE_DECL_V4L2_PIX_FMT_PWC2))
+#if defined(V4L2_PIX_FMT_PWC2) || (defined(HAVE_DECL_V4L2_PIX_FMT_PWC2) && HAVE_DECL_V4L2_PIX_FMT_PWC2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_PWC2) == (v4l2_fourcc('P', 'W', 'C', '2')), "V4L2_PIX_FMT_PWC2 != v4l2_fourcc('P', 'W', 'C', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_MPEG2) || (defined(HAVE_DECL_V4L2_PIX_FMT_MPEG2) && HAVE_DECL_V4L2_PIX_FMT_MPEG2))
+#if defined(V4L2_PIX_FMT_MPEG2) || (defined(HAVE_DECL_V4L2_PIX_FMT_MPEG2) && HAVE_DECL_V4L2_PIX_FMT_MPEG2)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_MPEG2) == (v4l2_fourcc('M', 'P', 'G', '2')), "V4L2_PIX_FMT_MPEG2 != v4l2_fourcc('M', 'P', 'G', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_SBGGR16) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR16) && HAVE_DECL_V4L2_PIX_FMT_SBGGR16))
+#if defined(V4L2_PIX_FMT_SBGGR16) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR16) && HAVE_DECL_V4L2_PIX_FMT_SBGGR16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SBGGR16) == (v4l2_fourcc('B', 'Y', 'R', '2')), "V4L2_PIX_FMT_SBGGR16 != v4l2_fourcc('B', 'Y', 'R', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2')
 #endif
-#if !(defined(V4L2_PIX_FMT_H263) || (defined(HAVE_DECL_V4L2_PIX_FMT_H263) && HAVE_DECL_V4L2_PIX_FMT_H263))
+#if defined(V4L2_PIX_FMT_H263) || (defined(HAVE_DECL_V4L2_PIX_FMT_H263) && HAVE_DECL_V4L2_PIX_FMT_H263)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_H263) == (v4l2_fourcc('H', '2', '6', '3')), "V4L2_PIX_FMT_H263 != v4l2_fourcc('H', '2', '6', '3')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3')
 #endif
-#if !(defined(V4L2_PIX_FMT_RGB24) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB24) && HAVE_DECL_V4L2_PIX_FMT_RGB24))
+#if defined(V4L2_PIX_FMT_RGB24) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB24) && HAVE_DECL_V4L2_PIX_FMT_RGB24)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_RGB24) == (v4l2_fourcc('R', 'G', 'B', '3')), "V4L2_PIX_FMT_RGB24 != v4l2_fourcc('R', 'G', 'B', '3')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3')
 #endif
-#if !(defined(V4L2_PIX_FMT_BGR24) || (defined(HAVE_DECL_V4L2_PIX_FMT_BGR24) && HAVE_DECL_V4L2_PIX_FMT_BGR24))
+#if defined(V4L2_PIX_FMT_BGR24) || (defined(HAVE_DECL_V4L2_PIX_FMT_BGR24) && HAVE_DECL_V4L2_PIX_FMT_BGR24)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_BGR24) == (v4l2_fourcc('B', 'G', 'R', '3')), "V4L2_PIX_FMT_BGR24 != v4l2_fourcc('B', 'G', 'R', '3')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3')
 #endif
-#if !(defined(V4L2_PIX_FMT_HSV24) || (defined(HAVE_DECL_V4L2_PIX_FMT_HSV24) && HAVE_DECL_V4L2_PIX_FMT_HSV24))
+#if defined(V4L2_PIX_FMT_HSV24) || (defined(HAVE_DECL_V4L2_PIX_FMT_HSV24) && HAVE_DECL_V4L2_PIX_FMT_HSV24)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_HSV24) == (v4l2_fourcc('H', 'S', 'V', '3')), "V4L2_PIX_FMT_HSV24 != v4l2_fourcc('H', 'S', 'V', '3')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_HSV24 v4l2_fourcc('H', 'S', 'V', '3')
 #endif
-#if !(defined(V4L2_PIX_FMT_ARGB32) || (defined(HAVE_DECL_V4L2_PIX_FMT_ARGB32) && HAVE_DECL_V4L2_PIX_FMT_ARGB32))
+#if defined(V4L2_PIX_FMT_ARGB32) || (defined(HAVE_DECL_V4L2_PIX_FMT_ARGB32) && HAVE_DECL_V4L2_PIX_FMT_ARGB32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_ARGB32) == (v4l2_fourcc('B', 'A', '2', '4')), "V4L2_PIX_FMT_ARGB32 != v4l2_fourcc('B', 'A', '2', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_HI240) || (defined(HAVE_DECL_V4L2_PIX_FMT_HI240) && HAVE_DECL_V4L2_PIX_FMT_HI240))
+#if defined(V4L2_PIX_FMT_HI240) || (defined(HAVE_DECL_V4L2_PIX_FMT_HI240) && HAVE_DECL_V4L2_PIX_FMT_HI240)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_HI240) == (v4l2_fourcc('H', 'I', '2', '4')), "V4L2_PIX_FMT_HI240 != v4l2_fourcc('H', 'I', '2', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV444M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV444M) && HAVE_DECL_V4L2_PIX_FMT_YUV444M))
+#if defined(V4L2_PIX_FMT_YUV444M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV444M) && HAVE_DECL_V4L2_PIX_FMT_YUV444M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV444M) == (v4l2_fourcc('Y', 'M', '2', '4')), "V4L2_PIX_FMT_YUV444M != v4l2_fourcc('Y', 'M', '2', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_ABGR32) || (defined(HAVE_DECL_V4L2_PIX_FMT_ABGR32) && HAVE_DECL_V4L2_PIX_FMT_ABGR32))
+#if defined(V4L2_PIX_FMT_ABGR32) || (defined(HAVE_DECL_V4L2_PIX_FMT_ABGR32) && HAVE_DECL_V4L2_PIX_FMT_ABGR32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_ABGR32) == (v4l2_fourcc('A', 'R', '2', '4')), "V4L2_PIX_FMT_ABGR32 != v4l2_fourcc('A', 'R', '2', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_ABGR32 v4l2_fourcc('A', 'R', '2', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_XBGR32) || (defined(HAVE_DECL_V4L2_PIX_FMT_XBGR32) && HAVE_DECL_V4L2_PIX_FMT_XBGR32))
+#if defined(V4L2_PIX_FMT_XBGR32) || (defined(HAVE_DECL_V4L2_PIX_FMT_XBGR32) && HAVE_DECL_V4L2_PIX_FMT_XBGR32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_XBGR32) == (v4l2_fourcc('X', 'R', '2', '4')), "V4L2_PIX_FMT_XBGR32 != v4l2_fourcc('X', 'R', '2', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV24) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV24) && HAVE_DECL_V4L2_PIX_FMT_NV24))
+#if defined(V4L2_PIX_FMT_NV24) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV24) && HAVE_DECL_V4L2_PIX_FMT_NV24)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV24) == (v4l2_fourcc('N', 'V', '2', '4')), "V4L2_PIX_FMT_NV24 != v4l2_fourcc('N', 'V', '2', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_XRGB32) || (defined(HAVE_DECL_V4L2_PIX_FMT_XRGB32) && HAVE_DECL_V4L2_PIX_FMT_XRGB32))
+#if defined(V4L2_PIX_FMT_XRGB32) || (defined(HAVE_DECL_V4L2_PIX_FMT_XRGB32) && HAVE_DECL_V4L2_PIX_FMT_XRGB32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_XRGB32) == (v4l2_fourcc('B', 'X', '2', '4')), "V4L2_PIX_FMT_XRGB32 != v4l2_fourcc('B', 'X', '2', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_RGB444) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB444) && HAVE_DECL_V4L2_PIX_FMT_RGB444))
+#if defined(V4L2_PIX_FMT_RGB444) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB444) && HAVE_DECL_V4L2_PIX_FMT_RGB444)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_RGB444) == (v4l2_fourcc('R', '4', '4', '4')), "V4L2_PIX_FMT_RGB444 != v4l2_fourcc('R', '4', '4', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV444) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV444) && HAVE_DECL_V4L2_PIX_FMT_YUV444))
+#if defined(V4L2_PIX_FMT_YUV444) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV444) && HAVE_DECL_V4L2_PIX_FMT_YUV444)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV444) == (v4l2_fourcc('Y', '4', '4', '4')), "V4L2_PIX_FMT_YUV444 != v4l2_fourcc('Y', '4', '4', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV444 v4l2_fourcc('Y', '4', '4', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_H264) || (defined(HAVE_DECL_V4L2_PIX_FMT_H264) && HAVE_DECL_V4L2_PIX_FMT_H264))
+#if defined(V4L2_PIX_FMT_H264) || (defined(HAVE_DECL_V4L2_PIX_FMT_H264) && HAVE_DECL_V4L2_PIX_FMT_H264)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_H264) == (v4l2_fourcc('H', '2', '6', '4')), "V4L2_PIX_FMT_H264 != v4l2_fourcc('H', '2', '6', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_H264_MVC) || (defined(HAVE_DECL_V4L2_PIX_FMT_H264_MVC) && HAVE_DECL_V4L2_PIX_FMT_H264_MVC))
+#if defined(V4L2_PIX_FMT_H264_MVC) || (defined(HAVE_DECL_V4L2_PIX_FMT_H264_MVC) && HAVE_DECL_V4L2_PIX_FMT_H264_MVC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_H264_MVC) == (v4l2_fourcc('M', '2', '6', '4')), "V4L2_PIX_FMT_H264_MVC != v4l2_fourcc('M', '2', '6', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_RGB32) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB32) && HAVE_DECL_V4L2_PIX_FMT_RGB32))
+#if defined(V4L2_PIX_FMT_RGB32) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB32) && HAVE_DECL_V4L2_PIX_FMT_RGB32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_RGB32) == (v4l2_fourcc('R', 'G', 'B', '4')), "V4L2_PIX_FMT_RGB32 != v4l2_fourcc('R', 'G', 'B', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_MPEG4) || (defined(HAVE_DECL_V4L2_PIX_FMT_MPEG4) && HAVE_DECL_V4L2_PIX_FMT_MPEG4))
+#if defined(V4L2_PIX_FMT_MPEG4) || (defined(HAVE_DECL_V4L2_PIX_FMT_MPEG4) && HAVE_DECL_V4L2_PIX_FMT_MPEG4)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_MPEG4) == (v4l2_fourcc('M', 'P', 'G', '4')), "V4L2_PIX_FMT_MPEG4 != v4l2_fourcc('M', 'P', 'G', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_BGR32) || (defined(HAVE_DECL_V4L2_PIX_FMT_BGR32) && HAVE_DECL_V4L2_PIX_FMT_BGR32))
+#if defined(V4L2_PIX_FMT_BGR32) || (defined(HAVE_DECL_V4L2_PIX_FMT_BGR32) && HAVE_DECL_V4L2_PIX_FMT_BGR32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_BGR32) == (v4l2_fourcc('B', 'G', 'R', '4')), "V4L2_PIX_FMT_BGR32 != v4l2_fourcc('B', 'G', 'R', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_HSV32) || (defined(HAVE_DECL_V4L2_PIX_FMT_HSV32) && HAVE_DECL_V4L2_PIX_FMT_HSV32))
+#if defined(V4L2_PIX_FMT_HSV32) || (defined(HAVE_DECL_V4L2_PIX_FMT_HSV32) && HAVE_DECL_V4L2_PIX_FMT_HSV32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_HSV32) == (v4l2_fourcc('H', 'S', 'V', '4')), "V4L2_PIX_FMT_HSV32 != v4l2_fourcc('H', 'S', 'V', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_HSV32 v4l2_fourcc('H', 'S', 'V', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV32) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV32) && HAVE_DECL_V4L2_PIX_FMT_YUV32))
+#if defined(V4L2_PIX_FMT_YUV32) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV32) && HAVE_DECL_V4L2_PIX_FMT_YUV32)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV32) == (v4l2_fourcc('Y', 'U', 'V', '4')), "V4L2_PIX_FMT_YUV32 != v4l2_fourcc('Y', 'U', 'V', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4')
 #endif
-#if !(defined(V4L2_PIX_FMT_SPCA505) || (defined(HAVE_DECL_V4L2_PIX_FMT_SPCA505) && HAVE_DECL_V4L2_PIX_FMT_SPCA505))
+#if defined(V4L2_PIX_FMT_SPCA505) || (defined(HAVE_DECL_V4L2_PIX_FMT_SPCA505) && HAVE_DECL_V4L2_PIX_FMT_SPCA505)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SPCA505) == (v4l2_fourcc('S', '5', '0', '5')), "V4L2_PIX_FMT_SPCA505 != v4l2_fourcc('S', '5', '0', '5')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S', '5', '0', '5')
 #endif
-#if !(defined(V4L2_PIX_FMT_ARGB555) || (defined(HAVE_DECL_V4L2_PIX_FMT_ARGB555) && HAVE_DECL_V4L2_PIX_FMT_ARGB555))
+#if defined(V4L2_PIX_FMT_ARGB555) || (defined(HAVE_DECL_V4L2_PIX_FMT_ARGB555) && HAVE_DECL_V4L2_PIX_FMT_ARGB555)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_ARGB555) == (v4l2_fourcc('A', 'R', '1', '5')), "V4L2_PIX_FMT_ARGB555 != v4l2_fourcc('A', 'R', '1', '5')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5')
 #endif
-#if !(defined(V4L2_PIX_FMT_XRGB555) || (defined(HAVE_DECL_V4L2_PIX_FMT_XRGB555) && HAVE_DECL_V4L2_PIX_FMT_XRGB555))
+#if defined(V4L2_PIX_FMT_XRGB555) || (defined(HAVE_DECL_V4L2_PIX_FMT_XRGB555) && HAVE_DECL_V4L2_PIX_FMT_XRGB555)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_XRGB555) == (v4l2_fourcc('X', 'R', '1', '5')), "V4L2_PIX_FMT_XRGB555 != v4l2_fourcc('X', 'R', '1', '5')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5')
 #endif
-#if !(defined(V4L2_PIX_FMT_ET61X251) || (defined(HAVE_DECL_V4L2_PIX_FMT_ET61X251) && HAVE_DECL_V4L2_PIX_FMT_ET61X251))
+#if defined(V4L2_PIX_FMT_ET61X251) || (defined(HAVE_DECL_V4L2_PIX_FMT_ET61X251) && HAVE_DECL_V4L2_PIX_FMT_ET61X251)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_ET61X251) == (v4l2_fourcc('E', '6', '2', '5')), "V4L2_PIX_FMT_ET61X251 != v4l2_fourcc('E', '6', '2', '5')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGBRG16) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG16) && HAVE_DECL_V4L2_PIX_FMT_SGBRG16))
+#if defined(V4L2_PIX_FMT_SGBRG16) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG16) && HAVE_DECL_V4L2_PIX_FMT_SGBRG16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGBRG16) == (v4l2_fourcc('G', 'B', '1', '6')), "V4L2_PIX_FMT_SGBRG16 != v4l2_fourcc('G', 'B', '1', '6')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6')
 #endif
-#if !(defined(V4L2_PIX_FMT_SRGGB16) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB16) && HAVE_DECL_V4L2_PIX_FMT_SRGGB16))
+#if defined(V4L2_PIX_FMT_SRGGB16) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB16) && HAVE_DECL_V4L2_PIX_FMT_SRGGB16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SRGGB16) == (v4l2_fourcc('R', 'G', '1', '6')), "V4L2_PIX_FMT_SRGGB16 != v4l2_fourcc('R', 'G', '1', '6')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SRGGB16 v4l2_fourcc('R', 'G', '1', '6')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV16M) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV16M) && HAVE_DECL_V4L2_PIX_FMT_NV16M))
+#if defined(V4L2_PIX_FMT_NV16M) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV16M) && HAVE_DECL_V4L2_PIX_FMT_NV16M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV16M) == (v4l2_fourcc('N', 'M', '1', '6')), "V4L2_PIX_FMT_NV16M != v4l2_fourcc('N', 'M', '1', '6')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV16M v4l2_fourcc('N', 'M', '1', '6')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV422M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV422M) && HAVE_DECL_V4L2_PIX_FMT_YUV422M))
+#if defined(V4L2_PIX_FMT_YUV422M) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV422M) && HAVE_DECL_V4L2_PIX_FMT_YUV422M)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV422M) == (v4l2_fourcc('Y', 'M', '1', '6')), "V4L2_PIX_FMT_YUV422M != v4l2_fourcc('Y', 'M', '1', '6')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', '1', '6')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGRBG16) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG16) && HAVE_DECL_V4L2_PIX_FMT_SGRBG16))
+#if defined(V4L2_PIX_FMT_SGRBG16) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG16) && HAVE_DECL_V4L2_PIX_FMT_SGRBG16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGRBG16) == (v4l2_fourcc('G', 'R', '1', '6')), "V4L2_PIX_FMT_SGRBG16 != v4l2_fourcc('G', 'R', '1', '6')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6')
 #endif
-#if !(defined(V4L2_PIX_FMT_NV16) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV16) && HAVE_DECL_V4L2_PIX_FMT_NV16))
+#if defined(V4L2_PIX_FMT_NV16) || (defined(HAVE_DECL_V4L2_PIX_FMT_NV16) && HAVE_DECL_V4L2_PIX_FMT_NV16)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_NV16) == (v4l2_fourcc('N', 'V', '1', '6')), "V4L2_PIX_FMT_NV16 != v4l2_fourcc('N', 'V', '1', '6')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6')
 #endif
-#if !(defined(V4L2_PIX_FMT_PAC207) || (defined(HAVE_DECL_V4L2_PIX_FMT_PAC207) && HAVE_DECL_V4L2_PIX_FMT_PAC207))
+#if defined(V4L2_PIX_FMT_PAC207) || (defined(HAVE_DECL_V4L2_PIX_FMT_PAC207) && HAVE_DECL_V4L2_PIX_FMT_PAC207)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_PAC207) == (v4l2_fourcc('P', '2', '0', '7')), "V4L2_PIX_FMT_PAC207 != v4l2_fourcc('P', '2', '0', '7')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7')
 #endif
-#if !(defined(V4L2_PIX_FMT_SPCA508) || (defined(HAVE_DECL_V4L2_PIX_FMT_SPCA508) && HAVE_DECL_V4L2_PIX_FMT_SPCA508))
+#if defined(V4L2_PIX_FMT_SPCA508) || (defined(HAVE_DECL_V4L2_PIX_FMT_SPCA508) && HAVE_DECL_V4L2_PIX_FMT_SPCA508)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SPCA508) == (v4l2_fourcc('S', '5', '0', '8')), "V4L2_PIX_FMT_SPCA508 != v4l2_fourcc('S', '5', '0', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_OV518) || (defined(HAVE_DECL_V4L2_PIX_FMT_OV518) && HAVE_DECL_V4L2_PIX_FMT_OV518))
+#if defined(V4L2_PIX_FMT_OV518) || (defined(HAVE_DECL_V4L2_PIX_FMT_OV518) && HAVE_DECL_V4L2_PIX_FMT_OV518)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_OV518) == (v4l2_fourcc('O', '5', '1', '8')), "V4L2_PIX_FMT_OV518 != v4l2_fourcc('O', '5', '1', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_SBGGR10ALAW8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR10ALAW8) && HAVE_DECL_V4L2_PIX_FMT_SBGGR10ALAW8))
+#if defined(V4L2_PIX_FMT_SBGGR10ALAW8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR10ALAW8) && HAVE_DECL_V4L2_PIX_FMT_SBGGR10ALAW8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SBGGR10ALAW8) == (v4l2_fourcc('a', 'B', 'A', '8')), "V4L2_PIX_FMT_SBGGR10ALAW8 != v4l2_fourcc('a', 'B', 'A', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_SBGGR10DPCM8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR10DPCM8) && HAVE_DECL_V4L2_PIX_FMT_SBGGR10DPCM8))
+#if defined(V4L2_PIX_FMT_SBGGR10DPCM8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR10DPCM8) && HAVE_DECL_V4L2_PIX_FMT_SBGGR10DPCM8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SBGGR10DPCM8) == (v4l2_fourcc('b', 'B', 'A', '8')), "V4L2_PIX_FMT_SBGGR10DPCM8 != v4l2_fourcc('b', 'B', 'A', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGBRG10ALAW8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG10ALAW8) && HAVE_DECL_V4L2_PIX_FMT_SGBRG10ALAW8))
+#if defined(V4L2_PIX_FMT_SGBRG10ALAW8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG10ALAW8) && HAVE_DECL_V4L2_PIX_FMT_SGBRG10ALAW8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGBRG10ALAW8) == (v4l2_fourcc('a', 'G', 'A', '8')), "V4L2_PIX_FMT_SGBRG10ALAW8 != v4l2_fourcc('a', 'G', 'A', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGBRG10DPCM8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG10DPCM8) && HAVE_DECL_V4L2_PIX_FMT_SGBRG10DPCM8))
+#if defined(V4L2_PIX_FMT_SGBRG10DPCM8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG10DPCM8) && HAVE_DECL_V4L2_PIX_FMT_SGBRG10DPCM8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGBRG10DPCM8) == (v4l2_fourcc('b', 'G', 'A', '8')), "V4L2_PIX_FMT_SGBRG10DPCM8 != v4l2_fourcc('b', 'G', 'A', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_SRGGB10ALAW8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB10ALAW8) && HAVE_DECL_V4L2_PIX_FMT_SRGGB10ALAW8))
+#if defined(V4L2_PIX_FMT_SRGGB10ALAW8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB10ALAW8) && HAVE_DECL_V4L2_PIX_FMT_SRGGB10ALAW8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SRGGB10ALAW8) == (v4l2_fourcc('a', 'R', 'A', '8')), "V4L2_PIX_FMT_SRGGB10ALAW8 != v4l2_fourcc('a', 'R', 'A', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_SRGGB10DPCM8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB10DPCM8) && HAVE_DECL_V4L2_PIX_FMT_SRGGB10DPCM8))
+#if defined(V4L2_PIX_FMT_SRGGB10DPCM8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB10DPCM8) && HAVE_DECL_V4L2_PIX_FMT_SRGGB10DPCM8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SRGGB10DPCM8) == (v4l2_fourcc('b', 'R', 'A', '8')), "V4L2_PIX_FMT_SRGGB10DPCM8 != v4l2_fourcc('b', 'R', 'A', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGRBG10ALAW8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG10ALAW8) && HAVE_DECL_V4L2_PIX_FMT_SGRBG10ALAW8))
+#if defined(V4L2_PIX_FMT_SGRBG10ALAW8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG10ALAW8) && HAVE_DECL_V4L2_PIX_FMT_SGRBG10ALAW8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGRBG10ALAW8) == (v4l2_fourcc('a', 'g', 'A', '8')), "V4L2_PIX_FMT_SGRBG10ALAW8 != v4l2_fourcc('a', 'g', 'A', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_PAL8) || (defined(HAVE_DECL_V4L2_PIX_FMT_PAL8) && HAVE_DECL_V4L2_PIX_FMT_PAL8))
+#if defined(V4L2_PIX_FMT_PAL8) || (defined(HAVE_DECL_V4L2_PIX_FMT_PAL8) && HAVE_DECL_V4L2_PIX_FMT_PAL8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_PAL8) == (v4l2_fourcc('P', 'A', 'L', '8')), "V4L2_PIX_FMT_PAL8 != v4l2_fourcc('P', 'A', 'L', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8')
 #endif
-#if !(defined(V4L2_PIX_FMT_YVU410) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU410) && HAVE_DECL_V4L2_PIX_FMT_YVU410))
+#if defined(V4L2_PIX_FMT_YVU410) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVU410) && HAVE_DECL_V4L2_PIX_FMT_YVU410)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YVU410) == (v4l2_fourcc('Y', 'V', 'U', '9')), "V4L2_PIX_FMT_YVU410 != v4l2_fourcc('Y', 'V', 'U', '9')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV410) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV410) && HAVE_DECL_V4L2_PIX_FMT_YUV410))
+#if defined(V4L2_PIX_FMT_YUV410) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV410) && HAVE_DECL_V4L2_PIX_FMT_YUV410)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV410) == (v4l2_fourcc('Y', 'U', 'V', '9')), "V4L2_PIX_FMT_YUV410 != v4l2_fourcc('Y', 'U', 'V', '9')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9')
 #endif
-#if !(defined(V4L2_PIX_FMT_SBGGR10P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR10P) && HAVE_DECL_V4L2_PIX_FMT_SBGGR10P))
+#if defined(V4L2_PIX_FMT_SBGGR10P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR10P) && HAVE_DECL_V4L2_PIX_FMT_SBGGR10P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SBGGR10P) == (v4l2_fourcc('p', 'B', 'A', 'A')), "V4L2_PIX_FMT_SBGGR10P != v4l2_fourcc('p', 'B', 'A', 'A')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGBRG10P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG10P) && HAVE_DECL_V4L2_PIX_FMT_SGBRG10P))
+#if defined(V4L2_PIX_FMT_SGBRG10P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG10P) && HAVE_DECL_V4L2_PIX_FMT_SGBRG10P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGBRG10P) == (v4l2_fourcc('p', 'G', 'A', 'A')), "V4L2_PIX_FMT_SGBRG10P != v4l2_fourcc('p', 'G', 'A', 'A')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
 #endif
-#if !(defined(V4L2_PIX_FMT_SRGGB10P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB10P) && HAVE_DECL_V4L2_PIX_FMT_SRGGB10P))
+#if defined(V4L2_PIX_FMT_SRGGB10P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB10P) && HAVE_DECL_V4L2_PIX_FMT_SRGGB10P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SRGGB10P) == (v4l2_fourcc('p', 'R', 'A', 'A')), "V4L2_PIX_FMT_SRGGB10P != v4l2_fourcc('p', 'R', 'A', 'A')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGRBG10P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG10P) && HAVE_DECL_V4L2_PIX_FMT_SGRBG10P))
+#if defined(V4L2_PIX_FMT_SGRBG10P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG10P) && HAVE_DECL_V4L2_PIX_FMT_SGRBG10P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGRBG10P) == (v4l2_fourcc('p', 'g', 'A', 'A')), "V4L2_PIX_FMT_SGRBG10P != v4l2_fourcc('p', 'g', 'A', 'A')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
 #endif
-#if !(defined(V4L2_PIX_FMT_CPIA1) || (defined(HAVE_DECL_V4L2_PIX_FMT_CPIA1) && HAVE_DECL_V4L2_PIX_FMT_CPIA1))
+#if defined(V4L2_PIX_FMT_CPIA1) || (defined(HAVE_DECL_V4L2_PIX_FMT_CPIA1) && HAVE_DECL_V4L2_PIX_FMT_CPIA1)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_CPIA1) == (v4l2_fourcc('C', 'P', 'I', 'A')), "V4L2_PIX_FMT_CPIA1 != v4l2_fourcc('C', 'P', 'I', 'A')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A')
 #endif
-#if !(defined(V4L2_PIX_FMT_WNVA) || (defined(HAVE_DECL_V4L2_PIX_FMT_WNVA) && HAVE_DECL_V4L2_PIX_FMT_WNVA))
+#if defined(V4L2_PIX_FMT_WNVA) || (defined(HAVE_DECL_V4L2_PIX_FMT_WNVA) && HAVE_DECL_V4L2_PIX_FMT_WNVA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_WNVA) == (v4l2_fourcc('W', 'N', 'V', 'A')), "V4L2_PIX_FMT_WNVA != v4l2_fourcc('W', 'N', 'V', 'A')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A')
 #endif
-#if !(defined(V4L2_PIX_FMT_Y10BPACK) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y10BPACK) && HAVE_DECL_V4L2_PIX_FMT_Y10BPACK))
+#if defined(V4L2_PIX_FMT_Y10BPACK) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y10BPACK) && HAVE_DECL_V4L2_PIX_FMT_Y10BPACK)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y10BPACK) == (v4l2_fourcc('Y', '1', '0', 'B')), "V4L2_PIX_FMT_Y10BPACK != v4l2_fourcc('Y', '1', '0', 'B')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B')
 #endif
-#if !(defined(V4L2_PIX_FMT_SRGGB8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB8) && HAVE_DECL_V4L2_PIX_FMT_SRGGB8))
+#if defined(V4L2_PIX_FMT_SRGGB8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB8) && HAVE_DECL_V4L2_PIX_FMT_SRGGB8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SRGGB8) == (v4l2_fourcc('R', 'G', 'G', 'B')), "V4L2_PIX_FMT_SRGGB8 != v4l2_fourcc('R', 'G', 'G', 'B')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B')
 #endif
-#if !(defined(V4L2_PIX_FMT_SQ905C) || (defined(HAVE_DECL_V4L2_PIX_FMT_SQ905C) && HAVE_DECL_V4L2_PIX_FMT_SQ905C))
+#if defined(V4L2_PIX_FMT_SQ905C) || (defined(HAVE_DECL_V4L2_PIX_FMT_SQ905C) && HAVE_DECL_V4L2_PIX_FMT_SQ905C)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SQ905C) == (v4l2_fourcc('9', '0', '5', 'C')), "V4L2_PIX_FMT_SQ905C != v4l2_fourcc('9', '0', '5', 'C')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C')
 #endif
-#if !(defined(V4L2_PIX_FMT_SBGGR12P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR12P) && HAVE_DECL_V4L2_PIX_FMT_SBGGR12P))
+#if defined(V4L2_PIX_FMT_SBGGR12P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SBGGR12P) && HAVE_DECL_V4L2_PIX_FMT_SBGGR12P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SBGGR12P) == (v4l2_fourcc('p', 'B', 'C', 'C')), "V4L2_PIX_FMT_SBGGR12P != v4l2_fourcc('p', 'B', 'C', 'C')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGBRG12P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG12P) && HAVE_DECL_V4L2_PIX_FMT_SGBRG12P))
+#if defined(V4L2_PIX_FMT_SGBRG12P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG12P) && HAVE_DECL_V4L2_PIX_FMT_SGBRG12P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGBRG12P) == (v4l2_fourcc('p', 'G', 'C', 'C')), "V4L2_PIX_FMT_SGBRG12P != v4l2_fourcc('p', 'G', 'C', 'C')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
 #endif
-#if !(defined(V4L2_PIX_FMT_SRGGB12P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB12P) && HAVE_DECL_V4L2_PIX_FMT_SRGGB12P))
+#if defined(V4L2_PIX_FMT_SRGGB12P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SRGGB12P) && HAVE_DECL_V4L2_PIX_FMT_SRGGB12P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SRGGB12P) == (v4l2_fourcc('p', 'R', 'C', 'C')), "V4L2_PIX_FMT_SRGGB12P != v4l2_fourcc('p', 'R', 'C', 'C')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGRBG12P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG12P) && HAVE_DECL_V4L2_PIX_FMT_SGRBG12P))
+#if defined(V4L2_PIX_FMT_SGRBG12P) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG12P) && HAVE_DECL_V4L2_PIX_FMT_SGRBG12P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGRBG12P) == (v4l2_fourcc('p', 'g', 'C', 'C')), "V4L2_PIX_FMT_SGRBG12P != v4l2_fourcc('p', 'g', 'C', 'C')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
 #endif
-#if !(defined(V4L2_PIX_FMT_XVID) || (defined(HAVE_DECL_V4L2_PIX_FMT_XVID) && HAVE_DECL_V4L2_PIX_FMT_XVID))
+#if defined(V4L2_PIX_FMT_HEVC) || (defined(HAVE_DECL_V4L2_PIX_FMT_HEVC) && HAVE_DECL_V4L2_PIX_FMT_HEVC)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_HEVC) == (v4l2_fourcc('H', 'E', 'V', 'C')), "V4L2_PIX_FMT_HEVC != v4l2_fourcc('H', 'E', 'V', 'C')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
+# define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C')
+#endif
+#if defined(V4L2_PIX_FMT_XVID) || (defined(HAVE_DECL_V4L2_PIX_FMT_XVID) && HAVE_DECL_V4L2_PIX_FMT_XVID)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_XVID) == (v4l2_fourcc('X', 'V', 'I', 'D')), "V4L2_PIX_FMT_XVID != v4l2_fourcc('X', 'V', 'I', 'D')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D')
 #endif
-#if !(defined(V4L2_PIX_FMT_VC1_ANNEX_G) || (defined(HAVE_DECL_V4L2_PIX_FMT_VC1_ANNEX_G) && HAVE_DECL_V4L2_PIX_FMT_VC1_ANNEX_G))
+#if defined(V4L2_PIX_FMT_VC1_ANNEX_G) || (defined(HAVE_DECL_V4L2_PIX_FMT_VC1_ANNEX_G) && HAVE_DECL_V4L2_PIX_FMT_VC1_ANNEX_G)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_VC1_ANNEX_G) == (v4l2_fourcc('V', 'C', '1', 'G')), "V4L2_PIX_FMT_VC1_ANNEX_G != v4l2_fourcc('V', 'C', '1', 'G')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G')
 #endif
-#if !(defined(V4L2_PIX_FMT_IPU3_SGRBG10) || (defined(HAVE_DECL_V4L2_PIX_FMT_IPU3_SGRBG10) && HAVE_DECL_V4L2_PIX_FMT_IPU3_SGRBG10))
+#if defined(V4L2_PIX_FMT_IPU3_SGRBG10) || (defined(HAVE_DECL_V4L2_PIX_FMT_IPU3_SGRBG10) && HAVE_DECL_V4L2_PIX_FMT_IPU3_SGRBG10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_IPU3_SGRBG10) == (v4l2_fourcc('i', 'p', '3', 'G')), "V4L2_PIX_FMT_IPU3_SGRBG10 != v4l2_fourcc('i', 'p', '3', 'G')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_IPU3_SGRBG10 v4l2_fourcc('i', 'p', '3', 'G')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGRBG8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG8) && HAVE_DECL_V4L2_PIX_FMT_SGRBG8))
+#if defined(V4L2_PIX_FMT_SGRBG8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGRBG8) && HAVE_DECL_V4L2_PIX_FMT_SGRBG8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGRBG8) == (v4l2_fourcc('G', 'R', 'B', 'G')), "V4L2_PIX_FMT_SGRBG8 != v4l2_fourcc('G', 'R', 'B', 'G')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G')
 #endif
-#if !(defined(V4L2_PIX_FMT_JPEG) || (defined(HAVE_DECL_V4L2_PIX_FMT_JPEG) && HAVE_DECL_V4L2_PIX_FMT_JPEG))
+#if defined(V4L2_PIX_FMT_JPEG) || (defined(HAVE_DECL_V4L2_PIX_FMT_JPEG) && HAVE_DECL_V4L2_PIX_FMT_JPEG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_JPEG) == (v4l2_fourcc('J', 'P', 'E', 'G')), "V4L2_PIX_FMT_JPEG != v4l2_fourcc('J', 'P', 'E', 'G')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G')
 #endif
-#if !(defined(V4L2_PIX_FMT_MPEG) || (defined(HAVE_DECL_V4L2_PIX_FMT_MPEG) && HAVE_DECL_V4L2_PIX_FMT_MPEG))
+#if defined(V4L2_PIX_FMT_MPEG) || (defined(HAVE_DECL_V4L2_PIX_FMT_MPEG) && HAVE_DECL_V4L2_PIX_FMT_MPEG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_MPEG) == (v4l2_fourcc('M', 'P', 'E', 'G')), "V4L2_PIX_FMT_MPEG != v4l2_fourcc('M', 'P', 'E', 'G')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G')
 #endif
-#if !(defined(V4L2_PIX_FMT_MJPEG) || (defined(HAVE_DECL_V4L2_PIX_FMT_MJPEG) && HAVE_DECL_V4L2_PIX_FMT_MJPEG))
+#if defined(V4L2_PIX_FMT_MJPEG) || (defined(HAVE_DECL_V4L2_PIX_FMT_MJPEG) && HAVE_DECL_V4L2_PIX_FMT_MJPEG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_MJPEG) == (v4l2_fourcc('M', 'J', 'P', 'G')), "V4L2_PIX_FMT_MJPEG != v4l2_fourcc('M', 'J', 'P', 'G')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G')
 #endif
-#if !(defined(V4L2_PIX_FMT_PJPG) || (defined(HAVE_DECL_V4L2_PIX_FMT_PJPG) && HAVE_DECL_V4L2_PIX_FMT_PJPG))
+#if defined(V4L2_PIX_FMT_PJPG) || (defined(HAVE_DECL_V4L2_PIX_FMT_PJPG) && HAVE_DECL_V4L2_PIX_FMT_PJPG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_PJPG) == (v4l2_fourcc('P', 'J', 'P', 'G')), "V4L2_PIX_FMT_PJPG != v4l2_fourcc('P', 'J', 'P', 'G')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G')
 #endif
-#if !(defined(V4L2_PIX_FMT_SGBRG8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG8) && HAVE_DECL_V4L2_PIX_FMT_SGBRG8))
+#if defined(V4L2_PIX_FMT_SGBRG8) || (defined(HAVE_DECL_V4L2_PIX_FMT_SGBRG8) && HAVE_DECL_V4L2_PIX_FMT_SGBRG8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SGBRG8) == (v4l2_fourcc('G', 'B', 'R', 'G')), "V4L2_PIX_FMT_SGBRG8 != v4l2_fourcc('G', 'B', 'R', 'G')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G')
 #endif
-#if !(defined(V4L2_PIX_FMT_BGR666) || (defined(HAVE_DECL_V4L2_PIX_FMT_BGR666) && HAVE_DECL_V4L2_PIX_FMT_BGR666))
+#if defined(V4L2_PIX_FMT_BGR666) || (defined(HAVE_DECL_V4L2_PIX_FMT_BGR666) && HAVE_DECL_V4L2_PIX_FMT_BGR666)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_BGR666) == (v4l2_fourcc('B', 'G', 'R', 'H')), "V4L2_PIX_FMT_BGR666 != v4l2_fourcc('B', 'G', 'R', 'H')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H')
 #endif
-#if !(defined(V4L2_PIX_FMT_Y12I) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y12I) && HAVE_DECL_V4L2_PIX_FMT_Y12I))
+#if defined(V4L2_PIX_FMT_Y12I) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y12I) && HAVE_DECL_V4L2_PIX_FMT_Y12I)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y12I) == (v4l2_fourcc('Y', '1', '2', 'I')), "V4L2_PIX_FMT_Y12I != v4l2_fourcc('Y', '1', '2', 'I')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y12I v4l2_fourcc('Y', '1', '2', 'I')
 #endif
-#if !(defined(V4L2_PIX_FMT_S5C_UYVY_JPG) || (defined(HAVE_DECL_V4L2_PIX_FMT_S5C_UYVY_JPG) && HAVE_DECL_V4L2_PIX_FMT_S5C_UYVY_JPG))
+#if defined(V4L2_PIX_FMT_S5C_UYVY_JPG) || (defined(HAVE_DECL_V4L2_PIX_FMT_S5C_UYVY_JPG) && HAVE_DECL_V4L2_PIX_FMT_S5C_UYVY_JPG)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_S5C_UYVY_JPG) == (v4l2_fourcc('S', '5', 'C', 'I')), "V4L2_PIX_FMT_S5C_UYVY_JPG != v4l2_fourcc('S', '5', 'C', 'I')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I')
 #endif
-#if !(defined(V4L2_PIX_FMT_KONICA420) || (defined(HAVE_DECL_V4L2_PIX_FMT_KONICA420) && HAVE_DECL_V4L2_PIX_FMT_KONICA420))
+#if defined(V4L2_PIX_FMT_KONICA420) || (defined(HAVE_DECL_V4L2_PIX_FMT_KONICA420) && HAVE_DECL_V4L2_PIX_FMT_KONICA420)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_KONICA420) == (v4l2_fourcc('K', 'O', 'N', 'I')), "V4L2_PIX_FMT_KONICA420 != v4l2_fourcc('K', 'O', 'N', 'I')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_KONICA420 v4l2_fourcc('K', 'O', 'N', 'I')
 #endif
-#if !(defined(V4L2_PIX_FMT_INZI) || (defined(HAVE_DECL_V4L2_PIX_FMT_INZI) && HAVE_DECL_V4L2_PIX_FMT_INZI))
+#if defined(V4L2_PIX_FMT_INZI) || (defined(HAVE_DECL_V4L2_PIX_FMT_INZI) && HAVE_DECL_V4L2_PIX_FMT_INZI)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_INZI) == (v4l2_fourcc('I', 'N', 'Z', 'I')), "V4L2_PIX_FMT_INZI != v4l2_fourcc('I', 'N', 'Z', 'I')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I')
 #endif
-#if !(defined(V4L2_PIX_FMT_VC1_ANNEX_L) || (defined(HAVE_DECL_V4L2_PIX_FMT_VC1_ANNEX_L) && HAVE_DECL_V4L2_PIX_FMT_VC1_ANNEX_L))
+#if defined(V4L2_PIX_FMT_VC1_ANNEX_L) || (defined(HAVE_DECL_V4L2_PIX_FMT_VC1_ANNEX_L) && HAVE_DECL_V4L2_PIX_FMT_VC1_ANNEX_L)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_VC1_ANNEX_L) == (v4l2_fourcc('V', 'C', '1', 'L')), "V4L2_PIX_FMT_VC1_ANNEX_L != v4l2_fourcc('V', 'C', '1', 'L')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L')
 #endif
-#if !(defined(V4L2_PIX_FMT_JPGL) || (defined(HAVE_DECL_V4L2_PIX_FMT_JPGL) && HAVE_DECL_V4L2_PIX_FMT_JPGL))
+#if defined(V4L2_PIX_FMT_JPGL) || (defined(HAVE_DECL_V4L2_PIX_FMT_JPGL) && HAVE_DECL_V4L2_PIX_FMT_JPGL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_JPGL) == (v4l2_fourcc('J', 'P', 'G', 'L')), "V4L2_PIX_FMT_JPGL != v4l2_fourcc('J', 'P', 'G', 'L')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_JPGL v4l2_fourcc('J', 'P', 'G', 'L')
 #endif
-#if !(defined(V4L2_PIX_FMT_RGB555) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB555) && HAVE_DECL_V4L2_PIX_FMT_RGB555))
+#if defined(V4L2_PIX_FMT_RGB555) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB555) && HAVE_DECL_V4L2_PIX_FMT_RGB555)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_RGB555) == (v4l2_fourcc('R', 'G', 'B', 'O')), "V4L2_PIX_FMT_RGB555 != v4l2_fourcc('R', 'G', 'B', 'O')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV555) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV555) && HAVE_DECL_V4L2_PIX_FMT_YUV555))
+#if defined(V4L2_PIX_FMT_YUV555) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV555) && HAVE_DECL_V4L2_PIX_FMT_YUV555)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV555) == (v4l2_fourcc('Y', 'U', 'V', 'O')), "V4L2_PIX_FMT_YUV555 != v4l2_fourcc('Y', 'U', 'V', 'O')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV411P) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV411P) && HAVE_DECL_V4L2_PIX_FMT_YUV411P))
+#if defined(V4L2_PIX_FMT_YUV411P) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV411P) && HAVE_DECL_V4L2_PIX_FMT_YUV411P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV411P) == (v4l2_fourcc('4', '1', '1', 'P')), "V4L2_PIX_FMT_YUV411P != v4l2_fourcc('4', '1', '1', 'P')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P')
 #endif
-#if !(defined(V4L2_PIX_FMT_Y41P) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y41P) && HAVE_DECL_V4L2_PIX_FMT_Y41P))
+#if defined(V4L2_PIX_FMT_Y41P) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y41P) && HAVE_DECL_V4L2_PIX_FMT_Y41P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y41P) == (v4l2_fourcc('Y', '4', '1', 'P')), "V4L2_PIX_FMT_Y41P != v4l2_fourcc('Y', '4', '1', 'P')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y', '4', '1', 'P')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV422P) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV422P) && HAVE_DECL_V4L2_PIX_FMT_YUV422P))
+#if defined(V4L2_PIX_FMT_YUV422P) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV422P) && HAVE_DECL_V4L2_PIX_FMT_YUV422P)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV422P) == (v4l2_fourcc('4', '2', '2', 'P')), "V4L2_PIX_FMT_YUV422P != v4l2_fourcc('4', '2', '2', 'P')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P')
 #endif
-#if !(defined(V4L2_PIX_FMT_RGB565) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB565) && HAVE_DECL_V4L2_PIX_FMT_RGB565))
+#if defined(V4L2_PIX_FMT_RGB565) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB565) && HAVE_DECL_V4L2_PIX_FMT_RGB565)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_RGB565) == (v4l2_fourcc('R', 'G', 'B', 'P')), "V4L2_PIX_FMT_RGB565 != v4l2_fourcc('R', 'G', 'B', 'P')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUV565) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV565) && HAVE_DECL_V4L2_PIX_FMT_YUV565))
+#if defined(V4L2_PIX_FMT_YUV565) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUV565) && HAVE_DECL_V4L2_PIX_FMT_YUV565)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUV565) == (v4l2_fourcc('Y', 'U', 'V', 'P')), "V4L2_PIX_FMT_YUV565 != v4l2_fourcc('Y', 'U', 'V', 'P')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P')
 #endif
-#if !(defined(V4L2_PIX_FMT_RGB555X) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB555X) && HAVE_DECL_V4L2_PIX_FMT_RGB555X))
+#if defined(V4L2_PIX_FMT_RGB555X) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB555X) && HAVE_DECL_V4L2_PIX_FMT_RGB555X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_RGB555X) == (v4l2_fourcc('R', 'G', 'B', 'Q')), "V4L2_PIX_FMT_RGB555X != v4l2_fourcc('R', 'G', 'B', 'Q')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q')
 #endif
-#if !(defined(V4L2_PIX_FMT_RGB565X) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB565X) && HAVE_DECL_V4L2_PIX_FMT_RGB565X))
+#if defined(V4L2_PIX_FMT_RGB565X) || (defined(HAVE_DECL_V4L2_PIX_FMT_RGB565X) && HAVE_DECL_V4L2_PIX_FMT_RGB565X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_RGB565X) == (v4l2_fourcc('R', 'G', 'B', 'R')), "V4L2_PIX_FMT_RGB565X != v4l2_fourcc('R', 'G', 'B', 'R')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R')
 #endif
-#if !(defined(V4L2_PIX_FMT_YVYU) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVYU) && HAVE_DECL_V4L2_PIX_FMT_YVYU))
+#if defined(V4L2_PIX_FMT_YVYU) || (defined(HAVE_DECL_V4L2_PIX_FMT_YVYU) && HAVE_DECL_V4L2_PIX_FMT_YVYU)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YVYU) == (v4l2_fourcc('Y', 'V', 'Y', 'U')), "V4L2_PIX_FMT_YVYU != v4l2_fourcc('Y', 'V', 'Y', 'U')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U')
 #endif
-#if !(defined(V4L2_PIX_FMT_CIT_YYVYUY) || (defined(HAVE_DECL_V4L2_PIX_FMT_CIT_YYVYUY) && HAVE_DECL_V4L2_PIX_FMT_CIT_YYVYUY))
+#if defined(V4L2_PIX_FMT_CIT_YYVYUY) || (defined(HAVE_DECL_V4L2_PIX_FMT_CIT_YYVYUY) && HAVE_DECL_V4L2_PIX_FMT_CIT_YYVYUY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_CIT_YYVYUY) == (v4l2_fourcc('C', 'I', 'T', 'V')), "V4L2_PIX_FMT_CIT_YYVYUY != v4l2_fourcc('C', 'I', 'T', 'V')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V')
 #endif
-#if !(defined(V4L2_PIX_FMT_YYUV) || (defined(HAVE_DECL_V4L2_PIX_FMT_YYUV) && HAVE_DECL_V4L2_PIX_FMT_YYUV))
+#if defined(V4L2_PIX_FMT_YYUV) || (defined(HAVE_DECL_V4L2_PIX_FMT_YYUV) && HAVE_DECL_V4L2_PIX_FMT_YYUV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YYUV) == (v4l2_fourcc('Y', 'Y', 'U', 'V')), "V4L2_PIX_FMT_YYUV != v4l2_fourcc('Y', 'Y', 'U', 'V')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V')
 #endif
-#if !(defined(V4L2_PIX_FMT_YUYV) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUYV) && HAVE_DECL_V4L2_PIX_FMT_YUYV))
+#if defined(V4L2_PIX_FMT_YUYV) || (defined(HAVE_DECL_V4L2_PIX_FMT_YUYV) && HAVE_DECL_V4L2_PIX_FMT_YUYV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_YUYV) == (v4l2_fourcc('Y', 'U', 'Y', 'V')), "V4L2_PIX_FMT_YUYV != v4l2_fourcc('Y', 'U', 'Y', 'V')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V')
 #endif
-#if !(defined(V4L2_PIX_FMT_SN9C2028) || (defined(HAVE_DECL_V4L2_PIX_FMT_SN9C2028) && HAVE_DECL_V4L2_PIX_FMT_SN9C2028))
+#if defined(V4L2_PIX_FMT_SN9C2028) || (defined(HAVE_DECL_V4L2_PIX_FMT_SN9C2028) && HAVE_DECL_V4L2_PIX_FMT_SN9C2028)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_SN9C2028) == (v4l2_fourcc('S', 'O', 'N', 'X')), "V4L2_PIX_FMT_SN9C2028 != v4l2_fourcc('S', 'O', 'N', 'X')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X')
 #endif
-#if !(defined(V4L2_PIX_FMT_GREY) || (defined(HAVE_DECL_V4L2_PIX_FMT_GREY) && HAVE_DECL_V4L2_PIX_FMT_GREY))
+#if defined(V4L2_PIX_FMT_GREY) || (defined(HAVE_DECL_V4L2_PIX_FMT_GREY) && HAVE_DECL_V4L2_PIX_FMT_GREY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_GREY) == (v4l2_fourcc('G', 'R', 'E', 'Y')), "V4L2_PIX_FMT_GREY != v4l2_fourcc('G', 'R', 'E', 'Y')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y')
 #endif
-#if !(defined(V4L2_PIX_FMT_VYUY) || (defined(HAVE_DECL_V4L2_PIX_FMT_VYUY) && HAVE_DECL_V4L2_PIX_FMT_VYUY))
+#if defined(V4L2_PIX_FMT_VYUY) || (defined(HAVE_DECL_V4L2_PIX_FMT_VYUY) && HAVE_DECL_V4L2_PIX_FMT_VYUY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_VYUY) == (v4l2_fourcc('V', 'Y', 'U', 'Y')), "V4L2_PIX_FMT_VYUY != v4l2_fourcc('V', 'Y', 'U', 'Y')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y')
 #endif
-#if !(defined(V4L2_PIX_FMT_UYVY) || (defined(HAVE_DECL_V4L2_PIX_FMT_UYVY) && HAVE_DECL_V4L2_PIX_FMT_UYVY))
+#if defined(V4L2_PIX_FMT_UYVY) || (defined(HAVE_DECL_V4L2_PIX_FMT_UYVY) && HAVE_DECL_V4L2_PIX_FMT_UYVY)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_UYVY) == (v4l2_fourcc('U', 'Y', 'V', 'Y')), "V4L2_PIX_FMT_UYVY != v4l2_fourcc('U', 'Y', 'V', 'Y')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y')
 #endif
-#if !(defined(V4L2_PIX_FMT_IPU3_SBGGR10) || (defined(HAVE_DECL_V4L2_PIX_FMT_IPU3_SBGGR10) && HAVE_DECL_V4L2_PIX_FMT_IPU3_SBGGR10))
+#if defined(V4L2_PIX_FMT_IPU3_SBGGR10) || (defined(HAVE_DECL_V4L2_PIX_FMT_IPU3_SBGGR10) && HAVE_DECL_V4L2_PIX_FMT_IPU3_SBGGR10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_IPU3_SBGGR10) == (v4l2_fourcc('i', 'p', '3', 'b')), "V4L2_PIX_FMT_IPU3_SBGGR10 != v4l2_fourcc('i', 'p', '3', 'b')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b')
 #endif
-#if !(defined(V4L2_PIX_FMT_DV) || (defined(HAVE_DECL_V4L2_PIX_FMT_DV) && HAVE_DECL_V4L2_PIX_FMT_DV))
+#if defined(V4L2_PIX_FMT_DV) || (defined(HAVE_DECL_V4L2_PIX_FMT_DV) && HAVE_DECL_V4L2_PIX_FMT_DV)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_DV) == (v4l2_fourcc('d', 'v', 's', 'd')), "V4L2_PIX_FMT_DV != v4l2_fourcc('d', 'v', 's', 'd')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_DV v4l2_fourcc('d', 'v', 's', 'd')
 #endif
-#if !(defined(V4L2_PIX_FMT_IPU3_SGBRG10) || (defined(HAVE_DECL_V4L2_PIX_FMT_IPU3_SGBRG10) && HAVE_DECL_V4L2_PIX_FMT_IPU3_SGBRG10))
+#if defined(V4L2_PIX_FMT_IPU3_SGBRG10) || (defined(HAVE_DECL_V4L2_PIX_FMT_IPU3_SGBRG10) && HAVE_DECL_V4L2_PIX_FMT_IPU3_SGBRG10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_IPU3_SGBRG10) == (v4l2_fourcc('i', 'p', '3', 'g')), "V4L2_PIX_FMT_IPU3_SGBRG10 != v4l2_fourcc('i', 'p', '3', 'g')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_IPU3_SGBRG10 v4l2_fourcc('i', 'p', '3', 'g')
 #endif
-#if !(defined(V4L2_PIX_FMT_IPU3_SRGGB10) || (defined(HAVE_DECL_V4L2_PIX_FMT_IPU3_SRGGB10) && HAVE_DECL_V4L2_PIX_FMT_IPU3_SRGGB10))
+#if defined(V4L2_PIX_FMT_IPU3_SRGGB10) || (defined(HAVE_DECL_V4L2_PIX_FMT_IPU3_SRGGB10) && HAVE_DECL_V4L2_PIX_FMT_IPU3_SRGGB10)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_IPU3_SRGGB10) == (v4l2_fourcc('i', 'p', '3', 'r')), "V4L2_PIX_FMT_IPU3_SRGGB10 != v4l2_fourcc('i', 'p', '3', 'r')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_IPU3_SRGGB10 v4l2_fourcc('i', 'p', '3', 'r')
 #endif
-#if !(defined(V4L2_PIX_FMT_Y16_BE) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y16_BE) && HAVE_DECL_V4L2_PIX_FMT_Y16_BE))
+#if defined(V4L2_PIX_FMT_Y16_BE) || (defined(HAVE_DECL_V4L2_PIX_FMT_Y16_BE) && HAVE_DECL_V4L2_PIX_FMT_Y16_BE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_Y16_BE) == (v4l2_fourcc_be('Y', '1', '6', ' ')), "V4L2_PIX_FMT_Y16_BE != v4l2_fourcc_be('Y', '1', '6', ' ')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ')
 #endif
-#if !(defined(V4L2_PIX_FMT_ARGB555X) || (defined(HAVE_DECL_V4L2_PIX_FMT_ARGB555X) && HAVE_DECL_V4L2_PIX_FMT_ARGB555X))
+#if defined(V4L2_PIX_FMT_ARGB555X) || (defined(HAVE_DECL_V4L2_PIX_FMT_ARGB555X) && HAVE_DECL_V4L2_PIX_FMT_ARGB555X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_ARGB555X) == (v4l2_fourcc_be('A', 'R', '1', '5')), "V4L2_PIX_FMT_ARGB555X != v4l2_fourcc_be('A', 'R', '1', '5')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5')
 #endif
-#if !(defined(V4L2_PIX_FMT_XRGB555X) || (defined(HAVE_DECL_V4L2_PIX_FMT_XRGB555X) && HAVE_DECL_V4L2_PIX_FMT_XRGB555X))
+#if defined(V4L2_PIX_FMT_XRGB555X) || (defined(HAVE_DECL_V4L2_PIX_FMT_XRGB555X) && HAVE_DECL_V4L2_PIX_FMT_XRGB555X)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_PIX_FMT_XRGB555X) == (v4l2_fourcc_be('X', 'R', '1', '5')), "V4L2_PIX_FMT_XRGB555X != v4l2_fourcc_be('X', 'R', '1', '5')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5')
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_pix_fmts[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_pix_fmts[] = {
 
  XLAT(V4L2_PIX_FMT_Y10),
@@ -583,6 +1208,7 @@
  XLAT(V4L2_PIX_FMT_SGBRG12P),
  XLAT(V4L2_PIX_FMT_SRGGB12P),
  XLAT(V4L2_PIX_FMT_SGRBG12P),
+ XLAT(V4L2_PIX_FMT_HEVC),
  XLAT(V4L2_PIX_FMT_XVID),
  XLAT(V4L2_PIX_FMT_VC1_ANNEX_G),
  XLAT(V4L2_PIX_FMT_IPU3_SGRBG10),
@@ -626,4 +1252,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_pix_fmts.in b/xlat/v4l2_pix_fmts.in
index 72c6cea..c595d57 100644
--- a/xlat/v4l2_pix_fmts.in
+++ b/xlat/v4l2_pix_fmts.in
@@ -112,6 +112,7 @@
 V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
 V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
 V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
+V4L2_PIX_FMT_HEVC     v4l2_fourcc('H', 'E', 'V', 'C')
 V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
 V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
 V4L2_PIX_FMT_IPU3_SGRBG10 v4l2_fourcc('i', 'p', '3', 'G') /* IPU3 packed 10-bit GRBG bayer */
diff --git a/xlat/v4l2_sdr_fmts.h b/xlat/v4l2_sdr_fmts.h
index 3a65fc8..a026909 100644
--- a/xlat/v4l2_sdr_fmts.h
+++ b/xlat/v4l2_sdr_fmts.h
@@ -1,38 +1,76 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_sdr_fmts.in; do not edit. */
-#if !(defined(V4L2_SDR_FMT_PCU20BE) || (defined(HAVE_DECL_V4L2_SDR_FMT_PCU20BE) && HAVE_DECL_V4L2_SDR_FMT_PCU20BE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(V4L2_SDR_FMT_PCU20BE) || (defined(HAVE_DECL_V4L2_SDR_FMT_PCU20BE) && HAVE_DECL_V4L2_SDR_FMT_PCU20BE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_SDR_FMT_PCU20BE) == (v4l2_fourcc('P', 'C', '2', '0')), "V4L2_SDR_FMT_PCU20BE != v4l2_fourcc('P', 'C', '2', '0')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_SDR_FMT_PCU20BE v4l2_fourcc('P', 'C', '2', '0')
 #endif
-#if !(defined(V4L2_SDR_FMT_RU12LE) || (defined(HAVE_DECL_V4L2_SDR_FMT_RU12LE) && HAVE_DECL_V4L2_SDR_FMT_RU12LE))
+#if defined(V4L2_SDR_FMT_RU12LE) || (defined(HAVE_DECL_V4L2_SDR_FMT_RU12LE) && HAVE_DECL_V4L2_SDR_FMT_RU12LE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_SDR_FMT_RU12LE) == (v4l2_fourcc('R', 'U', '1', '2')), "V4L2_SDR_FMT_RU12LE != v4l2_fourcc('R', 'U', '1', '2')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_SDR_FMT_RU12LE v4l2_fourcc('R', 'U', '1', '2')
 #endif
-#if !(defined(V4L2_SDR_FMT_CS14LE) || (defined(HAVE_DECL_V4L2_SDR_FMT_CS14LE) && HAVE_DECL_V4L2_SDR_FMT_CS14LE))
+#if defined(V4L2_SDR_FMT_CS14LE) || (defined(HAVE_DECL_V4L2_SDR_FMT_CS14LE) && HAVE_DECL_V4L2_SDR_FMT_CS14LE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_SDR_FMT_CS14LE) == (v4l2_fourcc('C', 'S', '1', '4')), "V4L2_SDR_FMT_CS14LE != v4l2_fourcc('C', 'S', '1', '4')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_SDR_FMT_CS14LE v4l2_fourcc('C', 'S', '1', '4')
 #endif
-#if !(defined(V4L2_SDR_FMT_PCU16BE) || (defined(HAVE_DECL_V4L2_SDR_FMT_PCU16BE) && HAVE_DECL_V4L2_SDR_FMT_PCU16BE))
+#if defined(V4L2_SDR_FMT_PCU16BE) || (defined(HAVE_DECL_V4L2_SDR_FMT_PCU16BE) && HAVE_DECL_V4L2_SDR_FMT_PCU16BE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_SDR_FMT_PCU16BE) == (v4l2_fourcc('P', 'C', '1', '6')), "V4L2_SDR_FMT_PCU16BE != v4l2_fourcc('P', 'C', '1', '6')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_SDR_FMT_PCU16BE v4l2_fourcc('P', 'C', '1', '6')
 #endif
-#if !(defined(V4L2_SDR_FMT_CU16LE) || (defined(HAVE_DECL_V4L2_SDR_FMT_CU16LE) && HAVE_DECL_V4L2_SDR_FMT_CU16LE))
+#if defined(V4L2_SDR_FMT_CU16LE) || (defined(HAVE_DECL_V4L2_SDR_FMT_CU16LE) && HAVE_DECL_V4L2_SDR_FMT_CU16LE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_SDR_FMT_CU16LE) == (v4l2_fourcc('C', 'U', '1', '6')), "V4L2_SDR_FMT_CU16LE != v4l2_fourcc('C', 'U', '1', '6')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_SDR_FMT_CU16LE v4l2_fourcc('C', 'U', '1', '6')
 #endif
-#if !(defined(V4L2_SDR_FMT_CS8) || (defined(HAVE_DECL_V4L2_SDR_FMT_CS8) && HAVE_DECL_V4L2_SDR_FMT_CS8))
+#if defined(V4L2_SDR_FMT_CS8) || (defined(HAVE_DECL_V4L2_SDR_FMT_CS8) && HAVE_DECL_V4L2_SDR_FMT_CS8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_SDR_FMT_CS8) == (v4l2_fourcc('C', 'S', '0', '8')), "V4L2_SDR_FMT_CS8 != v4l2_fourcc('C', 'S', '0', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_SDR_FMT_CS8 v4l2_fourcc('C', 'S', '0', '8')
 #endif
-#if !(defined(V4L2_SDR_FMT_CU8) || (defined(HAVE_DECL_V4L2_SDR_FMT_CU8) && HAVE_DECL_V4L2_SDR_FMT_CU8))
+#if defined(V4L2_SDR_FMT_CU8) || (defined(HAVE_DECL_V4L2_SDR_FMT_CU8) && HAVE_DECL_V4L2_SDR_FMT_CU8)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_SDR_FMT_CU8) == (v4l2_fourcc('C', 'U', '0', '8')), "V4L2_SDR_FMT_CU8 != v4l2_fourcc('C', 'U', '0', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8')
 #endif
-#if !(defined(V4L2_SDR_FMT_PCU18BE) || (defined(HAVE_DECL_V4L2_SDR_FMT_PCU18BE) && HAVE_DECL_V4L2_SDR_FMT_PCU18BE))
+#if defined(V4L2_SDR_FMT_PCU18BE) || (defined(HAVE_DECL_V4L2_SDR_FMT_PCU18BE) && HAVE_DECL_V4L2_SDR_FMT_PCU18BE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((V4L2_SDR_FMT_PCU18BE) == (v4l2_fourcc('P', 'C', '1', '8')), "V4L2_SDR_FMT_PCU18BE != v4l2_fourcc('P', 'C', '1', '8')");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define V4L2_SDR_FMT_PCU18BE v4l2_fourcc('P', 'C', '1', '8')
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_sdr_fmts[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_sdr_fmts[] = {
 
  XLAT(V4L2_SDR_FMT_PCU20BE),
@@ -46,4 +84,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_sliced_flags.h b/xlat/v4l2_sliced_flags.h
index 56634ba..4435859 100644
--- a/xlat/v4l2_sliced_flags.h
+++ b/xlat/v4l2_sliced_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_sliced_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_sliced_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_sliced_flags[] = {
 #if defined(V4L2_SLICED_TELETEXT_B) || (defined(HAVE_DECL_V4L2_SLICED_TELETEXT_B) && HAVE_DECL_V4L2_SLICED_TELETEXT_B)
   XLAT(V4L2_SLICED_TELETEXT_B),
@@ -31,4 +37,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_streaming_capabilities.h b/xlat/v4l2_streaming_capabilities.h
index 839146a..479b7e2 100644
--- a/xlat/v4l2_streaming_capabilities.h
+++ b/xlat/v4l2_streaming_capabilities.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_streaming_capabilities.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_streaming_capabilities[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_streaming_capabilities[] = {
 #if defined(V4L2_CAP_TIMEPERFRAME) || (defined(HAVE_DECL_V4L2_CAP_TIMEPERFRAME) && HAVE_DECL_V4L2_CAP_TIMEPERFRAME)
   XLAT(V4L2_CAP_TIMEPERFRAME),
@@ -16,4 +22,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_tuner_audmodes.h b/xlat/v4l2_tuner_audmodes.h
index 916b589..22f4b02 100644
--- a/xlat/v4l2_tuner_audmodes.h
+++ b/xlat/v4l2_tuner_audmodes.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_tuner_audmodes.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_tuner_audmodes[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_tuner_audmodes[] = {
 #if defined(V4L2_TUNER_MODE_MONO) || (defined(HAVE_DECL_V4L2_TUNER_MODE_MONO) && HAVE_DECL_V4L2_TUNER_MODE_MONO)
   XLAT(V4L2_TUNER_MODE_MONO),
@@ -31,4 +37,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_tuner_capabilities.h b/xlat/v4l2_tuner_capabilities.h
index f900179..2471bd1 100644
--- a/xlat/v4l2_tuner_capabilities.h
+++ b/xlat/v4l2_tuner_capabilities.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_tuner_capabilities.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_tuner_capabilities[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_tuner_capabilities[] = {
 #if defined(V4L2_TUNER_CAP_LOW) || (defined(HAVE_DECL_V4L2_TUNER_CAP_LOW) && HAVE_DECL_V4L2_TUNER_CAP_LOW)
   XLAT(V4L2_TUNER_CAP_LOW),
@@ -55,4 +61,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_tuner_rxsubchanses.h b/xlat/v4l2_tuner_rxsubchanses.h
index 5213498..5be8780 100644
--- a/xlat/v4l2_tuner_rxsubchanses.h
+++ b/xlat/v4l2_tuner_rxsubchanses.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_tuner_rxsubchanses.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_tuner_rxsubchanses[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_tuner_rxsubchanses[] = {
 #if defined(V4L2_TUNER_SUB_MONO) || (defined(HAVE_DECL_V4L2_TUNER_SUB_MONO) && HAVE_DECL_V4L2_TUNER_SUB_MONO)
   XLAT(V4L2_TUNER_SUB_MONO),
@@ -31,4 +37,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_tuner_types.h b/xlat/v4l2_tuner_types.h
index 67f12e5..73f6689 100644
--- a/xlat/v4l2_tuner_types.h
+++ b/xlat/v4l2_tuner_types.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_tuner_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_tuner_types[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_tuner_types[] = {
 #if defined(V4L2_TUNER_RADIO) || (defined(HAVE_DECL_V4L2_TUNER_RADIO) && HAVE_DECL_V4L2_TUNER_RADIO)
   XLAT(V4L2_TUNER_RADIO),
@@ -31,4 +37,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/v4l2_vbi_flags.h b/xlat/v4l2_vbi_flags.h
index 7924d3e..bba758d 100644
--- a/xlat/v4l2_vbi_flags.h
+++ b/xlat/v4l2_vbi_flags.h
@@ -1,14 +1,20 @@
 /* Generated by ./xlat/gen.sh from ./xlat/v4l2_vbi_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
 
 extern const struct xlat v4l2_vbi_flags[];
 
-#else
+# else
 
-# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
+#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 static
-# endif
+#  endif
 const struct xlat v4l2_vbi_flags[] = {
 #if defined(V4L2_VBI_UNSYNC) || (defined(HAVE_DECL_V4L2_VBI_UNSYNC) && HAVE_DECL_V4L2_VBI_UNSYNC)
   XLAT(V4L2_VBI_UNSYNC),
@@ -31,4 +37,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/wait4_options.h b/xlat/wait4_options.h
index 4960200..2e288b5 100644
--- a/xlat/wait4_options.h
+++ b/xlat/wait4_options.h
@@ -1,21 +1,39 @@
 /* Generated by ./xlat/gen.sh from ./xlat/wait4_options.in; do not edit. */
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
 #ifndef WSTOPPED
 #endif
-#if !(defined(__WCLONE) || (defined(HAVE_DECL___WCLONE) && HAVE_DECL___WCLONE))
+#if defined(__WCLONE) || (defined(HAVE_DECL___WCLONE) && HAVE_DECL___WCLONE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((__WCLONE) == (0x80000000), "__WCLONE != 0x80000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define __WCLONE 0x80000000
 #endif
-#if !(defined(__WALL) || (defined(HAVE_DECL___WALL) && HAVE_DECL___WALL))
+#if defined(__WALL) || (defined(HAVE_DECL___WALL) && HAVE_DECL___WALL)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((__WALL) == (0x40000000), "__WALL != 0x40000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define __WALL 0x40000000
 #endif
-#if !(defined(__WNOTHREAD) || (defined(HAVE_DECL___WNOTHREAD) && HAVE_DECL___WNOTHREAD))
+#if defined(__WNOTHREAD) || (defined(HAVE_DECL___WNOTHREAD) && HAVE_DECL___WNOTHREAD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((__WNOTHREAD) == (0x20000000), "__WNOTHREAD != 0x20000000");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define __WNOTHREAD 0x20000000
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat wait4_options in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat wait4_options in mpers mode
+
+# else
 
 static
 const struct xlat wait4_options[] = {
@@ -48,4 +66,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/waitid_types.h b/xlat/waitid_types.h
index ddee8ef..9261908 100644
--- a/xlat/waitid_types.h
+++ b/xlat/waitid_types.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/waitid_types.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat waitid_types in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat waitid_types in mpers mode
+
+# else
 
 static
 const struct xlat waitid_types[] = {
@@ -38,4 +44,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/whence_codes.h b/xlat/whence_codes.h
index aa3f862..a97a345 100644
--- a/xlat/whence_codes.h
+++ b/xlat/whence_codes.h
@@ -1,6 +1,12 @@
 /* Generated by ./xlat/gen.sh from ./xlat/whence_codes.in; do not edit. */
 
-#ifndef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+
+#ifndef XLAT_MACROS_ONLY
+
+# ifndef IN_MPERS
 
 const struct xlat whence_codes[] = {
 #if defined(SEEK_SET) || (defined(HAVE_DECL_SEEK_SET) && HAVE_DECL_SEEK_SET)
@@ -21,4 +27,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/xattrflags.h b/xlat/xattrflags.h
index 36adfd0..57bc1d2 100644
--- a/xlat/xattrflags.h
+++ b/xlat/xattrflags.h
@@ -1,16 +1,30 @@
 /* Generated by ./xlat/gen.sh from ./xlat/xattrflags.in; do not edit. */
-#if !(defined(XATTR_CREATE) || (defined(HAVE_DECL_XATTR_CREATE) && HAVE_DECL_XATTR_CREATE))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(XATTR_CREATE) || (defined(HAVE_DECL_XATTR_CREATE) && HAVE_DECL_XATTR_CREATE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XATTR_CREATE) == (1), "XATTR_CREATE != 1");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XATTR_CREATE 1
 #endif
-#if !(defined(XATTR_REPLACE) || (defined(HAVE_DECL_XATTR_REPLACE) && HAVE_DECL_XATTR_REPLACE))
+#if defined(XATTR_REPLACE) || (defined(HAVE_DECL_XATTR_REPLACE) && HAVE_DECL_XATTR_REPLACE)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XATTR_REPLACE) == (2), "XATTR_REPLACE != 2");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XATTR_REPLACE 2
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat xattrflags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat xattrflags in mpers mode
+
+# else
 
 static
 const struct xlat xattrflags[] = {
@@ -19,4 +33,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/xdp_flags.h b/xlat/xdp_flags.h
index 2ebe172..d1e9613 100644
--- a/xlat/xdp_flags.h
+++ b/xlat/xdp_flags.h
@@ -1,10 +1,16 @@
 /* Generated by ./xlat/gen.sh from ./xlat/xdp_flags.in; do not edit. */
 
-#ifdef IN_MPERS
+#include "gcc_compat.h"
+#include "static_assert.h"
 
-# error static const struct xlat xdp_flags in mpers mode
 
-#else
+#ifndef XLAT_MACROS_ONLY
+
+# ifdef IN_MPERS
+
+#  error static const struct xlat xdp_flags in mpers mode
+
+# else
 
 static
 const struct xlat xdp_flags[] = {
@@ -26,4 +32,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/xfs_dqblk_flags.h b/xlat/xfs_dqblk_flags.h
index b0a9184..2b2e874 100644
--- a/xlat/xfs_dqblk_flags.h
+++ b/xlat/xfs_dqblk_flags.h
@@ -1,19 +1,37 @@
 /* Generated by ./xlat/gen.sh from ./xlat/xfs_dqblk_flags.in; do not edit. */
-#if !(defined(XFS_USER_QUOTA) || (defined(HAVE_DECL_XFS_USER_QUOTA) && HAVE_DECL_XFS_USER_QUOTA))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(XFS_USER_QUOTA) || (defined(HAVE_DECL_XFS_USER_QUOTA) && HAVE_DECL_XFS_USER_QUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFS_USER_QUOTA) == ((1<<0)), "XFS_USER_QUOTA != (1<<0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFS_USER_QUOTA (1<<0)
 #endif
-#if !(defined(XFS_PROJ_QUOTA) || (defined(HAVE_DECL_XFS_PROJ_QUOTA) && HAVE_DECL_XFS_PROJ_QUOTA))
+#if defined(XFS_PROJ_QUOTA) || (defined(HAVE_DECL_XFS_PROJ_QUOTA) && HAVE_DECL_XFS_PROJ_QUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFS_PROJ_QUOTA) == ((1<<1)), "XFS_PROJ_QUOTA != (1<<1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFS_PROJ_QUOTA (1<<1)
 #endif
-#if !(defined(XFS_GROUP_QUOTA) || (defined(HAVE_DECL_XFS_GROUP_QUOTA) && HAVE_DECL_XFS_GROUP_QUOTA))
+#if defined(XFS_GROUP_QUOTA) || (defined(HAVE_DECL_XFS_GROUP_QUOTA) && HAVE_DECL_XFS_GROUP_QUOTA)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFS_GROUP_QUOTA) == ((1<<2)), "XFS_GROUP_QUOTA != (1<<2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFS_GROUP_QUOTA (1<<2)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat xfs_dqblk_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat xfs_dqblk_flags in mpers mode
+
+# else
 
 static
 const struct xlat xfs_dqblk_flags[] = {
@@ -23,4 +41,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */
diff --git a/xlat/xfs_quota_flags.h b/xlat/xfs_quota_flags.h
index f635b96..96f0aab 100644
--- a/xlat/xfs_quota_flags.h
+++ b/xlat/xfs_quota_flags.h
@@ -1,28 +1,58 @@
 /* Generated by ./xlat/gen.sh from ./xlat/xfs_quota_flags.in; do not edit. */
-#if !(defined(XFS_QUOTA_UDQ_ACCT) || (defined(HAVE_DECL_XFS_QUOTA_UDQ_ACCT) && HAVE_DECL_XFS_QUOTA_UDQ_ACCT))
+
+#include "gcc_compat.h"
+#include "static_assert.h"
+
+#if defined(XFS_QUOTA_UDQ_ACCT) || (defined(HAVE_DECL_XFS_QUOTA_UDQ_ACCT) && HAVE_DECL_XFS_QUOTA_UDQ_ACCT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFS_QUOTA_UDQ_ACCT) == ((1<<0)), "XFS_QUOTA_UDQ_ACCT != (1<<0)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFS_QUOTA_UDQ_ACCT (1<<0)
 #endif
-#if !(defined(XFS_QUOTA_UDQ_ENFD) || (defined(HAVE_DECL_XFS_QUOTA_UDQ_ENFD) && HAVE_DECL_XFS_QUOTA_UDQ_ENFD))
+#if defined(XFS_QUOTA_UDQ_ENFD) || (defined(HAVE_DECL_XFS_QUOTA_UDQ_ENFD) && HAVE_DECL_XFS_QUOTA_UDQ_ENFD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFS_QUOTA_UDQ_ENFD) == ((1<<1)), "XFS_QUOTA_UDQ_ENFD != (1<<1)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFS_QUOTA_UDQ_ENFD (1<<1)
 #endif
-#if !(defined(XFS_QUOTA_GDQ_ACCT) || (defined(HAVE_DECL_XFS_QUOTA_GDQ_ACCT) && HAVE_DECL_XFS_QUOTA_GDQ_ACCT))
+#if defined(XFS_QUOTA_GDQ_ACCT) || (defined(HAVE_DECL_XFS_QUOTA_GDQ_ACCT) && HAVE_DECL_XFS_QUOTA_GDQ_ACCT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFS_QUOTA_GDQ_ACCT) == ((1<<2)), "XFS_QUOTA_GDQ_ACCT != (1<<2)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFS_QUOTA_GDQ_ACCT (1<<2)
 #endif
-#if !(defined(XFS_QUOTA_GDQ_ENFD) || (defined(HAVE_DECL_XFS_QUOTA_GDQ_ENFD) && HAVE_DECL_XFS_QUOTA_GDQ_ENFD))
+#if defined(XFS_QUOTA_GDQ_ENFD) || (defined(HAVE_DECL_XFS_QUOTA_GDQ_ENFD) && HAVE_DECL_XFS_QUOTA_GDQ_ENFD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFS_QUOTA_GDQ_ENFD) == ((1<<3)), "XFS_QUOTA_GDQ_ENFD != (1<<3)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFS_QUOTA_GDQ_ENFD (1<<3)
 #endif
-#if !(defined(XFS_QUOTA_PDQ_ACCT) || (defined(HAVE_DECL_XFS_QUOTA_PDQ_ACCT) && HAVE_DECL_XFS_QUOTA_PDQ_ACCT))
+#if defined(XFS_QUOTA_PDQ_ACCT) || (defined(HAVE_DECL_XFS_QUOTA_PDQ_ACCT) && HAVE_DECL_XFS_QUOTA_PDQ_ACCT)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFS_QUOTA_PDQ_ACCT) == ((1<<4)), "XFS_QUOTA_PDQ_ACCT != (1<<4)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFS_QUOTA_PDQ_ACCT (1<<4)
 #endif
-#if !(defined(XFS_QUOTA_PDQ_ENFD) || (defined(HAVE_DECL_XFS_QUOTA_PDQ_ENFD) && HAVE_DECL_XFS_QUOTA_PDQ_ENFD))
+#if defined(XFS_QUOTA_PDQ_ENFD) || (defined(HAVE_DECL_XFS_QUOTA_PDQ_ENFD) && HAVE_DECL_XFS_QUOTA_PDQ_ENFD)
+DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
+static_assert((XFS_QUOTA_PDQ_ENFD) == ((1<<5)), "XFS_QUOTA_PDQ_ENFD != (1<<5)");
+DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
+#else
 # define XFS_QUOTA_PDQ_ENFD (1<<5)
 #endif
 
-#ifdef IN_MPERS
+#ifndef XLAT_MACROS_ONLY
 
-# error static const struct xlat xfs_quota_flags in mpers mode
+# ifdef IN_MPERS
 
-#else
+#  error static const struct xlat xfs_quota_flags in mpers mode
+
+# else
 
 static
 const struct xlat xfs_quota_flags[] = {
@@ -35,4 +65,6 @@
  XLAT_END
 };
 
-#endif /* !IN_MPERS */
+# endif /* !IN_MPERS */
+
+#endif /* !XLAT_MACROS_ONLY */