Snap for 4459973 from c3d5666b1d90abd892656852567bf3b5fb63ab29 to pi-release

Change-Id: I2feffda6bcf2dd09ab1b7167d7c0b2986424bc47
diff --git a/CREDITS b/CREDITS
index ebad5e7..f2e099a 100644
--- a/CREDITS
+++ b/CREDITS
@@ -15,37 +15,51 @@
 	Aaron Ucko <ucko@vax1.rockhurst.edu>
 	Abhishek Tiwari <erabhishektiwarics@gmail.com>
 	Adrien Kunysz <adrien@kunysz.be>
+	Alexey Brodkin <Alexey.Brodkin@synopsys.com>
 	Alexey Neyman <stilor@att.net>
 	Ali Polatel <alip@exherbo.org>
+	Anatoly Pugachev <matorola@gmail.com>
 	Anchit Jain <anchitjain1234@gmail.com>
 	Andi Kleen <ak@linux.intel.com>
 	Andre McCurdy <armccurdy@gmail.com>
 	Andreas Schwab <schwab@linux-m68k.org>
+	Andrew Guertin <lists@dolphinling.net>
+	Angelo Castello <angelo.castello@st.com>
 	Anton Blanchard <anton@samba.org>
 	Arkadiusz Miskiewicz <misiek@pld.org.pl>
+	Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com>
 	Aurelien Jacobs <aurel@gnuage.org>
 	Bai Weidong <baiwd@cn.fujitsu.com>
 	Bart Van Assche <bart.vanassche@sandisk.com>
+	Baruch Siach <baruch@tkos.co.il>
 	Ben Noordhuis <info@bnoordhuis.nl>
 	Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
 	Bo Kullmar <bk@kullmar.se>
+	Bryan Matsuo <bryan.matsuo@gmail.com>
+	Bryce Gibson <bryce@gibson-consulting.com.au>
 	Cai Fei <caifei@cn.fujitsu.com>
 	Carlos O'Donell <carlos@systemhalted.org>
-	Carmelo AMOROSO <carmelo.amoroso@st.com>
+	Carmelo Amoroso <carmelo.amoroso@st.com>
+	Cheolung Lee <chpie@grayhash.com>
 	Chris Dearman <chris.dearman@imgtec.com>
 	Chris Metcalf <cmetcalf@tilera.com>
 	Chris Zankel <chris@zankel.net>
+	Christian Neukirchen <chneukirchen@gmail.com>
 	Christian Svensson <blue@cmd.nu>
+	Christopher Covington <cov@codeaurora.org>
 	D.J. Barrow <djbarrow@de.ibm.com>
 	Damien Profeta <damien.profeta@amadeus.com>
-	Damir Shayhutdinov <damir@altlinux.ru>
+	Damir Shayhutdinov <damir@altlinux.org>
 	Daniel P. Berrange <berrange@redhat.com>
 	David Daney <ddaney@caviumnetworks.com>
 	David Mosberger-Tang <davidm@hpl.hp.com>
+	David Robins <dbrobins@i4031.net>
 	David S. Miller <davem@caip.rutgers.edu>
 	David Wilder <wilder@us.ibm.com>
 	David Woodhouse <dwmw2@redhat.com>
 	Denys Vlasenko <vda.linux@googlemail.com>
+	Dima Kogan <dima@secretsauce.net>
+	Dima Krasner <dima@dimakrasner.com>
 	Dmitry V. Levin <ldv@altlinux.org>
 	Douglas Mencken <dougmencken@gmail.com>
 	Dr. David Alan Gilbert <dgilbert@redhat.com>
@@ -63,6 +77,7 @@
 	Felix Janda <felix.janda@posteo.de>
 	Fernando Luis Vazquez Cao <fernando@oss.ntt.co.jp>
 	Florian Lohoff <flo@rfc822.org>
+	Fr. Br. George <george@altlinux.org>
 	Frederik Schüler <fs@debian.org>
 	Gabor Gombas <gombasg@sztaki.hu>
 	Gabriel Laskar <gabriel@lse.epita.fr>
@@ -73,6 +88,7 @@
 	Grant Edwards <grant.b.edwards@gmail.com>
 	Greg Banks <gbanks@pocketpenguins.com>
 	H.J. Lu <hongjiu.lu@intel.com>
+	Harald van Dijk <truedfx@gentoo.org>
 	Heiko Carstens <heiko.carstens@de.ibm.com>
 	Helge Deller <deller@gmx.de>
 	Henrik Storner <storner@osiris.ping.dk>
@@ -89,12 +105,17 @@
 	Jeff Mahoney <jeffm@suse.com>
 	Jian Zhen <zhenjl@gmail.com>
 	JingPiao Chen <chenjingpiao@gmail.com>
+	Jiri Slaby <jirislaby@gmail.com>
+	Joakim Bech <joakim.bech@linaro.org>
 	Joe Ilacqua <spike@world.std.com>
+	Joe Korty <joe.korty@ccur.com>
 	Johannes Stezenbach <js@sig21.net>
 	John Hughes <john@Calva.COM>
 	John Spencer <maillist-strace@barfooze.de>
-	Ju"rgen Fluk <louis@marco.de>
-	Juergen Weigert <jnweiger@immd4.informatik.uni-erlangen.de>
+	Josef T. Burger <bolo@cs.wisc.edu>
+	Joshua Neal <tinara@netpipeline.net>
+	Jürgen Fluk <louis@marco.de>
+	Jürgen Weigert <jnweiger@immd4.informatik.uni-erlangen.de>
 	Katerina Koukiou <k.koukiou@googlemail.com>
 	Keith Owens <kaos.ocs@gmail.com>
 	Keith Thompson <kst@alsys.com>
@@ -103,13 +124,15 @@
 	Kyle McMartin <kyle@mcmartin.ca>
 	Lai JiangShan <laijs@cn.fujitsu.com>
 	Lazar Trsic <Lazar.Trsic@imgtec.com>
+	Lennart Sorensen <lsorense@csclub.uwaterloo.ca>
 	Leonard N. Zubkoff <lnz@dandelion.com>
+	Li Er <phoooyb@gmail.com>
 	Linus Torvalds <Linus.Torvalds@cs.helsinki.fi>
 	Lubomir Rintel <lkundrak@v3.sk>
 	Luca Clementi <luca.clementi@gmail.com>
 	Lupe Christoph <lupe@alanya.isar.muc.de>
 	Maarten ter Huurne <maarten@treewalker.org>
-	Mark Hills <Mark.Hills@framestore.com>
+	Mark Hills <mark.hills@framestore.com>
 	Mark Wielaard <mjw@redhat.com>
 	Marty Leisner <leisner@sdsp.mc.xerox.com>
 	Masatake YAMATO <yamato@redhat.com>
@@ -118,27 +141,32 @@
 	Max Filippov <jcmvbkbc@gmail.com>
 	Maxim Shchetynin <maxim@de.ibm.com>
 	Maxin B. John <maxin.john@enea.com>
+	Md Haris Iqbal <haris.phnx@gmail.com>
+	Michael A Fetterman <mafetter@nvidia.com>
 	Michael E Chastain <mec@duracef.shout.net>
 	Michael Holzheu <holzheu@de.ibm.com>
 	Michael Shigorin <mike@altlinux.org>
 	Michail Litvak <mci@owl.openwall.com>
 	Michal Ludvig <mludvig@suse.cz>
+	Michal Simek <monstr@monstr.eu>
 	Mike Frysinger <vapier@gentoo.org>
 	Mike Stroyan <mike.stroyan@hp.com>
 	Mikulas Patocka <mpatocka@redhat.com>
 	Miroslav Lichvar <mlichvar@redhat.com>
 	Muttley Meen <muttley.meen@gmail.com>
-	Nahim El Atmani <naam@lse.epita.fr>
+	Nahim El Atmani <nahim+dev@naam.me>
 	Namhyung Kim <namhyung.kim@lge.com>
 	Nate Eldredge <nate@cartsys.com>
 	Nate Sammons <nate@users.sourceforge.net>
 	Neil Campbell <lists@thebatcave.org.uk>
 	Nikolay Marchuk <marchuk.nikolay.a@gmail.com>
+	Orion Poplawski <orion@cora.nwra.com>
 	Paolo Bonzini <pbonzini@redhat.com>
-	Patrik Jakobsson <patrik.jakobsson@linux.intel.com>
+	Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
 	Paul Mundt <lethal@linux-sh.org>
 	Pavel Machek <pavel@ucw.cz>
 	Peter Jones <pjones@redhat.com>
+	Peter Zotov <whitequark@whitequark.org>
 	Philippe De Muyter <phdm@macqel.be>
 	Philippe Ombredanne <pombredanne@nexb.com>
 	Pádraig Brady <P@draigBrady.com>
@@ -151,7 +179,9 @@
 	Richard Henderson <richard@twiddle.tamu.edu>
 	Richard Hirst <rhirst@linuxcare.com>
 	Richard W.M. Jones <rjones@redhat.com>
+	Rick Jones <rick.jones2@hp.com>
 	Rishi Bhatt <bhatt.rishi062@gmail.com>
+	Robin Hack <hack.robin@gmail.com>
 	Roland Borde <bo@uebemc.siemens.de>
 	Roland McGrath <roland@redhat.com>
 	Romain Naour <romain.naour@smile.fr>
@@ -162,13 +192,15 @@
 	Sebastian Pipping <sebastian@pipping.org>
 	Seraphime Kirkovski <kirkseraph@gmail.com>
 	Sergei Trofimovich <slyfox@gentoo.org>
+	Sergey Bolshakov <sbolshakov@altlinux.org>
 	Simon Murray <simon@transitive.com>
 	Solar Designer <solar@openwall.com>
 	Srinivasa Ds <srinivasa@in.ibm.com>
 	Stanislav Brabec <sbrabec@suse.cz>
 	Stefan Sørensen <stefan.sorensen@spectralink.com>
 	Steve Bennett <steveb@workware.net.au>
-	Steve McIntyre <steve.mcintyre@linaro.org>
+	Steve McIntyre <steve@einval.com>
+	Steven Honeyman <stevenhoneyman@gmail.com>
 	Szabolcs Nagy <nsz@port70.net>
 	Thanh Ma <tma@encore.com>
 	Thiemo Seufer <ths@networkno.de>
@@ -184,10 +216,12 @@
 	Victor Krapivensky <krapivenskiy.va@phystech.edu>
 	Vineet Gupta <Vineet.Gupta1@synopsys.com>
 	Wang Chao <wang.chao@cn.fujitsu.com>
+	Weichuan Yan <wchyan@marvell.com>
 	Wichert Akkerman <wichert@deephackmode.org>
-	William Manley <william.manley@youview.com>
+	William Manley <will@williammanley.net>
 	Xiaoning Ding <dingxn@gmail.com>
 	Yang Zhiguo <yzgcsu@cn.fujitsu.com>
+	Yun-Chih Chen <b03902074@ntu.edu.tw>
 	Zach Brown <zach.brown@oracle.com>
 	Zev Weiss <zev@bewilderbeest.net>
 	Zhang Le <zhilg@users.sourceforge.net>
diff --git a/ChangeLog b/ChangeLog
index b649b2e..988b70b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,786 @@
+2017-11-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Prepare for 4.20 release.
+	* NEWS: Update for 4.20 release.
+
+	CREDITS.in: remove entries listed by maint/gen-contributors-list.sh.
+
+2017-11-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	Makefile.am: use gen-contributors-list.sh for CREDITS.
+	* Makefile.am ($(srcdir)/CREDITS): Employ maint/gen-contributors-list.sh
+	for the contributor list generation.
+
+2017-11-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	maint: make gen-contributors-list.sh suitable for generation of CREDITS.
+	Implement various features in order to make it suitable for the
+	generation of the CREDITS file:
+	- add an option for including contributor e-mail;
+	- add an option to read additional list of contributors from stdin;
+	- add shorthand for referring to the initial commit of the branch;
+	- document all of the above in a help message.
+
+	* maint/gen-contributors-list.sh (print_help): New function.
+	(script): Rename to SCRIPT.
+	(SCRIPT_NORM_EMAILS, MATCH_OUT, OUT_EMAILS, OUT_NO_EMAILS, read_stdin,
+	include_email): New variables.
+	Add parsing of options, rewrite input processing.
+
+2017-11-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	.mailmap: add more entries to avoid duplication in CREDITS.
+
+	.mailmap: sort entries.
+
+2017-11-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	.mailmap: more deduplication.
+	Of course there are no two persons in the whole world that share
+	the same name.
+
+2017-11-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	CREDITS.in: use UTF-8 consistently.
+	In particular, do not use " symbols in names.
+
+2017-11-13  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	CREDITS.in: add Jiri Slaby as a contributor.
+	Unfortunately, he wasn't mentioned in the message of the commit
+	v4.19-68-g48cb633, so let's fix that omission.
+
+	References: https://github.com/strace/strace/pull/16
+
+2017-11-13  Gleb Fotengauer-Malinovskiy  <glebfm@altlinux.org>
+
+	s390, s390x: update ioctl entries from linux 4.14.
+	* linux/s390/ioctls_arch0.h: Update from linux v4.14 using ioctls_gen.sh.
+	* linux/s390x/ioctls_arch0.h: Likewise.
+
+	s390x: remove some of non-s390 KVM ioctls.
+	* linux/s390x/ioctls_arch0.h: Regenerate.
+
+	maint: remove KVM_PPC_CONFIGURE_V3_MMU ioctl from non-powerpc arches.
+	* maint/ioctls_sym.sh (ppc_list): Update.
+
+2017-11-12  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update copyright headers.
+	Headers updated semi-automatically using
+	maint/update_copyright_years.sh script.
+
+	* m4/mpers.m4: Update copyright years.
+	* tests/kcmp.c: Likewise.
+	* tests/membarrier.c: Likewise.
+
+2017-11-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+	maint/update_copyright_years.sh: fix typo in help output.
+	* maint/update_copyright_years.sh (print_help): Fix typo, disable
+	here-document expansion.
+
+2017-11-10  Eugene Syromiatnikov  <esyr@redhat.com>
+
+	Move MIN, MAX, and CLAMP to macros.h.
+	We shouldn't have to include the whole defs.h to get them.
+
+	* defs.h (MIN, MAX, CLAMP): Move ...
+	* macros.h: ... here.
+
+2017-11-10  Eugene Syromiatnikov  <esyr@redhat.com>
+
+	Update .mailmap.
+	* .mailmap (Eugene Syromyatnikov): Add work address.
+
+2017-11-07  Steve McIntyre  <steve@einval.com>
+
+	debian: update debhelper compat level to 10, replace -s with -a in some calls
+
+	debian: update Standards-Version to 3.9.8.
+
+2017-11-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	mpers.m4: check for size of long and kernel_long_t.
+	The primary purpose of this new check is diagnostics.
+
+	* m4/mpers.m4 (st_MPERS): Check for size of long and kernel_long_t.
+
+2017-11-06  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	xlat/gen.sh: speedup xlat generation.
+	This commit implements the following changes:
+	- increases the number of concurrent jobs to twice the CPU count;
+	- creates a circular buffer, so instead of running multiple jobs
+	  at once, the generator tries to keep about the same number of jobs
+	  being run concurrently;
+	- runs gen_git and gen_make concurrently in order to squeeze in
+	  one more bit of concurrency.
+
+	With my deeply scientific measurements, this approach achieves
+	up to 15% speedup with dash and about 30-40% with bash as /bin/sh
+	on a 4-core machine.
+
+	* xlat/gen.sh (main): Declare pids local variable, append pid of every
+	run job to it; increase the limit of jobs to ncpus * 2; when the limit
+	is reached, wait for the first pid in pids instead of resetting jobs
+	to zero and waiting for all the run jobs; put gen_git and gen_make
+	into background.
+
+2017-11-05  Dmitry V. Levin  <ldv@altlinux.org>
+
+	hppa: wire up statx syscall.
+	* linux/hppa/syscallent.h [349]: Add statx entry.
+
+2017-11-04  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: check signal mask transparency.
+	Starting with commit v4.17-5-gf83b49b strace is expected
+	to forward the signal mask to tracees unchanged.
+
+	* tests/check_sigblock.c: New file.
+	* tests/set_sigblock.c: Likewise.
+	* tests/sigblock.test: New test.
+	* tests/.gitignore: Add check_sigblock and set_sigblock.
+	* tests/Makefile.am (check_PROGRAMS): Likewise.
+	(MISC_TESTS): Add sigblock.test.
+
+2017-11-03  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: check signal disposition transparency.
+	Starting with commit v4.17-8-ge97a66f strace is expected
+	to forward the signal disposition to tracees unchanged.
+
+	* tests/check_sigign.c: New file.
+	* tests/list_sigaction_signum.c: Likewise.
+	* tests/set_sigign.c: Likewise.
+	* tests/sigign.test: New test.
+	* tests/.gitignore: Add check_sigign, list_sigaction_signum,
+	and set_sigign.
+	* tests/Makefile.am (check_PROGRAMS): Likewise.
+	(MISC_TESTS): Add sigign.test.
+
+2017-11-03  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: update futex test to accommodate the recent kernel change.
+	Kernel commit v4.14-rc1~162^2~8 refactored futex implementation and
+	introduced checks for invalid shift sizes.  Accommodate this change
+	by allowing EINVAL in the corresponding futex checks.
+
+	* tests/futex.c (CHECK_FUTEX_GENERIC): Reset errno before the syscall.
+	(main) <wake_ops>: Add err2 field, describe err/err2 fields.
+	Add EINVAL as a possible errno to the checks that contain invalid
+	shift values.
+	Update return value check so it checks that values are strictly
+	as expected.
+
+	Closes: https://github.com/strace/strace/pull/16
+
+2017-11-03  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: cleanup futex test.
+	* tests/futex.c (main) <wake_ops>: Remove unused errstr field
+	from the structure type definition.
+
+2017-11-02  Dmitry V. Levin  <ldv@altlinux.org>
+
+	seccomp: decode SECCOMP_GET_ACTION_AVAIL operation.
+	* defs.h (seccomp_ret_action): New xlat prototype.
+	* seccomp.c (decode_seccomp_set_mode_strict): Remove.
+	(SYS_FUNC(seccomp)): Decode SECCOMP_GET_ACTION_AVAIL operation.
+	* NEWS: Mention this.
+	* tests/seccomp_get_action_avail.c: New file.
+	* tests/gen_tests.in (seccomp_get_action_avail): New entry.
+	* tests/pure_executables.list: Add seccomp_get_action_avail.
+	* tests/.gitignore: Likewise.
+
+2017-11-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Add SECCOMP_RET_KILL_PROCESS decoding support.
+	* bpf_seccomp_filter.c [!SECCOMP_RET_ACTION]: Remove.
+	[!SECCOMP_RET_ACTION_FULL] (SECCOMP_RET_ACTION_FULL): Define.
+	(print_seccomp_filter_k): Use SECCOMP_RET_ACTION_FULL
+	instead of SECCOMP_RET_ACTION.
+	* xlat/seccomp_ret_action.in: Add SECCOMP_RET_KILL_PROCESS introduced
+	by linux kernel commit v4.14-rc2~15^2~3.
+
+2017-11-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Rename SECCOMP_RET_KILL to SECCOMP_RET_KILL_THREAD.
+	Follow linux kernel commit v4.14-rc2~15^2~4 and rename SECCOMP_RET_KILL
+	to SECCOMP_RET_KILL_THREAD.
+
+	* xlat/seccomp_ret_action.in (SECCOMP_RET_KILL): Rename
+	to SECCOMP_RET_KILL_THREAD.
+	* tests/prctl-seccomp-filter-v.c (main): Update expected output.
+	* tests/seccomp-filter-v.c (main): Likewise.
+
+2017-11-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update SECCOMP_* constants.
+	* xlat/seccomp_filter_flags.in: Add SECCOMP_FILTER_FLAG_LOG introduced
+	by kernel commit v4.14-rc2~15^2~6.
+	* xlat/seccomp_ops.in: Add SECCOMP_GET_ACTION_AVAIL introduced
+	by kernel commit v4.14-rc2~15^2~9.
+	* xlat/seccomp_ret_action.in: Add SECCOMP_RET_LOG introduced
+	by kernel commit v4.14-rc2~15^2~5.
+	* NEWS: Mention this.
+	* tests/seccomp-filter.c (main): Update expected output.
+	* tests/seccomp-filter-v.c (main): Likewise.
+
+	Provide fallback definitions for SECCOMP_RET_* constants.
+	* xlat/seccomp_ret_action.in: Add fallback definitions.
+
+2017-11-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	tests: robustify options-syntax.test against inquisitive musl.
+	Workaround musl >= 1.1.17 ability to use AT_EXECFN during
+	program_invocation_name initialization.
+
+	* tests/options-syntax.test: Check for two valid variants
+	of "zeroargc strace" expected output.
+
+2017-11-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update MEMBARRIER_CMD_* constants.
+	* xlat/membarrier_cmds.in: Add MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED
+	introduced by kernel commit v4.14-rc6~26.
+	* tests/membarrier.c (main): Update expected output.
+
+2017-10-31  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NFNL_SUBSYS_NFT_COMPAT netlink message flags.
+	* tests/nfnetlink_nft_compat.c (test_nlmsg_flags): New function.
+	(main): Use it.
+
+	tests: check decoding of NFNL_SUBSYS_NFTABLES netlink message flags.
+	* tests/nfnetlink_nftables.c (test_nlmsg_flags): New function.
+	(main): Use it.
+
+	tests: check decoding of NFNL_SUBSYS_CTHELPER netlink message flags.
+	* tests/nfnetlink_cthelper.c (test_nlmsg_flags): New function.
+	(main): Use it.
+
+	tests: check decoding of NFNL_SUBSYS_CTNETLINK_TIMEOUT netlink message flags
+	* tests/nfnetlink_cttimeout.c (test_nlmsg_flags): New function.
+	(main): Use it.
+
+	tests: check decoding of NFNL_SUBSYS_ACCT netlink message flags.
+	* tests/nfnetlink_acct.c (test_nlmsg_flags): New function.
+	(main): Use it.
+
+	tests: check decoding of NFNL_SUBSYS_CTNETLINK_EXP netlink message flags
+	* tests/nfnetlink_ctnetlink_exp.c (test_nlmsg_flags): New function.
+	(main): Use it.
+
+	tests: check decoding of NFNL_SUBSYS_CTNETLINK netlink message flags.
+	* tests/nfnetlink_ctnetlink.c (test_nlmsg_flags): New function.
+	(main): Use it.
+
+2017-10-26  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink: decode NETLINK_NETFILTER netlink message flags.
+	* netlink.c (decode_nlmsg_flags_netfilter): New function.
+	(nlmsg_flags): Add NETLINK_NETFILTER.
+	* NEWS: Mention this.
+
+	netlink: decode netlink message delete flags.
+	* netlink.c: Include "xlat/netlink_delete_flags.h".
+	(decode_nlmsg_flags_crypto, decode_nlmsg_flags_route,
+	decode_nlmsg_flags_xfrm): Decode delete flags.
+	* netlink.h (NLM_F_NONREC): New macro.
+	* xlat/netlink_delete_flags.in: New file.
+	* tests/netlink_crypto.c (test_nlmsg_flags): Check this.
+	* tests/netlink_route.c (test_nlmsg_flags): Likewise.
+	* tests/netlink_xfrm.c (test_nlmsg_flags): Likewise.
+
+2017-10-26  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	netlink: refactor decode_nlmsg_flags.
+	Refactor decode_nlmsg_flags to make it family-specific, just like
+	decode_nlmsg_type and decode_payload.
+
+	* netlink.c (decode_nlmsg_flags_crypto, decode_nlmsg_flags_route,
+	decode_nlmsg_flags_sock_diag, decode_nlmsg_flags_xfrm): New functions.
+	(nlmsg_flags_decoder_t): New typedef.
+	(nlmsg_flags): New array.
+	(decode_nlmsg_flags): Use it.
+
+2017-10-14  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	Workaround historic linux/netfilter/xt_osf.h deficiencies.
+	When using linux kernel headers without commit v4.5-rc1~128^2~115^2~22
+	("netfilter: fix include files for compilation"), both <linux/ip.h>
+	and <linux/tcp.h> have to be included before <linux/netfilter/xt_osf.h>.
+
+	* configure.ac (AC_CHECK_HEADERS): Include <linux/ip.h>
+	and <linux/tcp.h> when checking for linux/netfilter/xt_osf.h header.
+	* tests/nfnetlink_osf.c: Include <linux/ip.h> and <linux/tcp.h>
+	before <linux/netfilter/xt_osf.h>.
+
+2017-09-24  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of NFNL_SUBSYS_NFT_COMPAT netlink message types.
+	* configure.ac (AC_CHECK_HEADERS): Add
+	linux/netfilter/nf_tables_compat.h.
+	* tests/nfnetlink_nft_compat.c: New file.
+	* tests/gen_tests.in (nfnetlink_nft_compat): New entry.
+	* tests/pure_executables.list: Add nfnetlink_nft_compat.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_NFTABLES netlink message types.
+	* configure.ac (AC_CHECK_HEADERS): Add linux/netfilter/nf_tables.h.
+	* tests/nfnetlink_nftables.c: New file.
+	* tests/gen_tests.in (nfnetlink_nftables): New entry.
+	* tests/pure_executables.list: Add nfnetlink_nftables.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_CTHELPER netlink message types.
+	* configure.ac (AC_CHECK_HEADERS): Add
+	linux/netfilter/nfnetlink_cthelper.h.
+	* tests/nfnetlink_cthelper.c: New file.
+	* tests/gen_tests.in (nfnetlink_cthelper): New entry.
+	* tests/pure_executables.list: Add nfnetlink_cthelper.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_CTNETLINK_TIMEOUT netlink message types
+	* configure.ac (AC_CHECK_HEADERS): Add
+	linux/netfilter/nfnetlink_cttimeout.h.
+	* tests/nfnetlink_cttimeout.c: New file.
+	* tests/gen_tests.in (nfnetlink_cttimeout): New entry.
+	* tests/pure_executables.list: Add nfnetlink_cttimeout.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_ACCT netlink message types.
+	* configure.ac (AC_CHECK_HEADERS): Add
+	linux/netfilter/nfnetlink_acct.h.
+	* tests/nfnetlink_acct.c: New file.
+	* tests/gen_tests.in (nfnetlink_acct): New entry.
+	* tests/pure_executables.list: Add nfnetlink_acct.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_IPSET netlink message types.
+	* configure.ac (AC_CHECK_HEADERS): Add linux/netfilter/ipset/ip_set.h.
+	* tests/nfnetlink_ipset.c: New file.
+	* tests/gen_tests.in (nfnetlink_ipset): New entry.
+	* tests/pure_executables.list: Add nfnetlink_ipset.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_OSF netlink message types.
+	* configure.ac (AC_CHECK_HEADERS): Add linux/netfilter/xt_osf.h.
+	* tests/nfnetlink_osf.c: New file.
+	* tests/gen_tests.in (nfnetlink_osf): New entry.
+	* tests/pure_executables.list: Add nfnetlink_osf.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_ULOG netlink message types.
+	* configure.ac (AC_CHECK_HEADERS): Add
+	linux/netfilter/nfnetlink_log.h.
+	* tests/nfnetlink_ulog.c: New file.
+	* tests/gen_tests.in (nfnetlink_ulog): New entry.
+	* tests/pure_executables.list: Add nfnetlink_ulog.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_QUEUE netlink message types.
+	* configure.ac (AC_CHECK_HEADERS): Add
+	linux/netfilter/nfnetlink_queue.h.
+	* tests/nfnetlink_queue.c: New file.
+	* tests/gen_tests.in (nfnetlink_queue): New entry.
+	* tests/pure_executables.list: Add nfnetlink_queue.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_CTNETLINK_EXP netlink message types
+	* tests/nfnetlink_ctnetlink_exp.c: New file.
+	* tests/gen_tests.in (nfnetlink_ctnetlink_exp): New entry.
+	* tests/pure_executables.list: Add nfnetlink_ctnetlink_exp.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of NFNL_SUBSYS_CTNETLINK netlink message types.
+	* configure.ac (AC_CHECK_HEADERS): Add
+	linux/netfilter/nfnetlink_conntrack.h.
+	* tests/nfnetlink_ctnetlink.c: New file.
+	* tests/gen_tests.in (nfnetlink_ctnetlink): New entry.
+	* tests/pure_executables.list: Add nfnetlink_ctnetlink.
+	* tests/.gitignore: Likewise.
+
+	netlink: decode NETLINK_NETFILTER netlink message types.
+	* netlink.c: Include "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", and "xlat/nf_ulog_msg_types.h".
+	(nf_nlmsg_types): New array.
+	(decode_nlmsg_type_netfilter): Use it.
+	* NEWS: Mention this.
+	* xlat/nf_acct_msg_types.in: New file.
+	* xlat/nf_cthelper_msg_types.in: Likewise.
+	* xlat/nf_ctnetlink_exp_msg_types.in: Likewise.
+	* xlat/nf_ctnetlink_msg_types.in: Likewise.
+	* xlat/nf_cttimeout_msg_types.in: Likewise.
+	* xlat/nf_ipset_msg_types.in: Likewise.
+	* xlat/nf_nft_compat_msg_types.in: Likewise.
+	* xlat/nf_nftables_msg_types.in: Likewise.
+	* xlat/nf_osf_msg_types.in: Likewise.
+	* xlat/nf_queue_msg_types.in: Likewise.
+	* xlat/nf_ulog_msg_types.in: Likewise.
+	* tests/netlink_netfilter.c (test_nlmsg_type): Update expected output.
+
+2017-09-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+	ppc64: fix sigreturn parser for ppc personality.
+	* linux/powerpc/arch_sigreturn.c (arch_sigreturn) [POWERPC64]: Rewrite.
+
+	ppc64: truncate syscall args for 32-bit personality tracees.
+	* linux/powerpc/get_syscall_args.c (get_syscall_args): Clear upper
+	32 bits of syscall args for 32-bit personality tracees.
+	* NEWS: Mention this fix.
+
+	ppc64: fix PRI__64 macro definition when compiled with -m32.
+	* kernel_types.h [SIZEOF_LONG != 4]: Check for __powerpc64__ instead
+	of POWERPC to handle -m32 case properly.
+
+2017-09-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	loop: decode LOOP_SET_BLOCK_SIZE.
+	* loop.c (loop_ioctl) <LOOP_SET_BLOCK_SIZE>: Handle LOOP_SET_BLOCK_SIZE.
+	* tests/ioctl_loop.c (main): Check it.
+
+	Update ioctl entries from linux v4.14-rc1.
+	* linux/32/ioctls_inc_align16.h: Update from linux v4.14-rc1
+	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.
+	* xlat/loop_cmds.in: Add LOOP_SET_BLOCK_SIZE introduced
+	by kernel commit v4.13-rc7-176-g89e4fde.
+	* NEWS: Mention this.
+	* tests/ioctl_loop.c (main): Update.
+
+2017-09-19  Gleb Fotengauer-Malinovskiy  <glebfm@altlinux.org>
+
+	maint: generate ioctl entries without target architecture code execution
+	ioctls_sym.sh used to generate and invoke target architecture
+	executables that limited its applicability.
+	After this change, the generated code is just compiled to the target
+	architecture object files and all required information is obtained
+	from the dwarf sections.
+	This approach allows to generate ioctl entries for any target
+	architecture supported by compiler.
+
+	* maint/ioctls_sym.awk: New file.
+	* maint/ioctls_sym.sh (LC_ALL): Define to C and export.
+	(uname_m): Make configurable.
+	(CFLAGS): Add -gdwarf-2.
+	(LDFLAGS): Remove.
+	Do not use print_ioctlent.c.
+	Change asm-generic/ioctl.h and asm/ioctl.h hook.
+	Dump and process dwarf sections of generated object files.
+	* maint/print_ioctlent.c: Remove.
+
+2017-09-18  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Remove KVM_S390_* ioctls from non-s390 architectures.
+	* maint/ioctls_sym.sh <linux/kvm.h> (s390_list): New variable.
+	Use it to exclude KVM_S390_* ioctls on non-s390 architectures.
+	* linux/arm/ioctls_arch0.h: Regenerate.
+	* linux/i386/ioctls_arch0.h: Likewise.
+	* linux/powerpc/ioctls_arch0.h: Likewise.
+	* linux/s390/ioctls_arch0.h: Likewise.
+	* linux/x86_64/ioctls_arch0.h: Likewise.
+
+2017-09-17  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Remove some of arch-specific KVM ioctls from non-matching architectures.
+	* maint/ioctls_sym.sh (arm_list, ppc_list, x86_list): Use bracket
+	expressions to generalize arch-specific regular expressions.
+	* linux/arm/ioctls_arch0.h: Regenerate.
+	* linux/i386/ioctls_arch0.h: Likewise.
+	* linux/powerpc/ioctls_arch0.h: Likewise.
+	* linux/s390/ioctls_arch0.h: Likewise.
+	* linux/x86_64/ioctls_arch0.h: Likewise.
+
+2017-09-17  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	dm: add support for DM_DEV_ARM_POLL.
+	Added in Linux commit v4.13-rc1~137^2~14.
+
+	* dm.c [!DM_LIST_VERSIONS] (DM_LIST_VERSIONS): Add leading zero.
+	[!DM_TARGET_MSG] (DM_TARGET_MSG): Likewise.
+	[!DM_DEV_SET_GEOMETRY_CMD] (DM_DEV_SET_GEOMETRY_CMD): Likewise.
+	[!DM_DEV_ARM_POLL] (DM_DEV_ARM_POLL): New macro.
+	(dm_ioctl_has_params, dm_ioctl): Handle DM_DEV_ARM_POLL.
+	* tests/ioctl_dm.c [!DM_DEV_ARM_POLL] (DM_DEV_ARM_POLL): New macro.
+	(main) <dummy_check_cmds>: Add DM_DEV_ARM_POLL.
+
+2017-09-17  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	kcmp: add KCMP_EPOLL_TFD support.
+	* configure.ac (AC_CHECK_TYPES): Add check for struct kcmp_epoll_slot.
+	* kcmp.c (SYS_FUNC(kcmp)) <case KCMP_EPOLL_TFD>: Implement idx1/idx2
+	argument parsing.
+	* tests/kcmp.c: Update test.
+	* xlat/kcmp_types.in (KCMP_EPOLL_TFD): New entry.
+
+2017-09-17  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests: add kcmp-y test.
+	It is not very useful as of now, but it will allow tracking changes
+	in fd output once they are implemented.
+
+	* tests/gen_tests.in (kcmp-y): New test.
+	* tests/kcmp-y.c: New file, wrapper for kcmp.c
+	* tests/kcmp.c: Add opening of some files for which info may be printed
+	in the future.
+	* tests/pure_executables.list: Add kcmp-y.
+	* tests/.gitignore: Likewise.
+
+2017-09-17  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	kcmp: output fds using a separate function.
+	This is a preparation for the future introduction of cross-NS PID
+	derivation, which would enable us to print fd information for fds
+	related to all processes, not just traced ones.
+
+	Note the change in output type for idx1/idx2 in KCMP_FILE command from
+	unsigned to int, it follows printfd output format.
+
+	* kcmp.c (printpidfd): New function.
+	(PRINT_FIELD_PIDFD): New macro.
+	(SYS_FUNC(kcmp)) <case KCMP_FILE>: Use printpidfd for printing
+	idx1/idx2, as they are fds, after all.
+
+2017-09-17  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/kcmp: add more checks.
+	Let's check all kcmp commands that they indeed do not print idx1/idx2.
+	Also, check that upper bits of pid arguments are ignored.
+
+	* tests/gen_tests.in (kcmp): Decrease -a argument's value from 27 to 22.
+	* tests/kcmp.c: Add checks for upper bits of pid1/pid2 and for all
+	kcmp types not tested before.
+
+2017-09-17  Eugene Syromyatnikov  <evgsyr@gmail.com>
+
+	tests/kcmp: use <linux/kcmp.h> if it is available.
+	I see it as a good idea to stick to system headers whenever possible
+	in order to also check for possible discrepancies between strace's
+	internal definitions and definitions present in the system headers.
+
+	* configure.ac (AC_CHECK_HEADERS): Add linux/kcmp.h.
+	* tests/kcmp.h [HAVE_LINUX_KCMP_H]: Include <linux/kcmp.h>,
+	do not define KCMP_FILE and KCMP_SYSVSEM.
+
+2017-09-17  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: check decoding of MDBA_ROUTER_PORT netlink attribute.
+	* tests/nlattr_mdba_router_port.c: New file.
+	* tests/gen_tests.in (nlattr_mdba_router_port): New entry.
+	* tests/pure_executables.list: Add nlattr_mdba_router_port.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of MDBA_MDB_ENTRY_INFO netlink attributes.
+	* tests/nlattr_mdba_mdb_entry.c: New file.
+	* tests/gen_tests.in (nlattr_mdba_mdb_entry): New entry.
+	* tests/pure_executables.list: Add nlattr_mdba_mdb_entry.
+	* tests/.gitignore: Likewise.
+
+2017-09-17  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	tests: extend TEST_NESTED_NLATTR_OBJECT macro.
+	Extend TEST_NESTED_NLATTR_OBJECT macro for multi-nested netlink
+	attributes, such as
+
+		[MDBA_MDB] = {
+			[MDBA_MDB_ENTRY] = {
+				[MDBA_MDB_ENTRY_INFO] {
+					struct br_mdb_entry
+					[MDBA_MDB_EATTR attributes]
+				}
+			}
+		}
+
+	* tests/test_nlattr.h (TEST_NESTED_NLATTR_OBJECT_EX_,
+	TEST_NESTED_NLATTR_OBJECT_EX): New macros.
+	(TEST_NESTED_NLATTR_OBJECT): Use TEST_NESTED_NLATTR_OBJECT_EX_.
+
+2017-09-17  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	rtnl_mdb: decode br_port_msg netlink attributes.
+	* configure.ac (AC_CHECK_TYPES): Check for struct br_mdb_entry
+	in <linux/if_bridge.h>.
+	(AC_CHECK_MEMBERS): Check for flags and vid fields in struct br_mdb_entry.
+	* rtnl_mdb.c: Include "xlat/mdb_flags.h", "xlat/mdb_states.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"
+	and "xlat/rtnl_mdba_router_pattr_attrs.h".
+	(decode_mdba_mdb_entry_info, decode_mdba_mdb_entry,
+	decode_mdba_mdb, decode_multicast_router_type,
+	decode_mdba_router_port, decode_mdba_router): New functions.
+	(mdba_mdb_eattr_nla_decoders, mdba_mdb_entry_nla_decoders,
+	mdba_mdb_nla_decoders, mdba_router_pattr_nla_decoders,
+	mdba_router_nla_decoders, br_port_msg_nla_decoders): New arrays.
+	(decode_br_port_msg): Use br_port_msg_nla_decoders.
+	* xlat/mdb_flags.in: New file.
+	* xlat/mdb_states.in: Likewise.
+	* xlat/multicast_router_types.in: Likewise.
+	* xlat/rtnl_mdba_mdb_attrs.in: Likewise.
+	* xlat/rtnl_mdba_mdb_eattr_attrs.in: Likewise.
+	* xlat/rtnl_mdba_mdb_entry_attrs.in: Likewise.
+	* xlat/rtnl_mdba_router_attrs.in: Likewise.
+	* xlat/rtnl_mdba_router_pattr_attrs.in: Likewise.
+
+2017-09-17  Dmitry V. Levin  <ldv@altlinux.org>
+
+	netlink: implement decoding of INET_DIAG_CLASS_ID attribute.
+	This is a new netlink attribute introduced by linux kernel commit
+	v4.14-rc1~130^2~207.
+
+	* linux/inet_diag.h (INET_DIAG_CLASS_ID): New enum.
+	* netlink_inet_diag.c (inet_diag_msg_nla_decoders): Add
+	INET_DIAG_CLASS_ID.
+	* xlat/inet_diag_attrs.in: Add INET_DIAG_CLASS_ID.
+	* xlat/inet_diag_extended_flags.in: Add 1<<(INET_DIAG_CLASS_ID-1).
+	* tests/nlattr_inet_diag_msg.c (main): Check INET_DIAG_CLASS_ID
+	decoding.
+
+2017-09-17  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update MEMBARRIER_CMD_* constants.
+	* xlat/membarrier_cmds.in: Add MEMBARRIER_CMD_PRIVATE_EXPEDITED
+	introduced by kernel commit v4.14-rc1~174^2^2^4.
+	* NEWS: Mention this.
+	* tests/membarrier.c (main): Update expected output.
+
+	Update UFFD_FEATURE_* constants.
+	* xlat/memfd_create_flags.in: Remove UFFD_FEATURE_EVENT_EXIT removed
+	by kernel commit v4.11-rc2~15^2~18.
+	Add UFFD_FEATURE_SIGBUS and UFFD_FEATURE_THREAD_ID introduced by kernel
+	commits v4.14-rc1~126^2~28 and v4.14-rc1~126^2~23, repsectively.
+	* NEWS: Mention this.
+
+	Update MFD_* constants.
+	* xlat/memfd_create_flags.in: Add MFD_HUGETLB introduced
+	by kernel commit v4.14-rc1~126^2~17.
+	* NEWS: Mention this.
+	* tests/memfd_create.c (main): Update expected output.
+
+	Update ETH_P_* constants.
+	* xlat/ethernet_protocols.in: Add ETH_P_ERSPAN, ETH_P_NSH, ETH_P_IFE,
+	and ETH_P_MAP introduced by kernel commits v4.14-rc1~130^2~164,
+	v4.14-rc1~130^2~89^2~3, v4.14-rc1~130^2~90^2~2, and
+	v4.14-rc1~130^2~78^2~2, respectively.
+	* NEWS: Mention this.
+
+	Update ARPHRD_* constants.
+	* xlat/arp_hardware_types.in: Add ARPHRD_RAWIP introduced
+	by kernel commit v4.14-rc1~130^2~78^2~1.
+	* NEWS: Mention this.
+
+	Update BPF_* constants.
+	* xlat/bpf_attach_type.in: Add BPF_SK_SKB_STREAM_PARSER
+	and BPF_SK_SKB_STREAM_VERDICT introduced by kernel commit
+	v4.14-rc1~130^2~123^2~8.
+	* xlat/bpf_map_flags.in: Add BPF_F_NO_COMMON_LRU and BPF_F_NUMA_NODE
+	introduced by kernel commits v4.10-rc1~202^2~271^2~2
+	and v4.14-rc1~130^2~196^2~1, respectively.
+	* xlat/bpf_map_types.in: Add BPF_MAP_TYPE_DEVMAP
+	and BPF_MAP_TYPE_SOCKMAP introduced by kernel commits
+	v4.14-rc1~130^2~497^2~4 and v4.14-rc1~130^2~234^2~4,
+	respectively.
+	* xlat/bpf_op_jmp.in: Add BPF_JLT, BPF_JLE, BPF_JSLT, and BPF_JSLE
+	introduced by kernel commit v4.14-rc1~130^2~309^2~8.
+	* xlat/bpf_prog_types.in: Add BPF_PROG_TYPE_SK_SKB introduced
+	by kernel commit v4.14-rc1~130^2~234^2~6.
+	* NEWS: Mention this.
+
+	Update SO_* constants.
+	* xlat/sockoptions.in: Add SO_ZEROCOPY introduced by kernel commit
+	v4.14-rc1~130^2~376^2~5.
+	* NEWS: Mention this.
+
+	Update MADV_* constants.
+	* xlat/madvise_cmds.in: Add MADV_WIPEONFORK and MADV_KEEPONFORK
+	introduced by kernel commit v4.14-rc1~126^2.
+	* NEWS: Mention this.
+
+2017-09-08  Baruch Siach  <baruch@tkos.co.il>
+
+	error_prints: fix potential program_invocation_name type conflict.
+	uClibc-ng declares program_invocation_name as const.
+	This causes the build failure below:
+
+	error_prints.c:40:14: error: conflicting types for ‘program_invocation_name’
+	 extern char *program_invocation_name;
+	              ^~~~~~~~~~~~~~~~~~~~~~~
+	In file included from error_prints.c:32:0:
+	.../output/host/x86_64-buildroot-linux-uclibc/sysroot/usr/include/errno.h:54:20: note: previous declaration of ‘program_invocation_name’ was here
+	 extern const char *program_invocation_name, *program_invocation_short_name;
+	                    ^~~~~~~~~~~~~~~~~~~~~~~
+
+	* error_prints.c (program_invocation_name): Declare only in case
+	of [!HAVE_PROGRAM_INVOCATION_NAME].
+
+2017-09-07  JingPiao Chen  <chenjingpiao@gmail.com>
+
+	rtnl_tc_action: decode tcamsg netlink attributes.
+	* rtnl_tc_action.c (tcamsg_nla_decoders): New array.
+	(decode_tcamsg): Use it.
+
+	tests: check decoding of TCA_STAB netlink attribute of tcmsg.
+	* tests/test_nlattr.h (TEST_NESTED_NLATTR_ARRAY): New macro.
+	* tests/nlattr_tca_stab.c: New file.
+	* tests/gen_tests.in (nlattr_tca_stab): New entry.
+	* tests/pure_executables.list: Add nlattr_tca_stab.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of TCA_STATS2 netlink attribute of tcmsg.
+	* tests/nlattr_tc_stats.c: New file.
+	* tests/gen_tests.in (nlattr_tc_stats): New entry.
+	* tests/pure_executables.list: Add nlattr_tc_stats.
+	* tests/.gitignore: Likewise.
+
+	tests: check decoding of tcmsg netlink attributes.
+	* tests/nlattr_tcmsg.c: Include <stddef.h> and <linux/pkt_sched.h>.
+	(main): Check decoding of TCA_STATS and TCA_RATE.
+
+	rtnl_tc: decode tcmsg netlink attributes.
+	* configure.ac (AC_CHECK_TYPES): Check for gnet_stats_basic,
+	gnet_stats_queue, gnet_stats_rate_est,
+	and gnet_stats_rate_est64 structures in <linux/gen_stats.h>.
+	And check for struct tc_sizespec in <linux/pkt_sched.h>.
+	* nlattr.h (tc_stats): New prototype.
+	* rtnl_tc.c: Include <linux/gen_stats.h>, <linux/pkt_sched.h>,
+	"xlat/rtnl_tca_stab_attrs.h" and "xlat/rtnl_tca_stats_attrs.h".
+	(decode_tc_stats, decode_tc_estimator, decode_gnet_stats_basic,
+	decode_gnet_stats_rate_est, decode_gnet_stats_queue,
+	decode_gnet_stats_rate_est64, decode_nla_tc_stats,
+	decode_tc_sizespec, print_stab_data, decode_tca_stab_data,
+	decode_tca_stab): New functions.
+	(tca_stats_nla_decoders, tca_stab_nla_decoders,
+	tcmsg_nla_decoders): New arrays.
+	(decode_tcmsg): Use tcmsg_nla_decoders.
+	* xlat/rtnl_tca_stab_attrs.in: New file.
+	* xlat/rtnl_tca_stats_attrs.in: Likewise.
+
+2017-09-07  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update TCP_* constants.
+	* xlat/socktcpoptions.in: Add TCP_ULP and TCP_MD5SIG_EXT.
+	* NEWS: Mention this.
+
+	Update SOL_* constants.
+	* xlat/socketlayers.in: Add SOL_TLS.
+	* NEWS: Mention this.
+
+2017-09-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Post-release administrivia.
+	* NEWS: Add a header line for the next release.
+	* debian/changelog.in: Add a changelog entry for 4.19-1.
+	* strace.spec.in: Likewise.
+
 2017-09-05  Dmitry V. Levin  <ldv@altlinux.org>
 
 	Prepare for 4.19 release.
diff --git a/Makefile.am b/Makefile.am
index 4aa9846..3ea56a1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1102,10 +1102,9 @@
 	(								\
 	  cd $(srcdir);							\
 	  sed '/^##/,$$d' CREDITS.in;					\
-	  { sed -n '1,/^##>/d; s/   */\t/; s/^./&/p' CREDITS.in;	\
-	    git log --pretty=format:'%aN	%aE';			\
-	  } | LC_ALL=C sort -u						\
-	    | awk -F'\t' '{printf("\t%s <%s>\n",$$1,$$2)}';		\
+	  sed -n '1,/^##>/d; s/   */\t/; s/^./&/p' CREDITS.in		\
+	    | maint/gen-contributors-list.sh - -e HEAD --initial	\
+	    | sed 's/\t/ /g; s/^/\t/'					\
 	) > $@-t && mv $@-t $@
 
 export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner --mode=go-w,go+rX
diff --git a/Makefile.in b/Makefile.in
index 4bf763a..2f14f43 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -844,7 +844,8 @@
 	xlat/keyctl_commands.in xlat/lockfcmds.in xlat/loop_cmds.in \
 	xlat/loop_crypt_type_options.in xlat/loop_flags_options.in \
 	xlat/lwtunnel_encap_types.in xlat/madvise_cmds.in \
-	xlat/mbindflags.in xlat/mctl_sync.in xlat/membarrier_cmds.in \
+	xlat/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 \
@@ -854,24 +855,31 @@
 	xlat/mtd_file_mode_options.in xlat/mtd_flags_options.in \
 	xlat/mtd_mode_options.in xlat/mtd_nandecc_options.in \
 	xlat/mtd_otp_options.in xlat/mtd_type_options.in \
-	xlat/name_to_handle_at_flags.in \
+	xlat/multicast_router_types.in xlat/name_to_handle_at_flags.in \
 	xlat/neighbor_cache_entry_flags.in \
 	xlat/neighbor_cache_entry_states.in xlat/netlink_ack_flags.in \
-	xlat/netlink_diag_attrs.in xlat/netlink_diag_show.in \
-	xlat/netlink_flags.in xlat/netlink_get_flags.in \
-	xlat/netlink_new_flags.in xlat/netlink_protocols.in \
-	xlat/netlink_socket_flags.in xlat/netlink_states.in \
-	xlat/netlink_types.in xlat/nl_audit_types.in \
-	xlat/nl_crypto_types.in xlat/nl_netfilter_msg_types.in \
-	xlat/nl_netfilter_subsys_ids.in xlat/nl_route_types.in \
-	xlat/nl_selinux_types.in xlat/nl_sock_diag_types.in \
-	xlat/nl_xfrm_types.in xlat/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/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 \
@@ -894,17 +902,22 @@
 	xlat/rtnl_ifla_info_attrs.in xlat/rtnl_ifla_port_attrs.in \
 	xlat/rtnl_ifla_vf_port_attrs.in xlat/rtnl_ifla_xdp_attrs.in \
 	xlat/rtnl_link_attrs.in xlat/rtnl_mdb_attrs.in \
-	xlat/rtnl_neigh_attrs.in xlat/rtnl_neightbl_attrs.in \
-	xlat/rtnl_neightbl_parms_attrs.in xlat/rtnl_netconf_attrs.in \
-	xlat/rtnl_nsid_attrs.in xlat/rtnl_route_attrs.in \
-	xlat/rtnl_rta_metrics_attrs.in xlat/rtnl_rule_attrs.in \
-	xlat/rtnl_tc_action_attrs.in xlat/rtnl_tc_attrs.in \
-	xlat/rwf_flags.in xlat/sa_handler_values.in \
-	xlat/sched_flags.in xlat/schedulers.in xlat/scmvals.in \
-	xlat/scsi_sg_commands.in xlat/secbits.in \
-	xlat/seccomp_filter_flags.in xlat/seccomp_mode.in \
-	xlat/seccomp_ops.in xlat/seccomp_ret_action.in \
-	xlat/semctl_flags.in xlat/semop_flags.in xlat/setns_types.in \
+	xlat/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/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 \
@@ -1022,7 +1035,8 @@
 	xlat/keyctl_commands.h xlat/lockfcmds.h xlat/loop_cmds.h \
 	xlat/loop_crypt_type_options.h xlat/loop_flags_options.h \
 	xlat/lwtunnel_encap_types.h xlat/madvise_cmds.h \
-	xlat/mbindflags.h xlat/mctl_sync.h xlat/membarrier_cmds.h \
+	xlat/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 \
@@ -1032,18 +1046,25 @@
 	xlat/mtd_file_mode_options.h xlat/mtd_flags_options.h \
 	xlat/mtd_mode_options.h xlat/mtd_nandecc_options.h \
 	xlat/mtd_otp_options.h xlat/mtd_type_options.h \
-	xlat/name_to_handle_at_flags.h \
+	xlat/multicast_router_types.h xlat/name_to_handle_at_flags.h \
 	xlat/neighbor_cache_entry_flags.h \
 	xlat/neighbor_cache_entry_states.h xlat/netlink_ack_flags.h \
-	xlat/netlink_diag_attrs.h xlat/netlink_diag_show.h \
-	xlat/netlink_flags.h xlat/netlink_get_flags.h \
-	xlat/netlink_new_flags.h xlat/netlink_protocols.h \
-	xlat/netlink_socket_flags.h xlat/netlink_states.h \
-	xlat/netlink_types.h xlat/nl_audit_types.h \
-	xlat/nl_crypto_types.h xlat/nl_netfilter_msg_types.h \
-	xlat/nl_netfilter_subsys_ids.h xlat/nl_route_types.h \
-	xlat/nl_selinux_types.h xlat/nl_sock_diag_types.h \
-	xlat/nl_xfrm_types.h xlat/nlmsgerr_attrs.h xlat/notifyflags.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 \
@@ -1071,14 +1092,18 @@
 	xlat/rtnl_ifla_info_attrs.h xlat/rtnl_ifla_port_attrs.h \
 	xlat/rtnl_ifla_vf_port_attrs.h xlat/rtnl_ifla_xdp_attrs.h \
 	xlat/rtnl_link_attrs.h xlat/rtnl_mdb_attrs.h \
-	xlat/rtnl_neigh_attrs.h xlat/rtnl_neightbl_attrs.h \
-	xlat/rtnl_neightbl_parms_attrs.h xlat/rtnl_netconf_attrs.h \
-	xlat/rtnl_nsid_attrs.h xlat/rtnl_route_attrs.h \
-	xlat/rtnl_rta_metrics_attrs.h xlat/rtnl_rule_attrs.h \
-	xlat/rtnl_tc_action_attrs.h xlat/rtnl_tc_attrs.h \
-	xlat/rwf_flags.h xlat/sa_handler_values.h xlat/sched_flags.h \
-	xlat/schedulers.h xlat/scmvals.h xlat/scsi_sg_commands.h \
-	xlat/secbits.h xlat/seccomp_filter_flags.h xlat/seccomp_mode.h \
+	xlat/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/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 \
@@ -7066,6 +7091,10 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/mctl_sync.h: $(top_srcdir)/xlat/mctl_sync.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/mdb_flags.h: $(top_srcdir)/xlat/mdb_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/mdb_states.h: $(top_srcdir)/xlat/mdb_states.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/membarrier_cmds.h: $(top_srcdir)/xlat/membarrier_cmds.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/memfd_create_flags.h: $(top_srcdir)/xlat/memfd_create_flags.in $(top_srcdir)/xlat/gen.sh
@@ -7110,6 +7139,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/mtd_type_options.h: $(top_srcdir)/xlat/mtd_type_options.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/multicast_router_types.h: $(top_srcdir)/xlat/multicast_router_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/name_to_handle_at_flags.h: $(top_srcdir)/xlat/name_to_handle_at_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/neighbor_cache_entry_flags.h: $(top_srcdir)/xlat/neighbor_cache_entry_flags.in $(top_srcdir)/xlat/gen.sh
@@ -7118,6 +7149,8 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_ack_flags.h: $(top_srcdir)/xlat/netlink_ack_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/netlink_delete_flags.h: $(top_srcdir)/xlat/netlink_delete_flags.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_diag_attrs.h: $(top_srcdir)/xlat/netlink_diag_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_diag_show.h: $(top_srcdir)/xlat/netlink_diag_show.in $(top_srcdir)/xlat/gen.sh
@@ -7136,6 +7169,28 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/netlink_types.h: $(top_srcdir)/xlat/netlink_types.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_acct_msg_types.h: $(top_srcdir)/xlat/nf_acct_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_cthelper_msg_types.h: $(top_srcdir)/xlat/nf_cthelper_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_ctnetlink_exp_msg_types.h: $(top_srcdir)/xlat/nf_ctnetlink_exp_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_ctnetlink_msg_types.h: $(top_srcdir)/xlat/nf_ctnetlink_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_cttimeout_msg_types.h: $(top_srcdir)/xlat/nf_cttimeout_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_ipset_msg_types.h: $(top_srcdir)/xlat/nf_ipset_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_nft_compat_msg_types.h: $(top_srcdir)/xlat/nf_nft_compat_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_nftables_msg_types.h: $(top_srcdir)/xlat/nf_nftables_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_osf_msg_types.h: $(top_srcdir)/xlat/nf_osf_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/nf_queue_msg_types.h: $(top_srcdir)/xlat/nf_queue_msg_types.in $(top_srcdir)/xlat/gen.sh
+	$(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/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
@@ -7276,6 +7331,16 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/rtnl_mdb_attrs.h: $(top_srcdir)/xlat/rtnl_mdb_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_mdba_mdb_attrs.h: $(top_srcdir)/xlat/rtnl_mdba_mdb_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_mdba_mdb_eattr_attrs.h: $(top_srcdir)/xlat/rtnl_mdba_mdb_eattr_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_mdba_mdb_entry_attrs.h: $(top_srcdir)/xlat/rtnl_mdba_mdb_entry_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_mdba_router_attrs.h: $(top_srcdir)/xlat/rtnl_mdba_router_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_mdba_router_pattr_attrs.h: $(top_srcdir)/xlat/rtnl_mdba_router_pattr_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/rtnl_neigh_attrs.h: $(top_srcdir)/xlat/rtnl_neigh_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/rtnl_neightbl_attrs.h: $(top_srcdir)/xlat/rtnl_neightbl_attrs.in $(top_srcdir)/xlat/gen.sh
@@ -7296,6 +7361,10 @@
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/rtnl_tc_attrs.h: $(top_srcdir)/xlat/rtnl_tc_attrs.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_tca_stab_attrs.h: $(top_srcdir)/xlat/rtnl_tca_stab_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
+$(top_srcdir)/xlat/rtnl_tca_stats_attrs.h: $(top_srcdir)/xlat/rtnl_tca_stats_attrs.in $(top_srcdir)/xlat/gen.sh
+	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/rwf_flags.h: $(top_srcdir)/xlat/rwf_flags.in $(top_srcdir)/xlat/gen.sh
 	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@
 $(top_srcdir)/xlat/sa_handler_values.h: $(top_srcdir)/xlat/sa_handler_values.in $(top_srcdir)/xlat/gen.sh
@@ -7707,10 +7776,9 @@
 @MAINTAINER_MODE_TRUE@	(								\
 @MAINTAINER_MODE_TRUE@	  cd $(srcdir);							\
 @MAINTAINER_MODE_TRUE@	  sed '/^##/,$$d' CREDITS.in;					\
-@MAINTAINER_MODE_TRUE@	  { sed -n '1,/^##>/d; s/   */\t/; s/^./&/p' CREDITS.in;	\
-@MAINTAINER_MODE_TRUE@	    git log --pretty=format:'%aN	%aE';			\
-@MAINTAINER_MODE_TRUE@	  } | LC_ALL=C sort -u						\
-@MAINTAINER_MODE_TRUE@	    | awk -F'\t' '{printf("\t%s <%s>\n",$$1,$$2)}';		\
+@MAINTAINER_MODE_TRUE@	  sed -n '1,/^##>/d; s/   */\t/; s/^./&/p' CREDITS.in		\
+@MAINTAINER_MODE_TRUE@	    | maint/gen-contributors-list.sh - -e HEAD --initial	\
+@MAINTAINER_MODE_TRUE@	    | sed 's/\t/ /g; s/^/\t/'					\
 @MAINTAINER_MODE_TRUE@	) > $@-t && mv $@-t $@
 
 @MAINTAINER_MODE_TRUE@export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner --mode=go-w,go+rX
diff --git a/NEWS b/NEWS
index 46fe3b4..03f8375 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,19 @@
+Noteworthy changes in release 4.20 (2017-11-13)
+===============================================
+
+* Improvements
+  * Implemented decoding of NETLINK_NETFILTER netlink message types and flags.
+  * Implemented decoding of SECCOMP_GET_ACTION_AVAIL operation of seccomp
+    syscall.
+  * Updated lists of ARPHRD_*, BPF_*, ETH_P_*, LOOP_*, MADV_*,
+    MEMBARRIER_CMD_*, MFD_*, SECCOMP_*, SO_*, SOL_*, TCP_*, and UFFD_FEATURE_*
+    constants.
+  * Added decoding of statx syscall on hppa.
+  * Updated lists of ioctl commands from Linux 4.14.
+
+* Bug fixes
+  * Fixed powerpc personality support on powerpc64.
+
 Noteworthy changes in release 4.19 (2017-09-05)
 ===============================================
 
diff --git a/bpf_seccomp_filter.c b/bpf_seccomp_filter.c
index 9852f49..a11b57e 100644
--- a/bpf_seccomp_filter.c
+++ b/bpf_seccomp_filter.c
@@ -35,8 +35,8 @@
 #ifdef HAVE_LINUX_SECCOMP_H
 # include <linux/seccomp.h>
 #endif
-#ifndef SECCOMP_RET_ACTION
-# define SECCOMP_RET_ACTION 0x7fff0000U
+#ifndef SECCOMP_RET_ACTION_FULL
+# define SECCOMP_RET_ACTION_FULL 0xffff0000U
 #endif
 #include "xlat/seccomp_ret_action.h"
 
@@ -44,7 +44,7 @@
 print_seccomp_filter_k(const struct bpf_filter_block *const fp)
 {
 	if (BPF_CLASS(fp->code) == BPF_RET) {
-		unsigned int action = SECCOMP_RET_ACTION & fp->k;
+		unsigned int action = SECCOMP_RET_ACTION_FULL & fp->k;
 		unsigned int data = fp->k & ~action;
 
 		printxval(seccomp_ret_action, action, "SECCOMP_RET_???");
diff --git a/config.h b/config.h
index a8876e3..a1709ad 100644
--- a/config.h
+++ b/config.h
@@ -1,9 +1,6 @@
 /* config.h.  Generated from config.h.in by configure.  */
 /* config.h.in.  Generated from configure.ac by autoheader.  */
 
-/* Define for the AArch64 architecture. */
-/* #undef AARCH64 */
-
 /* Define if building universal (internal helper macro) */
 /* #undef AC_APPLE_UNIVERSAL_BUILD */
 
@@ -745,6 +742,9 @@
 /* Define to 1 if you have the <linux/ip_vs.h> header file. */
 #define HAVE_LINUX_IP_VS_H 1
 
+/* Define to 1 if you have the <linux/kcmp.h> header file. */
+#define HAVE_LINUX_KCMP_H 1
+
 /* Define to 1 if you have the <linux/mmtimer.h> header file. */
 #define HAVE_LINUX_MMTIMER_H 1
 
@@ -765,6 +765,10 @@
    file. */
 #define HAVE_LINUX_NETFILTER_BRIDGE_EBTABLES_H 1
 
+/* Define to 1 if you have the <linux/netfilter/ipset/ip_set.h> header file.
+   */
+#define HAVE_LINUX_NETFILTER_IPSET_IP_SET_H 1
+
 /* Define to 1 if you have the <linux/netfilter_ipv4/ip_tables.h> header file.
    */
 #define HAVE_LINUX_NETFILTER_IPV4_IP_TABLES_H 1
@@ -773,9 +777,43 @@
    file. */
 #define HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H 1
 
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_acct.h> header file.
+   */
+#define HAVE_LINUX_NETFILTER_NFNETLINK_ACCT_H 1
+
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_conntrack.h> header
+   file. */
+#define HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H 1
+
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_cthelper.h> header
+   file. */
+#define HAVE_LINUX_NETFILTER_NFNETLINK_CTHELPER_H 1
+
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_cttimeout.h> header
+   file. */
+#define HAVE_LINUX_NETFILTER_NFNETLINK_CTTIMEOUT_H 1
+
 /* Define to 1 if you have the <linux/netfilter/nfnetlink.h> header file. */
 #define HAVE_LINUX_NETFILTER_NFNETLINK_H 1
 
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_log.h> header file.
+   */
+#define HAVE_LINUX_NETFILTER_NFNETLINK_LOG_H 1
+
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_queue.h> header
+   file. */
+#define HAVE_LINUX_NETFILTER_NFNETLINK_QUEUE_H 1
+
+/* Define to 1 if you have the <linux/netfilter/nf_tables_compat.h> header
+   file. */
+#define HAVE_LINUX_NETFILTER_NF_TABLES_COMPAT_H 1
+
+/* Define to 1 if you have the <linux/netfilter/nf_tables.h> header file. */
+#define HAVE_LINUX_NETFILTER_NF_TABLES_H 1
+
+/* Define to 1 if you have the <linux/netfilter/xt_osf.h> header file. */
+#define HAVE_LINUX_NETFILTER_XT_OSF_H 1
+
 /* Define to 1 if you have the <linux/nsfs.h> header file. */
 #define HAVE_LINUX_NSFS_H 1
 
@@ -922,6 +960,15 @@
 /* Define to 1 if the system has the type `struct blk_user_trace_setup'. */
 #define HAVE_STRUCT_BLK_USER_TRACE_SETUP 1
 
+/* Define to 1 if the system has the type `struct br_mdb_entry'. */
+#define HAVE_STRUCT_BR_MDB_ENTRY 1
+
+/* Define to 1 if `flags' is a member of `struct br_mdb_entry'. */
+#define HAVE_STRUCT_BR_MDB_ENTRY_FLAGS 1
+
+/* Define to 1 if `vid' is a member of `struct br_mdb_entry'. */
+#define HAVE_STRUCT_BR_MDB_ENTRY_VID 1
+
 /* Define to 1 if the system has the type `struct br_port_msg'. */
 #define HAVE_STRUCT_BR_PORT_MSG 1
 
@@ -968,6 +1015,18 @@
 /* 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 gnet_stats_basic'. */
+#define HAVE_STRUCT_GNET_STATS_BASIC 1
+
+/* Define to 1 if the system has the type `struct gnet_stats_queue'. */
+#define HAVE_STRUCT_GNET_STATS_QUEUE 1
+
+/* Define to 1 if the system has the type `struct gnet_stats_rate_est'. */
+#define HAVE_STRUCT_GNET_STATS_RATE_EST 1
+
+/* Define to 1 if the system has the type `struct gnet_stats_rate_est64'. */
+#define HAVE_STRUCT_GNET_STATS_RATE_EST64 1
+
 /* Define to 1 if the system has the type `struct ia64_fpreg'. */
 /* #undef HAVE_STRUCT_IA64_FPREG */
 
@@ -983,6 +1042,9 @@
 /* Define to 1 if `resolution' is a member of `struct input_absinfo'. */
 #define HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION 1
 
+/* Define to 1 if the system has the type `struct kcmp_epoll_slot'. */
+/* #undef HAVE_STRUCT_KCMP_EPOLL_SLOT */
+
 /* Define to 1 if the system has the type `struct keyctl_kdf_params'. */
 #define HAVE_STRUCT_KEYCTL_KDF_PARAMS 1
 
@@ -1134,6 +1196,9 @@
 /* Define to 1 if `st_mtime_nsec' is a member of `struct stat'. */
 #define HAVE_STRUCT_STAT_ST_MTIME_NSEC 1
 
+/* Define to 1 if the system has the type `struct tc_sizespec'. */
+#define HAVE_STRUCT_TC_SIZESPEC 1
+
 /* Define to 1 if `tai' is a member of `struct timex'. */
 #define HAVE_STRUCT_TIMEX_TAI 1
 
@@ -1254,6 +1319,12 @@
 /* Define for _ABIO32. */
 /* #undef LINUX_MIPSO32 */
 
+/* The size of `kernel_long_t', as computed by sizeof. */
+/* #undef M32_SIZEOF_KERNEL_LONG_T */
+
+/* The size of `long', as computed by sizeof. */
+/* #undef M32_SIZEOF_LONG */
+
 /* Define for the m68k architecture. */
 /* #undef M68K */
 
@@ -1269,6 +1340,12 @@
 /* Define for the MIPS architecture. */
 /* #undef MIPS */
 
+/* The size of `kernel_long_t', as computed by sizeof. */
+/* #undef MX32_SIZEOF_KERNEL_LONG_T */
+
+/* The size of `long', as computed by sizeof. */
+/* #undef MX32_SIZEOF_LONG */
+
 /* Define for the Nios-II architecture. */
 /* #undef NIOS2 */
 
@@ -1285,7 +1362,7 @@
 #define PACKAGE_NAME "strace"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "strace 4.19"
+#define PACKAGE_STRING "strace 4.20"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "strace"
@@ -1294,7 +1371,7 @@
 #define PACKAGE_URL "https://strace.io"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "4.19"
+#define PACKAGE_VERSION "4.20"
 
 /* Define for the PowerPC architecture. */
 /* #undef POWERPC */
@@ -1366,7 +1443,7 @@
 
 
 /* Version number of package */
-#define VERSION "4.19"
+#define VERSION "4.20"
 
 /* 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 c0185a2..77a7335 100644
--- a/config.h.in
+++ b/config.h.in
@@ -744,6 +744,9 @@
 /* Define to 1 if you have the <linux/ip_vs.h> header file. */
 #undef HAVE_LINUX_IP_VS_H
 
+/* Define to 1 if you have the <linux/kcmp.h> header file. */
+#undef HAVE_LINUX_KCMP_H
+
 /* Define to 1 if you have the <linux/mmtimer.h> header file. */
 #undef HAVE_LINUX_MMTIMER_H
 
@@ -764,6 +767,10 @@
    file. */
 #undef HAVE_LINUX_NETFILTER_BRIDGE_EBTABLES_H
 
+/* Define to 1 if you have the <linux/netfilter/ipset/ip_set.h> header file.
+   */
+#undef HAVE_LINUX_NETFILTER_IPSET_IP_SET_H
+
 /* Define to 1 if you have the <linux/netfilter_ipv4/ip_tables.h> header file.
    */
 #undef HAVE_LINUX_NETFILTER_IPV4_IP_TABLES_H
@@ -772,9 +779,43 @@
    file. */
 #undef HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H
 
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_acct.h> header file.
+   */
+#undef HAVE_LINUX_NETFILTER_NFNETLINK_ACCT_H
+
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_conntrack.h> header
+   file. */
+#undef HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H
+
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_cthelper.h> header
+   file. */
+#undef HAVE_LINUX_NETFILTER_NFNETLINK_CTHELPER_H
+
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_cttimeout.h> header
+   file. */
+#undef HAVE_LINUX_NETFILTER_NFNETLINK_CTTIMEOUT_H
+
 /* Define to 1 if you have the <linux/netfilter/nfnetlink.h> header file. */
 #undef HAVE_LINUX_NETFILTER_NFNETLINK_H
 
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_log.h> header file.
+   */
+#undef HAVE_LINUX_NETFILTER_NFNETLINK_LOG_H
+
+/* Define to 1 if you have the <linux/netfilter/nfnetlink_queue.h> header
+   file. */
+#undef HAVE_LINUX_NETFILTER_NFNETLINK_QUEUE_H
+
+/* Define to 1 if you have the <linux/netfilter/nf_tables_compat.h> header
+   file. */
+#undef HAVE_LINUX_NETFILTER_NF_TABLES_COMPAT_H
+
+/* Define to 1 if you have the <linux/netfilter/nf_tables.h> header file. */
+#undef HAVE_LINUX_NETFILTER_NF_TABLES_H
+
+/* Define to 1 if you have the <linux/netfilter/xt_osf.h> header file. */
+#undef HAVE_LINUX_NETFILTER_XT_OSF_H
+
 /* Define to 1 if you have the <linux/nsfs.h> header file. */
 #undef HAVE_LINUX_NSFS_H
 
@@ -921,6 +962,15 @@
 /* Define to 1 if the system has the type `struct blk_user_trace_setup'. */
 #undef HAVE_STRUCT_BLK_USER_TRACE_SETUP
 
+/* Define to 1 if the system has the type `struct br_mdb_entry'. */
+#undef HAVE_STRUCT_BR_MDB_ENTRY
+
+/* Define to 1 if `flags' is a member of `struct br_mdb_entry'. */
+#undef HAVE_STRUCT_BR_MDB_ENTRY_FLAGS
+
+/* Define to 1 if `vid' is a member of `struct br_mdb_entry'. */
+#undef HAVE_STRUCT_BR_MDB_ENTRY_VID
+
 /* Define to 1 if the system has the type `struct br_port_msg'. */
 #undef HAVE_STRUCT_BR_PORT_MSG
 
@@ -967,6 +1017,18 @@
 /* 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 gnet_stats_basic'. */
+#undef HAVE_STRUCT_GNET_STATS_BASIC
+
+/* Define to 1 if the system has the type `struct gnet_stats_queue'. */
+#undef HAVE_STRUCT_GNET_STATS_QUEUE
+
+/* Define to 1 if the system has the type `struct gnet_stats_rate_est'. */
+#undef HAVE_STRUCT_GNET_STATS_RATE_EST
+
+/* Define to 1 if the system has the type `struct gnet_stats_rate_est64'. */
+#undef HAVE_STRUCT_GNET_STATS_RATE_EST64
+
 /* Define to 1 if the system has the type `struct ia64_fpreg'. */
 #undef HAVE_STRUCT_IA64_FPREG
 
@@ -982,6 +1044,9 @@
 /* Define to 1 if `resolution' is a member of `struct input_absinfo'. */
 #undef HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION
 
+/* Define to 1 if the system has the type `struct kcmp_epoll_slot'. */
+#undef HAVE_STRUCT_KCMP_EPOLL_SLOT
+
 /* Define to 1 if the system has the type `struct keyctl_kdf_params'. */
 #undef HAVE_STRUCT_KEYCTL_KDF_PARAMS
 
@@ -1133,6 +1198,9 @@
 /* Define to 1 if `st_mtime_nsec' is a member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_MTIME_NSEC
 
+/* Define to 1 if the system has the type `struct tc_sizespec'. */
+#undef HAVE_STRUCT_TC_SIZESPEC
+
 /* Define to 1 if `tai' is a member of `struct timex'. */
 #undef HAVE_STRUCT_TIMEX_TAI
 
@@ -1253,6 +1321,12 @@
 /* Define for _ABIO32. */
 #undef LINUX_MIPSO32
 
+/* The size of `kernel_long_t', as computed by sizeof. */
+#undef M32_SIZEOF_KERNEL_LONG_T
+
+/* The size of `long', as computed by sizeof. */
+#undef M32_SIZEOF_LONG
+
 /* Define for the m68k architecture. */
 #undef M68K
 
@@ -1268,6 +1342,12 @@
 /* Define for the MIPS architecture. */
 #undef MIPS
 
+/* The size of `kernel_long_t', as computed by sizeof. */
+#undef MX32_SIZEOF_KERNEL_LONG_T
+
+/* The size of `long', as computed by sizeof. */
+#undef MX32_SIZEOF_LONG
+
 /* Define for the Nios-II architecture. */
 #undef NIOS2
 
diff --git a/configure b/configure
index 4ebd921..c971736 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.19.
+# Generated by GNU Autoconf 2.69 for strace 4.20.
 #
 # Report bugs to <strace-devel@lists.sourceforge.net>.
 #
@@ -582,8 +582,8 @@
 # Identity of this package.
 PACKAGE_NAME='strace'
 PACKAGE_TARNAME='strace'
-PACKAGE_VERSION='4.19'
-PACKAGE_STRING='strace 4.19'
+PACKAGE_VERSION='4.20'
+PACKAGE_STRING='strace 4.20'
 PACKAGE_BUGREPORT='strace-devel@lists.sourceforge.net'
 PACKAGE_URL='https://strace.io'
 
@@ -1348,7 +1348,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures strace 4.19 to adapt to many kinds of systems.
+\`configure' configures strace 4.20 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1418,7 +1418,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of strace 4.19:";;
+     short | recursive ) echo "Configuration of strace 4.20:";;
    esac
   cat <<\_ACEOF
 
@@ -1530,7 +1530,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-strace configure 4.19
+strace configure 4.20
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2270,7 +2270,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by strace $as_me 4.19, which was
+It was created by strace $as_me 4.20, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3141,7 +3141,7 @@
 
 # Define the identity of the package.
  PACKAGE='strace'
- VERSION='4.19'
+ VERSION='4.20'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -9446,6 +9446,18 @@
 fi
 
 
+ac_fn_c_check_type "$LINENO" "struct kcmp_epoll_slot" "ac_cv_type_struct_kcmp_epoll_slot" "#include <linux/kcmp.h>
+"
+if test "x$ac_cv_type_struct_kcmp_epoll_slot" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_KCMP_EPOLL_SLOT 1
+_ACEOF
+
+
+fi
+
+
 ac_fn_c_check_type "$LINENO" "struct keyctl_kdf_params" "ac_cv_type_struct_keyctl_kdf_params" "#include <linux/keyctl.h>
 "
 if test "x$ac_cv_type_struct_keyctl_kdf_params" = xyes; then :
@@ -9726,7 +9738,7 @@
 fi
 
 
-for ac_header in asm/cachectl.h asm/sysmips.h bluetooth/bluetooth.h elf.h inttypes.h linux/bsg.h linux/cryptouser.h linux/dm-ioctl.h linux/dqblk_xfs.h linux/falloc.h linux/fib_rules.h linux/fiemap.h linux/genetlink.h linux/hiddev.h linux/if_addr.h linux/if_link.h linux/ip_vs.h linux/ipc.h linux/mmtimer.h linux/msg.h linux/neighbour.h linux/netfilter/nfnetlink.h linux/nsfs.h linux/perf_event.h linux/quota.h linux/seccomp.h linux/securebits.h linux/sem.h linux/shm.h linux/userfaultfd.h linux/utsname.h mqueue.h netinet/sctp.h netipx/ipx.h scsi/sg.h stropts.h sys/conf.h sys/eventfd.h sys/fanotify.h sys/ipc.h sys/msg.h sys/quota.h sys/reg.h sys/sem.h sys/shm.h sys/signalfd.h sys/xattr.h ustat.h
+for ac_header in asm/cachectl.h asm/sysmips.h bluetooth/bluetooth.h elf.h inttypes.h linux/bsg.h linux/cryptouser.h linux/dm-ioctl.h linux/dqblk_xfs.h linux/falloc.h linux/fib_rules.h linux/fiemap.h linux/genetlink.h linux/hiddev.h linux/if_addr.h linux/if_link.h linux/ip_vs.h linux/ipc.h linux/kcmp.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 scsi/sg.h stropts.h sys/conf.h sys/eventfd.h sys/fanotify.h sys/ipc.h sys/msg.h sys/quota.h sys/reg.h sys/sem.h sys/shm.h sys/signalfd.h sys/xattr.h ustat.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -9783,6 +9795,21 @@
 done
 
 
+for ac_header in linux/netfilter/xt_osf.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "linux/netfilter/xt_osf.h" "ac_cv_header_linux_netfilter_xt_osf_h" "#include <linux/ip.h>
+#include <linux/tcp.h>
+"
+if test "x$ac_cv_header_linux_netfilter_xt_osf_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LINUX_NETFILTER_XT_OSF_H 1
+_ACEOF
+
+fi
+
+done
+
+
 for ac_header in linux/netfilter_arp/arp_tables.h linux/netfilter_bridge/ebtables.h linux/netfilter_ipv4/ip_tables.h linux/netfilter_ipv6/ip6_tables.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -10048,6 +10075,16 @@
 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 :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BR_MDB_ENTRY 1
+_ACEOF
+
+
+fi
 ac_fn_c_check_type "$LINENO" "struct br_port_msg" "ac_cv_type_struct_br_port_msg" "#include <linux/if_bridge.h>
 "
 if test "x$ac_cv_type_struct_br_port_msg" = xyes; then :
@@ -10059,6 +10096,28 @@
 
 fi
 
+ac_fn_c_check_member "$LINENO" "struct br_mdb_entry" "flags" "ac_cv_member_struct_br_mdb_entry_flags" "#include <linux/if_bridge.h>
+"
+if test "x$ac_cv_member_struct_br_mdb_entry_flags" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BR_MDB_ENTRY_FLAGS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct br_mdb_entry" "vid" "ac_cv_member_struct_br_mdb_entry_vid" "#include <linux/if_bridge.h>
+"
+if test "x$ac_cv_member_struct_br_mdb_entry_vid" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_BR_MDB_ENTRY_VID 1
+_ACEOF
+
+
+fi
+
+
 ac_fn_c_check_type "$LINENO" "struct dcbmsg" "ac_cv_type_struct_dcbmsg" "#include <linux/dcbnl.h>
 "
 if test "x$ac_cv_type_struct_dcbmsg" = xyes; then :
@@ -10201,6 +10260,60 @@
 fi
 
 
+ac_fn_c_check_type "$LINENO" "struct gnet_stats_basic" "ac_cv_type_struct_gnet_stats_basic" "#include <linux/gen_stats.h>
+"
+if test "x$ac_cv_type_struct_gnet_stats_basic" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_GNET_STATS_BASIC 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct gnet_stats_queue" "ac_cv_type_struct_gnet_stats_queue" "#include <linux/gen_stats.h>
+"
+if test "x$ac_cv_type_struct_gnet_stats_queue" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_GNET_STATS_QUEUE 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct gnet_stats_rate_est" "ac_cv_type_struct_gnet_stats_rate_est" "#include <linux/gen_stats.h>
+"
+if test "x$ac_cv_type_struct_gnet_stats_rate_est" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_GNET_STATS_RATE_EST 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "struct gnet_stats_rate_est64" "ac_cv_type_struct_gnet_stats_rate_est64" "#include <linux/gen_stats.h>
+"
+if test "x$ac_cv_type_struct_gnet_stats_rate_est64" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_GNET_STATS_RATE_EST64 1
+_ACEOF
+
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "struct tc_sizespec" "ac_cv_type_struct_tc_sizespec" "#include <linux/pkt_sched.h>
+"
+if test "x$ac_cv_type_struct_tc_sizespec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TC_SIZESPEC 1
+_ACEOF
+
+
+fi
+
+
 ac_fn_c_check_type "$LINENO" "struct fib_rule_uid_range" "ac_cv_type_struct_fib_rule_uid_range" "#include <linux/fib_rules.h>
 "
 if test "x$ac_cv_type_struct_fib_rule_uid_range" = xyes; then :
@@ -13214,6 +13327,153 @@
 
 
 
+
+			if test $st_cv_m32_runtime = yes; then
+
+
+
+
+
+
+
+if test -n "${ac_cv_sizeof_long+set}"; then :
+  saved_ac_cv_sizeof_long="${ac_cv_sizeof_long}"; unset ac_cv_sizeof_long
+fi
+if test -n "${ac_cv_m32_sizeof_long+set}"; then :
+  ac_cv_sizeof_long="${ac_cv_m32_sizeof_long}"
+fi
+
+
+
+
+
+
+				# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if ${ac_cv_sizeof_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long" = yes; 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 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define M32_SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+
+
+
+
+
+
+if test -n "${ac_cv_sizeof_long+set}"; then :
+  ac_cv_m32_sizeof_long="${ac_cv_sizeof_long}"
+fi
+if test -n "${saved_ac_cv_sizeof_long+set}"; then :
+  ac_cv_sizeof_long="${saved_ac_cv_sizeof_long}"; unset saved_ac_cv_sizeof_long
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ac_cv_sizeof_kernel_long_t+set}"; then :
+  saved_ac_cv_sizeof_kernel_long_t="${ac_cv_sizeof_kernel_long_t}"; unset ac_cv_sizeof_kernel_long_t
+fi
+if test -n "${ac_cv_m32_sizeof_kernel_long_t+set}"; then :
+  ac_cv_sizeof_kernel_long_t="${ac_cv_m32_sizeof_kernel_long_t}"
+fi
+
+
+
+
+
+
+				# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of kernel_long_t" >&5
+$as_echo_n "checking size of kernel_long_t... " >&6; }
+if ${ac_cv_sizeof_kernel_long_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (kernel_long_t))" "ac_cv_sizeof_kernel_long_t"        "#include \"$srcdir/kernel_types.h\"
+"; then :
+
+else
+  if test "$ac_cv_type_kernel_long_t" = yes; 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 77 "cannot compute sizeof (kernel_long_t)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_kernel_long_t=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_kernel_long_t" >&5
+$as_echo "$ac_cv_sizeof_kernel_long_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define M32_SIZEOF_KERNEL_LONG_T $ac_cv_sizeof_kernel_long_t
+_ACEOF
+
+
+
+
+
+
+
+
+if test -n "${ac_cv_sizeof_kernel_long_t+set}"; then :
+  ac_cv_m32_sizeof_kernel_long_t="${ac_cv_sizeof_kernel_long_t}"
+fi
+if test -n "${saved_ac_cv_sizeof_kernel_long_t+set}"; then :
+  ac_cv_sizeof_kernel_long_t="${saved_ac_cv_sizeof_kernel_long_t}"; unset saved_ac_cv_sizeof_kernel_long_t
+fi
+
+
+
+
+
+
+
+			fi
 		fi
 	fi
 	CFLAGS="$saved_CFLAGS"
@@ -13542,6 +13802,153 @@
 
 
 
+
+			if test $st_cv_mx32_runtime = yes; then
+
+
+
+
+
+
+
+if test -n "${ac_cv_sizeof_long+set}"; then :
+  saved_ac_cv_sizeof_long="${ac_cv_sizeof_long}"; unset ac_cv_sizeof_long
+fi
+if test -n "${ac_cv_mx32_sizeof_long+set}"; then :
+  ac_cv_sizeof_long="${ac_cv_mx32_sizeof_long}"
+fi
+
+
+
+
+
+
+				# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if ${ac_cv_sizeof_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long" = yes; 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 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define MX32_SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+
+
+
+
+
+
+if test -n "${ac_cv_sizeof_long+set}"; then :
+  ac_cv_mx32_sizeof_long="${ac_cv_sizeof_long}"
+fi
+if test -n "${saved_ac_cv_sizeof_long+set}"; then :
+  ac_cv_sizeof_long="${saved_ac_cv_sizeof_long}"; unset saved_ac_cv_sizeof_long
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ac_cv_sizeof_kernel_long_t+set}"; then :
+  saved_ac_cv_sizeof_kernel_long_t="${ac_cv_sizeof_kernel_long_t}"; unset ac_cv_sizeof_kernel_long_t
+fi
+if test -n "${ac_cv_mx32_sizeof_kernel_long_t+set}"; then :
+  ac_cv_sizeof_kernel_long_t="${ac_cv_mx32_sizeof_kernel_long_t}"
+fi
+
+
+
+
+
+
+				# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of kernel_long_t" >&5
+$as_echo_n "checking size of kernel_long_t... " >&6; }
+if ${ac_cv_sizeof_kernel_long_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (kernel_long_t))" "ac_cv_sizeof_kernel_long_t"        "#include \"$srcdir/kernel_types.h\"
+"; then :
+
+else
+  if test "$ac_cv_type_kernel_long_t" = yes; 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 77 "cannot compute sizeof (kernel_long_t)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_kernel_long_t=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_kernel_long_t" >&5
+$as_echo "$ac_cv_sizeof_kernel_long_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define MX32_SIZEOF_KERNEL_LONG_T $ac_cv_sizeof_kernel_long_t
+_ACEOF
+
+
+
+
+
+
+
+
+if test -n "${ac_cv_sizeof_kernel_long_t+set}"; then :
+  ac_cv_mx32_sizeof_kernel_long_t="${ac_cv_sizeof_kernel_long_t}"
+fi
+if test -n "${saved_ac_cv_sizeof_kernel_long_t+set}"; then :
+  ac_cv_sizeof_kernel_long_t="${saved_ac_cv_sizeof_kernel_long_t}"; unset saved_ac_cv_sizeof_kernel_long_t
+fi
+
+
+
+
+
+
+
+			fi
 		fi
 	fi
 	CFLAGS="$saved_CFLAGS"
@@ -14561,7 +14968,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.19, which was
+This file was extended by strace $as_me 4.20, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -14628,7 +15035,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.19
+strace config.status 4.20
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index d064285..29285db 100644
--- a/configure.ac
+++ b/configure.ac
@@ -334,6 +334,10 @@
 ]),,, [#include <linux/cryptouser.h>])
 
 AC_CHECK_TYPES(m4_normalize([
+	struct kcmp_epoll_slot
+]),,, [#include <linux/kcmp.h>])
+
+AC_CHECK_TYPES(m4_normalize([
 	struct keyctl_kdf_params
 ]),,, [#include <linux/keyctl.h>])
 
@@ -390,10 +394,20 @@
 	linux/if_link.h
 	linux/ip_vs.h
 	linux/ipc.h
+	linux/kcmp.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
@@ -428,6 +442,9 @@
 
 AC_CHECK_HEADERS([linux/mqueue.h],,, [#include <linux/types.h>])
 
+AC_CHECK_HEADERS([linux/netfilter/xt_osf.h],,, [#include <linux/ip.h>
+#include <linux/tcp.h>])
+
 AC_CHECK_HEADERS(m4_normalize([
 	linux/netfilter_arp/arp_tables.h
 	linux/netfilter_bridge/ebtables.h
@@ -448,7 +465,15 @@
 	st_CHECK_UNION_BPF_ATTR([prog_flags])
 ])
 
-AC_CHECK_TYPES([struct br_port_msg],,, [#include <linux/if_bridge.h>])
+AC_CHECK_TYPES(m4_normalize([
+	struct br_mdb_entry,
+	struct br_port_msg
+]),,, [#include <linux/if_bridge.h>])
+AC_CHECK_MEMBERS(m4_normalize([
+	struct br_mdb_entry.flags,
+	struct br_mdb_entry.vid
+]),,, [#include <linux/if_bridge.h>])
+
 AC_CHECK_TYPES([struct dcbmsg],,, [#include <linux/dcbnl.h>])
 AC_CHECK_TYPES([struct ifaddrlblmsg],,, [#include <linux/if_addrlabel.h>])
 AC_CHECK_TYPES([struct netconfmsg],,, [#include <linux/netconf.h>])
@@ -474,6 +499,15 @@
 	struct rtnl_link_stats64.rx_nohandler
 ]),,, [#include <linux/if_link.h>])
 
+AC_CHECK_TYPES(m4_normalize([
+	struct gnet_stats_basic,
+	struct gnet_stats_queue,
+	struct gnet_stats_rate_est,
+	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 fib_rule_uid_range],,, [#include <linux/fib_rules.h>])
 
 AC_CHECK_TYPES([struct statfs], [
diff --git a/debian/changelog b/debian/changelog
index f7b03e9..2579044 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,14 @@
-strace (4.19-1) experimental; urgency=low
+strace (4.20-1) experimental; urgency=low
 
-  * strace 4.19 snapshot.
+  * strace 4.20 snapshot.
 
- -- Strace <strace-devel@lists.sourceforge.net>  Tue, 05 Sep 2017 12:15:20 +0000
+ -- Strace <strace-devel@lists.sourceforge.net>  Mon, 13 Nov 2017 21:49:34 +0000
+
+strace (4.19-1) unstable; urgency=medium
+
+  * New upstream version.
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Wed, 05 Sep 2017 12:13:14 +0000
 
 strace (4.18-1) unstable; urgency=medium
 
diff --git a/debian/changelog.in b/debian/changelog.in
index a29097a..16f34d8 100644
--- a/debian/changelog.in
+++ b/debian/changelog.in
@@ -4,6 +4,12 @@
 
  -- Strace <@PACKAGE_BUGREPORT@>  @DEB_CHANGELOGTIME@
 
+strace (4.19-1) unstable; urgency=medium
+
+  * New upstream version.
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Wed, 05 Sep 2017 12:13:14 +0000
+
 strace (4.18-1) unstable; urgency=medium
 
   * New upstream version.
diff --git a/debian/compat b/debian/compat
index 7f8f011..f599e28 100644
--- a/debian/compat
+++ b/debian/compat
@@ -1 +1 @@
-7
+10
diff --git a/debian/control b/debian/control
index 2a7963f..92cdc20 100644
--- a/debian/control
+++ b/debian/control
@@ -3,7 +3,7 @@
 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
-Standards-Version: 3.9.6
+Standards-Version: 3.9.8
 Homepage: https://strace.io
 Vcs-Git: https://anonscm.debian.org/git/collab-maint/strace.git
 Vcs-Browser: https://anonscm.debian.org/git/collab-maint/strace.git
diff --git a/debian/rules b/debian/rules
index 4b556a7..d03cd5c 100755
--- a/debian/rules
+++ b/debian/rules
@@ -76,20 +76,20 @@
 	test -f build64-stamp && ( mv build64/strace build64/strace64 ; \
 		cp strace.1 strace64.1 ) || true
 
-	dh_testdir -s
-	dh_testroot -s
-	dh_installdirs -s
-	dh_installdocs -s
-	dh_installman -s
-	dh_installexamples -s
-	dh_installchangelogs -s
-	dh_install -s
-	dh_link -s
-	dh_strip -s
-	dh_compress -s
-	dh_fixperms -s
-	dh_installdeb -s
-	dh_shlibdeps -s
-	dh_gencontrol -s
-	dh_md5sums -s
-	dh_builddeb -s
+	dh_testdir -a
+	dh_testroot -a
+	dh_installdirs -a
+	dh_installdocs -a
+	dh_installman -a
+	dh_installexamples -a
+	dh_installchangelogs -a
+	dh_install -a
+	dh_link -a
+	dh_strip -a
+	dh_compress -a
+	dh_fixperms -a
+	dh_installdeb -a
+	dh_shlibdeps -a
+	dh_gencontrol -a
+	dh_md5sums -a
+	dh_builddeb -a
diff --git a/defs.h b/defs.h
index 34261f2..b1a6b95 100644
--- a/defs.h
+++ b/defs.h
@@ -75,15 +75,6 @@
 extern char *stpcpy(char *dst, const char *src);
 #endif
 
-/* macros */
-#ifndef MAX
-# define MAX(a, b)		(((a) > (b)) ? (a) : (b))
-#endif
-#ifndef MIN
-# define MIN(a, b)		(((a) < (b)) ? (a) : (b))
-#endif
-#define CLAMP(val, min, max) MIN(MAX(min, val), max)
-
 /* Glibc has an efficient macro for sigemptyset
  * (it just does one or two assignments of 0 to internal vector of longs).
  */
@@ -295,6 +286,7 @@
 extern const struct xlat routing_scopes[];
 extern const struct xlat routing_table_ids[];
 extern const struct xlat routing_types[];
+extern const struct xlat seccomp_ret_action[];
 extern const struct xlat setns_types[];
 extern const struct xlat sg_io_info[];
 extern const struct xlat socketlayers[];
diff --git a/dm.c b/dm.c
index 55efd92..28863a8 100644
--- a/dm.c
+++ b/dm.c
@@ -44,13 +44,16 @@
 /* Definitions for command which have been added later */
 
 #  ifndef DM_LIST_VERSIONS
-#   define DM_LIST_VERSIONS    _IOWR(DM_IOCTL, 0xd, struct dm_ioctl)
+#   define DM_LIST_VERSIONS    _IOWR(DM_IOCTL, 0x0d, struct dm_ioctl)
 #  endif
 #  ifndef DM_TARGET_MSG
-#   define DM_TARGET_MSG       _IOWR(DM_IOCTL, 0xe, struct dm_ioctl)
+#   define DM_TARGET_MSG       _IOWR(DM_IOCTL, 0x0e, struct dm_ioctl)
 #  endif
 #  ifndef DM_DEV_SET_GEOMETRY
-#   define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, 0xf, struct dm_ioctl)
+#   define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, 0x0f, struct dm_ioctl)
+#  endif
+#  ifndef DM_DEV_ARM_POLL
+#   define DM_DEV_ARM_POLL     _IOWR(DM_IOCTL, 0x10, struct dm_ioctl)
 #  endif
 
 
@@ -429,6 +432,7 @@
 	case DM_DEV_SUSPEND:
 	case DM_DEV_STATUS:
 	case DM_TABLE_CLEAR:
+	case DM_DEV_ARM_POLL:
 		return false;
 	}
 
@@ -576,6 +580,7 @@
 	case DM_LIST_VERSIONS:
 	case DM_TARGET_MSG:
 	case DM_DEV_SET_GEOMETRY:
+	case DM_DEV_ARM_POLL:
 		return dm_known_ioctl(tcp, code, arg);
 	default:
 		return RVAL_DECODED;
diff --git a/error_prints.c b/error_prints.c
index 8519b92..710e99b 100644
--- a/error_prints.c
+++ b/error_prints.c
@@ -37,7 +37,9 @@
 
 #include "error_prints.h"
 
+#ifndef HAVE_PROGRAM_INVOCATION_NAME
 extern char *program_invocation_name;
+#endif
 
 static void
 verror_msg(int err_no, const char *fmt, va_list p)
diff --git a/ioctlent0.h b/ioctlent0.h
index a3c1a4e..13c2165 100644
--- a/ioctlent0.h
+++ b/ioctlent0.h
@@ -324,6 +324,7 @@
 { "LOOP_CHANGE_FD", 0x00004c06 },
 { "LOOP_SET_CAPACITY", 0x00004c07 },
 { "LOOP_SET_DIRECT_IO", 0x00004c08 },
+{ "LOOP_SET_BLOCK_SIZE", 0x00004c09 },
 { "LOOP_CTL_ADD", 0x00004c80 },
 { "LOOP_CTL_REMOVE", 0x00004c81 },
 { "LOOP_CTL_GET_FREE", 0x00004c82 },
@@ -1079,7 +1080,6 @@
 { "NCP_IOC_GETDENTRYTTL", 0x40046e0c },
 { "SISFB_SET_AUTOMAXIMIZE_OLD", 0x40046efa },
 { "UBI_IOCRMVOL", 0x40046f01 },
-{ "DMX_SET_SOURCE", 0x40046f31 },
 { "UBI_IOCDET", 0x40046f41 },
 { "PPSETMODE", 0x40047080 },
 { "PPDATADIR", 0x40047090 },
@@ -1243,6 +1243,7 @@
 { "DRM_IOCTL_RADEON_GEM_WAIT_IDLE", 0x40086464 },
 { "DRM_IOCTL_I915_GEM_CONTEXT_DESTROY", 0x4008646e },
 { "DRM_IOCTL_I915_GEM_SET_CACHING", 0x4008646f },
+{ "DRM_IOCTL_I915_PERF_REMOVE_CONFIG", 0x40086478 },
 { "DRM_IOCTL_NOUVEAU_GEM_CPU_PREP", 0x40086482 },
 { "FS_IOC_SETFLAGS", 0x40086602 },
 { "HPET_IRQFREQ", 0x40086806 },
@@ -1259,7 +1260,6 @@
 { "MATROXFB_SET_OUTPUT_MODE", 0x40086efa },
 { "AUDIO_SET_MIXER", 0x40086f0e },
 { "VIDEO_SET_SPU", 0x40086f32 },
-{ "CA_SET_PID", 0x40086f87 },
 { "PHN_SET_REG", 0x40087001 },
 { "PHN_SET_REGS", 0x40087003 },
 { "PHN_SETREG", 0x40087006 },
@@ -1573,6 +1573,7 @@
 { "SNDRV_TIMER_IOCTL_GPARAMS", 0x40485404 },
 { "BC_TRANSACTION_SG", 0x40486311 },
 { "BC_REPLY_SG", 0x40486312 },
+{ "DRM_IOCTL_I915_PERF_ADD_CONFIG", 0x40486477 },
 { "BTRFS_IOC_SEND", 0x40489426 },
 { "GSMIOC_SETCONF", 0x404c4701 },
 { "SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT", 0x404c534a },
@@ -1923,7 +1924,6 @@
 { "MATROXFB_GET_AVAILABLE_OUTPUTS", 0x80086ef9 },
 { "MATROXFB_GET_ALL_OUTPUTS", 0x80086efb },
 { "AUDIO_GET_PTS", 0x80086f13 },
-{ "DMX_GET_CAPS", 0x80086f30 },
 { "VIDEO_GET_PTS", 0x80086f39 },
 { "VIDEO_GET_FRAME_COUNT", 0x80086f3a },
 { "CA_GET_DESCR_INFO", 0x80086f83 },
@@ -2283,6 +2283,7 @@
 { "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 },
@@ -2292,6 +2293,7 @@
 { "SNDRV_EMU10K1_IOCTL_TRAM_PEEK", 0xc0104822 },
 { "SNDRV_EMUX_IOCTL_LOAD_PATCH", 0xc0104881 },
 { "SNDRV_EMUX_IOCTL_MISC_MODE", 0xc0104884 },
+{ "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", 0xc0104b11 },
 { "MEMWRITEOOB", 0xc0104d03 },
 { "MEMREADOOB", 0xc0104d04 },
 { "MEMGETREGIONINFO", 0xc0104d08 },
@@ -2348,6 +2350,7 @@
 { "DRM_IOCTL_TEGRA_GET_SYNCPT_BASE", 0xc0106449 },
 { "DRM_IOCTL_VC4_GET_TILING", 0xc0106449 },
 { "DRM_IOCTL_TEGRA_GEM_SET_TILING", 0xc010644a },
+{ "DRM_IOCTL_VC4_LABEL_BO", 0xc010644a },
 { "DRM_IOCTL_TEGRA_GEM_GET_TILING", 0xc010644b },
 { "DRM_IOCTL_RADEON_INDIRECT", 0xc010644d },
 { "DRM_IOCTL_R128_INDIRECT", 0xc010644f },
@@ -2370,6 +2373,8 @@
 { "DRM_IOCTL_MODE_CREATEPROPBLOB", 0xc01064bd },
 { "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", 0xc01064c1 },
 { "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", 0xc01064c2 },
+{ "DRM_IOCTL_SYNCOBJ_RESET", 0xc01064c4 },
+{ "DRM_IOCTL_SYNCOBJ_SIGNAL", 0xc01064c5 },
 { "MGSL_IOCWAITGPIO", 0xc0106d12 },
 { "NCP_IOC_GETPRIVATEDATA", 0xc0106e0a },
 { "DMX_GET_STC", 0xc0106f32 },
@@ -2412,6 +2417,7 @@
 { "USBDEVFS_BULK", 0xc0185502 },
 { "PACKET_CTRL_CMD", 0xc0185801 },
 { "FITRIM", 0xc0185879 },
+{ "BINDER_GET_NODE_DEBUG_INFO", 0xc018620b },
 { "DRM_IOCTL_MAP_BUFS", 0xc0186419 },
 { "DRM_IOCTL_WAIT_VBLANK", 0xc018643a },
 { "DRM_IOCTL_AMDGPU_BO_LIST", 0xc0186443 },
@@ -2503,6 +2509,7 @@
 { "DRM_IOCTL_MODE_CREATE_DUMB", 0xc02064b2 },
 { "DRM_IOCTL_MODE_GETPLANE", 0xc02064b6 },
 { "DRM_IOCTL_MODE_OBJ_GETPROPERTIES", 0xc02064b9 },
+{ "DRM_IOCTL_SYNCOBJ_WAIT", 0xc02064c3 },
 { "FS_IOC_FIEMAP", 0xc020660b },
 { "GENWQE_PIN_MEM", 0xc020a528 },
 { "GENWQE_UNPIN_MEM", 0xc020a529 },
@@ -2516,6 +2523,7 @@
 { "IB_USER_MAD_REGISTER_AGENT2", 0xc0281b04 },
 { "FW_CDEV_IOC_GET_INFO", 0xc0282300 },
 { "AMDKFD_IOC_GET_CLOCK_COUNTERS", 0xc0284b05 },
+{ "AMDKFD_IOC_GET_TILE_CONFIG", 0xc0284b12 },
 { "VIDIOC_G_EDID", 0xc0285628 },
 { "VIDIOC_SUBDEV_G_EDID", 0xc0285628 },
 { "VIDIOC_SUBDEV_S_EDID", 0xc0285629 },
diff --git a/ioctlent1.h b/ioctlent1.h
index 436aa37..f5301b8 100644
--- a/ioctlent1.h
+++ b/ioctlent1.h
@@ -324,6 +324,7 @@
 { "LOOP_CHANGE_FD", 0x00004c06 },
 { "LOOP_SET_CAPACITY", 0x00004c07 },
 { "LOOP_SET_DIRECT_IO", 0x00004c08 },
+{ "LOOP_SET_BLOCK_SIZE", 0x00004c09 },
 { "LOOP_CTL_ADD", 0x00004c80 },
 { "LOOP_CTL_REMOVE", 0x00004c81 },
 { "LOOP_CTL_GET_FREE", 0x00004c82 },
@@ -865,7 +866,6 @@
 { "KVM_CREATE_VM", 0x0000ae01 },
 { "KVM_CHECK_EXTENSION", 0x0000ae03 },
 { "KVM_GET_VCPU_MMAP_SIZE", 0x0000ae04 },
-{ "KVM_S390_ENABLE_SIE", 0x0000ae06 },
 { "KVM_CREATE_VCPU", 0x0000ae41 },
 { "KVM_SET_NR_MMU_PAGES", 0x0000ae44 },
 { "KVM_GET_NR_MMU_PAGES", 0x0000ae45 },
@@ -875,7 +875,6 @@
 { "KVM_REINJECT_CONTROL", 0x0000ae71 },
 { "KVM_SET_BOOT_CPU_ID", 0x0000ae78 },
 { "KVM_RUN", 0x0000ae80 },
-{ "KVM_S390_INITIAL_RESET", 0x0000ae97 },
 { "KVM_NMI", 0x0000ae9a },
 { "KVM_SET_TSC_KHZ", 0x0000aea2 },
 { "KVM_GET_TSC_KHZ", 0x0000aea3 },
@@ -1070,7 +1069,6 @@
 { "VIDIOC_S_PRIORITY", 0x40045644 },
 { "IVTV_IOC_PASSTHROUGH_MODE", 0x400456c1 },
 { "VIDIOC_AM437X_CCDC_CFG", 0x400456c1 },
-{ "VPFE_CMD_S_CCDC_RAW_PARAMS", 0x400456c1 },
 { "SNDRV_RAWMIDI_IOCTL_DROP", 0x40045730 },
 { "SNDRV_RAWMIDI_IOCTL_DRAIN", 0x40045731 },
 { "CEC_S_MODE", 0x40046109 },
@@ -1131,7 +1129,6 @@
 { "MATROXFB_SET_OUTPUT_MODE", 0x40046efa },
 { "SISFB_SET_AUTOMAXIMIZE_OLD", 0x40046efa },
 { "UBI_IOCRMVOL", 0x40046f01 },
-{ "DMX_SET_SOURCE", 0x40046f31 },
 { "UBI_IOCDET", 0x40046f41 },
 { "PHN_SET_REG", 0x40047001 },
 { "PHN_SET_REGS", 0x40047003 },
@@ -1216,10 +1213,8 @@
 { "BTRFS_IOC_CLONE", 0x40049409 },
 { "FICLONE", 0x40049409 },
 { "BTRFS_IOC_BALANCE_CTL", 0x40049421 },
-{ "KVM_S390_VCPU_FAULT", 0x4004ae52 },
 { "KVM_INTERRUPT", 0x4004ae86 },
 { "KVM_SET_SIGNAL_MASK", 0x4004ae8b },
-{ "KVM_S390_STORE_STATUS", 0x4004ae95 },
 { "KVM_SET_MP_STATE", 0x4004ae99 },
 { "VHOST_SET_LOG_FD", 0x4004af07 },
 { "VHOST_SCSI_GET_ABI_VERSION", 0x4004af42 },
@@ -1312,6 +1307,7 @@
 { "DRM_IOCTL_RADEON_GEM_WAIT_IDLE", 0x40086464 },
 { "DRM_IOCTL_I915_GEM_CONTEXT_DESTROY", 0x4008646e },
 { "DRM_IOCTL_I915_GEM_SET_CACHING", 0x4008646f },
+{ "DRM_IOCTL_I915_PERF_REMOVE_CONFIG", 0x40086478 },
 { "DRM_IOCTL_NOUVEAU_GEM_CPU_PREP", 0x40086482 },
 { "MTIOCTOP", 0x40086d01 },
 { "RIO_ENABLE_DOORBELL_RANGE", 0x40086d09 },
@@ -1326,7 +1322,6 @@
 { "VIDEO_SET_SPU", 0x40086f32 },
 { "VIDEO_SET_SPU_PALETTE", 0x40086f33 },
 { "FE_SET_PROPERTY", 0x40086f52 },
-{ "CA_SET_PID", 0x40086f87 },
 { "PHN_SETREG", 0x40087006 },
 { "PPSETTIME", 0x40087096 },
 { "PPPIOCSACTIVE", 0x40087446 },
@@ -1343,7 +1338,6 @@
 { "KVM_ASSIGN_SET_MSIX_NR", 0x4008ae73 },
 { "KVM_SET_VAPIC_ADDR", 0x4008ae93 },
 { "KVM_SET_GUEST_DEBUG", 0x4008ae9b },
-{ "KVM_X86_SETUP_MCE", 0x4008ae9c },
 { "VHOST_SET_FEATURES", 0x4008af00 },
 { "VHOST_SET_MEM_TABLE", 0x4008af03 },
 { "VHOST_SET_LOG_BASE", 0x4008af04 },
@@ -1475,8 +1469,6 @@
 { "KVM_REGISTER_COALESCED_MMIO", 0x4010ae67 },
 { "KVM_UNREGISTER_COALESCED_MMIO", 0x4010ae68 },
 { "KVM_ASSIGN_SET_MSIX_ENTRY", 0x4010ae74 },
-{ "KVM_S390_INTERRUPT", 0x4010ae94 },
-{ "KVM_S390_SET_INITIAL_PSW", 0x4010ae96 },
 { "KVM_DIRTY_TLB", 0x4010aeaa },
 { "KVM_ARM_SET_DEVICE_ADDR", 0x4010aeab },
 { "KVM_GET_ONE_REG", 0x4010aeab },
@@ -1525,8 +1517,6 @@
 { "IOC_PR_PREEMPT_ABORT", 0x401870cc },
 { "BTRFS_IOC_QGROUP_ASSIGN", 0x40189429 },
 { "KVM_SET_MEMORY_REGION", 0x4018ae40 },
-{ "KVM_S390_UCAS_MAP", 0x4018ae50 },
-{ "KVM_S390_UCAS_UNMAP", 0x4018ae51 },
 { "KVM_SET_DEVICE_ATTR", 0x4018aee1 },
 { "KVM_GET_DEVICE_ATTR", 0x4018aee2 },
 { "KVM_HAS_DEVICE_ATTR", 0x4018aee3 },
@@ -1559,9 +1549,6 @@
 { "KVM_IRQFD", 0x4020ae76 },
 { "KVM_SIGNAL_MSI", 0x4020aea5 },
 { "KVM_ARM_VCPU_INIT", 0x4020aeae },
-{ "KVM_S390_SET_IRQ_STATE", 0x4020aeb5 },
-{ "KVM_S390_GET_IRQ_STATE", 0x4020aeb6 },
-{ "KVM_S390_SET_CMMA_BITS", 0x4020aeb9 },
 { "SNDRV_COMPRESS_SET_METADATA", 0x40244314 },
 { "NVM_DEV_REMOVE", 0x40244c23 },
 { "NVM_DEV_FACTORY", 0x40244c25 },
@@ -1624,9 +1611,6 @@
 { "KVM_CREATE_PIT2", 0x4040ae77 },
 { "KVM_IOEVENTFD", 0x4040ae79 },
 { "KVM_ASSIGN_SET_INTX_MASK", 0x4040aea4 },
-{ "KVM_S390_MEM_OP", 0x4040aeb1 },
-{ "KVM_S390_GET_SKEYS", 0x4040aeb2 },
-{ "KVM_S390_SET_SKEYS", 0x4040aeb3 },
 { "CXL_IOCTL_START_WORK", 0x4040ca00 },
 { "CXL_IOCTL_DOWNLOAD_IMAGE", 0x4040ca0a },
 { "CXL_IOCTL_VALIDATE_IMAGE", 0x4040ca0b },
@@ -1639,8 +1623,8 @@
 { "SNDRV_EMU10K1_IOCTL_PCM_POKE", 0x40484830 },
 { "BC_TRANSACTION_SG", 0x40486311 },
 { "BC_REPLY_SG", 0x40486312 },
+{ "DRM_IOCTL_I915_PERF_ADD_CONFIG", 0x40486477 },
 { "BTRFS_IOC_SEND", 0x40489426 },
-{ "KVM_S390_IRQ", 0x4048aeb4 },
 { "GSMIOC_SETCONF", 0x404c4701 },
 { "SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT", 0x404c534a },
 { "SNDRV_HWDEP_IOCTL_DSP_LOAD", 0x40504803 },
@@ -1665,7 +1649,6 @@
 { "NVM_DEV_CREATE", 0x40804c22 },
 { "UBI_IOCVOLCRBLK", 0x40804f07 },
 { "V4L2_DEVICE_NOTIFY_EVENT", 0x40807602 },
-{ "KVM_PPC_GET_PVINFO", 0x4080aea1 },
 { "SNDRV_COMPRESS_SET_PARAMS", 0x40844312 },
 { "SNDRV_SEQ_IOCTL_DELETE_QUEUE", 0x408c5333 },
 { "VIDIOC_S_JPEGCOMP", 0x408c563e },
@@ -2013,7 +1996,6 @@
 { "NCP_IOC_SETPRIVATEDATA", 0x80086e0a },
 { "NILFS_IOCTL_SYNC", 0x80086e8a },
 { "AUDIO_GET_PTS", 0x80086f13 },
-{ "DMX_GET_CAPS", 0x80086f30 },
 { "VIDEO_GET_PTS", 0x80086f39 },
 { "VIDEO_GET_FRAME_COUNT", 0x80086f3a },
 { "FE_GET_PROPERTY", 0x80086f53 },
@@ -2026,7 +2008,6 @@
 { "BTRFS_IOC_START_SYNC", 0x80089418 },
 { "BTRFS_IOC_SUBVOL_GETFLAGS", 0x80089419 },
 { "TEE_IOC_CANCEL", 0x8008a404 },
-{ "KVM_X86_GET_MCE_CAP_SUPPORTED", 0x8008ae9d },
 { "VHOST_GET_FEATURES", 0x8008af00 },
 { "FUNCTIONFS_ENDPOINT_DESC", 0x80096782 },
 { "DMX_GET_PES_PIDS", 0x800a6f2f },
@@ -2078,8 +2059,6 @@
 { "GENWQE_READ_REG16", 0x8010a522 },
 { "UFFDIO_UNREGISTER", 0x8010aa01 },
 { "UFFDIO_WAKE", 0x8010aa02 },
-{ "KVM_PPC_RESIZE_HPT_PREPARE", 0x8010aead },
-{ "KVM_PPC_RESIZE_HPT_COMMIT", 0x8010aeae },
 { "FDGETMAXERRS", 0x8014020e },
 { "GET_DISK_INFO", 0x80140912 },
 { "SNDRV_COMPRESS_TSTAMP", 0x80144320 },
@@ -2200,7 +2179,6 @@
 { "KVM_SET_IRQCHIP", 0x8208ae63 },
 { "VFAT_IOCTL_READDIR_BOTH", 0x82187201 },
 { "VFAT_IOCTL_READDIR_SHORT", 0x82187202 },
-{ "KVM_PPC_GET_SMMU_INFO", 0x8250aea6 },
 { "SNDRV_HDSP_IOCTL_GET_PEAK_RMS", 0x83b04840 },
 { "JSIOCGBTNMAP", 0x84006a34 },
 { "BTRFS_IOC_FS_INFO", 0x8400941f },
@@ -2292,7 +2270,6 @@
 { "PPPIOCNEWUNIT", 0xc004743e },
 { "MEYEIOC_SYNC", 0xc00476c3 },
 { "AUTOFS_IOC_SETTIMEOUT", 0xc0049364 },
-{ "KVM_PPC_ALLOCATE_HTAB", 0xc004aea7 },
 { "NET_ADD_IF", 0xc0066f34 },
 { "NET_GET_IF", 0xc0066f36 },
 { "CAPI_MANUFACTURER_CMD", 0xc0084320 },
@@ -2387,6 +2364,7 @@
 { "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 },
@@ -2394,6 +2372,7 @@
 { "HIDIOCGCOLLECTIONINFO", 0xc0104811 },
 { "SNDRV_EMUX_IOCTL_LOAD_PATCH", 0xc0104881 },
 { "SNDRV_EMUX_IOCTL_MISC_MODE", 0xc0104884 },
+{ "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", 0xc0104b11 },
 { "MEMGETREGIONINFO", 0xc0104d08 },
 { "SNDRV_SEQ_IOCTL_RUNNING_MODE", 0xc0105303 },
 { "USBDEVFS_CONTROL", 0xc0105500 },
@@ -2445,6 +2424,7 @@
 { "DRM_IOCTL_TEGRA_GET_SYNCPT_BASE", 0xc0106449 },
 { "DRM_IOCTL_VC4_GET_TILING", 0xc0106449 },
 { "DRM_IOCTL_TEGRA_GEM_SET_TILING", 0xc010644a },
+{ "DRM_IOCTL_VC4_LABEL_BO", 0xc010644a },
 { "DRM_IOCTL_TEGRA_GEM_GET_TILING", 0xc010644b },
 { "DRM_IOCTL_RADEON_INDIRECT", 0xc010644d },
 { "DRM_IOCTL_VIA_WAIT_IRQ", 0xc010644d },
@@ -2467,6 +2447,8 @@
 { "DRM_IOCTL_MODE_CREATEPROPBLOB", 0xc01064bd },
 { "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", 0xc01064c1 },
 { "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", 0xc01064c2 },
+{ "DRM_IOCTL_SYNCOBJ_RESET", 0xc01064c4 },
+{ "DRM_IOCTL_SYNCOBJ_SIGNAL", 0xc01064c5 },
 { "MGSL_IOCWAITGPIO", 0xc0106d12 },
 { "DMX_GET_STC", 0xc0106f32 },
 { "SCIF_ACCEPTREQ", 0xc0107304 },
@@ -2511,6 +2493,7 @@
 { "VIDIOC_OMAP3ISP_STAT_REQ", 0xc01856c6 },
 { "PACKET_CTRL_CMD", 0xc0185801 },
 { "FITRIM", 0xc0185879 },
+{ "BINDER_GET_NODE_DEBUG_INFO", 0xc018620b },
 { "DRM_IOCTL_GET_MAP", 0xc0186404 },
 { "DRM_IOCTL_GET_CLIENT", 0xc0186405 },
 { "DRM_IOCTL_ADD_MAP", 0xc0186415 },
@@ -2600,12 +2583,12 @@
 { "DRM_IOCTL_MODE_CREATE_DUMB", 0xc02064b2 },
 { "DRM_IOCTL_MODE_GETPLANE", 0xc02064b6 },
 { "DRM_IOCTL_MODE_OBJ_GETPROPERTIES", 0xc02064b9 },
+{ "DRM_IOCTL_SYNCOBJ_WAIT", 0xc02064c3 },
 { "FS_IOC_FIEMAP", 0xc020660b },
 { "GENWQE_PIN_MEM", 0xc020a528 },
 { "GENWQE_UNPIN_MEM", 0xc020a529 },
 { "UFFDIO_REGISTER", 0xc020aa00 },
 { "UFFDIO_ZEROPAGE", 0xc020aa04 },
-{ "KVM_S390_GET_CMMA_BITS", 0xc020aeb8 },
 { "SNDCTL_MIDI_MPUCMD", 0xc0216d02 },
 { "SNDRV_COMPRESS_GET_METADATA", 0xc0244315 },
 { "VIDIOC_G_EDID", 0xc0245628 },
@@ -2621,6 +2604,7 @@
 { "IB_USER_MAD_REGISTER_AGENT2", 0xc0281b04 },
 { "FW_CDEV_IOC_GET_INFO", 0xc0282300 },
 { "AMDKFD_IOC_GET_CLOCK_COUNTERS", 0xc0284b05 },
+{ "AMDKFD_IOC_GET_TILE_CONFIG", 0xc0284b12 },
 { "VIDIOC_ENCODER_CMD", 0xc028564d },
 { "VIDIOC_TRY_ENCODER_CMD", 0xc028564e },
 { "SWITCHTEC_IOCTL_EVENT_CTL", 0xc0285743 },
diff --git a/ioctlent2.h b/ioctlent2.h
index 9065d16..4fb7d07 100644
--- a/ioctlent2.h
+++ b/ioctlent2.h
@@ -324,6 +324,7 @@
 { "LOOP_CHANGE_FD", 0x00004c06 },
 { "LOOP_SET_CAPACITY", 0x00004c07 },
 { "LOOP_SET_DIRECT_IO", 0x00004c08 },
+{ "LOOP_SET_BLOCK_SIZE", 0x00004c09 },
 { "LOOP_CTL_ADD", 0x00004c80 },
 { "LOOP_CTL_REMOVE", 0x00004c81 },
 { "LOOP_CTL_GET_FREE", 0x00004c82 },
@@ -865,7 +866,6 @@
 { "KVM_CREATE_VM", 0x0000ae01 },
 { "KVM_CHECK_EXTENSION", 0x0000ae03 },
 { "KVM_GET_VCPU_MMAP_SIZE", 0x0000ae04 },
-{ "KVM_S390_ENABLE_SIE", 0x0000ae06 },
 { "KVM_CREATE_VCPU", 0x0000ae41 },
 { "KVM_SET_NR_MMU_PAGES", 0x0000ae44 },
 { "KVM_GET_NR_MMU_PAGES", 0x0000ae45 },
@@ -875,7 +875,6 @@
 { "KVM_REINJECT_CONTROL", 0x0000ae71 },
 { "KVM_SET_BOOT_CPU_ID", 0x0000ae78 },
 { "KVM_RUN", 0x0000ae80 },
-{ "KVM_S390_INITIAL_RESET", 0x0000ae97 },
 { "KVM_NMI", 0x0000ae9a },
 { "KVM_SET_TSC_KHZ", 0x0000aea2 },
 { "KVM_GET_TSC_KHZ", 0x0000aea3 },
@@ -1128,7 +1127,6 @@
 { "MATROXFB_SET_OUTPUT_MODE", 0x40046efa },
 { "SISFB_SET_AUTOMAXIMIZE_OLD", 0x40046efa },
 { "UBI_IOCRMVOL", 0x40046f01 },
-{ "DMX_SET_SOURCE", 0x40046f31 },
 { "UBI_IOCDET", 0x40046f41 },
 { "PHN_SET_REG", 0x40047001 },
 { "PHN_SET_REGS", 0x40047003 },
@@ -1307,6 +1305,7 @@
 { "DRM_IOCTL_RADEON_GEM_WAIT_IDLE", 0x40086464 },
 { "DRM_IOCTL_I915_GEM_CONTEXT_DESTROY", 0x4008646e },
 { "DRM_IOCTL_I915_GEM_SET_CACHING", 0x4008646f },
+{ "DRM_IOCTL_I915_PERF_REMOVE_CONFIG", 0x40086478 },
 { "DRM_IOCTL_NOUVEAU_GEM_CPU_PREP", 0x40086482 },
 { "MTIOCTOP", 0x40086d01 },
 { "RIO_ENABLE_DOORBELL_RANGE", 0x40086d09 },
@@ -1321,7 +1320,6 @@
 { "VIDEO_SET_SPU", 0x40086f32 },
 { "VIDEO_SET_SPU_PALETTE", 0x40086f33 },
 { "FE_SET_PROPERTY", 0x40086f52 },
-{ "CA_SET_PID", 0x40086f87 },
 { "PHN_SETREG", 0x40087006 },
 { "PPPIOCSACTIVE", 0x40087446 },
 { "PPPIOCSPASS", 0x40087447 },
@@ -1332,7 +1330,6 @@
 { "BTRFS_IOC_WAIT_SYNC", 0x40089416 },
 { "BTRFS_IOC_SUBVOL_SETFLAGS", 0x4008941a },
 { "KVM_SET_IDENTITY_MAP_ADDR", 0x4008ae48 },
-{ "KVM_S390_VCPU_FAULT", 0x4008ae52 },
 { "KVM_IRQ_LINE", 0x4008ae61 },
 { "KVM_SET_GSI_ROUTING", 0x4008ae6a },
 { "KVM_ASSIGN_SET_MSIX_NR", 0x4008ae73 },
@@ -1340,7 +1337,6 @@
 { "KVM_SET_CPUID", 0x4008ae8a },
 { "KVM_SET_CPUID2", 0x4008ae90 },
 { "KVM_SET_VAPIC_ADDR", 0x4008ae93 },
-{ "KVM_S390_STORE_STATUS", 0x4008ae95 },
 { "KVM_X86_SETUP_MCE", 0x4008ae9c },
 { "VHOST_SET_FEATURES", 0x4008af00 },
 { "VHOST_SET_MEM_TABLE", 0x4008af03 },
@@ -1482,10 +1478,7 @@
 { "KVM_REGISTER_COALESCED_MMIO", 0x4010ae67 },
 { "KVM_UNREGISTER_COALESCED_MMIO", 0x4010ae68 },
 { "KVM_ASSIGN_SET_MSIX_ENTRY", 0x4010ae74 },
-{ "KVM_S390_INTERRUPT", 0x4010ae94 },
-{ "KVM_S390_SET_INITIAL_PSW", 0x4010ae96 },
 { "KVM_DIRTY_TLB", 0x4010aeaa },
-{ "KVM_ARM_SET_DEVICE_ADDR", 0x4010aeab },
 { "KVM_GET_ONE_REG", 0x4010aeab },
 { "KVM_SET_ONE_REG", 0x4010aeac },
 { "ASPEED_LPC_CTRL_IOCTL_MAP", 0x4010b201 },
@@ -1532,8 +1525,6 @@
 { "IOC_PR_PREEMPT_ABORT", 0x401870cc },
 { "BTRFS_IOC_QGROUP_ASSIGN", 0x40189429 },
 { "KVM_SET_MEMORY_REGION", 0x4018ae40 },
-{ "KVM_S390_UCAS_MAP", 0x4018ae50 },
-{ "KVM_S390_UCAS_UNMAP", 0x4018ae51 },
 { "KVM_SET_DEVICE_ATTR", 0x4018aee1 },
 { "KVM_GET_DEVICE_ATTR", 0x4018aee2 },
 { "KVM_HAS_DEVICE_ATTR", 0x4018aee3 },
@@ -1566,9 +1557,6 @@
 { "KVM_SET_USER_MEMORY_REGION", 0x4020ae46 },
 { "KVM_IRQFD", 0x4020ae76 },
 { "KVM_SIGNAL_MSI", 0x4020aea5 },
-{ "KVM_S390_SET_IRQ_STATE", 0x4020aeb5 },
-{ "KVM_S390_GET_IRQ_STATE", 0x4020aeb6 },
-{ "KVM_S390_SET_CMMA_BITS", 0x4020aeb9 },
 { "SNDRV_COMPRESS_SET_METADATA", 0x40244314 },
 { "NVM_DEV_REMOVE", 0x40244c23 },
 { "NVM_DEV_FACTORY", 0x40244c25 },
@@ -1634,9 +1622,6 @@
 { "KVM_X86_SET_MCE", 0x4040ae9e },
 { "KVM_SET_VCPU_EVENTS", 0x4040aea0 },
 { "KVM_ASSIGN_SET_INTX_MASK", 0x4040aea4 },
-{ "KVM_S390_MEM_OP", 0x4040aeb1 },
-{ "KVM_S390_GET_SKEYS", 0x4040aeb2 },
-{ "KVM_S390_SET_SKEYS", 0x4040aeb3 },
 { "CXL_IOCTL_START_WORK", 0x4040ca00 },
 { "CXL_IOCTL_DOWNLOAD_IMAGE", 0x4040ca0a },
 { "CXL_IOCTL_VALIDATE_IMAGE", 0x4040ca0b },
@@ -1649,9 +1634,9 @@
 { "SNDRV_EMU10K1_IOCTL_PCM_POKE", 0x40484830 },
 { "BC_TRANSACTION_SG", 0x40486311 },
 { "BC_REPLY_SG", 0x40486312 },
+{ "DRM_IOCTL_I915_PERF_ADD_CONFIG", 0x40486477 },
 { "BTRFS_IOC_SEND", 0x40489426 },
 { "KVM_SET_GUEST_DEBUG", 0x4048ae9b },
-{ "KVM_S390_IRQ", 0x4048aeb4 },
 { "GSMIOC_SETCONF", 0x404c4701 },
 { "SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT", 0x404c534a },
 { "SNDRV_HWDEP_IOCTL_DSP_LOAD", 0x40504803 },
@@ -1676,7 +1661,6 @@
 { "NILFS_IOCTL_CLEAN_SEGMENTS", 0x40786e88 },
 { "NVM_DEV_CREATE", 0x40804c22 },
 { "UBI_IOCVOLCRBLK", 0x40804f07 },
-{ "KVM_PPC_GET_PVINFO", 0x4080aea1 },
 { "KVM_SET_DEBUGREGS", 0x4080aea2 },
 { "SNDRV_COMPRESS_SET_PARAMS", 0x40844312 },
 { "V4L2_DEVICE_NOTIFY_EVENT", 0x40887602 },
@@ -2032,7 +2016,6 @@
 { "NCP_IOC_SETPRIVATEDATA", 0x80086e0a },
 { "NILFS_IOCTL_SYNC", 0x80086e8a },
 { "AUDIO_GET_PTS", 0x80086f13 },
-{ "DMX_GET_CAPS", 0x80086f30 },
 { "VIDEO_GET_PTS", 0x80086f39 },
 { "VIDEO_GET_FRAME_COUNT", 0x80086f3a },
 { "FE_GET_PROPERTY", 0x80086f53 },
@@ -2096,8 +2079,6 @@
 { "GENWQE_READ_REG16", 0x8010a522 },
 { "UFFDIO_UNREGISTER", 0x8010aa01 },
 { "UFFDIO_WAKE", 0x8010aa02 },
-{ "KVM_PPC_RESIZE_HPT_PREPARE", 0x8010aead },
-{ "KVM_PPC_RESIZE_HPT_COMMIT", 0x8010aeae },
 { "FDGETMAXERRS", 0x8014020e },
 { "GET_DISK_INFO", 0x80140912 },
 { "SNDRV_COMPRESS_TSTAMP", 0x80144320 },
@@ -2225,7 +2206,6 @@
 { "KVM_SET_IRQCHIP", 0x8208ae63 },
 { "VFAT_IOCTL_READDIR_BOTH", 0x82307201 },
 { "VFAT_IOCTL_READDIR_SHORT", 0x82307202 },
-{ "KVM_PPC_GET_SMMU_INFO", 0x8250aea6 },
 { "SNDRV_HDSP_IOCTL_GET_PEAK_RMS", 0x83b04840 },
 { "JSIOCGBTNMAP", 0x84006a34 },
 { "BTRFS_IOC_FS_INFO", 0x8400941f },
@@ -2320,7 +2300,6 @@
 { "MEYEIOC_SYNC", 0xc00476c3 },
 { "AUTOFS_IOC_SETTIMEOUT", 0xc0049364 },
 { "KVM_GET_MSR_INDEX_LIST", 0xc004ae02 },
-{ "KVM_PPC_ALLOCATE_HTAB", 0xc004aea7 },
 { "NET_ADD_IF", 0xc0066f34 },
 { "NET_GET_IF", 0xc0066f36 },
 { "CAPI_MANUFACTURER_CMD", 0xc0084320 },
@@ -2419,6 +2398,7 @@
 { "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 },
@@ -2426,6 +2406,7 @@
 { "HIDIOCGCOLLECTIONINFO", 0xc0104811 },
 { "SNDRV_EMUX_IOCTL_LOAD_PATCH", 0xc0104881 },
 { "SNDRV_EMUX_IOCTL_MISC_MODE", 0xc0104884 },
+{ "AMDKFD_IOC_SET_SCRATCH_BACKING_VA", 0xc0104b11 },
 { "MEMGETREGIONINFO", 0xc0104d08 },
 { "SNDRV_SEQ_IOCTL_RUNNING_MODE", 0xc0105303 },
 { "USBDEVFS_CONTROL", 0xc0105500 },
@@ -2477,6 +2458,7 @@
 { "DRM_IOCTL_TEGRA_GET_SYNCPT_BASE", 0xc0106449 },
 { "DRM_IOCTL_VC4_GET_TILING", 0xc0106449 },
 { "DRM_IOCTL_TEGRA_GEM_SET_TILING", 0xc010644a },
+{ "DRM_IOCTL_VC4_LABEL_BO", 0xc010644a },
 { "DRM_IOCTL_TEGRA_GEM_GET_TILING", 0xc010644b },
 { "DRM_IOCTL_RADEON_INDIRECT", 0xc010644d },
 { "DRM_IOCTL_VIA_WAIT_IRQ", 0xc010644d },
@@ -2499,6 +2481,8 @@
 { "DRM_IOCTL_MODE_CREATEPROPBLOB", 0xc01064bd },
 { "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", 0xc01064c1 },
 { "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", 0xc01064c2 },
+{ "DRM_IOCTL_SYNCOBJ_RESET", 0xc01064c4 },
+{ "DRM_IOCTL_SYNCOBJ_SIGNAL", 0xc01064c5 },
 { "MGSL_IOCWAITGPIO", 0xc0106d12 },
 { "DMX_GET_STC", 0xc0106f32 },
 { "SCIF_ACCEPTREQ", 0xc0107304 },
@@ -2544,6 +2528,7 @@
 { "VIDIOC_TRY_EXT_CTRLS", 0xc0185649 },
 { "PACKET_CTRL_CMD", 0xc0185801 },
 { "FITRIM", 0xc0185879 },
+{ "BINDER_GET_NODE_DEBUG_INFO", 0xc018620b },
 { "DRM_IOCTL_GET_MAP", 0xc0186404 },
 { "DRM_IOCTL_GET_CLIENT", 0xc0186405 },
 { "DRM_IOCTL_ADD_MAP", 0xc0186415 },
@@ -2636,12 +2621,12 @@
 { "DRM_IOCTL_MODE_CREATE_DUMB", 0xc02064b2 },
 { "DRM_IOCTL_MODE_GETPLANE", 0xc02064b6 },
 { "DRM_IOCTL_MODE_OBJ_GETPROPERTIES", 0xc02064b9 },
+{ "DRM_IOCTL_SYNCOBJ_WAIT", 0xc02064c3 },
 { "FS_IOC_FIEMAP", 0xc020660b },
 { "GENWQE_PIN_MEM", 0xc020a528 },
 { "GENWQE_UNPIN_MEM", 0xc020a529 },
 { "UFFDIO_REGISTER", 0xc020aa00 },
 { "UFFDIO_ZEROPAGE", 0xc020aa04 },
-{ "KVM_S390_GET_CMMA_BITS", 0xc020aeb8 },
 { "SNDCTL_MIDI_MPUCMD", 0xc0216d02 },
 { "SNDRV_COMPRESS_GET_METADATA", 0xc0244315 },
 { "VIDIOC_G_EDID", 0xc0245628 },
@@ -2656,6 +2641,7 @@
 { "IB_USER_MAD_REGISTER_AGENT2", 0xc0281b04 },
 { "FW_CDEV_IOC_GET_INFO", 0xc0282300 },
 { "AMDKFD_IOC_GET_CLOCK_COUNTERS", 0xc0284b05 },
+{ "AMDKFD_IOC_GET_TILE_CONFIG", 0xc0284b12 },
 { "VIDIOC_ENCODER_CMD", 0xc028564d },
 { "VIDIOC_TRY_ENCODER_CMD", 0xc028564e },
 { "SWITCHTEC_IOCTL_EVENT_CTL", 0xc0285743 },
diff --git a/kcmp.c b/kcmp.c
index 962952b..ec537a6 100644
--- a/kcmp.c
+++ b/kcmp.c
@@ -27,8 +27,31 @@
  */
 
 #include "defs.h"
+#include "print_fields.h"
 #include "xlat/kcmp_types.h"
 
+struct strace_kcmp_epoll_slot {
+	uint32_t efd;
+	uint32_t tfd;
+	uint32_t toff;
+};
+
+static void
+printpidfd(struct tcb *tcp, pid_t pid, int fd)
+{
+	/*
+	 * XXX We want to use printfd here, but we should figure out which
+	 *     process in strace's PID NS is referred to first.
+	 */
+	tprintf("%d", fd);
+}
+
+#define PRINT_FIELD_PIDFD(prefix_, where_, field_, tcp_, pid_)		\
+	do {								\
+		STRACE_PRINTF("%s%s=", (prefix_), #field_);		\
+		printpidfd((tcp_), (pid_), (where_).field_);		\
+	} while (0)
+
 SYS_FUNC(kcmp)
 {
 	pid_t pid1 = tcp->u_arg[0];
@@ -42,8 +65,31 @@
 
 	switch (type) {
 		case KCMP_FILE:
-			tprintf(", %u, %u", (unsigned) idx1, (unsigned) idx2);
+			tprints(", ");
+			printpidfd(tcp, pid1, idx1);
+			tprints(", ");
+			printpidfd(tcp, pid1, idx2);
+
 			break;
+
+		case KCMP_EPOLL_TFD: {
+			struct strace_kcmp_epoll_slot slot;
+
+			tprints(", ");
+			printpidfd(tcp, pid1, idx1);
+			tprints(", ");
+
+			if (umove_or_printaddr(tcp, idx2, &slot))
+				break;
+
+			PRINT_FIELD_PIDFD("{",  slot, efd, tcp, pid2);
+			PRINT_FIELD_PIDFD(", ", slot, tfd, tcp, pid2);
+			PRINT_FIELD_U(", ", slot, toff);
+			tprints("}");
+
+			break;
+		}
+
 		case KCMP_FILES:
 		case KCMP_FS:
 		case KCMP_IO:
diff --git a/kernel_types.h b/kernel_types.h
index 3651014..79ac171 100644
--- a/kernel_types.h
+++ b/kernel_types.h
@@ -76,7 +76,7 @@
  */
 #if SIZEOF_LONG == 4
 # define PRI__64 "ll"
-#elif defined ALPHA || defined IA64 || defined POWERPC \
+#elif defined ALPHA || defined IA64 || defined __powerpc64__ \
       || (defined MIPS && !defined __ANDROID__)
 # define PRI__64 "l"
 #else
diff --git a/linux/32/ioctls_inc_align16.h b/linux/32/ioctls_inc_align16.h
index 2cef342..175f85f 100644
--- a/linux/32/ioctls_inc_align16.h
+++ b/linux/32/ioctls_inc_align16.h
@@ -183,6 +183,9 @@
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_RESET", _IOC_READ|_IOC_WRITE, 0x64c4, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_SIGNAL", _IOC_READ|_IOC_WRITE, 0x64c5, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_WAIT", _IOC_READ|_IOC_WRITE, 0x64c3, 0x20 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x14 },
@@ -271,7 +274,9 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_IRQ_WAIT", _IOC_WRITE, 0x6445, 0x04 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_ATTRS", _IOC_READ|_IOC_WRITE, 0x6468, 0x2c },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_PUT_IMAGE", _IOC_WRITE, 0x6467, 0x2c },
+{ "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_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 },
@@ -406,6 +411,7 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_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_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
@@ -467,6 +473,7 @@
 { "linux/android/binder.h", "BC_REQUEST_DEATH_NOTIFICATION", _IOC_WRITE, 0x630e, 0x0c },
 { "linux/android/binder.h", "BC_TRANSACTION", _IOC_WRITE, 0x6300, 0x40 },
 { "linux/android/binder.h", "BC_TRANSACTION_SG", _IOC_WRITE, 0x6311, 0x48 },
+{ "linux/android/binder.h", "BINDER_GET_NODE_DEBUG_INFO", _IOC_READ|_IOC_WRITE, 0x620b, 0x18 },
 { "linux/android/binder.h", "BINDER_SET_CONTEXT_MGR", _IOC_WRITE, 0x6207, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_PRIORITY", _IOC_WRITE, 0x6206, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_TIMEOUT", _IOC_WRITE, 0x6203, 0x08 },
@@ -784,16 +791,13 @@
 { "linux/dvb/ca.h", "CA_RESET", _IOC_NONE, 0x6f80, 0x00 },
 { "linux/dvb/ca.h", "CA_SEND_MSG", _IOC_WRITE, 0x6f85, 0x10c },
 { "linux/dvb/ca.h", "CA_SET_DESCR", _IOC_WRITE, 0x6f86, 0x10 },
-{ "linux/dvb/ca.h", "CA_SET_PID", _IOC_WRITE, 0x6f87, 0x08 },
 { "linux/dvb/dmx.h", "DMX_ADD_PID", _IOC_WRITE, 0x6f33, 0x02 },
-{ "linux/dvb/dmx.h", "DMX_GET_CAPS", _IOC_READ, 0x6f30, 0x08 },
 { "linux/dvb/dmx.h", "DMX_GET_PES_PIDS", _IOC_READ, 0x6f2f, 0x0a },
 { "linux/dvb/dmx.h", "DMX_GET_STC", _IOC_READ|_IOC_WRITE, 0x6f32, 0x10 },
 { "linux/dvb/dmx.h", "DMX_REMOVE_PID", _IOC_WRITE, 0x6f34, 0x02 },
 { "linux/dvb/dmx.h", "DMX_SET_BUFFER_SIZE", _IOC_NONE, 0x6f2d, 0x00 },
 { "linux/dvb/dmx.h", "DMX_SET_FILTER", _IOC_WRITE, 0x6f2b, 0x3a },
 { "linux/dvb/dmx.h", "DMX_SET_PES_FILTER", _IOC_WRITE, 0x6f2c, 0x12 },
-{ "linux/dvb/dmx.h", "DMX_SET_SOURCE", _IOC_WRITE, 0x6f31, 0x04 },
 { "linux/dvb/dmx.h", "DMX_START", _IOC_NONE, 0x6f29, 0x00 },
 { "linux/dvb/dmx.h", "DMX_STOP", _IOC_NONE, 0x6f2a, 0x00 },
 { "linux/dvb/frontend.h", "FE_DISEQC_RECV_SLAVE_REPLY", _IOC_READ, 0x6f40, 0x0a },
@@ -1327,10 +1331,12 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 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_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_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_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 },
@@ -1367,6 +1373,7 @@
 { "linux/loop.h", "LOOP_CTL_REMOVE", 0, 0x4C81, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS", 0, 0x4C03, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS64", 0, 0x4C05, 0 },
+{ "linux/loop.h", "LOOP_SET_BLOCK_SIZE", 0, 0x4C09, 0 },
 { "linux/loop.h", "LOOP_SET_CAPACITY", 0, 0x4C07, 0 },
 { "linux/loop.h", "LOOP_SET_DIRECT_IO", 0, 0x4C08, 0 },
 { "linux/loop.h", "LOOP_SET_FD", 0, 0x4C00, 0 },
@@ -2492,6 +2499,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 },
 { "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 6b32df2..165912a 100644
--- a/linux/32/ioctls_inc_align32.h
+++ b/linux/32/ioctls_inc_align32.h
@@ -183,6 +183,9 @@
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_RESET", _IOC_READ|_IOC_WRITE, 0x64c4, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_SIGNAL", _IOC_READ|_IOC_WRITE, 0x64c5, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_WAIT", _IOC_READ|_IOC_WRITE, 0x64c3, 0x20 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x14 },
@@ -271,7 +274,9 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_IRQ_WAIT", _IOC_WRITE, 0x6445, 0x04 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_ATTRS", _IOC_READ|_IOC_WRITE, 0x6468, 0x2c },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_PUT_IMAGE", _IOC_WRITE, 0x6467, 0x2c },
+{ "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_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 },
@@ -406,6 +411,7 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_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_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
@@ -467,6 +473,7 @@
 { "linux/android/binder.h", "BC_REQUEST_DEATH_NOTIFICATION", _IOC_WRITE, 0x630e, 0x0c },
 { "linux/android/binder.h", "BC_TRANSACTION", _IOC_WRITE, 0x6300, 0x40 },
 { "linux/android/binder.h", "BC_TRANSACTION_SG", _IOC_WRITE, 0x6311, 0x48 },
+{ "linux/android/binder.h", "BINDER_GET_NODE_DEBUG_INFO", _IOC_READ|_IOC_WRITE, 0x620b, 0x18 },
 { "linux/android/binder.h", "BINDER_SET_CONTEXT_MGR", _IOC_WRITE, 0x6207, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_PRIORITY", _IOC_WRITE, 0x6206, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_TIMEOUT", _IOC_WRITE, 0x6203, 0x08 },
@@ -784,16 +791,13 @@
 { "linux/dvb/ca.h", "CA_RESET", _IOC_NONE, 0x6f80, 0x00 },
 { "linux/dvb/ca.h", "CA_SEND_MSG", _IOC_WRITE, 0x6f85, 0x10c },
 { "linux/dvb/ca.h", "CA_SET_DESCR", _IOC_WRITE, 0x6f86, 0x10 },
-{ "linux/dvb/ca.h", "CA_SET_PID", _IOC_WRITE, 0x6f87, 0x08 },
 { "linux/dvb/dmx.h", "DMX_ADD_PID", _IOC_WRITE, 0x6f33, 0x02 },
-{ "linux/dvb/dmx.h", "DMX_GET_CAPS", _IOC_READ, 0x6f30, 0x08 },
 { "linux/dvb/dmx.h", "DMX_GET_PES_PIDS", _IOC_READ, 0x6f2f, 0x0a },
 { "linux/dvb/dmx.h", "DMX_GET_STC", _IOC_READ|_IOC_WRITE, 0x6f32, 0x10 },
 { "linux/dvb/dmx.h", "DMX_REMOVE_PID", _IOC_WRITE, 0x6f34, 0x02 },
 { "linux/dvb/dmx.h", "DMX_SET_BUFFER_SIZE", _IOC_NONE, 0x6f2d, 0x00 },
 { "linux/dvb/dmx.h", "DMX_SET_FILTER", _IOC_WRITE, 0x6f2b, 0x3c },
 { "linux/dvb/dmx.h", "DMX_SET_PES_FILTER", _IOC_WRITE, 0x6f2c, 0x14 },
-{ "linux/dvb/dmx.h", "DMX_SET_SOURCE", _IOC_WRITE, 0x6f31, 0x04 },
 { "linux/dvb/dmx.h", "DMX_START", _IOC_NONE, 0x6f29, 0x00 },
 { "linux/dvb/dmx.h", "DMX_STOP", _IOC_NONE, 0x6f2a, 0x00 },
 { "linux/dvb/frontend.h", "FE_DISEQC_RECV_SLAVE_REPLY", _IOC_READ, 0x6f40, 0x0c },
@@ -1327,10 +1331,12 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 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_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_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_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 },
@@ -1367,6 +1373,7 @@
 { "linux/loop.h", "LOOP_CTL_REMOVE", 0, 0x4C81, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS", 0, 0x4C03, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS64", 0, 0x4C05, 0 },
+{ "linux/loop.h", "LOOP_SET_BLOCK_SIZE", 0, 0x4C09, 0 },
 { "linux/loop.h", "LOOP_SET_CAPACITY", 0, 0x4C07, 0 },
 { "linux/loop.h", "LOOP_SET_DIRECT_IO", 0, 0x4C08, 0 },
 { "linux/loop.h", "LOOP_SET_FD", 0, 0x4C00, 0 },
@@ -2492,6 +2499,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 },
 { "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 35a0ca9..25de6ba 100644
--- a/linux/32/ioctls_inc_align64.h
+++ b/linux/32/ioctls_inc_align64.h
@@ -183,6 +183,9 @@
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_RESET", _IOC_READ|_IOC_WRITE, 0x64c4, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_SIGNAL", _IOC_READ|_IOC_WRITE, 0x64c5, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_WAIT", _IOC_READ|_IOC_WRITE, 0x64c3, 0x20 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x18 },
@@ -271,7 +274,9 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_IRQ_WAIT", _IOC_WRITE, 0x6445, 0x04 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_ATTRS", _IOC_READ|_IOC_WRITE, 0x6468, 0x2c },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_PUT_IMAGE", _IOC_WRITE, 0x6467, 0x2c },
+{ "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_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 },
@@ -406,6 +411,7 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_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_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
@@ -467,6 +473,7 @@
 { "linux/android/binder.h", "BC_REQUEST_DEATH_NOTIFICATION", _IOC_WRITE, 0x630e, 0x0c },
 { "linux/android/binder.h", "BC_TRANSACTION", _IOC_WRITE, 0x6300, 0x40 },
 { "linux/android/binder.h", "BC_TRANSACTION_SG", _IOC_WRITE, 0x6311, 0x48 },
+{ "linux/android/binder.h", "BINDER_GET_NODE_DEBUG_INFO", _IOC_READ|_IOC_WRITE, 0x620b, 0x18 },
 { "linux/android/binder.h", "BINDER_SET_CONTEXT_MGR", _IOC_WRITE, 0x6207, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_PRIORITY", _IOC_WRITE, 0x6206, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_TIMEOUT", _IOC_WRITE, 0x6203, 0x08 },
@@ -784,16 +791,13 @@
 { "linux/dvb/ca.h", "CA_RESET", _IOC_NONE, 0x6f80, 0x00 },
 { "linux/dvb/ca.h", "CA_SEND_MSG", _IOC_WRITE, 0x6f85, 0x10c },
 { "linux/dvb/ca.h", "CA_SET_DESCR", _IOC_WRITE, 0x6f86, 0x10 },
-{ "linux/dvb/ca.h", "CA_SET_PID", _IOC_WRITE, 0x6f87, 0x08 },
 { "linux/dvb/dmx.h", "DMX_ADD_PID", _IOC_WRITE, 0x6f33, 0x02 },
-{ "linux/dvb/dmx.h", "DMX_GET_CAPS", _IOC_READ, 0x6f30, 0x08 },
 { "linux/dvb/dmx.h", "DMX_GET_PES_PIDS", _IOC_READ, 0x6f2f, 0x0a },
 { "linux/dvb/dmx.h", "DMX_GET_STC", _IOC_READ|_IOC_WRITE, 0x6f32, 0x10 },
 { "linux/dvb/dmx.h", "DMX_REMOVE_PID", _IOC_WRITE, 0x6f34, 0x02 },
 { "linux/dvb/dmx.h", "DMX_SET_BUFFER_SIZE", _IOC_NONE, 0x6f2d, 0x00 },
 { "linux/dvb/dmx.h", "DMX_SET_FILTER", _IOC_WRITE, 0x6f2b, 0x3c },
 { "linux/dvb/dmx.h", "DMX_SET_PES_FILTER", _IOC_WRITE, 0x6f2c, 0x14 },
-{ "linux/dvb/dmx.h", "DMX_SET_SOURCE", _IOC_WRITE, 0x6f31, 0x04 },
 { "linux/dvb/dmx.h", "DMX_START", _IOC_NONE, 0x6f29, 0x00 },
 { "linux/dvb/dmx.h", "DMX_STOP", _IOC_NONE, 0x6f2a, 0x00 },
 { "linux/dvb/frontend.h", "FE_DISEQC_RECV_SLAVE_REPLY", _IOC_READ, 0x6f40, 0x0c },
@@ -1327,10 +1331,12 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 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_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_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_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 },
@@ -1367,6 +1373,7 @@
 { "linux/loop.h", "LOOP_CTL_REMOVE", 0, 0x4C81, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS", 0, 0x4C03, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS64", 0, 0x4C05, 0 },
+{ "linux/loop.h", "LOOP_SET_BLOCK_SIZE", 0, 0x4C09, 0 },
 { "linux/loop.h", "LOOP_SET_CAPACITY", 0, 0x4C07, 0 },
 { "linux/loop.h", "LOOP_SET_DIRECT_IO", 0, 0x4C08, 0 },
 { "linux/loop.h", "LOOP_SET_FD", 0, 0x4C00, 0 },
@@ -2393,7 +2400,6 @@
 { "linux/wireless.h", "SIOCSIWSTATS", 0, 0x8B0E, 0 },
 { "linux/wireless.h", "SIOCSIWTHRSPY", 0, 0x8B12, 0 },
 { "linux/wireless.h", "SIOCSIWTXPOW", 0, 0x8B26, 0 },
-{ "media/davinci/vpfe_capture.h", "VPFE_CMD_S_CCDC_RAW_PARAMS", _IOC_WRITE, 0x56c1, 0x04 },
 { "media/drv-intf/exynos-fimc.h", "S5P_FIMC_TX_END_NOTIFY", _IOC_NONE, 0x6500, 0x00 },
 { "media/i2c/adv7842.h", "ADV7842_CMD_RAM_TEST", _IOC_NONE, 0x56c0, 0x00 },
 { "media/i2c/bt819.h", "BT819_FIFO_RESET_HIGH", _IOC_NONE, 0x6201, 0x00 },
@@ -2493,6 +2499,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 },
 { "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/ioctls_inc.h b/linux/64/ioctls_inc.h
index 517caa0..691b6ea 100644
--- a/linux/64/ioctls_inc.h
+++ b/linux/64/ioctls_inc.h
@@ -183,6 +183,9 @@
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_RESET", _IOC_READ|_IOC_WRITE, 0x64c4, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_SIGNAL", _IOC_READ|_IOC_WRITE, 0x64c5, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_WAIT", _IOC_READ|_IOC_WRITE, 0x64c3, 0x20 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x18 },
@@ -271,7 +274,9 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_IRQ_WAIT", _IOC_WRITE, 0x6445, 0x04 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_ATTRS", _IOC_READ|_IOC_WRITE, 0x6468, 0x2c },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_PUT_IMAGE", _IOC_WRITE, 0x6467, 0x2c },
+{ "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_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 },
@@ -406,6 +411,7 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_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_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
@@ -467,6 +473,7 @@
 { "linux/android/binder.h", "BC_REQUEST_DEATH_NOTIFICATION", _IOC_WRITE, 0x630e, 0x0c },
 { "linux/android/binder.h", "BC_TRANSACTION", _IOC_WRITE, 0x6300, 0x40 },
 { "linux/android/binder.h", "BC_TRANSACTION_SG", _IOC_WRITE, 0x6311, 0x48 },
+{ "linux/android/binder.h", "BINDER_GET_NODE_DEBUG_INFO", _IOC_READ|_IOC_WRITE, 0x620b, 0x18 },
 { "linux/android/binder.h", "BINDER_SET_CONTEXT_MGR", _IOC_WRITE, 0x6207, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_PRIORITY", _IOC_WRITE, 0x6206, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_TIMEOUT", _IOC_WRITE, 0x6203, 0x08 },
@@ -784,16 +791,13 @@
 { "linux/dvb/ca.h", "CA_RESET", _IOC_NONE, 0x6f80, 0x00 },
 { "linux/dvb/ca.h", "CA_SEND_MSG", _IOC_WRITE, 0x6f85, 0x10c },
 { "linux/dvb/ca.h", "CA_SET_DESCR", _IOC_WRITE, 0x6f86, 0x10 },
-{ "linux/dvb/ca.h", "CA_SET_PID", _IOC_WRITE, 0x6f87, 0x08 },
 { "linux/dvb/dmx.h", "DMX_ADD_PID", _IOC_WRITE, 0x6f33, 0x02 },
-{ "linux/dvb/dmx.h", "DMX_GET_CAPS", _IOC_READ, 0x6f30, 0x08 },
 { "linux/dvb/dmx.h", "DMX_GET_PES_PIDS", _IOC_READ, 0x6f2f, 0x0a },
 { "linux/dvb/dmx.h", "DMX_GET_STC", _IOC_READ|_IOC_WRITE, 0x6f32, 0x10 },
 { "linux/dvb/dmx.h", "DMX_REMOVE_PID", _IOC_WRITE, 0x6f34, 0x02 },
 { "linux/dvb/dmx.h", "DMX_SET_BUFFER_SIZE", _IOC_NONE, 0x6f2d, 0x00 },
 { "linux/dvb/dmx.h", "DMX_SET_FILTER", _IOC_WRITE, 0x6f2b, 0x3c },
 { "linux/dvb/dmx.h", "DMX_SET_PES_FILTER", _IOC_WRITE, 0x6f2c, 0x14 },
-{ "linux/dvb/dmx.h", "DMX_SET_SOURCE", _IOC_WRITE, 0x6f31, 0x04 },
 { "linux/dvb/dmx.h", "DMX_START", _IOC_NONE, 0x6f29, 0x00 },
 { "linux/dvb/dmx.h", "DMX_STOP", _IOC_NONE, 0x6f2a, 0x00 },
 { "linux/dvb/frontend.h", "FE_DISEQC_RECV_SLAVE_REPLY", _IOC_READ, 0x6f40, 0x0c },
@@ -1327,10 +1331,12 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 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_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_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_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 },
@@ -1367,6 +1373,7 @@
 { "linux/loop.h", "LOOP_CTL_REMOVE", 0, 0x4C81, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS", 0, 0x4C03, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS64", 0, 0x4C05, 0 },
+{ "linux/loop.h", "LOOP_SET_BLOCK_SIZE", 0, 0x4C09, 0 },
 { "linux/loop.h", "LOOP_SET_CAPACITY", 0, 0x4C07, 0 },
 { "linux/loop.h", "LOOP_SET_DIRECT_IO", 0, 0x4C08, 0 },
 { "linux/loop.h", "LOOP_SET_FD", 0, 0x4C00, 0 },
@@ -2492,6 +2499,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 },
 { "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/arm/ioctls_arch0.h b/linux/arm/ioctls_arch0.h
index ae3fb69..f80398e 100644
--- a/linux/arm/ioctls_arch0.h
+++ b/linux/arm/ioctls_arch0.h
@@ -41,30 +41,9 @@
 { "linux/kvm.h", "KVM_IRQ_LINE_STATUS", _IOC_READ|_IOC_WRITE, 0xae67, 0x08 },
 { "linux/kvm.h", "KVM_KVMCLOCK_CTRL", _IOC_NONE, 0xaead, 0x00 },
 { "linux/kvm.h", "KVM_NMI", _IOC_NONE, 0xae9a, 0x00 },
-{ "linux/kvm.h", "KVM_PPC_ALLOCATE_HTAB", _IOC_READ|_IOC_WRITE, 0xaea7, 0x04 },
-{ "linux/kvm.h", "KVM_PPC_GET_PVINFO", _IOC_WRITE, 0xaea1, 0x80 },
-{ "linux/kvm.h", "KVM_PPC_GET_SMMU_INFO", _IOC_READ, 0xaea6, 0x250 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_COMMIT", _IOC_READ, 0xaeae, 0x10 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_PREPARE", _IOC_READ, 0xaead, 0x10 },
 { "linux/kvm.h", "KVM_REGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae67, 0x10 },
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
-{ "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
-{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
-{ "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
-{ "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
-{ "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
-{ "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
-{ "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
-{ "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
-{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
-{ "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
-{ "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
-{ "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
-{ "linux/kvm.h", "KVM_S390_STORE_STATUS", _IOC_WRITE, 0xae95, 0x04 },
-{ "linux/kvm.h", "KVM_S390_UCAS_MAP", _IOC_WRITE, 0xae50, 0x18 },
-{ "linux/kvm.h", "KVM_S390_UCAS_UNMAP", _IOC_WRITE, 0xae51, 0x18 },
-{ "linux/kvm.h", "KVM_S390_VCPU_FAULT", _IOC_WRITE, 0xae52, 0x04 },
 { "linux/kvm.h", "KVM_SET_BOOT_CPU_ID", _IOC_NONE, 0xae78, 0x00 },
 { "linux/kvm.h", "KVM_SET_CLOCK", _IOC_WRITE, 0xae7b, 0x30 },
 { "linux/kvm.h", "KVM_SET_DEVICE_ATTR", _IOC_WRITE, 0xaee1, 0x18 },
@@ -89,5 +68,3 @@
 { "linux/kvm.h", "KVM_TPR_ACCESS_REPORTING", _IOC_READ|_IOC_WRITE, 0xae92, 0x28 },
 { "linux/kvm.h", "KVM_TRANSLATE", _IOC_READ|_IOC_WRITE, 0xae85, 0x18 },
 { "linux/kvm.h", "KVM_UNREGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae68, 0x10 },
-{ "linux/kvm.h", "KVM_X86_GET_MCE_CAP_SUPPORTED", _IOC_READ, 0xae9d, 0x08 },
-{ "linux/kvm.h", "KVM_X86_SETUP_MCE", _IOC_WRITE, 0xae9c, 0x08 },
diff --git a/linux/hppa/syscallent.h b/linux/hppa/syscallent.h
index aa25918..8925338 100644
--- a/linux/hppa/syscallent.h
+++ b/linux/hppa/syscallent.h
@@ -352,3 +352,4 @@
 [346] = { 6,	TD,		SEN(copy_file_range),		"copy_file_range"	},
 [347] = { 6,	TD,		SEN(preadv2),			"preadv2"		},
 [348] = { 6,	TD,		SEN(pwritev2),			"pwritev2"		},
+[349] = { 5,	TD|TF|TSTA,	SEN(statx),			"statx"			},
diff --git a/linux/i386/ioctls_arch0.h b/linux/i386/ioctls_arch0.h
index fcdee53..697e250 100644
--- a/linux/i386/ioctls_arch0.h
+++ b/linux/i386/ioctls_arch0.h
@@ -14,7 +14,6 @@
 { "asm/mtrr.h", "MTRRIOC_KILL_PAGE_ENTRY", _IOC_WRITE, 0x4d09, 0x0c },
 { "asm/mtrr.h", "MTRRIOC_SET_ENTRY", _IOC_WRITE, 0x4d01, 0x0c },
 { "asm/mtrr.h", "MTRRIOC_SET_PAGE_ENTRY", _IOC_WRITE, 0x4d06, 0x0c },
-{ "linux/kvm.h", "KVM_ARM_SET_DEVICE_ADDR", _IOC_WRITE, 0xaeab, 0x10 },
 { "linux/kvm.h", "KVM_ASSIGN_DEV_IRQ", _IOC_WRITE, 0xae70, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_PCI_DEVICE", _IOC_READ, 0xae69, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_SET_INTX_MASK", _IOC_WRITE, 0xaea4, 0x40 },
@@ -65,30 +64,9 @@
 { "linux/kvm.h", "KVM_IRQ_LINE_STATUS", _IOC_READ|_IOC_WRITE, 0xae67, 0x08 },
 { "linux/kvm.h", "KVM_KVMCLOCK_CTRL", _IOC_NONE, 0xaead, 0x00 },
 { "linux/kvm.h", "KVM_NMI", _IOC_NONE, 0xae9a, 0x00 },
-{ "linux/kvm.h", "KVM_PPC_ALLOCATE_HTAB", _IOC_READ|_IOC_WRITE, 0xaea7, 0x04 },
-{ "linux/kvm.h", "KVM_PPC_GET_PVINFO", _IOC_WRITE, 0xaea1, 0x80 },
-{ "linux/kvm.h", "KVM_PPC_GET_SMMU_INFO", _IOC_READ, 0xaea6, 0x250 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_COMMIT", _IOC_READ, 0xaeae, 0x10 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_PREPARE", _IOC_READ, 0xaead, 0x10 },
 { "linux/kvm.h", "KVM_REGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae67, 0x10 },
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
-{ "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
-{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
-{ "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
-{ "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
-{ "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
-{ "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
-{ "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
-{ "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
-{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
-{ "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
-{ "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
-{ "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
-{ "linux/kvm.h", "KVM_S390_STORE_STATUS", _IOC_WRITE, 0xae95, 0x04 },
-{ "linux/kvm.h", "KVM_S390_UCAS_MAP", _IOC_WRITE, 0xae50, 0x18 },
-{ "linux/kvm.h", "KVM_S390_UCAS_UNMAP", _IOC_WRITE, 0xae51, 0x18 },
-{ "linux/kvm.h", "KVM_S390_VCPU_FAULT", _IOC_WRITE, 0xae52, 0x04 },
 { "linux/kvm.h", "KVM_SET_BOOT_CPU_ID", _IOC_NONE, 0xae78, 0x00 },
 { "linux/kvm.h", "KVM_SET_CLOCK", _IOC_WRITE, 0xae7b, 0x30 },
 { "linux/kvm.h", "KVM_SET_CPUID", _IOC_WRITE, 0xae8a, 0x08 },
diff --git a/linux/inet_diag.h b/linux/inet_diag.h
index ec6356c..d2eec2c 100644
--- a/linux/inet_diag.h
+++ b/linux/inet_diag.h
@@ -106,6 +106,7 @@
 	INET_DIAG_PAD,
 	INET_DIAG_MARK,
 	INET_DIAG_BBRINFO,
+	INET_DIAG_CLASS_ID,
 };
 
 /* INET_DIAG_MEM */
diff --git a/linux/powerpc/arch_sigreturn.c b/linux/powerpc/arch_sigreturn.c
index 4f68648..5a5ca3a 100644
--- a/linux/powerpc/arch_sigreturn.c
+++ b/linux/powerpc/arch_sigreturn.c
@@ -1,27 +1,32 @@
 static void
 arch_sigreturn(struct tcb *tcp)
 {
-	unsigned long addr = ppc_regs.gpr[1];
-	struct sigcontext sc;
-
 	/* Skip dummy stack frame. */
+	const unsigned long addr = ppc_regs.gpr[1] + 64;
+
 #ifdef POWERPC64
-	if (current_personality == 0)
-		addr += 128;
-	else
+	/* The only sigreturn on ppc64 is compat_sys_sigreturn. */
+	typedef struct {
+		unsigned int _unused[4];
+		int signal;
+		unsigned int handler;
+		unsigned int oldmask;
+		/* all the rest is irrelevant */
+	} sigreturn_context;
+#else
+	typedef struct sigcontext sigreturn_context;
 #endif
-		addr += 64;
+
+	sigreturn_context sc;
 
 	if (umove(tcp, addr, &sc) < 0) {
 		tprintf("{mask=%#lx}", addr);
 	} else {
-		unsigned long mask[NSIG_BYTES / sizeof(long)];
-#ifdef POWERPC64
-		mask[0] = sc.oldmask | (sc._unused[3] << 32);
-#else
-		mask[0] = sc.oldmask;
-		mask[1] = sc._unused[3];
-#endif
+		const unsigned int mask[NSIG_BYTES / sizeof(int)] = {
+			sc.oldmask,
+			sc._unused[3]
+		};
+
 		tprintsigmask_addr("{mask=", mask);
 		tprints("}");
 	}
diff --git a/linux/powerpc/get_syscall_args.c b/linux/powerpc/get_syscall_args.c
index 66bcae3..b54377e 100644
--- a/linux/powerpc/get_syscall_args.c
+++ b/linux/powerpc/get_syscall_args.c
@@ -2,11 +2,26 @@
 static int
 get_syscall_args(struct tcb *tcp)
 {
-	tcp->u_arg[0] = ppc_regs.orig_gpr3;
-	tcp->u_arg[1] = ppc_regs.gpr[4];
-	tcp->u_arg[2] = ppc_regs.gpr[5];
-	tcp->u_arg[3] = ppc_regs.gpr[6];
-	tcp->u_arg[4] = ppc_regs.gpr[7];
-	tcp->u_arg[5] = ppc_regs.gpr[8];
+	if (current_personality != 0) {
+		/*
+		 * Zero-extend from 32 bits.
+		 * Use truncate_klong_to_current_wordsize(tcp->u_arg[N])
+		 * in syscall handlers
+		 * if you need to use *sign-extended* parameter.
+		 */
+		tcp->u_arg[0] = (uint32_t) ppc_regs.orig_gpr3;
+		tcp->u_arg[1] = (uint32_t) ppc_regs.gpr[4];
+		tcp->u_arg[2] = (uint32_t) ppc_regs.gpr[5];
+		tcp->u_arg[3] = (uint32_t) ppc_regs.gpr[6];
+		tcp->u_arg[4] = (uint32_t) ppc_regs.gpr[7];
+		tcp->u_arg[5] = (uint32_t) ppc_regs.gpr[8];
+	} else {
+		tcp->u_arg[0] = ppc_regs.orig_gpr3;
+		tcp->u_arg[1] = ppc_regs.gpr[4];
+		tcp->u_arg[2] = ppc_regs.gpr[5];
+		tcp->u_arg[3] = ppc_regs.gpr[6];
+		tcp->u_arg[4] = ppc_regs.gpr[7];
+		tcp->u_arg[5] = ppc_regs.gpr[8];
+	}
 	return 1;
 }
diff --git a/linux/powerpc/ioctls_arch0.h b/linux/powerpc/ioctls_arch0.h
index 2516661..e922ec0 100644
--- a/linux/powerpc/ioctls_arch0.h
+++ b/linux/powerpc/ioctls_arch0.h
@@ -88,7 +88,6 @@
 { "asm/ps3fb.h", "PS3FB_IOCTL_SCREENINFO", _IOC_READ, 0x7203, 0x04 },
 { "asm/ps3fb.h", "PS3FB_IOCTL_SETMODE", _IOC_WRITE, 0x7201, 0x04 },
 { "linux/kvm.h", "KVM_ALLOCATE_RMA", _IOC_READ, 0xaea9, 0x08 },
-{ "linux/kvm.h", "KVM_ARM_SET_DEVICE_ADDR", _IOC_WRITE, 0xaeab, 0x10 },
 { "linux/kvm.h", "KVM_ASSIGN_DEV_IRQ", _IOC_WRITE, 0xae70, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_PCI_DEVICE", _IOC_READ, 0xae69, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_SET_INTX_MASK", _IOC_WRITE, 0xaea4, 0x40 },
@@ -141,22 +140,6 @@
 { "linux/kvm.h", "KVM_REGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae67, 0x10 },
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
-{ "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
-{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
-{ "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
-{ "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
-{ "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
-{ "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
-{ "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
-{ "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
-{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
-{ "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
-{ "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
-{ "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
-{ "linux/kvm.h", "KVM_S390_STORE_STATUS", _IOC_WRITE, 0xae95, 0x04 },
-{ "linux/kvm.h", "KVM_S390_UCAS_MAP", _IOC_WRITE, 0xae50, 0x18 },
-{ "linux/kvm.h", "KVM_S390_UCAS_UNMAP", _IOC_WRITE, 0xae51, 0x18 },
-{ "linux/kvm.h", "KVM_S390_VCPU_FAULT", _IOC_WRITE, 0xae52, 0x04 },
 { "linux/kvm.h", "KVM_SET_BOOT_CPU_ID", _IOC_NONE, 0xae78, 0x00 },
 { "linux/kvm.h", "KVM_SET_CLOCK", _IOC_WRITE, 0xae7b, 0x30 },
 { "linux/kvm.h", "KVM_SET_DEVICE_ATTR", _IOC_WRITE, 0xaee1, 0x18 },
@@ -181,5 +164,3 @@
 { "linux/kvm.h", "KVM_TPR_ACCESS_REPORTING", _IOC_READ|_IOC_WRITE, 0xae92, 0x28 },
 { "linux/kvm.h", "KVM_TRANSLATE", _IOC_READ|_IOC_WRITE, 0xae85, 0x18 },
 { "linux/kvm.h", "KVM_UNREGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae68, 0x10 },
-{ "linux/kvm.h", "KVM_X86_GET_MCE_CAP_SUPPORTED", _IOC_READ, 0xae9d, 0x08 },
-{ "linux/kvm.h", "KVM_X86_SETUP_MCE", _IOC_WRITE, 0xae9c, 0x08 },
diff --git a/linux/s390/ioctls_arch0.h b/linux/s390/ioctls_arch0.h
index f21ae98..66b26ae 100644
--- a/linux/s390/ioctls_arch0.h
+++ b/linux/s390/ioctls_arch0.h
@@ -50,6 +50,9 @@
 { "asm/tape390.h", "TAPE390_DISPLAY", _IOC_WRITE, 0x6401, 0x11 },
 { "asm/tape390.h", "TAPE390_KEKL_QUERY", _IOC_READ, 0x6405, 0x86 },
 { "asm/tape390.h", "TAPE390_KEKL_SET", _IOC_WRITE, 0x6404, 0x86 },
+{ "asm/vmcp.h", "VMCP_GETCODE", _IOC_READ, 0x1001, 0x04 },
+{ "asm/vmcp.h", "VMCP_GETSIZE", _IOC_READ, 0x1003, 0x04 },
+{ "asm/vmcp.h", "VMCP_SETBUF", _IOC_WRITE, 0x1002, 0x04 },
 { "asm/zcrypt.h", "ICARSACRT", _IOC_READ|_IOC_WRITE, 0x7a06, 0x00 },
 { "asm/zcrypt.h", "ICARSAMODEXPO", _IOC_READ|_IOC_WRITE, 0x7a05, 0x00 },
 { "asm/zcrypt.h", "Z90STAT_CEX2ACOUNT", _IOC_READ, 0x7a4e, 0x04 },
@@ -69,7 +72,6 @@
 { "asm/zcrypt.h", "ZDEVICESTATUS", _IOC_READ|_IOC_WRITE, 0x7a4f, 0x00 },
 { "asm/zcrypt.h", "ZSECSENDCPRB", _IOC_READ|_IOC_WRITE, 0x7a81, 0x00 },
 { "asm/zcrypt.h", "ZSENDEP11CPRB", _IOC_READ|_IOC_WRITE, 0x7a04, 0x00 },
-{ "linux/kvm.h", "KVM_ARM_SET_DEVICE_ADDR", _IOC_WRITE, 0xaeab, 0x10 },
 { "linux/kvm.h", "KVM_ASSIGN_DEV_IRQ", _IOC_WRITE, 0xae70, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_PCI_DEVICE", _IOC_READ, 0xae69, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_SET_INTX_MASK", _IOC_WRITE, 0xaea4, 0x40 },
@@ -108,11 +110,6 @@
 { "linux/kvm.h", "KVM_IRQ_LINE_STATUS", _IOC_READ|_IOC_WRITE, 0xae67, 0x08 },
 { "linux/kvm.h", "KVM_KVMCLOCK_CTRL", _IOC_NONE, 0xaead, 0x00 },
 { "linux/kvm.h", "KVM_NMI", _IOC_NONE, 0xae9a, 0x00 },
-{ "linux/kvm.h", "KVM_PPC_ALLOCATE_HTAB", _IOC_READ|_IOC_WRITE, 0xaea7, 0x04 },
-{ "linux/kvm.h", "KVM_PPC_GET_PVINFO", _IOC_WRITE, 0xaea1, 0x80 },
-{ "linux/kvm.h", "KVM_PPC_GET_SMMU_INFO", _IOC_READ, 0xaea6, 0x250 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_COMMIT", _IOC_READ, 0xaeae, 0x10 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_PREPARE", _IOC_READ, 0xaead, 0x10 },
 { "linux/kvm.h", "KVM_REGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae67, 0x10 },
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
@@ -156,5 +153,3 @@
 { "linux/kvm.h", "KVM_TPR_ACCESS_REPORTING", _IOC_READ|_IOC_WRITE, 0xae92, 0x28 },
 { "linux/kvm.h", "KVM_TRANSLATE", _IOC_READ|_IOC_WRITE, 0xae85, 0x18 },
 { "linux/kvm.h", "KVM_UNREGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae68, 0x10 },
-{ "linux/kvm.h", "KVM_X86_GET_MCE_CAP_SUPPORTED", _IOC_READ, 0xae9d, 0x08 },
-{ "linux/kvm.h", "KVM_X86_SETUP_MCE", _IOC_WRITE, 0xae9c, 0x08 },
diff --git a/linux/s390x/ioctls_arch0.h b/linux/s390x/ioctls_arch0.h
index 7004c72..c544f00 100644
--- a/linux/s390x/ioctls_arch0.h
+++ b/linux/s390x/ioctls_arch0.h
@@ -50,6 +50,9 @@
 { "asm/tape390.h", "TAPE390_DISPLAY", _IOC_WRITE, 0x6401, 0x11 },
 { "asm/tape390.h", "TAPE390_KEKL_QUERY", _IOC_READ, 0x6405, 0x86 },
 { "asm/tape390.h", "TAPE390_KEKL_SET", _IOC_WRITE, 0x6404, 0x86 },
+{ "asm/vmcp.h", "VMCP_GETCODE", _IOC_READ, 0x1001, 0x04 },
+{ "asm/vmcp.h", "VMCP_GETSIZE", _IOC_READ, 0x1003, 0x04 },
+{ "asm/vmcp.h", "VMCP_SETBUF", _IOC_WRITE, 0x1002, 0x04 },
 { "asm/zcrypt.h", "ICARSACRT", _IOC_READ|_IOC_WRITE, 0x7a06, 0x00 },
 { "asm/zcrypt.h", "ICARSAMODEXPO", _IOC_READ|_IOC_WRITE, 0x7a05, 0x00 },
 { "asm/zcrypt.h", "Z90STAT_CEX2ACOUNT", _IOC_READ, 0x7a4e, 0x04 },
@@ -69,7 +72,6 @@
 { "asm/zcrypt.h", "ZDEVICESTATUS", _IOC_READ|_IOC_WRITE, 0x7a4f, 0x00 },
 { "asm/zcrypt.h", "ZSECSENDCPRB", _IOC_READ|_IOC_WRITE, 0x7a81, 0x00 },
 { "asm/zcrypt.h", "ZSENDEP11CPRB", _IOC_READ|_IOC_WRITE, 0x7a04, 0x00 },
-{ "linux/kvm.h", "KVM_ARM_SET_DEVICE_ADDR", _IOC_WRITE, 0xaeab, 0x10 },
 { "linux/kvm.h", "KVM_ASSIGN_DEV_IRQ", _IOC_WRITE, 0xae70, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_PCI_DEVICE", _IOC_READ, 0xae69, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_SET_INTX_MASK", _IOC_WRITE, 0xaea4, 0x40 },
@@ -108,11 +110,6 @@
 { "linux/kvm.h", "KVM_IRQ_LINE_STATUS", _IOC_READ|_IOC_WRITE, 0xae67, 0x08 },
 { "linux/kvm.h", "KVM_KVMCLOCK_CTRL", _IOC_NONE, 0xaead, 0x00 },
 { "linux/kvm.h", "KVM_NMI", _IOC_NONE, 0xae9a, 0x00 },
-{ "linux/kvm.h", "KVM_PPC_ALLOCATE_HTAB", _IOC_READ|_IOC_WRITE, 0xaea7, 0x04 },
-{ "linux/kvm.h", "KVM_PPC_GET_PVINFO", _IOC_WRITE, 0xaea1, 0x80 },
-{ "linux/kvm.h", "KVM_PPC_GET_SMMU_INFO", _IOC_READ, 0xaea6, 0x250 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_COMMIT", _IOC_READ, 0xaeae, 0x10 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_PREPARE", _IOC_READ, 0xaead, 0x10 },
 { "linux/kvm.h", "KVM_REGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae67, 0x10 },
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
@@ -156,5 +153,3 @@
 { "linux/kvm.h", "KVM_TPR_ACCESS_REPORTING", _IOC_READ|_IOC_WRITE, 0xae92, 0x28 },
 { "linux/kvm.h", "KVM_TRANSLATE", _IOC_READ|_IOC_WRITE, 0xae85, 0x18 },
 { "linux/kvm.h", "KVM_UNREGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae68, 0x10 },
-{ "linux/kvm.h", "KVM_X86_GET_MCE_CAP_SUPPORTED", _IOC_READ, 0xae9d, 0x08 },
-{ "linux/kvm.h", "KVM_X86_SETUP_MCE", _IOC_WRITE, 0xae9c, 0x08 },
diff --git a/linux/x32/ioctls_inc0.h b/linux/x32/ioctls_inc0.h
index 70a857d..9d4041b 100644
--- a/linux/x32/ioctls_inc0.h
+++ b/linux/x32/ioctls_inc0.h
@@ -183,6 +183,9 @@
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_DESTROY", _IOC_READ|_IOC_WRITE, 0x64c0, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE", _IOC_READ|_IOC_WRITE, 0x64c2, 0x10 },
 { "drm/drm.h", "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD", _IOC_READ|_IOC_WRITE, 0x64c1, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_RESET", _IOC_READ|_IOC_WRITE, 0x64c4, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_SIGNAL", _IOC_READ|_IOC_WRITE, 0x64c5, 0x10 },
+{ "drm/drm.h", "DRM_IOCTL_SYNCOBJ_WAIT", _IOC_READ|_IOC_WRITE, 0x64c3, 0x20 },
 { "drm/drm.h", "DRM_IOCTL_UNBLOCK", _IOC_READ|_IOC_WRITE, 0x6413, 0x04 },
 { "drm/drm.h", "DRM_IOCTL_UNLOCK", _IOC_WRITE, 0x642b, 0x08 },
 { "drm/drm.h", "DRM_IOCTL_UPDATE_DRAW", _IOC_WRITE, 0x643f, 0x18 },
@@ -271,7 +274,9 @@
 { "drm/i915_drm.h", "DRM_IOCTL_I915_IRQ_WAIT", _IOC_WRITE, 0x6445, 0x04 },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_ATTRS", _IOC_READ|_IOC_WRITE, 0x6468, 0x2c },
 { "drm/i915_drm.h", "DRM_IOCTL_I915_OVERLAY_PUT_IMAGE", _IOC_WRITE, 0x6467, 0x2c },
+{ "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_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 },
@@ -406,6 +411,7 @@
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_HANG_STATE", _IOC_READ|_IOC_WRITE, 0x6446, 0xa0 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_PARAM", _IOC_READ|_IOC_WRITE, 0x6447, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_GET_TILING", _IOC_READ|_IOC_WRITE, 0x6449, 0x10 },
+{ "drm/vc4_drm.h", "DRM_IOCTL_VC4_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_SET_TILING", _IOC_READ|_IOC_WRITE, 0x6448, 0x10 },
 { "drm/vc4_drm.h", "DRM_IOCTL_VC4_SUBMIT_CL", _IOC_READ|_IOC_WRITE, 0x6440, 0xa0 },
@@ -467,6 +473,7 @@
 { "linux/android/binder.h", "BC_REQUEST_DEATH_NOTIFICATION", _IOC_WRITE, 0x630e, 0x0c },
 { "linux/android/binder.h", "BC_TRANSACTION", _IOC_WRITE, 0x6300, 0x40 },
 { "linux/android/binder.h", "BC_TRANSACTION_SG", _IOC_WRITE, 0x6311, 0x48 },
+{ "linux/android/binder.h", "BINDER_GET_NODE_DEBUG_INFO", _IOC_READ|_IOC_WRITE, 0x620b, 0x18 },
 { "linux/android/binder.h", "BINDER_SET_CONTEXT_MGR", _IOC_WRITE, 0x6207, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_PRIORITY", _IOC_WRITE, 0x6206, 0x04 },
 { "linux/android/binder.h", "BINDER_SET_IDLE_TIMEOUT", _IOC_WRITE, 0x6203, 0x08 },
@@ -784,16 +791,13 @@
 { "linux/dvb/ca.h", "CA_RESET", _IOC_NONE, 0x6f80, 0x00 },
 { "linux/dvb/ca.h", "CA_SEND_MSG", _IOC_WRITE, 0x6f85, 0x10c },
 { "linux/dvb/ca.h", "CA_SET_DESCR", _IOC_WRITE, 0x6f86, 0x10 },
-{ "linux/dvb/ca.h", "CA_SET_PID", _IOC_WRITE, 0x6f87, 0x08 },
 { "linux/dvb/dmx.h", "DMX_ADD_PID", _IOC_WRITE, 0x6f33, 0x02 },
-{ "linux/dvb/dmx.h", "DMX_GET_CAPS", _IOC_READ, 0x6f30, 0x08 },
 { "linux/dvb/dmx.h", "DMX_GET_PES_PIDS", _IOC_READ, 0x6f2f, 0x0a },
 { "linux/dvb/dmx.h", "DMX_GET_STC", _IOC_READ|_IOC_WRITE, 0x6f32, 0x10 },
 { "linux/dvb/dmx.h", "DMX_REMOVE_PID", _IOC_WRITE, 0x6f34, 0x02 },
 { "linux/dvb/dmx.h", "DMX_SET_BUFFER_SIZE", _IOC_NONE, 0x6f2d, 0x00 },
 { "linux/dvb/dmx.h", "DMX_SET_FILTER", _IOC_WRITE, 0x6f2b, 0x3c },
 { "linux/dvb/dmx.h", "DMX_SET_PES_FILTER", _IOC_WRITE, 0x6f2c, 0x14 },
-{ "linux/dvb/dmx.h", "DMX_SET_SOURCE", _IOC_WRITE, 0x6f31, 0x04 },
 { "linux/dvb/dmx.h", "DMX_START", _IOC_NONE, 0x6f29, 0x00 },
 { "linux/dvb/dmx.h", "DMX_STOP", _IOC_NONE, 0x6f2a, 0x00 },
 { "linux/dvb/frontend.h", "FE_DISEQC_RECV_SLAVE_REPLY", _IOC_READ, 0x6f40, 0x0c },
@@ -1327,10 +1331,12 @@
 { "linux/kfd_ioctl.h", "AMDKFD_IOC_DESTROY_QUEUE", _IOC_READ|_IOC_WRITE, 0x4b03, 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_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_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_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 },
@@ -1367,6 +1373,7 @@
 { "linux/loop.h", "LOOP_CTL_REMOVE", 0, 0x4C81, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS", 0, 0x4C03, 0 },
 { "linux/loop.h", "LOOP_GET_STATUS64", 0, 0x4C05, 0 },
+{ "linux/loop.h", "LOOP_SET_BLOCK_SIZE", 0, 0x4C09, 0 },
 { "linux/loop.h", "LOOP_SET_CAPACITY", 0, 0x4C07, 0 },
 { "linux/loop.h", "LOOP_SET_DIRECT_IO", 0, 0x4C08, 0 },
 { "linux/loop.h", "LOOP_SET_FD", 0, 0x4C00, 0 },
@@ -2492,6 +2499,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 },
 { "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/x86_64/ioctls_arch0.h b/linux/x86_64/ioctls_arch0.h
index 4b8bbd1..3e5c7cb 100644
--- a/linux/x86_64/ioctls_arch0.h
+++ b/linux/x86_64/ioctls_arch0.h
@@ -14,7 +14,6 @@
 { "asm/mtrr.h", "MTRRIOC_KILL_PAGE_ENTRY", _IOC_WRITE, 0x4d09, 0x10 },
 { "asm/mtrr.h", "MTRRIOC_SET_ENTRY", _IOC_WRITE, 0x4d01, 0x10 },
 { "asm/mtrr.h", "MTRRIOC_SET_PAGE_ENTRY", _IOC_WRITE, 0x4d06, 0x10 },
-{ "linux/kvm.h", "KVM_ARM_SET_DEVICE_ADDR", _IOC_WRITE, 0xaeab, 0x10 },
 { "linux/kvm.h", "KVM_ASSIGN_DEV_IRQ", _IOC_WRITE, 0xae70, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_PCI_DEVICE", _IOC_READ, 0xae69, 0x40 },
 { "linux/kvm.h", "KVM_ASSIGN_SET_INTX_MASK", _IOC_WRITE, 0xaea4, 0x40 },
@@ -65,30 +64,9 @@
 { "linux/kvm.h", "KVM_IRQ_LINE_STATUS", _IOC_READ|_IOC_WRITE, 0xae67, 0x08 },
 { "linux/kvm.h", "KVM_KVMCLOCK_CTRL", _IOC_NONE, 0xaead, 0x00 },
 { "linux/kvm.h", "KVM_NMI", _IOC_NONE, 0xae9a, 0x00 },
-{ "linux/kvm.h", "KVM_PPC_ALLOCATE_HTAB", _IOC_READ|_IOC_WRITE, 0xaea7, 0x04 },
-{ "linux/kvm.h", "KVM_PPC_GET_PVINFO", _IOC_WRITE, 0xaea1, 0x80 },
-{ "linux/kvm.h", "KVM_PPC_GET_SMMU_INFO", _IOC_READ, 0xaea6, 0x250 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_COMMIT", _IOC_READ, 0xaeae, 0x10 },
-{ "linux/kvm.h", "KVM_PPC_RESIZE_HPT_PREPARE", _IOC_READ, 0xaead, 0x10 },
 { "linux/kvm.h", "KVM_REGISTER_COALESCED_MMIO", _IOC_WRITE, 0xae67, 0x10 },
 { "linux/kvm.h", "KVM_REINJECT_CONTROL", _IOC_NONE, 0xae71, 0x00 },
 { "linux/kvm.h", "KVM_RUN", _IOC_NONE, 0xae80, 0x00 },
-{ "linux/kvm.h", "KVM_S390_ENABLE_SIE", _IOC_NONE, 0xae06, 0x00 },
-{ "linux/kvm.h", "KVM_S390_GET_CMMA_BITS", _IOC_READ|_IOC_WRITE, 0xaeb8, 0x20 },
-{ "linux/kvm.h", "KVM_S390_GET_IRQ_STATE", _IOC_WRITE, 0xaeb6, 0x20 },
-{ "linux/kvm.h", "KVM_S390_GET_SKEYS", _IOC_WRITE, 0xaeb2, 0x40 },
-{ "linux/kvm.h", "KVM_S390_INITIAL_RESET", _IOC_NONE, 0xae97, 0x00 },
-{ "linux/kvm.h", "KVM_S390_INTERRUPT", _IOC_WRITE, 0xae94, 0x10 },
-{ "linux/kvm.h", "KVM_S390_IRQ", _IOC_WRITE, 0xaeb4, 0x48 },
-{ "linux/kvm.h", "KVM_S390_MEM_OP", _IOC_WRITE, 0xaeb1, 0x40 },
-{ "linux/kvm.h", "KVM_S390_SET_CMMA_BITS", _IOC_WRITE, 0xaeb9, 0x20 },
-{ "linux/kvm.h", "KVM_S390_SET_INITIAL_PSW", _IOC_WRITE, 0xae96, 0x10 },
-{ "linux/kvm.h", "KVM_S390_SET_IRQ_STATE", _IOC_WRITE, 0xaeb5, 0x20 },
-{ "linux/kvm.h", "KVM_S390_SET_SKEYS", _IOC_WRITE, 0xaeb3, 0x40 },
-{ "linux/kvm.h", "KVM_S390_STORE_STATUS", _IOC_WRITE, 0xae95, 0x08 },
-{ "linux/kvm.h", "KVM_S390_UCAS_MAP", _IOC_WRITE, 0xae50, 0x18 },
-{ "linux/kvm.h", "KVM_S390_UCAS_UNMAP", _IOC_WRITE, 0xae51, 0x18 },
-{ "linux/kvm.h", "KVM_S390_VCPU_FAULT", _IOC_WRITE, 0xae52, 0x08 },
 { "linux/kvm.h", "KVM_SET_BOOT_CPU_ID", _IOC_NONE, 0xae78, 0x00 },
 { "linux/kvm.h", "KVM_SET_CLOCK", _IOC_WRITE, 0xae7b, 0x30 },
 { "linux/kvm.h", "KVM_SET_CPUID", _IOC_WRITE, 0xae8a, 0x08 },
diff --git a/loop.c b/loop.c
index 4811dc0..33bd038 100644
--- a/loop.c
+++ b/loop.c
@@ -189,6 +189,7 @@
 		break;
 
 	case LOOP_SET_DIRECT_IO:
+	case LOOP_SET_BLOCK_SIZE:
 		tprintf(", %" PRI_klu, arg);
 		break;
 
diff --git a/m4/mpers.m4 b/m4/mpers.m4
index 277a384..1244682 100644
--- a/m4/mpers.m4
+++ b/m4/mpers.m4
@@ -1,6 +1,6 @@
 #!/usr/bin/m4
 #
-# Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
 # Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
 # All rights reserved.
 #
@@ -126,6 +126,23 @@
 				  [Define to 1 if you have CFLAG mpers support])
 			st_MPERS_STRUCT_STAT([])
 			st_MPERS_STRUCT_STAT([64])
+
+			if test $st_cv_runtime = yes; then
+				pushdef([SIZEOF_LONG],
+					MPERS_NAME[_SIZEOF_LONG])
+				st_MPERS_LOAD_AC_CV([sizeof_long])
+				AC_CHECK_SIZEOF([long])
+				st_MPERS_SAVE_AC_CV([sizeof_long])
+				popdef([SIZEOF_LONG])
+
+				pushdef([SIZEOF_KERNEL_LONG_T],
+					MPERS_NAME[_SIZEOF_KERNEL_LONG_T])
+				st_MPERS_LOAD_AC_CV([sizeof_kernel_long_t])
+				AC_CHECK_SIZEOF([kernel_long_t],,
+						[#include "$srcdir/kernel_types.h"])
+				st_MPERS_SAVE_AC_CV([sizeof_kernel_long_t])
+				popdef([SIZEOF_KERNEL_LONG_T])
+			fi
 		fi
 	fi
 	CFLAGS="$saved_CFLAGS"
diff --git a/macros.h b/macros.h
index a464134..222a852 100644
--- a/macros.h
+++ b/macros.h
@@ -35,6 +35,14 @@
 #define STRINGIFY(...)		#__VA_ARGS__
 #define STRINGIFY_VAL(...)	STRINGIFY(__VA_ARGS__)
 
+#ifndef MAX
+# define MAX(a, b)		(((a) > (b)) ? (a) : (b))
+#endif
+#ifndef MIN
+# define MIN(a, b)		(((a) < (b)) ? (a) : (b))
+#endif
+#define CLAMP(val, min, max)	MIN(MAX(min, val), max)
+
 #ifndef offsetofend
 # define offsetofend(type_, member_)	\
 	(offsetof(type_, member_) + sizeof(((type_ *)0)->member_))
diff --git a/netlink.c b/netlink.c
index ab40b14..6b9a1f5 100644
--- a/netlink.c
+++ b/netlink.c
@@ -34,11 +34,23 @@
 #include <linux/rtnetlink.h>
 #include <linux/xfrm.h>
 #include "xlat/netlink_ack_flags.h"
+#include "xlat/netlink_delete_flags.h"
 #include "xlat/netlink_flags.h"
 #include "xlat/netlink_get_flags.h"
 #include "xlat/netlink_new_flags.h"
 #include "xlat/netlink_protocols.h"
 #include "xlat/netlink_types.h"
+#include "xlat/nf_acct_msg_types.h"
+#include "xlat/nf_cthelper_msg_types.h"
+#include "xlat/nf_ctnetlink_exp_msg_types.h"
+#include "xlat/nf_ctnetlink_msg_types.h"
+#include "xlat/nf_cttimeout_msg_types.h"
+#include "xlat/nf_ipset_msg_types.h"
+#include "xlat/nf_nft_compat_msg_types.h"
+#include "xlat/nf_nftables_msg_types.h"
+#include "xlat/nf_osf_msg_types.h"
+#include "xlat/nf_queue_msg_types.h"
+#include "xlat/nf_ulog_msg_types.h"
 #include "xlat/nl_audit_types.h"
 #include "xlat/nl_crypto_types.h"
 #include "xlat/nl_netfilter_msg_types.h"
@@ -110,6 +122,38 @@
 	printxval(genl_families_xlat(), type, dflt);
 }
 
+static const struct {
+	const struct xlat *const xlat;
+	const char *const dflt;
+} nf_nlmsg_types[] = {
+	[NFNL_SUBSYS_CTNETLINK] = {
+		nf_ctnetlink_msg_types,
+		"IPCTNL_MSG_CT_???"
+	},
+	[NFNL_SUBSYS_CTNETLINK_EXP] = {
+		nf_ctnetlink_exp_msg_types,
+		"IPCTNL_MSG_EXP_???"
+	},
+	[NFNL_SUBSYS_QUEUE] = { nf_queue_msg_types, "NFQNL_MSG_???" },
+	[NFNL_SUBSYS_ULOG] = { nf_ulog_msg_types, "NFULNL_MSG_???" },
+	[NFNL_SUBSYS_OSF] = { nf_osf_msg_types, "OSF_MSG_???" },
+	[NFNL_SUBSYS_IPSET] = { nf_ipset_msg_types, "IPSET_CMD_???" },
+	[NFNL_SUBSYS_ACCT] = { nf_acct_msg_types, "NFNL_MSG_ACCT_???" },
+	[NFNL_SUBSYS_CTNETLINK_TIMEOUT] = {
+		nf_cttimeout_msg_types,
+		"IPCTNL_MSG_TIMEOUT_???"
+	},
+	[NFNL_SUBSYS_CTHELPER] = {
+		nf_cthelper_msg_types,
+		"NFNL_MSG_CTHELPER_???"
+	},
+	[NFNL_SUBSYS_NFTABLES] = { nf_nftables_msg_types, "NFT_MSG_???" },
+	[NFNL_SUBSYS_NFT_COMPAT] = {
+		nf_nft_compat_msg_types,
+		"NFNL_MSG_COMPAT_???"
+	}
+};
+
 static void
 decode_nlmsg_type_netfilter(const struct xlat *const xlat,
 			    const uint16_t type,
@@ -131,11 +175,12 @@
 
 	printxval(xlat, subsys_id, dflt);
 
-	/*
-	 * The type is subsystem specific,
-	 * print it in numeric format for now.
-	 */
-	tprintf("<<8|%#x", msg_type);
+	tprints("<<8|");
+	if (subsys_id < ARRAY_SIZE(nf_nlmsg_types))
+		printxval(nf_nlmsg_types[subsys_id].xlat,
+			  msg_type, nf_nlmsg_types[subsys_id].dflt);
+	else
+		tprintf("%#x", msg_type);
 }
 
 typedef void (*nlmsg_types_decoder_t)(const struct xlat *,
@@ -192,67 +237,199 @@
 	decoder(xlat, type, dflt);
 }
 
+static const struct xlat *
+decode_nlmsg_flags_crypto(const uint16_t type)
+{
+	switch (type) {
+	case CRYPTO_MSG_NEWALG:
+		return netlink_new_flags;
+	case CRYPTO_MSG_DELALG:
+	case CRYPTO_MSG_DELRNG:
+		return netlink_delete_flags;
+	case CRYPTO_MSG_GETALG:
+		return netlink_get_flags;
+	}
+
+	return NULL;
+}
+
+static const struct xlat *
+decode_nlmsg_flags_netfilter(const uint16_t type)
+{
+	const uint8_t subsys_id = (uint8_t) (type >> 8);
+	const uint8_t msg_type = (uint8_t) type;
+
+	switch (subsys_id) {
+	case NFNL_SUBSYS_CTNETLINK:
+		switch (msg_type) {
+		case IPCTNL_MSG_CT_NEW:
+			return netlink_new_flags;
+		case IPCTNL_MSG_CT_GET:
+		case IPCTNL_MSG_CT_GET_CTRZERO:
+		case IPCTNL_MSG_CT_GET_STATS_CPU:
+		case IPCTNL_MSG_CT_GET_STATS:
+		case IPCTNL_MSG_CT_GET_DYING:
+		case IPCTNL_MSG_CT_GET_UNCONFIRMED:
+			return netlink_get_flags;
+		case IPCTNL_MSG_CT_DELETE:
+			return netlink_delete_flags;
+		}
+		break;
+	case NFNL_SUBSYS_CTNETLINK_EXP:
+		switch (msg_type) {
+		case IPCTNL_MSG_EXP_NEW:
+			return netlink_new_flags;
+		case IPCTNL_MSG_EXP_GET:
+		case IPCTNL_MSG_EXP_GET_STATS_CPU:
+			return netlink_get_flags;
+		case IPCTNL_MSG_EXP_DELETE:
+			return netlink_delete_flags;
+		}
+		break;
+	case NFNL_SUBSYS_ACCT:
+		switch (msg_type) {
+		case NFNL_MSG_ACCT_NEW:
+			return netlink_new_flags;
+		case NFNL_MSG_ACCT_GET:
+		case NFNL_MSG_ACCT_GET_CTRZERO:
+			return netlink_get_flags;
+		case NFNL_MSG_ACCT_DEL:
+			return netlink_delete_flags;
+		}
+		break;
+	case NFNL_SUBSYS_CTNETLINK_TIMEOUT:
+		switch (msg_type) {
+		case IPCTNL_MSG_TIMEOUT_NEW:
+			return netlink_new_flags;
+		case IPCTNL_MSG_TIMEOUT_GET:
+			return netlink_get_flags;
+		case IPCTNL_MSG_TIMEOUT_DELETE:
+			return netlink_delete_flags;
+		}
+		break;
+	case NFNL_SUBSYS_CTHELPER:
+		switch (msg_type) {
+		case NFNL_MSG_CTHELPER_NEW:
+			return netlink_new_flags;
+		case NFNL_MSG_CTHELPER_GET:
+			return netlink_get_flags;
+		case NFNL_MSG_CTHELPER_DEL:
+			return netlink_delete_flags;
+		}
+		break;
+	case NFNL_SUBSYS_NFTABLES:
+		switch (msg_type) {
+		case NFT_MSG_NEWTABLE:
+		case NFT_MSG_NEWCHAIN:
+		case NFT_MSG_NEWRULE:
+		case NFT_MSG_NEWSET:
+		case NFT_MSG_NEWSETELEM:
+		case NFT_MSG_NEWGEN:
+		case NFT_MSG_NEWOBJ:
+			return netlink_new_flags;
+		case NFT_MSG_GETTABLE:
+		case NFT_MSG_GETCHAIN:
+		case NFT_MSG_GETRULE:
+		case NFT_MSG_GETSET:
+		case NFT_MSG_GETSETELEM:
+		case NFT_MSG_GETGEN:
+		case NFT_MSG_GETOBJ:
+		case NFT_MSG_GETOBJ_RESET:
+			return netlink_get_flags;
+		case NFT_MSG_DELTABLE:
+		case NFT_MSG_DELCHAIN:
+		case NFT_MSG_DELRULE:
+		case NFT_MSG_DELSET:
+		case NFT_MSG_DELSETELEM:
+		case NFT_MSG_DELOBJ:
+			return netlink_delete_flags;
+		}
+		break;
+	case NFNL_SUBSYS_NFT_COMPAT:
+		switch (msg_type) {
+		case NFNL_MSG_COMPAT_GET:
+			return netlink_get_flags;
+		}
+		break;
+	}
+
+	return NULL;
+}
+
+static const struct xlat *
+decode_nlmsg_flags_route(const uint16_t type)
+{
+	/* RTM_DELACTION uses NLM_F_ROOT flags */
+	if (type == RTM_DELACTION)
+		return netlink_get_flags;
+	switch (type & 3) {
+	case  0:
+		return netlink_new_flags;
+	case  1:
+		return netlink_delete_flags;
+	case  2:
+		return netlink_get_flags;
+	}
+
+	return NULL;
+}
+
+static const struct xlat *
+decode_nlmsg_flags_sock_diag(const uint16_t type)
+{
+	return netlink_get_flags;
+}
+
+static const struct xlat *
+decode_nlmsg_flags_xfrm(const uint16_t type)
+{
+	switch (type) {
+	case XFRM_MSG_NEWSA:
+	case XFRM_MSG_NEWPOLICY:
+	case XFRM_MSG_NEWAE:
+	case XFRM_MSG_NEWSADINFO:
+	case XFRM_MSG_NEWSPDINFO:
+		return netlink_new_flags;
+	case XFRM_MSG_DELSA:
+	case XFRM_MSG_DELPOLICY:
+		return netlink_delete_flags;
+	case XFRM_MSG_GETSA:
+	case XFRM_MSG_GETPOLICY:
+	case XFRM_MSG_GETAE:
+	case XFRM_MSG_GETSADINFO:
+	case XFRM_MSG_GETSPDINFO:
+		return netlink_get_flags;
+	}
+
+	return NULL;
+}
+
+typedef const struct xlat *(*nlmsg_flags_decoder_t)(const uint16_t type);
+
+static const nlmsg_flags_decoder_t nlmsg_flags[] = {
+	[NETLINK_CRYPTO] = decode_nlmsg_flags_crypto,
+	[NETLINK_NETFILTER] = decode_nlmsg_flags_netfilter,
+	[NETLINK_ROUTE] = decode_nlmsg_flags_route,
+	[NETLINK_SOCK_DIAG] = decode_nlmsg_flags_sock_diag,
+	[NETLINK_XFRM] = decode_nlmsg_flags_xfrm
+};
+
+/*
+ * As all valid netlink families are positive integers, use unsigned int
+ * for family here to filter out -1.
+ */
 static void
-decode_nlmsg_flags(const uint16_t flags, const uint16_t type, const int family)
+decode_nlmsg_flags(const uint16_t flags, const uint16_t type,
+		   const unsigned int family)
 {
 	const struct xlat *table = NULL;
 
 	if (type < NLMSG_MIN_TYPE) {
 		if (type == NLMSG_ERROR)
 			table = netlink_ack_flags;
-		goto end;
-	}
+	} else if (family < ARRAY_SIZE(nlmsg_flags) && nlmsg_flags[family])
+		table = nlmsg_flags[family](type);
 
-	switch (family) {
-	case NETLINK_CRYPTO:
-		switch (type) {
-		case CRYPTO_MSG_NEWALG:
-			table = netlink_new_flags;
-			break;
-		case CRYPTO_MSG_GETALG:
-			table = netlink_get_flags;
-			break;
-		}
-		break;
-	case NETLINK_SOCK_DIAG:
-		table = netlink_get_flags;
-		break;
-	case NETLINK_ROUTE:
-		if (type == RTM_DELACTION) {
-			table = netlink_get_flags;
-			break;
-		}
-		switch (type & 3) {
-		case  0:
-			table = netlink_new_flags;
-			break;
-		case  2:
-			table = netlink_get_flags;
-			break;
-		}
-		break;
-	case NETLINK_XFRM:
-		switch (type) {
-		case XFRM_MSG_NEWSA:
-		case XFRM_MSG_NEWPOLICY:
-		case XFRM_MSG_NEWAE:
-		case XFRM_MSG_NEWSADINFO:
-		case XFRM_MSG_NEWSPDINFO:
-			table = netlink_new_flags;
-			break;
-
-		case XFRM_MSG_GETSA:
-		case XFRM_MSG_GETPOLICY:
-		case XFRM_MSG_GETAE:
-		case XFRM_MSG_GETSADINFO:
-		case XFRM_MSG_GETSPDINFO:
-			table = netlink_get_flags;
-			break;
-		}
-		break;
-	}
-
-end:
 	printflags_ex(flags, "NLM_F_???", netlink_flags, table, NULL);
 }
 
diff --git a/netlink.h b/netlink.h
index 31b7876..42e7802 100644
--- a/netlink.h
+++ b/netlink.h
@@ -36,6 +36,9 @@
 # define NETLINK_SOCK_DIAG 4
 #endif
 
+#ifndef NLM_F_NONREC
+# define NLM_F_NONREC	0x100
+#endif
 #ifndef NLM_F_CAPPED
 # define NLM_F_CAPPED	0x100
 #endif
diff --git a/netlink_inet_diag.c b/netlink_inet_diag.c
index 700cbd3..cffe3f5 100644
--- a/netlink_inet_diag.c
+++ b/netlink_inet_diag.c
@@ -388,7 +388,8 @@
 	[INET_DIAG_PEERS]	= NULL,			/* unimplemented */
 	[INET_DIAG_PAD]		= NULL,
 	[INET_DIAG_MARK]	= decode_nla_u32,
-	[INET_DIAG_BBRINFO]	= decode_tcp_bbr_info
+	[INET_DIAG_BBRINFO]	= decode_tcp_bbr_info,
+	[INET_DIAG_CLASS_ID]	= decode_nla_u32
 };
 
 DECL_NETLINK_DIAG_DECODER(decode_inet_diag_msg)
diff --git a/nlattr.h b/nlattr.h
index 6e7d1a7..323f1d6 100644
--- a/nlattr.h
+++ b/nlattr.h
@@ -63,5 +63,6 @@
 DECL_NLA(ifindex);
 DECL_NLA(meminfo);
 DECL_NLA(rt_class);
+DECL_NLA(tc_stats);
 
 #endif /* !STRACE_NLATTR_H */
diff --git a/rtnl_mdb.c b/rtnl_mdb.c
index ebe737d..30c3473 100644
--- a/rtnl_mdb.c
+++ b/rtnl_mdb.c
@@ -39,7 +39,169 @@
 # include <linux/if_bridge.h>
 # include "netlink.h"
 
+# ifdef HAVE_STRUCT_BR_MDB_ENTRY_FLAGS
+#  include "xlat/mdb_flags.h"
+# endif
+# include "xlat/mdb_states.h"
+# include "xlat/multicast_router_types.h"
 # include "xlat/rtnl_mdb_attrs.h"
+# include "xlat/rtnl_mdba_mdb_attrs.h"
+# include "xlat/rtnl_mdba_mdb_eattr_attrs.h"
+# include "xlat/rtnl_mdba_mdb_entry_attrs.h"
+# include "xlat/rtnl_mdba_router_attrs.h"
+# include "xlat/rtnl_mdba_router_pattr_attrs.h"
+
+static const nla_decoder_t mdba_mdb_eattr_nla_decoders[] = {
+	[MDBA_MDB_EATTR_TIMER]	= decode_nla_u32
+};
+
+static bool
+decode_mdba_mdb_entry_info(struct tcb *const tcp,
+			   const kernel_ulong_t addr,
+			   const unsigned int len,
+			   const void *const opaque_data)
+{
+# ifdef HAVE_STRUCT_BR_MDB_ENTRY
+	struct br_mdb_entry entry;
+
+	if (len < sizeof(entry))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &entry)) {
+		PRINT_FIELD_IFINDEX("{", entry, ifindex);
+		PRINT_FIELD_XVAL(", ", entry, state, mdb_states, "MDB_???");
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_FLAGS
+		PRINT_FIELD_FLAGS(", ", entry, flags,
+				  mdb_flags, "MDB_FLAGS_???");
+#  endif
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_VID
+		PRINT_FIELD_U(", ", entry, vid);
+#  endif
+
+		const int proto = ntohs(entry.addr.proto);
+
+		tprints(", addr={");
+		print_inet_addr(proto, &entry.addr.u,
+				sizeof(entry.addr.u), "u");
+		tprints(", proto=htons(");
+		printxval(addrfams, proto, "AF_???");
+		tprints(")}}");
+	}
+
+	const size_t offset = NLMSG_ALIGN(sizeof(entry));
+	if (len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_mdba_mdb_eattr_attrs, "MDBA_MDB_EATTR_???",
+			      mdba_mdb_eattr_nla_decoders,
+			      ARRAY_SIZE(mdba_mdb_eattr_nla_decoders), NULL);
+	}
+
+	return true;
+# else
+	return false;
+# endif /* HAVE_STRUCT_BR_MDB_ENTRY */
+}
+
+static const nla_decoder_t mdba_mdb_entry_nla_decoders[] = {
+	[MDBA_MDB_ENTRY_INFO]	= decode_mdba_mdb_entry_info
+};
+
+static bool
+decode_mdba_mdb_entry(struct tcb *const tcp,
+		      const kernel_ulong_t addr,
+		      const unsigned int len,
+		      const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_mdba_mdb_entry_attrs,
+		      "MDBA_MDB_ENTRY_???", mdba_mdb_entry_nla_decoders,
+		      ARRAY_SIZE(mdba_mdb_entry_nla_decoders), NULL);
+
+	return true;
+}
+
+static const nla_decoder_t mdba_mdb_nla_decoders[] = {
+	[MDBA_MDB_ENTRY]	= decode_mdba_mdb_entry
+};
+
+static bool
+decode_mdba_mdb(struct tcb *const tcp,
+		const kernel_ulong_t addr,
+		const unsigned int len,
+		const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_mdba_mdb_attrs, "MDBA_MDB_???",
+		      mdba_mdb_nla_decoders,
+		      ARRAY_SIZE(mdba_mdb_nla_decoders), NULL);
+
+	return true;
+}
+
+static bool
+decode_multicast_router_type(struct tcb *const tcp,
+			     const kernel_ulong_t addr,
+			     const unsigned int len,
+			     const void *const opaque_data)
+{
+	uint8_t type;
+
+	if (!umove_or_printaddr(tcp, addr, &type))
+		printxval(multicast_router_types, type, "MDB_RTR_TYPE_???");
+
+	return true;
+}
+
+static const nla_decoder_t mdba_router_pattr_nla_decoders[] = {
+	[MDBA_ROUTER_PATTR_TIMER]	= decode_nla_u32,
+	[MDBA_ROUTER_PATTR_TYPE]	= decode_multicast_router_type
+};
+
+static bool
+decode_mdba_router_port(struct tcb *const tcp,
+			const kernel_ulong_t addr,
+			const unsigned int len,
+			const void *const opaque_data)
+{
+	uint32_t ifindex;
+
+	if (len < sizeof(ifindex))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &ifindex))
+		print_ifindex(ifindex);
+
+	const size_t offset = NLMSG_ALIGN(sizeof(ifindex));
+	if (len > offset) {
+		tprints(", ");
+		decode_nlattr(tcp, addr + offset, len - offset,
+			      rtnl_mdba_router_pattr_attrs,
+			      "MDBA_ROUTER_PATTR_???",
+			      mdba_router_pattr_nla_decoders,
+			      ARRAY_SIZE(mdba_router_pattr_nla_decoders), NULL);
+	}
+
+	return true;
+}
+
+static const nla_decoder_t mdba_router_nla_decoders[] = {
+	[MDBA_ROUTER_PORT]	= decode_mdba_router_port
+};
+
+static bool
+decode_mdba_router(struct tcb *const tcp,
+		   const kernel_ulong_t addr,
+		   const unsigned int len,
+		   const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_mdba_router_attrs, "MDBA_ROUTER_???",
+		      mdba_router_nla_decoders,
+		      ARRAY_SIZE(mdba_router_nla_decoders), NULL);
+
+	return true;
+}
+
+static const nla_decoder_t br_port_msg_nla_decoders[] = {
+	[MDBA_MDB]	= decode_mdba_mdb,
+	[MDBA_ROUTER]	= decode_mdba_router
+};
 
 DECL_NETLINK_ROUTE_DECODER(decode_br_port_msg)
 {
@@ -65,7 +227,9 @@
 	if (decode_nla && len > offset) {
 		tprints(", ");
 		decode_nlattr(tcp, addr + offset, len - offset,
-			      rtnl_mdb_attrs, "MDBA_???", NULL, 0, NULL);
+			      rtnl_mdb_attrs, "MDBA_???",
+			      br_port_msg_nla_decoders,
+			      ARRAY_SIZE(br_port_msg_nla_decoders), NULL);
 	}
 }
 
diff --git a/rtnl_tc.c b/rtnl_tc.c
index 74d9df2..e1bda75 100644
--- a/rtnl_tc.c
+++ b/rtnl_tc.c
@@ -33,9 +33,268 @@
 #include "print_fields.h"
 
 #include "netlink.h"
+#ifdef HAVE_STRUCT_GNET_STATS_BASIC
+# include <linux/gen_stats.h>
+#endif
+#include <linux/pkt_sched.h>
 #include <linux/rtnetlink.h>
 
 #include "xlat/rtnl_tc_attrs.h"
+#include "xlat/rtnl_tca_stab_attrs.h"
+#include "xlat/rtnl_tca_stats_attrs.h"
+
+static bool
+decode_tc_stats(struct tcb *const tcp,
+		const kernel_ulong_t addr,
+		const unsigned int len,
+		const void *const opaque_data)
+{
+	struct tc_stats st;
+	const unsigned int sizeof_tc_stats =
+		offsetofend(struct tc_stats, backlog);
+
+	if (len < sizeof_tc_stats)
+		return false;
+	else if (!umoven_or_printaddr(tcp, addr, sizeof_tc_stats, &st)) {
+		PRINT_FIELD_U("{", st, bytes);
+		PRINT_FIELD_U(", ", st, packets);
+		PRINT_FIELD_U(", ", st, drops);
+		PRINT_FIELD_U(", ", st, overlimits);
+		PRINT_FIELD_U(", ", st, bps);
+		PRINT_FIELD_U(", ", st, pps);
+		PRINT_FIELD_U(", ", st, qlen);
+		PRINT_FIELD_U(", ", st, backlog);
+		tprints("}");
+	}
+
+	return true;
+}
+
+static bool
+decode_tc_estimator(struct tcb *const tcp,
+		    const kernel_ulong_t addr,
+		    const unsigned int len,
+		    const void *const opaque_data)
+{
+	struct tc_estimator est;
+
+	if (len < sizeof(est))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &est)) {
+		PRINT_FIELD_D("{", est, interval);
+		PRINT_FIELD_U(", ", est, ewma_log);
+		tprints("}");
+	}
+
+	return true;
+}
+
+static bool
+decode_gnet_stats_basic(struct tcb *const tcp,
+			const kernel_ulong_t addr,
+			const unsigned int len,
+			const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_GNET_STATS_BASIC
+	struct gnet_stats_basic sb;
+	const unsigned int sizeof_st_basic =
+		offsetofend(struct gnet_stats_basic, packets);
+
+	if (len < sizeof_st_basic)
+		return false;
+	else if (!umoven_or_printaddr(tcp, addr, sizeof_st_basic, &sb)) {
+		PRINT_FIELD_U("{", sb, bytes);
+		PRINT_FIELD_U(", ", sb, packets);
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static bool
+decode_gnet_stats_rate_est(struct tcb *const tcp,
+			   const kernel_ulong_t addr,
+			   const unsigned int len,
+			   const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_GNET_STATS_RATE_EST
+	struct gnet_stats_rate_est est;
+
+	if (len < sizeof(est))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &est)) {
+		PRINT_FIELD_U("{", est, bps);
+		PRINT_FIELD_U(", ", est, pps);
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static bool
+decode_gnet_stats_queue(struct tcb *const tcp,
+			const kernel_ulong_t addr,
+			const unsigned int len,
+			const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_GNET_STATS_QUEUE
+	struct gnet_stats_queue qstats;
+
+	if (len < sizeof(qstats))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &qstats)) {
+		PRINT_FIELD_U("{", qstats, qlen);
+		PRINT_FIELD_U(", ", qstats, backlog);
+		PRINT_FIELD_U(", ", qstats, drops);
+		PRINT_FIELD_U(", ", qstats, requeues);
+		PRINT_FIELD_U(", ", qstats, overlimits);
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static bool
+decode_gnet_stats_rate_est64(struct tcb *const tcp,
+			     const kernel_ulong_t addr,
+			     const unsigned int len,
+			     const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_GNET_STATS_RATE_EST64
+	struct gnet_stats_rate_est64 est;
+
+	if (len < sizeof(est))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &est)) {
+		PRINT_FIELD_U("{", est, bps);
+		PRINT_FIELD_U(", ", est, pps);
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static const nla_decoder_t tca_stats_nla_decoders[] = {
+	[TCA_STATS_BASIC]	= decode_gnet_stats_basic,
+	[TCA_STATS_RATE_EST]	= decode_gnet_stats_rate_est,
+	[TCA_STATS_QUEUE]	= decode_gnet_stats_queue,
+	[TCA_STATS_APP]		= NULL, /* unimplemented */
+	[TCA_STATS_RATE_EST64]	= decode_gnet_stats_rate_est64,
+	[TCA_STATS_PAD]		= NULL,
+};
+
+bool
+decode_nla_tc_stats(struct tcb *const tcp,
+		    const kernel_ulong_t addr,
+		    const unsigned int len,
+		    const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_tca_stats_attrs, "TCA_STATS_???",
+		      tca_stats_nla_decoders,
+		      ARRAY_SIZE(tca_stats_nla_decoders), opaque_data);
+
+	return true;
+}
+
+static bool
+decode_tc_sizespec(struct tcb *const tcp,
+		   const kernel_ulong_t addr,
+		   const unsigned int len,
+		   const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_TC_SIZESPEC
+	struct tc_sizespec s;
+
+	if (len < sizeof(s))
+		return false;
+	else if (!umove_or_printaddr(tcp, addr, &s)) {
+		PRINT_FIELD_U("{", s, cell_log);
+		PRINT_FIELD_U(", ", s, size_log);
+		PRINT_FIELD_D(", ", s, cell_align);
+		PRINT_FIELD_D(", ", s, overhead);
+		PRINT_FIELD_U(", ", s, linklayer);
+		PRINT_FIELD_U(", ", s, mpu);
+		PRINT_FIELD_U(", ", s, mtu);
+		PRINT_FIELD_U(", ", s, tsize);
+		tprints("}");
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+
+static bool
+print_stab_data(struct tcb *const tcp, void *const elem_buf,
+		const size_t elem_size, void *const opaque_data)
+{
+	tprintf("%" PRIu16, *(uint16_t *) elem_buf);
+
+	return true;
+}
+
+static bool
+decode_tca_stab_data(struct tcb *const tcp,
+		     const kernel_ulong_t addr,
+		     const unsigned int len,
+		     const void *const opaque_data)
+{
+	uint16_t data;
+	const size_t nmemb = len / sizeof(data);
+
+	if (!nmemb)
+		return false;
+
+	print_array(tcp, addr, nmemb, &data, sizeof(data),
+		    umoven_or_printaddr, print_stab_data, NULL);
+
+	return true;
+}
+
+static const nla_decoder_t tca_stab_nla_decoders[] = {
+	[TCA_STAB_BASE]	= decode_tc_sizespec,
+	[TCA_STAB_DATA] = decode_tca_stab_data
+};
+
+static bool
+decode_tca_stab(struct tcb *const tcp,
+		const kernel_ulong_t addr,
+		const unsigned int len,
+		const void *const opaque_data)
+{
+	decode_nlattr(tcp, addr, len, rtnl_tca_stab_attrs, "TCA_STAB_???",
+		      tca_stab_nla_decoders,
+		      ARRAY_SIZE(tca_stab_nla_decoders), opaque_data);
+
+	return true;
+}
+
+static const nla_decoder_t tcmsg_nla_decoders[] = {
+	[TCA_KIND]		= decode_nla_str,
+	[TCA_OPTIONS]		= NULL, /* unimplemented */
+	[TCA_STATS]		= decode_tc_stats,
+	[TCA_XSTATS]		= NULL, /* unimplemented */
+	[TCA_RATE]		= decode_tc_estimator,
+	[TCA_FCNT]		= decode_nla_u32,
+	[TCA_STATS2]		= decode_nla_tc_stats,
+	[TCA_STAB]		= decode_tca_stab,
+	[TCA_PAD]		= NULL,
+	[TCA_DUMP_INVISIBLE]	= NULL,
+	[TCA_CHAIN]		= decode_nla_u32
+};
 
 DECL_NETLINK_ROUTE_DECODER(decode_tcmsg)
 {
@@ -64,6 +323,7 @@
 	if (decode_nla && len > offset) {
 		tprints(", ");
 		decode_nlattr(tcp, addr + offset, len - offset,
-			      rtnl_tc_attrs, "TCA_???", NULL, 0, NULL);
+			      rtnl_tc_attrs, "TCA_???", tcmsg_nla_decoders,
+			      ARRAY_SIZE(tcmsg_nla_decoders), NULL);
 	}
 }
diff --git a/rtnl_tc_action.c b/rtnl_tc_action.c
index ca0b72b..499c69a 100644
--- a/rtnl_tc_action.c
+++ b/rtnl_tc_action.c
@@ -37,6 +37,15 @@
 
 #include "xlat/rtnl_tc_action_attrs.h"
 
+static const nla_decoder_t tcamsg_nla_decoders[] = {
+	[TCA_ACT_KIND]		= decode_nla_str,
+	[TCA_ACT_OPTIONS]	= NULL, /* unimplemented */
+	[TCA_ACT_INDEX]		= decode_nla_u32,
+	[TCA_ACT_STATS]		= decode_nla_tc_stats,
+	[TCA_ACT_PAD]		= NULL,
+	[TCA_ACT_COOKIE]	= NULL /* default parser */
+};
+
 DECL_NETLINK_ROUTE_DECODER(decode_tcamsg)
 {
 	struct tcamsg tca = { .tca_family = family };
@@ -49,6 +58,7 @@
 		tprints(", ");
 		decode_nlattr(tcp, addr + offset, len - offset,
 			      rtnl_tc_action_attrs, "TCA_ACT_???",
-			      NULL, 0, NULL);
+			      tcamsg_nla_decoders,
+			      ARRAY_SIZE(tcamsg_nla_decoders), NULL);
 	}
 }
diff --git a/seccomp.c b/seccomp.c
index 6c19084..99597d0 100644
--- a/seccomp.c
+++ b/seccomp.c
@@ -33,29 +33,37 @@
 #include "xlat/seccomp_ops.h"
 #include "xlat/seccomp_filter_flags.h"
 
-static void
-decode_seccomp_set_mode_strict(const unsigned int flags,
-			       const kernel_ulong_t addr)
-{
-	tprintf("%u, ", flags);
-	printaddr(addr);
-}
-
 SYS_FUNC(seccomp)
 {
 	unsigned int op = tcp->u_arg[0];
+	unsigned int flags = tcp->u_arg[1];
+	unsigned int act;
 
 	printxval(seccomp_ops, op, "SECCOMP_SET_MODE_???");
 	tprints(", ");
 
-	if (op == SECCOMP_SET_MODE_FILTER) {
-		printflags(seccomp_filter_flags, tcp->u_arg[1],
+	switch (op) {
+	case SECCOMP_GET_ACTION_AVAIL:
+		tprintf("%u, ", flags);
+		if (!umove_or_printaddr(tcp, tcp->u_arg[2], &act)) {
+			tprints("[");
+			printxval(seccomp_ret_action, act, "SECCOMP_RET_???");
+			tprints("]");
+		}
+		break;
+
+	case SECCOMP_SET_MODE_FILTER:
+		printflags(seccomp_filter_flags, flags,
 			   "SECCOMP_FILTER_FLAG_???");
 		tprints(", ");
 		decode_seccomp_fprog(tcp, tcp->u_arg[2]);
-	} else {
-		decode_seccomp_set_mode_strict(tcp->u_arg[1],
-					       tcp->u_arg[2]);
+		break;
+
+	case SECCOMP_SET_MODE_STRICT:
+	default:
+		tprintf("%u, ", flags);
+		printaddr(tcp->u_arg[2]);
+		break;
 	}
 
 	return RVAL_DECODED;
diff --git a/strace.1 b/strace.1
index ca0f151..a843ba4 100644
--- a/strace.1
+++ b/strace.1
@@ -53,7 +53,7 @@
 .  el \
 .    BR "\\$1"
 ..
-.TH STRACE 1 "2017-08-28" "strace 4.19"
+.TH STRACE 1 "2017-08-28" "strace 4.20"
 .SH NAME
 strace \- trace system calls and signals
 .SH SYNOPSIS
diff --git a/strace.spec b/strace.spec
index 0937354..63958fb 100644
--- a/strace.spec
+++ b/strace.spec
@@ -1,6 +1,6 @@
 Summary: Tracks and displays system calls associated with a running process
 Name: strace
-Version: 4.19
+Version: 4.20
 Release: 1%{?dist}
 License: BSD
 Group: Development/Debuggers
@@ -102,8 +102,11 @@
 %endif
 
 %changelog
-* Tue Sep 05 2017 strace-devel@lists.sourceforge.net - 4.19-1
-- strace 4.19 snapshot.
+* Mon Nov 13 2017 strace-devel@lists.sourceforge.net - 4.20-1
+- strace 4.20 snapshot.
+
+* Tue Sep 05 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.19-1
+- v4.18 -> v4.19.
 
 * Wed Jul 05 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.18-1
 - v4.17 -> v4.18.
diff --git a/strace.spec.in b/strace.spec.in
index 0556f78..08dd2d3 100644
--- a/strace.spec.in
+++ b/strace.spec.in
@@ -105,6 +105,9 @@
 * @RPM_CHANGELOGTIME@ @PACKAGE_BUGREPORT@ - @PACKAGE_VERSION@-1
 - @PACKAGE_STRING@ snapshot.
 
+* Tue Sep 05 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.19-1
+- v4.18 -> v4.19.
+
 * Wed Jul 05 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.18-1
 - v4.17 -> v4.18.
 
diff --git a/tests-m32/Makefile.am b/tests-m32/Makefile.am
index 741fd8d..e5aa077 100644
--- a/tests-m32/Makefile.am
+++ b/tests-m32/Makefile.am
@@ -87,6 +87,8 @@
 	attach-p-cmd-p \
 	block_reset_raise_run \
 	caps-abbrev \
+	check_sigblock \
+	check_sigign \
 	clone_parent \
 	clone_ptrace \
 	count-f \
@@ -106,6 +108,7 @@
 	ioctl_rtc-v \
 	is_linux_mips_n64 \
 	ksysent \
+	list_sigaction_signum \
 	mmsg-silent \
 	mmsg_name-v \
 	msg_control-v \
@@ -135,6 +138,8 @@
 	seccomp-filter-v \
 	seccomp-strict \
 	set_ptracer_any \
+	set_sigblock \
+	set_sigign \
 	signal_receive \
 	sleep \
 	stack-fcall \
@@ -278,6 +283,8 @@
 	redirect-fds.test \
 	redirect.test \
 	restart_syscall.test \
+	sigblock.test \
+	sigign.test \
 	strace-C.test \
 	strace-E.test \
 	strace-S.test \
diff --git a/tests-m32/Makefile.in b/tests-m32/Makefile.in
index f6955de..7c52fba 100644
--- a/tests-m32/Makefile.in
+++ b/tests-m32/Makefile.in
@@ -139,7 +139,8 @@
 check_PROGRAMS = $(am__EXEEXT_1) answer$(EXEEXT) attach-f-p$(EXEEXT) \
 	attach-f-p-cmd$(EXEEXT) attach-p-cmd-cmd$(EXEEXT) \
 	attach-p-cmd-p$(EXEEXT) block_reset_raise_run$(EXEEXT) \
-	caps-abbrev$(EXEEXT) clone_parent$(EXEEXT) \
+	caps-abbrev$(EXEEXT) check_sigblock$(EXEEXT) \
+	check_sigign$(EXEEXT) clone_parent$(EXEEXT) \
 	clone_ptrace$(EXEEXT) count-f$(EXEEXT) execve-v$(EXEEXT) \
 	execveat-v$(EXEEXT) filter-unavailable$(EXEEXT) \
 	fork-f$(EXEEXT) getpid$(EXEEXT) getppid$(EXEEXT) \
@@ -147,10 +148,11 @@
 	ioctl_evdev-v$(EXEEXT) ioctl_loop-nv$(EXEEXT) \
 	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
 	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
-	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
-	msg_control-v$(EXEEXT) net-accept-connect$(EXEEXT) \
-	netlink_inet_diag$(EXEEXT) netlink_netlink_diag$(EXEEXT) \
-	netlink_unix_diag$(EXEEXT) nsyscalls$(EXEEXT) pc$(EXEEXT) \
+	list_sigaction_signum$(EXEEXT) mmsg-silent$(EXEEXT) \
+	mmsg_name-v$(EXEEXT) msg_control-v$(EXEEXT) \
+	net-accept-connect$(EXEEXT) netlink_inet_diag$(EXEEXT) \
+	netlink_netlink_diag$(EXEEXT) netlink_unix_diag$(EXEEXT) \
+	nsyscalls$(EXEEXT) pc$(EXEEXT) \
 	perf_event_open_nonverbose$(EXEEXT) \
 	perf_event_open_unabbrev$(EXEEXT) ppoll-v$(EXEEXT) \
 	prctl-seccomp-filter-v$(EXEEXT) prctl-seccomp-strict$(EXEEXT) \
@@ -161,8 +163,9 @@
 	redirect-fds$(EXEEXT) restart_syscall$(EXEEXT) \
 	run_expect_termsig$(EXEEXT) scm_rights$(EXEEXT) \
 	seccomp-filter-v$(EXEEXT) seccomp-strict$(EXEEXT) \
-	set_ptracer_any$(EXEEXT) signal_receive$(EXEEXT) \
-	sleep$(EXEEXT) stack-fcall$(EXEEXT) threads-execve$(EXEEXT) \
+	set_ptracer_any$(EXEEXT) set_sigblock$(EXEEXT) \
+	set_sigign$(EXEEXT) signal_receive$(EXEEXT) sleep$(EXEEXT) \
+	stack-fcall$(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)
@@ -253,9 +256,9 @@
 	ioctl_uffdio$(EXEEXT) ioctl_v4l2$(EXEEXT) ioperm$(EXEEXT) \
 	iopl$(EXEEXT) ioprio$(EXEEXT) ip_mreq$(EXEEXT) ipc$(EXEEXT) \
 	ipc_msg$(EXEEXT) ipc_msgbuf$(EXEEXT) ipc_sem$(EXEEXT) \
-	ipc_shm$(EXEEXT) kcmp$(EXEEXT) kexec_file_load$(EXEEXT) \
-	kexec_load$(EXEEXT) keyctl$(EXEEXT) kill$(EXEEXT) \
-	lchown$(EXEEXT) lchown32$(EXEEXT) link$(EXEEXT) \
+	ipc_shm$(EXEEXT) kcmp$(EXEEXT) kcmp-y$(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) \
@@ -275,19 +278,27 @@
 	netlink_netfilter$(EXEEXT) netlink_protocol$(EXEEXT) \
 	netlink_route$(EXEEXT) netlink_selinux$(EXEEXT) \
 	netlink_sock_diag$(EXEEXT) netlink_xfrm$(EXEEXT) \
-	newfstatat$(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) \
+	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) \
 	nlattr_inet_diag_req_compat$(EXEEXT) \
-	nlattr_inet_diag_req_v2$(EXEEXT) nlattr_ndmsg$(EXEEXT) \
+	nlattr_inet_diag_req_v2$(EXEEXT) \
+	nlattr_mdba_mdb_entry$(EXEEXT) \
+	nlattr_mdba_router_port$(EXEEXT) nlattr_ndmsg$(EXEEXT) \
 	nlattr_ndtmsg$(EXEEXT) nlattr_netconfmsg$(EXEEXT) \
 	nlattr_netlink_diag_msg$(EXEEXT) nlattr_nlmsgerr$(EXEEXT) \
 	nlattr_packet_diag_msg$(EXEEXT) nlattr_rtgenmsg$(EXEEXT) \
 	nlattr_rtmsg$(EXEEXT) nlattr_smc_diag_msg$(EXEEXT) \
+	nlattr_tc_stats$(EXEEXT) nlattr_tca_stab$(EXEEXT) \
 	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
 	oldfstat$(EXEEXT) oldlstat$(EXEEXT) oldselect$(EXEEXT) \
@@ -321,7 +332,8 @@
 	sched_get_priority_mxx$(EXEEXT) sched_rr_get_interval$(EXEEXT) \
 	sched_xetaffinity$(EXEEXT) sched_xetattr$(EXEEXT) \
 	sched_xetparam$(EXEEXT) sched_xetscheduler$(EXEEXT) \
-	sched_yield$(EXEEXT) seccomp-filter$(EXEEXT) select$(EXEEXT) \
+	sched_yield$(EXEEXT) seccomp-filter$(EXEEXT) \
+	seccomp_get_action_avail$(EXEEXT) select$(EXEEXT) \
 	semop$(EXEEXT) sendfile$(EXEEXT) sendfile64$(EXEEXT) \
 	set_mempolicy$(EXEEXT) setdomainname$(EXEEXT) \
 	setfsgid$(EXEEXT) setfsgid32$(EXEEXT) setfsuid$(EXEEXT) \
@@ -439,6 +451,14 @@
 caps_abbrev_OBJECTS = caps-abbrev.$(OBJEXT)
 caps_abbrev_LDADD = $(LDADD)
 caps_abbrev_DEPENDENCIES = libtests.a
+check_sigblock_SOURCES = check_sigblock.c
+check_sigblock_OBJECTS = check_sigblock.$(OBJEXT)
+check_sigblock_LDADD = $(LDADD)
+check_sigblock_DEPENDENCIES = libtests.a
+check_sigign_SOURCES = check_sigign.c
+check_sigign_OBJECTS = check_sigign.$(OBJEXT)
+check_sigign_LDADD = $(LDADD)
+check_sigign_DEPENDENCIES = libtests.a
 chmod_SOURCES = chmod.c
 chmod_OBJECTS = chmod.$(OBJEXT)
 chmod_LDADD = $(LDADD)
@@ -936,6 +956,10 @@
 kcmp_OBJECTS = kcmp.$(OBJEXT)
 kcmp_LDADD = $(LDADD)
 kcmp_DEPENDENCIES = libtests.a
+kcmp_y_SOURCES = kcmp-y.c
+kcmp_y_OBJECTS = kcmp-y.$(OBJEXT)
+kcmp_y_LDADD = $(LDADD)
+kcmp_y_DEPENDENCIES = libtests.a
 kexec_file_load_SOURCES = kexec_file_load.c
 kexec_file_load_OBJECTS = kexec_file_load.$(OBJEXT)
 kexec_file_load_LDADD = $(LDADD)
@@ -972,6 +996,10 @@
 linkat_OBJECTS = linkat.$(OBJEXT)
 linkat_LDADD = $(LDADD)
 linkat_DEPENDENCIES = libtests.a
+list_sigaction_signum_SOURCES = list_sigaction_signum.c
+list_sigaction_signum_OBJECTS = list_sigaction_signum.$(OBJEXT)
+list_sigaction_signum_LDADD = $(LDADD)
+list_sigaction_signum_DEPENDENCIES = libtests.a
 llseek_SOURCES = llseek.c
 llseek_OBJECTS = llseek.$(OBJEXT)
 llseek_LDADD = $(LDADD)
@@ -1192,6 +1220,50 @@
 newfstatat_OBJECTS = newfstatat-newfstatat.$(OBJEXT)
 newfstatat_LDADD = $(LDADD)
 newfstatat_DEPENDENCIES = libtests.a
+nfnetlink_acct_SOURCES = nfnetlink_acct.c
+nfnetlink_acct_OBJECTS = nfnetlink_acct.$(OBJEXT)
+nfnetlink_acct_LDADD = $(LDADD)
+nfnetlink_acct_DEPENDENCIES = libtests.a
+nfnetlink_cthelper_SOURCES = nfnetlink_cthelper.c
+nfnetlink_cthelper_OBJECTS = nfnetlink_cthelper.$(OBJEXT)
+nfnetlink_cthelper_LDADD = $(LDADD)
+nfnetlink_cthelper_DEPENDENCIES = libtests.a
+nfnetlink_ctnetlink_SOURCES = nfnetlink_ctnetlink.c
+nfnetlink_ctnetlink_OBJECTS = nfnetlink_ctnetlink.$(OBJEXT)
+nfnetlink_ctnetlink_LDADD = $(LDADD)
+nfnetlink_ctnetlink_DEPENDENCIES = libtests.a
+nfnetlink_ctnetlink_exp_SOURCES = nfnetlink_ctnetlink_exp.c
+nfnetlink_ctnetlink_exp_OBJECTS = nfnetlink_ctnetlink_exp.$(OBJEXT)
+nfnetlink_ctnetlink_exp_LDADD = $(LDADD)
+nfnetlink_ctnetlink_exp_DEPENDENCIES = libtests.a
+nfnetlink_cttimeout_SOURCES = nfnetlink_cttimeout.c
+nfnetlink_cttimeout_OBJECTS = nfnetlink_cttimeout.$(OBJEXT)
+nfnetlink_cttimeout_LDADD = $(LDADD)
+nfnetlink_cttimeout_DEPENDENCIES = libtests.a
+nfnetlink_ipset_SOURCES = nfnetlink_ipset.c
+nfnetlink_ipset_OBJECTS = nfnetlink_ipset.$(OBJEXT)
+nfnetlink_ipset_LDADD = $(LDADD)
+nfnetlink_ipset_DEPENDENCIES = libtests.a
+nfnetlink_nft_compat_SOURCES = nfnetlink_nft_compat.c
+nfnetlink_nft_compat_OBJECTS = nfnetlink_nft_compat.$(OBJEXT)
+nfnetlink_nft_compat_LDADD = $(LDADD)
+nfnetlink_nft_compat_DEPENDENCIES = libtests.a
+nfnetlink_nftables_SOURCES = nfnetlink_nftables.c
+nfnetlink_nftables_OBJECTS = nfnetlink_nftables.$(OBJEXT)
+nfnetlink_nftables_LDADD = $(LDADD)
+nfnetlink_nftables_DEPENDENCIES = libtests.a
+nfnetlink_osf_SOURCES = nfnetlink_osf.c
+nfnetlink_osf_OBJECTS = nfnetlink_osf.$(OBJEXT)
+nfnetlink_osf_LDADD = $(LDADD)
+nfnetlink_osf_DEPENDENCIES = libtests.a
+nfnetlink_queue_SOURCES = nfnetlink_queue.c
+nfnetlink_queue_OBJECTS = nfnetlink_queue.$(OBJEXT)
+nfnetlink_queue_LDADD = $(LDADD)
+nfnetlink_queue_DEPENDENCIES = libtests.a
+nfnetlink_ulog_SOURCES = nfnetlink_ulog.c
+nfnetlink_ulog_OBJECTS = nfnetlink_ulog.$(OBJEXT)
+nfnetlink_ulog_LDADD = $(LDADD)
+nfnetlink_ulog_DEPENDENCIES = libtests.a
 nlattr_SOURCES = nlattr.c
 nlattr_OBJECTS = nlattr.$(OBJEXT)
 nlattr_LDADD = $(LDADD)
@@ -1249,6 +1321,14 @@
 nlattr_inet_diag_req_v2_OBJECTS = nlattr_inet_diag_req_v2.$(OBJEXT)
 nlattr_inet_diag_req_v2_LDADD = $(LDADD)
 nlattr_inet_diag_req_v2_DEPENDENCIES = libtests.a
+nlattr_mdba_mdb_entry_SOURCES = nlattr_mdba_mdb_entry.c
+nlattr_mdba_mdb_entry_OBJECTS = nlattr_mdba_mdb_entry.$(OBJEXT)
+nlattr_mdba_mdb_entry_LDADD = $(LDADD)
+nlattr_mdba_mdb_entry_DEPENDENCIES = libtests.a
+nlattr_mdba_router_port_SOURCES = nlattr_mdba_router_port.c
+nlattr_mdba_router_port_OBJECTS = nlattr_mdba_router_port.$(OBJEXT)
+nlattr_mdba_router_port_LDADD = $(LDADD)
+nlattr_mdba_router_port_DEPENDENCIES = libtests.a
 nlattr_ndmsg_SOURCES = nlattr_ndmsg.c
 nlattr_ndmsg_OBJECTS = nlattr_ndmsg.$(OBJEXT)
 nlattr_ndmsg_LDADD = $(LDADD)
@@ -1285,6 +1365,14 @@
 nlattr_smc_diag_msg_OBJECTS = nlattr_smc_diag_msg.$(OBJEXT)
 nlattr_smc_diag_msg_LDADD = $(LDADD)
 nlattr_smc_diag_msg_DEPENDENCIES = libtests.a
+nlattr_tc_stats_SOURCES = nlattr_tc_stats.c
+nlattr_tc_stats_OBJECTS = nlattr_tc_stats.$(OBJEXT)
+nlattr_tc_stats_LDADD = $(LDADD)
+nlattr_tc_stats_DEPENDENCIES = libtests.a
+nlattr_tca_stab_SOURCES = nlattr_tca_stab.c
+nlattr_tca_stab_OBJECTS = nlattr_tca_stab.$(OBJEXT)
+nlattr_tca_stab_LDADD = $(LDADD)
+nlattr_tca_stab_DEPENDENCIES = libtests.a
 nlattr_tcamsg_SOURCES = nlattr_tcamsg.c
 nlattr_tcamsg_OBJECTS = nlattr_tcamsg.$(OBJEXT)
 nlattr_tcamsg_LDADD = $(LDADD)
@@ -1696,6 +1784,10 @@
 seccomp_strict_OBJECTS = seccomp-strict.$(OBJEXT)
 seccomp_strict_LDADD = $(LDADD)
 seccomp_strict_DEPENDENCIES = libtests.a
+seccomp_get_action_avail_SOURCES = seccomp_get_action_avail.c
+seccomp_get_action_avail_OBJECTS = seccomp_get_action_avail.$(OBJEXT)
+seccomp_get_action_avail_LDADD = $(LDADD)
+seccomp_get_action_avail_DEPENDENCIES = libtests.a
 select_SOURCES = select.c
 select_OBJECTS = select.$(OBJEXT)
 select_LDADD = $(LDADD)
@@ -1720,6 +1812,14 @@
 set_ptracer_any_OBJECTS = set_ptracer_any.$(OBJEXT)
 set_ptracer_any_LDADD = $(LDADD)
 set_ptracer_any_DEPENDENCIES = libtests.a
+set_sigblock_SOURCES = set_sigblock.c
+set_sigblock_OBJECTS = set_sigblock.$(OBJEXT)
+set_sigblock_LDADD = $(LDADD)
+set_sigblock_DEPENDENCIES = libtests.a
+set_sigign_SOURCES = set_sigign.c
+set_sigign_OBJECTS = set_sigign.$(OBJEXT)
+set_sigign_LDADD = $(LDADD)
+set_sigign_DEPENDENCIES = libtests.a
 setdomainname_SOURCES = setdomainname.c
 setdomainname_OBJECTS = setdomainname.$(OBJEXT)
 setdomainname_LDADD = $(LDADD)
@@ -2169,10 +2269,11 @@
 	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 chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
-	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	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 \
+	delete_module.c dup.c dup2.c dup3.c epoll_create.c \
 	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
 	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
 	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
@@ -2195,39 +2296,45 @@
 	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 \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c kcmp-y.c \
 	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
-	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
-	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
-	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
-	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
-	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
-	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
-	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
-	munlockall.c nanosleep.c net-accept-connect.c \
-	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
-	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
-	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
-	netlink_kobject_uevent.c netlink_netfilter.c \
-	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
-	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
-	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
-	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
-	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
-	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
-	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
-	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
-	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
-	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
-	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
-	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
-	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
-	osf_utimes.c pause.c pc.c perf_event_open.c \
-	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
-	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
-	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
-	prctl-dumpable.c prctl-name.c prctl-no-args.c \
-	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	lchown.c lchown32.c link.c linkat.c list_sigaction_signum.c \
+	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
+	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
+	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
+	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
+	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
+	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
+	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
+	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
+	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
+	netlink_audit.c netlink_crypto.c netlink_generic.c \
+	netlink_inet_diag.c netlink_kobject_uevent.c \
+	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
+	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
+	netlink_unix_diag.c netlink_xfrm.c newfstatat.c \
+	nfnetlink_acct.c nfnetlink_cthelper.c nfnetlink_ctnetlink.c \
+	nfnetlink_ctnetlink_exp.c nfnetlink_cttimeout.c \
+	nfnetlink_ipset.c nfnetlink_nft_compat.c nfnetlink_nftables.c \
+	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 old_mmap.c oldfstat.c oldlstat.c oldselect.c \
+	oldstat.c open.c openat.c osf_utimes.c pause.c pc.c \
+	perf_event_open.c perf_event_open_nonverbose.c \
+	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
+	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
+	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
+	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
 	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
@@ -2248,8 +2355,9 @@
 	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
 	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
 	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
-	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
-	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	seccomp-strict.c seccomp_get_action_avail.c select.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 \
@@ -2275,10 +2383,11 @@
 	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 chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
-	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	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 \
+	delete_module.c dup.c dup2.c dup3.c epoll_create.c \
 	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
 	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
 	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
@@ -2301,39 +2410,45 @@
 	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 \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c kcmp-y.c \
 	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
-	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
-	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
-	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
-	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
-	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
-	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
-	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
-	munlockall.c nanosleep.c net-accept-connect.c \
-	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
-	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
-	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
-	netlink_kobject_uevent.c netlink_netfilter.c \
-	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
-	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
-	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
-	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
-	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
-	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
-	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
-	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
-	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
-	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
-	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
-	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
-	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
-	osf_utimes.c pause.c pc.c perf_event_open.c \
-	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
-	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
-	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
-	prctl-dumpable.c prctl-name.c prctl-no-args.c \
-	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	lchown.c lchown32.c link.c linkat.c list_sigaction_signum.c \
+	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
+	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
+	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
+	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
+	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
+	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
+	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
+	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
+	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
+	netlink_audit.c netlink_crypto.c netlink_generic.c \
+	netlink_inet_diag.c netlink_kobject_uevent.c \
+	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
+	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
+	netlink_unix_diag.c netlink_xfrm.c newfstatat.c \
+	nfnetlink_acct.c nfnetlink_cthelper.c nfnetlink_ctnetlink.c \
+	nfnetlink_ctnetlink_exp.c nfnetlink_cttimeout.c \
+	nfnetlink_ipset.c nfnetlink_nft_compat.c nfnetlink_nftables.c \
+	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 old_mmap.c oldfstat.c oldlstat.c oldselect.c \
+	oldstat.c open.c openat.c osf_utimes.c pause.c pc.c \
+	perf_event_open.c perf_event_open_nonverbose.c \
+	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
+	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
+	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
+	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
 	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
@@ -2354,8 +2469,9 @@
 	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
 	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
 	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
-	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
-	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	seccomp-strict.c seccomp_get_action_avail.c select.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 \
@@ -2924,6 +3040,7 @@
   ipc_sem \
   ipc_shm \
   kcmp \
+  kcmp-y \
   kexec_file_load \
   kexec_load \
   keyctl \
@@ -2981,6 +3098,17 @@
   netlink_sock_diag \
   netlink_xfrm \
   newfstatat \
+  nfnetlink_acct \
+  nfnetlink_cthelper \
+  nfnetlink_ctnetlink \
+  nfnetlink_ctnetlink_exp \
+  nfnetlink_cttimeout \
+  nfnetlink_nft_compat \
+  nfnetlink_nftables \
+  nfnetlink_ipset \
+  nfnetlink_osf \
+  nfnetlink_queue \
+  nfnetlink_ulog \
   nlattr \
   nlattr_crypto_user_alg \
   nlattr_br_port_msg \
@@ -2995,6 +3123,8 @@
   nlattr_inet_diag_msg \
   nlattr_inet_diag_req_compat \
   nlattr_inet_diag_req_v2 \
+  nlattr_mdba_mdb_entry \
+  nlattr_mdba_router_port \
   nlattr_ndmsg \
   nlattr_ndtmsg \
   nlattr_netconfmsg \
@@ -3004,6 +3134,8 @@
   nlattr_rtgenmsg \
   nlattr_rtmsg \
   nlattr_smc_diag_msg \
+  nlattr_tc_stats \
+  nlattr_tca_stab \
   nlattr_tcamsg \
   nlattr_tcmsg \
   nlattr_unix_diag_msg \
@@ -3084,6 +3216,7 @@
   sched_xetscheduler \
   sched_yield \
   seccomp-filter \
+  seccomp_get_action_avail \
   select \
   semop \
   sendfile \
@@ -3253,39 +3386,47 @@
 	ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test \
 	iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test \
 	ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test \
-	kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test \
-	keyctl.gen.test kill.gen.test lchown.gen.test \
-	lchown32.gen.test link.gen.test linkat.gen.test \
-	lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test \
-	madvise.gen.test mbind.gen.test membarrier.gen.test \
-	memfd_create.gen.test migrate_pages.gen.test mincore.gen.test \
-	mkdir.gen.test mkdirat.gen.test mknod.gen.test \
-	mknodat.gen.test mlock.gen.test mlock2.gen.test \
-	mlockall.gen.test mmap64.gen.test mmsg.gen.test \
-	mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test \
-	mount.gen.test move_pages.gen.test mq.gen.test \
-	mq_sendrecv.gen.test mq_sendrecv-read.gen.test \
-	mq_sendrecv-write.gen.test msg_control.gen.test \
-	msg_control-v.gen.test msg_name.gen.test munlockall.gen.test \
-	nanosleep.gen.test net-icmp_filter.gen.test \
-	net-sockaddr.gen.test netlink_audit.gen.test \
-	netlink_crypto.gen.test netlink_generic.gen.test \
-	netlink_kobject_uevent.gen.test netlink_netfilter.gen.test \
-	netlink_protocol.gen.test netlink_route.gen.test \
-	netlink_selinux.gen.test netlink_xfrm.gen.test \
-	newfstatat.gen.test nlattr.gen.test \
-	nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test \
-	nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test \
-	nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test \
-	nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test \
-	nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test \
-	nlattr_inet_diag_msg.gen.test \
+	kcmp.gen.test kcmp-y.gen.test kexec_file_load.gen.test \
+	kexec_load.gen.test keyctl.gen.test kill.gen.test \
+	lchown.gen.test lchown32.gen.test link.gen.test \
+	linkat.gen.test lookup_dcookie.gen.test lstat.gen.test \
+	lstat64.gen.test madvise.gen.test mbind.gen.test \
+	membarrier.gen.test memfd_create.gen.test \
+	migrate_pages.gen.test mincore.gen.test mkdir.gen.test \
+	mkdirat.gen.test mknod.gen.test mknodat.gen.test \
+	mlock.gen.test mlock2.gen.test mlockall.gen.test \
+	mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test \
+	mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test \
+	move_pages.gen.test mq.gen.test mq_sendrecv.gen.test \
+	mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test \
+	msg_control.gen.test msg_control-v.gen.test msg_name.gen.test \
+	munlockall.gen.test nanosleep.gen.test \
+	net-icmp_filter.gen.test net-sockaddr.gen.test \
+	netlink_audit.gen.test netlink_crypto.gen.test \
+	netlink_generic.gen.test netlink_kobject_uevent.gen.test \
+	netlink_netfilter.gen.test netlink_protocol.gen.test \
+	netlink_route.gen.test netlink_selinux.gen.test \
+	netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test \
+	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_ndmsg.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 \
 	oldfstat.gen.test oldlstat.gen.test oldstat.gen.test \
@@ -3319,20 +3460,21 @@
 	sched_xetattr.gen.test sched_xetparam.gen.test \
 	sched_xetscheduler.gen.test sched_yield.gen.test \
 	seccomp-filter.gen.test seccomp-filter-v.gen.test \
-	select.gen.test semop.gen.test sendfile.gen.test \
-	sendfile64.gen.test set_mempolicy.gen.test \
-	setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test \
-	setfsuid.gen.test setfsuid32.gen.test setgid.gen.test \
-	setgid32.gen.test setgroups.gen.test setgroups32.gen.test \
-	sethostname.gen.test setns.gen.test setregid.gen.test \
-	setregid32.gen.test setresgid.gen.test setresgid32.gen.test \
-	setresuid.gen.test setresuid32.gen.test setreuid.gen.test \
-	setreuid32.gen.test setrlimit.gen.test setuid.gen.test \
-	setuid32.gen.test shmxt.gen.test shutdown.gen.test \
-	sigaction.gen.test siginfo.gen.test signal.gen.test \
-	signal_receive.gen.test signalfd4.gen.test sigpending.gen.test \
-	sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test \
-	so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test \
+	seccomp_get_action_avail.gen.test select.gen.test \
+	semop.gen.test sendfile.gen.test sendfile64.gen.test \
+	set_mempolicy.gen.test setdomainname.gen.test \
+	setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test \
+	setfsuid32.gen.test setgid.gen.test setgid32.gen.test \
+	setgroups.gen.test setgroups32.gen.test sethostname.gen.test \
+	setns.gen.test setregid.gen.test setregid32.gen.test \
+	setresgid.gen.test setresgid32.gen.test setresuid.gen.test \
+	setresuid32.gen.test setreuid.gen.test setreuid32.gen.test \
+	setrlimit.gen.test setuid.gen.test setuid32.gen.test \
+	shmxt.gen.test shutdown.gen.test sigaction.gen.test \
+	siginfo.gen.test signal.gen.test signal_receive.gen.test \
+	signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test \
+	sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test \
+	so_peercred.gen.test sock_filter-v.gen.test \
 	socketcall.gen.test splice.gen.test stat.gen.test \
 	stat64.gen.test statfs.gen.test statfs64.gen.test \
 	statx.gen.test swap.gen.test sxetmask.gen.test \
@@ -3451,6 +3593,8 @@
 	redirect-fds.test \
 	redirect.test \
 	restart_syscall.test \
+	sigblock.test \
+	sigign.test \
 	strace-C.test \
 	strace-E.test \
 	strace-S.test \
@@ -3692,6 +3836,14 @@
 	@rm -f caps-abbrev$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(caps_abbrev_OBJECTS) $(caps_abbrev_LDADD) $(LIBS)
 
+check_sigblock$(EXEEXT): $(check_sigblock_OBJECTS) $(check_sigblock_DEPENDENCIES) $(EXTRA_check_sigblock_DEPENDENCIES) 
+	@rm -f check_sigblock$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(check_sigblock_OBJECTS) $(check_sigblock_LDADD) $(LIBS)
+
+check_sigign$(EXEEXT): $(check_sigign_OBJECTS) $(check_sigign_DEPENDENCIES) $(EXTRA_check_sigign_DEPENDENCIES) 
+	@rm -f check_sigign$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(check_sigign_OBJECTS) $(check_sigign_LDADD) $(LIBS)
+
 chmod$(EXEEXT): $(chmod_OBJECTS) $(chmod_DEPENDENCIES) $(EXTRA_chmod_DEPENDENCIES) 
 	@rm -f chmod$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(chmod_OBJECTS) $(chmod_LDADD) $(LIBS)
@@ -4192,6 +4344,10 @@
 	@rm -f kcmp$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kcmp_OBJECTS) $(kcmp_LDADD) $(LIBS)
 
+kcmp-y$(EXEEXT): $(kcmp_y_OBJECTS) $(kcmp_y_DEPENDENCIES) $(EXTRA_kcmp_y_DEPENDENCIES) 
+	@rm -f kcmp-y$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(kcmp_y_OBJECTS) $(kcmp_y_LDADD) $(LIBS)
+
 kexec_file_load$(EXEEXT): $(kexec_file_load_OBJECTS) $(kexec_file_load_DEPENDENCIES) $(EXTRA_kexec_file_load_DEPENDENCIES) 
 	@rm -f kexec_file_load$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kexec_file_load_OBJECTS) $(kexec_file_load_LDADD) $(LIBS)
@@ -4228,6 +4384,10 @@
 	@rm -f linkat$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(linkat_OBJECTS) $(linkat_LDADD) $(LIBS)
 
+list_sigaction_signum$(EXEEXT): $(list_sigaction_signum_OBJECTS) $(list_sigaction_signum_DEPENDENCIES) $(EXTRA_list_sigaction_signum_DEPENDENCIES) 
+	@rm -f list_sigaction_signum$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(list_sigaction_signum_OBJECTS) $(list_sigaction_signum_LDADD) $(LIBS)
+
 llseek$(EXEEXT): $(llseek_OBJECTS) $(llseek_DEPENDENCIES) $(EXTRA_llseek_DEPENDENCIES) 
 	@rm -f llseek$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(llseek_OBJECTS) $(llseek_LDADD) $(LIBS)
@@ -4452,6 +4612,50 @@
 	@rm -f newfstatat$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(newfstatat_OBJECTS) $(newfstatat_LDADD) $(LIBS)
 
+nfnetlink_acct$(EXEEXT): $(nfnetlink_acct_OBJECTS) $(nfnetlink_acct_DEPENDENCIES) $(EXTRA_nfnetlink_acct_DEPENDENCIES) 
+	@rm -f nfnetlink_acct$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_acct_OBJECTS) $(nfnetlink_acct_LDADD) $(LIBS)
+
+nfnetlink_cthelper$(EXEEXT): $(nfnetlink_cthelper_OBJECTS) $(nfnetlink_cthelper_DEPENDENCIES) $(EXTRA_nfnetlink_cthelper_DEPENDENCIES) 
+	@rm -f nfnetlink_cthelper$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_cthelper_OBJECTS) $(nfnetlink_cthelper_LDADD) $(LIBS)
+
+nfnetlink_ctnetlink$(EXEEXT): $(nfnetlink_ctnetlink_OBJECTS) $(nfnetlink_ctnetlink_DEPENDENCIES) $(EXTRA_nfnetlink_ctnetlink_DEPENDENCIES) 
+	@rm -f nfnetlink_ctnetlink$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_ctnetlink_OBJECTS) $(nfnetlink_ctnetlink_LDADD) $(LIBS)
+
+nfnetlink_ctnetlink_exp$(EXEEXT): $(nfnetlink_ctnetlink_exp_OBJECTS) $(nfnetlink_ctnetlink_exp_DEPENDENCIES) $(EXTRA_nfnetlink_ctnetlink_exp_DEPENDENCIES) 
+	@rm -f nfnetlink_ctnetlink_exp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_ctnetlink_exp_OBJECTS) $(nfnetlink_ctnetlink_exp_LDADD) $(LIBS)
+
+nfnetlink_cttimeout$(EXEEXT): $(nfnetlink_cttimeout_OBJECTS) $(nfnetlink_cttimeout_DEPENDENCIES) $(EXTRA_nfnetlink_cttimeout_DEPENDENCIES) 
+	@rm -f nfnetlink_cttimeout$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_cttimeout_OBJECTS) $(nfnetlink_cttimeout_LDADD) $(LIBS)
+
+nfnetlink_ipset$(EXEEXT): $(nfnetlink_ipset_OBJECTS) $(nfnetlink_ipset_DEPENDENCIES) $(EXTRA_nfnetlink_ipset_DEPENDENCIES) 
+	@rm -f nfnetlink_ipset$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_ipset_OBJECTS) $(nfnetlink_ipset_LDADD) $(LIBS)
+
+nfnetlink_nft_compat$(EXEEXT): $(nfnetlink_nft_compat_OBJECTS) $(nfnetlink_nft_compat_DEPENDENCIES) $(EXTRA_nfnetlink_nft_compat_DEPENDENCIES) 
+	@rm -f nfnetlink_nft_compat$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_nft_compat_OBJECTS) $(nfnetlink_nft_compat_LDADD) $(LIBS)
+
+nfnetlink_nftables$(EXEEXT): $(nfnetlink_nftables_OBJECTS) $(nfnetlink_nftables_DEPENDENCIES) $(EXTRA_nfnetlink_nftables_DEPENDENCIES) 
+	@rm -f nfnetlink_nftables$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_nftables_OBJECTS) $(nfnetlink_nftables_LDADD) $(LIBS)
+
+nfnetlink_osf$(EXEEXT): $(nfnetlink_osf_OBJECTS) $(nfnetlink_osf_DEPENDENCIES) $(EXTRA_nfnetlink_osf_DEPENDENCIES) 
+	@rm -f nfnetlink_osf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_osf_OBJECTS) $(nfnetlink_osf_LDADD) $(LIBS)
+
+nfnetlink_queue$(EXEEXT): $(nfnetlink_queue_OBJECTS) $(nfnetlink_queue_DEPENDENCIES) $(EXTRA_nfnetlink_queue_DEPENDENCIES) 
+	@rm -f nfnetlink_queue$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_queue_OBJECTS) $(nfnetlink_queue_LDADD) $(LIBS)
+
+nfnetlink_ulog$(EXEEXT): $(nfnetlink_ulog_OBJECTS) $(nfnetlink_ulog_DEPENDENCIES) $(EXTRA_nfnetlink_ulog_DEPENDENCIES) 
+	@rm -f nfnetlink_ulog$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_ulog_OBJECTS) $(nfnetlink_ulog_LDADD) $(LIBS)
+
 nlattr$(EXEEXT): $(nlattr_OBJECTS) $(nlattr_DEPENDENCIES) $(EXTRA_nlattr_DEPENDENCIES) 
 	@rm -f nlattr$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_OBJECTS) $(nlattr_LDADD) $(LIBS)
@@ -4508,6 +4712,14 @@
 	@rm -f nlattr_inet_diag_req_v2$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_req_v2_OBJECTS) $(nlattr_inet_diag_req_v2_LDADD) $(LIBS)
 
+nlattr_mdba_mdb_entry$(EXEEXT): $(nlattr_mdba_mdb_entry_OBJECTS) $(nlattr_mdba_mdb_entry_DEPENDENCIES) $(EXTRA_nlattr_mdba_mdb_entry_DEPENDENCIES) 
+	@rm -f nlattr_mdba_mdb_entry$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_mdba_mdb_entry_OBJECTS) $(nlattr_mdba_mdb_entry_LDADD) $(LIBS)
+
+nlattr_mdba_router_port$(EXEEXT): $(nlattr_mdba_router_port_OBJECTS) $(nlattr_mdba_router_port_DEPENDENCIES) $(EXTRA_nlattr_mdba_router_port_DEPENDENCIES) 
+	@rm -f nlattr_mdba_router_port$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_mdba_router_port_OBJECTS) $(nlattr_mdba_router_port_LDADD) $(LIBS)
+
 nlattr_ndmsg$(EXEEXT): $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_DEPENDENCIES) $(EXTRA_nlattr_ndmsg_DEPENDENCIES) 
 	@rm -f nlattr_ndmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_LDADD) $(LIBS)
@@ -4544,6 +4756,14 @@
 	@rm -f nlattr_smc_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_smc_diag_msg_OBJECTS) $(nlattr_smc_diag_msg_LDADD) $(LIBS)
 
+nlattr_tc_stats$(EXEEXT): $(nlattr_tc_stats_OBJECTS) $(nlattr_tc_stats_DEPENDENCIES) $(EXTRA_nlattr_tc_stats_DEPENDENCIES) 
+	@rm -f nlattr_tc_stats$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tc_stats_OBJECTS) $(nlattr_tc_stats_LDADD) $(LIBS)
+
+nlattr_tca_stab$(EXEEXT): $(nlattr_tca_stab_OBJECTS) $(nlattr_tca_stab_DEPENDENCIES) $(EXTRA_nlattr_tca_stab_DEPENDENCIES) 
+	@rm -f nlattr_tca_stab$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tca_stab_OBJECTS) $(nlattr_tca_stab_LDADD) $(LIBS)
+
 nlattr_tcamsg$(EXEEXT): $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_DEPENDENCIES) $(EXTRA_nlattr_tcamsg_DEPENDENCIES) 
 	@rm -f nlattr_tcamsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_LDADD) $(LIBS)
@@ -4948,6 +5168,10 @@
 	@rm -f seccomp-strict$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(seccomp_strict_OBJECTS) $(seccomp_strict_LDADD) $(LIBS)
 
+seccomp_get_action_avail$(EXEEXT): $(seccomp_get_action_avail_OBJECTS) $(seccomp_get_action_avail_DEPENDENCIES) $(EXTRA_seccomp_get_action_avail_DEPENDENCIES) 
+	@rm -f seccomp_get_action_avail$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(seccomp_get_action_avail_OBJECTS) $(seccomp_get_action_avail_LDADD) $(LIBS)
+
 select$(EXEEXT): $(select_OBJECTS) $(select_DEPENDENCIES) $(EXTRA_select_DEPENDENCIES) 
 	@rm -f select$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(select_OBJECTS) $(select_LDADD) $(LIBS)
@@ -4972,6 +5196,14 @@
 	@rm -f set_ptracer_any$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(set_ptracer_any_OBJECTS) $(set_ptracer_any_LDADD) $(LIBS)
 
+set_sigblock$(EXEEXT): $(set_sigblock_OBJECTS) $(set_sigblock_DEPENDENCIES) $(EXTRA_set_sigblock_DEPENDENCIES) 
+	@rm -f set_sigblock$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(set_sigblock_OBJECTS) $(set_sigblock_LDADD) $(LIBS)
+
+set_sigign$(EXEEXT): $(set_sigign_OBJECTS) $(set_sigign_DEPENDENCIES) $(EXTRA_set_sigign_DEPENDENCIES) 
+	@rm -f set_sigign$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(set_sigign_OBJECTS) $(set_sigign_LDADD) $(LIBS)
+
 setdomainname$(EXEEXT): $(setdomainname_OBJECTS) $(setdomainname_DEPENDENCIES) $(EXTRA_setdomainname_DEPENDENCIES) 
 	@rm -f setdomainname$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(setdomainname_OBJECTS) $(setdomainname_LDADD) $(LIBS)
@@ -5411,6 +5643,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btrfs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/caps-abbrev.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/caps.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_sigblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_sigign.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmod.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown32.Po@am__quote@
@@ -5535,6 +5769,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_linux_mips_n64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcmp-y.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcmp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_file_load.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_load.Po@am__quote@
@@ -5571,6 +5806,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-tprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linkat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list_sigaction_signum.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/llseek.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lookup_dcookie.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lseek.Po@am__quote@
@@ -5627,6 +5863,17 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_unix_diag.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_xfrm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newfstatat-newfstatat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_acct.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_cthelper.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_ctnetlink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_ctnetlink_exp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_cttimeout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_ipset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_nft_compat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_nftables.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_osf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_queue.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_ulog.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_br_port_msg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_crypto_user_alg.Po@am__quote@
@@ -5641,6 +5888,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_msg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_compat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_v2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_mdba_mdb_entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_mdba_router_port.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndtmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_netconfmsg.Po@am__quote@
@@ -5650,6 +5899,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtgenmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_smc_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tc_stats.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tca_stab.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcamsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_unix_diag_msg.Po@am__quote@
@@ -5751,12 +6002,15 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp-filter-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp-filter.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp-strict.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp_get_action_avail.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/semop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendfile.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendfile64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_mempolicy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_ptracer_any.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_sigblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_sigign.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setdomainname.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setfsgid.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setfsgid32.Po@am__quote@
@@ -7194,6 +7448,9 @@
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/kcmp-y.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kexec_file_load.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7353,6 +7610,39 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nfnetlink_acct.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_cthelper.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ctnetlink.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ctnetlink_exp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_cttimeout.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ipset.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_nft_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_nftables.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_osf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_queue.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ulog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7392,6 +7682,12 @@
 $(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_mdba_mdb_entry.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_mdba_router_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7419,6 +7715,12 @@
 $(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_tc_stats.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tca_stab.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7641,6 +7943,9 @@
 $(srcdir)/seccomp-filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/seccomp_get_action_avail.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/select.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests-m32/check_sigblock.c b/tests-m32/check_sigblock.c
new file mode 100644
index 0000000..5637804
--- /dev/null
+++ b/tests-m32/check_sigblock.c
@@ -0,0 +1,49 @@
+/*
+ * Check that the specified signal number is blocked/unblocked.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <signal.h>
+#include <stdlib.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac != 3)
+		error_msg_and_fail("usage: check_sigblock 0|1 signum");
+
+	const int block = !!atoi(av[1]);
+	const int signum = atoi(av[2]);
+	sigset_t mask;
+
+	sigemptyset(&mask);
+	if (sigprocmask(SIG_SETMASK, NULL, &mask))
+		perror_msg_and_fail("sigprocmask");
+
+	return block ^ sigismember(&mask, signum);
+}
diff --git a/tests-m32/check_sigign.c b/tests-m32/check_sigign.c
new file mode 100644
index 0000000..bace317
--- /dev/null
+++ b/tests-m32/check_sigign.c
@@ -0,0 +1,49 @@
+/*
+ * Check that the signal handler for the specified signal number is set
+ * to SIG_IGN/SIG_DFL.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <signal.h>
+#include <stdlib.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac != 3)
+		error_msg_and_fail("usage: check_sigign 0|1 signum");
+
+	const int ign = !!atoi(av[1]);
+	const int signum = atoi(av[2]);
+	struct sigaction act;
+
+	if (sigaction(signum, NULL, &act))
+		perror_msg_and_fail("sigaction: %s", av[2]);
+
+	return ign ^ (act.sa_handler == SIG_IGN);
+}
diff --git a/tests-m32/futex.c b/tests-m32/futex.c
index b75ab33..e1dbcb7 100644
--- a/tests-m32/futex.c
+++ b/tests-m32/futex.c
@@ -66,6 +66,7 @@
 # define CHECK_FUTEX_GENERIC(uaddr, op, val, timeout, uaddr2, val3, check, \
 	enosys) \
 	do { \
+		errno = 0; \
 		rc = syscall(__NR_futex, (uaddr), (op), (val), (timeout), \
 			(uaddr2), (val3)); \
 		/* It is here due to EPERM on WAKE_OP on AArch64 */ \
@@ -496,8 +497,16 @@
 	static const struct {
 		uint32_t val;
 		const char *str;
+
+		/*
+		 * Peculiar semantics:
+		 *  * err == 0 and err2 != 0 => expect both either the absence
+		 *    of error or presence of err2
+		 *  * err != 0 and err2 == 0 => expect err only, no success
+		 *    expected.
+		 */
 		int err;
-		const char *errstr;
+		int err2;
 	} wake_ops[] = {
 		{ 0x00000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
 		{ 0x00fff000, "FUTEX_OP_SET<<28|0xfff<<12|FUTEX_OP_CMP_EQ<<24|"
@@ -511,13 +520,13 @@
 		{ 0x30000000, "FUTEX_OP_ANDN<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
 		{ 0x40000000, "FUTEX_OP_XOR<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
 		{ 0x50000000, "0x5<<28 /* FUTEX_OP_??? */|0<<12|"
-			"FUTEX_OP_CMP_EQ<<24|0", ENOSYS, "ENOSYS" },
+			"FUTEX_OP_CMP_EQ<<24|0", ENOSYS },
 		{ 0x70000000, "0x7<<28 /* FUTEX_OP_??? */|0<<12|"
-			"FUTEX_OP_CMP_EQ<<24|0", ENOSYS, "ENOSYS" },
+			"FUTEX_OP_CMP_EQ<<24|0", ENOSYS },
 		{ 0x80000000, "FUTEX_OP_OPARG_SHIFT<<28|FUTEX_OP_SET<<28|0<<12|"
 			"FUTEX_OP_CMP_EQ<<24|0" },
 		{ 0xa0caffee, "FUTEX_OP_OPARG_SHIFT<<28|FUTEX_OP_OR<<28|"
-			"0xcaf<<12|FUTEX_OP_CMP_EQ<<24|0xfee" },
+			"0xcaf<<12|FUTEX_OP_CMP_EQ<<24|0xfee", 0, EINVAL },
 		{ 0x01000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_NE<<24|0" },
 		{ 0x01234567, "FUTEX_OP_SET<<28|0x234<<12|FUTEX_OP_CMP_NE<<24|"
 			"0x567" },
@@ -526,27 +535,38 @@
 		{ 0x04000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_GT<<24|0" },
 		{ 0x05000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_GE<<24|0" },
 		{ 0x06000000, "FUTEX_OP_SET<<28|0<<12|"
-			"0x6<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+			"0x6<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS },
 		{ 0x07000000, "FUTEX_OP_SET<<28|0<<12|"
-			"0x7<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+			"0x7<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS },
 		{ 0x08000000, "FUTEX_OP_SET<<28|0<<12|"
-			"0x8<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+			"0x8<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS },
 		{ 0x0f000000, "FUTEX_OP_SET<<28|0<<12|"
-			"0xf<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+			"0xf<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS },
 		{ 0xbadfaced, "FUTEX_OP_OPARG_SHIFT<<28|FUTEX_OP_ANDN<<28|"
 			"0xdfa<<12|0xa<<24 /* FUTEX_OP_CMP_??? */|0xced",
-			ENOSYS, "ENOSYS" },
+			ENOSYS, EINVAL },
 		{ 0xffffffff, "FUTEX_OP_OPARG_SHIFT<<28|"
 			"0x7<<28 /* FUTEX_OP_??? */|0xfff<<12|"
 			"0xf<<24 /* FUTEX_OP_CMP_??? */|0xfff",
-			ENOSYS, "ENOSYS" },
+			ENOSYS, EINVAL },
 	};
 
 	for (i = 0; i < ARRAY_SIZE(wake_ops); i++) {
 		for (j = 0; j < 2; j++) {
 			CHECK_FUTEX_ENOSYS(uaddr,
 				j ? FUTEX_WAKE_OP_PRIVATE : FUTEX_WAKE_OP,
-				VAL, i, uaddr2, wake_ops[i].val, (rc == 0));
+				VAL, i, uaddr2, wake_ops[i].val,
+				/*
+				 * Either one of errs is 0 or rc == 0 is not
+				 * allowed.
+				 */
+				((!wake_ops[i].err || !wake_ops[i].err2 ||
+					(rc != 0)) &&
+				((!wake_ops[i].err && (rc == 0)) ||
+				(wake_ops[i].err  && (rc == -1) &&
+					(errno == wake_ops[i].err)) ||
+				(wake_ops[i].err2 && (rc == -1) &&
+					(errno == wake_ops[i].err2)))));
 			printf("futex(%p, FUTEX_WAKE_OP%s, %u, %u, %p, %s)"
 			       " = %s\n", uaddr, j ? "_PRIVATE" : "", VAL_PR,
 			       i, uaddr2, wake_ops[i].str, sprintrc(rc));
diff --git a/tests-m32/gen_tests.am b/tests-m32/gen_tests.am
index 583a0ae..71e0013 100644
--- a/tests-m32/gen_tests.am
+++ b/tests-m32/gen_tests.am
@@ -1,5 +1,5 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
-GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test group_req.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_crypto.gen.test netlink_generic.gen.test netlink_kobject_uevent.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test nlattr_inet_diag_msg.gen.test nlattr_inet_diag_req_compat.gen.test nlattr_inet_diag_req_v2.gen.test nlattr_ndmsg.gen.test nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test printpath-umovestr.gen.test printpath-umovestr-peekdata.gen.test printpath-umovestr-undumpable.gen.test printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test printstrn-umoven-undumpable.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
+GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test group_req.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kcmp-y.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_crypto.gen.test netlink_generic.gen.test netlink_kobject_uevent.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test 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 oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test printpath-umovestr.gen.test printpath-umovestr-peekdata.gen.test printpath-umovestr-undumpable.gen.test printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test printstrn-umoven-undumpable.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test seccomp_get_action_avail.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
 
 $(srcdir)/_newselect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
@@ -358,6 +358,9 @@
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/kcmp-y.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kexec_file_load.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -517,6 +520,39 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nfnetlink_acct.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_cthelper.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ctnetlink.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ctnetlink_exp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_cttimeout.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ipset.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_nft_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_nftables.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_osf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_queue.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ulog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -556,6 +592,12 @@
 $(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_mdba_mdb_entry.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_mdba_router_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -583,6 +625,12 @@
 $(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_tc_stats.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tca_stab.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -805,6 +853,9 @@
 $(srcdir)/seccomp-filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/seccomp_get_action_avail.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/select.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 8592e28..091bbe5 100644
--- a/tests-m32/gen_tests.in
+++ b/tests-m32/gen_tests.in
@@ -143,7 +143,8 @@
 ipc_msg	+ipc.sh
 ipc_sem	+ipc.sh
 ipc_shm	+ipc.sh
-kcmp	-a27
+kcmp	-a22
+kcmp-y	-a22 -y -e trace=kcmp
 kexec_file_load	-s9
 kexec_load	-s9
 keyctl	-a31 -s10
@@ -197,6 +198,17 @@
 netlink_xfrm	+netlink_sock_diag.test
 newfstatat	-a32 -v -P stat.sample -P /dev/full
 nlattr		+netlink_sock_diag.test
+nfnetlink_acct			+netlink_sock_diag.test
+nfnetlink_cthelper		+netlink_sock_diag.test
+nfnetlink_ctnetlink		+netlink_sock_diag.test
+nfnetlink_ctnetlink_exp		+netlink_sock_diag.test
+nfnetlink_cttimeout		+netlink_sock_diag.test
+nfnetlink_ipset			+netlink_sock_diag.test
+nfnetlink_nft_compat		+netlink_sock_diag.test
+nfnetlink_nftables		+netlink_sock_diag.test
+nfnetlink_osf			+netlink_sock_diag.test
+nfnetlink_queue			+netlink_sock_diag.test
+nfnetlink_ulog			+netlink_sock_diag.test
 nlattr_crypto_user_alg		+netlink_sock_diag.test
 nlattr_br_port_msg		+netlink_sock_diag.test
 nlattr_dcbmsg			+netlink_sock_diag.test
@@ -210,6 +222,8 @@
 nlattr_inet_diag_msg		+netlink_sock_diag.test
 nlattr_inet_diag_req_compat	+netlink_sock_diag.test
 nlattr_inet_diag_req_v2		+netlink_sock_diag.test
+nlattr_mdba_mdb_entry		+netlink_sock_diag.test
+nlattr_mdba_router_port		+netlink_sock_diag.test
 nlattr_ndmsg			+netlink_sock_diag.test
 nlattr_ndtmsg			+netlink_sock_diag.test
 nlattr_netconfmsg		+netlink_sock_diag.test
@@ -219,6 +233,8 @@
 nlattr_rtgenmsg			+netlink_sock_diag.test
 nlattr_rtmsg			+netlink_sock_diag.test
 nlattr_smc_diag_msg		+netlink_sock_diag.test
+nlattr_tc_stats			+netlink_sock_diag.test
+nlattr_tca_stab			+netlink_sock_diag.test
 nlattr_tcamsg			+netlink_sock_diag.test
 nlattr_tcmsg			+netlink_sock_diag.test
 nlattr_unix_diag_msg		+netlink_sock_diag.test
@@ -293,6 +309,7 @@
 sched_yield	-a14
 seccomp-filter	-e trace=seccomp
 seccomp-filter-v	-v -e trace=seccomp
+seccomp_get_action_avail	-e trace=seccomp
 select	-a36
 semop	-a32 -e trace=semop,semtimedop
 sendfile	-a27
diff --git a/tests-m32/ioctl_dm.c b/tests-m32/ioctl_dm.c
index 2f77e04..1e831df 100644
--- a/tests-m32/ioctl_dm.c
+++ b/tests-m32/ioctl_dm.c
@@ -54,6 +54,10 @@
 # define ALIGNED_OFFSET(t_, m_) \
 	ALIGNED_SIZE(offsetof(t_, m_), t_)
 
+#  ifndef DM_DEV_ARM_POLL
+#   define DM_DEV_ARM_POLL     _IOWR(DM_IOCTL, 0x10, struct dm_ioctl)
+#  endif
+
 static const char str129[] = STR32 STR32 STR32 STR32 "6";
 
 static const __u64 dts_sector_base = (__u64) 0xdeadca75facef157ULL;
@@ -182,6 +186,7 @@
 		{ ARG_STR(DM_TABLE_CLEAR),   false },
 		{ ARG_STR(DM_TABLE_DEPS),    true  },
 		{ ARG_STR(DM_TABLE_STATUS),  true  },
+		{ ARG_STR(DM_DEV_ARM_POLL),  false },
 	};
 
 	struct dm_ioctl *unaligned_dm_arg =
diff --git a/tests-m32/ioctl_loop.c b/tests-m32/ioctl_loop.c
index 3411a4d..56ebd9e 100644
--- a/tests-m32/ioctl_loop.c
+++ b/tests-m32/ioctl_loop.c
@@ -188,11 +188,11 @@
 	       _IOC_SIZE((unsigned int) unknown_loop_cmd),
 	       (unsigned long) magic);
 
-	ioctl(-1, LOOP_SET_DIRECT_IO + 1, magic);
+	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_DIRECT_IO + 1),
-	       _IOC_SIZE(LOOP_SET_DIRECT_IO + 1),
+	       _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);
@@ -303,6 +303,11 @@
 	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);
+	printf("ioctl(-1, LOOP_SET_BLOCK_SIZE, %lu) = -1 EBADF (%m)\n",
+	       (unsigned long) magic);
+
 	/* LOOP_CTL_ADD */
 	ioctl(-1, LOOP_CTL_ADD, magic);
 	printf("ioctl(-1, LOOP_CTL_ADD, %d) = -1 EBADF (%m)\n",
diff --git a/tests-m32/kcmp-y.c b/tests-m32/kcmp-y.c
new file mode 100644
index 0000000..02ad90e
--- /dev/null
+++ b/tests-m32/kcmp-y.c
@@ -0,0 +1,3 @@
+#define VERBOSE_FD 1
+
+#include "kcmp.c"
diff --git a/tests-m32/kcmp-y.gen.test b/tests-m32/kcmp-y.gen.test
new file mode 100755
index 0000000..065db9d
--- /dev/null
+++ b/tests-m32/kcmp-y.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kcmp-y -a22 -y -e trace=kcmp); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a22 -y -e trace=kcmp
diff --git a/tests-m32/kcmp.c b/tests-m32/kcmp.c
index cb497c9..60cd300 100644
--- a/tests-m32/kcmp.c
+++ b/tests-m32/kcmp.c
@@ -1,7 +1,7 @@
 /*
  * Check decoding of kcmp syscall.
  *
- * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 Eugene Syromyatnikov <evgsyr@gmail.com>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -34,15 +34,67 @@
 
 #ifdef __NR_kcmp
 
+# include <fcntl.h>
+# include <stdarg.h>
+# include <stdint.h>
 # include <stdio.h>
+# include <string.h>
 # include <unistd.h>
 
-# define KCMP_FILE     0
-# define KCMP_SYSVSEM  6
+# ifndef VERBOSE_FD
+#  define VERBOSE_FD 0
+# endif
+
+/*
+ * We prefer to use system headers in order to catch some possible deviations in
+ * system's headers from our perception of reality, but happy to include our own
+ * definitions as well.
+ */
+# ifdef HAVE_LINUX_KCMP_H
+#  include <linux/kcmp.h>
+# else
+#  define KCMP_FILE	0
+#  define KCMP_VM	1
+#  define KCMP_FILES	2
+#  define KCMP_FS	3
+#  define KCMP_SIGHAND	4
+#  define KCMP_IO	5
+#  define KCMP_SYSVSEM	6
+# endif
+
+/* All other kcmp types have been added atomically */
+# define KCMP_EPOLL_TFD	7
+
+# ifndef HAVE_STRUCT_KCMP_EPOLL_SLOT
+struct kcmp_epoll_slot {
+	uint32_t efd;
+	uint32_t tfd;
+	uint32_t toff;
+};
+# endif
+
+static const kernel_ulong_t kcmp_max_type = KCMP_EPOLL_TFD;
+
+static const char null_path[] = "/dev/null";
+static const char zero_path[] = "/dev/zero";
+
+# define NULL_FD 23
+# define ZERO_FD 42
 
 static void
+printpidfd(const char *prefix, pid_t pid, unsigned fd)
+{
+	printf("%s%d", prefix, fd);
+}
+
+/*
+ * Last argument is optional and is used as follows:
+ *  * When type is KCMP_EPOLL_TFD, it signalises whether idx2 is a valid
+ *    pointer.
+ */
+static void
 do_kcmp(kernel_ulong_t pid1, kernel_ulong_t pid2, kernel_ulong_t type,
-	const char *type_str, kernel_ulong_t idx1, kernel_ulong_t idx2)
+	const char *type_str, kernel_ulong_t idx1, kernel_ulong_t idx2, ...)
 {
 	long rc;
 	const char *errstr;
@@ -57,11 +109,37 @@
 	else
 		printf("%#x /* KCMP_??? */", (int) type);
 
-	if (type == KCMP_FILE)
-		printf(", %u, %u", (unsigned) idx1, (unsigned) idx2);
-	else if (type > KCMP_SYSVSEM)
+	if (type == KCMP_FILE) {
+		printpidfd(", ", pid1, idx1);
+		printpidfd(", ", pid2, idx2);
+	} else if (type == KCMP_EPOLL_TFD) {
+		va_list ap;
+		int valid_ptr;
+
+		va_start(ap, idx2);
+		valid_ptr = va_arg(ap, int);
+		va_end(ap);
+
+		printpidfd(", ", pid1, idx1);
+		printf(", ");
+
+		if (valid_ptr) {
+			struct kcmp_epoll_slot *slot =
+				(struct kcmp_epoll_slot *) (uintptr_t) idx2;
+
+			printpidfd("{efd=", pid2, slot->efd);
+			printpidfd(", tfd=", pid2, slot->tfd);
+			printf(", toff=%llu}", (unsigned long long) slot->toff);
+		} else {
+			if (idx2)
+				printf("%#llx", (unsigned long long) idx2);
+			else
+				printf("NULL");
+		}
+	} else if (type > kcmp_max_type) {
 		printf(", %#llx, %#llx",
 		       (unsigned long long) idx1, (unsigned long long) idx2);
+	}
 
 	printf(") = %s\n", errstr);
 }
@@ -79,18 +157,71 @@
 		(kernel_ulong_t) 0xdec0ded3dec0ded4ULL;
 	static const kernel_ulong_t bogus_idx2 =
 		(kernel_ulong_t) 0xba5e1e55deadc0deULL;
+	static const struct kcmp_epoll_slot slot_data[] = {
+		{ 0xdeadc0de, 0xfacef157, 0xbadc0ded },
+		{ NULL_FD, ZERO_FD, 0 },
+		{ 0, 0, 0 },
+	};
+	static kernel_ulong_t ptr_check =
+		F8ILL_KULONG_SUPPORTED ? F8ILL_KULONG_MASK : 0;
+
+	int fd;
+	unsigned i;
+	struct kcmp_epoll_slot *slot = tail_alloc(sizeof(*slot));
+
+	/* Open some files to test printpidfd */
+	fd = open(null_path, O_RDONLY);
+	if (fd < 0)
+		perror_msg_and_fail("open(\"%s\")", null_path);
+	if (fd != NULL_FD) {
+		if (dup2(fd, NULL_FD) < 0)
+			perror_msg_and_fail("dup2(fd, NULL_FD)");
+		close(fd);
+	}
+
+	fd = open(zero_path, O_RDONLY);
+	if (fd < 0)
+		perror_msg_and_fail("open(\"%s\")", zero_path);
+	if (fd != ZERO_FD) {
+		if (dup2(fd, ZERO_FD) < 0)
+			perror_msg_and_fail("dup2(fd, ZERO_FD)");
+		close(fd);
+	}
+
+	close(0);
 
 	/* Invalid values */
 	do_kcmp(bogus_pid1, bogus_pid2, bogus_type, NULL, bogus_idx1,
 		bogus_idx2);
-	do_kcmp(0, 0, KCMP_SYSVSEM + 1, NULL, 0, 0);
+	do_kcmp(F8ILL_KULONG_MASK, F8ILL_KULONG_MASK, kcmp_max_type + 1, NULL,
+		0, 0);
 
 	/* KCMP_FILE is the only type which has additional args */
 	do_kcmp(3141592653U, 2718281828U, ARG_STR(KCMP_FILE), bogus_idx1,
 		bogus_idx2);
-	/* Some type without additional args */
+	do_kcmp(-1, -1, ARG_STR(KCMP_FILE), NULL_FD, ZERO_FD);
+
+	/* Types without additional args */
+	do_kcmp(-1, -1, ARG_STR(KCMP_VM), bogus_idx1, bogus_idx2);
+	do_kcmp(-1, -1, ARG_STR(KCMP_FILES), bogus_idx1, bogus_idx2);
+	do_kcmp(-1, -1, ARG_STR(KCMP_FS), bogus_idx1, bogus_idx2);
+	do_kcmp(-1, -1, ARG_STR(KCMP_SIGHAND), bogus_idx1, bogus_idx2);
+	do_kcmp(-1, -1, ARG_STR(KCMP_IO), bogus_idx1, bogus_idx2);
 	do_kcmp(-1, -1, ARG_STR(KCMP_SYSVSEM), bogus_idx1, bogus_idx2);
 
+	/* KCMP_EPOLL_TFD checks */
+	do_kcmp(-1, -1, ARG_STR(KCMP_EPOLL_TFD),
+		F8ILL_KULONG_MASK | 2718281828U, ptr_check, 0);
+	do_kcmp(-1, -1, ARG_STR(KCMP_EPOLL_TFD),
+		3141592653U, (uintptr_t) slot + 1, 0);
+
+	for (i = 0; i < ARRAY_SIZE(slot_data); i++) {
+		memcpy(slot, slot_data + i, sizeof(*slot));
+
+		do_kcmp(getpid(), getppid(), ARG_STR(KCMP_EPOLL_TFD), NULL_FD,
+			(uintptr_t) slot, 1);
+	}
+
 	puts("+++ exited with 0 +++");
 
 	return 0;
diff --git a/tests-m32/kcmp.gen.test b/tests-m32/kcmp.gen.test
index da79d7c..c073a39 100755
--- a/tests-m32/kcmp.gen.test
+++ b/tests-m32/kcmp.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kcmp -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kcmp -a22); do not edit.
 . "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a22
diff --git a/tests-m32/list_sigaction_signum.c b/tests-m32/list_sigaction_signum.c
new file mode 100644
index 0000000..13a78c6
--- /dev/null
+++ b/tests-m32/list_sigaction_signum.c
@@ -0,0 +1,57 @@
+/*
+ * List signal numbers that are valid arguments for sigaction syscall.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <signal.h>
+#include <stdio.h>
+
+int
+main(void)
+{
+	unsigned int i;
+
+	for (i = 1; i < 32; ++i) {
+		static const struct sigaction ign = { .sa_handler = SIG_IGN };
+		static const struct sigaction dfl = { .sa_handler = SIG_DFL };
+		struct sigaction act;
+
+		if (sigaction(i, &ign, NULL) ||
+		    sigaction(i, NULL, &act) ||
+		    ign.sa_handler != act.sa_handler ||
+		    sigaction(i, &dfl, NULL) ||
+		    sigaction(i, NULL, &act) ||
+		    dfl.sa_handler != act.sa_handler)
+			continue;
+
+		printf("%u\n", i);
+	}
+
+	return 0;
+}
diff --git a/tests-m32/membarrier.c b/tests-m32/membarrier.c
index 330893b..73dd3b0 100644
--- a/tests-m32/membarrier.c
+++ b/tests-m32/membarrier.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,10 +44,28 @@
 	printf("membarrier(0x3 /* MEMBARRIER_CMD_??? */, 255) = %s\n",
 	       sprintrc(-1));
 	if (saved_errno != ENOSYS) {
-		/* the test needs to be updated? */
-		assert(syscall(__NR_membarrier, 0, 0) == 1);
-		puts("membarrier(MEMBARRIER_CMD_QUERY, 0)"
-		     " = 0x1 (MEMBARRIER_CMD_SHARED)");
+		const char *text;
+		int rc = syscall(__NR_membarrier, 0, 0);
+
+		switch (rc) {
+		case 1:
+			text = "MEMBARRIER_CMD_SHARED";
+			break;
+		case 1|8:
+			text = "MEMBARRIER_CMD_SHARED|"
+			       "MEMBARRIER_CMD_PRIVATE_EXPEDITED";
+			break;
+		case 1|8|16:
+			text = "MEMBARRIER_CMD_SHARED|"
+			       "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
+			       "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED";
+			break;
+		default:
+			error_msg_and_fail("membarrier returned %#x, does"
+					   " the test have to be updated?", rc);
+		}
+		printf("membarrier(MEMBARRIER_CMD_QUERY, 0) = %#x (%s)\n",
+		       rc, text);
 	}
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-m32/memfd_create.c b/tests-m32/memfd_create.c
index 480fd17..4559b42 100644
--- a/tests-m32/memfd_create.c
+++ b/tests-m32/memfd_create.c
@@ -11,10 +11,11 @@
 main(void)
 {
 	static const char text[] = "strace";
-	int rc = syscall(__NR_memfd_create, text, 7);
+	int rc = syscall(__NR_memfd_create, text, 0xf);
 
-	printf("memfd_create(\"%s\", %s) = %d %s (%m)\n",
-	       text, "MFD_CLOEXEC|MFD_ALLOW_SEALING|0x4", rc, errno2name());
+	printf("memfd_create(\"%s\", %s) = %s\n",
+	       text, "MFD_CLOEXEC|MFD_ALLOW_SEALING|MFD_HUGETLB|0x8",
+	       sprintrc(rc));
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-m32/netlink_crypto.c b/tests-m32/netlink_crypto.c
index deb1644..d15c17c 100644
--- a/tests-m32/netlink_crypto.c
+++ b/tests-m32/netlink_crypto.c
@@ -78,9 +78,17 @@
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 
 	nlh.nlmsg_type = CRYPTO_MSG_DELALG;
-	nlh.nlmsg_flags = NLM_F_REPLACE;
+	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_NONREC;
 	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_DELALG"
+	       ", flags=NLM_F_ECHO|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = CRYPTO_MSG_UPDATEALG;
+	nlh.nlmsg_flags = NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_UPDATEALG"
 	       ", flags=%#x /* NLM_F_??? */, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh.nlmsg_len, NLM_F_REPLACE,
diff --git a/tests-m32/netlink_netfilter.c b/tests-m32/netlink_netfilter.c
index 2907c26..db2622e 100644
--- a/tests-m32/netlink_netfilter.c
+++ b/tests-m32/netlink_netfilter.c
@@ -52,19 +52,19 @@
 	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
-
-	nlh.nlmsg_type = (NFNL_SUBSYS_CTNETLINK << 8) | NFNL_MSG_BATCH_BEGIN;
-	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, {len=%u, type=NFNL_SUBSYS_CTNETLINK<<8|%#x"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, nlh.nlmsg_len, NFNL_MSG_BATCH_BEGIN,
-	       (unsigned) sizeof(nlh), sprintrc(rc));
 # endif
 
-	nlh.nlmsg_type = (NFNL_SUBSYS_CTNETLINK << 8);
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | 0xff;
 	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, {len=%u, type=NFNL_SUBSYS_CTNETLINK<<8|0"
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|0xff /* IPCTNL_MSG_CT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = 0xffff;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=0xff /* NFNL_SUBSYS_??? */<<8|0xff"
 	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
diff --git a/tests-m32/netlink_route.c b/tests-m32/netlink_route.c
index 6af3b13..a1c7d1f 100644
--- a/tests-m32/netlink_route.c
+++ b/tests-m32/netlink_route.c
@@ -132,13 +132,12 @@
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 
 	nlh.nlmsg_type = RTM_DELLINK;
-	nlh.nlmsg_flags = NLM_F_REPLACE;
+	nlh.nlmsg_flags = NLM_F_NONREC;
 	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {len=%u, type=RTM_DELLINK"
-	       ", flags=%#x /* NLM_F_??? */, seq=0, pid=0}"
+	       ", flags=NLM_F_NONREC, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, nlh.nlmsg_len, NLM_F_REPLACE,
-	       (unsigned) sizeof(nlh), sprintrc(rc));
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 }
 
 static void
diff --git a/tests-m32/netlink_xfrm.c b/tests-m32/netlink_xfrm.c
index 27f62d1..862a9f6 100644
--- a/tests-m32/netlink_xfrm.c
+++ b/tests-m32/netlink_xfrm.c
@@ -76,9 +76,17 @@
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 
 	nlh.nlmsg_type = XFRM_MSG_DELSA;
-	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_REPLACE;
+	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_NONREC;
 	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {len=%u, type=XFRM_MSG_DELSA"
+	       ", flags=NLM_F_ECHO|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = XFRM_MSG_ALLOCSPI;
+	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=XFRM_MSG_ALLOCSPI"
 	       ", flags=NLM_F_ECHO|%#x, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh.nlmsg_len, NLM_F_REPLACE,
diff --git a/tests-m32/nfnetlink_acct.c b/tests-m32/nfnetlink_acct.c
new file mode 100644
index 0000000..52cff99
--- /dev/null
+++ b/tests-m32/nfnetlink_acct.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_ACCT_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_acct.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|0xff /* NFNL_MSG_ACCT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_CREATE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_MATCH;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_MATCH, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_DEL;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_DEL"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_ACCT_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_acct.gen.test b/tests-m32/nfnetlink_acct.gen.test
new file mode 100755
index 0000000..7db2276
--- /dev/null
+++ b/tests-m32/nfnetlink_acct.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_acct +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_cthelper.c b/tests-m32/nfnetlink_cthelper.c
new file mode 100644
index 0000000..47fab76
--- /dev/null
+++ b/tests-m32/nfnetlink_cthelper.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_CTHELPER_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_cthelper.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | NFNL_MSG_CTHELPER_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|NFNL_MSG_CTHELPER_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|0xff /* NFNL_MSG_CTHELPER_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | NFNL_MSG_CTHELPER_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|NFNL_MSG_CTHELPER_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_REPLACE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | NFNL_MSG_CTHELPER_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|NFNL_MSG_CTHELPER_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | NFNL_MSG_CTHELPER_DEL;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|NFNL_MSG_CTHELPER_DEL"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_CTHELPER_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_cthelper.gen.test b/tests-m32/nfnetlink_cthelper.gen.test
new file mode 100755
index 0000000..661c949
--- /dev/null
+++ b/tests-m32/nfnetlink_cthelper.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_cthelper +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_ctnetlink.c b/tests-m32/nfnetlink_ctnetlink.c
new file mode 100644
index 0000000..a227f38
--- /dev/null
+++ b/tests-m32/nfnetlink_ctnetlink.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_conntrack.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|IPCTNL_MSG_CT_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|0xff /* IPCTNL_MSG_CT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|IPCTNL_MSG_CT_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_REPLACE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|IPCTNL_MSG_CT_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_DELETE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|IPCTNL_MSG_CT_DELETE"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_ctnetlink.gen.test b/tests-m32/nfnetlink_ctnetlink.gen.test
new file mode 100755
index 0000000..d4c4daa
--- /dev/null
+++ b/tests-m32/nfnetlink_ctnetlink.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ctnetlink +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_ctnetlink_exp.c b/tests-m32/nfnetlink_ctnetlink_exp.c
new file mode 100644
index 0000000..aa17cd5
--- /dev/null
+++ b/tests-m32/nfnetlink_ctnetlink_exp.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_conntrack.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | IPCTNL_MSG_EXP_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|IPCTNL_MSG_EXP_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|0xff /* IPCTNL_MSG_EXP_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | IPCTNL_MSG_EXP_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_EXCL;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|IPCTNL_MSG_EXP_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_EXCL, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | IPCTNL_MSG_EXP_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ROOT;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|IPCTNL_MSG_EXP_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_ROOT, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | IPCTNL_MSG_EXP_DELETE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|IPCTNL_MSG_EXP_DELETE"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_ctnetlink_exp.gen.test b/tests-m32/nfnetlink_ctnetlink_exp.gen.test
new file mode 100755
index 0000000..a5d83f9
--- /dev/null
+++ b/tests-m32/nfnetlink_ctnetlink_exp.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ctnetlink_exp +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_cttimeout.c b/tests-m32/nfnetlink_cttimeout.c
new file mode 100644
index 0000000..e66dc24
--- /dev/null
+++ b/tests-m32/nfnetlink_cttimeout.c
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_CTTIMEOUT_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_cttimeout.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type =
+		NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|0xff /* IPCTNL_MSG_TIMEOUT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type =
+		NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_APPEND;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_APPEND, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type =
+		NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ATOMIC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_ATOMIC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type =
+		NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_DELETE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_DELETE"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_CTTIMEOUT_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_cttimeout.gen.test b/tests-m32/nfnetlink_cttimeout.gen.test
new file mode 100755
index 0000000..e197f00
--- /dev/null
+++ b/tests-m32/nfnetlink_cttimeout.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_cttimeout +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_ipset.c b/tests-m32/nfnetlink_ipset.c
new file mode 100644
index 0000000..b0d4a7d
--- /dev/null
+++ b/tests-m32/nfnetlink_ipset.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_IPSET_IP_SET_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/ipset/ip_set.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_IPSET << 8 | IPSET_CMD_NONE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_IPSET<<8|IPSET_CMD_NONE"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_IPSET << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_IPSET<<8|0xff /* IPSET_CMD_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_IPSET_IP_SET_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_ipset.gen.test b/tests-m32/nfnetlink_ipset.gen.test
new file mode 100755
index 0000000..418437a
--- /dev/null
+++ b/tests-m32/nfnetlink_ipset.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ipset +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_nft_compat.c b/tests-m32/nfnetlink_nft_compat.c
new file mode 100644
index 0000000..072ee57
--- /dev/null
+++ b/tests-m32/nfnetlink_nft_compat.c
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NF_TABLES_COMPAT_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nf_tables_compat.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFT_COMPAT << 8 | NFNL_MSG_COMPAT_GET;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFT_COMPAT<<8|NFNL_MSG_COMPAT_GET"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFT_COMPAT << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFT_COMPAT<<8|0xff /* NFNL_MSG_COMPAT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFT_COMPAT << 8 | NFNL_MSG_COMPAT_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFT_COMPAT<<8|NFNL_MSG_COMPAT_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NF_TABLES_COMPAT_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_nft_compat.gen.test b/tests-m32/nfnetlink_nft_compat.gen.test
new file mode 100755
index 0000000..c3dc890
--- /dev/null
+++ b/tests-m32/nfnetlink_nft_compat.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_nft_compat +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_nftables.c b/tests-m32/nfnetlink_nftables.c
new file mode 100644
index 0000000..66e5fe9
--- /dev/null
+++ b/tests-m32/nfnetlink_nftables.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NF_TABLES_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nf_tables.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_NEWTABLE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|NFT_MSG_NEWTABLE"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|0xff /* NFT_MSG_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_NEWTABLE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|NFT_MSG_NEWTABLE"
+	       ", flags=NLM_F_REQUEST|NLM_F_REPLACE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_GETTABLE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|NFT_MSG_GETTABLE"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_DELTABLE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|NFT_MSG_DELTABLE"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NF_TABLES_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_nftables.gen.test b/tests-m32/nfnetlink_nftables.gen.test
new file mode 100755
index 0000000..25e90e8
--- /dev/null
+++ b/tests-m32/nfnetlink_nftables.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_nftables +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_osf.c b/tests-m32/nfnetlink_osf.c
new file mode 100644
index 0000000..a6dbb7e
--- /dev/null
+++ b/tests-m32/nfnetlink_osf.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_XT_OSF_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/ip.h>
+# include <linux/tcp.h>
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/xt_osf.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_OSF << 8 | OSF_MSG_ADD;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_OSF<<8|OSF_MSG_ADD"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_OSF << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_OSF<<8|0xff /* OSF_MSG_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_XT_OSF_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_osf.gen.test b/tests-m32/nfnetlink_osf.gen.test
new file mode 100755
index 0000000..2689574
--- /dev/null
+++ b/tests-m32/nfnetlink_osf.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_osf +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_queue.c b/tests-m32/nfnetlink_queue.c
new file mode 100644
index 0000000..73ebd9a
--- /dev/null
+++ b/tests-m32/nfnetlink_queue.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_QUEUE_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_queue.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_QUEUE << 8 | NFQNL_MSG_PACKET;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_QUEUE<<8|NFQNL_MSG_PACKET"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_QUEUE << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_QUEUE<<8|0xff /* NFQNL_MSG_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_QUEUE_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_queue.gen.test b/tests-m32/nfnetlink_queue.gen.test
new file mode 100755
index 0000000..739fb17
--- /dev/null
+++ b/tests-m32/nfnetlink_queue.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_queue +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nfnetlink_ulog.c b/tests-m32/nfnetlink_ulog.c
new file mode 100644
index 0000000..31eb30f
--- /dev/null
+++ b/tests-m32/nfnetlink_ulog.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_LOG_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_log.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ULOG << 8 | NFULNL_MSG_PACKET;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ULOG<<8|NFULNL_MSG_PACKET"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ULOG << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ULOG<<8|0xff /* NFULNL_MSG_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_LOG_H")
+
+#endif
diff --git a/tests-m32/nfnetlink_ulog.gen.test b/tests-m32/nfnetlink_ulog.gen.test
new file mode 100755
index 0000000..850ebaf
--- /dev/null
+++ b/tests-m32/nfnetlink_ulog.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ulog +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_inet_diag_msg.c b/tests-m32/nlattr_inet_diag_msg.c
index 5666d74..ccc62ae 100644
--- a/tests-m32/nlattr_inet_diag_msg.c
+++ b/tests-m32/nlattr_inet_diag_msg.c
@@ -182,6 +182,11 @@
 			   INET_DIAG_MARK, pattern, mark,
 			   printf("%u", mark));
 
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_inet_diag_msg, print_inet_diag_msg,
+			   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,
diff --git a/tests-m32/nlattr_mdba_mdb_entry.c b/tests-m32/nlattr_mdba_mdb_entry.c
new file mode 100644
index 0000000..124fe1d
--- /dev/null
+++ b/tests-m32/nlattr_mdba_mdb_entry.c
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <arpa/inet.h>
+# include <linux/if_bridge.h>
+# include <linux/rtnetlink.h>
+
+# ifndef MDB_TEMPORARY
+#  define MDB_TEMPORARY 0
+# endif
+# ifndef MDBA_MDB_ENTRY_INFO
+#  define MDBA_MDB_ENTRY_INFO 1
+# endif
+# ifndef MDBA_MDB_EATTR_TIMER
+#  define MDBA_MDB_EATTR_TIMER 1
+# endif
+
+const unsigned int hdrlen = sizeof(struct br_port_msg);
+
+static void
+init_br_port_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	unsigned int len = msg_len;
+
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = len,
+		.nlmsg_type = RTM_GETMDB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct br_port_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct br_port_msg, msg,
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	);
+
+	struct nlattr *nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	len -= NLMSG_SPACE(hdrlen);
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = len,
+		.nla_type = MDBA_MDB
+	);
+
+	nla = nla + 1;
+	len -= NLA_HDRLEN;
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = len,
+		.nla_type = MDBA_MDB_ENTRY
+	);
+}
+
+static void
+print_br_port_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETMDB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", ifindex=" IFINDEX_LO_STR "}"
+	       ", {{nla_len=%u, nla_type=MDBA_MDB}"
+	       ", {{nla_len=%u, nla_type=MDBA_MDB_ENTRY}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen),
+	       msg_len - NLMSG_SPACE(hdrlen) - NLA_HDRLEN);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* MDBA_MDB_ENTRY_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0 - NLA_HDRLEN * 2, hdrlen + NLA_HDRLEN * 2,
+		     init_br_port_msg, print_br_port_msg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4);
+		     printf("}}"));
+
+# ifdef HAVE_STRUCT_BR_MDB_ENTRY
+	struct br_mdb_entry entry = {
+		.ifindex = ifindex_lo(),
+		.state = MDB_TEMPORARY,
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_FLAGS
+		.flags = MDB_FLAGS_OFFLOAD,
+#  endif
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_VID
+		.vid = 0xcdef,
+#  endif
+		.addr = {
+			.proto = htons(AF_UNSPEC)
+		}
+	};
+
+	memcpy(&entry.addr.u, pattern, sizeof(entry.addr.u));
+	TEST_NESTED_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+				     init_br_port_msg, print_br_port_msg,
+				     MDBA_MDB_ENTRY_INFO, pattern, entry, 2,
+				     printf("{ifindex=" IFINDEX_LO_STR);
+				     printf(", state=MDB_TEMPORARY");
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_FLAGS
+				     printf(", flags=MDB_FLAGS_OFFLOAD");
+#  endif
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_VID
+				     PRINT_FIELD_U(", ", entry, vid);
+#  endif
+				     printf(", addr={u=");
+				     print_quoted_hex(&entry.addr.u,
+						      sizeof(entry.addr.u));
+				     printf(", proto=htons(AF_UNSPEC)}}"));
+
+	static const struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = MDBA_MDB_EATTR_TIMER
+	};
+	char buf[NLMSG_ALIGN(sizeof(entry)) + sizeof(nla)];
+	memcpy(buf, &entry, sizeof(entry));
+	memcpy(buf + NLMSG_ALIGN(sizeof(entry)), &nla, sizeof(nla));
+	TEST_NLATTR(fd, nlh0 - NLA_HDRLEN * 2, hdrlen + NLA_HDRLEN * 2,
+		    init_br_port_msg, print_br_port_msg,
+		    MDBA_MDB_ENTRY_INFO, sizeof(buf), buf, sizeof(buf),
+		    printf("{ifindex=" IFINDEX_LO_STR);
+		    printf(", state=MDB_TEMPORARY");
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_FLAGS
+		    printf(", flags=MDB_FLAGS_OFFLOAD");
+#  endif
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_VID
+		    PRINT_FIELD_U(", ", entry, vid);
+#  endif
+		    printf(", addr={u=");
+		    print_quoted_hex(&entry.addr.u, sizeof(entry.addr.u));
+		    printf(", proto=htons(AF_UNSPEC)}}"
+			   ", {nla_len=%u, nla_type=MDBA_MDB_EATTR_TIMER}}}",
+			   nla.nla_len));
+# endif /* HAVE_STRUCT_BR_MDB_ENTRY */
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_BR_PORT_MSG")
+
+#endif
diff --git a/tests-m32/nlattr_mdba_mdb_entry.gen.test b/tests-m32/nlattr_mdba_mdb_entry.gen.test
new file mode 100755
index 0000000..67253e8
--- /dev/null
+++ b/tests-m32/nlattr_mdba_mdb_entry.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_mdba_mdb_entry +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_mdba_router_port.c b/tests-m32/nlattr_mdba_router_port.c
new file mode 100644
index 0000000..af908cd
--- /dev/null
+++ b/tests-m32/nlattr_mdba_router_port.c
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/if_bridge.h>
+# include <linux/rtnetlink.h>
+
+# ifndef MDBA_ROUTER
+#  define MDBA_ROUTER 2
+# endif
+# ifndef MDBA_ROUTER_PORT
+#  define MDBA_ROUTER_PORT 1
+# endif
+# ifndef MDBA_ROUTER_PATTR_TYPE
+#  define MDBA_ROUTER_PATTR_TYPE 2
+# endif
+# ifndef MDB_RTR_TYPE_DISABLED
+#  define MDB_RTR_TYPE_DISABLED 0
+# endif
+
+const unsigned int hdrlen = sizeof(struct br_port_msg);
+
+static void
+init_br_port_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETMDB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct br_port_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct br_port_msg, msg,
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	);
+
+	struct nlattr *nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = MDBA_ROUTER
+	);
+}
+
+static void
+print_br_port_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETMDB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", ifindex=" IFINDEX_LO_STR "}"
+	       ", {{nla_len=%u, nla_type=MDBA_ROUTER}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const uint32_t 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)];
+	memcpy(buf, &ifindex, sizeof(ifindex));
+	memcpy(buf + NLMSG_ALIGN(ifindex), &nla, sizeof(nla));
+	memcpy(buf + NLMSG_ALIGN(ifindex) + NLA_HDRLEN, &type, sizeof(type));
+	TEST_NLATTR(fd, nlh0 - NLA_HDRLEN, hdrlen + NLA_HDRLEN,
+		    init_br_port_msg, print_br_port_msg,
+		    MDBA_ROUTER_PORT, sizeof(buf), buf, sizeof(buf),
+		    printf(IFINDEX_LO_STR
+			   ", {{nla_len=%u, nla_type=MDBA_ROUTER_PATTR_TYPE}"
+			   ", MDB_RTR_TYPE_DISABLED}}",
+			   nla.nla_len));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_BR_PORT_MSG")
+
+#endif
diff --git a/tests-m32/nlattr_mdba_router_port.gen.test b/tests-m32/nlattr_mdba_router_port.gen.test
new file mode 100755
index 0000000..ce9ea14
--- /dev/null
+++ b/tests-m32/nlattr_mdba_router_port.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_mdba_router_port +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_tc_stats.c b/tests-m32/nlattr_tc_stats.c
new file mode 100644
index 0000000..dd76cc7
--- /dev/null
+++ b/tests-m32/nlattr_tc_stats.c
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_GNET_STATS_BASIC
+
+# include <stdio.h>
+# include <stddef.h>
+# include "test_nlattr.h"
+# include <linux/gen_stats.h>
+# include <linux/rtnetlink.h>
+
+const unsigned int hdrlen = sizeof(struct tcmsg);
+
+static void
+init_tcmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETQDISC,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcmsg, msg,
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo()
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = TCA_STATS2
+	);
+}
+
+static void
+print_tcmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETQDISC, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tcm_family=AF_UNIX"
+	       ", tcm_ifindex=" IFINDEX_LO_STR
+	       ", tcm_handle=0, tcm_parent=0, tcm_info=0}"
+	       ", {{nla_len=%u, nla_type=TCA_STATS2}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	static const struct gnet_stats_basic sb = {
+		.bytes = 0xabcdebdafefeadeb,
+		.packets = 0xbdcdeabf
+	};
+	char buf[offsetofend(struct gnet_stats_basic, packets)];
+	memcpy(buf, &sb, sizeof(buf));
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STATS_BASIC, pattern, buf,
+				  PRINT_FIELD_U("{", sb, bytes);
+				  PRINT_FIELD_U(", ", sb, packets);
+				  printf("}"));
+
+#ifdef HAVE_STRUCT_GNET_STATS_RATE_EST
+	static const struct gnet_stats_rate_est est = {
+		.bps = 0xebcdaebd,
+		.pps = 0xabdceade,
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STATS_RATE_EST, pattern, est,
+				  PRINT_FIELD_U("{", est, bps);
+				  PRINT_FIELD_U(", ", est, pps);
+				  printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_GNET_STATS_QUEUE
+	static const struct gnet_stats_queue qstats = {
+		.qlen = 0xabcdeabd,
+		.backlog = 0xbcdaebad,
+		.drops = 0xcdbeaedb,
+		.requeues = 0xdebaefab,
+		.overlimits = 0xefaebade
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STATS_QUEUE, pattern, qstats,
+				  PRINT_FIELD_U("{", qstats, qlen);
+				  PRINT_FIELD_U(", ", qstats, backlog);
+				  PRINT_FIELD_U(", ", qstats, drops);
+				  PRINT_FIELD_U(", ", qstats, requeues);
+				  PRINT_FIELD_U(", ", qstats, overlimits);
+				  printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_GNET_STATS_RATE_EST64
+	static const struct gnet_stats_rate_est64 est64 = {
+		.bps = 0xacbdcdefafecaebf,
+		.pps = 0xcdabeabdfeabceaf
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STATS_RATE_EST64, pattern, est64,
+				  PRINT_FIELD_U("{", est64, bps);
+				  PRINT_FIELD_U(", ", est64, pps);
+				  printf("}"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_GNET_STATS_BASIC")
+
+#endif
diff --git a/tests-m32/nlattr_tc_stats.gen.test b/tests-m32/nlattr_tc_stats.gen.test
new file mode 100755
index 0000000..72780d4
--- /dev/null
+++ b/tests-m32/nlattr_tc_stats.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tc_stats +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_tca_stab.c b/tests-m32/nlattr_tca_stab.c
new file mode 100644
index 0000000..de6d356
--- /dev/null
+++ b/tests-m32/nlattr_tca_stab.c
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/pkt_sched.h>
+#include <linux/rtnetlink.h>
+
+#ifndef TCA_STAB
+# define TCA_STAB 8
+#endif
+#ifndef TCA_STAB_DATA
+# define TCA_STAB_DATA 2
+#endif
+
+const unsigned int hdrlen = sizeof(struct tcmsg);
+
+static void
+init_tcmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETQDISC,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcmsg, msg,
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo()
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = TCA_STAB
+	);
+}
+
+static void
+print_tcmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETQDISC, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tcm_family=AF_UNIX"
+	       ", tcm_ifindex=" IFINDEX_LO_STR
+	       ", tcm_handle=0, tcm_parent=0, tcm_info=0}"
+	       ", {{nla_len=%u, nla_type=TCA_STAB}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+static void
+print_uint16(const uint16_t *p)
+{
+	printf("%u", *p);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+#ifdef HAVE_STRUCT_TC_SIZESPEC
+	static const struct tc_sizespec s = {
+		.cell_log = 0xab,
+		.size_log = 0xcd,
+		.cell_align = 0xefab,
+		.overhead = 0xcdadeefa,
+		.linklayer = 0xefbaafeb,
+		.mpu = 0xfebfaefb,
+		.mtu = 0xacdbefab,
+		.tsize = 0xbdeaabed
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STAB_BASE, pattern, s,
+				  PRINT_FIELD_U("{", s, cell_log);
+				  PRINT_FIELD_U(", ", s, size_log);
+				  PRINT_FIELD_D(", ", s, cell_align);
+				  PRINT_FIELD_D(", ", s, overhead);
+				  PRINT_FIELD_U(", ", s, linklayer);
+				  PRINT_FIELD_U(", ", s, mpu);
+				  PRINT_FIELD_U(", ", s, mtu);
+				  PRINT_FIELD_U(", ", s, tsize);
+				  printf("}"));
+#endif
+
+	uint16_t data[2] = { 0xacbd, 0xefba };
+	TEST_NESTED_NLATTR_ARRAY(fd, nlh0, hdrlen,
+				 init_tcmsg, print_tcmsg,
+				 TCA_STAB_DATA, pattern, data, print_uint16);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-m32/nlattr_tca_stab.gen.test b/tests-m32/nlattr_tca_stab.gen.test
new file mode 100755
index 0000000..14cd1a5
--- /dev/null
+++ b/tests-m32/nlattr_tca_stab.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tca_stab +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-m32/nlattr_tcmsg.c b/tests-m32/nlattr_tcmsg.c
index 00b7ae4..32ce479 100644
--- a/tests-m32/nlattr_tcmsg.c
+++ b/tests-m32/nlattr_tcmsg.c
@@ -29,7 +29,9 @@
 #include "tests.h"
 
 #include <stdio.h>
+#include <stddef.h>
 #include "test_nlattr.h"
+#include <linux/pkt_sched.h>
 #include <linux/rtnetlink.h>
 
 static void
@@ -80,6 +82,42 @@
 		     4, pattern, 4,
 		     print_quoted_hex(pattern, 4));
 
+	static const struct tc_stats st = {
+		.bytes = 0xabcdcdbefeadefac,
+		.packets = 0xbcdeaefd,
+		.drops = 0xcdedafed,
+		.overlimits = 0xdcdbefad,
+		.bps = 0xefaebfad,
+		.pps = 0xfefbaedb,
+		.qlen = 0xabcdefab,
+		.backlog = 0xbdeabeab
+	};
+	char buf[offsetofend(struct tc_stats, backlog)];
+	memcpy(buf, &st, sizeof(buf));
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_tcmsg, print_tcmsg,
+			   TCA_STATS, pattern, buf,
+			   PRINT_FIELD_U("{", st, bytes);
+			   PRINT_FIELD_U(", ", st, packets);
+			   PRINT_FIELD_U(", ", st, drops);
+			   PRINT_FIELD_U(", ", st, overlimits);
+			   PRINT_FIELD_U(", ", st, bps);
+			   PRINT_FIELD_U(", ", st, pps);
+			   PRINT_FIELD_U(", ", st, qlen);
+			   PRINT_FIELD_U(", ", st, backlog);
+			   printf("}"));
+
+	static const struct tc_estimator est = {
+		.interval = 0xcd,
+		.ewma_log = 0xab
+	};
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_tcmsg, print_tcmsg,
+			   TCA_RATE, pattern, est,
+			   PRINT_FIELD_D("{", est, interval);
+			   PRINT_FIELD_U(", ", est, ewma_log);
+			   printf("}"));
+
 	puts("+++ exited with 0 +++");
 	return 0;
 }
diff --git a/tests-m32/options-syntax.test b/tests-m32/options-syntax.test
index b4d9be7..2e459c9 100755
--- a/tests-m32/options-syntax.test
+++ b/tests-m32/options-syntax.test
@@ -80,16 +80,21 @@
 check_h "invalid -s argument: '1073741824'" -s 1073741824
 check_h "invalid -I argument: '5'" -I 5
 
-cat > "$EXP" << '__EOF__'
-strace: must have PROG [ARGS] or -p PID
-Try 'strace -h' for more information.
-__EOF__
 ../zeroargc "$strace_exp" /bin/true 2> "$LOG" &&
 	dump_log_and_fail_with \
 		'zeroargc strace failed to handle the error properly'
-match_diff "$LOG" "$EXP" ||
-	dump_log_and_fail_with \
-		'zeroargc strace failed to print expected diagnostics'
+cat > "$EXP" << __EOF__
+$strace_exp: must have PROG [ARGS] or -p PID
+Try '$strace_exp -h' for more information.
+__EOF__
+diff -u -- "$EXP" "$LOG" > /dev/null || {
+	cat > "$EXP" <<- '__EOF__'
+	strace: must have PROG [ARGS] or -p PID
+	Try 'strace -h' for more information.
+	__EOF__
+	match_diff "$LOG" "$EXP" \
+		"zeroargc $STRACE $args output mismatch"
+}
 
 if [ -n "${UID-}" ]; then
 	if [ "${UID-}" = 0 ]; then
diff --git a/tests-m32/prctl-seccomp-filter-v.c b/tests-m32/prctl-seccomp-filter-v.c
index cfd5d3d..7a65d89 100644
--- a/tests-m32/prctl-seccomp-filter-v.c
+++ b/tests-m32/prctl-seccomp-filter-v.c
@@ -114,7 +114,7 @@
 	PRINT_DENY_SYSCALL(sync, EBUSY),
 	PRINT_DENY_SYSCALL(setsid, EPERM),
 
-	printf("BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_KILL)");
+	printf("BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_KILL_THREAD)");
 
 	puts("]}) = 0");
 	puts("+++ exited with 0 +++");
diff --git a/tests-m32/pure_executables.am b/tests-m32/pure_executables.am
index 9dc532a..2cae9ae 100644
--- a/tests-m32/pure_executables.am
+++ b/tests-m32/pure_executables.am
@@ -123,6 +123,7 @@
   ipc_sem \
   ipc_shm \
   kcmp \
+  kcmp-y \
   kexec_file_load \
   kexec_load \
   keyctl \
@@ -180,6 +181,17 @@
   netlink_sock_diag \
   netlink_xfrm \
   newfstatat \
+  nfnetlink_acct \
+  nfnetlink_cthelper \
+  nfnetlink_ctnetlink \
+  nfnetlink_ctnetlink_exp \
+  nfnetlink_cttimeout \
+  nfnetlink_nft_compat \
+  nfnetlink_nftables \
+  nfnetlink_ipset \
+  nfnetlink_osf \
+  nfnetlink_queue \
+  nfnetlink_ulog \
   nlattr \
   nlattr_crypto_user_alg \
   nlattr_br_port_msg \
@@ -194,6 +206,8 @@
   nlattr_inet_diag_msg \
   nlattr_inet_diag_req_compat \
   nlattr_inet_diag_req_v2 \
+  nlattr_mdba_mdb_entry \
+  nlattr_mdba_router_port \
   nlattr_ndmsg \
   nlattr_ndtmsg \
   nlattr_netconfmsg \
@@ -203,6 +217,8 @@
   nlattr_rtgenmsg \
   nlattr_rtmsg \
   nlattr_smc_diag_msg \
+  nlattr_tc_stats \
+  nlattr_tca_stab \
   nlattr_tcamsg \
   nlattr_tcmsg \
   nlattr_unix_diag_msg \
@@ -283,6 +299,7 @@
   sched_xetscheduler \
   sched_yield \
   seccomp-filter \
+  seccomp_get_action_avail \
   select \
   semop \
   sendfile \
diff --git a/tests-m32/pure_executables.list b/tests-m32/pure_executables.list
index dade57b..d98b17d 100755
--- a/tests-m32/pure_executables.list
+++ b/tests-m32/pure_executables.list
@@ -122,6 +122,7 @@
 ipc_sem
 ipc_shm
 kcmp
+kcmp-y
 kexec_file_load
 kexec_load
 keyctl
@@ -179,6 +180,17 @@
 netlink_sock_diag
 netlink_xfrm
 newfstatat
+nfnetlink_acct
+nfnetlink_cthelper
+nfnetlink_ctnetlink
+nfnetlink_ctnetlink_exp
+nfnetlink_cttimeout
+nfnetlink_nft_compat
+nfnetlink_nftables
+nfnetlink_ipset
+nfnetlink_osf
+nfnetlink_queue
+nfnetlink_ulog
 nlattr
 nlattr_crypto_user_alg
 nlattr_br_port_msg
@@ -193,6 +205,8 @@
 nlattr_inet_diag_msg
 nlattr_inet_diag_req_compat
 nlattr_inet_diag_req_v2
+nlattr_mdba_mdb_entry
+nlattr_mdba_router_port
 nlattr_ndmsg
 nlattr_ndtmsg
 nlattr_netconfmsg
@@ -202,6 +216,8 @@
 nlattr_rtgenmsg
 nlattr_rtmsg
 nlattr_smc_diag_msg
+nlattr_tc_stats
+nlattr_tca_stab
 nlattr_tcamsg
 nlattr_tcmsg
 nlattr_unix_diag_msg
@@ -282,6 +298,7 @@
 sched_xetscheduler
 sched_yield
 seccomp-filter
+seccomp_get_action_avail
 select
 semop
 sendfile
diff --git a/tests-m32/seccomp-filter-v.c b/tests-m32/seccomp-filter-v.c
index e419c6c..34ab3b5 100644
--- a/tests-m32/seccomp-filter-v.c
+++ b/tests-m32/seccomp-filter-v.c
@@ -95,7 +95,7 @@
 	tprintf("%s", "");
 
 	static const char kill_stmt_txt[] =
-		"BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_KILL)";
+		"BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_KILL_THREAD)";
 	struct sock_filter *const filter =
 		tail_memdup(filter_c, sizeof(filter_c));
 	struct sock_filter *const big_filter =
@@ -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|0xfffffffe", prog->len);
+		"SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|0xfffffffc",
+		prog->len);
 	for (i = 0; i < BPF_MAXINSNS; ++i) {
 		if (i)
 			tprintf(", ");
diff --git a/tests-m32/seccomp-filter.c b/tests-m32/seccomp-filter.c
index 6e00982..7bc7656 100644
--- a/tests-m32/seccomp-filter.c
+++ b/tests-m32/seccomp-filter.c
@@ -55,12 +55,13 @@
 	prog->len = N;
 	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|0xfffffffe",
+	       " = %ld %s (%m)\n",
+	       "SECCOMP_FILTER_FLAG_TSYNC|SECCOMP_FILTER_FLAG_LOG|0xfffffffc",
 	       prog->len, prog->filter, rc, errno2name());
 
-	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -2L, efault);
+	rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -4L, efault);
 	printf("seccomp(SECCOMP_SET_MODE_FILTER, %s, %p) = %ld %s (%m)\n",
-	       "0xfffffffe /* SECCOMP_FILTER_FLAG_??? */",
+	       "0xfffffffc /* SECCOMP_FILTER_FLAG_??? */",
 	       efault, rc, errno2name());
 
 	puts("+++ exited with 0 +++");
diff --git a/tests-m32/seccomp_get_action_avail.c b/tests-m32/seccomp_get_action_avail.c
new file mode 100644
index 0000000..ed231e1
--- /dev/null
+++ b/tests-m32/seccomp_get_action_avail.c
@@ -0,0 +1,125 @@
+/*
+ * Check decoding of seccomp SECCOMP_GET_ACTION_AVAIL.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <asm/unistd.h>
+
+#ifdef __NR_seccomp
+
+# include <stdio.h>
+# include <stdint.h>
+# include <unistd.h>
+
+# ifdef HAVE_LINUX_SECCOMP_H
+#  include <linux/seccomp.h>
+# endif
+
+# ifndef SECCOMP_GET_ACTION_AVAIL
+#  define SECCOMP_GET_ACTION_AVAIL 2
+# endif
+
+static const char *errstr;
+
+static long
+k_seccomp(const kernel_ulong_t op, const kernel_ulong_t flags,
+	  const kernel_ulong_t args)
+{
+	const long rc = syscall(__NR_seccomp, op, flags, args);
+	errstr = sprintrc(rc);
+	return rc;
+}
+
+int
+main(void)
+{
+	TAIL_ALLOC_OBJECT_CONST_PTR(uint32_t, act);
+	kernel_ulong_t op = (kernel_ulong_t) 0xfacefeed00000000ULL
+				| SECCOMP_GET_ACTION_AVAIL;
+	kernel_ulong_t flags = (kernel_ulong_t) 0xdeadbeef00000000ULL;
+	unsigned int i;
+
+	struct {
+		uint32_t val;
+		const char *str;
+	} actions [] = {
+		{ 0, "SECCOMP_RET_KILL_THREAD" },
+# ifdef SECCOMP_RET_KILL_PROCESS
+		{ ARG_STR(SECCOMP_RET_KILL_PROCESS) },
+# endif
+# ifdef SECCOMP_RET_TRAP
+		{ ARG_STR(SECCOMP_RET_TRAP) },
+# endif
+# ifdef SECCOMP_RET_ERRNO
+		{ ARG_STR(SECCOMP_RET_ERRNO) },
+# endif
+# ifdef SECCOMP_RET_TRACE
+		{ ARG_STR(SECCOMP_RET_TRACE) },
+# endif
+# ifdef SECCOMP_RET_LOG
+		{ ARG_STR(SECCOMP_RET_LOG) },
+# endif
+# ifdef SECCOMP_RET_ALLOW
+		{ ARG_STR(SECCOMP_RET_ALLOW) },
+# endif
+		{ 0xffffffff, "0xffffffff /* SECCOMP_RET_??? */" }
+	};
+
+	for (i = 0; i < ARRAY_SIZE(actions); ++i) {
+		*act = actions[i].val;
+		k_seccomp(op, flags, (uintptr_t) act);
+		printf("seccomp(SECCOMP_GET_ACTION_AVAIL, 0, [%s]) = %s\n",
+		       actions[i].str, errstr);
+	}
+
+	*act = actions[0].val;
+
+	k_seccomp(op, flags, (uintptr_t) (act + 1));
+	printf("seccomp(SECCOMP_GET_ACTION_AVAIL, 0, %p) = %s\n",
+	       act + 1, errstr);
+
+	if (F8ILL_KULONG_SUPPORTED) {
+		k_seccomp(op, flags, f8ill_ptr_to_kulong(act));
+		printf("seccomp(SECCOMP_GET_ACTION_AVAIL, 0, %#jx) = %s\n",
+		       (uintmax_t) f8ill_ptr_to_kulong(act), errstr);
+	}
+
+	flags |= 0xcafef00d;
+	k_seccomp(op, flags, 0);
+	printf("seccomp(SECCOMP_GET_ACTION_AVAIL, %u, NULL) = %s\n",
+	       (unsigned int) flags, errstr);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_seccomp")
+
+#endif
diff --git a/tests-m32/seccomp_get_action_avail.gen.test b/tests-m32/seccomp_get_action_avail.gen.test
new file mode 100755
index 0000000..4997451
--- /dev/null
+++ b/tests-m32/seccomp_get_action_avail.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (seccomp_get_action_avail -e trace=seccomp); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=seccomp
diff --git a/tests-m32/set_sigblock.c b/tests-m32/set_sigblock.c
new file mode 100644
index 0000000..4786322
--- /dev/null
+++ b/tests-m32/set_sigblock.c
@@ -0,0 +1,53 @@
+/*
+ * Execute a command with the specified signal blocked/unblocked.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac < 4)
+		error_msg_and_fail("usage: set_sigblock 0|1 signum path...");
+
+	const int block = atoi(av[1]);
+	const int signum = atoi(av[2]);
+	sigset_t mask;
+
+	sigemptyset(&mask);
+	if (sigaddset(&mask, signum))
+		perror_msg_and_fail("sigaddset: %s", av[2]);
+	if (sigprocmask(block ? SIG_BLOCK : SIG_UNBLOCK, &mask, NULL))
+		perror_msg_and_fail("sigprocmask");
+
+	execvp(av[3], av + 3);
+	perror_msg_and_fail("execvp: %s", av[3]);
+}
diff --git a/tests-m32/set_sigign.c b/tests-m32/set_sigign.c
new file mode 100644
index 0000000..0319fed
--- /dev/null
+++ b/tests-m32/set_sigign.c
@@ -0,0 +1,49 @@
+/*
+ * Execute a command with a signal handler set to SIG_IGN/SIG_DFL.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac < 4)
+		error_msg_and_fail("usage: set_sigign 0|1 signum path...");
+
+	const int ign = atoi(av[1]);
+	const int signum = atoi(av[2]);
+
+	if (signal(signum, ign ? SIG_IGN : SIG_DFL) == SIG_ERR)
+		perror_msg_and_fail("signal: %s", av[2]);
+
+	execvp(av[3], av + 3);
+	perror_msg_and_fail("execvp: %s", av[3]);
+}
diff --git a/tests-m32/sigblock.test b/tests-m32/sigblock.test
new file mode 100755
index 0000000..ddbe2de
--- /dev/null
+++ b/tests-m32/sigblock.test
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Check signal mask transparency.
+# Starting with commit v4.17-5-gf83b49b strace is expected
+# to forward the signal mask to tracees unchanged.
+
+. "${srcdir=.}/init.sh"
+
+run_prog ../list_sigaction_signum > /dev/null
+saved_STRACE="$STRACE"
+
+for sig in $(../list_sigaction_signum); do
+	for block in 0 1; do
+		set_cmd="../set_sigblock $block $sig"
+		check_cmd="../check_sigblock $block $sig"
+		run_prog $set_cmd $check_cmd
+		STRACE="$set_cmd $saved_STRACE"
+		for i in '' -I1 -I2 -I3 -I4; do
+			run_strace $i -enone $check_cmd
+		done
+	done
+done
diff --git a/tests-m32/sigign.test b/tests-m32/sigign.test
new file mode 100755
index 0000000..3164e72
--- /dev/null
+++ b/tests-m32/sigign.test
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Check signal disposition transparency.
+# Starting with commit v4.17-8-ge97a66f strace is expected
+# to forward the signal disposition to tracees unchanged.
+
+. "${srcdir=.}/init.sh"
+
+run_prog ../list_sigaction_signum > /dev/null
+saved_STRACE="$STRACE"
+
+for sig in $(../list_sigaction_signum); do
+	for ign in 0 1; do
+		set_cmd="../set_sigign $ign $sig"
+		check_cmd="../check_sigign $ign $sig"
+		run_prog $set_cmd $check_cmd
+		STRACE="$set_cmd $saved_STRACE"
+		for i in '' -I1 -I2 -I3 -I4; do
+			run_strace $i -enone $check_cmd
+		done
+	done
+done
diff --git a/tests-m32/test_nlattr.h b/tests-m32/test_nlattr.h
index 048d547..43f467f 100644
--- a/tests-m32/test_nlattr.h
+++ b/tests-m32/test_nlattr.h
@@ -203,14 +203,75 @@
 			printf("]"));					\
 	} while (0)
 
-#define TEST_NESTED_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,			\
-				  init_msg_, print_msg_,		\
-				  nla_type_, pattern_, obj_, ...)	\
+#define TEST_NESTED_NLATTR_OBJECT_EX_(fd_, nlh0_, hdrlen_,		\
+				      init_msg_, print_msg_,		\
+				      nla_type_, nla_type_str_,		\
+				      pattern_, obj_, 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("}"));				\
+		/* short read of sizeof(obj_) */			\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), (nla_type_str_),			\
+			sizeof(obj_),					\
+			(pattern_), sizeof(obj_) - 1,			\
+			printf("%p", RTA_DATA(TEST_NLATTR_nla));	\
+			size_t i;					\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
+		/* sizeof(obj_) */					\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN * depth_,	\
+			(hdrlen_) + NLA_HDRLEN * depth_,		\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), (nla_type_str_),			\
+			sizeof(obj_),					\
+			&(obj_), sizeof(obj_),				\
+			__VA_ARGS__;					\
+			size_t i;					\
+			for (i = 0; i < depth_; ++i)			\
+				printf("}"));				\
+	} while (0)
+
+#define TEST_NESTED_NLATTR_OBJECT_EX(fd_, nlh0_, hdrlen_,		\
+				     init_msg_, print_msg_,		\
+				     nla_type_, pattern_, obj_,		\
+				     depth_, ...)			\
+	TEST_NESTED_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),	\
+				      (init_msg_), (print_msg_),	\
+				      (nla_type_), #nla_type_,		\
+				      (pattern_), (obj_), (depth_),	\
+				      __VA_ARGS__)
+
+#define TEST_NESTED_NLATTR_OBJECT(fd_, nlh0_, hdrlen_,			\
+				  init_msg_, print_msg_,		\
+				  nla_type_, pattern_, obj_, ...)	\
+	TEST_NESTED_NLATTR_OBJECT_EX_((fd_), (nlh0_), (hdrlen_),	\
+				      (init_msg_), (print_msg_),	\
+				      (nla_type_), #nla_type_,		\
+				      (pattern_), (obj_), 1,		\
+				      __VA_ARGS__)
+
+#define TEST_NESTED_NLATTR_ARRAY(fd_, nlh0_, hdrlen_,			\
+				 init_msg_, print_msg_,			\
+				 nla_type_, pattern_, obj_, 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,				\
 			(init_msg_), (print_msg_),			\
@@ -218,15 +279,36 @@
 			plen, (pattern_), plen,				\
 			print_quoted_hex((pattern_), plen);		\
 			printf("}"));					\
+		/* sizeof((obj_)[0]) < len < sizeof(obj_) */		\
+		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
+			(hdrlen_) + NLA_HDRLEN,				\
+			(init_msg_), (print_msg_),			\
+			(nla_type_), #nla_type_,			\
+			sizeof(obj_) - 1,				\
+			&(obj_), sizeof(obj_) - 1,			\
+			printf("[");					\
+			size_t i;					\
+			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
+				if (i) printf(", ");			\
+				(print_elem_)(&(obj_)[i]);		\
+			}						\
+			printf("]}"));					\
 		/* short read of sizeof(obj_) */			\
 		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
 			(hdrlen_) + NLA_HDRLEN,				\
 			(init_msg_), (print_msg_),			\
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_),					\
-			(pattern_), sizeof(obj_) - 1,			\
-			printf("%p}",					\
-			       RTA_DATA(TEST_NLATTR_nla)));		\
+			&(obj_), sizeof(obj_) - 1,			\
+			printf("[");					\
+			size_t i;					\
+			for (i = 0; i < ARRAY_SIZE(obj_) - 1; ++i) {	\
+				if (i) printf(", ");			\
+				(print_elem_)(&(obj_)[i]);		\
+			}						\
+			printf(", %p]}",				\
+			       RTA_DATA(TEST_NLATTR_nla)		\
+			        + sizeof((obj_)[0])));			\
 		/* sizeof(obj_) */					\
 		TEST_NLATTR_((fd_), (nlh0_) - NLA_HDRLEN,		\
 			(hdrlen_) + NLA_HDRLEN,				\
@@ -234,6 +316,11 @@
 			(nla_type_), #nla_type_,			\
 			sizeof(obj_),					\
 			&(obj_), sizeof(obj_),				\
-			__VA_ARGS__,					\
-			printf("}"));					\
+			printf("[");					\
+			size_t i;					\
+			for (i = 0; i < ARRAY_SIZE(obj_); ++i) {	\
+				if (i) printf(", ");			\
+				(print_elem_)(&(obj_)[i]);		\
+			}						\
+			printf("]}"));					\
 	} while (0)
diff --git a/tests-mx32/Makefile.am b/tests-mx32/Makefile.am
index 043b21f..c445353 100644
--- a/tests-mx32/Makefile.am
+++ b/tests-mx32/Makefile.am
@@ -87,6 +87,8 @@
 	attach-p-cmd-p \
 	block_reset_raise_run \
 	caps-abbrev \
+	check_sigblock \
+	check_sigign \
 	clone_parent \
 	clone_ptrace \
 	count-f \
@@ -106,6 +108,7 @@
 	ioctl_rtc-v \
 	is_linux_mips_n64 \
 	ksysent \
+	list_sigaction_signum \
 	mmsg-silent \
 	mmsg_name-v \
 	msg_control-v \
@@ -135,6 +138,8 @@
 	seccomp-filter-v \
 	seccomp-strict \
 	set_ptracer_any \
+	set_sigblock \
+	set_sigign \
 	signal_receive \
 	sleep \
 	stack-fcall \
@@ -278,6 +283,8 @@
 	redirect-fds.test \
 	redirect.test \
 	restart_syscall.test \
+	sigblock.test \
+	sigign.test \
 	strace-C.test \
 	strace-E.test \
 	strace-S.test \
diff --git a/tests-mx32/Makefile.in b/tests-mx32/Makefile.in
index 6886c3b..272fa47 100644
--- a/tests-mx32/Makefile.in
+++ b/tests-mx32/Makefile.in
@@ -139,7 +139,8 @@
 check_PROGRAMS = $(am__EXEEXT_1) answer$(EXEEXT) attach-f-p$(EXEEXT) \
 	attach-f-p-cmd$(EXEEXT) attach-p-cmd-cmd$(EXEEXT) \
 	attach-p-cmd-p$(EXEEXT) block_reset_raise_run$(EXEEXT) \
-	caps-abbrev$(EXEEXT) clone_parent$(EXEEXT) \
+	caps-abbrev$(EXEEXT) check_sigblock$(EXEEXT) \
+	check_sigign$(EXEEXT) clone_parent$(EXEEXT) \
 	clone_ptrace$(EXEEXT) count-f$(EXEEXT) execve-v$(EXEEXT) \
 	execveat-v$(EXEEXT) filter-unavailable$(EXEEXT) \
 	fork-f$(EXEEXT) getpid$(EXEEXT) getppid$(EXEEXT) \
@@ -147,10 +148,11 @@
 	ioctl_evdev-v$(EXEEXT) ioctl_loop-nv$(EXEEXT) \
 	ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
 	is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
-	mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
-	msg_control-v$(EXEEXT) net-accept-connect$(EXEEXT) \
-	netlink_inet_diag$(EXEEXT) netlink_netlink_diag$(EXEEXT) \
-	netlink_unix_diag$(EXEEXT) nsyscalls$(EXEEXT) pc$(EXEEXT) \
+	list_sigaction_signum$(EXEEXT) mmsg-silent$(EXEEXT) \
+	mmsg_name-v$(EXEEXT) msg_control-v$(EXEEXT) \
+	net-accept-connect$(EXEEXT) netlink_inet_diag$(EXEEXT) \
+	netlink_netlink_diag$(EXEEXT) netlink_unix_diag$(EXEEXT) \
+	nsyscalls$(EXEEXT) pc$(EXEEXT) \
 	perf_event_open_nonverbose$(EXEEXT) \
 	perf_event_open_unabbrev$(EXEEXT) ppoll-v$(EXEEXT) \
 	prctl-seccomp-filter-v$(EXEEXT) prctl-seccomp-strict$(EXEEXT) \
@@ -161,8 +163,9 @@
 	redirect-fds$(EXEEXT) restart_syscall$(EXEEXT) \
 	run_expect_termsig$(EXEEXT) scm_rights$(EXEEXT) \
 	seccomp-filter-v$(EXEEXT) seccomp-strict$(EXEEXT) \
-	set_ptracer_any$(EXEEXT) signal_receive$(EXEEXT) \
-	sleep$(EXEEXT) stack-fcall$(EXEEXT) threads-execve$(EXEEXT) \
+	set_ptracer_any$(EXEEXT) set_sigblock$(EXEEXT) \
+	set_sigign$(EXEEXT) signal_receive$(EXEEXT) sleep$(EXEEXT) \
+	stack-fcall$(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)
@@ -253,9 +256,9 @@
 	ioctl_uffdio$(EXEEXT) ioctl_v4l2$(EXEEXT) ioperm$(EXEEXT) \
 	iopl$(EXEEXT) ioprio$(EXEEXT) ip_mreq$(EXEEXT) ipc$(EXEEXT) \
 	ipc_msg$(EXEEXT) ipc_msgbuf$(EXEEXT) ipc_sem$(EXEEXT) \
-	ipc_shm$(EXEEXT) kcmp$(EXEEXT) kexec_file_load$(EXEEXT) \
-	kexec_load$(EXEEXT) keyctl$(EXEEXT) kill$(EXEEXT) \
-	lchown$(EXEEXT) lchown32$(EXEEXT) link$(EXEEXT) \
+	ipc_shm$(EXEEXT) kcmp$(EXEEXT) kcmp-y$(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) \
@@ -275,19 +278,27 @@
 	netlink_netfilter$(EXEEXT) netlink_protocol$(EXEEXT) \
 	netlink_route$(EXEEXT) netlink_selinux$(EXEEXT) \
 	netlink_sock_diag$(EXEEXT) netlink_xfrm$(EXEEXT) \
-	newfstatat$(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) \
+	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) \
 	nlattr_inet_diag_req_compat$(EXEEXT) \
-	nlattr_inet_diag_req_v2$(EXEEXT) nlattr_ndmsg$(EXEEXT) \
+	nlattr_inet_diag_req_v2$(EXEEXT) \
+	nlattr_mdba_mdb_entry$(EXEEXT) \
+	nlattr_mdba_router_port$(EXEEXT) nlattr_ndmsg$(EXEEXT) \
 	nlattr_ndtmsg$(EXEEXT) nlattr_netconfmsg$(EXEEXT) \
 	nlattr_netlink_diag_msg$(EXEEXT) nlattr_nlmsgerr$(EXEEXT) \
 	nlattr_packet_diag_msg$(EXEEXT) nlattr_rtgenmsg$(EXEEXT) \
 	nlattr_rtmsg$(EXEEXT) nlattr_smc_diag_msg$(EXEEXT) \
+	nlattr_tc_stats$(EXEEXT) nlattr_tca_stab$(EXEEXT) \
 	nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
 	nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
 	oldfstat$(EXEEXT) oldlstat$(EXEEXT) oldselect$(EXEEXT) \
@@ -321,7 +332,8 @@
 	sched_get_priority_mxx$(EXEEXT) sched_rr_get_interval$(EXEEXT) \
 	sched_xetaffinity$(EXEEXT) sched_xetattr$(EXEEXT) \
 	sched_xetparam$(EXEEXT) sched_xetscheduler$(EXEEXT) \
-	sched_yield$(EXEEXT) seccomp-filter$(EXEEXT) select$(EXEEXT) \
+	sched_yield$(EXEEXT) seccomp-filter$(EXEEXT) \
+	seccomp_get_action_avail$(EXEEXT) select$(EXEEXT) \
 	semop$(EXEEXT) sendfile$(EXEEXT) sendfile64$(EXEEXT) \
 	set_mempolicy$(EXEEXT) setdomainname$(EXEEXT) \
 	setfsgid$(EXEEXT) setfsgid32$(EXEEXT) setfsuid$(EXEEXT) \
@@ -439,6 +451,14 @@
 caps_abbrev_OBJECTS = caps-abbrev.$(OBJEXT)
 caps_abbrev_LDADD = $(LDADD)
 caps_abbrev_DEPENDENCIES = libtests.a
+check_sigblock_SOURCES = check_sigblock.c
+check_sigblock_OBJECTS = check_sigblock.$(OBJEXT)
+check_sigblock_LDADD = $(LDADD)
+check_sigblock_DEPENDENCIES = libtests.a
+check_sigign_SOURCES = check_sigign.c
+check_sigign_OBJECTS = check_sigign.$(OBJEXT)
+check_sigign_LDADD = $(LDADD)
+check_sigign_DEPENDENCIES = libtests.a
 chmod_SOURCES = chmod.c
 chmod_OBJECTS = chmod.$(OBJEXT)
 chmod_LDADD = $(LDADD)
@@ -936,6 +956,10 @@
 kcmp_OBJECTS = kcmp.$(OBJEXT)
 kcmp_LDADD = $(LDADD)
 kcmp_DEPENDENCIES = libtests.a
+kcmp_y_SOURCES = kcmp-y.c
+kcmp_y_OBJECTS = kcmp-y.$(OBJEXT)
+kcmp_y_LDADD = $(LDADD)
+kcmp_y_DEPENDENCIES = libtests.a
 kexec_file_load_SOURCES = kexec_file_load.c
 kexec_file_load_OBJECTS = kexec_file_load.$(OBJEXT)
 kexec_file_load_LDADD = $(LDADD)
@@ -972,6 +996,10 @@
 linkat_OBJECTS = linkat.$(OBJEXT)
 linkat_LDADD = $(LDADD)
 linkat_DEPENDENCIES = libtests.a
+list_sigaction_signum_SOURCES = list_sigaction_signum.c
+list_sigaction_signum_OBJECTS = list_sigaction_signum.$(OBJEXT)
+list_sigaction_signum_LDADD = $(LDADD)
+list_sigaction_signum_DEPENDENCIES = libtests.a
 llseek_SOURCES = llseek.c
 llseek_OBJECTS = llseek.$(OBJEXT)
 llseek_LDADD = $(LDADD)
@@ -1192,6 +1220,50 @@
 newfstatat_OBJECTS = newfstatat-newfstatat.$(OBJEXT)
 newfstatat_LDADD = $(LDADD)
 newfstatat_DEPENDENCIES = libtests.a
+nfnetlink_acct_SOURCES = nfnetlink_acct.c
+nfnetlink_acct_OBJECTS = nfnetlink_acct.$(OBJEXT)
+nfnetlink_acct_LDADD = $(LDADD)
+nfnetlink_acct_DEPENDENCIES = libtests.a
+nfnetlink_cthelper_SOURCES = nfnetlink_cthelper.c
+nfnetlink_cthelper_OBJECTS = nfnetlink_cthelper.$(OBJEXT)
+nfnetlink_cthelper_LDADD = $(LDADD)
+nfnetlink_cthelper_DEPENDENCIES = libtests.a
+nfnetlink_ctnetlink_SOURCES = nfnetlink_ctnetlink.c
+nfnetlink_ctnetlink_OBJECTS = nfnetlink_ctnetlink.$(OBJEXT)
+nfnetlink_ctnetlink_LDADD = $(LDADD)
+nfnetlink_ctnetlink_DEPENDENCIES = libtests.a
+nfnetlink_ctnetlink_exp_SOURCES = nfnetlink_ctnetlink_exp.c
+nfnetlink_ctnetlink_exp_OBJECTS = nfnetlink_ctnetlink_exp.$(OBJEXT)
+nfnetlink_ctnetlink_exp_LDADD = $(LDADD)
+nfnetlink_ctnetlink_exp_DEPENDENCIES = libtests.a
+nfnetlink_cttimeout_SOURCES = nfnetlink_cttimeout.c
+nfnetlink_cttimeout_OBJECTS = nfnetlink_cttimeout.$(OBJEXT)
+nfnetlink_cttimeout_LDADD = $(LDADD)
+nfnetlink_cttimeout_DEPENDENCIES = libtests.a
+nfnetlink_ipset_SOURCES = nfnetlink_ipset.c
+nfnetlink_ipset_OBJECTS = nfnetlink_ipset.$(OBJEXT)
+nfnetlink_ipset_LDADD = $(LDADD)
+nfnetlink_ipset_DEPENDENCIES = libtests.a
+nfnetlink_nft_compat_SOURCES = nfnetlink_nft_compat.c
+nfnetlink_nft_compat_OBJECTS = nfnetlink_nft_compat.$(OBJEXT)
+nfnetlink_nft_compat_LDADD = $(LDADD)
+nfnetlink_nft_compat_DEPENDENCIES = libtests.a
+nfnetlink_nftables_SOURCES = nfnetlink_nftables.c
+nfnetlink_nftables_OBJECTS = nfnetlink_nftables.$(OBJEXT)
+nfnetlink_nftables_LDADD = $(LDADD)
+nfnetlink_nftables_DEPENDENCIES = libtests.a
+nfnetlink_osf_SOURCES = nfnetlink_osf.c
+nfnetlink_osf_OBJECTS = nfnetlink_osf.$(OBJEXT)
+nfnetlink_osf_LDADD = $(LDADD)
+nfnetlink_osf_DEPENDENCIES = libtests.a
+nfnetlink_queue_SOURCES = nfnetlink_queue.c
+nfnetlink_queue_OBJECTS = nfnetlink_queue.$(OBJEXT)
+nfnetlink_queue_LDADD = $(LDADD)
+nfnetlink_queue_DEPENDENCIES = libtests.a
+nfnetlink_ulog_SOURCES = nfnetlink_ulog.c
+nfnetlink_ulog_OBJECTS = nfnetlink_ulog.$(OBJEXT)
+nfnetlink_ulog_LDADD = $(LDADD)
+nfnetlink_ulog_DEPENDENCIES = libtests.a
 nlattr_SOURCES = nlattr.c
 nlattr_OBJECTS = nlattr.$(OBJEXT)
 nlattr_LDADD = $(LDADD)
@@ -1249,6 +1321,14 @@
 nlattr_inet_diag_req_v2_OBJECTS = nlattr_inet_diag_req_v2.$(OBJEXT)
 nlattr_inet_diag_req_v2_LDADD = $(LDADD)
 nlattr_inet_diag_req_v2_DEPENDENCIES = libtests.a
+nlattr_mdba_mdb_entry_SOURCES = nlattr_mdba_mdb_entry.c
+nlattr_mdba_mdb_entry_OBJECTS = nlattr_mdba_mdb_entry.$(OBJEXT)
+nlattr_mdba_mdb_entry_LDADD = $(LDADD)
+nlattr_mdba_mdb_entry_DEPENDENCIES = libtests.a
+nlattr_mdba_router_port_SOURCES = nlattr_mdba_router_port.c
+nlattr_mdba_router_port_OBJECTS = nlattr_mdba_router_port.$(OBJEXT)
+nlattr_mdba_router_port_LDADD = $(LDADD)
+nlattr_mdba_router_port_DEPENDENCIES = libtests.a
 nlattr_ndmsg_SOURCES = nlattr_ndmsg.c
 nlattr_ndmsg_OBJECTS = nlattr_ndmsg.$(OBJEXT)
 nlattr_ndmsg_LDADD = $(LDADD)
@@ -1285,6 +1365,14 @@
 nlattr_smc_diag_msg_OBJECTS = nlattr_smc_diag_msg.$(OBJEXT)
 nlattr_smc_diag_msg_LDADD = $(LDADD)
 nlattr_smc_diag_msg_DEPENDENCIES = libtests.a
+nlattr_tc_stats_SOURCES = nlattr_tc_stats.c
+nlattr_tc_stats_OBJECTS = nlattr_tc_stats.$(OBJEXT)
+nlattr_tc_stats_LDADD = $(LDADD)
+nlattr_tc_stats_DEPENDENCIES = libtests.a
+nlattr_tca_stab_SOURCES = nlattr_tca_stab.c
+nlattr_tca_stab_OBJECTS = nlattr_tca_stab.$(OBJEXT)
+nlattr_tca_stab_LDADD = $(LDADD)
+nlattr_tca_stab_DEPENDENCIES = libtests.a
 nlattr_tcamsg_SOURCES = nlattr_tcamsg.c
 nlattr_tcamsg_OBJECTS = nlattr_tcamsg.$(OBJEXT)
 nlattr_tcamsg_LDADD = $(LDADD)
@@ -1696,6 +1784,10 @@
 seccomp_strict_OBJECTS = seccomp-strict.$(OBJEXT)
 seccomp_strict_LDADD = $(LDADD)
 seccomp_strict_DEPENDENCIES = libtests.a
+seccomp_get_action_avail_SOURCES = seccomp_get_action_avail.c
+seccomp_get_action_avail_OBJECTS = seccomp_get_action_avail.$(OBJEXT)
+seccomp_get_action_avail_LDADD = $(LDADD)
+seccomp_get_action_avail_DEPENDENCIES = libtests.a
 select_SOURCES = select.c
 select_OBJECTS = select.$(OBJEXT)
 select_LDADD = $(LDADD)
@@ -1720,6 +1812,14 @@
 set_ptracer_any_OBJECTS = set_ptracer_any.$(OBJEXT)
 set_ptracer_any_LDADD = $(LDADD)
 set_ptracer_any_DEPENDENCIES = libtests.a
+set_sigblock_SOURCES = set_sigblock.c
+set_sigblock_OBJECTS = set_sigblock.$(OBJEXT)
+set_sigblock_LDADD = $(LDADD)
+set_sigblock_DEPENDENCIES = libtests.a
+set_sigign_SOURCES = set_sigign.c
+set_sigign_OBJECTS = set_sigign.$(OBJEXT)
+set_sigign_LDADD = $(LDADD)
+set_sigign_DEPENDENCIES = libtests.a
 setdomainname_SOURCES = setdomainname.c
 setdomainname_OBJECTS = setdomainname.$(OBJEXT)
 setdomainname_LDADD = $(LDADD)
@@ -2169,10 +2269,11 @@
 	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 chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
-	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	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 \
+	delete_module.c dup.c dup2.c dup3.c epoll_create.c \
 	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
 	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
 	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
@@ -2195,39 +2296,45 @@
 	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 \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c kcmp-y.c \
 	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
-	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
-	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
-	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
-	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
-	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
-	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
-	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
-	munlockall.c nanosleep.c net-accept-connect.c \
-	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
-	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
-	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
-	netlink_kobject_uevent.c netlink_netfilter.c \
-	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
-	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
-	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
-	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
-	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
-	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
-	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
-	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
-	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
-	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
-	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
-	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
-	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
-	osf_utimes.c pause.c pc.c perf_event_open.c \
-	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
-	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
-	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
-	prctl-dumpable.c prctl-name.c prctl-no-args.c \
-	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	lchown.c lchown32.c link.c linkat.c list_sigaction_signum.c \
+	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
+	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
+	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
+	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
+	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
+	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
+	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
+	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
+	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
+	netlink_audit.c netlink_crypto.c netlink_generic.c \
+	netlink_inet_diag.c netlink_kobject_uevent.c \
+	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
+	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
+	netlink_unix_diag.c netlink_xfrm.c newfstatat.c \
+	nfnetlink_acct.c nfnetlink_cthelper.c nfnetlink_ctnetlink.c \
+	nfnetlink_ctnetlink_exp.c nfnetlink_cttimeout.c \
+	nfnetlink_ipset.c nfnetlink_nft_compat.c nfnetlink_nftables.c \
+	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 old_mmap.c oldfstat.c oldlstat.c oldselect.c \
+	oldstat.c open.c openat.c osf_utimes.c pause.c pc.c \
+	perf_event_open.c perf_event_open_nonverbose.c \
+	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
+	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
+	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
+	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
 	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
@@ -2248,8 +2355,9 @@
 	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
 	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
 	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
-	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
-	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	seccomp-strict.c seccomp_get_action_avail.c select.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 \
@@ -2275,10 +2383,11 @@
 	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 chmod.c chown.c chown32.c \
-	chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
-	clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
-	creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+	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 \
+	delete_module.c dup.c dup2.c dup3.c epoll_create.c \
 	epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
 	erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
 	execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
@@ -2301,39 +2410,45 @@
 	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 \
+	ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c kcmp-y.c \
 	kexec_file_load.c kexec_load.c keyctl.c kill.c ksysent.c \
-	lchown.c lchown32.c link.c linkat.c llseek.c lookup_dcookie.c \
-	lseek.c lstat.c lstat64.c madvise.c mbind.c membarrier.c \
-	memfd_create.c migrate_pages.c mincore.c mkdir.c mkdirat.c \
-	mknod.c mknodat.c mlock.c mlock2.c mlockall.c mmap.c mmap64.c \
-	mmsg.c mmsg-silent.c mmsg_name.c mmsg_name-v.c mount.c \
-	move_pages.c mq.c mq_sendrecv.c mq_sendrecv-read.c \
-	mq_sendrecv-write.c msg_control.c msg_control-v.c msg_name.c \
-	munlockall.c nanosleep.c net-accept-connect.c \
-	net-icmp_filter.c net-sockaddr.c net-y-unix.c net-yy-inet.c \
-	net-yy-netlink.c net-yy-unix.c netlink_audit.c \
-	netlink_crypto.c netlink_generic.c netlink_inet_diag.c \
-	netlink_kobject_uevent.c netlink_netfilter.c \
-	netlink_netlink_diag.c netlink_protocol.c netlink_route.c \
-	netlink_selinux.c netlink_sock_diag.c netlink_unix_diag.c \
-	netlink_xfrm.c newfstatat.c nlattr.c nlattr_br_port_msg.c \
-	nlattr_crypto_user_alg.c nlattr_dcbmsg.c nlattr_fib_rule_hdr.c \
-	nlattr_ifaddrlblmsg.c nlattr_ifaddrmsg.c nlattr_ifinfomsg.c \
-	nlattr_ifla_brport.c nlattr_ifla_port.c nlattr_ifla_xdp.c \
-	nlattr_inet_diag_msg.c nlattr_inet_diag_req_compat.c \
-	nlattr_inet_diag_req_v2.c nlattr_ndmsg.c nlattr_ndtmsg.c \
-	nlattr_netconfmsg.c nlattr_netlink_diag_msg.c \
-	nlattr_nlmsgerr.c nlattr_packet_diag_msg.c nlattr_rtgenmsg.c \
-	nlattr_rtmsg.c nlattr_smc_diag_msg.c nlattr_tcamsg.c \
-	nlattr_tcmsg.c nlattr_unix_diag_msg.c nsyscalls.c old_mmap.c \
-	oldfstat.c oldlstat.c oldselect.c oldstat.c open.c openat.c \
-	osf_utimes.c pause.c pc.c perf_event_open.c \
-	perf_event_open_nonverbose.c perf_event_open_unabbrev.c \
-	personality.c pipe.c pipe2.c pkey_alloc.c pkey_free.c \
-	pkey_mprotect.c poll.c ppoll.c ppoll-v.c prctl-arg2-intptr.c \
-	prctl-dumpable.c prctl-name.c prctl-no-args.c \
-	prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+	lchown.c lchown32.c link.c linkat.c list_sigaction_signum.c \
+	llseek.c lookup_dcookie.c lseek.c lstat.c lstat64.c madvise.c \
+	mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
+	mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
+	mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
+	mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
+	mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
+	msg_control-v.c msg_name.c munlockall.c nanosleep.c \
+	net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
+	net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
+	netlink_audit.c netlink_crypto.c netlink_generic.c \
+	netlink_inet_diag.c netlink_kobject_uevent.c \
+	netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
+	netlink_route.c netlink_selinux.c netlink_sock_diag.c \
+	netlink_unix_diag.c netlink_xfrm.c newfstatat.c \
+	nfnetlink_acct.c nfnetlink_cthelper.c nfnetlink_ctnetlink.c \
+	nfnetlink_ctnetlink_exp.c nfnetlink_cttimeout.c \
+	nfnetlink_ipset.c nfnetlink_nft_compat.c nfnetlink_nftables.c \
+	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 old_mmap.c oldfstat.c oldlstat.c oldselect.c \
+	oldstat.c open.c openat.c osf_utimes.c pause.c pc.c \
+	perf_event_open.c perf_event_open_nonverbose.c \
+	perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
+	pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
+	ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
+	prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
 	prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
 	prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
 	preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
@@ -2354,8 +2469,9 @@
 	sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
 	sched_xetparam.c sched_xetscheduler.c sched_yield.c \
 	scm_rights.c seccomp-filter.c seccomp-filter-v.c \
-	seccomp-strict.c select.c semop.c sendfile.c sendfile64.c \
-	set_mempolicy.c set_ptracer_any.c setdomainname.c setfsgid.c \
+	seccomp-strict.c seccomp_get_action_avail.c select.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 \
@@ -2924,6 +3040,7 @@
   ipc_sem \
   ipc_shm \
   kcmp \
+  kcmp-y \
   kexec_file_load \
   kexec_load \
   keyctl \
@@ -2981,6 +3098,17 @@
   netlink_sock_diag \
   netlink_xfrm \
   newfstatat \
+  nfnetlink_acct \
+  nfnetlink_cthelper \
+  nfnetlink_ctnetlink \
+  nfnetlink_ctnetlink_exp \
+  nfnetlink_cttimeout \
+  nfnetlink_nft_compat \
+  nfnetlink_nftables \
+  nfnetlink_ipset \
+  nfnetlink_osf \
+  nfnetlink_queue \
+  nfnetlink_ulog \
   nlattr \
   nlattr_crypto_user_alg \
   nlattr_br_port_msg \
@@ -2995,6 +3123,8 @@
   nlattr_inet_diag_msg \
   nlattr_inet_diag_req_compat \
   nlattr_inet_diag_req_v2 \
+  nlattr_mdba_mdb_entry \
+  nlattr_mdba_router_port \
   nlattr_ndmsg \
   nlattr_ndtmsg \
   nlattr_netconfmsg \
@@ -3004,6 +3134,8 @@
   nlattr_rtgenmsg \
   nlattr_rtmsg \
   nlattr_smc_diag_msg \
+  nlattr_tc_stats \
+  nlattr_tca_stab \
   nlattr_tcamsg \
   nlattr_tcmsg \
   nlattr_unix_diag_msg \
@@ -3084,6 +3216,7 @@
   sched_xetscheduler \
   sched_yield \
   seccomp-filter \
+  seccomp_get_action_avail \
   select \
   semop \
   sendfile \
@@ -3253,39 +3386,47 @@
 	ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test \
 	iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test \
 	ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test \
-	kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test \
-	keyctl.gen.test kill.gen.test lchown.gen.test \
-	lchown32.gen.test link.gen.test linkat.gen.test \
-	lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test \
-	madvise.gen.test mbind.gen.test membarrier.gen.test \
-	memfd_create.gen.test migrate_pages.gen.test mincore.gen.test \
-	mkdir.gen.test mkdirat.gen.test mknod.gen.test \
-	mknodat.gen.test mlock.gen.test mlock2.gen.test \
-	mlockall.gen.test mmap64.gen.test mmsg.gen.test \
-	mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test \
-	mount.gen.test move_pages.gen.test mq.gen.test \
-	mq_sendrecv.gen.test mq_sendrecv-read.gen.test \
-	mq_sendrecv-write.gen.test msg_control.gen.test \
-	msg_control-v.gen.test msg_name.gen.test munlockall.gen.test \
-	nanosleep.gen.test net-icmp_filter.gen.test \
-	net-sockaddr.gen.test netlink_audit.gen.test \
-	netlink_crypto.gen.test netlink_generic.gen.test \
-	netlink_kobject_uevent.gen.test netlink_netfilter.gen.test \
-	netlink_protocol.gen.test netlink_route.gen.test \
-	netlink_selinux.gen.test netlink_xfrm.gen.test \
-	newfstatat.gen.test nlattr.gen.test \
-	nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test \
-	nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test \
-	nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test \
-	nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test \
-	nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test \
-	nlattr_inet_diag_msg.gen.test \
+	kcmp.gen.test kcmp-y.gen.test kexec_file_load.gen.test \
+	kexec_load.gen.test keyctl.gen.test kill.gen.test \
+	lchown.gen.test lchown32.gen.test link.gen.test \
+	linkat.gen.test lookup_dcookie.gen.test lstat.gen.test \
+	lstat64.gen.test madvise.gen.test mbind.gen.test \
+	membarrier.gen.test memfd_create.gen.test \
+	migrate_pages.gen.test mincore.gen.test mkdir.gen.test \
+	mkdirat.gen.test mknod.gen.test mknodat.gen.test \
+	mlock.gen.test mlock2.gen.test mlockall.gen.test \
+	mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test \
+	mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test \
+	move_pages.gen.test mq.gen.test mq_sendrecv.gen.test \
+	mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test \
+	msg_control.gen.test msg_control-v.gen.test msg_name.gen.test \
+	munlockall.gen.test nanosleep.gen.test \
+	net-icmp_filter.gen.test net-sockaddr.gen.test \
+	netlink_audit.gen.test netlink_crypto.gen.test \
+	netlink_generic.gen.test netlink_kobject_uevent.gen.test \
+	netlink_netfilter.gen.test netlink_protocol.gen.test \
+	netlink_route.gen.test netlink_selinux.gen.test \
+	netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test \
+	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_ndmsg.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 \
 	oldfstat.gen.test oldlstat.gen.test oldstat.gen.test \
@@ -3319,20 +3460,21 @@
 	sched_xetattr.gen.test sched_xetparam.gen.test \
 	sched_xetscheduler.gen.test sched_yield.gen.test \
 	seccomp-filter.gen.test seccomp-filter-v.gen.test \
-	select.gen.test semop.gen.test sendfile.gen.test \
-	sendfile64.gen.test set_mempolicy.gen.test \
-	setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test \
-	setfsuid.gen.test setfsuid32.gen.test setgid.gen.test \
-	setgid32.gen.test setgroups.gen.test setgroups32.gen.test \
-	sethostname.gen.test setns.gen.test setregid.gen.test \
-	setregid32.gen.test setresgid.gen.test setresgid32.gen.test \
-	setresuid.gen.test setresuid32.gen.test setreuid.gen.test \
-	setreuid32.gen.test setrlimit.gen.test setuid.gen.test \
-	setuid32.gen.test shmxt.gen.test shutdown.gen.test \
-	sigaction.gen.test siginfo.gen.test signal.gen.test \
-	signal_receive.gen.test signalfd4.gen.test sigpending.gen.test \
-	sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test \
-	so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test \
+	seccomp_get_action_avail.gen.test select.gen.test \
+	semop.gen.test sendfile.gen.test sendfile64.gen.test \
+	set_mempolicy.gen.test setdomainname.gen.test \
+	setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test \
+	setfsuid32.gen.test setgid.gen.test setgid32.gen.test \
+	setgroups.gen.test setgroups32.gen.test sethostname.gen.test \
+	setns.gen.test setregid.gen.test setregid32.gen.test \
+	setresgid.gen.test setresgid32.gen.test setresuid.gen.test \
+	setresuid32.gen.test setreuid.gen.test setreuid32.gen.test \
+	setrlimit.gen.test setuid.gen.test setuid32.gen.test \
+	shmxt.gen.test shutdown.gen.test sigaction.gen.test \
+	siginfo.gen.test signal.gen.test signal_receive.gen.test \
+	signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test \
+	sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test \
+	so_peercred.gen.test sock_filter-v.gen.test \
 	socketcall.gen.test splice.gen.test stat.gen.test \
 	stat64.gen.test statfs.gen.test statfs64.gen.test \
 	statx.gen.test swap.gen.test sxetmask.gen.test \
@@ -3451,6 +3593,8 @@
 	redirect-fds.test \
 	redirect.test \
 	restart_syscall.test \
+	sigblock.test \
+	sigign.test \
 	strace-C.test \
 	strace-E.test \
 	strace-S.test \
@@ -3692,6 +3836,14 @@
 	@rm -f caps-abbrev$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(caps_abbrev_OBJECTS) $(caps_abbrev_LDADD) $(LIBS)
 
+check_sigblock$(EXEEXT): $(check_sigblock_OBJECTS) $(check_sigblock_DEPENDENCIES) $(EXTRA_check_sigblock_DEPENDENCIES) 
+	@rm -f check_sigblock$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(check_sigblock_OBJECTS) $(check_sigblock_LDADD) $(LIBS)
+
+check_sigign$(EXEEXT): $(check_sigign_OBJECTS) $(check_sigign_DEPENDENCIES) $(EXTRA_check_sigign_DEPENDENCIES) 
+	@rm -f check_sigign$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(check_sigign_OBJECTS) $(check_sigign_LDADD) $(LIBS)
+
 chmod$(EXEEXT): $(chmod_OBJECTS) $(chmod_DEPENDENCIES) $(EXTRA_chmod_DEPENDENCIES) 
 	@rm -f chmod$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(chmod_OBJECTS) $(chmod_LDADD) $(LIBS)
@@ -4192,6 +4344,10 @@
 	@rm -f kcmp$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kcmp_OBJECTS) $(kcmp_LDADD) $(LIBS)
 
+kcmp-y$(EXEEXT): $(kcmp_y_OBJECTS) $(kcmp_y_DEPENDENCIES) $(EXTRA_kcmp_y_DEPENDENCIES) 
+	@rm -f kcmp-y$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(kcmp_y_OBJECTS) $(kcmp_y_LDADD) $(LIBS)
+
 kexec_file_load$(EXEEXT): $(kexec_file_load_OBJECTS) $(kexec_file_load_DEPENDENCIES) $(EXTRA_kexec_file_load_DEPENDENCIES) 
 	@rm -f kexec_file_load$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(kexec_file_load_OBJECTS) $(kexec_file_load_LDADD) $(LIBS)
@@ -4228,6 +4384,10 @@
 	@rm -f linkat$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(linkat_OBJECTS) $(linkat_LDADD) $(LIBS)
 
+list_sigaction_signum$(EXEEXT): $(list_sigaction_signum_OBJECTS) $(list_sigaction_signum_DEPENDENCIES) $(EXTRA_list_sigaction_signum_DEPENDENCIES) 
+	@rm -f list_sigaction_signum$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(list_sigaction_signum_OBJECTS) $(list_sigaction_signum_LDADD) $(LIBS)
+
 llseek$(EXEEXT): $(llseek_OBJECTS) $(llseek_DEPENDENCIES) $(EXTRA_llseek_DEPENDENCIES) 
 	@rm -f llseek$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(llseek_OBJECTS) $(llseek_LDADD) $(LIBS)
@@ -4452,6 +4612,50 @@
 	@rm -f newfstatat$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(newfstatat_OBJECTS) $(newfstatat_LDADD) $(LIBS)
 
+nfnetlink_acct$(EXEEXT): $(nfnetlink_acct_OBJECTS) $(nfnetlink_acct_DEPENDENCIES) $(EXTRA_nfnetlink_acct_DEPENDENCIES) 
+	@rm -f nfnetlink_acct$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_acct_OBJECTS) $(nfnetlink_acct_LDADD) $(LIBS)
+
+nfnetlink_cthelper$(EXEEXT): $(nfnetlink_cthelper_OBJECTS) $(nfnetlink_cthelper_DEPENDENCIES) $(EXTRA_nfnetlink_cthelper_DEPENDENCIES) 
+	@rm -f nfnetlink_cthelper$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_cthelper_OBJECTS) $(nfnetlink_cthelper_LDADD) $(LIBS)
+
+nfnetlink_ctnetlink$(EXEEXT): $(nfnetlink_ctnetlink_OBJECTS) $(nfnetlink_ctnetlink_DEPENDENCIES) $(EXTRA_nfnetlink_ctnetlink_DEPENDENCIES) 
+	@rm -f nfnetlink_ctnetlink$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_ctnetlink_OBJECTS) $(nfnetlink_ctnetlink_LDADD) $(LIBS)
+
+nfnetlink_ctnetlink_exp$(EXEEXT): $(nfnetlink_ctnetlink_exp_OBJECTS) $(nfnetlink_ctnetlink_exp_DEPENDENCIES) $(EXTRA_nfnetlink_ctnetlink_exp_DEPENDENCIES) 
+	@rm -f nfnetlink_ctnetlink_exp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_ctnetlink_exp_OBJECTS) $(nfnetlink_ctnetlink_exp_LDADD) $(LIBS)
+
+nfnetlink_cttimeout$(EXEEXT): $(nfnetlink_cttimeout_OBJECTS) $(nfnetlink_cttimeout_DEPENDENCIES) $(EXTRA_nfnetlink_cttimeout_DEPENDENCIES) 
+	@rm -f nfnetlink_cttimeout$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_cttimeout_OBJECTS) $(nfnetlink_cttimeout_LDADD) $(LIBS)
+
+nfnetlink_ipset$(EXEEXT): $(nfnetlink_ipset_OBJECTS) $(nfnetlink_ipset_DEPENDENCIES) $(EXTRA_nfnetlink_ipset_DEPENDENCIES) 
+	@rm -f nfnetlink_ipset$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_ipset_OBJECTS) $(nfnetlink_ipset_LDADD) $(LIBS)
+
+nfnetlink_nft_compat$(EXEEXT): $(nfnetlink_nft_compat_OBJECTS) $(nfnetlink_nft_compat_DEPENDENCIES) $(EXTRA_nfnetlink_nft_compat_DEPENDENCIES) 
+	@rm -f nfnetlink_nft_compat$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_nft_compat_OBJECTS) $(nfnetlink_nft_compat_LDADD) $(LIBS)
+
+nfnetlink_nftables$(EXEEXT): $(nfnetlink_nftables_OBJECTS) $(nfnetlink_nftables_DEPENDENCIES) $(EXTRA_nfnetlink_nftables_DEPENDENCIES) 
+	@rm -f nfnetlink_nftables$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_nftables_OBJECTS) $(nfnetlink_nftables_LDADD) $(LIBS)
+
+nfnetlink_osf$(EXEEXT): $(nfnetlink_osf_OBJECTS) $(nfnetlink_osf_DEPENDENCIES) $(EXTRA_nfnetlink_osf_DEPENDENCIES) 
+	@rm -f nfnetlink_osf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_osf_OBJECTS) $(nfnetlink_osf_LDADD) $(LIBS)
+
+nfnetlink_queue$(EXEEXT): $(nfnetlink_queue_OBJECTS) $(nfnetlink_queue_DEPENDENCIES) $(EXTRA_nfnetlink_queue_DEPENDENCIES) 
+	@rm -f nfnetlink_queue$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_queue_OBJECTS) $(nfnetlink_queue_LDADD) $(LIBS)
+
+nfnetlink_ulog$(EXEEXT): $(nfnetlink_ulog_OBJECTS) $(nfnetlink_ulog_DEPENDENCIES) $(EXTRA_nfnetlink_ulog_DEPENDENCIES) 
+	@rm -f nfnetlink_ulog$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nfnetlink_ulog_OBJECTS) $(nfnetlink_ulog_LDADD) $(LIBS)
+
 nlattr$(EXEEXT): $(nlattr_OBJECTS) $(nlattr_DEPENDENCIES) $(EXTRA_nlattr_DEPENDENCIES) 
 	@rm -f nlattr$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_OBJECTS) $(nlattr_LDADD) $(LIBS)
@@ -4508,6 +4712,14 @@
 	@rm -f nlattr_inet_diag_req_v2$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_inet_diag_req_v2_OBJECTS) $(nlattr_inet_diag_req_v2_LDADD) $(LIBS)
 
+nlattr_mdba_mdb_entry$(EXEEXT): $(nlattr_mdba_mdb_entry_OBJECTS) $(nlattr_mdba_mdb_entry_DEPENDENCIES) $(EXTRA_nlattr_mdba_mdb_entry_DEPENDENCIES) 
+	@rm -f nlattr_mdba_mdb_entry$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_mdba_mdb_entry_OBJECTS) $(nlattr_mdba_mdb_entry_LDADD) $(LIBS)
+
+nlattr_mdba_router_port$(EXEEXT): $(nlattr_mdba_router_port_OBJECTS) $(nlattr_mdba_router_port_DEPENDENCIES) $(EXTRA_nlattr_mdba_router_port_DEPENDENCIES) 
+	@rm -f nlattr_mdba_router_port$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_mdba_router_port_OBJECTS) $(nlattr_mdba_router_port_LDADD) $(LIBS)
+
 nlattr_ndmsg$(EXEEXT): $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_DEPENDENCIES) $(EXTRA_nlattr_ndmsg_DEPENDENCIES) 
 	@rm -f nlattr_ndmsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_ndmsg_OBJECTS) $(nlattr_ndmsg_LDADD) $(LIBS)
@@ -4544,6 +4756,14 @@
 	@rm -f nlattr_smc_diag_msg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_smc_diag_msg_OBJECTS) $(nlattr_smc_diag_msg_LDADD) $(LIBS)
 
+nlattr_tc_stats$(EXEEXT): $(nlattr_tc_stats_OBJECTS) $(nlattr_tc_stats_DEPENDENCIES) $(EXTRA_nlattr_tc_stats_DEPENDENCIES) 
+	@rm -f nlattr_tc_stats$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tc_stats_OBJECTS) $(nlattr_tc_stats_LDADD) $(LIBS)
+
+nlattr_tca_stab$(EXEEXT): $(nlattr_tca_stab_OBJECTS) $(nlattr_tca_stab_DEPENDENCIES) $(EXTRA_nlattr_tca_stab_DEPENDENCIES) 
+	@rm -f nlattr_tca_stab$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nlattr_tca_stab_OBJECTS) $(nlattr_tca_stab_LDADD) $(LIBS)
+
 nlattr_tcamsg$(EXEEXT): $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_DEPENDENCIES) $(EXTRA_nlattr_tcamsg_DEPENDENCIES) 
 	@rm -f nlattr_tcamsg$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(nlattr_tcamsg_OBJECTS) $(nlattr_tcamsg_LDADD) $(LIBS)
@@ -4948,6 +5168,10 @@
 	@rm -f seccomp-strict$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(seccomp_strict_OBJECTS) $(seccomp_strict_LDADD) $(LIBS)
 
+seccomp_get_action_avail$(EXEEXT): $(seccomp_get_action_avail_OBJECTS) $(seccomp_get_action_avail_DEPENDENCIES) $(EXTRA_seccomp_get_action_avail_DEPENDENCIES) 
+	@rm -f seccomp_get_action_avail$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(seccomp_get_action_avail_OBJECTS) $(seccomp_get_action_avail_LDADD) $(LIBS)
+
 select$(EXEEXT): $(select_OBJECTS) $(select_DEPENDENCIES) $(EXTRA_select_DEPENDENCIES) 
 	@rm -f select$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(select_OBJECTS) $(select_LDADD) $(LIBS)
@@ -4972,6 +5196,14 @@
 	@rm -f set_ptracer_any$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(set_ptracer_any_OBJECTS) $(set_ptracer_any_LDADD) $(LIBS)
 
+set_sigblock$(EXEEXT): $(set_sigblock_OBJECTS) $(set_sigblock_DEPENDENCIES) $(EXTRA_set_sigblock_DEPENDENCIES) 
+	@rm -f set_sigblock$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(set_sigblock_OBJECTS) $(set_sigblock_LDADD) $(LIBS)
+
+set_sigign$(EXEEXT): $(set_sigign_OBJECTS) $(set_sigign_DEPENDENCIES) $(EXTRA_set_sigign_DEPENDENCIES) 
+	@rm -f set_sigign$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(set_sigign_OBJECTS) $(set_sigign_LDADD) $(LIBS)
+
 setdomainname$(EXEEXT): $(setdomainname_OBJECTS) $(setdomainname_DEPENDENCIES) $(EXTRA_setdomainname_DEPENDENCIES) 
 	@rm -f setdomainname$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(setdomainname_OBJECTS) $(setdomainname_LDADD) $(LIBS)
@@ -5411,6 +5643,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btrfs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/caps-abbrev.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/caps.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_sigblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_sigign.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmod.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown32.Po@am__quote@
@@ -5535,6 +5769,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_sem.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc_shm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_linux_mips_n64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcmp-y.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcmp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_file_load.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kexec_load.Po@am__quote@
@@ -5571,6 +5806,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-tprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linkat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list_sigaction_signum.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/llseek.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lookup_dcookie.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lseek.Po@am__quote@
@@ -5627,6 +5863,17 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_unix_diag.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink_xfrm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newfstatat-newfstatat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_acct.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_cthelper.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_ctnetlink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_ctnetlink_exp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_cttimeout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_ipset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_nft_compat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_nftables.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_osf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_queue.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfnetlink_ulog.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_br_port_msg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_crypto_user_alg.Po@am__quote@
@@ -5641,6 +5888,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_msg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_compat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_inet_diag_req_v2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_mdba_mdb_entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_mdba_router_port.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_ndtmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_netconfmsg.Po@am__quote@
@@ -5650,6 +5899,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtgenmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_rtmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_smc_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tc_stats.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tca_stab.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcamsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcmsg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_unix_diag_msg.Po@am__quote@
@@ -5751,12 +6002,15 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp-filter-v.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp-filter.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp-strict.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp_get_action_avail.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/semop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendfile.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendfile64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_mempolicy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_ptracer_any.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_sigblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_sigign.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setdomainname.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setfsgid.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setfsgid32.Po@am__quote@
@@ -7194,6 +7448,9 @@
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/kcmp-y.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kexec_file_load.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7353,6 +7610,39 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nfnetlink_acct.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_cthelper.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ctnetlink.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ctnetlink_exp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_cttimeout.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ipset.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_nft_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_nftables.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_osf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_queue.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ulog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7392,6 +7682,12 @@
 $(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_mdba_mdb_entry.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_mdba_router_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7419,6 +7715,12 @@
 $(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_tc_stats.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tca_stab.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -7641,6 +7943,9 @@
 $(srcdir)/seccomp-filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/seccomp_get_action_avail.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/select.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
diff --git a/tests-mx32/check_sigblock.c b/tests-mx32/check_sigblock.c
new file mode 100644
index 0000000..5637804
--- /dev/null
+++ b/tests-mx32/check_sigblock.c
@@ -0,0 +1,49 @@
+/*
+ * Check that the specified signal number is blocked/unblocked.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <signal.h>
+#include <stdlib.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac != 3)
+		error_msg_and_fail("usage: check_sigblock 0|1 signum");
+
+	const int block = !!atoi(av[1]);
+	const int signum = atoi(av[2]);
+	sigset_t mask;
+
+	sigemptyset(&mask);
+	if (sigprocmask(SIG_SETMASK, NULL, &mask))
+		perror_msg_and_fail("sigprocmask");
+
+	return block ^ sigismember(&mask, signum);
+}
diff --git a/tests-mx32/check_sigign.c b/tests-mx32/check_sigign.c
new file mode 100644
index 0000000..bace317
--- /dev/null
+++ b/tests-mx32/check_sigign.c
@@ -0,0 +1,49 @@
+/*
+ * Check that the signal handler for the specified signal number is set
+ * to SIG_IGN/SIG_DFL.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <signal.h>
+#include <stdlib.h>
+
+int
+main(int ac, char **av)
+{
+	if (ac != 3)
+		error_msg_and_fail("usage: check_sigign 0|1 signum");
+
+	const int ign = !!atoi(av[1]);
+	const int signum = atoi(av[2]);
+	struct sigaction act;
+
+	if (sigaction(signum, NULL, &act))
+		perror_msg_and_fail("sigaction: %s", av[2]);
+
+	return ign ^ (act.sa_handler == SIG_IGN);
+}
diff --git a/tests-mx32/futex.c b/tests-mx32/futex.c
index b75ab33..e1dbcb7 100644
--- a/tests-mx32/futex.c
+++ b/tests-mx32/futex.c
@@ -66,6 +66,7 @@
 # define CHECK_FUTEX_GENERIC(uaddr, op, val, timeout, uaddr2, val3, check, \
 	enosys) \
 	do { \
+		errno = 0; \
 		rc = syscall(__NR_futex, (uaddr), (op), (val), (timeout), \
 			(uaddr2), (val3)); \
 		/* It is here due to EPERM on WAKE_OP on AArch64 */ \
@@ -496,8 +497,16 @@
 	static const struct {
 		uint32_t val;
 		const char *str;
+
+		/*
+		 * Peculiar semantics:
+		 *  * err == 0 and err2 != 0 => expect both either the absence
+		 *    of error or presence of err2
+		 *  * err != 0 and err2 == 0 => expect err only, no success
+		 *    expected.
+		 */
 		int err;
-		const char *errstr;
+		int err2;
 	} wake_ops[] = {
 		{ 0x00000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
 		{ 0x00fff000, "FUTEX_OP_SET<<28|0xfff<<12|FUTEX_OP_CMP_EQ<<24|"
@@ -511,13 +520,13 @@
 		{ 0x30000000, "FUTEX_OP_ANDN<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
 		{ 0x40000000, "FUTEX_OP_XOR<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
 		{ 0x50000000, "0x5<<28 /* FUTEX_OP_??? */|0<<12|"
-			"FUTEX_OP_CMP_EQ<<24|0", ENOSYS, "ENOSYS" },
+			"FUTEX_OP_CMP_EQ<<24|0", ENOSYS },
 		{ 0x70000000, "0x7<<28 /* FUTEX_OP_??? */|0<<12|"
-			"FUTEX_OP_CMP_EQ<<24|0", ENOSYS, "ENOSYS" },
+			"FUTEX_OP_CMP_EQ<<24|0", ENOSYS },
 		{ 0x80000000, "FUTEX_OP_OPARG_SHIFT<<28|FUTEX_OP_SET<<28|0<<12|"
 			"FUTEX_OP_CMP_EQ<<24|0" },
 		{ 0xa0caffee, "FUTEX_OP_OPARG_SHIFT<<28|FUTEX_OP_OR<<28|"
-			"0xcaf<<12|FUTEX_OP_CMP_EQ<<24|0xfee" },
+			"0xcaf<<12|FUTEX_OP_CMP_EQ<<24|0xfee", 0, EINVAL },
 		{ 0x01000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_NE<<24|0" },
 		{ 0x01234567, "FUTEX_OP_SET<<28|0x234<<12|FUTEX_OP_CMP_NE<<24|"
 			"0x567" },
@@ -526,27 +535,38 @@
 		{ 0x04000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_GT<<24|0" },
 		{ 0x05000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_GE<<24|0" },
 		{ 0x06000000, "FUTEX_OP_SET<<28|0<<12|"
-			"0x6<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+			"0x6<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS },
 		{ 0x07000000, "FUTEX_OP_SET<<28|0<<12|"
-			"0x7<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+			"0x7<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS },
 		{ 0x08000000, "FUTEX_OP_SET<<28|0<<12|"
-			"0x8<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+			"0x8<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS },
 		{ 0x0f000000, "FUTEX_OP_SET<<28|0<<12|"
-			"0xf<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+			"0xf<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS },
 		{ 0xbadfaced, "FUTEX_OP_OPARG_SHIFT<<28|FUTEX_OP_ANDN<<28|"
 			"0xdfa<<12|0xa<<24 /* FUTEX_OP_CMP_??? */|0xced",
-			ENOSYS, "ENOSYS" },
+			ENOSYS, EINVAL },
 		{ 0xffffffff, "FUTEX_OP_OPARG_SHIFT<<28|"
 			"0x7<<28 /* FUTEX_OP_??? */|0xfff<<12|"
 			"0xf<<24 /* FUTEX_OP_CMP_??? */|0xfff",
-			ENOSYS, "ENOSYS" },
+			ENOSYS, EINVAL },
 	};
 
 	for (i = 0; i < ARRAY_SIZE(wake_ops); i++) {
 		for (j = 0; j < 2; j++) {
 			CHECK_FUTEX_ENOSYS(uaddr,
 				j ? FUTEX_WAKE_OP_PRIVATE : FUTEX_WAKE_OP,
-				VAL, i, uaddr2, wake_ops[i].val, (rc == 0));
+				VAL, i, uaddr2, wake_ops[i].val,
+				/*
+				 * Either one of errs is 0 or rc == 0 is not
+				 * allowed.
+				 */
+				((!wake_ops[i].err || !wake_ops[i].err2 ||
+					(rc != 0)) &&
+				((!wake_ops[i].err && (rc == 0)) ||
+				(wake_ops[i].err  && (rc == -1) &&
+					(errno == wake_ops[i].err)) ||
+				(wake_ops[i].err2 && (rc == -1) &&
+					(errno == wake_ops[i].err2)))));
 			printf("futex(%p, FUTEX_WAKE_OP%s, %u, %u, %p, %s)"
 			       " = %s\n", uaddr, j ? "_PRIVATE" : "", VAL_PR,
 			       i, uaddr2, wake_ops[i].str, sprintrc(rc));
diff --git a/tests-mx32/gen_tests.am b/tests-mx32/gen_tests.am
index 583a0ae..71e0013 100644
--- a/tests-mx32/gen_tests.am
+++ b/tests-mx32/gen_tests.am
@@ -1,5 +1,5 @@
 # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
-GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test group_req.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_crypto.gen.test netlink_generic.gen.test netlink_kobject_uevent.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test nlattr_inet_diag_msg.gen.test nlattr_inet_diag_req_compat.gen.test nlattr_inet_diag_req_v2.gen.test nlattr_ndmsg.gen.test nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test printpath-umovestr.gen.test printpath-umovestr-peekdata.gen.test printpath-umovestr-undumpable.gen.test printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test printstrn-umoven-undumpable.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
+GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test group_req.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kcmp-y.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_crypto.gen.test netlink_generic.gen.test netlink_kobject_uevent.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test 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 oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test printpath-umovestr.gen.test printpath-umovestr-peekdata.gen.test printpath-umovestr-undumpable.gen.test printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test printstrn-umoven-undumpable.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test seccomp_get_action_avail.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
 
 $(srcdir)/_newselect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
@@ -358,6 +358,9 @@
 $(srcdir)/kcmp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/kcmp-y.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/kexec_file_load.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -517,6 +520,39 @@
 $(srcdir)/nlattr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nfnetlink_acct.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_cthelper.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ctnetlink.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ctnetlink_exp.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_cttimeout.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ipset.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_nft_compat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_nftables.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_osf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_queue.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nfnetlink_ulog.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_crypto_user_alg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -556,6 +592,12 @@
 $(srcdir)/nlattr_inet_diag_req_v2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_mdba_mdb_entry.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_mdba_router_port.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_ndmsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -583,6 +625,12 @@
 $(srcdir)/nlattr_smc_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/nlattr_tc_stats.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
+$(srcdir)/nlattr_tca_stab.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/nlattr_tcamsg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
@@ -805,6 +853,9 @@
 $(srcdir)/seccomp-filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
 	$(AM_V_GEN) $^ $@
 
+$(srcdir)/seccomp_get_action_avail.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+	$(AM_V_GEN) $^ $@
+
 $(srcdir)/select.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 8592e28..091bbe5 100644
--- a/tests-mx32/gen_tests.in
+++ b/tests-mx32/gen_tests.in
@@ -143,7 +143,8 @@
 ipc_msg	+ipc.sh
 ipc_sem	+ipc.sh
 ipc_shm	+ipc.sh
-kcmp	-a27
+kcmp	-a22
+kcmp-y	-a22 -y -e trace=kcmp
 kexec_file_load	-s9
 kexec_load	-s9
 keyctl	-a31 -s10
@@ -197,6 +198,17 @@
 netlink_xfrm	+netlink_sock_diag.test
 newfstatat	-a32 -v -P stat.sample -P /dev/full
 nlattr		+netlink_sock_diag.test
+nfnetlink_acct			+netlink_sock_diag.test
+nfnetlink_cthelper		+netlink_sock_diag.test
+nfnetlink_ctnetlink		+netlink_sock_diag.test
+nfnetlink_ctnetlink_exp		+netlink_sock_diag.test
+nfnetlink_cttimeout		+netlink_sock_diag.test
+nfnetlink_ipset			+netlink_sock_diag.test
+nfnetlink_nft_compat		+netlink_sock_diag.test
+nfnetlink_nftables		+netlink_sock_diag.test
+nfnetlink_osf			+netlink_sock_diag.test
+nfnetlink_queue			+netlink_sock_diag.test
+nfnetlink_ulog			+netlink_sock_diag.test
 nlattr_crypto_user_alg		+netlink_sock_diag.test
 nlattr_br_port_msg		+netlink_sock_diag.test
 nlattr_dcbmsg			+netlink_sock_diag.test
@@ -210,6 +222,8 @@
 nlattr_inet_diag_msg		+netlink_sock_diag.test
 nlattr_inet_diag_req_compat	+netlink_sock_diag.test
 nlattr_inet_diag_req_v2		+netlink_sock_diag.test
+nlattr_mdba_mdb_entry		+netlink_sock_diag.test
+nlattr_mdba_router_port		+netlink_sock_diag.test
 nlattr_ndmsg			+netlink_sock_diag.test
 nlattr_ndtmsg			+netlink_sock_diag.test
 nlattr_netconfmsg		+netlink_sock_diag.test
@@ -219,6 +233,8 @@
 nlattr_rtgenmsg			+netlink_sock_diag.test
 nlattr_rtmsg			+netlink_sock_diag.test
 nlattr_smc_diag_msg		+netlink_sock_diag.test
+nlattr_tc_stats			+netlink_sock_diag.test
+nlattr_tca_stab			+netlink_sock_diag.test
 nlattr_tcamsg			+netlink_sock_diag.test
 nlattr_tcmsg			+netlink_sock_diag.test
 nlattr_unix_diag_msg		+netlink_sock_diag.test
@@ -293,6 +309,7 @@
 sched_yield	-a14
 seccomp-filter	-e trace=seccomp
 seccomp-filter-v	-v -e trace=seccomp
+seccomp_get_action_avail	-e trace=seccomp
 select	-a36
 semop	-a32 -e trace=semop,semtimedop
 sendfile	-a27
diff --git a/tests-mx32/ioctl_dm.c b/tests-mx32/ioctl_dm.c
index 2f77e04..1e831df 100644
--- a/tests-mx32/ioctl_dm.c
+++ b/tests-mx32/ioctl_dm.c
@@ -54,6 +54,10 @@
 # define ALIGNED_OFFSET(t_, m_) \
 	ALIGNED_SIZE(offsetof(t_, m_), t_)
 
+#  ifndef DM_DEV_ARM_POLL
+#   define DM_DEV_ARM_POLL     _IOWR(DM_IOCTL, 0x10, struct dm_ioctl)
+#  endif
+
 static const char str129[] = STR32 STR32 STR32 STR32 "6";
 
 static const __u64 dts_sector_base = (__u64) 0xdeadca75facef157ULL;
@@ -182,6 +186,7 @@
 		{ ARG_STR(DM_TABLE_CLEAR),   false },
 		{ ARG_STR(DM_TABLE_DEPS),    true  },
 		{ ARG_STR(DM_TABLE_STATUS),  true  },
+		{ ARG_STR(DM_DEV_ARM_POLL),  false },
 	};
 
 	struct dm_ioctl *unaligned_dm_arg =
diff --git a/tests-mx32/ioctl_loop.c b/tests-mx32/ioctl_loop.c
index 3411a4d..56ebd9e 100644
--- a/tests-mx32/ioctl_loop.c
+++ b/tests-mx32/ioctl_loop.c
@@ -188,11 +188,11 @@
 	       _IOC_SIZE((unsigned int) unknown_loop_cmd),
 	       (unsigned long) magic);
 
-	ioctl(-1, LOOP_SET_DIRECT_IO + 1, magic);
+	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_DIRECT_IO + 1),
-	       _IOC_SIZE(LOOP_SET_DIRECT_IO + 1),
+	       _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);
@@ -303,6 +303,11 @@
 	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);
+	printf("ioctl(-1, LOOP_SET_BLOCK_SIZE, %lu) = -1 EBADF (%m)\n",
+	       (unsigned long) magic);
+
 	/* LOOP_CTL_ADD */
 	ioctl(-1, LOOP_CTL_ADD, magic);
 	printf("ioctl(-1, LOOP_CTL_ADD, %d) = -1 EBADF (%m)\n",
diff --git a/tests-mx32/kcmp-y.c b/tests-mx32/kcmp-y.c
new file mode 100644
index 0000000..02ad90e
--- /dev/null
+++ b/tests-mx32/kcmp-y.c
@@ -0,0 +1,3 @@
+#define VERBOSE_FD 1
+
+#include "kcmp.c"
diff --git a/tests-mx32/kcmp-y.gen.test b/tests-mx32/kcmp-y.gen.test
new file mode 100755
index 0000000..065db9d
--- /dev/null
+++ b/tests-mx32/kcmp-y.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kcmp-y -a22 -y -e trace=kcmp); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a22 -y -e trace=kcmp
diff --git a/tests-mx32/kcmp.c b/tests-mx32/kcmp.c
index cb497c9..60cd300 100644
--- a/tests-mx32/kcmp.c
+++ b/tests-mx32/kcmp.c
@@ -1,7 +1,7 @@
 /*
  * Check decoding of kcmp syscall.
  *
- * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2017 Eugene Syromyatnikov <evgsyr@gmail.com>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -34,15 +34,67 @@
 
 #ifdef __NR_kcmp
 
+# include <fcntl.h>
+# include <stdarg.h>
+# include <stdint.h>
 # include <stdio.h>
+# include <string.h>
 # include <unistd.h>
 
-# define KCMP_FILE     0
-# define KCMP_SYSVSEM  6
+# ifndef VERBOSE_FD
+#  define VERBOSE_FD 0
+# endif
+
+/*
+ * We prefer to use system headers in order to catch some possible deviations in
+ * system's headers from our perception of reality, but happy to include our own
+ * definitions as well.
+ */
+# ifdef HAVE_LINUX_KCMP_H
+#  include <linux/kcmp.h>
+# else
+#  define KCMP_FILE	0
+#  define KCMP_VM	1
+#  define KCMP_FILES	2
+#  define KCMP_FS	3
+#  define KCMP_SIGHAND	4
+#  define KCMP_IO	5
+#  define KCMP_SYSVSEM	6
+# endif
+
+/* All other kcmp types have been added atomically */
+# define KCMP_EPOLL_TFD	7
+
+# ifndef HAVE_STRUCT_KCMP_EPOLL_SLOT
+struct kcmp_epoll_slot {
+	uint32_t efd;
+	uint32_t tfd;
+	uint32_t toff;
+};
+# endif
+
+static const kernel_ulong_t kcmp_max_type = KCMP_EPOLL_TFD;
+
+static const char null_path[] = "/dev/null";
+static const char zero_path[] = "/dev/zero";
+
+# define NULL_FD 23
+# define ZERO_FD 42
 
 static void
+printpidfd(const char *prefix, pid_t pid, unsigned fd)
+{
+	printf("%s%d", prefix, fd);
+}
+
+/*
+ * Last argument is optional and is used as follows:
+ *  * When type is KCMP_EPOLL_TFD, it signalises whether idx2 is a valid
+ *    pointer.
+ */
+static void
 do_kcmp(kernel_ulong_t pid1, kernel_ulong_t pid2, kernel_ulong_t type,
-	const char *type_str, kernel_ulong_t idx1, kernel_ulong_t idx2)
+	const char *type_str, kernel_ulong_t idx1, kernel_ulong_t idx2, ...)
 {
 	long rc;
 	const char *errstr;
@@ -57,11 +109,37 @@
 	else
 		printf("%#x /* KCMP_??? */", (int) type);
 
-	if (type == KCMP_FILE)
-		printf(", %u, %u", (unsigned) idx1, (unsigned) idx2);
-	else if (type > KCMP_SYSVSEM)
+	if (type == KCMP_FILE) {
+		printpidfd(", ", pid1, idx1);
+		printpidfd(", ", pid2, idx2);
+	} else if (type == KCMP_EPOLL_TFD) {
+		va_list ap;
+		int valid_ptr;
+
+		va_start(ap, idx2);
+		valid_ptr = va_arg(ap, int);
+		va_end(ap);
+
+		printpidfd(", ", pid1, idx1);
+		printf(", ");
+
+		if (valid_ptr) {
+			struct kcmp_epoll_slot *slot =
+				(struct kcmp_epoll_slot *) (uintptr_t) idx2;
+
+			printpidfd("{efd=", pid2, slot->efd);
+			printpidfd(", tfd=", pid2, slot->tfd);
+			printf(", toff=%llu}", (unsigned long long) slot->toff);
+		} else {
+			if (idx2)
+				printf("%#llx", (unsigned long long) idx2);
+			else
+				printf("NULL");
+		}
+	} else if (type > kcmp_max_type) {
 		printf(", %#llx, %#llx",
 		       (unsigned long long) idx1, (unsigned long long) idx2);
+	}
 
 	printf(") = %s\n", errstr);
 }
@@ -79,18 +157,71 @@
 		(kernel_ulong_t) 0xdec0ded3dec0ded4ULL;
 	static const kernel_ulong_t bogus_idx2 =
 		(kernel_ulong_t) 0xba5e1e55deadc0deULL;
+	static const struct kcmp_epoll_slot slot_data[] = {
+		{ 0xdeadc0de, 0xfacef157, 0xbadc0ded },
+		{ NULL_FD, ZERO_FD, 0 },
+		{ 0, 0, 0 },
+	};
+	static kernel_ulong_t ptr_check =
+		F8ILL_KULONG_SUPPORTED ? F8ILL_KULONG_MASK : 0;
+
+	int fd;
+	unsigned i;
+	struct kcmp_epoll_slot *slot = tail_alloc(sizeof(*slot));
+
+	/* Open some files to test printpidfd */
+	fd = open(null_path, O_RDONLY);
+	if (fd < 0)
+		perror_msg_and_fail("open(\"%s\")", null_path);
+	if (fd != NULL_FD) {
+		if (dup2(fd, NULL_FD) < 0)
+			perror_msg_and_fail("dup2(fd, NULL_FD)");
+		close(fd);
+	}
+
+	fd = open(zero_path, O_RDONLY);
+	if (fd < 0)
+		perror_msg_and_fail("open(\"%s\")", zero_path);
+	if (fd != ZERO_FD) {
+		if (dup2(fd, ZERO_FD) < 0)
+			perror_msg_and_fail("dup2(fd, ZERO_FD)");
+		close(fd);
+	}
+
+	close(0);
 
 	/* Invalid values */
 	do_kcmp(bogus_pid1, bogus_pid2, bogus_type, NULL, bogus_idx1,
 		bogus_idx2);
-	do_kcmp(0, 0, KCMP_SYSVSEM + 1, NULL, 0, 0);
+	do_kcmp(F8ILL_KULONG_MASK, F8ILL_KULONG_MASK, kcmp_max_type + 1, NULL,
+		0, 0);
 
 	/* KCMP_FILE is the only type which has additional args */
 	do_kcmp(3141592653U, 2718281828U, ARG_STR(KCMP_FILE), bogus_idx1,
 		bogus_idx2);
-	/* Some type without additional args */
+	do_kcmp(-1, -1, ARG_STR(KCMP_FILE), NULL_FD, ZERO_FD);
+
+	/* Types without additional args */
+	do_kcmp(-1, -1, ARG_STR(KCMP_VM), bogus_idx1, bogus_idx2);
+	do_kcmp(-1, -1, ARG_STR(KCMP_FILES), bogus_idx1, bogus_idx2);
+	do_kcmp(-1, -1, ARG_STR(KCMP_FS), bogus_idx1, bogus_idx2);
+	do_kcmp(-1, -1, ARG_STR(KCMP_SIGHAND), bogus_idx1, bogus_idx2);
+	do_kcmp(-1, -1, ARG_STR(KCMP_IO), bogus_idx1, bogus_idx2);
 	do_kcmp(-1, -1, ARG_STR(KCMP_SYSVSEM), bogus_idx1, bogus_idx2);
 
+	/* KCMP_EPOLL_TFD checks */
+	do_kcmp(-1, -1, ARG_STR(KCMP_EPOLL_TFD),
+		F8ILL_KULONG_MASK | 2718281828U, ptr_check, 0);
+	do_kcmp(-1, -1, ARG_STR(KCMP_EPOLL_TFD),
+		3141592653U, (uintptr_t) slot + 1, 0);
+
+	for (i = 0; i < ARRAY_SIZE(slot_data); i++) {
+		memcpy(slot, slot_data + i, sizeof(*slot));
+
+		do_kcmp(getpid(), getppid(), ARG_STR(KCMP_EPOLL_TFD), NULL_FD,
+			(uintptr_t) slot, 1);
+	}
+
 	puts("+++ exited with 0 +++");
 
 	return 0;
diff --git a/tests-mx32/kcmp.gen.test b/tests-mx32/kcmp.gen.test
index da79d7c..c073a39 100755
--- a/tests-mx32/kcmp.gen.test
+++ b/tests-mx32/kcmp.gen.test
@@ -1,4 +1,4 @@
 #!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kcmp -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kcmp -a22); do not edit.
 . "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a22
diff --git a/tests-mx32/list_sigaction_signum.c b/tests-mx32/list_sigaction_signum.c
new file mode 100644
index 0000000..13a78c6
--- /dev/null
+++ b/tests-mx32/list_sigaction_signum.c
@@ -0,0 +1,57 @@
+/*
+ * List signal numbers that are valid arguments for sigaction syscall.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <signal.h>
+#include <stdio.h>
+
+int
+main(void)
+{
+	unsigned int i;
+
+	for (i = 1; i < 32; ++i) {
+		static const struct sigaction ign = { .sa_handler = SIG_IGN };
+		static const struct sigaction dfl = { .sa_handler = SIG_DFL };
+		struct sigaction act;
+
+		if (sigaction(i, &ign, NULL) ||
+		    sigaction(i, NULL, &act) ||
+		    ign.sa_handler != act.sa_handler ||
+		    sigaction(i, &dfl, NULL) ||
+		    sigaction(i, NULL, &act) ||
+		    dfl.sa_handler != act.sa_handler)
+			continue;
+
+		printf("%u\n", i);
+	}
+
+	return 0;
+}
diff --git a/tests-mx32/membarrier.c b/tests-mx32/membarrier.c
index 330893b..73dd3b0 100644
--- a/tests-mx32/membarrier.c
+++ b/tests-mx32/membarrier.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,10 +44,28 @@
 	printf("membarrier(0x3 /* MEMBARRIER_CMD_??? */, 255) = %s\n",
 	       sprintrc(-1));
 	if (saved_errno != ENOSYS) {
-		/* the test needs to be updated? */
-		assert(syscall(__NR_membarrier, 0, 0) == 1);
-		puts("membarrier(MEMBARRIER_CMD_QUERY, 0)"
-		     " = 0x1 (MEMBARRIER_CMD_SHARED)");
+		const char *text;
+		int rc = syscall(__NR_membarrier, 0, 0);
+
+		switch (rc) {
+		case 1:
+			text = "MEMBARRIER_CMD_SHARED";
+			break;
+		case 1|8:
+			text = "MEMBARRIER_CMD_SHARED|"
+			       "MEMBARRIER_CMD_PRIVATE_EXPEDITED";
+			break;
+		case 1|8|16:
+			text = "MEMBARRIER_CMD_SHARED|"
+			       "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
+			       "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED";
+			break;
+		default:
+			error_msg_and_fail("membarrier returned %#x, does"
+					   " the test have to be updated?", rc);
+		}
+		printf("membarrier(MEMBARRIER_CMD_QUERY, 0) = %#x (%s)\n",
+		       rc, text);
 	}
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-mx32/memfd_create.c b/tests-mx32/memfd_create.c
index 480fd17..4559b42 100644
--- a/tests-mx32/memfd_create.c
+++ b/tests-mx32/memfd_create.c
@@ -11,10 +11,11 @@
 main(void)
 {
 	static const char text[] = "strace";
-	int rc = syscall(__NR_memfd_create, text, 7);
+	int rc = syscall(__NR_memfd_create, text, 0xf);
 
-	printf("memfd_create(\"%s\", %s) = %d %s (%m)\n",
-	       text, "MFD_CLOEXEC|MFD_ALLOW_SEALING|0x4", rc, errno2name());
+	printf("memfd_create(\"%s\", %s) = %s\n",
+	       text, "MFD_CLOEXEC|MFD_ALLOW_SEALING|MFD_HUGETLB|0x8",
+	       sprintrc(rc));
 
 	puts("+++ exited with 0 +++");
 	return 0;
diff --git a/tests-mx32/netlink_crypto.c b/tests-mx32/netlink_crypto.c
index deb1644..d15c17c 100644
--- a/tests-mx32/netlink_crypto.c
+++ b/tests-mx32/netlink_crypto.c
@@ -78,9 +78,17 @@
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 
 	nlh.nlmsg_type = CRYPTO_MSG_DELALG;
-	nlh.nlmsg_flags = NLM_F_REPLACE;
+	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_NONREC;
 	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_DELALG"
+	       ", flags=NLM_F_ECHO|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = CRYPTO_MSG_UPDATEALG;
+	nlh.nlmsg_flags = NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=CRYPTO_MSG_UPDATEALG"
 	       ", flags=%#x /* NLM_F_??? */, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh.nlmsg_len, NLM_F_REPLACE,
diff --git a/tests-mx32/netlink_netfilter.c b/tests-mx32/netlink_netfilter.c
index 2907c26..db2622e 100644
--- a/tests-mx32/netlink_netfilter.c
+++ b/tests-mx32/netlink_netfilter.c
@@ -52,19 +52,19 @@
 	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
-
-	nlh.nlmsg_type = (NFNL_SUBSYS_CTNETLINK << 8) | NFNL_MSG_BATCH_BEGIN;
-	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, {len=%u, type=NFNL_SUBSYS_CTNETLINK<<8|%#x"
-	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
-	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, nlh.nlmsg_len, NFNL_MSG_BATCH_BEGIN,
-	       (unsigned) sizeof(nlh), sprintrc(rc));
 # endif
 
-	nlh.nlmsg_type = (NFNL_SUBSYS_CTNETLINK << 8);
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | 0xff;
 	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
-	printf("sendto(%d, {len=%u, type=NFNL_SUBSYS_CTNETLINK<<8|0"
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|0xff /* IPCTNL_MSG_CT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = 0xffff;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=0xff /* NFNL_SUBSYS_??? */<<8|0xff"
 	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
diff --git a/tests-mx32/netlink_route.c b/tests-mx32/netlink_route.c
index 6af3b13..a1c7d1f 100644
--- a/tests-mx32/netlink_route.c
+++ b/tests-mx32/netlink_route.c
@@ -132,13 +132,12 @@
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 
 	nlh.nlmsg_type = RTM_DELLINK;
-	nlh.nlmsg_flags = NLM_F_REPLACE;
+	nlh.nlmsg_flags = NLM_F_NONREC;
 	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {len=%u, type=RTM_DELLINK"
-	       ", flags=%#x /* NLM_F_??? */, seq=0, pid=0}"
+	       ", flags=NLM_F_NONREC, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-	       fd, nlh.nlmsg_len, NLM_F_REPLACE,
-	       (unsigned) sizeof(nlh), sprintrc(rc));
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 }
 
 static void
diff --git a/tests-mx32/netlink_xfrm.c b/tests-mx32/netlink_xfrm.c
index 27f62d1..862a9f6 100644
--- a/tests-mx32/netlink_xfrm.c
+++ b/tests-mx32/netlink_xfrm.c
@@ -76,9 +76,17 @@
 	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 
 	nlh.nlmsg_type = XFRM_MSG_DELSA;
-	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_REPLACE;
+	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_NONREC;
 	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
 	printf("sendto(%d, {len=%u, type=XFRM_MSG_DELSA"
+	       ", flags=NLM_F_ECHO|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+
+	nlh.nlmsg_type = XFRM_MSG_ALLOCSPI;
+	nlh.nlmsg_flags = NLM_F_ECHO | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u, type=XFRM_MSG_ALLOCSPI"
 	       ", flags=NLM_F_ECHO|%#x, seq=0, pid=0}"
 	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
 	       fd, nlh.nlmsg_len, NLM_F_REPLACE,
diff --git a/tests-mx32/nfnetlink_acct.c b/tests-mx32/nfnetlink_acct.c
new file mode 100644
index 0000000..52cff99
--- /dev/null
+++ b/tests-mx32/nfnetlink_acct.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_ACCT_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_acct.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|0xff /* NFNL_MSG_ACCT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_CREATE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_MATCH;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_MATCH, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_DEL;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_DEL"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_ACCT_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_acct.gen.test b/tests-mx32/nfnetlink_acct.gen.test
new file mode 100755
index 0000000..7db2276
--- /dev/null
+++ b/tests-mx32/nfnetlink_acct.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_acct +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_cthelper.c b/tests-mx32/nfnetlink_cthelper.c
new file mode 100644
index 0000000..47fab76
--- /dev/null
+++ b/tests-mx32/nfnetlink_cthelper.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_CTHELPER_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_cthelper.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | NFNL_MSG_CTHELPER_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|NFNL_MSG_CTHELPER_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|0xff /* NFNL_MSG_CTHELPER_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | NFNL_MSG_CTHELPER_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|NFNL_MSG_CTHELPER_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_REPLACE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | NFNL_MSG_CTHELPER_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|NFNL_MSG_CTHELPER_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTHELPER << 8 | NFNL_MSG_CTHELPER_DEL;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTHELPER<<8|NFNL_MSG_CTHELPER_DEL"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_CTHELPER_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_cthelper.gen.test b/tests-mx32/nfnetlink_cthelper.gen.test
new file mode 100755
index 0000000..661c949
--- /dev/null
+++ b/tests-mx32/nfnetlink_cthelper.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_cthelper +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_ctnetlink.c b/tests-mx32/nfnetlink_ctnetlink.c
new file mode 100644
index 0000000..a227f38
--- /dev/null
+++ b/tests-mx32/nfnetlink_ctnetlink.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_conntrack.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|IPCTNL_MSG_CT_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|0xff /* IPCTNL_MSG_CT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|IPCTNL_MSG_CT_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_REPLACE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|IPCTNL_MSG_CT_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_DELETE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK<<8|IPCTNL_MSG_CT_DELETE"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_ctnetlink.gen.test b/tests-mx32/nfnetlink_ctnetlink.gen.test
new file mode 100755
index 0000000..d4c4daa
--- /dev/null
+++ b/tests-mx32/nfnetlink_ctnetlink.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ctnetlink +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_ctnetlink_exp.c b/tests-mx32/nfnetlink_ctnetlink_exp.c
new file mode 100644
index 0000000..aa17cd5
--- /dev/null
+++ b/tests-mx32/nfnetlink_ctnetlink_exp.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_conntrack.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | IPCTNL_MSG_EXP_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|IPCTNL_MSG_EXP_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|0xff /* IPCTNL_MSG_EXP_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | IPCTNL_MSG_EXP_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_EXCL;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|IPCTNL_MSG_EXP_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_EXCL, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | IPCTNL_MSG_EXP_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ROOT;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|IPCTNL_MSG_EXP_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_ROOT, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_EXP << 8 | IPCTNL_MSG_EXP_DELETE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_EXP<<8|IPCTNL_MSG_EXP_DELETE"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_CONNTRACK_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_ctnetlink_exp.gen.test b/tests-mx32/nfnetlink_ctnetlink_exp.gen.test
new file mode 100755
index 0000000..a5d83f9
--- /dev/null
+++ b/tests-mx32/nfnetlink_ctnetlink_exp.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ctnetlink_exp +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_cttimeout.c b/tests-mx32/nfnetlink_cttimeout.c
new file mode 100644
index 0000000..e66dc24
--- /dev/null
+++ b/tests-mx32/nfnetlink_cttimeout.c
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_CTTIMEOUT_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_cttimeout.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type =
+		NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_NEW;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_NEW"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|0xff /* IPCTNL_MSG_TIMEOUT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type =
+		NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_NEW;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_APPEND;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_NEW"
+	       ", flags=NLM_F_REQUEST|NLM_F_APPEND, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type =
+		NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ATOMIC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_ATOMIC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type =
+		NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_DELETE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_DELETE"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_CTTIMEOUT_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_cttimeout.gen.test b/tests-mx32/nfnetlink_cttimeout.gen.test
new file mode 100755
index 0000000..e197f00
--- /dev/null
+++ b/tests-mx32/nfnetlink_cttimeout.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_cttimeout +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_ipset.c b/tests-mx32/nfnetlink_ipset.c
new file mode 100644
index 0000000..b0d4a7d
--- /dev/null
+++ b/tests-mx32/nfnetlink_ipset.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_IPSET_IP_SET_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/ipset/ip_set.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_IPSET << 8 | IPSET_CMD_NONE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_IPSET<<8|IPSET_CMD_NONE"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_IPSET << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_IPSET<<8|0xff /* IPSET_CMD_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_IPSET_IP_SET_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_ipset.gen.test b/tests-mx32/nfnetlink_ipset.gen.test
new file mode 100755
index 0000000..418437a
--- /dev/null
+++ b/tests-mx32/nfnetlink_ipset.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ipset +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_nft_compat.c b/tests-mx32/nfnetlink_nft_compat.c
new file mode 100644
index 0000000..072ee57
--- /dev/null
+++ b/tests-mx32/nfnetlink_nft_compat.c
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NF_TABLES_COMPAT_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nf_tables_compat.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFT_COMPAT << 8 | NFNL_MSG_COMPAT_GET;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFT_COMPAT<<8|NFNL_MSG_COMPAT_GET"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFT_COMPAT << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFT_COMPAT<<8|0xff /* NFNL_MSG_COMPAT_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFT_COMPAT << 8 | NFNL_MSG_COMPAT_GET;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFT_COMPAT<<8|NFNL_MSG_COMPAT_GET"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NF_TABLES_COMPAT_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_nft_compat.gen.test b/tests-mx32/nfnetlink_nft_compat.gen.test
new file mode 100755
index 0000000..c3dc890
--- /dev/null
+++ b/tests-mx32/nfnetlink_nft_compat.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_nft_compat +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_nftables.c b/tests-mx32/nfnetlink_nftables.c
new file mode 100644
index 0000000..66e5fe9
--- /dev/null
+++ b/tests-mx32/nfnetlink_nftables.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NF_TABLES_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nf_tables.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_NEWTABLE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|NFT_MSG_NEWTABLE"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|0xff /* NFT_MSG_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+static void
+test_nlmsg_flags(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_NEWTABLE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_REPLACE;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|NFT_MSG_NEWTABLE"
+	       ", flags=NLM_F_REQUEST|NLM_F_REPLACE, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_GETTABLE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|NFT_MSG_GETTABLE"
+	       ", flags=NLM_F_REQUEST|NLM_F_DUMP, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | NFT_MSG_DELTABLE;
+	nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_NFTABLES<<8|NFT_MSG_DELTABLE"
+	       ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+	test_nlmsg_flags(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NF_TABLES_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_nftables.gen.test b/tests-mx32/nfnetlink_nftables.gen.test
new file mode 100755
index 0000000..25e90e8
--- /dev/null
+++ b/tests-mx32/nfnetlink_nftables.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_nftables +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_osf.c b/tests-mx32/nfnetlink_osf.c
new file mode 100644
index 0000000..a6dbb7e
--- /dev/null
+++ b/tests-mx32/nfnetlink_osf.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_XT_OSF_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/ip.h>
+# include <linux/tcp.h>
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/xt_osf.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_OSF << 8 | OSF_MSG_ADD;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_OSF<<8|OSF_MSG_ADD"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_OSF << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_OSF<<8|0xff /* OSF_MSG_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_XT_OSF_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_osf.gen.test b/tests-mx32/nfnetlink_osf.gen.test
new file mode 100755
index 0000000..2689574
--- /dev/null
+++ b/tests-mx32/nfnetlink_osf.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_osf +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_queue.c b/tests-mx32/nfnetlink_queue.c
new file mode 100644
index 0000000..73ebd9a
--- /dev/null
+++ b/tests-mx32/nfnetlink_queue.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_QUEUE_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_queue.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_QUEUE << 8 | NFQNL_MSG_PACKET;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_QUEUE<<8|NFQNL_MSG_PACKET"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_QUEUE << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_QUEUE<<8|0xff /* NFQNL_MSG_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_QUEUE_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_queue.gen.test b/tests-mx32/nfnetlink_queue.gen.test
new file mode 100755
index 0000000..739fb17
--- /dev/null
+++ b/tests-mx32/nfnetlink_queue.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_queue +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_ulog.c b/tests-mx32/nfnetlink_ulog.c
new file mode 100644
index 0000000..31eb30f
--- /dev/null
+++ b/tests-mx32/nfnetlink_ulog.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_LINUX_NETFILTER_NFNETLINK_LOG_H
+
+# include <stdio.h>
+# include <sys/socket.h>
+# include "netlink.h"
+# include <linux/netfilter/nfnetlink.h>
+# include <linux/netfilter/nfnetlink_log.h>
+
+static void
+test_nlmsg_type(const int fd)
+{
+	long rc;
+	struct nlmsghdr nlh = {
+		.nlmsg_len = sizeof(nlh),
+		.nlmsg_flags = NLM_F_REQUEST,
+	};
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ULOG << 8 | NFULNL_MSG_PACKET;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ULOG<<8|NFULNL_MSG_PACKET"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+
+	nlh.nlmsg_type = NFNL_SUBSYS_ULOG << 8 | 0xff;
+	rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
+	printf("sendto(%d, {len=%u"
+	       ", type=NFNL_SUBSYS_ULOG<<8|0xff /* NFULNL_MSG_??? */"
+	       ", flags=NLM_F_REQUEST, seq=0, pid=0}"
+	       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
+	       fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	int fd = create_nl_socket(NETLINK_NETFILTER);
+
+	test_nlmsg_type(fd);
+
+	puts("+++ exited with 0 +++");
+
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_LOG_H")
+
+#endif
diff --git a/tests-mx32/nfnetlink_ulog.gen.test b/tests-mx32/nfnetlink_ulog.gen.test
new file mode 100755
index 0000000..850ebaf
--- /dev/null
+++ b/tests-mx32/nfnetlink_ulog.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ulog +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_inet_diag_msg.c b/tests-mx32/nlattr_inet_diag_msg.c
index 5666d74..ccc62ae 100644
--- a/tests-mx32/nlattr_inet_diag_msg.c
+++ b/tests-mx32/nlattr_inet_diag_msg.c
@@ -182,6 +182,11 @@
 			   INET_DIAG_MARK, pattern, mark,
 			   printf("%u", mark));
 
+	TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
+			   init_inet_diag_msg, print_inet_diag_msg,
+			   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,
diff --git a/tests-mx32/nlattr_mdba_mdb_entry.c b/tests-mx32/nlattr_mdba_mdb_entry.c
new file mode 100644
index 0000000..124fe1d
--- /dev/null
+++ b/tests-mx32/nlattr_mdba_mdb_entry.c
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <arpa/inet.h>
+# include <linux/if_bridge.h>
+# include <linux/rtnetlink.h>
+
+# ifndef MDB_TEMPORARY
+#  define MDB_TEMPORARY 0
+# endif
+# ifndef MDBA_MDB_ENTRY_INFO
+#  define MDBA_MDB_ENTRY_INFO 1
+# endif
+# ifndef MDBA_MDB_EATTR_TIMER
+#  define MDBA_MDB_EATTR_TIMER 1
+# endif
+
+const unsigned int hdrlen = sizeof(struct br_port_msg);
+
+static void
+init_br_port_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	unsigned int len = msg_len;
+
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = len,
+		.nlmsg_type = RTM_GETMDB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct br_port_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct br_port_msg, msg,
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	);
+
+	struct nlattr *nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	len -= NLMSG_SPACE(hdrlen);
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = len,
+		.nla_type = MDBA_MDB
+	);
+
+	nla = nla + 1;
+	len -= NLA_HDRLEN;
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = len,
+		.nla_type = MDBA_MDB_ENTRY
+	);
+}
+
+static void
+print_br_port_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETMDB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", ifindex=" IFINDEX_LO_STR "}"
+	       ", {{nla_len=%u, nla_type=MDBA_MDB}"
+	       ", {{nla_len=%u, nla_type=MDBA_MDB_ENTRY}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen),
+	       msg_len - NLMSG_SPACE(hdrlen) - NLA_HDRLEN);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
+	char nla_type_str[256];
+	sprintf(nla_type_str, "%#x /* MDBA_MDB_ENTRY_??? */", nla_type);
+	TEST_NLATTR_(fd, nlh0 - NLA_HDRLEN * 2, hdrlen + NLA_HDRLEN * 2,
+		     init_br_port_msg, print_br_port_msg,
+		     nla_type, nla_type_str,
+		     4, pattern, 4,
+		     print_quoted_hex(pattern, 4);
+		     printf("}}"));
+
+# ifdef HAVE_STRUCT_BR_MDB_ENTRY
+	struct br_mdb_entry entry = {
+		.ifindex = ifindex_lo(),
+		.state = MDB_TEMPORARY,
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_FLAGS
+		.flags = MDB_FLAGS_OFFLOAD,
+#  endif
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_VID
+		.vid = 0xcdef,
+#  endif
+		.addr = {
+			.proto = htons(AF_UNSPEC)
+		}
+	};
+
+	memcpy(&entry.addr.u, pattern, sizeof(entry.addr.u));
+	TEST_NESTED_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+				     init_br_port_msg, print_br_port_msg,
+				     MDBA_MDB_ENTRY_INFO, pattern, entry, 2,
+				     printf("{ifindex=" IFINDEX_LO_STR);
+				     printf(", state=MDB_TEMPORARY");
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_FLAGS
+				     printf(", flags=MDB_FLAGS_OFFLOAD");
+#  endif
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_VID
+				     PRINT_FIELD_U(", ", entry, vid);
+#  endif
+				     printf(", addr={u=");
+				     print_quoted_hex(&entry.addr.u,
+						      sizeof(entry.addr.u));
+				     printf(", proto=htons(AF_UNSPEC)}}"));
+
+	static const struct nlattr nla = {
+		.nla_len = sizeof(nla),
+		.nla_type = MDBA_MDB_EATTR_TIMER
+	};
+	char buf[NLMSG_ALIGN(sizeof(entry)) + sizeof(nla)];
+	memcpy(buf, &entry, sizeof(entry));
+	memcpy(buf + NLMSG_ALIGN(sizeof(entry)), &nla, sizeof(nla));
+	TEST_NLATTR(fd, nlh0 - NLA_HDRLEN * 2, hdrlen + NLA_HDRLEN * 2,
+		    init_br_port_msg, print_br_port_msg,
+		    MDBA_MDB_ENTRY_INFO, sizeof(buf), buf, sizeof(buf),
+		    printf("{ifindex=" IFINDEX_LO_STR);
+		    printf(", state=MDB_TEMPORARY");
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_FLAGS
+		    printf(", flags=MDB_FLAGS_OFFLOAD");
+#  endif
+#  ifdef HAVE_STRUCT_BR_MDB_ENTRY_VID
+		    PRINT_FIELD_U(", ", entry, vid);
+#  endif
+		    printf(", addr={u=");
+		    print_quoted_hex(&entry.addr.u, sizeof(entry.addr.u));
+		    printf(", proto=htons(AF_UNSPEC)}}"
+			   ", {nla_len=%u, nla_type=MDBA_MDB_EATTR_TIMER}}}",
+			   nla.nla_len));
+# endif /* HAVE_STRUCT_BR_MDB_ENTRY */
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_BR_PORT_MSG")
+
+#endif
diff --git a/tests-mx32/nlattr_mdba_mdb_entry.gen.test b/tests-mx32/nlattr_mdba_mdb_entry.gen.test
new file mode 100755
index 0000000..67253e8
--- /dev/null
+++ b/tests-mx32/nlattr_mdba_mdb_entry.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_mdba_mdb_entry +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_mdba_router_port.c b/tests-mx32/nlattr_mdba_router_port.c
new file mode 100644
index 0000000..af908cd
--- /dev/null
+++ b/tests-mx32/nlattr_mdba_router_port.c
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_BR_PORT_MSG
+
+# include <stdio.h>
+# include "test_nlattr.h"
+# include <linux/if_bridge.h>
+# include <linux/rtnetlink.h>
+
+# ifndef MDBA_ROUTER
+#  define MDBA_ROUTER 2
+# endif
+# ifndef MDBA_ROUTER_PORT
+#  define MDBA_ROUTER_PORT 1
+# endif
+# ifndef MDBA_ROUTER_PATTR_TYPE
+#  define MDBA_ROUTER_PATTR_TYPE 2
+# endif
+# ifndef MDB_RTR_TYPE_DISABLED
+#  define MDB_RTR_TYPE_DISABLED 0
+# endif
+
+const unsigned int hdrlen = sizeof(struct br_port_msg);
+
+static void
+init_br_port_msg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETMDB,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct br_port_msg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct br_port_msg, msg,
+		.family = AF_UNIX,
+		.ifindex = ifindex_lo()
+	);
+
+	struct nlattr *nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = MDBA_ROUTER
+	);
+}
+
+static void
+print_br_port_msg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETMDB, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {family=AF_UNIX"
+	       ", ifindex=" IFINDEX_LO_STR "}"
+	       ", {{nla_len=%u, nla_type=MDBA_ROUTER}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	const uint32_t 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)];
+	memcpy(buf, &ifindex, sizeof(ifindex));
+	memcpy(buf + NLMSG_ALIGN(ifindex), &nla, sizeof(nla));
+	memcpy(buf + NLMSG_ALIGN(ifindex) + NLA_HDRLEN, &type, sizeof(type));
+	TEST_NLATTR(fd, nlh0 - NLA_HDRLEN, hdrlen + NLA_HDRLEN,
+		    init_br_port_msg, print_br_port_msg,
+		    MDBA_ROUTER_PORT, sizeof(buf), buf, sizeof(buf),
+		    printf(IFINDEX_LO_STR
+			   ", {{nla_len=%u, nla_type=MDBA_ROUTER_PATTR_TYPE}"
+			   ", MDB_RTR_TYPE_DISABLED}}",
+			   nla.nla_len));
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_BR_PORT_MSG")
+
+#endif
diff --git a/tests-mx32/nlattr_mdba_router_port.gen.test b/tests-mx32/nlattr_mdba_router_port.gen.test
new file mode 100755
index 0000000..ce9ea14
--- /dev/null
+++ b/tests-mx32/nlattr_mdba_router_port.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_mdba_router_port +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_tc_stats.c b/tests-mx32/nlattr_tc_stats.c
new file mode 100644
index 0000000..dd76cc7
--- /dev/null
+++ b/tests-mx32/nlattr_tc_stats.c
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_GNET_STATS_BASIC
+
+# include <stdio.h>
+# include <stddef.h>
+# include "test_nlattr.h"
+# include <linux/gen_stats.h>
+# include <linux/rtnetlink.h>
+
+const unsigned int hdrlen = sizeof(struct tcmsg);
+
+static void
+init_tcmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETQDISC,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcmsg, msg,
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo()
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = TCA_STATS2
+	);
+}
+
+static void
+print_tcmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETQDISC, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tcm_family=AF_UNIX"
+	       ", tcm_ifindex=" IFINDEX_LO_STR
+	       ", tcm_handle=0, tcm_parent=0, tcm_info=0}"
+	       ", {{nla_len=%u, nla_type=TCA_STATS2}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+	static const struct gnet_stats_basic sb = {
+		.bytes = 0xabcdebdafefeadeb,
+		.packets = 0xbdcdeabf
+	};
+	char buf[offsetofend(struct gnet_stats_basic, packets)];
+	memcpy(buf, &sb, sizeof(buf));
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STATS_BASIC, pattern, buf,
+				  PRINT_FIELD_U("{", sb, bytes);
+				  PRINT_FIELD_U(", ", sb, packets);
+				  printf("}"));
+
+#ifdef HAVE_STRUCT_GNET_STATS_RATE_EST
+	static const struct gnet_stats_rate_est est = {
+		.bps = 0xebcdaebd,
+		.pps = 0xabdceade,
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STATS_RATE_EST, pattern, est,
+				  PRINT_FIELD_U("{", est, bps);
+				  PRINT_FIELD_U(", ", est, pps);
+				  printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_GNET_STATS_QUEUE
+	static const struct gnet_stats_queue qstats = {
+		.qlen = 0xabcdeabd,
+		.backlog = 0xbcdaebad,
+		.drops = 0xcdbeaedb,
+		.requeues = 0xdebaefab,
+		.overlimits = 0xefaebade
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STATS_QUEUE, pattern, qstats,
+				  PRINT_FIELD_U("{", qstats, qlen);
+				  PRINT_FIELD_U(", ", qstats, backlog);
+				  PRINT_FIELD_U(", ", qstats, drops);
+				  PRINT_FIELD_U(", ", qstats, requeues);
+				  PRINT_FIELD_U(", ", qstats, overlimits);
+				  printf("}"));
+#endif
+
+#ifdef HAVE_STRUCT_GNET_STATS_RATE_EST64
+	static const struct gnet_stats_rate_est64 est64 = {
+		.bps = 0xacbdcdefafecaebf,
+		.pps = 0xcdabeabdfeabceaf
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STATS_RATE_EST64, pattern, est64,
+				  PRINT_FIELD_U("{", est64, bps);
+				  PRINT_FIELD_U(", ", est64, pps);
+				  printf("}"));
+#endif
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_GNET_STATS_BASIC")
+
+#endif
diff --git a/tests-mx32/nlattr_tc_stats.gen.test b/tests-mx32/nlattr_tc_stats.gen.test
new file mode 100755
index 0000000..72780d4
--- /dev/null
+++ b/tests-mx32/nlattr_tc_stats.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tc_stats +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_tca_stab.c b/tests-mx32/nlattr_tca_stab.c
new file mode 100644
index 0000000..de6d356
--- /dev/null
+++ b/tests-mx32/nlattr_tca_stab.c
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include "test_nlattr.h"
+#include <linux/pkt_sched.h>
+#include <linux/rtnetlink.h>
+
+#ifndef TCA_STAB
+# define TCA_STAB 8
+#endif
+#ifndef TCA_STAB_DATA
+# define TCA_STAB_DATA 2
+#endif
+
+const unsigned int hdrlen = sizeof(struct tcmsg);
+
+static void
+init_tcmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+	SET_STRUCT(struct nlmsghdr, nlh,
+		.nlmsg_len = msg_len,
+		.nlmsg_type = RTM_GETQDISC,
+		.nlmsg_flags = NLM_F_DUMP
+	);
+
+	struct tcmsg *const msg = NLMSG_DATA(nlh);
+	SET_STRUCT(struct tcmsg, msg,
+		.tcm_family = AF_UNIX,
+		.tcm_ifindex = ifindex_lo()
+	);
+
+	struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+	SET_STRUCT(struct nlattr, nla,
+		.nla_len = msg_len - NLMSG_SPACE(hdrlen),
+		.nla_type = TCA_STAB
+	);
+}
+
+static void
+print_tcmsg(const unsigned int msg_len)
+{
+	printf("{len=%u, type=RTM_GETQDISC, flags=NLM_F_DUMP"
+	       ", seq=0, pid=0}, {tcm_family=AF_UNIX"
+	       ", tcm_ifindex=" IFINDEX_LO_STR
+	       ", tcm_handle=0, tcm_parent=0, tcm_info=0}"
+	       ", {{nla_len=%u, nla_type=TCA_STAB}",
+	       msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+static void
+print_uint16(const uint16_t *p)
+{
+	printf("%u", *p);
+}
+
+int
+main(void)
+{
+	skip_if_unavailable("/proc/self/fd/");
+
+	const int fd = create_nl_socket(NETLINK_ROUTE);
+	void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));
+
+	static char pattern[4096];
+	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
+
+#ifdef HAVE_STRUCT_TC_SIZESPEC
+	static const struct tc_sizespec s = {
+		.cell_log = 0xab,
+		.size_log = 0xcd,
+		.cell_align = 0xefab,
+		.overhead = 0xcdadeefa,
+		.linklayer = 0xefbaafeb,
+		.mpu = 0xfebfaefb,
+		.mtu = 0xacdbefab,
+		.tsize = 0xbdeaabed
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_tcmsg, print_tcmsg,
+				  TCA_STAB_BASE, pattern, s,
+				  PRINT_FIELD_U("{", s, cell_log);
+				  PRINT_FIELD_U(", ", s, size_log);
+				  PRINT_FIELD_D(", ", s, cell_align);
+				  PRINT_FIELD_D(", ", s, overhead);
+				  PRINT_FIELD_U(", ", s, linklayer);
+				  PRINT_FIELD_U(", ", s, mpu);
+				  PRINT_FIELD_U(", ", s, mtu);
+				  PRINT_FIELD_U(", ", s, tsize);
+				  printf("}"));
+#endif
+
+	uint16_t data[2] = { 0xacbd, 0xefba };
+	TEST_NESTED_NLATTR_ARRAY(fd, nlh0, hdrlen,
+				 init_tcmsg, print_tcmsg,
+				 TCA_STAB_DATA, pattern, data, print_uint16);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
diff --git a/tests-mx32/nlattr_tca_stab.gen.test b/tests-mx32/nlattr_tca_stab.gen.test
new file mode 100755
index 0000000..14cd1a5
--- /dev/null
+++ b/tests-mx32/nlattr_tca_stab.gen.test
@@ -0,0 +1,3 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tca_stab +netlink_sock_diag.test); do not edit.
+. "${srcdir=.}/netlink_sock_diag.test"
diff --git